aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libxcb/configure.ac556
-rw-r--r--libxcb/src/xcb_util.c939
-rw-r--r--mesalib/docs/download.html83
-rw-r--r--mesalib/docs/install.html104
-rw-r--r--mesalib/src/mesa/main/renderbuffer.c15
-rw-r--r--mesalib/src/mesa/main/texformat.c26
-rw-r--r--mesalib/src/mesa/state_tracker/st_cb_fbo.c1307
-rw-r--r--mesalib/src/mesa/state_tracker/st_draw.c127
-rw-r--r--xkbcomp/xkbscan.c1493
-rw-r--r--xorg-server/Xext/geext.c524
-rw-r--r--xorg-server/Xext/xtest.c1381
-rw-r--r--xorg-server/Xi/exevents.c8
-rw-r--r--xorg-server/Xi/extinit.c7
-rw-r--r--xorg-server/Xi/getprop.c374
-rw-r--r--xorg-server/Xi/getselev.c356
-rw-r--r--xorg-server/Xi/xiquerydevice.c7
-rw-r--r--xorg-server/dix/colormap.c5540
-rw-r--r--xorg-server/dix/dixfonts.c18
-rw-r--r--xorg-server/dix/eventconvert.c1537
-rw-r--r--xorg-server/dix/extension.c721
-rw-r--r--xorg-server/fb/fboverlay.c8
-rw-r--r--xorg-server/fb/fbscreen.c4
-rw-r--r--xorg-server/hw/xfree86/common/xf86Config.c32
-rw-r--r--xorg-server/hw/xfree86/common/xf86Helper.c1
-rw-r--r--xorg-server/hw/xfree86/common/xf86Init.c2996
-rw-r--r--xorg-server/hw/xfree86/dri2/dri2.c2459
-rw-r--r--xorg-server/hw/xfree86/loader/loadmod.c2516
-rw-r--r--xorg-server/mi/micmap.c1338
-rw-r--r--xorg-server/mi/midispcur.c10
-rw-r--r--xorg-server/mi/mipointer.c1395
-rw-r--r--xorg-server/mi/mispans.c1052
-rw-r--r--xorg-server/mi/mizerline.c760
-rw-r--r--xorg-server/os/utils.c3635
-rw-r--r--xorg-server/render/render.c25
-rw-r--r--xorg-server/xfixes/region.c1842
-rw-r--r--xorg-server/xkb/XKBGAlloc.c64
-rw-r--r--xorg-server/xkb/ddxList.c604
-rw-r--r--xorg-server/xkb/xkbUtils.c129
-rw-r--r--xorg-server/xkb/xkbgeom.h20
-rw-r--r--xorg-server/xkeyboard-config/NEWS3
-rw-r--r--xorg-server/xkeyboard-config/configure.in2
-rw-r--r--xorg-server/xkeyboard-config/po/ca.po4171
-rw-r--r--xorg-server/xkeyboard-config/po/da.po3809
-rw-r--r--xorg-server/xkeyboard-config/po/de.po3841
-rw-r--r--xorg-server/xkeyboard-config/po/es.po4208
-rw-r--r--xorg-server/xkeyboard-config/po/fr.po4506
-rw-r--r--xorg-server/xkeyboard-config/po/it.po7887
-rw-r--r--xorg-server/xkeyboard-config/po/ko.po6928
-rw-r--r--xorg-server/xkeyboard-config/po/nl.po2049
-rw-r--r--xorg-server/xkeyboard-config/po/pl.po3745
-rw-r--r--xorg-server/xkeyboard-config/po/ru.po4165
-rw-r--r--xorg-server/xkeyboard-config/po/sv.po4416
-rw-r--r--xorg-server/xkeyboard-config/po/uk.po6560
-rw-r--r--xorg-server/xkeyboard-config/po/xkeyboard-config.pot6872
-rw-r--r--xorg-server/xkeyboard-config/po/zh_CN.po4048
-rw-r--r--xorg-server/xkeyboard-config/rules/base.xml.in202
-rw-r--r--xorg-server/xkeyboard-config/symbols/ad62
-rw-r--r--xorg-server/xkeyboard-config/symbols/af13
-rw-r--r--xorg-server/xkeyboard-config/symbols/al82
-rw-r--r--xorg-server/xkeyboard-config/symbols/am480
-rw-r--r--xorg-server/xkeyboard-config/symbols/ara552
-rw-r--r--xorg-server/xkeyboard-config/symbols/at68
-rw-r--r--xorg-server/xkeyboard-config/symbols/az184
-rw-r--r--xorg-server/xkeyboard-config/symbols/ba80
-rw-r--r--xorg-server/xkeyboard-config/symbols/bd193
-rw-r--r--xorg-server/xkeyboard-config/symbols/be464
-rw-r--r--xorg-server/xkeyboard-config/symbols/bg722
-rw-r--r--xorg-server/xkeyboard-config/symbols/br634
-rw-r--r--xorg-server/xkeyboard-config/symbols/bt174
-rw-r--r--xorg-server/xkeyboard-config/symbols/by102
-rw-r--r--xorg-server/xkeyboard-config/symbols/ca1054
-rw-r--r--xorg-server/xkeyboard-config/symbols/cd138
-rw-r--r--xorg-server/xkeyboard-config/symbols/cn432
-rw-r--r--xorg-server/xkeyboard-config/symbols/cz340
-rw-r--r--xorg-server/xkeyboard-config/symbols/de1192
-rw-r--r--xorg-server/xkeyboard-config/symbols/dk144
-rw-r--r--xorg-server/xkeyboard-config/symbols/ee200
-rw-r--r--xorg-server/xkeyboard-config/symbols/fi412
-rw-r--r--xorg-server/xkeyboard-config/symbols/fo96
-rw-r--r--xorg-server/xkeyboard-config/symbols/fr2042
-rw-r--r--xorg-server/xkeyboard-config/symbols/ge544
-rw-r--r--xorg-server/xkeyboard-config/symbols/gh302
-rw-r--r--xorg-server/xkeyboard-config/symbols/gn122
-rw-r--r--xorg-server/xkeyboard-config/symbols/gr388
-rw-r--r--xorg-server/xkeyboard-config/symbols/hr146
-rw-r--r--xorg-server/xkeyboard-config/symbols/hu862
-rw-r--r--xorg-server/xkeyboard-config/symbols/il502
-rw-r--r--xorg-server/xkeyboard-config/symbols/in46
-rw-r--r--xorg-server/xkeyboard-config/symbols/iq66
-rw-r--r--xorg-server/xkeyboard-config/symbols/ir14
-rw-r--r--xorg-server/xkeyboard-config/symbols/is398
-rw-r--r--xorg-server/xkeyboard-config/symbols/it514
-rw-r--r--xorg-server/xkeyboard-config/symbols/ma648
-rw-r--r--xorg-server/xkeyboard-config/symbols/nl300
-rw-r--r--xorg-server/xkeyboard-config/symbols/pt440
-rw-r--r--xorg-server/xkeyboard-config/symbols/ro46
-rw-r--r--xorg-server/xkeyboard-config/symbols/tr706
-rw-r--r--xorg-server/xkeyboard-config/symbols/ua638
-rw-r--r--xorg-server/xkeyboard-config/symbols/us36
-rw-r--r--xorg-server/xkeyboard-config/symbols/uz218
100 files changed, 65691 insertions, 52530 deletions
diff --git a/libxcb/configure.ac b/libxcb/configure.ac
index f14c9b82e..7e88481bf 100644
--- a/libxcb/configure.ac
+++ b/libxcb/configure.ac
@@ -1,276 +1,280 @@
-# -*- Autoconf -*-
-# Process this file with autoconf to produce a configure script.
-
-AC_PREREQ(2.57)
-AC_INIT([libxcb],
- 1.7,
- [xcb@lists.freedesktop.org])
-AC_CONFIG_SRCDIR([xcb.pc.in])
-AM_INIT_AUTOMAKE([foreign dist-bzip2])
-m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
-
-AM_PATH_PYTHON([2.5])
-
-PKG_CHECK_MODULES(CHECK, [check >= 0.9.4], [HAVE_CHECK=yes], [HAVE_CHECK=no])
-AM_CONDITIONAL(HAVE_CHECK, test x$HAVE_CHECK = xyes)
-
-AC_CONFIG_HEADERS([src/config.h])
-
-AC_LIBTOOL_WIN32_DLL
-AC_PROG_LIBTOOL
-AC_PROG_CC
-
-AC_PATH_PROG(XSLTPROC, xsltproc, no)
-if test "$XSLTPROC" = "no"; then
- AC_MSG_ERROR([XCB requires xsltproc.])
-fi
-
-HTML_CHECK_RESULT=false
-if test x"$HAVE_CHECK" = xyes; then
- if test x"$XSLTPROC" != xno; then
- HTML_CHECK_RESULT=true
- fi
-fi
-AC_SUBST(HTML_CHECK_RESULT)
-
-# Checks for pkg-config packages
-PKG_CHECK_MODULES(XCBPROTO, xcb-proto >= 1.6)
-NEEDED="pthread-stubs xau >= 0.99.2"
-PKG_CHECK_MODULES(NEEDED, $NEEDED)
-
-have_xdmcp="no"
-PKG_CHECK_MODULES(XDMCP, xdmcp,
- AC_CHECK_LIB(Xdmcp, XdmcpWrap,
- [
- AC_DEFINE(HASXDMAUTH,1,[Has Wraphelp.c needed for XDM AUTH protocols])
- NEEDED="$NEEDED xdmcp"
- have_xdmcp="yes"
- ],
- [
- XDMCP_CFLAGS=
- XDMCP_LIBS=
- ], [$XDMCP_LIBS]),
- [AC_MSG_RESULT(no)])
-
-AC_SUBST(NEEDED)
-
-# Find the xcb-proto protocol descriptions
-AC_MSG_CHECKING(XCBPROTO_XCBINCLUDEDIR)
-XCBPROTO_XCBINCLUDEDIR=`$PKG_CONFIG --variable=xcbincludedir xcb-proto`
-AC_MSG_RESULT($XCBPROTO_XCBINCLUDEDIR)
-AC_SUBST(XCBPROTO_XCBINCLUDEDIR)
-
-# Find the xcb-proto version
-XCBPROTO_VERSION=`$PKG_CONFIG --modversion xcb-proto`
-AC_SUBST(XCBPROTO_VERSION)
-
-# Find the xcbgen Python package
-AC_MSG_CHECKING(XCBPROTO_XCBPYTHONDIR)
-XCBPROTO_XCBPYTHONDIR=`$PKG_CONFIG --variable=pythondir xcb-proto`
-AC_MSG_RESULT($XCBPROTO_XCBPYTHONDIR)
-AC_SUBST(XCBPROTO_XCBPYTHONDIR)
-
-AC_HEADER_STDC
-AC_SEARCH_LIBS(getaddrinfo, socket)
-AC_SEARCH_LIBS(connect, socket)
-
-have_win32="no"
-lt_enable_auto_import=""
-case $host_os in
-mingw*)
- have_win32="yes"
- lt_enable_auto_import="-Wl,--enable-auto-import"
- ;;
-linux*)
- AC_DEFINE([HAVE_ABSTRACT_SOCKETS], 1, [Define if your platform supports abstract sockets])
- ;;
-esac
-
-AC_SUBST(lt_enable_auto_import)
-AM_CONDITIONAL([XCB_HAVE_WIN32], [test "x${have_win32}" = "xyes"])
-
-dnl define buffer queue size
-AC_ARG_WITH([queue-size],
- AC_HELP_STRING([--with-queue-size=SIZE],
- [Set the XCB buffer queue size (default is 16384)]),
- [xcb_queue_buffer_size="$withval"],
- [xcb_queue_buffer_size=16384])
-AC_DEFINE_UNQUOTED(XCB_QUEUE_BUFFER_SIZE, [$xcb_queue_buffer_size],
- [XCB buffer queue size])
-
-dnl check for the sockaddr_un.sun_len member
-AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
- [AC_DEFINE(HAVE_SOCKADDR_SUN_LEN,1,[Have the sockaddr_un.sun_len member.])],
- [],
- [ #include <sys/types.h>
- #include <sys/un.h>
- ])
-
-xcbincludedir='${includedir}/xcb'
-AC_SUBST(xcbincludedir)
-
-if test "x$GCC" = xyes ; then
- CWARNFLAGS="-Wall -pedantic -Wpointer-arith \
- -Wstrict-prototypes -Wmissing-declarations -Wnested-externs"
-else
- AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
- if test "x$SUNCC" = "xyes"; then
- CWARNFLAGS="-v"
- fi
-fi
-AC_SUBST(CWARNFLAGS)
-
-XCB_CHECK_VISIBILITY()
-
-# htmldir is not defined prior to autoconf 2.59c, so on earlier versions
-# set an equivalent value.
-AC_PREREQ([2.59c], [], [AC_SUBST([htmldir], [m4_ifset([AC_PACKAGE_TARNAME],
- ['${datadir}/doc/${PACKAGE_TARNAME}'],
- ['${datadir}/doc/${PACKAGE}'])
-])])
-
-XCB_CHECK_DOXYGEN()
-
-case $host_os in
- # darwin through Snow Leopard has poll() but can't be used to poll character devices.
- darwin@<:@789@:>@*|darwin10*) ;;
- darwin*)
- _ac_xorg_macosx_version_min=""
- if echo $CPPFLAGS $CFLAGS | grep -q mmacosx-version-min ; then
- _ac_xorg_macosx_version_min=`echo $CPPFLAGS $CFLAGS | sed 's/^.*-mmacosx-version-min=\(@<:@^ @:>@*\).*$/\1/'`
- else
- _ac_xorg_macosx_version_min=$MACOSX_DEPLOYMENT_TARGET
- fi
- case $_ac_xorg_macosx_version_min in
- 10.@<:@0123456@:>@|10.@<:@0123456@:>@.*) ;;
- *)
- AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], )
- ;;
- esac
- unset _ac_xorg_macosx_version_min
- ;;
- *)
- AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], )
- ;;
-esac
-
-XCB_EXTENSION(Composite, "yes")
-XCB_EXTENSION(Damage, "yes")
-XCB_EXTENSION(DPMS, "yes")
-XCB_EXTENSION(DRI2, "yes")
-XCB_EXTENSION(GLX, "yes")
-XCB_EXTENSION(RandR, "yes")
-XCB_EXTENSION(Record, "yes")
-XCB_EXTENSION(Render, "yes")
-XCB_EXTENSION(Resource, "yes")
-XCB_EXTENSION(Screensaver, "yes")
-XCB_EXTENSION(Shape, "yes")
-XCB_EXTENSION(Shm, "yes")
-XCB_EXTENSION(Sync, "yes")
-XCB_EXTENSION(Xevie, "yes")
-XCB_EXTENSION(XFixes, "yes")
-XCB_EXTENSION(XFree86-DRI, "yes")
-XCB_EXTENSION(Xinerama, "yes")
-XCB_EXTENSION(XInput, "no")
-XCB_EXTENSION(XKB, "no")
-XCB_EXTENSION(Xprint, "yes")
-XCB_EXTENSION(SELinux, "no")
-XCB_EXTENSION(XTest, "yes")
-XCB_EXTENSION(Xv, "yes")
-XCB_EXTENSION(XvMC, "yes")
-
-AC_ARG_WITH(launchd, AS_HELP_STRING([--with-launchd], [Build with support for Apple's launchd (default: auto)]), [LAUNCHD=$withval], [LAUNCHD=auto])
-if test "x$LAUNCHD" = xauto; then
- unset LAUNCHD
- AC_CHECK_PROG(LAUNCHD, [launchd], [yes], [no], [$PATH$PATH_SEPARATOR/sbin])
-fi
-
-if test "x$LAUNCHD" = xyes ; then
- AC_DEFINE(HAVE_LAUNCHD, 1, [launchd support available])
-fi
-
-AC_CONFIG_FILES([
-Makefile
-doc/Makefile
-src/Makefile
-tests/Makefile
-])
-
-AC_CONFIG_FILES([
-xcb.pc
-xcb-composite.pc
-xcb-damage.pc
-xcb-dpms.pc
-xcb-dri2.pc
-xcb-glx.pc
-xcb-randr.pc
-xcb-record.pc
-xcb-render.pc
-xcb-res.pc
-xcb-screensaver.pc
-xcb-shape.pc
-xcb-shm.pc
-xcb-sync.pc
-xcb-xevie.pc
-xcb-xf86dri.pc
-xcb-xfixes.pc
-xcb-xinerama.pc
-xcb-xinput.pc
-xcb-xkb.pc
-xcb-xprint.pc
-xcb-xselinux.pc
-xcb-xtest.pc
-xcb-xv.pc
-xcb-xvmc.pc
-])
-
-AC_CONFIG_FILES([
-doc/xcb.doxygen
-])
-
-AC_OUTPUT
-
-dnl Configuration output
-
-echo ""
-echo " Package: ${PACKAGE_NAME} ${PACKAGE_VERSION}"
-echo ""
-echo " Configuration"
-echo " XDM support.........: ${have_xdmcp}"
-echo " Build unit tests....: ${HAVE_CHECK}"
-echo " XCB buffer size.....: ${xcb_queue_buffer_size}"
-echo ""
-echo " X11 extensions"
-echo " Composite...........: ${BUILD_COMPOSITE}"
-echo " Damage..............: ${BUILD_DAMAGE}"
-echo " Dpms................: ${BUILD_DPMS}"
-echo " Dri2................: ${BUILD_DRI2}"
-echo " Glx.................: ${BUILD_GLX}"
-echo " Randr...............: ${BUILD_RANDR}"
-echo " Record..............: ${BUILD_RECORD}"
-echo " Render..............: ${BUILD_RENDER}"
-echo " Resource............: ${BUILD_RESOURCE}"
-echo " Screensaver.........: ${BUILD_SCREENSAVER}"
-echo " selinux.............: ${BUILD_SELINUX}"
-echo " Shape...............: ${BUILD_SHAPE}"
-echo " Shm.................: ${BUILD_SHM}"
-echo " Sync................: ${BUILD_SYNC}"
-echo " Xevie...............: ${BUILD_XEVIE}"
-echo " Xfixes..............: ${BUILD_XFIXES}"
-echo " Xfree86-dri.........: ${BUILD_XFREE86_DRI}"
-echo " xinerama............: ${BUILD_XINERAMA}"
-echo " xinput..............: ${BUILD_XINPUT}"
-echo " xkb.................: ${BUILD_XKB}"
-echo " xprint..............: ${BUILD_XPRINT}"
-echo " xtest...............: ${BUILD_XTEST}"
-echo " xv..................: ${BUILD_XV}"
-echo " xvmc................: ${BUILD_XVMC}"
-echo ""
-echo " Used CFLAGS:"
-echo " CPPFLAGS............: ${CPPFLAGS}"
-echo " CFLAGS..............: ${CFLAGS}"
-echo " Warning CFLAGS......: ${CWARNFLAGS}"
-echo ""
-echo " Installation:"
-echo " Prefix..............: ${prefix}"
-echo ""
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.57)
+AC_INIT([libxcb],
+ 1.7,
+ [xcb@lists.freedesktop.org])
+AC_CONFIG_SRCDIR([xcb.pc.in])
+AM_INIT_AUTOMAKE([foreign dist-bzip2])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+
+AM_PATH_PYTHON([2.5])
+
+PKG_CHECK_MODULES(CHECK, [check >= 0.9.4], [HAVE_CHECK=yes], [HAVE_CHECK=no])
+AM_CONDITIONAL(HAVE_CHECK, test x$HAVE_CHECK = xyes)
+
+AC_CONFIG_HEADERS([src/config.h])
+
+AC_LIBTOOL_WIN32_DLL
+AC_PROG_LIBTOOL
+AC_PROG_CC
+
+AC_PATH_PROG(XSLTPROC, xsltproc, no)
+if test "$XSLTPROC" = "no"; then
+ AC_MSG_ERROR([XCB requires xsltproc.])
+fi
+
+HTML_CHECK_RESULT=false
+if test x"$HAVE_CHECK" = xyes; then
+ if test x"$XSLTPROC" != xno; then
+ HTML_CHECK_RESULT=true
+ fi
+fi
+AC_SUBST(HTML_CHECK_RESULT)
+
+# Checks for pkg-config packages
+PKG_CHECK_MODULES(XCBPROTO, xcb-proto >= 1.6)
+NEEDED="pthread-stubs xau >= 0.99.2"
+PKG_CHECK_MODULES(NEEDED, $NEEDED)
+
+have_xdmcp="no"
+PKG_CHECK_MODULES(XDMCP, xdmcp,
+ AC_CHECK_LIB(Xdmcp, XdmcpWrap,
+ [
+ AC_DEFINE(HASXDMAUTH,1,[Has Wraphelp.c needed for XDM AUTH protocols])
+ NEEDED="$NEEDED xdmcp"
+ have_xdmcp="yes"
+ ],
+ [
+ XDMCP_CFLAGS=
+ XDMCP_LIBS=
+ ], [$XDMCP_LIBS]),
+ [AC_MSG_RESULT(no)])
+
+AC_SUBST(NEEDED)
+
+# Find the xcb-proto protocol descriptions
+AC_MSG_CHECKING(XCBPROTO_XCBINCLUDEDIR)
+XCBPROTO_XCBINCLUDEDIR=`$PKG_CONFIG --variable=xcbincludedir xcb-proto`
+AC_MSG_RESULT($XCBPROTO_XCBINCLUDEDIR)
+AC_SUBST(XCBPROTO_XCBINCLUDEDIR)
+
+# Find the xcb-proto version
+XCBPROTO_VERSION=`$PKG_CONFIG --modversion xcb-proto`
+AC_SUBST(XCBPROTO_VERSION)
+
+# Find the xcbgen Python package
+AC_MSG_CHECKING(XCBPROTO_XCBPYTHONDIR)
+XCBPROTO_XCBPYTHONDIR=`$PKG_CONFIG --variable=pythondir xcb-proto`
+AC_MSG_RESULT($XCBPROTO_XCBPYTHONDIR)
+AC_SUBST(XCBPROTO_XCBPYTHONDIR)
+
+AC_HEADER_STDC
+AC_SEARCH_LIBS(getaddrinfo, socket)
+AC_SEARCH_LIBS(connect, socket)
+
+have_win32="no"
+lt_enable_auto_import=""
+case $host_os in
+mingw*)
+ have_win32="yes"
+ lt_enable_auto_import="-Wl,--enable-auto-import"
+ ;;
+linux*)
+ AC_DEFINE([HAVE_ABSTRACT_SOCKETS], 1, [Define if your platform supports abstract sockets])
+ ;;
+esac
+
+AC_SUBST(lt_enable_auto_import)
+AM_CONDITIONAL([XCB_HAVE_WIN32], [test "x${have_win32}" = "xyes"])
+
+dnl define buffer queue size
+AC_ARG_WITH([queue-size],
+ AC_HELP_STRING([--with-queue-size=SIZE],
+ [Set the XCB buffer queue size (default is 16384)]),
+ [xcb_queue_buffer_size="$withval"],
+ [xcb_queue_buffer_size=16384])
+AC_DEFINE_UNQUOTED(XCB_QUEUE_BUFFER_SIZE, [$xcb_queue_buffer_size],
+ [XCB buffer queue size])
+
+dnl check for the sockaddr_un.sun_len member
+AC_CHECK_MEMBER([struct sockaddr_un.sun_len],
+ [AC_DEFINE(HAVE_SOCKADDR_SUN_LEN,1,[Have the sockaddr_un.sun_len member.])],
+ [],
+ [ #include <sys/types.h>
+ #include <sys/un.h>
+ ])
+
+dnl check for support for Solaris Trusted Extensions
+AC_CHECK_HEADERS([tsol/label.h])
+AC_CHECK_FUNCS([is_system_labeled])
+
+xcbincludedir='${includedir}/xcb'
+AC_SUBST(xcbincludedir)
+
+if test "x$GCC" = xyes ; then
+ CWARNFLAGS="-Wall -pedantic -Wpointer-arith \
+ -Wstrict-prototypes -Wmissing-declarations -Wnested-externs"
+else
+ AC_CHECK_DECL([__SUNPRO_C], [SUNCC="yes"], [SUNCC="no"])
+ if test "x$SUNCC" = "xyes"; then
+ CWARNFLAGS="-v"
+ fi
+fi
+AC_SUBST(CWARNFLAGS)
+
+XCB_CHECK_VISIBILITY()
+
+# htmldir is not defined prior to autoconf 2.59c, so on earlier versions
+# set an equivalent value.
+AC_PREREQ([2.59c], [], [AC_SUBST([htmldir], [m4_ifset([AC_PACKAGE_TARNAME],
+ ['${datadir}/doc/${PACKAGE_TARNAME}'],
+ ['${datadir}/doc/${PACKAGE}'])
+])])
+
+XCB_CHECK_DOXYGEN()
+
+case $host_os in
+ # darwin through Snow Leopard has poll() but can't be used to poll character devices.
+ darwin@<:@789@:>@*|darwin10*) ;;
+ darwin*)
+ _ac_xorg_macosx_version_min=""
+ if echo $CPPFLAGS $CFLAGS | grep -q mmacosx-version-min ; then
+ _ac_xorg_macosx_version_min=`echo $CPPFLAGS $CFLAGS | sed 's/^.*-mmacosx-version-min=\(@<:@^ @:>@*\).*$/\1/'`
+ else
+ _ac_xorg_macosx_version_min=$MACOSX_DEPLOYMENT_TARGET
+ fi
+ case $_ac_xorg_macosx_version_min in
+ 10.@<:@0123456@:>@|10.@<:@0123456@:>@.*) ;;
+ *)
+ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], )
+ ;;
+ esac
+ unset _ac_xorg_macosx_version_min
+ ;;
+ *)
+ AC_CHECK_FUNC(poll, [AC_DEFINE(USE_POLL, 1, [poll() function is available])], )
+ ;;
+esac
+
+XCB_EXTENSION(Composite, "yes")
+XCB_EXTENSION(Damage, "yes")
+XCB_EXTENSION(DPMS, "yes")
+XCB_EXTENSION(DRI2, "yes")
+XCB_EXTENSION(GLX, "yes")
+XCB_EXTENSION(RandR, "yes")
+XCB_EXTENSION(Record, "yes")
+XCB_EXTENSION(Render, "yes")
+XCB_EXTENSION(Resource, "yes")
+XCB_EXTENSION(Screensaver, "yes")
+XCB_EXTENSION(Shape, "yes")
+XCB_EXTENSION(Shm, "yes")
+XCB_EXTENSION(Sync, "yes")
+XCB_EXTENSION(Xevie, "yes")
+XCB_EXTENSION(XFixes, "yes")
+XCB_EXTENSION(XFree86-DRI, "yes")
+XCB_EXTENSION(Xinerama, "yes")
+XCB_EXTENSION(XInput, "no")
+XCB_EXTENSION(XKB, "no")
+XCB_EXTENSION(Xprint, "yes")
+XCB_EXTENSION(SELinux, "no")
+XCB_EXTENSION(XTest, "yes")
+XCB_EXTENSION(Xv, "yes")
+XCB_EXTENSION(XvMC, "yes")
+
+AC_ARG_WITH(launchd, AS_HELP_STRING([--with-launchd], [Build with support for Apple's launchd (default: auto)]), [LAUNCHD=$withval], [LAUNCHD=auto])
+if test "x$LAUNCHD" = xauto; then
+ unset LAUNCHD
+ AC_CHECK_PROG(LAUNCHD, [launchd], [yes], [no], [$PATH$PATH_SEPARATOR/sbin])
+fi
+
+if test "x$LAUNCHD" = xyes ; then
+ AC_DEFINE(HAVE_LAUNCHD, 1, [launchd support available])
+fi
+
+AC_CONFIG_FILES([
+Makefile
+doc/Makefile
+src/Makefile
+tests/Makefile
+])
+
+AC_CONFIG_FILES([
+xcb.pc
+xcb-composite.pc
+xcb-damage.pc
+xcb-dpms.pc
+xcb-dri2.pc
+xcb-glx.pc
+xcb-randr.pc
+xcb-record.pc
+xcb-render.pc
+xcb-res.pc
+xcb-screensaver.pc
+xcb-shape.pc
+xcb-shm.pc
+xcb-sync.pc
+xcb-xevie.pc
+xcb-xf86dri.pc
+xcb-xfixes.pc
+xcb-xinerama.pc
+xcb-xinput.pc
+xcb-xkb.pc
+xcb-xprint.pc
+xcb-xselinux.pc
+xcb-xtest.pc
+xcb-xv.pc
+xcb-xvmc.pc
+])
+
+AC_CONFIG_FILES([
+doc/xcb.doxygen
+])
+
+AC_OUTPUT
+
+dnl Configuration output
+
+echo ""
+echo " Package: ${PACKAGE_NAME} ${PACKAGE_VERSION}"
+echo ""
+echo " Configuration"
+echo " XDM support.........: ${have_xdmcp}"
+echo " Build unit tests....: ${HAVE_CHECK}"
+echo " XCB buffer size.....: ${xcb_queue_buffer_size}"
+echo ""
+echo " X11 extensions"
+echo " Composite...........: ${BUILD_COMPOSITE}"
+echo " Damage..............: ${BUILD_DAMAGE}"
+echo " Dpms................: ${BUILD_DPMS}"
+echo " Dri2................: ${BUILD_DRI2}"
+echo " Glx.................: ${BUILD_GLX}"
+echo " Randr...............: ${BUILD_RANDR}"
+echo " Record..............: ${BUILD_RECORD}"
+echo " Render..............: ${BUILD_RENDER}"
+echo " Resource............: ${BUILD_RESOURCE}"
+echo " Screensaver.........: ${BUILD_SCREENSAVER}"
+echo " selinux.............: ${BUILD_SELINUX}"
+echo " Shape...............: ${BUILD_SHAPE}"
+echo " Shm.................: ${BUILD_SHM}"
+echo " Sync................: ${BUILD_SYNC}"
+echo " Xevie...............: ${BUILD_XEVIE}"
+echo " Xfixes..............: ${BUILD_XFIXES}"
+echo " Xfree86-dri.........: ${BUILD_XFREE86_DRI}"
+echo " xinerama............: ${BUILD_XINERAMA}"
+echo " xinput..............: ${BUILD_XINPUT}"
+echo " xkb.................: ${BUILD_XKB}"
+echo " xprint..............: ${BUILD_XPRINT}"
+echo " xtest...............: ${BUILD_XTEST}"
+echo " xv..................: ${BUILD_XV}"
+echo " xvmc................: ${BUILD_XVMC}"
+echo ""
+echo " Used CFLAGS:"
+echo " CPPFLAGS............: ${CPPFLAGS}"
+echo " CFLAGS..............: ${CFLAGS}"
+echo " Warning CFLAGS......: ${CWARNFLAGS}"
+echo ""
+echo " Installation:"
+echo " Prefix..............: ${prefix}"
+echo ""
diff --git a/libxcb/src/xcb_util.c b/libxcb/src/xcb_util.c
index 6e635f931..d8a36f170 100644
--- a/libxcb/src/xcb_util.c
+++ b/libxcb/src/xcb_util.c
@@ -1,459 +1,480 @@
-/* Copyright (C) 2001-2004 Bart Massey and Jamey Sharp.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the names of the authors or their
- * institutions shall not be used in advertising or otherwise to promote the
- * sale, use or other dealings in this Software without prior written
- * authorization from the authors.
- */
-
-/* Utility functions implementable using only public APIs. */
-
-#include <assert.h>
-#include <sys/types.h>
-#include <limits.h>
-#ifdef DNETCONN
-#include <netdnet/dnetdb.h>
-#include <netdnet/dn.h>
-#endif
-#include <errno.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <stddef.h>
-#include <unistd.h>
-#include <string.h>
-
-#ifdef _WIN32
-#include "xcb_windefs.h"
-#else
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <netinet/in.h>
-#include <netinet/tcp.h>
-#include <fcntl.h>
-#include <netdb.h>
-#endif /* _WIN32 */
-
-#include "xcb.h"
-#include "xcbext.h"
-#include "xcbint.h"
-
-int xcb_popcount(uint32_t mask)
-{
- uint32_t y;
- y = (mask >> 1) & 033333333333;
- y = mask - y - ((y >> 1) & 033333333333);
- return ((y + (y >> 3)) & 030707070707) % 077;
-}
-
-int xcb_sumof(uint8_t *list, int len)
-{
- int i, s = 0;
- for(i=0; i<len; i++) {
- s += *list;
- list++;
- }
- return s;
-}
-
-static int _xcb_parse_display(const char *name, char **host, char **protocol,
- int *displayp, int *screenp)
-{
- int len, display, screen;
- char *slash, *colon, *dot, *end;
-
- if(!name || !*name)
- name = getenv("DISPLAY");
- if(!name)
- return 0;
-
-#ifdef HAVE_LAUNCHD
- if(strncmp(name, "/tmp/launch", 11) == 0)
- slash = NULL;
- else
-#endif
- slash = strrchr(name, '/');
-
- if (slash) {
- len = slash - name;
- if (protocol) {
- *protocol = malloc(len + 1);
- if(!*protocol)
- return 0;
- memcpy(*protocol, name, len);
- (*protocol)[len] = '\0';
- }
- name = slash + 1;
- } else
- if (protocol)
- *protocol = NULL;
-
- colon = strrchr(name, ':');
- if(!colon)
- goto error_out;
- len = colon - name;
- ++colon;
- display = strtoul(colon, &dot, 10);
- if(dot == colon)
- goto error_out;
- if(*dot == '\0')
- screen = 0;
- else
- {
- if(*dot != '.')
- goto error_out;
- ++dot;
- screen = strtoul(dot, &end, 10);
- if(end == dot || *end != '\0')
- goto error_out;
- }
- /* At this point, the display string is fully parsed and valid, but
- * the caller's memory is untouched. */
-
- *host = malloc(len + 1);
- if(!*host)
- goto error_out;
- memcpy(*host, name, len);
- (*host)[len] = '\0';
- *displayp = display;
- if(screenp)
- *screenp = screen;
- return 1;
-
-error_out:
- if (protocol) {
- free(*protocol);
- *protocol = NULL;
- }
-
- return 0;
-}
-
-int xcb_parse_display(const char *name, char **host, int *displayp,
- int *screenp)
-{
- return _xcb_parse_display(name, host, NULL, displayp, screenp);
-}
-
-static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short port);
-#ifndef _WIN32
-static int _xcb_open_unix(char *protocol, const char *file);
-#endif /* !WIN32 */
-#ifdef DNETCONN
-static int _xcb_open_decnet(const char *host, char *protocol, const unsigned short port);
-#endif
-#ifdef HAVE_ABSTRACT_SOCKETS
-static int _xcb_open_abstract(char *protocol, const char *file, size_t filelen);
-#endif
-
-static int _xcb_open(const char *host, char *protocol, const int display)
-{
- int fd;
- static const char unix_base[] = "/tmp/.X11-unix/X";
- const char *base = unix_base;
- size_t filelen;
- char *file = NULL;
- int actual_filelen;
-
-#ifdef HAVE_LAUNCHD
- if(strncmp(host, "/tmp/launch", 11) == 0) {
- base = host;
- host = "";
- protocol = NULL;
- }
-#endif
-
- if(*host || protocol)
- {
-#ifdef DNETCONN
- /* DECnet displays have two colons, so _xcb_parse_display will have
- left one at the end. However, an IPv6 address can end with *two*
- colons, so only treat this as a DECnet display if host ends with
- exactly one colon. */
- char *colon = strchr(host, ':');
- if(colon && *(colon+1) == '\0')
- {
- *colon = '\0';
- return _xcb_open_decnet(host, protocol, display);
- }
- else
-#endif
- if (protocol
- || strcmp("unix",host)) { /* follow the old unix: rule */
-
- /* display specifies TCP */
- unsigned short port = X_TCP_PORT + display;
- return _xcb_open_tcp(host, protocol, port);
- }
- }
-
-#ifndef _WIN32
- filelen = strlen(base) + 1 + sizeof(display) * 3 + 1;
- file = malloc(filelen);
- if(file == NULL)
- return -1;
-
- /* display specifies Unix socket */
-#ifdef HAVE_LAUNCHD
- if(strncmp(base, "/tmp/launch", 11) == 0)
- actual_filelen = snprintf(file, filelen, "%s:%d", base, display);
- else
-#endif
- actual_filelen = snprintf(file, filelen, "%s%d", base, display);
- if(actual_filelen < 0)
- {
- free(file);
- return -1;
- }
- /* snprintf may truncate the file */
- filelen = MIN(actual_filelen, filelen - 1);
-#ifdef HAVE_ABSTRACT_SOCKETS
- fd = _xcb_open_abstract(protocol, file, filelen);
- if (fd >= 0 || (errno != ENOENT && errno != ECONNREFUSED))
- {
- free(file);
- return fd;
- }
-
-#endif
- fd = _xcb_open_unix(protocol, file);
- free(file);
-
- return fd;
-#endif /* !_WIN32 */
- return -1; /* if control reaches here then something has gone wrong */
-}
-
-static int _xcb_socket(int family, int type, int proto)
-{
- int fd;
-
-#ifdef SOCK_CLOEXEC
- fd = socket(family, type | SOCK_CLOEXEC, proto);
- if (fd == -1 && errno == EINVAL)
-#endif
- {
- fd = socket(family, type, proto);
-#ifndef _WIN32
- if (fd >= 0)
- fcntl(fd, F_SETFD, FD_CLOEXEC);
-#endif
- }
- return fd;
-}
-
-#ifdef DNETCONN
-static int _xcb_open_decnet(const char *host, const char *protocol, const unsigned short port)
-{
- int fd;
- struct sockaddr_dn addr;
- struct accessdata_dn accessdata;
- struct nodeent *nodeaddr = getnodebyname(host);
-
- if(!nodeaddr)
- return -1;
- if (protocol && strcmp("dnet",protocol))
- return -1;
- addr.sdn_family = AF_DECnet;
-
- addr.sdn_add.a_len = nodeaddr->n_length;
- memcpy(addr.sdn_add.a_addr, nodeaddr->n_addr, addr.sdn_add.a_len);
-
- addr.sdn_objnamel = sprintf((char *)addr.sdn_objname, "X$X%d", port);
- if(addr.sdn_objnamel < 0)
- return -1;
- addr.sdn_objnum = 0;
-
- fd = _xcb_socket(PF_DECnet, SOCK_STREAM, 0);
- if(fd == -1)
- return -1;
-
- memset(&accessdata, 0, sizeof(accessdata));
- accessdata.acc_accl = sprintf((char*)accessdata.acc_acc, "%d", getuid());
- if(accessdata.acc_accl < 0)
- return -1;
- setsockopt(fd, DNPROTO_NSP, SO_CONACCESS, &accessdata, sizeof(accessdata));
-
- if(connect(fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) {
- close(fd);
- return -1;
- }
- return fd;
-}
-#endif
-
-static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short port)
-{
- int fd = -1;
- struct addrinfo hints;
- char service[6]; /* "65535" with the trailing '\0' */
- struct addrinfo *results, *addr;
- char *bracket;
-
- if (protocol && strcmp("tcp",protocol) && strcmp("inet",protocol)
-#ifdef AF_INET6
- && strcmp("inet6",protocol)
-#endif
- )
- return -1;
-
- if (*host == '\0')
- host = "localhost";
-
- memset(&hints, 0, sizeof(hints));
-#ifdef AI_ADDRCONFIG
- hints.ai_flags |= AI_ADDRCONFIG;
-#endif
-#ifdef AI_NUMERICSERV
- hints.ai_flags |= AI_NUMERICSERV;
-#endif
- hints.ai_family = AF_UNSPEC;
- hints.ai_socktype = SOCK_STREAM;
-
-#ifdef AF_INET6
- /* Allow IPv6 addresses enclosed in brackets. */
- if(host[0] == '[' && (bracket = strrchr(host, ']')) && bracket[1] == '\0')
- {
- *bracket = '\0';
- ++host;
- hints.ai_flags |= AI_NUMERICHOST;
- hints.ai_family = AF_INET6;
- }
-#endif
-
- snprintf(service, sizeof(service), "%hu", port);
- if(getaddrinfo(host, service, &hints, &results))
- /* FIXME: use gai_strerror, and fill in error connection */
- return -1;
-
- for(addr = results; addr; addr = addr->ai_next)
- {
- fd = _xcb_socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
- if(fd >= 0) {
- int on = 1;
- setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
- setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on));
-
- if (connect(fd, addr->ai_addr, addr->ai_addrlen) >= 0)
- break;
- close(fd);
- fd = -1;
- }
- }
- freeaddrinfo(results);
- return fd;
-}
-
-#ifndef _WIN32
-static int _xcb_open_unix(char *protocol, const char *file)
-{
- int fd;
- struct sockaddr_un addr;
-
- if (protocol && strcmp("unix",protocol))
- return -1;
-
- strcpy(addr.sun_path, file);
- addr.sun_family = AF_UNIX;
-#ifdef HAVE_SOCKADDR_SUN_LEN
- addr.sun_len = SUN_LEN(&addr);
-#endif
- fd = _xcb_socket(AF_UNIX, SOCK_STREAM, 0);
- if(fd == -1)
- return -1;
- if(connect(fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) {
- close(fd);
- return -1;
- }
- return fd;
-}
-#endif /* !_WIN32 */
-
-#ifdef HAVE_ABSTRACT_SOCKETS
-static int _xcb_open_abstract(char *protocol, const char *file, size_t filelen)
-{
- int fd;
- struct sockaddr_un addr = {0};
- socklen_t namelen;
-
- if (protocol && strcmp("unix",protocol))
- return -1;
-
- strcpy(addr.sun_path + 1, file);
- addr.sun_family = AF_UNIX;
- namelen = offsetof(struct sockaddr_un, sun_path) + 1 + filelen;
-#ifdef HAVE_SOCKADDR_SUN_LEN
- addr.sun_len = 1 + filelen;
-#endif
- fd = _xcb_socket(AF_UNIX, SOCK_STREAM, 0);
- if (fd == -1)
- return -1;
- if (connect(fd, (struct sockaddr *) &addr, namelen) == -1) {
- close(fd);
- return -1;
- }
- return fd;
-}
-#endif
-
-xcb_connection_t *xcb_connect(const char *displayname, int *screenp)
-{
- return xcb_connect_to_display_with_auth_info(displayname, NULL, screenp);
-}
-
-xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname, xcb_auth_info_t *auth, int *screenp)
-{
- int fd, display = 0;
- char *host = NULL;
- char *protocol = NULL;
- xcb_auth_info_t ourauth;
- xcb_connection_t *c;
-
- int parsed = _xcb_parse_display(displayname, &host, &protocol, &display, screenp);
-
- if(!parsed) {
- c = (xcb_connection_t *) &error_connection;
- goto out;
- } else
- fd = _xcb_open(host, protocol, display);
-
- if(fd == -1) {
- c = (xcb_connection_t *) &error_connection;
- goto out;
- }
-
- if(auth) {
- c = xcb_connect_to_fd(fd, auth);
- goto out;
- }
-
- if(_xcb_get_auth_info(fd, &ourauth, display))
- {
- c = xcb_connect_to_fd(fd, &ourauth);
- free(ourauth.name);
- free(ourauth.data);
- }
- else
- c = xcb_connect_to_fd(fd, 0);
-
-out:
- free(host);
- free(protocol);
- return c;
-}
+/* Copyright (C) 2001-2004 Bart Massey and Jamey Sharp.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the names of the authors or their
+ * institutions shall not be used in advertising or otherwise to promote the
+ * sale, use or other dealings in this Software without prior written
+ * authorization from the authors.
+ */
+
+/* Utility functions implementable using only public APIs. */
+
+#include <assert.h>
+#include <sys/types.h>
+#include <limits.h>
+#ifdef DNETCONN
+#include <netdnet/dnetdb.h>
+#include <netdnet/dn.h>
+#endif
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <string.h>
+
+#ifdef _WIN32
+#include "xcb_windefs.h"
+#else
+#include <sys/socket.h>
+#include <sys/un.h>
+#include <netinet/in.h>
+#include <netinet/tcp.h>
+#include <fcntl.h>
+#include <netdb.h>
+#endif /* _WIN32 */
+
+#include "xcb.h"
+#include "xcbext.h"
+#include "xcbint.h"
+
+/* must be after "xcbint.h" to get autoconf #defines */
+#if defined(HAVE_TSOL_LABEL_H) && defined(HAVE_IS_SYSTEM_LABELED)
+# include <tsol/label.h>
+# include <sys/stat.h>
+#endif
+
+int xcb_popcount(uint32_t mask)
+{
+ uint32_t y;
+ y = (mask >> 1) & 033333333333;
+ y = mask - y - ((y >> 1) & 033333333333);
+ return ((y + (y >> 3)) & 030707070707) % 077;
+}
+
+int xcb_sumof(uint8_t *list, int len)
+{
+ int i, s = 0;
+ for(i=0; i<len; i++) {
+ s += *list;
+ list++;
+ }
+ return s;
+}
+
+static int _xcb_parse_display(const char *name, char **host, char **protocol,
+ int *displayp, int *screenp)
+{
+ int len, display, screen;
+ char *slash, *colon, *dot, *end;
+
+ if(!name || !*name)
+ name = getenv("DISPLAY");
+ if(!name)
+ return 0;
+
+#ifdef HAVE_LAUNCHD
+ if(strncmp(name, "/tmp/launch", 11) == 0)
+ slash = NULL;
+ else
+#endif
+ slash = strrchr(name, '/');
+
+ if (slash) {
+ len = slash - name;
+ if (protocol) {
+ *protocol = malloc(len + 1);
+ if(!*protocol)
+ return 0;
+ memcpy(*protocol, name, len);
+ (*protocol)[len] = '\0';
+ }
+ name = slash + 1;
+ } else
+ if (protocol)
+ *protocol = NULL;
+
+ colon = strrchr(name, ':');
+ if(!colon)
+ goto error_out;
+ len = colon - name;
+ ++colon;
+ display = strtoul(colon, &dot, 10);
+ if(dot == colon)
+ goto error_out;
+ if(*dot == '\0')
+ screen = 0;
+ else
+ {
+ if(*dot != '.')
+ goto error_out;
+ ++dot;
+ screen = strtoul(dot, &end, 10);
+ if(end == dot || *end != '\0')
+ goto error_out;
+ }
+ /* At this point, the display string is fully parsed and valid, but
+ * the caller's memory is untouched. */
+
+ *host = malloc(len + 1);
+ if(!*host)
+ goto error_out;
+ memcpy(*host, name, len);
+ (*host)[len] = '\0';
+ *displayp = display;
+ if(screenp)
+ *screenp = screen;
+ return 1;
+
+error_out:
+ if (protocol) {
+ free(*protocol);
+ *protocol = NULL;
+ }
+
+ return 0;
+}
+
+int xcb_parse_display(const char *name, char **host, int *displayp,
+ int *screenp)
+{
+ return _xcb_parse_display(name, host, NULL, displayp, screenp);
+}
+
+static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short port);
+#ifndef _WIN32
+static int _xcb_open_unix(char *protocol, const char *file);
+#endif /* !WIN32 */
+#ifdef DNETCONN
+static int _xcb_open_decnet(const char *host, char *protocol, const unsigned short port);
+#endif
+#ifdef HAVE_ABSTRACT_SOCKETS
+static int _xcb_open_abstract(char *protocol, const char *file, size_t filelen);
+#endif
+
+static int _xcb_open(const char *host, char *protocol, const int display)
+{
+ int fd;
+ static const char unix_base[] = "/tmp/.X11-unix/X";
+ const char *base = unix_base;
+ size_t filelen;
+ char *file = NULL;
+ int actual_filelen;
+
+#ifdef HAVE_LAUNCHD
+ if(strncmp(host, "/tmp/launch", 11) == 0) {
+ base = host;
+ host = "";
+ protocol = NULL;
+ }
+#endif
+
+ if(*host || protocol)
+ {
+#ifdef DNETCONN
+ /* DECnet displays have two colons, so _xcb_parse_display will have
+ left one at the end. However, an IPv6 address can end with *two*
+ colons, so only treat this as a DECnet display if host ends with
+ exactly one colon. */
+ char *colon = strchr(host, ':');
+ if(colon && *(colon+1) == '\0')
+ {
+ *colon = '\0';
+ return _xcb_open_decnet(host, protocol, display);
+ }
+ else
+#endif
+ if (protocol
+ || strcmp("unix",host)) { /* follow the old unix: rule */
+
+ /* display specifies TCP */
+ unsigned short port = X_TCP_PORT + display;
+ return _xcb_open_tcp(host, protocol, port);
+ }
+ }
+
+#ifndef _WIN32
+#if defined(HAVE_TSOL_LABEL_H) && defined(HAVE_IS_SYSTEM_LABELED)
+ /* Check special path for Unix sockets under Solaris Trusted Extensions */
+ if (is_system_labeled())
+ {
+ struct stat sbuf;
+ const char *tsol_base = "/var/tsol/doors/.X11-unix/X";
+ char tsol_socket[PATH_MAX];
+
+ snprintf(tsol_socket, sizeof(tsol_socket), "%s%d", tsol_base, display);
+
+ if (stat(tsol_socket, &sbuf) == 0)
+ base = tsol_base;
+ }
+#endif
+
+ filelen = strlen(base) + 1 + sizeof(display) * 3 + 1;
+ file = malloc(filelen);
+ if(file == NULL)
+ return -1;
+
+ /* display specifies Unix socket */
+#ifdef HAVE_LAUNCHD
+ if(strncmp(base, "/tmp/launch", 11) == 0)
+ actual_filelen = snprintf(file, filelen, "%s:%d", base, display);
+ else
+#endif
+ actual_filelen = snprintf(file, filelen, "%s%d", base, display);
+ if(actual_filelen < 0)
+ {
+ free(file);
+ return -1;
+ }
+ /* snprintf may truncate the file */
+ filelen = MIN(actual_filelen, filelen - 1);
+#ifdef HAVE_ABSTRACT_SOCKETS
+ fd = _xcb_open_abstract(protocol, file, filelen);
+ if (fd >= 0 || (errno != ENOENT && errno != ECONNREFUSED))
+ {
+ free(file);
+ return fd;
+ }
+
+#endif
+ fd = _xcb_open_unix(protocol, file);
+ free(file);
+
+ return fd;
+#endif /* !_WIN32 */
+ return -1; /* if control reaches here then something has gone wrong */
+}
+
+static int _xcb_socket(int family, int type, int proto)
+{
+ int fd;
+
+#ifdef SOCK_CLOEXEC
+ fd = socket(family, type | SOCK_CLOEXEC, proto);
+ if (fd == -1 && errno == EINVAL)
+#endif
+ {
+ fd = socket(family, type, proto);
+#ifndef _WIN32
+ if (fd >= 0)
+ fcntl(fd, F_SETFD, FD_CLOEXEC);
+#endif
+ }
+ return fd;
+}
+
+#ifdef DNETCONN
+static int _xcb_open_decnet(const char *host, const char *protocol, const unsigned short port)
+{
+ int fd;
+ struct sockaddr_dn addr;
+ struct accessdata_dn accessdata;
+ struct nodeent *nodeaddr = getnodebyname(host);
+
+ if(!nodeaddr)
+ return -1;
+ if (protocol && strcmp("dnet",protocol))
+ return -1;
+ addr.sdn_family = AF_DECnet;
+
+ addr.sdn_add.a_len = nodeaddr->n_length;
+ memcpy(addr.sdn_add.a_addr, nodeaddr->n_addr, addr.sdn_add.a_len);
+
+ addr.sdn_objnamel = sprintf((char *)addr.sdn_objname, "X$X%d", port);
+ if(addr.sdn_objnamel < 0)
+ return -1;
+ addr.sdn_objnum = 0;
+
+ fd = _xcb_socket(PF_DECnet, SOCK_STREAM, 0);
+ if(fd == -1)
+ return -1;
+
+ memset(&accessdata, 0, sizeof(accessdata));
+ accessdata.acc_accl = sprintf((char*)accessdata.acc_acc, "%d", getuid());
+ if(accessdata.acc_accl < 0)
+ return -1;
+ setsockopt(fd, DNPROTO_NSP, SO_CONACCESS, &accessdata, sizeof(accessdata));
+
+ if(connect(fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) {
+ close(fd);
+ return -1;
+ }
+ return fd;
+}
+#endif
+
+static int _xcb_open_tcp(const char *host, char *protocol, const unsigned short port)
+{
+ int fd = -1;
+ struct addrinfo hints;
+ char service[6]; /* "65535" with the trailing '\0' */
+ struct addrinfo *results, *addr;
+ char *bracket;
+
+ if (protocol && strcmp("tcp",protocol) && strcmp("inet",protocol)
+#ifdef AF_INET6
+ && strcmp("inet6",protocol)
+#endif
+ )
+ return -1;
+
+ if (*host == '\0')
+ host = "localhost";
+
+ memset(&hints, 0, sizeof(hints));
+#ifdef AI_ADDRCONFIG
+ hints.ai_flags |= AI_ADDRCONFIG;
+#endif
+#ifdef AI_NUMERICSERV
+ hints.ai_flags |= AI_NUMERICSERV;
+#endif
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+
+#ifdef AF_INET6
+ /* Allow IPv6 addresses enclosed in brackets. */
+ if(host[0] == '[' && (bracket = strrchr(host, ']')) && bracket[1] == '\0')
+ {
+ *bracket = '\0';
+ ++host;
+ hints.ai_flags |= AI_NUMERICHOST;
+ hints.ai_family = AF_INET6;
+ }
+#endif
+
+ snprintf(service, sizeof(service), "%hu", port);
+ if(getaddrinfo(host, service, &hints, &results))
+ /* FIXME: use gai_strerror, and fill in error connection */
+ return -1;
+
+ for(addr = results; addr; addr = addr->ai_next)
+ {
+ fd = _xcb_socket(addr->ai_family, addr->ai_socktype, addr->ai_protocol);
+ if(fd >= 0) {
+ int on = 1;
+ setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, &on, sizeof(on));
+ setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, &on, sizeof(on));
+
+ if (connect(fd, addr->ai_addr, addr->ai_addrlen) >= 0)
+ break;
+ close(fd);
+ fd = -1;
+ }
+ }
+ freeaddrinfo(results);
+ return fd;
+}
+
+#ifndef _WIN32
+static int _xcb_open_unix(char *protocol, const char *file)
+{
+ int fd;
+ struct sockaddr_un addr;
+
+ if (protocol && strcmp("unix",protocol))
+ return -1;
+
+ strcpy(addr.sun_path, file);
+ addr.sun_family = AF_UNIX;
+#ifdef HAVE_SOCKADDR_SUN_LEN
+ addr.sun_len = SUN_LEN(&addr);
+#endif
+ fd = _xcb_socket(AF_UNIX, SOCK_STREAM, 0);
+ if(fd == -1)
+ return -1;
+ if(connect(fd, (struct sockaddr *) &addr, sizeof(addr)) == -1) {
+ close(fd);
+ return -1;
+ }
+ return fd;
+}
+#endif /* !_WIN32 */
+
+#ifdef HAVE_ABSTRACT_SOCKETS
+static int _xcb_open_abstract(char *protocol, const char *file, size_t filelen)
+{
+ int fd;
+ struct sockaddr_un addr = {0};
+ socklen_t namelen;
+
+ if (protocol && strcmp("unix",protocol))
+ return -1;
+
+ strcpy(addr.sun_path + 1, file);
+ addr.sun_family = AF_UNIX;
+ namelen = offsetof(struct sockaddr_un, sun_path) + 1 + filelen;
+#ifdef HAVE_SOCKADDR_SUN_LEN
+ addr.sun_len = 1 + filelen;
+#endif
+ fd = _xcb_socket(AF_UNIX, SOCK_STREAM, 0);
+ if (fd == -1)
+ return -1;
+ if (connect(fd, (struct sockaddr *) &addr, namelen) == -1) {
+ close(fd);
+ return -1;
+ }
+ return fd;
+}
+#endif
+
+xcb_connection_t *xcb_connect(const char *displayname, int *screenp)
+{
+ return xcb_connect_to_display_with_auth_info(displayname, NULL, screenp);
+}
+
+xcb_connection_t *xcb_connect_to_display_with_auth_info(const char *displayname, xcb_auth_info_t *auth, int *screenp)
+{
+ int fd, display = 0;
+ char *host = NULL;
+ char *protocol = NULL;
+ xcb_auth_info_t ourauth;
+ xcb_connection_t *c;
+
+ int parsed = _xcb_parse_display(displayname, &host, &protocol, &display, screenp);
+
+ if(!parsed) {
+ c = (xcb_connection_t *) &error_connection;
+ goto out;
+ } else
+ fd = _xcb_open(host, protocol, display);
+
+ if(fd == -1) {
+ c = (xcb_connection_t *) &error_connection;
+ goto out;
+ }
+
+ if(auth) {
+ c = xcb_connect_to_fd(fd, auth);
+ goto out;
+ }
+
+ if(_xcb_get_auth_info(fd, &ourauth, display))
+ {
+ c = xcb_connect_to_fd(fd, &ourauth);
+ free(ourauth.name);
+ free(ourauth.data);
+ }
+ else
+ c = xcb_connect_to_fd(fd, 0);
+
+out:
+ free(host);
+ free(protocol);
+ return c;
+}
diff --git a/mesalib/docs/download.html b/mesalib/docs/download.html
index 3cb9423dd..03fa60b4d 100644
--- a/mesalib/docs/download.html
+++ b/mesalib/docs/download.html
@@ -21,76 +21,52 @@ When a new release is coming, release candidates (betas) may be found
<p>
-Mesa is distributed in several parts:
+The Mesa package is named MesaLib-x.y.z.{tar.bz2, tar.gz, zip} where x.y.z
+is the version. There are three types of compressed archives.
</p>
-<ul>
-<li><b>MesaLib-x.y.z</b> - the main Mesa library source code, drivers
- and documentation.
-</li>
-<li><b>MesaDemos-x.y.z</b> - OpenGL demonstration and test programs.
- Most of the programs require GLUT (either the
- <a href="http://www.opengl.org/resources/libraries/glut"
- target="_parent">original GLUT by Mark Kilgard</a> or
- <a href="http://freeglut.sourceforge.net" target="_parent">freeglut</a> or
- <a href="http://openglut.sourceforge.net" target="_parent">OpenGLUT</a>).
-</li>
-<li><b>MesaGLUT-x.y.z</b> - Mark Kilgard's GLUT, easily compiled and used
- with Mesa. Plus, other implementation of GLUT for DOS, OS/2, BeOS, etc.
-</li>
-</ul>
-
<p>
-If you're not interested in running the demos, you'll only need the first
-package.
+There's also the MesaGLUT-x.y.z.{tar.bz2, tar.gz, zip} packages which
+contain Mark Kilgard's GLUT library.
+This is optional.
+Most Linux distributions include an implementation of GLUT (such as freeglut).
</p>
-
<p>
-If you're new to this and not sure what you're doing, grab all three packages.
+In the past, the Mesa demos collection was distributed as
+MesaDemos-x.y.z.{tar.bz2, tar.gz, zip}.
+Now, the
+<a href="ftp://ftp.freedesktop.org/pub/mesa/demos/" target="_parent">
+Mesa demos</a> are distributed separately.
</p>
-<p>
-The packages are available in .tar.gz, .tar.bz2 and .zip formats.
-Other sites might offer additional package formats.
-</p>
<H1>Unpacking</H1>
<p>
-All the packages should be in the same directory prior to unpacking.
+To unpack .tar.gz files:
</p>
-
-<ul>
-<li>To unpack .tar.gz files:
<pre>
- tar zxf MesaLib-X.Y.tar.gz
- tar zxf MesaDemos-X.Y.tar.gz
- tar zxf MesaGLUT-X.Y.tar.gz
+ tar zxf MesaLib-x.y.z.tar.gz
</pre>
or
<pre>
- gzcat MesaLib-X.Y.tar.gz | tar xf -
- gzcat MesaDemos-X.Y.tar.gz | tar xf -
- gzcat MesaGLUT-X.Y.tar.gz | tar xf -
+ gzcat MesaLib-x.y.z.tar.gz | tar xf -
</pre>
or
<pre>
- gunzip MesaLib-X.Y.tar.gz ; tar xf MesaLib-X.Y.tar
- gunzip MesaDemos-X.Y.tar.gz ; tar xf MesaDemos-X.Y.tar
- gunzip MesaGLUT-X.Y.tar.gz ; tar xf MesaGLUT-X.Y.tar
+ gunzip MesaLib-x.y.z.tar.gz ; tar xf MesaLib-x.y.z.tar
</pre>
-<li>To unpack .tar.bz2 files:
+<p>
+To unpack .tar.bz2 files:
+</p>
<pre>
- bunzip2 -c MesaLib-X.Y.tar.gz | tar xf -
- bunzip2 -c MesaDemos-X.Y.tar.gz | tar xf -
- bunzip2 -c MesaGLUT-X.Y.tar.gz | tar xf -
+ bunzip2 -c MesaLib-x.y.z.tar.gz | tar xf -
</pre>
-<li>To unpack .zip files:
+<p>
+To unpack .zip files:
+</p>
<pre>
- unzip MesaLib-X.Y.zip
- unzip MesaDemos-X.Y.zip
- unzip MesaGLUT-X.Y.zip
+ unzip MesaLib-x.y.z.zip
</pre>
-</ul>
<h1>Contents</h1>
@@ -106,22 +82,13 @@ bin/ - shell scripts for making shared libraries, etc
docs/ - documentation
src/ - source code for libraries
src/mesa - sources for the main Mesa library and device drivers
+src/gallium - sources for Gallium and Gallium drivers
src/glu - libGLU source code
src/glx - sources for building libGL with full GLX and DRI support
src/glw - Xt/Motif/OpenGL widget code
</pre>
-If you downloaded and unpacked the MesaDemos.X.Y package:
-
-<pre>
-progs/demos - original Mesa demos
-progs/xdemos - GLX OpenGL/Mesa demos
-progs/redbook - examples from the OpenGL Programming Guide
-progs/samples - examples from SGI
-progs/images/ - image files
-</pre>
-
-If you downloaded and unpacked the MesaGLUT.X.Y package:
+If you downloaded and unpacked the MesaGLUT.x.y.z package:
<pre>
src/glut - GLUT library source code
</pre>
diff --git a/mesalib/docs/install.html b/mesalib/docs/install.html
index 3962ea5c9..bfa3bb8f8 100644
--- a/mesalib/docs/install.html
+++ b/mesalib/docs/install.html
@@ -12,16 +12,16 @@
<ol>
<li><a href="#unix-x11">Unix / X11</a>
<ul>
- <li><a href="#prereq">Prerequisites for DRI and hardware acceleration</a>
+ <li><a href="#prereq-general">General prerequisites for building</a>
+ <li><a href="#prereq-dri">Prerequisites for DRI and hardware acceleration</a>
<li><a href="#autoconf">Building with autoconf</a>
<li><a href="#traditional">Building with traditional Makefiles</a>
<li><a href="#libs">The Libraries</a>
- <li><a href="#demos">Running the demos
<li><a href="#install">Installing the header and library files
<li><a href="#pkg-config">Building OpenGL programs with pkg-config
</ul>
<li><a href="#windows">Windows</a>
-<li><a href="#scons">SCons</a>
+<li><a href="#scons">Building with SCons</a>
<li><a href="#other">Other</a>
</ol>
<br>
@@ -31,8 +31,22 @@
<H2>1. Unix/X11 Compilation and Installation</H1>
-<a name="prereq">
-<h3>1.1 Prerequisites for DRI and hardware acceleration</h3>
+<a name="prereq-general">
+<h3>1.1 General prerequisites for building</h3>
+
+<ul>
+<li>lex / yacc - for building the GLSL compiler.
+On Linux systems, flex and bison are used.
+Versions 2.5.35 and 2.4.1, respectively, (or later) should work.
+</li>
+<li>python - Python is needed for building the Gallium components.
+Version 2.6.4 or later should work.
+</li>
+</ul>
+
+
+<a name="prereq-dri">
+<h3>1.2 Prerequisites for DRI and hardware acceleration</h3>
<p>
The following are required for DRI-based hardware acceleration with Mesa:
@@ -49,7 +63,7 @@ version 2.4.15 or later
<a name="autoconf">
-<h3>1.2 Building with Autoconf</h3>
+<h3>1.3 Building with Autoconf</h3>
<p>
Mesa may be <a href="autoconf.html">built using autoconf</a>.
@@ -59,7 +73,7 @@ If that fails the traditional Mesa build system is available.
<a name="traditional">
-<h3>1.3 Building with traditional Makefiles</h3>
+<h3>1.4 Building with traditional Makefiles</h3>
<p>
The traditional Mesa build system is based on a collection of pre-defined
@@ -126,7 +140,7 @@ Later, if you want to rebuild for a different configuration run
<a name="libs">
-<h3>1.4 The libraries</h3>
+<h3>1.5 The libraries</h3>
<p>
When compilation has finished, look in the top-level <code>lib/</code>
@@ -185,81 +199,11 @@ If you built the DRI hardware drivers, you'll also see the DRI drivers:
-rwxr-xr-x 1 brian users 10997120 Jul 21 12:13 unichrome_dri.so
</pre>
-
-<a name="demos">
-<h3>1.5 Running the demos</h3>
-
-<p>
-If you downloaded/unpacked the MesaDemos-x.y.z.tar.gz archive or
-obtained Mesa from CVS, the <b>progs/</b> directory will contain a
-bunch of demonstration programs.
-</p>
-
-<p>
-Before running a demo, you'll probably have to set two environment variables
-to indicate where the libraries are located. For example:
-<p>
-<blockquote>
-<b>cd lib/</b>
-<br>
-<b>export LD_LIBRARY_PATH=${PWD}</b>
-<br>
-<b>export LIBGL_DRIVERS_PATH=${PWD}</b> (if using DRI drivers)
-</blockquote>
-
<p>
-Next, change to the Mesa/demos/ directory:
+If you built with Gallium support, look in lib/gallium/ for Gallium-based
+versions of libGL and device drivers.
</p>
-<blockquote>
-<b>cd ../progs/demos</b>
-</blockquote>
-<p>
-Run a demo such as gears:
-</p>
-<blockquote>
-<b>./gears</b>
-</blockquote>
-
-<p>
-If this doesn't work, try the <b>Mesa/progs/xdemos/glxinfo</b> program
-and see that it prints the expected Mesa version number.
-</p>
-
-<p>
-If you're using Linux or a similar OS, verify that the demo program is
-being linked with the proper library files:
-</p>
-<blockquote>
-<b>ldd gears</b>
-</blockquote>
-
-<p>
-You should see something like this:
-</p>
-<pre>
- libglut.so.3 => /home/brian/Mesa/lib/libglut.so.3 (0x40013000)
- libGLU.so.1 => /home/brian/Mesa/lib/libGLU.so.1 (0x40051000)
- libGL.so.1 => /home/brian/Mesa/lib/libGL.so.1 (0x400e0000)
- libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
- libm.so.6 => /lib/i686/libm.so.6 (0x403da000)
- libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x403fc000)
- libXmu.so.6 => /usr/X11R6/lib/libXmu.so.6 (0x404da000)
- libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x404f1000)
- libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x40543000)
- libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x4054b000)
- libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x405fd000)
- libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x40605000)
- libpthread.so.0 => /lib/i686/libpthread.so.0 (0x40613000)
- /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
- libdl.so.2 => /lib/libdl.so.2 (0x40644000)
- libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x40647000)
- libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x40650000)
-</pre>
-
-<p>
-Retrace your steps if this doesn't look right.
-</p>
<a name="install">
diff --git a/mesalib/src/mesa/main/renderbuffer.c b/mesalib/src/mesa/main/renderbuffer.c
index 67ee589d7..e6d5fe4bf 100644
--- a/mesalib/src/mesa/main/renderbuffer.c
+++ b/mesalib/src/mesa/main/renderbuffer.c
@@ -1122,7 +1122,20 @@ _mesa_soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *
rb->Width = width;
rb->Height = height;
rb->_BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
- ASSERT(rb->_BaseFormat);
+
+ if (rb->Name == 0 &&
+ internalFormat == GL_RGBA16_SNORM &&
+ rb->_BaseFormat == 0) {
+ /* NOTE: This is a special case just for accumulation buffers.
+ * This is a very limited use case- there's no snorm texturing or
+ * rendering going on.
+ */
+ rb->_BaseFormat = GL_RGBA;
+ }
+ else {
+ /* the internalFormat should have been error checked long ago */
+ ASSERT(rb->_BaseFormat);
+ }
return GL_TRUE;
}
diff --git a/mesalib/src/mesa/main/texformat.c b/mesalib/src/mesa/main/texformat.c
index 8b7b4ff47..da907455b 100644
--- a/mesalib/src/mesa/main/texformat.c
+++ b/mesalib/src/mesa/main/texformat.c
@@ -402,7 +402,7 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_RGB_SNORM:
case GL_RGB8_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
- break;
+ /* FALLTHROUGH */
case GL_RGBA_SNORM:
case GL_RGBA8_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
@@ -411,18 +411,27 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
case GL_ALPHA_SNORM:
case GL_ALPHA8_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break;
case GL_LUMINANCE_SNORM:
case GL_LUMINANCE8_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBX8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break;
case GL_LUMINANCE_ALPHA_SNORM:
case GL_LUMINANCE8_ALPHA8_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL88);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break;
case GL_INTENSITY_SNORM:
case GL_INTENSITY8_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I8);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break;
case GL_R16_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_R16);
@@ -432,21 +441,32 @@ _mesa_choose_tex_format( struct gl_context *ctx, GLint internalFormat,
break;
case GL_RGB16_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGB_16);
- break;
+ /* FALLTHROUGH */
case GL_RGBA16_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break;
case GL_ALPHA16_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_A16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break;
case GL_LUMINANCE16_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_L16);
- break;
+ /* FALLTHROUGH */
case GL_LUMINANCE16_ALPHA16_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_AL1616);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break;
case GL_INTENSITY16_SNORM:
RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_I16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA_16);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888);
+ RETURN_IF_SUPPORTED(MESA_FORMAT_SIGNED_RGBA8888_REV);
break;
default:
; /* fall-through */
diff --git a/mesalib/src/mesa/state_tracker/st_cb_fbo.c b/mesalib/src/mesa/state_tracker/st_cb_fbo.c
index fe67b03b2..7ffee901c 100644
--- a/mesalib/src/mesa/state_tracker/st_cb_fbo.c
+++ b/mesalib/src/mesa/state_tracker/st_cb_fbo.c
@@ -1,642 +1,665 @@
-/**************************************************************************
- *
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
- * All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the
- * "Software"), to deal in the Software without restriction, including
- * without limitation the rights to use, copy, modify, merge, publish,
- * distribute, sub license, and/or sell copies of the Software, and to
- * permit persons to whom the Software is furnished to do so, subject to
- * the following conditions:
- *
- * The above copyright notice and this permission notice (including the
- * next paragraph) shall be included in all copies or substantial portions
- * of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
- * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
- * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
- * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- **************************************************************************/
-
-
-/**
- * Framebuffer/renderbuffer functions.
- *
- * \author Brian Paul
- */
-
-
-#include "main/imports.h"
-#include "main/context.h"
-#include "main/fbobject.h"
-#include "main/framebuffer.h"
-#include "main/macros.h"
-#include "main/mfeatures.h"
-#include "main/renderbuffer.h"
-
-#include "pipe/p_context.h"
-#include "pipe/p_defines.h"
-#include "pipe/p_screen.h"
-#include "st_context.h"
-#include "st_cb_fbo.h"
-#include "st_cb_flush.h"
-#include "st_format.h"
-#include "st_texture.h"
-#include "st_manager.h"
-
-#include "util/u_format.h"
-#include "util/u_inlines.h"
-#include "util/u_surface.h"
-
-
-/**
- * gl_renderbuffer::AllocStorage()
- * This is called to allocate the original drawing surface, and
- * during window resize.
- */
-static GLboolean
-st_renderbuffer_alloc_storage(struct gl_context * ctx,
- struct gl_renderbuffer *rb,
- GLenum internalFormat,
- GLuint width, GLuint height)
-{
- struct st_context *st = st_context(ctx);
- struct pipe_context *pipe = st->pipe;
- struct pipe_screen *screen = st->pipe->screen;
- struct st_renderbuffer *strb = st_renderbuffer(rb);
- enum pipe_format format;
- struct pipe_surface surf_tmpl;
-
- if (strb->format != PIPE_FORMAT_NONE)
- format = strb->format;
- else
- format = st_choose_renderbuffer_format(screen, internalFormat,
- rb->NumSamples);
-
- if (format == PIPE_FORMAT_NONE) {
- return FALSE;
- }
-
- /* init renderbuffer fields */
- strb->Base.Width = width;
- strb->Base.Height = height;
- strb->Base.Format = st_pipe_format_to_mesa_format(format);
- strb->Base._BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
- strb->Base.DataType = st_format_datatype(format);
-
- strb->defined = GL_FALSE; /* undefined contents now */
-
- if (strb->software) {
- size_t size;
-
- free(strb->data);
-
- assert(strb->format != PIPE_FORMAT_NONE);
-
- strb->stride = util_format_get_stride(strb->format, width);
- size = util_format_get_2d_size(strb->format, strb->stride, height);
-
- strb->data = malloc(size);
-
- return strb->data != NULL;
- }
- else {
- struct pipe_resource template;
-
- /* Free the old surface and texture
- */
- pipe_surface_reference( &strb->surface, NULL );
- pipe_resource_reference( &strb->texture, NULL );
- pipe_sampler_view_reference(&strb->sampler_view, NULL);
-
- /* Setup new texture template.
- */
- memset(&template, 0, sizeof(template));
- template.target = st->internal_target;
- template.format = format;
- template.width0 = width;
- template.height0 = height;
- template.depth0 = 1;
- template.array_size = 1;
- template.last_level = 0;
- template.nr_samples = rb->NumSamples;
- if (util_format_is_depth_or_stencil(format)) {
- template.bind = PIPE_BIND_DEPTH_STENCIL;
- }
- else {
- template.bind = (PIPE_BIND_DISPLAY_TARGET |
- PIPE_BIND_RENDER_TARGET);
- }
-
- strb->texture = screen->resource_create(screen, &template);
-
- if (!strb->texture)
- return FALSE;
-
- memset(&surf_tmpl, 0, sizeof(surf_tmpl));
- u_surface_default_template(&surf_tmpl, strb->texture, template.bind);
- strb->surface = pipe->create_surface(pipe,
- strb->texture,
- &surf_tmpl);
- if (strb->surface) {
- assert(strb->surface->texture);
- assert(strb->surface->format);
- assert(strb->surface->width == width);
- assert(strb->surface->height == height);
- }
-
- return strb->surface != NULL;
- }
-}
-
-
-/**
- * gl_renderbuffer::Delete()
- */
-static void
-st_renderbuffer_delete(struct gl_renderbuffer *rb)
-{
- struct st_renderbuffer *strb = st_renderbuffer(rb);
- ASSERT(strb);
- pipe_surface_reference(&strb->surface, NULL);
- pipe_resource_reference(&strb->texture, NULL);
- pipe_sampler_view_reference(&strb->sampler_view, NULL);
- free(strb->data);
- free(strb);
-}
-
-
-/**
- * gl_renderbuffer::GetPointer()
- */
-static void *
-null_get_pointer(struct gl_context * ctx, struct gl_renderbuffer *rb,
- GLint x, GLint y)
-{
- /* By returning NULL we force all software rendering to go through
- * the span routines.
- */
-#if 0
- assert(0); /* Should never get called with softpipe */
-#endif
- return NULL;
-}
-
-
-/**
- * Called via ctx->Driver.NewFramebuffer()
- */
-static struct gl_framebuffer *
-st_new_framebuffer(struct gl_context *ctx, GLuint name)
-{
- /* XXX not sure we need to subclass gl_framebuffer for pipe */
- return _mesa_new_framebuffer(ctx, name);
-}
-
-
-/**
- * Called via ctx->Driver.NewRenderbuffer()
- */
-static struct gl_renderbuffer *
-st_new_renderbuffer(struct gl_context *ctx, GLuint name)
-{
- struct st_renderbuffer *strb = ST_CALLOC_STRUCT(st_renderbuffer);
- if (strb) {
- _mesa_init_renderbuffer(&strb->Base, name);
- strb->Base.Delete = st_renderbuffer_delete;
- strb->Base.AllocStorage = st_renderbuffer_alloc_storage;
- strb->Base.GetPointer = null_get_pointer;
- strb->format = PIPE_FORMAT_NONE;
- return &strb->Base;
- }
- return NULL;
-}
-
-
-/**
- * Allocate a renderbuffer for a an on-screen window (not a user-created
- * renderbuffer). The window system code determines the format.
- */
-struct gl_renderbuffer *
-st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
-{
- struct st_renderbuffer *strb;
-
- strb = ST_CALLOC_STRUCT(st_renderbuffer);
- if (!strb) {
- _mesa_error(NULL, GL_OUT_OF_MEMORY, "creating renderbuffer");
- return NULL;
- }
-
- _mesa_init_renderbuffer(&strb->Base, 0);
- strb->Base.ClassID = 0x4242; /* just a unique value */
- strb->Base.NumSamples = samples;
- strb->Base.Format = st_pipe_format_to_mesa_format(format);
- strb->Base._BaseFormat = _mesa_get_format_base_format(strb->Base.Format);
- strb->Base.DataType = st_format_datatype(format);
- strb->format = format;
- strb->software = sw;
-
- switch (format) {
- case PIPE_FORMAT_R8G8B8A8_UNORM:
- case PIPE_FORMAT_B8G8R8A8_UNORM:
- case PIPE_FORMAT_A8R8G8B8_UNORM:
- case PIPE_FORMAT_R8G8B8X8_UNORM:
- case PIPE_FORMAT_B8G8R8X8_UNORM:
- case PIPE_FORMAT_X8R8G8B8_UNORM:
- case PIPE_FORMAT_B5G5R5A1_UNORM:
- case PIPE_FORMAT_B4G4R4A4_UNORM:
- case PIPE_FORMAT_B5G6R5_UNORM:
- strb->Base.InternalFormat = GL_RGBA;
- break;
- case PIPE_FORMAT_Z16_UNORM:
- strb->Base.InternalFormat = GL_DEPTH_COMPONENT16;
- break;
- case PIPE_FORMAT_Z32_UNORM:
- strb->Base.InternalFormat = GL_DEPTH_COMPONENT32;
- break;
- case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
- case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
- case PIPE_FORMAT_Z24X8_UNORM:
- case PIPE_FORMAT_X8Z24_UNORM:
- strb->Base.InternalFormat = GL_DEPTH24_STENCIL8_EXT;
- break;
- case PIPE_FORMAT_S8_USCALED:
- strb->Base.InternalFormat = GL_STENCIL_INDEX8_EXT;
- break;
- case PIPE_FORMAT_R16G16B16A16_SNORM:
- strb->Base.InternalFormat = GL_RGBA16;
- break;
- case PIPE_FORMAT_R8_UNORM:
- strb->Base.InternalFormat = GL_R8;
- break;
- case PIPE_FORMAT_R8G8_UNORM:
- strb->Base.InternalFormat = GL_RG8;
- break;
- case PIPE_FORMAT_R16_UNORM:
- strb->Base.InternalFormat = GL_R16;
- break;
- case PIPE_FORMAT_R16G16_UNORM:
- strb->Base.InternalFormat = GL_RG16;
- break;
- default:
- _mesa_problem(NULL,
- "Unexpected format in st_new_renderbuffer_fb");
- free(strb);
- return NULL;
- }
-
- /* st-specific methods */
- strb->Base.Delete = st_renderbuffer_delete;
- strb->Base.AllocStorage = st_renderbuffer_alloc_storage;
- strb->Base.GetPointer = null_get_pointer;
-
- /* surface is allocated in st_renderbuffer_alloc_storage() */
- strb->surface = NULL;
-
- return &strb->Base;
-}
-
-
-
-
-/**
- * Called via ctx->Driver.BindFramebufferEXT().
- */
-static void
-st_bind_framebuffer(struct gl_context *ctx, GLenum target,
- struct gl_framebuffer *fb, struct gl_framebuffer *fbread)
-{
-
-}
-
-/**
- * Called by ctx->Driver.FramebufferRenderbuffer
- */
-static void
-st_framebuffer_renderbuffer(struct gl_context *ctx,
- struct gl_framebuffer *fb,
- GLenum attachment,
- struct gl_renderbuffer *rb)
-{
- /* XXX no need for derivation? */
- _mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb);
-}
-
-
-/**
- * Called by ctx->Driver.RenderTexture
- */
-static void
-st_render_texture(struct gl_context *ctx,
- struct gl_framebuffer *fb,
- struct gl_renderbuffer_attachment *att)
-{
- struct st_context *st = st_context(ctx);
- struct pipe_context *pipe = st->pipe;
- struct st_renderbuffer *strb;
- struct gl_renderbuffer *rb;
- struct pipe_resource *pt = st_get_texobj_resource(att->Texture);
- struct st_texture_object *stObj;
- const struct gl_texture_image *texImage;
- struct pipe_surface surf_tmpl;
-
- /* When would this fail? Perhaps assert? */
- if (!pt)
- return;
-
- /* get pointer to texture image we're rendeing to */
- texImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel];
-
- /* create new renderbuffer which wraps the texture image */
- rb = st_new_renderbuffer(ctx, 0);
- if (!rb) {
- _mesa_error(ctx, GL_OUT_OF_MEMORY, "glFramebufferTexture()");
- return;
- }
-
- _mesa_reference_renderbuffer(&att->Renderbuffer, rb);
- assert(rb->RefCount == 1);
- rb->AllocStorage = NULL; /* should not get called */
- strb = st_renderbuffer(rb);
-
- assert(strb->Base.RefCount > 0);
-
- /* get the texture for the texture object */
- stObj = st_texture_object(att->Texture);
-
- /* point renderbuffer at texobject */
- strb->rtt = stObj;
- strb->rtt_level = att->TextureLevel;
- strb->rtt_face = att->CubeMapFace;
- strb->rtt_slice = att->Zoffset;
-
- rb->Width = texImage->Width2;
- rb->Height = texImage->Height2;
- rb->_BaseFormat = texImage->_BaseFormat;
- /*printf("***** render to texture level %d: %d x %d\n", att->TextureLevel, rb->Width, rb->Height);*/
-
- /*printf("***** pipe texture %d x %d\n", pt->width0, pt->height0);*/
-
- pipe_resource_reference( &strb->texture, pt );
-
- pipe_surface_reference(&strb->surface, NULL);
-
- pipe_sampler_view_reference(&strb->sampler_view,
- st_get_texture_sampler_view(stObj, pipe));
-
- assert(strb->rtt_level <= strb->texture->last_level);
-
- /* new surface for rendering into the texture */
- memset(&surf_tmpl, 0, sizeof(surf_tmpl));
- surf_tmpl.format = ctx->Color.sRGBEnabled ? strb->texture->format : util_format_linear(strb->texture->format);
- surf_tmpl.usage = PIPE_BIND_RENDER_TARGET;
- surf_tmpl.u.tex.level = strb->rtt_level;
- surf_tmpl.u.tex.first_layer = strb->rtt_face + strb->rtt_slice;
- surf_tmpl.u.tex.last_layer = strb->rtt_face + strb->rtt_slice;
- strb->surface = pipe->create_surface(pipe,
- strb->texture,
- &surf_tmpl);
-
- strb->format = pt->format;
-
- strb->Base.Format = st_pipe_format_to_mesa_format(pt->format);
- strb->Base.DataType = st_format_datatype(pt->format);
-
- /*
- printf("RENDER TO TEXTURE obj=%p pt=%p surf=%p %d x %d\n",
- att->Texture, pt, strb->surface, rb->Width, rb->Height);
- */
-
- /* Invalidate buffer state so that the pipe's framebuffer state
- * gets updated.
- * That's where the new renderbuffer (which we just created) gets
- * passed to the pipe as a (color/depth) render target.
- */
- st_invalidate_state(ctx, _NEW_BUFFERS);
-}
-
-
-/**
- * Called via ctx->Driver.FinishRenderTexture.
- */
-static void
-st_finish_render_texture(struct gl_context *ctx,
- struct gl_renderbuffer_attachment *att)
-{
- struct st_renderbuffer *strb = st_renderbuffer(att->Renderbuffer);
-
- if (!strb)
- return;
-
- strb->rtt = NULL;
-
- /*
- printf("FINISH RENDER TO TEXTURE surf=%p\n", strb->surface);
- */
-
- /* restore previous framebuffer state */
- st_invalidate_state(ctx, _NEW_BUFFERS);
-}
-
-
-/**
- * Validate a renderbuffer attachment for a particular set of bindings.
- */
-static GLboolean
-st_validate_attachment(struct gl_context *ctx,
- struct pipe_screen *screen,
- const struct gl_renderbuffer_attachment *att,
- unsigned bindings)
-{
- const struct st_texture_object *stObj = st_texture_object(att->Texture);
- enum pipe_format format;
- gl_format texFormat;
-
- /* Only validate texture attachments for now, since
- * st_renderbuffer_alloc_storage makes sure that
- * the format is supported.
- */
- if (att->Type != GL_TEXTURE)
- return GL_TRUE;
-
- if (!stObj)
- return GL_FALSE;
-
- format = stObj->pt->format;
- texFormat =
- stObj->base.Image[att->CubeMapFace][att->TextureLevel]->TexFormat;
-
- /* If the encoding is sRGB and sRGB rendering cannot be enabled,
- * check for linear format support instead.
- * Later when we create a surface, we change the format to a linear one. */
- if (!ctx->Const.sRGBCapable &&
- _mesa_get_format_color_encoding(texFormat) == GL_SRGB) {
- const gl_format linearFormat = _mesa_get_srgb_format_linear(texFormat);
- format = st_mesa_format_to_pipe_format(linearFormat);
- }
-
- return screen->is_format_supported(screen, format,
- PIPE_TEXTURE_2D,
- stObj->pt->nr_samples, bindings);
-}
-
-
-/**
- * Check if two renderbuffer attachments name a combined depth/stencil
- * renderbuffer.
- */
-GLboolean
-st_is_depth_stencil_combined(const struct gl_renderbuffer_attachment *depth,
- const struct gl_renderbuffer_attachment *stencil)
-{
- assert(depth && stencil);
-
- if (depth->Type == stencil->Type) {
- if (depth->Type == GL_RENDERBUFFER_EXT &&
- depth->Renderbuffer == stencil->Renderbuffer)
- return GL_TRUE;
-
- if (depth->Type == GL_TEXTURE &&
- depth->Texture == stencil->Texture)
- return GL_TRUE;
- }
-
- return GL_FALSE;
-}
-
-
-/**
- * Check that the framebuffer configuration is valid in terms of what
- * the driver can support.
- *
- * For Gallium we only supports combined Z+stencil, not separate buffers.
- */
-static void
-st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
-{
- struct st_context *st = st_context(ctx);
- struct pipe_screen *screen = st->pipe->screen;
- const struct gl_renderbuffer_attachment *depth =
- &fb->Attachment[BUFFER_DEPTH];
- const struct gl_renderbuffer_attachment *stencil =
- &fb->Attachment[BUFFER_STENCIL];
- GLuint i;
-
- if (depth->Type && stencil->Type && depth->Type != stencil->Type) {
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
- return;
- }
- if (depth->Type == GL_RENDERBUFFER_EXT &&
- stencil->Type == GL_RENDERBUFFER_EXT &&
- depth->Renderbuffer != stencil->Renderbuffer) {
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
- return;
- }
- if (depth->Type == GL_TEXTURE &&
- stencil->Type == GL_TEXTURE &&
- depth->Texture != stencil->Texture) {
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
- return;
- }
-
- if (!st_validate_attachment(ctx,
- screen,
- depth,
- PIPE_BIND_DEPTH_STENCIL)) {
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
- return;
- }
- if (!st_validate_attachment(ctx,
- screen,
- stencil,
- PIPE_BIND_DEPTH_STENCIL)) {
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
- return;
- }
- for (i = 0; i < ctx->Const.MaxColorAttachments; i++) {
- if (!st_validate_attachment(ctx,
- screen,
- &fb->Attachment[BUFFER_COLOR0 + i],
- PIPE_BIND_RENDER_TARGET)) {
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
- return;
- }
- }
-}
-
-
-/**
- * Called via glDrawBuffer.
- */
-static void
-st_DrawBuffers(struct gl_context *ctx, GLsizei count, const GLenum *buffers)
-{
- struct st_context *st = st_context(ctx);
- struct gl_framebuffer *fb = ctx->DrawBuffer;
- GLuint i;
-
- (void) count;
- (void) buffers;
-
- /* add the renderbuffers on demand */
- for (i = 0; i < fb->_NumColorDrawBuffers; i++) {
- gl_buffer_index idx = fb->_ColorDrawBufferIndexes[i];
- st_manager_add_color_renderbuffer(st, fb, idx);
- }
-}
-
-
-/**
- * Called via glReadBuffer.
- */
-static void
-st_ReadBuffer(struct gl_context *ctx, GLenum buffer)
-{
- struct st_context *st = st_context(ctx);
- struct gl_framebuffer *fb = ctx->ReadBuffer;
-
- (void) buffer;
-
- /* add the renderbuffer on demand */
- st_manager_add_color_renderbuffer(st, fb, fb->_ColorReadBufferIndex);
-}
-
-
-void st_init_fbo_functions(struct dd_function_table *functions)
-{
-#if FEATURE_EXT_framebuffer_object
- functions->NewFramebuffer = st_new_framebuffer;
- functions->NewRenderbuffer = st_new_renderbuffer;
- functions->BindFramebuffer = st_bind_framebuffer;
- functions->FramebufferRenderbuffer = st_framebuffer_renderbuffer;
- functions->RenderTexture = st_render_texture;
- functions->FinishRenderTexture = st_finish_render_texture;
- functions->ValidateFramebuffer = st_validate_framebuffer;
-#endif
- /* no longer needed by core Mesa, drivers handle resizes...
- functions->ResizeBuffers = st_resize_buffers;
- */
-
- functions->DrawBuffers = st_DrawBuffers;
- functions->ReadBuffer = st_ReadBuffer;
-}
-
-/* XXX unused ? */
-struct pipe_sampler_view *
-st_get_renderbuffer_sampler_view(struct st_renderbuffer *rb,
- struct pipe_context *pipe)
-{
- if (!rb->sampler_view) {
- rb->sampler_view = st_create_texture_sampler_view(pipe, rb->texture);
- }
-
- return rb->sampler_view;
-}
+/**************************************************************************
+ *
+ * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * All Rights Reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the
+ * "Software"), to deal in the Software without restriction, including
+ * without limitation the rights to use, copy, modify, merge, publish,
+ * distribute, sub license, and/or sell copies of the Software, and to
+ * permit persons to whom the Software is furnished to do so, subject to
+ * the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the
+ * next paragraph) shall be included in all copies or substantial portions
+ * of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
+ * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+ * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+ * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+ *
+ **************************************************************************/
+
+
+/**
+ * Framebuffer/renderbuffer functions.
+ *
+ * \author Brian Paul
+ */
+
+
+#include "main/imports.h"
+#include "main/context.h"
+#include "main/fbobject.h"
+#include "main/framebuffer.h"
+#include "main/macros.h"
+#include "main/mfeatures.h"
+#include "main/renderbuffer.h"
+
+#include "pipe/p_context.h"
+#include "pipe/p_defines.h"
+#include "pipe/p_screen.h"
+#include "st_context.h"
+#include "st_cb_fbo.h"
+#include "st_cb_flush.h"
+#include "st_format.h"
+#include "st_texture.h"
+#include "st_manager.h"
+
+#include "util/u_format.h"
+#include "util/u_inlines.h"
+#include "util/u_surface.h"
+
+
+/**
+ * gl_renderbuffer::AllocStorage()
+ * This is called to allocate the original drawing surface, and
+ * during window resize.
+ */
+static GLboolean
+st_renderbuffer_alloc_storage(struct gl_context * ctx,
+ struct gl_renderbuffer *rb,
+ GLenum internalFormat,
+ GLuint width, GLuint height)
+{
+ struct st_context *st = st_context(ctx);
+ struct pipe_context *pipe = st->pipe;
+ struct pipe_screen *screen = st->pipe->screen;
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
+ enum pipe_format format;
+ struct pipe_surface surf_tmpl;
+
+ if (strb->format != PIPE_FORMAT_NONE)
+ format = strb->format;
+ else
+ format = st_choose_renderbuffer_format(screen, internalFormat,
+ rb->NumSamples);
+
+ if (format == PIPE_FORMAT_NONE) {
+ return FALSE;
+ }
+
+ /* init renderbuffer fields */
+ strb->Base.Width = width;
+ strb->Base.Height = height;
+ strb->Base.Format = st_pipe_format_to_mesa_format(format);
+ strb->Base._BaseFormat = _mesa_base_fbo_format(ctx, internalFormat);
+ strb->Base.DataType = st_format_datatype(format);
+
+ strb->defined = GL_FALSE; /* undefined contents now */
+
+ if (strb->software) {
+ size_t size;
+
+ free(strb->data);
+
+ assert(strb->format != PIPE_FORMAT_NONE);
+
+ strb->stride = util_format_get_stride(strb->format, width);
+ size = util_format_get_2d_size(strb->format, strb->stride, height);
+
+ strb->data = malloc(size);
+
+ return strb->data != NULL;
+ }
+ else {
+ struct pipe_resource template;
+
+ /* Free the old surface and texture
+ */
+ pipe_surface_reference( &strb->surface, NULL );
+ pipe_resource_reference( &strb->texture, NULL );
+ pipe_sampler_view_reference(&strb->sampler_view, NULL);
+
+ /* Setup new texture template.
+ */
+ memset(&template, 0, sizeof(template));
+ template.target = st->internal_target;
+ template.format = format;
+ template.width0 = width;
+ template.height0 = height;
+ template.depth0 = 1;
+ template.array_size = 1;
+ template.last_level = 0;
+ template.nr_samples = rb->NumSamples;
+ if (util_format_is_depth_or_stencil(format)) {
+ template.bind = PIPE_BIND_DEPTH_STENCIL;
+ }
+ else {
+ template.bind = (PIPE_BIND_DISPLAY_TARGET |
+ PIPE_BIND_RENDER_TARGET);
+ }
+
+ strb->texture = screen->resource_create(screen, &template);
+
+ if (!strb->texture)
+ return FALSE;
+
+ memset(&surf_tmpl, 0, sizeof(surf_tmpl));
+ u_surface_default_template(&surf_tmpl, strb->texture, template.bind);
+ strb->surface = pipe->create_surface(pipe,
+ strb->texture,
+ &surf_tmpl);
+ if (strb->surface) {
+ assert(strb->surface->texture);
+ assert(strb->surface->format);
+ assert(strb->surface->width == width);
+ assert(strb->surface->height == height);
+ }
+
+ return strb->surface != NULL;
+ }
+}
+
+
+/**
+ * gl_renderbuffer::Delete()
+ */
+static void
+st_renderbuffer_delete(struct gl_renderbuffer *rb)
+{
+ struct st_renderbuffer *strb = st_renderbuffer(rb);
+ ASSERT(strb);
+ pipe_surface_reference(&strb->surface, NULL);
+ pipe_resource_reference(&strb->texture, NULL);
+ pipe_sampler_view_reference(&strb->sampler_view, NULL);
+ free(strb->data);
+ free(strb);
+}
+
+
+/**
+ * gl_renderbuffer::GetPointer()
+ */
+static void *
+null_get_pointer(struct gl_context * ctx, struct gl_renderbuffer *rb,
+ GLint x, GLint y)
+{
+ /* By returning NULL we force all software rendering to go through
+ * the span routines.
+ */
+#if 0
+ assert(0); /* Should never get called with softpipe */
+#endif
+ return NULL;
+}
+
+
+/**
+ * Called via ctx->Driver.NewFramebuffer()
+ */
+static struct gl_framebuffer *
+st_new_framebuffer(struct gl_context *ctx, GLuint name)
+{
+ /* XXX not sure we need to subclass gl_framebuffer for pipe */
+ return _mesa_new_framebuffer(ctx, name);
+}
+
+
+/**
+ * Called via ctx->Driver.NewRenderbuffer()
+ */
+static struct gl_renderbuffer *
+st_new_renderbuffer(struct gl_context *ctx, GLuint name)
+{
+ struct st_renderbuffer *strb = ST_CALLOC_STRUCT(st_renderbuffer);
+ if (strb) {
+ _mesa_init_renderbuffer(&strb->Base, name);
+ strb->Base.Delete = st_renderbuffer_delete;
+ strb->Base.AllocStorage = st_renderbuffer_alloc_storage;
+ strb->Base.GetPointer = null_get_pointer;
+ strb->format = PIPE_FORMAT_NONE;
+ return &strb->Base;
+ }
+ return NULL;
+}
+
+
+/**
+ * Allocate a renderbuffer for a an on-screen window (not a user-created
+ * renderbuffer). The window system code determines the format.
+ */
+struct gl_renderbuffer *
+st_new_renderbuffer_fb(enum pipe_format format, int samples, boolean sw)
+{
+ struct st_renderbuffer *strb;
+
+ strb = ST_CALLOC_STRUCT(st_renderbuffer);
+ if (!strb) {
+ _mesa_error(NULL, GL_OUT_OF_MEMORY, "creating renderbuffer");
+ return NULL;
+ }
+
+ _mesa_init_renderbuffer(&strb->Base, 0);
+ strb->Base.ClassID = 0x4242; /* just a unique value */
+ strb->Base.NumSamples = samples;
+ strb->Base.Format = st_pipe_format_to_mesa_format(format);
+ strb->Base._BaseFormat = _mesa_get_format_base_format(strb->Base.Format);
+ strb->Base.DataType = st_format_datatype(format);
+ strb->format = format;
+ strb->software = sw;
+
+ switch (format) {
+ case PIPE_FORMAT_R8G8B8A8_UNORM:
+ case PIPE_FORMAT_B8G8R8A8_UNORM:
+ case PIPE_FORMAT_A8R8G8B8_UNORM:
+ case PIPE_FORMAT_R8G8B8X8_UNORM:
+ case PIPE_FORMAT_B8G8R8X8_UNORM:
+ case PIPE_FORMAT_X8R8G8B8_UNORM:
+ case PIPE_FORMAT_B5G5R5A1_UNORM:
+ case PIPE_FORMAT_B4G4R4A4_UNORM:
+ case PIPE_FORMAT_B5G6R5_UNORM:
+ strb->Base.InternalFormat = GL_RGBA;
+ break;
+ case PIPE_FORMAT_Z16_UNORM:
+ strb->Base.InternalFormat = GL_DEPTH_COMPONENT16;
+ break;
+ case PIPE_FORMAT_Z32_UNORM:
+ strb->Base.InternalFormat = GL_DEPTH_COMPONENT32;
+ break;
+ case PIPE_FORMAT_Z24_UNORM_S8_USCALED:
+ case PIPE_FORMAT_S8_USCALED_Z24_UNORM:
+ case PIPE_FORMAT_Z24X8_UNORM:
+ case PIPE_FORMAT_X8Z24_UNORM:
+ strb->Base.InternalFormat = GL_DEPTH24_STENCIL8_EXT;
+ break;
+ case PIPE_FORMAT_S8_USCALED:
+ strb->Base.InternalFormat = GL_STENCIL_INDEX8_EXT;
+ break;
+ case PIPE_FORMAT_R16G16B16A16_SNORM:
+ strb->Base.InternalFormat = GL_RGBA16;
+ break;
+ case PIPE_FORMAT_R8_UNORM:
+ strb->Base.InternalFormat = GL_R8;
+ break;
+ case PIPE_FORMAT_R8G8_UNORM:
+ strb->Base.InternalFormat = GL_RG8;
+ break;
+ case PIPE_FORMAT_R16_UNORM:
+ strb->Base.InternalFormat = GL_R16;
+ break;
+ case PIPE_FORMAT_R16G16_UNORM:
+ strb->Base.InternalFormat = GL_RG16;
+ break;
+ default:
+ _mesa_problem(NULL,
+ "Unexpected format in st_new_renderbuffer_fb");
+ free(strb);
+ return NULL;
+ }
+
+ /* st-specific methods */
+ strb->Base.Delete = st_renderbuffer_delete;
+ strb->Base.AllocStorage = st_renderbuffer_alloc_storage;
+ strb->Base.GetPointer = null_get_pointer;
+
+ /* surface is allocated in st_renderbuffer_alloc_storage() */
+ strb->surface = NULL;
+
+ return &strb->Base;
+}
+
+
+
+
+/**
+ * Called via ctx->Driver.BindFramebufferEXT().
+ */
+static void
+st_bind_framebuffer(struct gl_context *ctx, GLenum target,
+ struct gl_framebuffer *fb, struct gl_framebuffer *fbread)
+{
+
+}
+
+/**
+ * Called by ctx->Driver.FramebufferRenderbuffer
+ */
+static void
+st_framebuffer_renderbuffer(struct gl_context *ctx,
+ struct gl_framebuffer *fb,
+ GLenum attachment,
+ struct gl_renderbuffer *rb)
+{
+ /* XXX no need for derivation? */
+ _mesa_framebuffer_renderbuffer(ctx, fb, attachment, rb);
+}
+
+
+/**
+ * Called by ctx->Driver.RenderTexture
+ */
+static void
+st_render_texture(struct gl_context *ctx,
+ struct gl_framebuffer *fb,
+ struct gl_renderbuffer_attachment *att)
+{
+ struct st_context *st = st_context(ctx);
+ struct pipe_context *pipe = st->pipe;
+ struct st_renderbuffer *strb;
+ struct gl_renderbuffer *rb;
+ struct pipe_resource *pt = st_get_texobj_resource(att->Texture);
+ struct st_texture_object *stObj;
+ const struct gl_texture_image *texImage;
+ struct pipe_surface surf_tmpl;
+
+ /* When would this fail? Perhaps assert? */
+ if (!pt)
+ return;
+
+ /* get pointer to texture image we're rendeing to */
+ texImage = att->Texture->Image[att->CubeMapFace][att->TextureLevel];
+
+ /* create new renderbuffer which wraps the texture image */
+ rb = st_new_renderbuffer(ctx, 0);
+ if (!rb) {
+ _mesa_error(ctx, GL_OUT_OF_MEMORY, "glFramebufferTexture()");
+ return;
+ }
+
+ _mesa_reference_renderbuffer(&att->Renderbuffer, rb);
+ assert(rb->RefCount == 1);
+ rb->AllocStorage = NULL; /* should not get called */
+ strb = st_renderbuffer(rb);
+
+ assert(strb->Base.RefCount > 0);
+
+ /* get the texture for the texture object */
+ stObj = st_texture_object(att->Texture);
+
+ /* point renderbuffer at texobject */
+ strb->rtt = stObj;
+ strb->rtt_level = att->TextureLevel;
+ strb->rtt_face = att->CubeMapFace;
+ strb->rtt_slice = att->Zoffset;
+
+ rb->Width = texImage->Width2;
+ rb->Height = texImage->Height2;
+ rb->_BaseFormat = texImage->_BaseFormat;
+ /*printf("***** render to texture level %d: %d x %d\n", att->TextureLevel, rb->Width, rb->Height);*/
+
+ /*printf("***** pipe texture %d x %d\n", pt->width0, pt->height0);*/
+
+ pipe_resource_reference( &strb->texture, pt );
+
+ pipe_surface_reference(&strb->surface, NULL);
+
+ pipe_sampler_view_reference(&strb->sampler_view,
+ st_get_texture_sampler_view(stObj, pipe));
+
+ assert(strb->rtt_level <= strb->texture->last_level);
+
+ /* new surface for rendering into the texture */
+ memset(&surf_tmpl, 0, sizeof(surf_tmpl));
+ surf_tmpl.format = ctx->Color.sRGBEnabled ? strb->texture->format : util_format_linear(strb->texture->format);
+ surf_tmpl.usage = PIPE_BIND_RENDER_TARGET;
+ surf_tmpl.u.tex.level = strb->rtt_level;
+ surf_tmpl.u.tex.first_layer = strb->rtt_face + strb->rtt_slice;
+ surf_tmpl.u.tex.last_layer = strb->rtt_face + strb->rtt_slice;
+ strb->surface = pipe->create_surface(pipe,
+ strb->texture,
+ &surf_tmpl);
+
+ strb->format = pt->format;
+
+ strb->Base.Format = st_pipe_format_to_mesa_format(pt->format);
+ strb->Base.DataType = st_format_datatype(pt->format);
+
+ /*
+ printf("RENDER TO TEXTURE obj=%p pt=%p surf=%p %d x %d\n",
+ att->Texture, pt, strb->surface, rb->Width, rb->Height);
+ */
+
+ /* Invalidate buffer state so that the pipe's framebuffer state
+ * gets updated.
+ * That's where the new renderbuffer (which we just created) gets
+ * passed to the pipe as a (color/depth) render target.
+ */
+ st_invalidate_state(ctx, _NEW_BUFFERS);
+}
+
+
+/**
+ * Called via ctx->Driver.FinishRenderTexture.
+ */
+static void
+st_finish_render_texture(struct gl_context *ctx,
+ struct gl_renderbuffer_attachment *att)
+{
+ struct st_renderbuffer *strb = st_renderbuffer(att->Renderbuffer);
+
+ if (!strb)
+ return;
+
+ strb->rtt = NULL;
+
+ /*
+ printf("FINISH RENDER TO TEXTURE surf=%p\n", strb->surface);
+ */
+
+ /* restore previous framebuffer state */
+ st_invalidate_state(ctx, _NEW_BUFFERS);
+}
+
+
+/**
+ * Validate a renderbuffer attachment for a particular set of bindings.
+ */
+static GLboolean
+st_validate_attachment(struct gl_context *ctx,
+ struct pipe_screen *screen,
+ const struct gl_renderbuffer_attachment *att,
+ unsigned bindings)
+{
+ const struct st_texture_object *stObj = st_texture_object(att->Texture);
+ enum pipe_format format;
+ gl_format texFormat;
+
+ /* Only validate texture attachments for now, since
+ * st_renderbuffer_alloc_storage makes sure that
+ * the format is supported.
+ */
+ if (att->Type != GL_TEXTURE)
+ return GL_TRUE;
+
+ if (!stObj)
+ return GL_FALSE;
+
+ format = stObj->pt->format;
+ texFormat =
+ stObj->base.Image[att->CubeMapFace][att->TextureLevel]->TexFormat;
+
+ /* If the encoding is sRGB and sRGB rendering cannot be enabled,
+ * check for linear format support instead.
+ * Later when we create a surface, we change the format to a linear one. */
+ if (!ctx->Const.sRGBCapable &&
+ _mesa_get_format_color_encoding(texFormat) == GL_SRGB) {
+ const gl_format linearFormat = _mesa_get_srgb_format_linear(texFormat);
+ format = st_mesa_format_to_pipe_format(linearFormat);
+ }
+
+ return screen->is_format_supported(screen, format,
+ PIPE_TEXTURE_2D,
+ stObj->pt->nr_samples, bindings);
+}
+
+
+/**
+ * Check if two renderbuffer attachments name a combined depth/stencil
+ * renderbuffer.
+ */
+GLboolean
+st_is_depth_stencil_combined(const struct gl_renderbuffer_attachment *depth,
+ const struct gl_renderbuffer_attachment *stencil)
+{
+ assert(depth && stencil);
+
+ if (depth->Type == stencil->Type) {
+ if (depth->Type == GL_RENDERBUFFER_EXT &&
+ depth->Renderbuffer == stencil->Renderbuffer)
+ return GL_TRUE;
+
+ if (depth->Type == GL_TEXTURE &&
+ depth->Texture == stencil->Texture)
+ return GL_TRUE;
+ }
+
+ return GL_FALSE;
+}
+
+
+/**
+ * Check that the framebuffer configuration is valid in terms of what
+ * the driver can support.
+ *
+ * For Gallium we only supports combined Z+stencil, not separate buffers.
+ */
+static void
+st_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
+{
+ struct st_context *st = st_context(ctx);
+ struct pipe_screen *screen = st->pipe->screen;
+ const struct gl_renderbuffer_attachment *depth =
+ &fb->Attachment[BUFFER_DEPTH];
+ const struct gl_renderbuffer_attachment *stencil =
+ &fb->Attachment[BUFFER_STENCIL];
+ GLuint i;
+ enum pipe_format first_format = PIPE_FORMAT_NONE;
+ boolean mixed_formats =
+ screen->get_param(screen, PIPE_CAP_MIXED_COLORBUFFER_FORMATS) != 0;
+
+ if (depth->Type && stencil->Type && depth->Type != stencil->Type) {
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ return;
+ }
+ if (depth->Type == GL_RENDERBUFFER_EXT &&
+ stencil->Type == GL_RENDERBUFFER_EXT &&
+ depth->Renderbuffer != stencil->Renderbuffer) {
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ return;
+ }
+ if (depth->Type == GL_TEXTURE &&
+ stencil->Type == GL_TEXTURE &&
+ depth->Texture != stencil->Texture) {
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ return;
+ }
+
+ if (!st_validate_attachment(ctx,
+ screen,
+ depth,
+ PIPE_BIND_DEPTH_STENCIL)) {
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ return;
+ }
+ if (!st_validate_attachment(ctx,
+ screen,
+ stencil,
+ PIPE_BIND_DEPTH_STENCIL)) {
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ return;
+ }
+ for (i = 0; i < ctx->Const.MaxColorAttachments; i++) {
+ struct gl_renderbuffer_attachment *att =
+ &fb->Attachment[BUFFER_COLOR0 + i];
+ enum pipe_format format;
+
+ if (!st_validate_attachment(ctx,
+ screen,
+ att,
+ PIPE_BIND_RENDER_TARGET)) {
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ return;
+ }
+
+ if (!mixed_formats) {
+ /* Disallow mixed formats. */
+ if (att->Type != GL_NONE) {
+ format = st_renderbuffer(att->Renderbuffer)->surface->format;
+ } else {
+ continue;
+ }
+
+ if (first_format == PIPE_FORMAT_NONE) {
+ first_format = format;
+ } else if (format != first_format) {
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ return;
+ }
+ }
+ }
+}
+
+
+/**
+ * Called via glDrawBuffer.
+ */
+static void
+st_DrawBuffers(struct gl_context *ctx, GLsizei count, const GLenum *buffers)
+{
+ struct st_context *st = st_context(ctx);
+ struct gl_framebuffer *fb = ctx->DrawBuffer;
+ GLuint i;
+
+ (void) count;
+ (void) buffers;
+
+ /* add the renderbuffers on demand */
+ for (i = 0; i < fb->_NumColorDrawBuffers; i++) {
+ gl_buffer_index idx = fb->_ColorDrawBufferIndexes[i];
+ st_manager_add_color_renderbuffer(st, fb, idx);
+ }
+}
+
+
+/**
+ * Called via glReadBuffer.
+ */
+static void
+st_ReadBuffer(struct gl_context *ctx, GLenum buffer)
+{
+ struct st_context *st = st_context(ctx);
+ struct gl_framebuffer *fb = ctx->ReadBuffer;
+
+ (void) buffer;
+
+ /* add the renderbuffer on demand */
+ st_manager_add_color_renderbuffer(st, fb, fb->_ColorReadBufferIndex);
+}
+
+
+void st_init_fbo_functions(struct dd_function_table *functions)
+{
+#if FEATURE_EXT_framebuffer_object
+ functions->NewFramebuffer = st_new_framebuffer;
+ functions->NewRenderbuffer = st_new_renderbuffer;
+ functions->BindFramebuffer = st_bind_framebuffer;
+ functions->FramebufferRenderbuffer = st_framebuffer_renderbuffer;
+ functions->RenderTexture = st_render_texture;
+ functions->FinishRenderTexture = st_finish_render_texture;
+ functions->ValidateFramebuffer = st_validate_framebuffer;
+#endif
+ /* no longer needed by core Mesa, drivers handle resizes...
+ functions->ResizeBuffers = st_resize_buffers;
+ */
+
+ functions->DrawBuffers = st_DrawBuffers;
+ functions->ReadBuffer = st_ReadBuffer;
+}
+
+/* XXX unused ? */
+struct pipe_sampler_view *
+st_get_renderbuffer_sampler_view(struct st_renderbuffer *rb,
+ struct pipe_context *pipe)
+{
+ if (!rb->sampler_view) {
+ rb->sampler_view = st_create_texture_sampler_view(pipe, rb->texture);
+ }
+
+ return rb->sampler_view;
+}
diff --git a/mesalib/src/mesa/state_tracker/st_draw.c b/mesalib/src/mesa/state_tracker/st_draw.c
index 40afa4362..487f3f19c 100644
--- a/mesalib/src/mesa/state_tracker/st_draw.c
+++ b/mesalib/src/mesa/state_tracker/st_draw.c
@@ -181,7 +181,7 @@ static GLuint fixed_types[4] = {
/**
* Return a PIPE_FORMAT_x for the given GL datatype and size.
*/
-GLuint
+enum pipe_format
st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
GLboolean normalized)
{
@@ -211,7 +211,7 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
case GL_UNSIGNED_BYTE: return ubyte_types_norm[size-1];
case GL_FIXED: return fixed_types[size-1];
default: assert(0); return 0;
- }
+ }
}
else {
switch (type) {
@@ -226,15 +226,13 @@ st_pipe_vertex_format(GLenum type, GLuint size, GLenum format,
case GL_UNSIGNED_BYTE: return ubyte_types_scale[size-1];
case GL_FIXED: return fixed_types[size-1];
default: assert(0); return 0;
- }
+ }
}
- return 0; /* silence compiler warning */
+ return PIPE_FORMAT_NONE; /* silence compiler warning */
}
-
-
/**
* Examine the active arrays to determine if we have interleaved
* vertex arrays all living in one VBO, or all living in user space.
@@ -253,8 +251,9 @@ is_interleaved_arrays(const struct st_vertex_program *vp,
for (attr = 0; attr < vpv->num_inputs; attr++) {
const GLuint mesaAttr = vp->index_to_input[attr];
- const struct gl_buffer_object *bufObj = arrays[mesaAttr]->BufferObj;
- const GLsizei stride = arrays[mesaAttr]->StrideB; /* in bytes */
+ const struct gl_client_array *array = arrays[mesaAttr];
+ const struct gl_buffer_object *bufObj = array->BufferObj;
+ const GLsizei stride = array->StrideB; /* in bytes */
if (firstStride < 0) {
firstStride = stride;
@@ -272,9 +271,9 @@ is_interleaved_arrays(const struct st_vertex_program *vp,
return GL_FALSE;
}
if (!client_addr) {
- client_addr = arrays[mesaAttr]->Ptr;
+ client_addr = array->Ptr;
}
- else if (abs(arrays[mesaAttr]->Ptr - client_addr) > firstStride) {
+ else if (abs(array->Ptr - client_addr) > firstStride) {
/* arrays start too far apart */
return GL_FALSE;
}
@@ -315,8 +314,8 @@ setup_interleaved_attribs(struct gl_context *ctx,
GLuint attr;
const GLubyte *low_addr = NULL;
- /* Find the lowest address. */
- if(vpv->num_inputs) {
+ /* Find the lowest address of the arrays we're drawing */
+ if (vpv->num_inputs) {
low_addr = arrays[vp->index_to_input[0]]->Ptr;
for (attr = 1; attr < vpv->num_inputs; attr++) {
@@ -327,22 +326,24 @@ setup_interleaved_attribs(struct gl_context *ctx,
for (attr = 0; attr < vpv->num_inputs; attr++) {
const GLuint mesaAttr = vp->index_to_input[attr];
- struct gl_buffer_object *bufobj = arrays[mesaAttr]->BufferObj;
+ const struct gl_client_array *array = arrays[mesaAttr];
+ struct gl_buffer_object *bufobj = array->BufferObj;
struct st_buffer_object *stobj = st_buffer_object(bufobj);
- GLsizei stride = arrays[mesaAttr]->StrideB;
+ GLsizei stride = array->StrideB;
if (attr == 0) {
if (bufobj && bufobj->Name) {
vbuffer->buffer = NULL;
pipe_resource_reference(&vbuffer->buffer, stobj->buffer);
vbuffer->buffer_offset = pointer_to_offset(low_addr);
- } else {
- uint divisor = arrays[mesaAttr]->InstanceDivisor;
+ }
+ else {
+ uint divisor = array->InstanceDivisor;
uint length = (divisor ? num_instances / divisor : max_index) + 1;
- vbuffer->buffer =
- pipe_user_buffer_create(pipe->screen, (void*)low_addr,
- stride * length,
- PIPE_BIND_VERTEX_BUFFER);
+ vbuffer->buffer = pipe_user_buffer_create(pipe->screen,
+ (void*) low_addr,
+ stride * length,
+ PIPE_BIND_VERTEX_BUFFER);
vbuffer->buffer_offset = 0;
/* Track user vertex buffers. */
@@ -353,15 +354,13 @@ setup_interleaved_attribs(struct gl_context *ctx,
vbuffer->stride = stride; /* in bytes */
}
- velements[attr].src_offset =
- (unsigned) (arrays[mesaAttr]->Ptr - low_addr);
- velements[attr].instance_divisor = arrays[mesaAttr]->InstanceDivisor;
+ velements[attr].src_offset = (unsigned) (array->Ptr - low_addr);
+ velements[attr].instance_divisor = array->InstanceDivisor;
velements[attr].vertex_buffer_index = 0;
- velements[attr].src_format =
- st_pipe_vertex_format(arrays[mesaAttr]->Type,
- arrays[mesaAttr]->Size,
- arrays[mesaAttr]->Format,
- arrays[mesaAttr]->Normalized);
+ velements[attr].src_format = st_pipe_vertex_format(array->Type,
+ array->Size,
+ array->Format,
+ array->Normalized);
assert(velements[attr].src_format);
}
}
@@ -389,8 +388,9 @@ setup_non_interleaved_attribs(struct gl_context *ctx,
for (attr = 0; attr < vpv->num_inputs; attr++) {
const GLuint mesaAttr = vp->index_to_input[attr];
- struct gl_buffer_object *bufobj = arrays[mesaAttr]->BufferObj;
- GLsizei stride = arrays[mesaAttr]->StrideB;
+ const struct gl_client_array *array = arrays[mesaAttr];
+ struct gl_buffer_object *bufobj = array->BufferObj;
+ GLsizei stride = array->StrideB;
if (bufobj && bufobj->Name) {
/* Attribute data is in a VBO.
@@ -402,30 +402,39 @@ setup_non_interleaved_attribs(struct gl_context *ctx,
vbuffer[attr].buffer = NULL;
pipe_resource_reference(&vbuffer[attr].buffer, stobj->buffer);
- vbuffer[attr].buffer_offset = pointer_to_offset(arrays[mesaAttr]->Ptr);
+ vbuffer[attr].buffer_offset = pointer_to_offset(array->Ptr);
}
else {
/* wrap user data */
- if (arrays[mesaAttr]->Ptr) {
- uint divisor = arrays[mesaAttr]->InstanceDivisor;
- uint length = (divisor ? num_instances / divisor : max_index) + 1;
- vbuffer[attr].buffer =
- pipe_user_buffer_create(pipe->screen,
- (void *) arrays[mesaAttr]->Ptr,
- stride * length,
- PIPE_BIND_VERTEX_BUFFER);
+ uint bytes;
+ void *ptr;
+
+ if (array->Ptr) {
+ if (stride == 0) {
+ bytes = _mesa_sizeof_type(array->Type) * array->Size;
+ }
+ else {
+ uint divisor = array->InstanceDivisor;
+ uint length = (divisor ? num_instances / divisor : max_index) + 1;
+ bytes = stride * length;
+ }
+
+ ptr = (void *) array->Ptr;
}
else {
/* no array, use ctx->Current.Attrib[] value */
- uint bytes = sizeof(ctx->Current.Attrib[0]);
- vbuffer[attr].buffer =
- pipe_user_buffer_create(pipe->screen,
- (void *) ctx->Current.Attrib[mesaAttr],
- bytes,
- PIPE_BIND_VERTEX_BUFFER);
+ bytes = sizeof(ctx->Current.Attrib[0]);
+ ptr = (void *) ctx->Current.Attrib[mesaAttr];
stride = 0;
}
+ assert(ptr);
+ assert(bytes);
+
+ vbuffer[attr].buffer =
+ pipe_user_buffer_create(pipe->screen, ptr, bytes,
+ PIPE_BIND_VERTEX_BUFFER);
+
vbuffer[attr].buffer_offset = 0;
/* Track user vertex buffers. */
@@ -438,13 +447,12 @@ setup_non_interleaved_attribs(struct gl_context *ctx,
vbuffer[attr].stride = stride; /* in bytes */
velements[attr].src_offset = 0;
- velements[attr].instance_divisor = arrays[mesaAttr]->InstanceDivisor;
+ velements[attr].instance_divisor = array->InstanceDivisor;
velements[attr].vertex_buffer_index = attr;
- velements[attr].src_format
- = st_pipe_vertex_format(arrays[mesaAttr]->Type,
- arrays[mesaAttr]->Size,
- arrays[mesaAttr]->Format,
- arrays[mesaAttr]->Normalized);
+ velements[attr].src_format = st_pipe_vertex_format(array->Type,
+ array->Size,
+ array->Format,
+ array->Normalized);
assert(velements[attr].src_format);
}
}
@@ -594,7 +602,8 @@ st_validate_varrays(struct gl_context *ctx,
}
else {
setup_non_interleaved_attribs(ctx, vp, vpv, arrays,
- vbuffer, velements, max_index, num_instances);
+ vbuffer, velements, max_index,
+ num_instances);
num_vbuffers = vpv->num_inputs;
num_velements = vpv->num_inputs;
}
@@ -647,7 +656,8 @@ st_draw_vbo(struct gl_context *ctx,
for (i = 0; i < nr_prims; i++) {
num_instances = MAX2(num_instances, prims[i].num_instances);
}
- } else {
+ }
+ else {
/* Get min/max index for non-indexed drawing. */
min_index = ~0;
max_index = 0;
@@ -699,7 +709,8 @@ st_draw_vbo(struct gl_context *ctx,
pipe->redefine_user_buffer(pipe, st->user_vb[i],
min_index * stride,
(max_index + 1 - min_index) * stride);
- } else {
+ }
+ else {
/* stride == 0 */
pipe->redefine_user_buffer(pipe, st->user_vb[i],
0, st->user_vb[i]->width0);
@@ -743,7 +754,8 @@ st_draw_vbo(struct gl_context *ctx,
}
-void st_init_draw( struct st_context *st )
+void
+st_init_draw(struct st_context *st)
{
struct gl_context *ctx = st->ctx;
@@ -763,11 +775,10 @@ void st_init_draw( struct st_context *st )
}
-void st_destroy_draw( struct st_context *st )
+void
+st_destroy_draw(struct st_context *st)
{
#if FEATURE_feedback || FEATURE_rastpos
draw_destroy(st->draw);
#endif
}
-
-
diff --git a/xkbcomp/xkbscan.c b/xkbcomp/xkbscan.c
index 802598818..814a1235c 100644
--- a/xkbcomp/xkbscan.c
+++ b/xkbcomp/xkbscan.c
@@ -1,745 +1,748 @@
-/************************************************************
- Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
-
- Permission to use, copy, modify, and distribute this
- software and its documentation for any purpose and without
- fee is hereby granted, provided that the above copyright
- notice appear in all copies and that both that copyright
- notice and this permission notice appear in supporting
- documentation, and that the name of Silicon Graphics not be
- used in advertising or publicity pertaining to distribution
- of the software without specific prior written permission.
- Silicon Graphics makes no representation about the suitability
- of this software for any purpose. It is provided "as is"
- without any express or implied warranty.
-
- SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
- SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
- AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
- GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
- DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
- THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
- ********************************************************/
-
-#include <stdio.h>
-#include <ctype.h>
-#include <X11/Xos.h>
-#include <X11/Xlib.h>
-#include <X11/XKBlib.h>
-
-#include "tokens.h"
-#define DEBUG_VAR scanDebug
-#include "utils.h"
-#include "parseutils.h"
-
-unsigned int scanDebug;
-
-FILE *yyin = NULL;
-
-static char scanFileBuf[1024] = {0};
-char *scanFile = scanFileBuf;
-int lineNum = 0;
-
-int scanInt;
-
-char scanBuf[1024];
-static int scanStrLine = 0;
-
-#define BUFSIZE 4096
-static char readBuf[BUFSIZE];
-static int readBufPos = 0;
-static int readBufLen = 0;
-
-#ifdef DEBUG
-extern int debugFlags;
-
-static char *
-tokText(int tok)
-{
- static char buf[32];
-
- switch (tok)
- {
- case END_OF_FILE:
- snprintf(buf, sizeof(buf), "END_OF_FILE");
- break;
- case ERROR_TOK:
- snprintf(buf, sizeof(buf), "ERROR");
- break;
-
- case XKB_KEYMAP:
- snprintf(buf, sizeof(buf), "XKB_KEYMAP");
- break;
- case XKB_KEYCODES:
- snprintf(buf, sizeof(buf), "XKB_KEYCODES");
- break;
- case XKB_TYPES:
- snprintf(buf, sizeof(buf), "XKB_TYPES");
- break;
- case XKB_SYMBOLS:
- snprintf(buf, sizeof(buf), "XKB_SYMBOLS");
- break;
- case XKB_COMPATMAP:
- snprintf(buf, sizeof(buf), "XKB_COMPATMAP");
- break;
- case XKB_GEOMETRY:
- snprintf(buf, sizeof(buf), "XKB_GEOMETRY");
- break;
- case XKB_SEMANTICS:
- snprintf(buf, sizeof(buf), "XKB_SEMANTICS");
- break;
- case XKB_LAYOUT:
- snprintf(buf, sizeof(buf), "XKB_LAYOUT");
- break;
-
- case INCLUDE:
- snprintf(buf, sizeof(buf), "INCLUDE");
- break;
- case OVERRIDE:
- snprintf(buf, sizeof(buf), "OVERRIDE");
- break;
- case AUGMENT:
- snprintf(buf, sizeof(buf), "AUGMENT");
- break;
- case REPLACE:
- snprintf(buf, sizeof(buf), "REPLACE");
- break;
- case ALTERNATE:
- snprintf(buf, sizeof(buf), "ALTERNATE");
- break;
-
- case VIRTUAL_MODS:
- snprintf(buf, sizeof(buf), "VIRTUAL_MODS");
- break;
- case TYPE:
- snprintf(buf, sizeof(buf), "TYPE");
- break;
- case INTERPRET:
- snprintf(buf, sizeof(buf), "INTERPRET");
- break;
- case ACTION_TOK:
- snprintf(buf, sizeof(buf), "ACTION");
- break;
- case KEY:
- snprintf(buf, sizeof(buf), "KEY");
- break;
- case ALIAS:
- snprintf(buf, sizeof(buf), "ALIAS");
- break;
- case GROUP:
- snprintf(buf, sizeof(buf), "GROUP");
- break;
- case MODIFIER_MAP:
- snprintf(buf, sizeof(buf), "MODIFIER_MAP");
- break;
- case INDICATOR:
- snprintf(buf, sizeof(buf), "INDICATOR");
- break;
- case SHAPE:
- snprintf(buf, sizeof(buf), "SHAPE");
- break;
- case KEYS:
- snprintf(buf, sizeof(buf), "KEYS");
- break;
- case ROW:
- snprintf(buf, sizeof(buf), "ROW");
- break;
- case SECTION:
- snprintf(buf, sizeof(buf), "SECTION");
- break;
- case OVERLAY:
- snprintf(buf, sizeof(buf), "OVERLAY");
- break;
- case TEXT:
- snprintf(buf, sizeof(buf), "TEXT");
- break;
- case OUTLINE:
- snprintf(buf, sizeof(buf), "OUTLINE");
- break;
- case SOLID:
- snprintf(buf, sizeof(buf), "SOLID");
- break;
- case LOGO:
- snprintf(buf, sizeof(buf), "LOGO");
- break;
- case VIRTUAL:
- snprintf(buf, sizeof(buf), "VIRTUAL");
- break;
-
- case EQUALS:
- snprintf(buf, sizeof(buf), "EQUALS");
- break;
- case PLUS:
- snprintf(buf, sizeof(buf), "PLUS");
- break;
- case MINUS:
- snprintf(buf, sizeof(buf), "MINUS");
- break;
- case DIVIDE:
- snprintf(buf, sizeof(buf), "DIVIDE");
- break;
- case TIMES:
- snprintf(buf, sizeof(buf), "TIMES");
- break;
- case OBRACE:
- snprintf(buf, sizeof(buf), "OBRACE");
- break;
- case CBRACE:
- snprintf(buf, sizeof(buf), "CBRACE");
- break;
- case OPAREN:
- snprintf(buf, sizeof(buf), "OPAREN");
- break;
- case CPAREN:
- snprintf(buf, sizeof(buf), "CPAREN");
- break;
- case OBRACKET:
- snprintf(buf, sizeof(buf), "OBRACKET");
- break;
- case CBRACKET:
- snprintf(buf, sizeof(buf), "CBRACKET");
- break;
- case DOT:
- snprintf(buf, sizeof(buf), "DOT");
- break;
- case COMMA:
- snprintf(buf, sizeof(buf), "COMMA");
- break;
- case SEMI:
- snprintf(buf, sizeof(buf), "SEMI");
- break;
- case EXCLAM:
- snprintf(buf, sizeof(buf), "EXCLAM");
- break;
- case INVERT:
- snprintf(buf, sizeof(buf), "INVERT");
- break;
-
- case STRING:
- snprintf(buf, sizeof(buf), "STRING (%s)", scanBuf);
- break;
- case INTEGER:
- snprintf(buf, sizeof(buf), "INTEGER (0x%x)", scanInt);
- break;
- case FLOAT:
- snprintf(buf, sizeof(buf), "FLOAT (%d.%d)",
- scanInt / XkbGeomPtsPerMM, scanInt % XkbGeomPtsPerMM);
- break;
- case IDENT:
- snprintf(buf, sizeof(buf), "IDENT (%s)", scanBuf);
- break;
- case KEYNAME:
- snprintf(buf, sizeof(buf), "KEYNAME (%s)", scanBuf);
- break;
-
- case PARTIAL:
- snprintf(buf, sizeof(buf), "PARTIAL");
- break;
- case DEFAULT:
- snprintf(buf, sizeof(buf), "DEFAULT");
- break;
- case HIDDEN:
- snprintf(buf, sizeof(buf), "HIDDEN");
- break;
-
- case ALPHANUMERIC_KEYS:
- snprintf(buf, sizeof(buf), "ALPHANUMERIC_KEYS");
- break;
- case MODIFIER_KEYS:
- snprintf(buf, sizeof(buf), "MODIFIER_KEYS");
- break;
- case KEYPAD_KEYS:
- snprintf(buf, sizeof(buf), "KEYPAD_KEYS");
- break;
- case FUNCTION_KEYS:
- snprintf(buf, sizeof(buf), "FUNCTION_KEYS");
- break;
- case ALTERNATE_GROUP:
- snprintf(buf, sizeof(buf), "ALTERNATE_GROUP");
- break;
-
- default:
- snprintf(buf, sizeof(buf), "UNKNOWN");
- break;
- }
- return buf;
-}
-#endif
-
-static int
-scanchar(void)
-{
- if (readBufPos >= readBufLen) {
- readBufLen = fread(readBuf, 1, BUFSIZE, yyin);
- readBufPos = 0;
- if (!readBufLen)
- return EOF;
- if (feof(yyin))
- readBuf[readBufLen] = EOF;
- }
-
- return readBuf[readBufPos++];
-}
-
-static void
-unscanchar(int c)
-{
- if (readBuf[--readBufPos] != c) {
- fprintf(stderr, "UNGETCHAR FAILED! Put back %c, was expecting %c at "
- "position %d, buf is '%s'\n", c, readBuf[readBufPos],
- readBufPos, readBuf);
- _exit(94);
- }
-}
-
-int
-setScanState(char *file, int line)
-{
- if (file != NULL)
- strncpy(scanFile, file, 1024);
- if (line >= 0)
- lineNum = line;
- return 1;
-}
-
-static int
-yyGetString(void)
-{
- int ch, i;
-
- i = 0;
- while (((ch = scanchar()) != EOF) && (ch != '"'))
- {
- if (ch == '\\')
- {
- if ((ch = scanchar()) != EOF)
- {
- if (ch == 'n')
- ch = '\n';
- else if (ch == 't')
- ch = '\t';
- else if (ch == 'v')
- ch = '\v';
- else if (ch == 'b')
- ch = '\b';
- else if (ch == 'r')
- ch = '\r';
- else if (ch == 'f')
- ch = '\f';
- else if (ch == 'e')
- ch = '\033';
- else if (ch == '0')
- {
- int tmp, stop;
- ch = stop = 0;
- if (((tmp = scanchar()) != EOF) && (isdigit(tmp))
- && (tmp != '8') && (tmp != '9'))
- {
- ch = (ch * 8) + (tmp - '0');
- }
- else
- {
- stop = 1;
- unscanchar(tmp);
- }
- if (!stop)
- {
- if (((tmp = scanchar()) != EOF)
- && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
- {
- ch = (ch * 8) + (tmp - '0');
- }
- else
- {
- stop = 1;
- unscanchar(tmp);
- }
- }
- if (!stop)
- {
- if (((tmp = scanchar()) != EOF)
- && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
- {
- ch = (ch * 8) + (tmp - '0');
- }
- else
- {
- stop = 1;
- unscanchar(tmp);
- }
- }
- }
- }
- else
- return ERROR_TOK;
- }
- if (i < sizeof(scanBuf) - 1)
- scanBuf[i++] = ch;
- }
- if (ch == '"')
- {
- scanBuf[i++] = '\0';
- scanStrLine = lineNum;
- return STRING;
- }
- return ERROR_TOK;
-}
-
-static int
-yyGetKeyName(void)
-{
- int ch, i;
-
- i = 0;
- while (((ch = scanchar()) != EOF) && (ch != '>'))
- {
- if (ch == '\\')
- {
- if ((ch = scanchar()) != EOF)
- {
- if (ch == 'n')
- ch = '\n';
- else if (ch == 't')
- ch = '\t';
- else if (ch == 'v')
- ch = '\v';
- else if (ch == 'b')
- ch = '\b';
- else if (ch == 'r')
- ch = '\r';
- else if (ch == 'f')
- ch = '\f';
- else if (ch == 'e')
- ch = '\033';
- else if (ch == '0')
- {
- int tmp, stop;
- ch = stop = 0;
- if (((tmp = scanchar()) != EOF) && (isdigit(tmp))
- && (tmp != '8') && (tmp != '9'))
- {
- ch = (ch * 8) + (tmp - '0');
- }
- else
- {
- stop = 1;
- unscanchar(tmp);
- }
- if ((!stop) && ((tmp = scanchar()) != EOF)
- && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
- {
- ch = (ch * 8) + (tmp - '0');
- }
- else
- {
- stop = 1;
- unscanchar(tmp);
- }
- if ((!stop) && ((tmp = scanchar()) != EOF)
- && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
- {
- ch = (ch * 8) + (tmp - '0');
- }
- else
- {
- stop = 1;
- unscanchar(tmp);
- }
- }
- }
- else
- return ERROR_TOK;
- }
-
- if (i < sizeof(scanBuf) - 1)
- scanBuf[i++] = ch;
- }
- if ((ch == '>') && (i < 5))
- {
- scanBuf[i++] = '\0';
- scanStrLine = lineNum;
- return KEYNAME;
- }
- return ERROR_TOK;
-}
-
-static struct _Keyword
-{
- const char *keyword;
- int token;
-} keywords[] =
-{
- {
- "xkb_keymap", XKB_KEYMAP},
- {
- "xkb_keycodes", XKB_KEYCODES},
- {
- "xkb_types", XKB_TYPES},
- {
- "xkb_symbols", XKB_SYMBOLS},
- {
- "xkb_compat", XKB_COMPATMAP},
- {
- "xkb_compat_map", XKB_COMPATMAP},
- {
- "xkb_compatibility", XKB_COMPATMAP},
- {
- "xkb_compatibility_map", XKB_COMPATMAP},
- {
- "xkb_geometry", XKB_GEOMETRY},
- {
- "xkb_semantics", XKB_SEMANTICS},
- {
- "xkb_layout", XKB_LAYOUT},
- {
- "include", INCLUDE},
- {
- "override", OVERRIDE},
- {
- "augment", AUGMENT},
- {
- "replace", REPLACE},
- {
- "alternate", ALTERNATE},
- {
- "partial", PARTIAL},
- {
- "default", DEFAULT},
- {
- "hidden", HIDDEN},
- {
- "virtual_modifiers", VIRTUAL_MODS},
- {
- "type", TYPE},
- {
- "interpret", INTERPRET},
- {
- "action", ACTION_TOK},
- {
- "key", KEY},
- {
- "alias", ALIAS},
- {
- "group", GROUP},
- {
- "modmap", MODIFIER_MAP},
- {
- "mod_map", MODIFIER_MAP},
- {
- "modifier_map", MODIFIER_MAP},
- {
- "indicator", INDICATOR},
- {
- "shape", SHAPE},
- {
- "row", ROW},
- {
- "keys", KEYS},
- {
- "section", SECTION},
- {
- "overlay", OVERLAY},
- {
- "text", TEXT},
- {
- "outline", OUTLINE},
- {
- "solid", SOLID},
- {
- "logo", LOGO},
- {
- "virtual", VIRTUAL},
- {
- "alphanumeric_keys", ALPHANUMERIC_KEYS},
- {
- "modifier_keys", MODIFIER_KEYS},
- {
- "keypad_keys", KEYPAD_KEYS},
- {
- "function_keys", FUNCTION_KEYS},
- {
- "alternate_group", ALTERNATE_GROUP}
-};
-static int numKeywords = sizeof(keywords) / sizeof(struct _Keyword);
-
-static int
-yyGetIdent(int first)
-{
- int ch, i, j, found;
- int rtrn = IDENT;
-
- scanBuf[0] = first;
- j = 1;
- while (((ch = scanchar()) != EOF) && (isalnum(ch) || (ch == '_')))
- {
- if (j < sizeof(scanBuf) - 1)
- scanBuf[j++] = ch;
- }
- scanBuf[j++] = '\0';
- found = 0;
-
- for (i = 0; (!found) && (i < numKeywords); i++)
- {
- if (uStrCaseCmp(scanBuf, keywords[i].keyword) == 0)
- {
- rtrn = keywords[i].token;
- found = 1;
- }
- }
- if (!found)
- {
- scanStrLine = lineNum;
- rtrn = IDENT;
- }
-
- if ((ch != EOF) && (!isspace(ch)))
- unscanchar(ch);
- else if (ch == '\n')
- lineNum++;
-
- return rtrn;
-}
-
-static int
-yyGetNumber(int ch)
-{
- int isFloat = 0;
- char buf[1024];
- int nInBuf = 0;
-
- buf[0] = ch;
- nInBuf = 1;
- while (((ch = scanchar()) != EOF)
- && (isxdigit(ch) || ((nInBuf == 1) && (ch == 'x'))))
- {
- buf[nInBuf++] = ch;
- }
- if (ch == '.')
- {
- isFloat = 1;
- buf[nInBuf++] = ch;
- while (((ch = scanchar()) != EOF) && (isxdigit(ch)))
- {
- buf[nInBuf++] = ch;
- }
- }
- buf[nInBuf++] = '\0';
- if ((ch != EOF) && (!isspace(ch)))
- unscanchar(ch);
-
- if (isFloat)
- {
- float tmp;
- if (sscanf(buf, "%g", &tmp) == 1)
- {
- scanInt = tmp * XkbGeomPtsPerMM;
- return FLOAT;
- }
- }
- else if (sscanf(buf, "%i", &scanInt) == 1)
- return INTEGER;
- fprintf(stderr, "Malformed number %s\n", buf);
- return ERROR_TOK;
-}
-
-int
-yylex(void)
-{
- int ch;
- int rtrn;
-
- do
- {
- ch = scanchar();
- if (ch == '\n')
- {
- lineNum++;
- }
- else if (ch == '#')
- { /* handle shell style '#' comments */
- do
- {
- ch = scanchar();
- }
- while ((ch != '\n') && (ch != EOF));
- lineNum++;
- }
- else if (ch == '/')
- { /* handle C++ style double-/ comments */
- int newch = scanchar();
- if (newch == '/')
- {
- do
- {
- ch = scanchar();
- }
- while ((ch != '\n') && (ch != EOF));
- lineNum++;
- }
- else if (newch != EOF)
- {
- unscanchar(newch);
- }
- }
- }
- while ((ch != EOF) && (isspace(ch)));
- if (ch == '=')
- rtrn = EQUALS;
- else if (ch == '+')
- rtrn = PLUS;
- else if (ch == '-')
- rtrn = MINUS;
- else if (ch == '/')
- rtrn = DIVIDE;
- else if (ch == '*')
- rtrn = TIMES;
- else if (ch == '{')
- rtrn = OBRACE;
- else if (ch == '}')
- rtrn = CBRACE;
- else if (ch == '(')
- rtrn = OPAREN;
- else if (ch == ')')
- rtrn = CPAREN;
- else if (ch == '[')
- rtrn = OBRACKET;
- else if (ch == ']')
- rtrn = CBRACKET;
- else if (ch == '.')
- rtrn = DOT;
- else if (ch == ',')
- rtrn = COMMA;
- else if (ch == ';')
- rtrn = SEMI;
- else if (ch == '!')
- rtrn = EXCLAM;
- else if (ch == '~')
- rtrn = INVERT;
- else if (ch == '"')
- rtrn = yyGetString();
- else if (ch == '<')
- rtrn = yyGetKeyName();
- else if (isalpha(ch) || (ch == '_'))
- rtrn = yyGetIdent(ch);
- else if (isdigit(ch))
- rtrn = yyGetNumber(ch);
- else if (ch == EOF)
- rtrn = END_OF_FILE;
- else
- {
-#ifdef DEBUG
- if (debugFlags)
- fprintf(stderr,
- "Unexpected character %c (%d) in input stream\n", ch, ch);
-#endif
- rtrn = ERROR_TOK;
- }
-#ifdef DEBUG
- if (debugFlags & 0x2)
- fprintf(stderr, "scan: %s\n", tokText(rtrn));
-#endif
- return rtrn;
-}
+/************************************************************
+ Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
+
+ Permission to use, copy, modify, and distribute this
+ software and its documentation for any purpose and without
+ fee is hereby granted, provided that the above copyright
+ notice appear in all copies and that both that copyright
+ notice and this permission notice appear in supporting
+ documentation, and that the name of Silicon Graphics not be
+ used in advertising or publicity pertaining to distribution
+ of the software without specific prior written permission.
+ Silicon Graphics makes no representation about the suitability
+ of this software for any purpose. It is provided "as is"
+ without any express or implied warranty.
+
+ SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+ SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
+ GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
+ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
+ THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+ ********************************************************/
+
+#include <stdio.h>
+#include <ctype.h>
+#include <X11/Xos.h>
+#include <X11/Xlib.h>
+#include <X11/XKBlib.h>
+
+#include "tokens.h"
+#define DEBUG_VAR scanDebug
+#include "utils.h"
+#include "parseutils.h"
+
+unsigned int scanDebug;
+
+FILE *yyin = NULL;
+
+static char scanFileBuf[1024] = {0};
+char *scanFile = scanFileBuf;
+int lineNum = 0;
+
+int scanInt;
+
+char scanBuf[1024];
+static int scanStrLine = 0;
+
+#define BUFSIZE 4096
+static char readBuf[BUFSIZE];
+static int readBufPos = 0;
+static int readBufLen = 0;
+
+#ifdef DEBUG
+extern int debugFlags;
+
+static char *
+tokText(int tok)
+{
+ static char buf[32];
+
+ switch (tok)
+ {
+ case END_OF_FILE:
+ snprintf(buf, sizeof(buf), "END_OF_FILE");
+ break;
+ case ERROR_TOK:
+ snprintf(buf, sizeof(buf), "ERROR");
+ break;
+
+ case XKB_KEYMAP:
+ snprintf(buf, sizeof(buf), "XKB_KEYMAP");
+ break;
+ case XKB_KEYCODES:
+ snprintf(buf, sizeof(buf), "XKB_KEYCODES");
+ break;
+ case XKB_TYPES:
+ snprintf(buf, sizeof(buf), "XKB_TYPES");
+ break;
+ case XKB_SYMBOLS:
+ snprintf(buf, sizeof(buf), "XKB_SYMBOLS");
+ break;
+ case XKB_COMPATMAP:
+ snprintf(buf, sizeof(buf), "XKB_COMPATMAP");
+ break;
+ case XKB_GEOMETRY:
+ snprintf(buf, sizeof(buf), "XKB_GEOMETRY");
+ break;
+ case XKB_SEMANTICS:
+ snprintf(buf, sizeof(buf), "XKB_SEMANTICS");
+ break;
+ case XKB_LAYOUT:
+ snprintf(buf, sizeof(buf), "XKB_LAYOUT");
+ break;
+
+ case INCLUDE:
+ snprintf(buf, sizeof(buf), "INCLUDE");
+ break;
+ case OVERRIDE:
+ snprintf(buf, sizeof(buf), "OVERRIDE");
+ break;
+ case AUGMENT:
+ snprintf(buf, sizeof(buf), "AUGMENT");
+ break;
+ case REPLACE:
+ snprintf(buf, sizeof(buf), "REPLACE");
+ break;
+ case ALTERNATE:
+ snprintf(buf, sizeof(buf), "ALTERNATE");
+ break;
+
+ case VIRTUAL_MODS:
+ snprintf(buf, sizeof(buf), "VIRTUAL_MODS");
+ break;
+ case TYPE:
+ snprintf(buf, sizeof(buf), "TYPE");
+ break;
+ case INTERPRET:
+ snprintf(buf, sizeof(buf), "INTERPRET");
+ break;
+ case ACTION_TOK:
+ snprintf(buf, sizeof(buf), "ACTION");
+ break;
+ case KEY:
+ snprintf(buf, sizeof(buf), "KEY");
+ break;
+ case ALIAS:
+ snprintf(buf, sizeof(buf), "ALIAS");
+ break;
+ case GROUP:
+ snprintf(buf, sizeof(buf), "GROUP");
+ break;
+ case MODIFIER_MAP:
+ snprintf(buf, sizeof(buf), "MODIFIER_MAP");
+ break;
+ case INDICATOR:
+ snprintf(buf, sizeof(buf), "INDICATOR");
+ break;
+ case SHAPE:
+ snprintf(buf, sizeof(buf), "SHAPE");
+ break;
+ case KEYS:
+ snprintf(buf, sizeof(buf), "KEYS");
+ break;
+ case ROW:
+ snprintf(buf, sizeof(buf), "ROW");
+ break;
+ case SECTION:
+ snprintf(buf, sizeof(buf), "SECTION");
+ break;
+ case OVERLAY:
+ snprintf(buf, sizeof(buf), "OVERLAY");
+ break;
+ case TEXT:
+ snprintf(buf, sizeof(buf), "TEXT");
+ break;
+ case OUTLINE:
+ snprintf(buf, sizeof(buf), "OUTLINE");
+ break;
+ case SOLID:
+ snprintf(buf, sizeof(buf), "SOLID");
+ break;
+ case LOGO:
+ snprintf(buf, sizeof(buf), "LOGO");
+ break;
+ case VIRTUAL:
+ snprintf(buf, sizeof(buf), "VIRTUAL");
+ break;
+
+ case EQUALS:
+ snprintf(buf, sizeof(buf), "EQUALS");
+ break;
+ case PLUS:
+ snprintf(buf, sizeof(buf), "PLUS");
+ break;
+ case MINUS:
+ snprintf(buf, sizeof(buf), "MINUS");
+ break;
+ case DIVIDE:
+ snprintf(buf, sizeof(buf), "DIVIDE");
+ break;
+ case TIMES:
+ snprintf(buf, sizeof(buf), "TIMES");
+ break;
+ case OBRACE:
+ snprintf(buf, sizeof(buf), "OBRACE");
+ break;
+ case CBRACE:
+ snprintf(buf, sizeof(buf), "CBRACE");
+ break;
+ case OPAREN:
+ snprintf(buf, sizeof(buf), "OPAREN");
+ break;
+ case CPAREN:
+ snprintf(buf, sizeof(buf), "CPAREN");
+ break;
+ case OBRACKET:
+ snprintf(buf, sizeof(buf), "OBRACKET");
+ break;
+ case CBRACKET:
+ snprintf(buf, sizeof(buf), "CBRACKET");
+ break;
+ case DOT:
+ snprintf(buf, sizeof(buf), "DOT");
+ break;
+ case COMMA:
+ snprintf(buf, sizeof(buf), "COMMA");
+ break;
+ case SEMI:
+ snprintf(buf, sizeof(buf), "SEMI");
+ break;
+ case EXCLAM:
+ snprintf(buf, sizeof(buf), "EXCLAM");
+ break;
+ case INVERT:
+ snprintf(buf, sizeof(buf), "INVERT");
+ break;
+
+ case STRING:
+ snprintf(buf, sizeof(buf), "STRING (%s)", scanBuf);
+ break;
+ case INTEGER:
+ snprintf(buf, sizeof(buf), "INTEGER (0x%x)", scanInt);
+ break;
+ case FLOAT:
+ snprintf(buf, sizeof(buf), "FLOAT (%d.%d)",
+ scanInt / XkbGeomPtsPerMM, scanInt % XkbGeomPtsPerMM);
+ break;
+ case IDENT:
+ snprintf(buf, sizeof(buf), "IDENT (%s)", scanBuf);
+ break;
+ case KEYNAME:
+ snprintf(buf, sizeof(buf), "KEYNAME (%s)", scanBuf);
+ break;
+
+ case PARTIAL:
+ snprintf(buf, sizeof(buf), "PARTIAL");
+ break;
+ case DEFAULT:
+ snprintf(buf, sizeof(buf), "DEFAULT");
+ break;
+ case HIDDEN:
+ snprintf(buf, sizeof(buf), "HIDDEN");
+ break;
+
+ case ALPHANUMERIC_KEYS:
+ snprintf(buf, sizeof(buf), "ALPHANUMERIC_KEYS");
+ break;
+ case MODIFIER_KEYS:
+ snprintf(buf, sizeof(buf), "MODIFIER_KEYS");
+ break;
+ case KEYPAD_KEYS:
+ snprintf(buf, sizeof(buf), "KEYPAD_KEYS");
+ break;
+ case FUNCTION_KEYS:
+ snprintf(buf, sizeof(buf), "FUNCTION_KEYS");
+ break;
+ case ALTERNATE_GROUP:
+ snprintf(buf, sizeof(buf), "ALTERNATE_GROUP");
+ break;
+
+ default:
+ snprintf(buf, sizeof(buf), "UNKNOWN");
+ break;
+ }
+ return buf;
+}
+#endif
+
+static int
+scanchar(void)
+{
+ if (readBufPos >= readBufLen) {
+ readBufLen = fread(readBuf, 1, BUFSIZE, yyin);
+ readBufPos = 0;
+ if (!readBufLen)
+ return EOF;
+ if (feof(yyin))
+ readBuf[readBufLen] = EOF;
+ }
+
+ return readBuf[readBufPos++];
+}
+
+static void
+unscanchar(int c)
+{
+ if (readBuf[--readBufPos] != c) {
+ fprintf(stderr, "UNGETCHAR FAILED! Put back %c, was expecting %c at "
+ "position %d, buf is '%s'\n", c, readBuf[readBufPos],
+ readBufPos, readBuf);
+ _exit(94);
+ }
+}
+
+int
+setScanState(char *file, int line)
+{
+ if (file != NULL)
+ strncpy(scanFile, file, 1024);
+ if (line >= 0)
+ lineNum = line;
+ return 1;
+}
+
+static int
+yyGetString(void)
+{
+ int ch, i;
+
+ i = 0;
+ while (((ch = scanchar()) != EOF) && (ch != '"'))
+ {
+ if (ch == '\\')
+ {
+ if ((ch = scanchar()) != EOF)
+ {
+ if (ch == 'n')
+ ch = '\n';
+ else if (ch == 't')
+ ch = '\t';
+ else if (ch == 'v')
+ ch = '\v';
+ else if (ch == 'b')
+ ch = '\b';
+ else if (ch == 'r')
+ ch = '\r';
+ else if (ch == 'f')
+ ch = '\f';
+ else if (ch == 'e')
+ ch = '\033';
+ else if (ch == '0')
+ {
+ int tmp, stop;
+ ch = stop = 0;
+ if (((tmp = scanchar()) != EOF) && (isdigit(tmp))
+ && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ if (!stop)
+ {
+ if (((tmp = scanchar()) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ }
+ if (!stop)
+ {
+ if (((tmp = scanchar()) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ }
+ }
+ }
+ else
+ return ERROR_TOK;
+ }
+ if (i < sizeof(scanBuf) - 1)
+ scanBuf[i++] = ch;
+ }
+ if (ch == '"')
+ {
+ scanBuf[i++] = '\0';
+ scanStrLine = lineNum;
+ return STRING;
+ }
+ return ERROR_TOK;
+}
+
+static int
+yyGetKeyName(void)
+{
+ int ch, i;
+
+ i = 0;
+ while (((ch = scanchar()) != EOF) && (ch != '>'))
+ {
+ if (ch == '\\')
+ {
+ if ((ch = scanchar()) != EOF)
+ {
+ if (ch == 'n')
+ ch = '\n';
+ else if (ch == 't')
+ ch = '\t';
+ else if (ch == 'v')
+ ch = '\v';
+ else if (ch == 'b')
+ ch = '\b';
+ else if (ch == 'r')
+ ch = '\r';
+ else if (ch == 'f')
+ ch = '\f';
+ else if (ch == 'e')
+ ch = '\033';
+ else if (ch == '0')
+ {
+ int tmp, stop;
+ ch = stop = 0;
+ if (((tmp = scanchar()) != EOF) && (isdigit(tmp))
+ && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ if ((!stop) && ((tmp = scanchar()) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ if ((!stop) && ((tmp = scanchar()) != EOF)
+ && (isdigit(tmp)) && (tmp != '8') && (tmp != '9'))
+ {
+ ch = (ch * 8) + (tmp - '0');
+ }
+ else
+ {
+ stop = 1;
+ unscanchar(tmp);
+ }
+ }
+ }
+ else
+ return ERROR_TOK;
+ }
+
+ if (i < sizeof(scanBuf) - 1)
+ scanBuf[i++] = ch;
+ }
+ if ((ch == '>') && (i < 5))
+ {
+ scanBuf[i++] = '\0';
+ scanStrLine = lineNum;
+ return KEYNAME;
+ }
+ return ERROR_TOK;
+}
+
+static struct _Keyword
+{
+ const char *keyword;
+ int token;
+} keywords[] =
+{
+ {
+ "xkb_keymap", XKB_KEYMAP},
+ {
+ "xkb_keycodes", XKB_KEYCODES},
+ {
+ "xkb_types", XKB_TYPES},
+ {
+ "xkb_symbols", XKB_SYMBOLS},
+ {
+ "xkb_compat", XKB_COMPATMAP},
+ {
+ "xkb_compat_map", XKB_COMPATMAP},
+ {
+ "xkb_compatibility", XKB_COMPATMAP},
+ {
+ "xkb_compatibility_map", XKB_COMPATMAP},
+ {
+ "xkb_geometry", XKB_GEOMETRY},
+ {
+ "xkb_semantics", XKB_SEMANTICS},
+ {
+ "xkb_layout", XKB_LAYOUT},
+ {
+ "include", INCLUDE},
+ {
+ "override", OVERRIDE},
+ {
+ "augment", AUGMENT},
+ {
+ "replace", REPLACE},
+ {
+ "alternate", ALTERNATE},
+ {
+ "partial", PARTIAL},
+ {
+ "default", DEFAULT},
+ {
+ "hidden", HIDDEN},
+ {
+ "virtual_modifiers", VIRTUAL_MODS},
+ {
+ "type", TYPE},
+ {
+ "interpret", INTERPRET},
+ {
+ "action", ACTION_TOK},
+ {
+ "key", KEY},
+ {
+ "alias", ALIAS},
+ {
+ "group", GROUP},
+ {
+ "modmap", MODIFIER_MAP},
+ {
+ "mod_map", MODIFIER_MAP},
+ {
+ "modifier_map", MODIFIER_MAP},
+ {
+ "indicator", INDICATOR},
+ {
+ "shape", SHAPE},
+ {
+ "row", ROW},
+ {
+ "keys", KEYS},
+ {
+ "section", SECTION},
+ {
+ "overlay", OVERLAY},
+ {
+ "text", TEXT},
+ {
+ "outline", OUTLINE},
+ {
+ "solid", SOLID},
+ {
+ "logo", LOGO},
+ {
+ "virtual", VIRTUAL},
+ {
+ "alphanumeric_keys", ALPHANUMERIC_KEYS},
+ {
+ "modifier_keys", MODIFIER_KEYS},
+ {
+ "keypad_keys", KEYPAD_KEYS},
+ {
+ "function_keys", FUNCTION_KEYS},
+ {
+ "alternate_group", ALTERNATE_GROUP}
+};
+static int numKeywords = sizeof(keywords) / sizeof(struct _Keyword);
+
+static int
+yyGetIdent(int first)
+{
+ int ch, i, j, found;
+ int rtrn = IDENT;
+
+ scanBuf[0] = first;
+ j = 1;
+ while (((ch = scanchar()) != EOF) && (isalnum(ch) || (ch == '_')))
+ {
+ if (j < sizeof(scanBuf) - 1)
+ scanBuf[j++] = ch;
+ }
+ scanBuf[j++] = '\0';
+ found = 0;
+
+ for (i = 0; (!found) && (i < numKeywords); i++)
+ {
+ if (uStrCaseCmp(scanBuf, keywords[i].keyword) == 0)
+ {
+ rtrn = keywords[i].token;
+ found = 1;
+ }
+ }
+ if (!found)
+ {
+ scanStrLine = lineNum;
+ rtrn = IDENT;
+ }
+
+ if ((ch != EOF) && (!isspace(ch)))
+ unscanchar(ch);
+ else if (ch == '\n')
+ lineNum++;
+
+ return rtrn;
+}
+
+static int
+yyGetNumber(int ch)
+{
+ const int nMaxBuffSize = 1024;
+ int isFloat = 0;
+ char buf[nMaxBuffSize];
+ int nInBuf = 0;
+
+ buf[0] = ch;
+ nInBuf = 1;
+ while (((ch = scanchar()) != EOF)
+ && (isxdigit(ch) || ((nInBuf == 1) && (ch == 'x')))
+ && nInBuf < nMaxBuffSize)
+ {
+ buf[nInBuf++] = ch;
+ }
+ if (ch == '.')
+ {
+ isFloat = 1;
+ buf[nInBuf++] = ch;
+ while (((ch = scanchar()) != EOF) && (isxdigit(ch))
+ && nInBuf < nMaxBuffSize)
+ {
+ buf[nInBuf++] = ch;
+ }
+ }
+ buf[nInBuf++] = '\0';
+ if ((ch != EOF) && (!isspace(ch)))
+ unscanchar(ch);
+
+ if (isFloat)
+ {
+ float tmp;
+ if (sscanf(buf, "%g", &tmp) == 1)
+ {
+ scanInt = tmp * XkbGeomPtsPerMM;
+ return FLOAT;
+ }
+ }
+ else if (sscanf(buf, "%i", &scanInt) == 1)
+ return INTEGER;
+ fprintf(stderr, "Malformed number %s\n", buf);
+ return ERROR_TOK;
+}
+
+int
+yylex(void)
+{
+ int ch;
+ int rtrn;
+
+ do
+ {
+ ch = scanchar();
+ if (ch == '\n')
+ {
+ lineNum++;
+ }
+ else if (ch == '#')
+ { /* handle shell style '#' comments */
+ do
+ {
+ ch = scanchar();
+ }
+ while ((ch != '\n') && (ch != EOF));
+ lineNum++;
+ }
+ else if (ch == '/')
+ { /* handle C++ style double-/ comments */
+ int newch = scanchar();
+ if (newch == '/')
+ {
+ do
+ {
+ ch = scanchar();
+ }
+ while ((ch != '\n') && (ch != EOF));
+ lineNum++;
+ }
+ else if (newch != EOF)
+ {
+ unscanchar(newch);
+ }
+ }
+ }
+ while ((ch != EOF) && (isspace(ch)));
+ if (ch == '=')
+ rtrn = EQUALS;
+ else if (ch == '+')
+ rtrn = PLUS;
+ else if (ch == '-')
+ rtrn = MINUS;
+ else if (ch == '/')
+ rtrn = DIVIDE;
+ else if (ch == '*')
+ rtrn = TIMES;
+ else if (ch == '{')
+ rtrn = OBRACE;
+ else if (ch == '}')
+ rtrn = CBRACE;
+ else if (ch == '(')
+ rtrn = OPAREN;
+ else if (ch == ')')
+ rtrn = CPAREN;
+ else if (ch == '[')
+ rtrn = OBRACKET;
+ else if (ch == ']')
+ rtrn = CBRACKET;
+ else if (ch == '.')
+ rtrn = DOT;
+ else if (ch == ',')
+ rtrn = COMMA;
+ else if (ch == ';')
+ rtrn = SEMI;
+ else if (ch == '!')
+ rtrn = EXCLAM;
+ else if (ch == '~')
+ rtrn = INVERT;
+ else if (ch == '"')
+ rtrn = yyGetString();
+ else if (ch == '<')
+ rtrn = yyGetKeyName();
+ else if (isalpha(ch) || (ch == '_'))
+ rtrn = yyGetIdent(ch);
+ else if (isdigit(ch))
+ rtrn = yyGetNumber(ch);
+ else if (ch == EOF)
+ rtrn = END_OF_FILE;
+ else
+ {
+#ifdef DEBUG
+ if (debugFlags)
+ fprintf(stderr,
+ "Unexpected character %c (%d) in input stream\n", ch, ch);
+#endif
+ rtrn = ERROR_TOK;
+ }
+#ifdef DEBUG
+ if (debugFlags & 0x2)
+ fprintf(stderr, "scan: %s\n", tokText(rtrn));
+#endif
+ return rtrn;
+}
diff --git a/xorg-server/Xext/geext.c b/xorg-server/Xext/geext.c
index 951daf682..a6fbb0947 100644
--- a/xorg-server/Xext/geext.c
+++ b/xorg-server/Xext/geext.c
@@ -1,262 +1,262 @@
-/*
- * Copyright 2007-2008 Peter Hutterer
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * Author: Peter Hutterer, University of South Australia, NICTA
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-#include "windowstr.h"
-#include <X11/extensions/ge.h>
-
-#include "geint.h"
-#include "geext.h"
-#include "protocol-versions.h"
-
-DevPrivateKeyRec GEClientPrivateKeyRec;
-
-int RT_GECLIENT = 0;
-
-GEExtension GEExtensions[MAXEXTENSIONS];
-
-/* Major available requests */
-static const int version_requests[] = {
- X_GEQueryVersion, /* before client sends QueryVersion */
- X_GEQueryVersion, /* must be set to last request in version 1 */
-};
-
-/* Forward declarations */
-static void SGEGenericEvent(xEvent* from, xEvent* to);
-
-#define NUM_VERSION_REQUESTS (sizeof (version_requests) / sizeof (version_requests[0]))
-
-/************************************************************/
-/* request handlers */
-/************************************************************/
-
-static int
-ProcGEQueryVersion(ClientPtr client)
-{
- int n;
- GEClientInfoPtr pGEClient = GEGetClient(client);
- xGEQueryVersionReply rep;
- REQUEST(xGEQueryVersionReq);
-
- REQUEST_SIZE_MATCH(xGEQueryVersionReq);
-
- rep.repType = X_Reply;
- rep.RepType = X_GEQueryVersion;
- rep.length = 0;
- rep.sequenceNumber = client->sequence;
-
- /* return the supported version by the server */
- rep.majorVersion = SERVER_GE_MAJOR_VERSION;
- rep.minorVersion = SERVER_GE_MINOR_VERSION;
-
- /* Remember version the client requested */
- pGEClient->major_version = stuff->majorVersion;
- pGEClient->minor_version = stuff->minorVersion;
-
- if (client->swapped)
- {
- swaps(&rep.sequenceNumber, n);
- swapl(&rep.length, n);
- swaps(&rep.majorVersion, n);
- swaps(&rep.minorVersion, n);
- }
-
- WriteToClient(client, sizeof(xGEQueryVersionReply), (char*)&rep);
- return Success;
-}
-
-int (*ProcGEVector[GENumberRequests])(ClientPtr) = {
- /* Version 1.0 */
- ProcGEQueryVersion
-};
-
-/************************************************************/
-/* swapped request handlers */
-/************************************************************/
-static int
-SProcGEQueryVersion(ClientPtr client)
-{
- int n;
- REQUEST(xGEQueryVersionReq);
-
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH(xGEQueryVersionReq);
- swaps(&stuff->majorVersion, n);
- swaps(&stuff->minorVersion, n);
- return(*ProcGEVector[stuff->ReqType])(client);
-}
-
-int (*SProcGEVector[GENumberRequests])(ClientPtr) = {
- /* Version 1.0 */
- SProcGEQueryVersion
-};
-
-
-/************************************************************/
-/* callbacks */
-/************************************************************/
-
-/* dispatch requests */
-static int
-ProcGEDispatch(ClientPtr client)
-{
- GEClientInfoPtr pGEClient = GEGetClient(client);
- REQUEST(xGEReq);
-
- if (pGEClient->major_version >= NUM_VERSION_REQUESTS)
- return BadRequest;
- if (stuff->ReqType > version_requests[pGEClient->major_version])
- return BadRequest;
-
- return (ProcGEVector[stuff->ReqType])(client);
-}
-
-/* dispatch swapped requests */
-static int
-SProcGEDispatch(ClientPtr client)
-{
- REQUEST(xGEReq);
- if (stuff->ReqType >= GENumberRequests)
- return BadRequest;
- return (*SProcGEVector[stuff->ReqType])(client);
-}
-
-/**
- * Called when a new client inits a connection to the X server.
- *
- * We alloc a simple struct to store the client's major/minor version. Can be
- * used in the furture for versioning support.
- */
-static void
-GEClientCallback(CallbackListPtr *list,
- pointer closure,
- pointer data)
-{
- NewClientInfoRec *clientinfo = (NewClientInfoRec *) data;
- ClientPtr pClient = clientinfo->client;
- GEClientInfoPtr pGEClient = GEGetClient(pClient);
-
- pGEClient->major_version = 0;
- pGEClient->minor_version = 0;
-}
-
-/* Reset extension. Called on server shutdown. */
-static void
-GEResetProc(ExtensionEntry *extEntry)
-{
- DeleteCallback(&ClientStateCallback, GEClientCallback, 0);
- EventSwapVector[GenericEvent] = NotImplemented;
-}
-
-/* Calls the registered event swap function for the extension.
- *
- * Each extension can register a swap function to handle GenericEvents being
- * swapped properly. The server calls SGEGenericEvent() before the event is
- * written on the wire, this one calls the registered swap function to do the
- * work.
- */
-static void
-SGEGenericEvent(xEvent* from, xEvent* to)
-{
- xGenericEvent* gefrom = (xGenericEvent*)from;
- xGenericEvent* geto = (xGenericEvent*)to;
-
- if (gefrom->extension > MAXEXTENSIONS)
- {
- ErrorF("GE: Invalid extension offset for event.\n");
- return;
- }
-
- if (GEExtensions[gefrom->extension & 0x7F].evswap)
- GEExtensions[gefrom->extension & 0x7F].evswap(gefrom, geto);
-}
-
-/* Init extension, register at server.
- * Since other extensions may rely on XGE (XInput does already), it is a good
- * idea to init XGE first, before any other extension.
- */
-void
-GEExtensionInit(void)
-{
- ExtensionEntry *extEntry;
-
- if (!dixRegisterPrivateKey(&GEClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(GEClientInfoRec)))
- FatalError("GEExtensionInit: GE private request failed.\n");
-
- if(!AddCallback(&ClientStateCallback, GEClientCallback, 0))
- {
- FatalError("GEExtensionInit: register client callback failed.\n");
- }
-
- if((extEntry = AddExtension(GE_NAME,
- 0, GENumberErrors,
- ProcGEDispatch, SProcGEDispatch,
- GEResetProc, StandardMinorOpcode)) != 0)
- {
- memset(GEExtensions, 0, sizeof(GEExtensions));
-
- EventSwapVector[GenericEvent] = (EventSwapPtr) SGEGenericEvent;
- } else {
- FatalError("GEInit: AddExtensions failed.\n");
- }
-
-}
-
-/************************************************************/
-/* interface for extensions */
-/************************************************************/
-
-/* Register an extension with GE. The given swap function will be called each
- * time an event is sent to a client with different byte order.
- * @param extension The extensions major opcode
- * @param ev_swap The event swap function.
- * @param ev_fill Called for an event before delivery. The extension now has
- * the chance to fill in necessary fields for the event.
- */
-void
-GERegisterExtension(int extension,
- void (*ev_swap)(xGenericEvent* from, xGenericEvent* to))
-{
- if ((extension & 0x7F) >= MAXEXTENSIONS)
- FatalError("GE: extension > MAXEXTENSIONS. This should not happen.\n");
-
- /* extension opcodes are > 128, might as well save some space here */
- GEExtensions[extension & 0x7f].evswap = ev_swap;
-}
-
-
-/* Sets type and extension field for a generic event. This is just an
- * auxiliary function, extensions could do it manually too.
- */
-void
-GEInitEvent(xGenericEvent* ev, int extension)
-{
- ev->type = GenericEvent;
- ev->extension = extension;
- ev->length = 0;
-}
-
+/*
+ * Copyright 2007-2008 Peter Hutterer
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Author: Peter Hutterer, University of South Australia, NICTA
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+#include "windowstr.h"
+#include <X11/extensions/ge.h>
+
+#include "geint.h"
+#include "geext.h"
+#include "protocol-versions.h"
+
+DevPrivateKeyRec GEClientPrivateKeyRec;
+
+int RT_GECLIENT = 0;
+
+GEExtension GEExtensions[MAXEXTENSIONS];
+
+/* Major available requests */
+static const int version_requests[] = {
+ X_GEQueryVersion, /* before client sends QueryVersion */
+ X_GEQueryVersion, /* must be set to last request in version 1 */
+};
+
+/* Forward declarations */
+static void SGEGenericEvent(xEvent* from, xEvent* to);
+
+#define NUM_VERSION_REQUESTS (sizeof (version_requests) / sizeof (version_requests[0]))
+
+/************************************************************/
+/* request handlers */
+/************************************************************/
+
+static int
+ProcGEQueryVersion(ClientPtr client)
+{
+ int n;
+ GEClientInfoPtr pGEClient = GEGetClient(client);
+ xGEQueryVersionReply rep;
+ REQUEST(xGEQueryVersionReq);
+
+ REQUEST_SIZE_MATCH(xGEQueryVersionReq);
+
+ rep.repType = X_Reply;
+ rep.RepType = X_GEQueryVersion;
+ rep.length = 0;
+ rep.sequenceNumber = client->sequence;
+
+ /* return the supported version by the server */
+ rep.majorVersion = SERVER_GE_MAJOR_VERSION;
+ rep.minorVersion = SERVER_GE_MINOR_VERSION;
+
+ /* Remember version the client requested */
+ pGEClient->major_version = stuff->majorVersion;
+ pGEClient->minor_version = stuff->minorVersion;
+
+ if (client->swapped)
+ {
+ swaps(&rep.sequenceNumber, n);
+ swapl(&rep.length, n);
+ swaps(&rep.majorVersion, n);
+ swaps(&rep.minorVersion, n);
+ }
+
+ WriteToClient(client, sizeof(xGEQueryVersionReply), (char*)&rep);
+ return Success;
+}
+
+int (*ProcGEVector[GENumberRequests])(ClientPtr) = {
+ /* Version 1.0 */
+ ProcGEQueryVersion
+};
+
+/************************************************************/
+/* swapped request handlers */
+/************************************************************/
+static int
+SProcGEQueryVersion(ClientPtr client)
+{
+ int n;
+ REQUEST(xGEQueryVersionReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xGEQueryVersionReq);
+ swaps(&stuff->majorVersion, n);
+ swaps(&stuff->minorVersion, n);
+ return(*ProcGEVector[stuff->ReqType])(client);
+}
+
+int (*SProcGEVector[GENumberRequests])(ClientPtr) = {
+ /* Version 1.0 */
+ SProcGEQueryVersion
+};
+
+
+/************************************************************/
+/* callbacks */
+/************************************************************/
+
+/* dispatch requests */
+static int
+ProcGEDispatch(ClientPtr client)
+{
+ GEClientInfoPtr pGEClient = GEGetClient(client);
+ REQUEST(xGEReq);
+
+ if (pGEClient->major_version >= NUM_VERSION_REQUESTS)
+ return BadRequest;
+ if (stuff->ReqType > version_requests[pGEClient->major_version])
+ return BadRequest;
+
+ return (ProcGEVector[stuff->ReqType])(client);
+}
+
+/* dispatch swapped requests */
+static int
+SProcGEDispatch(ClientPtr client)
+{
+ REQUEST(xGEReq);
+ if (stuff->ReqType >= GENumberRequests)
+ return BadRequest;
+ return (*SProcGEVector[stuff->ReqType])(client);
+}
+
+/**
+ * Called when a new client inits a connection to the X server.
+ *
+ * We alloc a simple struct to store the client's major/minor version. Can be
+ * used in the furture for versioning support.
+ */
+static void
+GEClientCallback(CallbackListPtr *list,
+ pointer closure,
+ pointer data)
+{
+ NewClientInfoRec *clientinfo = (NewClientInfoRec *) data;
+ ClientPtr pClient = clientinfo->client;
+ GEClientInfoPtr pGEClient = GEGetClient(pClient);
+
+ pGEClient->major_version = 0;
+ pGEClient->minor_version = 0;
+}
+
+/* Reset extension. Called on server shutdown. */
+static void
+GEResetProc(ExtensionEntry *extEntry)
+{
+ DeleteCallback(&ClientStateCallback, GEClientCallback, 0);
+ EventSwapVector[GenericEvent] = NotImplemented;
+}
+
+/* Calls the registered event swap function for the extension.
+ *
+ * Each extension can register a swap function to handle GenericEvents being
+ * swapped properly. The server calls SGEGenericEvent() before the event is
+ * written on the wire, this one calls the registered swap function to do the
+ * work.
+ */
+static void
+SGEGenericEvent(xEvent* from, xEvent* to)
+{
+ xGenericEvent* gefrom = (xGenericEvent*)from;
+ xGenericEvent* geto = (xGenericEvent*)to;
+
+ if ((gefrom->extension & 0x7f) > MAXEXTENSIONS)
+ {
+ ErrorF("GE: Invalid extension offset for event.\n");
+ return;
+ }
+
+ if (GEExtensions[gefrom->extension & 0x7F].evswap)
+ GEExtensions[gefrom->extension & 0x7F].evswap(gefrom, geto);
+}
+
+/* Init extension, register at server.
+ * Since other extensions may rely on XGE (XInput does already), it is a good
+ * idea to init XGE first, before any other extension.
+ */
+void
+GEExtensionInit(void)
+{
+ ExtensionEntry *extEntry;
+
+ if (!dixRegisterPrivateKey(&GEClientPrivateKeyRec, PRIVATE_CLIENT, sizeof(GEClientInfoRec)))
+ FatalError("GEExtensionInit: GE private request failed.\n");
+
+ if(!AddCallback(&ClientStateCallback, GEClientCallback, 0))
+ {
+ FatalError("GEExtensionInit: register client callback failed.\n");
+ }
+
+ if((extEntry = AddExtension(GE_NAME,
+ 0, GENumberErrors,
+ ProcGEDispatch, SProcGEDispatch,
+ GEResetProc, StandardMinorOpcode)) != 0)
+ {
+ memset(GEExtensions, 0, sizeof(GEExtensions));
+
+ EventSwapVector[GenericEvent] = (EventSwapPtr) SGEGenericEvent;
+ } else {
+ FatalError("GEInit: AddExtensions failed.\n");
+ }
+
+}
+
+/************************************************************/
+/* interface for extensions */
+/************************************************************/
+
+/* Register an extension with GE. The given swap function will be called each
+ * time an event is sent to a client with different byte order.
+ * @param extension The extensions major opcode
+ * @param ev_swap The event swap function.
+ * @param ev_fill Called for an event before delivery. The extension now has
+ * the chance to fill in necessary fields for the event.
+ */
+void
+GERegisterExtension(int extension,
+ void (*ev_swap)(xGenericEvent* from, xGenericEvent* to))
+{
+ if ((extension & 0x7F) >= MAXEXTENSIONS)
+ FatalError("GE: extension > MAXEXTENSIONS. This should not happen.\n");
+
+ /* extension opcodes are > 128, might as well save some space here */
+ GEExtensions[extension & 0x7f].evswap = ev_swap;
+}
+
+
+/* Sets type and extension field for a generic event. This is just an
+ * auxiliary function, extensions could do it manually too.
+ */
+void
+GEInitEvent(xGenericEvent* ev, int extension)
+{
+ ev->type = GenericEvent;
+ ev->extension = extension;
+ ev->length = 0;
+}
+
diff --git a/xorg-server/Xext/xtest.c b/xorg-server/Xext/xtest.c
index 859057e2b..6780aa62a 100644
--- a/xorg-server/Xext/xtest.c
+++ b/xorg-server/Xext/xtest.c
@@ -1,692 +1,689 @@
-/*
-
- Copyright 1992, 1998 The Open Group
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation.
-
- The above copyright notice and this permission notice shall be included
- in all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
- IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
- OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- OTHER DEALINGS IN THE SOFTWARE.
-
- Except as contained in this notice, the name of The Open Group shall
- not be used in advertising or otherwise to promote the sale, use or
- other dealings in this Software without prior written authorization
- from The Open Group.
-
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include <X11/Xatom.h>
-#include "misc.h"
-#include "os.h"
-#include "dixstruct.h"
-#include "extnsionst.h"
-#include "windowstr.h"
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "dixevents.h"
-#include "sleepuntil.h"
-#include "mi.h"
-#include "xkbsrv.h"
-#include "xkbstr.h"
-#include <X11/extensions/xtestproto.h>
-#include <X11/extensions/XI.h>
-#include <X11/extensions/XIproto.h>
-#include "exglobals.h"
-#include "mipointer.h"
-#include "xserver-properties.h"
-#include "exevents.h"
-#include "inpututils.h"
-
-#include "modinit.h"
-
-extern int DeviceValuator;
-
-/* XTest events are sent during request processing and may be interruped by
- * a SIGIO. We need a separate event list to avoid events overwriting each
- * other's memory */
-static EventListPtr xtest_evlist;
-
-/**
- * xtestpointer
- * is the virtual pointer for XTest. It is the first slave
- * device of the VCP.
- * xtestkeyboard
- * is the virtual keyboard for XTest. It is the first slave
- * device of the VCK
- *
- * Neither of these devices can be deleted.
- */
-DeviceIntPtr xtestpointer, xtestkeyboard;
-
-#ifdef PANORAMIX
-#include "panoramiX.h"
-#include "panoramiXsrv.h"
-#endif
-
-static int XTestSwapFakeInput(
- ClientPtr /* client */,
- xReq * /* req */
- );
-
-
-static int
-ProcXTestGetVersion(ClientPtr client)
-{
- xXTestGetVersionReply rep;
- int n;
-
- REQUEST_SIZE_MATCH(xXTestGetVersionReq);
- rep.type = X_Reply;
- rep.length = 0;
- rep.sequenceNumber = client->sequence;
- rep.majorVersion = XTestMajorVersion;
- rep.minorVersion = XTestMinorVersion;
- if (client->swapped) {
- swaps(&rep.sequenceNumber, n);
- swaps(&rep.minorVersion, n);
- }
- WriteToClient(client, sizeof(xXTestGetVersionReply), (char *)&rep);
- return Success;
-}
-
-static int
-ProcXTestCompareCursor(ClientPtr client)
-{
- REQUEST(xXTestCompareCursorReq);
- xXTestCompareCursorReply rep;
- WindowPtr pWin;
- CursorPtr pCursor;
- int n, rc;
- DeviceIntPtr ptr = PickPointer(client);
-
- REQUEST_SIZE_MATCH(xXTestCompareCursorReq);
- rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
- if (rc != Success)
- return rc;
- if (stuff->cursor == None)
- pCursor = NullCursor;
- else if (stuff->cursor == XTestCurrentCursor)
- pCursor = GetSpriteCursor(ptr);
- else {
- rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, RT_CURSOR,
- client, DixReadAccess);
- if (rc != Success)
- {
- client->errorValue = stuff->cursor;
- return rc;
- }
- }
- rep.type = X_Reply;
- rep.length = 0;
- rep.sequenceNumber = client->sequence;
- rep.same = (wCursor(pWin) == pCursor);
- if (client->swapped) {
- swaps(&rep.sequenceNumber, n);
- }
- WriteToClient(client, sizeof(xXTestCompareCursorReply), (char *)&rep);
- return Success;
-}
-
-static int
-ProcXTestFakeInput(ClientPtr client)
-{
- REQUEST(xXTestFakeInputReq);
- int nev, n, type, rc;
- xEvent *ev;
- DeviceIntPtr dev = NULL;
- WindowPtr root;
- Bool extension = FALSE;
- deviceValuator *dv = NULL;
- ValuatorMask mask;
- int valuators[MAX_VALUATORS] = {0};
- int numValuators = 0;
- int firstValuator = 0;
- int nevents = 0;
- int i;
- int base = 0;
- int flags = 0;
- int need_ptr_update = 1;
-
- nev = (stuff->length << 2) - sizeof(xReq);
- if ((nev % sizeof(xEvent)) || !nev)
- return BadLength;
- nev /= sizeof(xEvent);
- UpdateCurrentTime();
- ev = (xEvent *)&((xReq *)stuff)[1];
- type = ev->u.u.type & 0177;
-
- if (type >= EXTENSION_EVENT_BASE)
- {
- extension = TRUE;
-
- /* check device */
- rc = dixLookupDevice(&dev, stuff->deviceid & 0177, client,
- DixWriteAccess);
- if (rc != Success)
- {
- client->errorValue = stuff->deviceid & 0177;
- return rc;
- }
-
- /* check type */
- type -= DeviceValuator;
- switch (type) {
- case XI_DeviceKeyPress:
- case XI_DeviceKeyRelease:
- if (!dev->key)
- {
- client->errorValue = ev->u.u.type;
- return BadValue;
- }
- break;
- case XI_DeviceButtonPress:
- case XI_DeviceButtonRelease:
- if (!dev->button)
- {
- client->errorValue = ev->u.u.type;
- return BadValue;
- }
- break;
- case XI_DeviceMotionNotify:
- if (!dev->valuator)
- {
- client->errorValue = ev->u.u.type;
- return BadValue;
- }
- break;
- case XI_ProximityIn:
- case XI_ProximityOut:
- if (!dev->proximity)
- {
- client->errorValue = ev->u.u.type;
- return BadValue;
- }
- break;
- default:
- client->errorValue = ev->u.u.type;
- return BadValue;
- }
-
- /* check validity */
- if (nev == 1 && type == XI_DeviceMotionNotify)
- return BadLength; /* DevMotion must be followed by DevValuator */
-
- if (type == XI_DeviceMotionNotify)
- {
- firstValuator = ((deviceValuator *)(ev+1))->first_valuator;
- if (firstValuator > dev->valuator->numAxes)
- {
- client->errorValue = ev->u.u.type;
- return BadValue;
- }
-
- if (ev->u.u.detail == xFalse)
- flags |= POINTER_ABSOLUTE;
- } else
- {
- firstValuator = 0;
- flags |= POINTER_ABSOLUTE;
- }
-
- if (nev > 1 && !dev->valuator)
- {
- client->errorValue = dv->first_valuator;
- return BadValue;
- }
-
-
- /* check validity of valuator events */
- base = firstValuator;
- for (n = 1; n < nev; n++)
- {
- dv = (deviceValuator *)(ev + n);
- if (dv->type != DeviceValuator)
- {
- client->errorValue = dv->type;
- return BadValue;
- }
- if (dv->first_valuator != base)
- {
- client->errorValue = dv->first_valuator;
- return BadValue;
- }
- switch(dv->num_valuators)
- {
- case 6: valuators[base + 5] = dv->valuator5;
- case 5: valuators[base + 4] = dv->valuator4;
- case 4: valuators[base + 3] = dv->valuator3;
- case 3: valuators[base + 2] = dv->valuator2;
- case 2: valuators[base + 1] = dv->valuator1;
- case 1: valuators[base] = dv->valuator0;
- break;
- default:
- client->errorValue = dv->num_valuators;
- return BadValue;
- }
-
- base += dv->num_valuators;
- numValuators += dv->num_valuators;
-
- if (firstValuator + numValuators > dev->valuator->numAxes)
- {
- client->errorValue = dv->num_valuators;
- return BadValue;
- }
- }
- type = type - XI_DeviceKeyPress + KeyPress;
-
- } else
- {
- if (nev != 1)
- return BadLength;
- switch (type)
- {
- case KeyPress:
- case KeyRelease:
- dev = PickKeyboard(client);
- break;
- case ButtonPress:
- case ButtonRelease:
- dev = PickPointer(client);
- break;
- case MotionNotify:
- dev = PickPointer(client);
- valuators[0] = ev->u.keyButtonPointer.rootX;
- valuators[1] = ev->u.keyButtonPointer.rootY;
- numValuators = 2;
- firstValuator = 0;
- if (ev->u.u.detail == xFalse)
- flags = POINTER_ABSOLUTE | POINTER_SCREEN;
- break;
- default:
- client->errorValue = ev->u.u.type;
- return BadValue;
- }
-
- dev = GetXTestDevice(dev);
- }
-
- /* If the event has a time set, wait for it to pass */
- if (ev->u.keyButtonPointer.time)
- {
- TimeStamp activateTime;
- CARD32 ms;
-
- activateTime = currentTime;
- ms = activateTime.milliseconds + ev->u.keyButtonPointer.time;
- if (ms < activateTime.milliseconds)
- activateTime.months++;
- activateTime.milliseconds = ms;
- ev->u.keyButtonPointer.time = 0;
-
- /* see mbuf.c:QueueDisplayRequest (from the deprecated Multibuffer
- * extension) for code similar to this */
-
- if (!ClientSleepUntil(client, &activateTime, NULL, NULL))
- {
- return BadAlloc;
- }
- /* swap the request back so we can simply re-execute it */
- if (client->swapped)
- {
- (void) XTestSwapFakeInput(client, (xReq *)stuff);
- swaps(&stuff->length, n);
- }
- ResetCurrentRequest (client);
- client->sequence--;
- return Success;
- }
-
- switch (type)
- {
- case KeyPress:
- case KeyRelease:
- if (!dev->key)
- return BadDevice;
-
- if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code ||
- ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code)
- {
- client->errorValue = ev->u.u.detail;
- return BadValue;
- }
-
- need_ptr_update = 0;
- break;
- case MotionNotify:
- if (!dev->valuator)
- return BadDevice;
-
- /* broken lib, XI events have root uninitialized */
- if (extension || ev->u.keyButtonPointer.root == None)
- root = GetCurrentRootWindow(dev);
- else
- {
- rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root,
- client, DixGetAttrAccess);
- if (rc != Success)
- return rc;
- if (root->parent)
- {
- client->errorValue = ev->u.keyButtonPointer.root;
- return BadValue;
- }
- }
- if (ev->u.u.detail != xTrue && ev->u.u.detail != xFalse)
- {
- client->errorValue = ev->u.u.detail;
- return BadValue;
- }
-
- /* FIXME: Xinerama! */
-
- break;
- case ButtonPress:
- case ButtonRelease:
- if (!dev->button)
- return BadDevice;
-
- if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons)
- {
- client->errorValue = ev->u.u.detail;
- return BadValue;
- }
- break;
- }
- if (screenIsSaved == SCREEN_SAVER_ON)
- dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset);
-
- switch(type) {
- case MotionNotify:
- valuator_mask_set_range(&mask, firstValuator, numValuators, valuators);
- nevents = GetPointerEvents(xtest_evlist, dev, type, 0, flags, &mask);
- break;
- case ButtonPress:
- case ButtonRelease:
- valuator_mask_set_range(&mask, firstValuator, numValuators, valuators);
- nevents = GetPointerEvents(xtest_evlist, dev, type, ev->u.u.detail,
- flags, &mask);
- break;
- case KeyPress:
- case KeyRelease:
- nevents = GetKeyboardEvents(xtest_evlist, dev, type, ev->u.u.detail);
- break;
- }
-
- for (i = 0; i < nevents; i++)
- mieqProcessDeviceEvent(dev, (InternalEvent*)(xtest_evlist+i)->event, NULL);
-
- if (need_ptr_update)
- miPointerUpdateSprite(dev);
- return Success;
-}
-
-static int
-ProcXTestGrabControl(ClientPtr client)
-{
- REQUEST(xXTestGrabControlReq);
-
- REQUEST_SIZE_MATCH(xXTestGrabControlReq);
- if ((stuff->impervious != xTrue) && (stuff->impervious != xFalse))
- {
- client->errorValue = stuff->impervious;
- return BadValue;
- }
- if (stuff->impervious)
- MakeClientGrabImpervious(client);
- else
- MakeClientGrabPervious(client);
- return Success;
-}
-
-static int
-ProcXTestDispatch (ClientPtr client)
-{
- REQUEST(xReq);
- switch (stuff->data)
- {
- case X_XTestGetVersion:
- return ProcXTestGetVersion(client);
- case X_XTestCompareCursor:
- return ProcXTestCompareCursor(client);
- case X_XTestFakeInput:
- return ProcXTestFakeInput(client);
- case X_XTestGrabControl:
- return ProcXTestGrabControl(client);
- default:
- return BadRequest;
- }
-}
-
-static int
-SProcXTestGetVersion(ClientPtr client)
-{
- int n;
- REQUEST(xXTestGetVersionReq);
-
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH(xXTestGetVersionReq);
- swaps(&stuff->minorVersion, n);
- return ProcXTestGetVersion(client);
-}
-
-static int
-SProcXTestCompareCursor(ClientPtr client)
-{
- int n;
- REQUEST(xXTestCompareCursorReq);
-
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH(xXTestCompareCursorReq);
- swapl(&stuff->window, n);
- swapl(&stuff->cursor, n);
- return ProcXTestCompareCursor(client);
-}
-
-static int
-XTestSwapFakeInput(ClientPtr client, xReq *req)
-{
- int nev;
- xEvent *ev;
- xEvent sev;
- EventSwapPtr proc;
-
- nev = ((req->length << 2) - sizeof(xReq)) / sizeof(xEvent);
- for (ev = (xEvent *)&req[1]; --nev >= 0; ev++)
- {
- /* Swap event */
- proc = EventSwapVector[ev->u.u.type & 0177];
- /* no swapping proc; invalid event type? */
- if (!proc || proc == NotImplemented) {
- client->errorValue = ev->u.u.type;
- return BadValue;
- }
- (*proc)(ev, &sev);
- *ev = sev;
- }
- return Success;
-}
-
-static int
-SProcXTestFakeInput(ClientPtr client)
-{
- int n;
- REQUEST(xReq);
-
- swaps(&stuff->length, n);
- n = XTestSwapFakeInput(client, stuff);
- if (n != Success)
- return n;
- return ProcXTestFakeInput(client);
-}
-
-static int
-SProcXTestGrabControl(ClientPtr client)
-{
- int n;
- REQUEST(xXTestGrabControlReq);
-
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH(xXTestGrabControlReq);
- return ProcXTestGrabControl(client);
-}
-
-static int
-SProcXTestDispatch (ClientPtr client)
-{
- REQUEST(xReq);
- switch (stuff->data)
- {
- case X_XTestGetVersion:
- return SProcXTestGetVersion(client);
- case X_XTestCompareCursor:
- return SProcXTestCompareCursor(client);
- case X_XTestFakeInput:
- return SProcXTestFakeInput(client);
- case X_XTestGrabControl:
- return SProcXTestGrabControl(client);
- default:
- return BadRequest;
- }
-}
-
-/**
- * Allocate an virtual slave device for xtest events, this
- * is a slave device to inputInfo master devices
- */
-void InitXTestDevices(void)
-{
- if(AllocXTestDevice(serverClient, "Virtual core",
- &xtestpointer, &xtestkeyboard,
- inputInfo.pointer, inputInfo.keyboard) != Success)
- FatalError("Failed to allocate XTest devices");
-
- if (ActivateDevice(xtestpointer, TRUE) != Success ||
- ActivateDevice(xtestkeyboard, TRUE) != Success)
- FatalError("Failed to activate XTest core devices.");
- if (!EnableDevice(xtestpointer, TRUE) ||
- !EnableDevice(xtestkeyboard, TRUE))
- FatalError("Failed to enable XTest core devices.");
-
- AttachDevice(NULL, xtestpointer, inputInfo.pointer);
- AttachDevice(NULL, xtestkeyboard, inputInfo.keyboard);
-}
-
-/**
- * Don't allow changing the XTest property.
- */
-static int
-DeviceSetXTestProperty(DeviceIntPtr dev, Atom property,
- XIPropertyValuePtr prop, BOOL checkonly)
-{
- if (property == XIGetKnownProperty(XI_PROP_XTEST_DEVICE))
- return BadAccess;
-
- return Success;
-}
-
-/**
- * Allocate a device pair that is initialised as a slave
- * device with properties that identify the devices as belonging
- * to XTest subsystem.
- * This only creates the pair, Activate/Enable Device
- * still need to be called.
- */
-int AllocXTestDevice (ClientPtr client, char* name,
- DeviceIntPtr* ptr, DeviceIntPtr* keybd,
- DeviceIntPtr master_ptr, DeviceIntPtr master_keybd)
-{
- int retval;
- int len = strlen(name);
- char *xtestname = calloc(len + 7, 1 );
- char dummy = 1;
-
- strncpy( xtestname, name, len);
- strncat( xtestname, " XTEST", 6 );
-
- retval = AllocDevicePair( client, xtestname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE);
- if ( retval == Success ){
- (*ptr)->xtest_master_id = master_ptr->id;
- (*keybd)->xtest_master_id = master_keybd->id;
-
- XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
- XA_INTEGER, 8, PropModeReplace, 1, &dummy,
- FALSE);
- XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
- XIRegisterPropertyHandler(*ptr, DeviceSetXTestProperty, NULL, NULL);
- XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
- XA_INTEGER, 8, PropModeReplace, 1, &dummy,
- FALSE);
- XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
- XIRegisterPropertyHandler(*keybd, DeviceSetXTestProperty, NULL, NULL);
- }
-
- free( xtestname );
-
- return retval;
-}
-
-/**
- * If master is NULL, return TRUE if the given device is an xtest device or
- * FALSE otherwise.
- * If master is not NULL, return TRUE if the given device is this master's
- * xtest device.
- */
-BOOL
-IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master)
-{
- if (IsMaster(dev))
- return FALSE;
-
- /* deviceid 0 is reserved for XIAllDevices, non-zero mid means XTest
- * device */
- if (master)
- return dev->xtest_master_id == master->id;
-
- return dev->xtest_master_id != 0;
-}
-
-/**
- * @return The X Test virtual device for the given master.
- */
-DeviceIntPtr
-GetXTestDevice(DeviceIntPtr master)
-{
- DeviceIntPtr it;
-
- for (it = inputInfo.devices; it; it = it->next)
- {
- if (IsXTestDevice(it, master))
- return it;
- }
-
- /* This only happens if master is a slave device. don't do that */
- return NULL;
-}
-
-void
-XTestExtensionInit(INITARGS)
-{
- AddExtension(XTestExtensionName, 0, 0,
- ProcXTestDispatch, SProcXTestDispatch,
- NULL, StandardMinorOpcode);
-
- xtest_evlist = InitEventList(GetMaximumEventsNum());
-}
+/*
+
+ Copyright 1992, 1998 The Open Group
+
+ Permission to use, copy, modify, distribute, and sell this software and its
+ documentation for any purpose is hereby granted without fee, provided that
+ the above copyright notice appear in all copies and that both that
+ copyright notice and this permission notice appear in supporting
+ documentation.
+
+ The above copyright notice and this permission notice shall be included
+ in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+ IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ OTHER DEALINGS IN THE SOFTWARE.
+
+ Except as contained in this notice, the name of The Open Group shall
+ not be used in advertising or otherwise to promote the sale, use or
+ other dealings in this Software without prior written authorization
+ from The Open Group.
+
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include <X11/Xatom.h>
+#include "misc.h"
+#include "os.h"
+#include "dixstruct.h"
+#include "extnsionst.h"
+#include "windowstr.h"
+#include "inputstr.h"
+#include "scrnintstr.h"
+#include "dixevents.h"
+#include "sleepuntil.h"
+#include "mi.h"
+#include "xkbsrv.h"
+#include "xkbstr.h"
+#include <X11/extensions/xtestproto.h>
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include "exglobals.h"
+#include "mipointer.h"
+#include "xserver-properties.h"
+#include "exevents.h"
+#include "inpututils.h"
+
+#include "modinit.h"
+
+extern int DeviceValuator;
+
+/* XTest events are sent during request processing and may be interruped by
+ * a SIGIO. We need a separate event list to avoid events overwriting each
+ * other's memory */
+static EventListPtr xtest_evlist;
+
+/**
+ * xtestpointer
+ * is the virtual pointer for XTest. It is the first slave
+ * device of the VCP.
+ * xtestkeyboard
+ * is the virtual keyboard for XTest. It is the first slave
+ * device of the VCK
+ *
+ * Neither of these devices can be deleted.
+ */
+DeviceIntPtr xtestpointer, xtestkeyboard;
+
+#ifdef PANORAMIX
+#include "panoramiX.h"
+#include "panoramiXsrv.h"
+#endif
+
+static int XTestSwapFakeInput(
+ ClientPtr /* client */,
+ xReq * /* req */
+ );
+
+
+static int
+ProcXTestGetVersion(ClientPtr client)
+{
+ xXTestGetVersionReply rep;
+ int n;
+
+ REQUEST_SIZE_MATCH(xXTestGetVersionReq);
+ rep.type = X_Reply;
+ rep.length = 0;
+ rep.sequenceNumber = client->sequence;
+ rep.majorVersion = XTestMajorVersion;
+ rep.minorVersion = XTestMinorVersion;
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ swaps(&rep.minorVersion, n);
+ }
+ WriteToClient(client, sizeof(xXTestGetVersionReply), (char *)&rep);
+ return Success;
+}
+
+static int
+ProcXTestCompareCursor(ClientPtr client)
+{
+ REQUEST(xXTestCompareCursorReq);
+ xXTestCompareCursorReply rep;
+ WindowPtr pWin;
+ CursorPtr pCursor;
+ int n, rc;
+ DeviceIntPtr ptr = PickPointer(client);
+
+ REQUEST_SIZE_MATCH(xXTestCompareCursorReq);
+ rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
+ if (rc != Success)
+ return rc;
+ if (stuff->cursor == None)
+ pCursor = NullCursor;
+ else if (stuff->cursor == XTestCurrentCursor)
+ pCursor = GetSpriteCursor(ptr);
+ else {
+ rc = dixLookupResourceByType((pointer *)&pCursor, stuff->cursor, RT_CURSOR,
+ client, DixReadAccess);
+ if (rc != Success)
+ {
+ client->errorValue = stuff->cursor;
+ return rc;
+ }
+ }
+ rep.type = X_Reply;
+ rep.length = 0;
+ rep.sequenceNumber = client->sequence;
+ rep.same = (wCursor(pWin) == pCursor);
+ if (client->swapped) {
+ swaps(&rep.sequenceNumber, n);
+ }
+ WriteToClient(client, sizeof(xXTestCompareCursorReply), (char *)&rep);
+ return Success;
+}
+
+static int
+ProcXTestFakeInput(ClientPtr client)
+{
+ REQUEST(xXTestFakeInputReq);
+ int nev, n, type, rc;
+ xEvent *ev;
+ DeviceIntPtr dev = NULL;
+ WindowPtr root;
+ Bool extension = FALSE;
+ deviceValuator *dv = NULL;
+ ValuatorMask mask;
+ int valuators[MAX_VALUATORS] = {0};
+ int numValuators = 0;
+ int firstValuator = 0;
+ int nevents = 0;
+ int i;
+ int base = 0;
+ int flags = 0;
+ int need_ptr_update = 1;
+
+ nev = (stuff->length << 2) - sizeof(xReq);
+ if ((nev % sizeof(xEvent)) || !nev)
+ return BadLength;
+ nev /= sizeof(xEvent);
+ UpdateCurrentTime();
+ ev = (xEvent *)&((xReq *)stuff)[1];
+ type = ev->u.u.type & 0177;
+
+ if (type >= EXTENSION_EVENT_BASE)
+ {
+ extension = TRUE;
+
+ /* check device */
+ rc = dixLookupDevice(&dev, stuff->deviceid & 0177, client,
+ DixWriteAccess);
+ if (rc != Success)
+ {
+ client->errorValue = stuff->deviceid & 0177;
+ return rc;
+ }
+
+ /* check type */
+ type -= DeviceValuator;
+ switch (type) {
+ case XI_DeviceKeyPress:
+ case XI_DeviceKeyRelease:
+ if (!dev->key)
+ {
+ client->errorValue = ev->u.u.type;
+ return BadValue;
+ }
+ break;
+ case XI_DeviceButtonPress:
+ case XI_DeviceButtonRelease:
+ if (!dev->button)
+ {
+ client->errorValue = ev->u.u.type;
+ return BadValue;
+ }
+ break;
+ case XI_DeviceMotionNotify:
+ if (!dev->valuator)
+ {
+ client->errorValue = ev->u.u.type;
+ return BadValue;
+ }
+ break;
+ case XI_ProximityIn:
+ case XI_ProximityOut:
+ if (!dev->proximity)
+ {
+ client->errorValue = ev->u.u.type;
+ return BadValue;
+ }
+ break;
+ default:
+ client->errorValue = ev->u.u.type;
+ return BadValue;
+ }
+
+ /* check validity */
+ if (nev == 1 && type == XI_DeviceMotionNotify)
+ return BadLength; /* DevMotion must be followed by DevValuator */
+
+ if (type == XI_DeviceMotionNotify)
+ {
+ firstValuator = ((deviceValuator *)(ev+1))->first_valuator;
+ if (firstValuator > dev->valuator->numAxes)
+ {
+ client->errorValue = ev->u.u.type;
+ return BadValue;
+ }
+
+ if (ev->u.u.detail == xFalse)
+ flags |= POINTER_ABSOLUTE;
+ } else
+ {
+ firstValuator = 0;
+ flags |= POINTER_ABSOLUTE;
+ }
+
+ if (nev > 1 && !dev->valuator)
+ {
+ client->errorValue = dv->first_valuator;
+ return BadValue;
+ }
+
+
+ /* check validity of valuator events */
+ base = firstValuator;
+ for (n = 1; n < nev; n++)
+ {
+ dv = (deviceValuator *)(ev + n);
+ if (dv->type != DeviceValuator)
+ {
+ client->errorValue = dv->type;
+ return BadValue;
+ }
+ if (dv->first_valuator != base)
+ {
+ client->errorValue = dv->first_valuator;
+ return BadValue;
+ }
+ switch(dv->num_valuators)
+ {
+ case 6: valuators[base + 5] = dv->valuator5;
+ case 5: valuators[base + 4] = dv->valuator4;
+ case 4: valuators[base + 3] = dv->valuator3;
+ case 3: valuators[base + 2] = dv->valuator2;
+ case 2: valuators[base + 1] = dv->valuator1;
+ case 1: valuators[base] = dv->valuator0;
+ break;
+ default:
+ client->errorValue = dv->num_valuators;
+ return BadValue;
+ }
+
+ base += dv->num_valuators;
+ numValuators += dv->num_valuators;
+
+ if (firstValuator + numValuators > dev->valuator->numAxes)
+ {
+ client->errorValue = dv->num_valuators;
+ return BadValue;
+ }
+ }
+ type = type - XI_DeviceKeyPress + KeyPress;
+
+ } else
+ {
+ if (nev != 1)
+ return BadLength;
+ switch (type)
+ {
+ case KeyPress:
+ case KeyRelease:
+ dev = PickKeyboard(client);
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ dev = PickPointer(client);
+ break;
+ case MotionNotify:
+ dev = PickPointer(client);
+ valuators[0] = ev->u.keyButtonPointer.rootX;
+ valuators[1] = ev->u.keyButtonPointer.rootY;
+ numValuators = 2;
+ firstValuator = 0;
+ if (ev->u.u.detail == xFalse)
+ flags = POINTER_ABSOLUTE | POINTER_SCREEN;
+ break;
+ default:
+ client->errorValue = ev->u.u.type;
+ return BadValue;
+ }
+
+ dev = GetXTestDevice(dev);
+ }
+
+ /* If the event has a time set, wait for it to pass */
+ if (ev->u.keyButtonPointer.time)
+ {
+ TimeStamp activateTime;
+ CARD32 ms;
+
+ activateTime = currentTime;
+ ms = activateTime.milliseconds + ev->u.keyButtonPointer.time;
+ if (ms < activateTime.milliseconds)
+ activateTime.months++;
+ activateTime.milliseconds = ms;
+ ev->u.keyButtonPointer.time = 0;
+
+ /* see mbuf.c:QueueDisplayRequest (from the deprecated Multibuffer
+ * extension) for code similar to this */
+
+ if (!ClientSleepUntil(client, &activateTime, NULL, NULL))
+ {
+ return BadAlloc;
+ }
+ /* swap the request back so we can simply re-execute it */
+ if (client->swapped)
+ {
+ (void) XTestSwapFakeInput(client, (xReq *)stuff);
+ swaps(&stuff->length, n);
+ }
+ ResetCurrentRequest (client);
+ client->sequence--;
+ return Success;
+ }
+
+ switch (type)
+ {
+ case KeyPress:
+ case KeyRelease:
+ if (!dev->key)
+ return BadDevice;
+
+ if (ev->u.u.detail < dev->key->xkbInfo->desc->min_key_code ||
+ ev->u.u.detail > dev->key->xkbInfo->desc->max_key_code)
+ {
+ client->errorValue = ev->u.u.detail;
+ return BadValue;
+ }
+
+ need_ptr_update = 0;
+ break;
+ case MotionNotify:
+ if (!dev->valuator)
+ return BadDevice;
+
+ if (!(extension || ev->u.keyButtonPointer.root == None))
+ {
+ rc = dixLookupWindow(&root, ev->u.keyButtonPointer.root,
+ client, DixGetAttrAccess);
+ if (rc != Success)
+ return rc;
+ if (root->parent)
+ {
+ client->errorValue = ev->u.keyButtonPointer.root;
+ return BadValue;
+ }
+ }
+ if (ev->u.u.detail != xTrue && ev->u.u.detail != xFalse)
+ {
+ client->errorValue = ev->u.u.detail;
+ return BadValue;
+ }
+
+ /* FIXME: Xinerama! */
+
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ if (!dev->button)
+ return BadDevice;
+
+ if (!ev->u.u.detail || ev->u.u.detail > dev->button->numButtons)
+ {
+ client->errorValue = ev->u.u.detail;
+ return BadValue;
+ }
+ break;
+ }
+ if (screenIsSaved == SCREEN_SAVER_ON)
+ dixSaveScreens(serverClient, SCREEN_SAVER_OFF, ScreenSaverReset);
+
+ switch(type) {
+ case MotionNotify:
+ valuator_mask_set_range(&mask, firstValuator, numValuators, valuators);
+ nevents = GetPointerEvents(xtest_evlist, dev, type, 0, flags, &mask);
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ valuator_mask_set_range(&mask, firstValuator, numValuators, valuators);
+ nevents = GetPointerEvents(xtest_evlist, dev, type, ev->u.u.detail,
+ flags, &mask);
+ break;
+ case KeyPress:
+ case KeyRelease:
+ nevents = GetKeyboardEvents(xtest_evlist, dev, type, ev->u.u.detail);
+ break;
+ }
+
+ for (i = 0; i < nevents; i++)
+ mieqProcessDeviceEvent(dev, (InternalEvent*)(xtest_evlist+i)->event, NULL);
+
+ if (need_ptr_update)
+ miPointerUpdateSprite(dev);
+ return Success;
+}
+
+static int
+ProcXTestGrabControl(ClientPtr client)
+{
+ REQUEST(xXTestGrabControlReq);
+
+ REQUEST_SIZE_MATCH(xXTestGrabControlReq);
+ if ((stuff->impervious != xTrue) && (stuff->impervious != xFalse))
+ {
+ client->errorValue = stuff->impervious;
+ return BadValue;
+ }
+ if (stuff->impervious)
+ MakeClientGrabImpervious(client);
+ else
+ MakeClientGrabPervious(client);
+ return Success;
+}
+
+static int
+ProcXTestDispatch (ClientPtr client)
+{
+ REQUEST(xReq);
+ switch (stuff->data)
+ {
+ case X_XTestGetVersion:
+ return ProcXTestGetVersion(client);
+ case X_XTestCompareCursor:
+ return ProcXTestCompareCursor(client);
+ case X_XTestFakeInput:
+ return ProcXTestFakeInput(client);
+ case X_XTestGrabControl:
+ return ProcXTestGrabControl(client);
+ default:
+ return BadRequest;
+ }
+}
+
+static int
+SProcXTestGetVersion(ClientPtr client)
+{
+ int n;
+ REQUEST(xXTestGetVersionReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXTestGetVersionReq);
+ swaps(&stuff->minorVersion, n);
+ return ProcXTestGetVersion(client);
+}
+
+static int
+SProcXTestCompareCursor(ClientPtr client)
+{
+ int n;
+ REQUEST(xXTestCompareCursorReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXTestCompareCursorReq);
+ swapl(&stuff->window, n);
+ swapl(&stuff->cursor, n);
+ return ProcXTestCompareCursor(client);
+}
+
+static int
+XTestSwapFakeInput(ClientPtr client, xReq *req)
+{
+ int nev;
+ xEvent *ev;
+ xEvent sev;
+ EventSwapPtr proc;
+
+ nev = ((req->length << 2) - sizeof(xReq)) / sizeof(xEvent);
+ for (ev = (xEvent *)&req[1]; --nev >= 0; ev++)
+ {
+ /* Swap event */
+ proc = EventSwapVector[ev->u.u.type & 0177];
+ /* no swapping proc; invalid event type? */
+ if (!proc || proc == NotImplemented) {
+ client->errorValue = ev->u.u.type;
+ return BadValue;
+ }
+ (*proc)(ev, &sev);
+ *ev = sev;
+ }
+ return Success;
+}
+
+static int
+SProcXTestFakeInput(ClientPtr client)
+{
+ int n;
+ REQUEST(xReq);
+
+ swaps(&stuff->length, n);
+ n = XTestSwapFakeInput(client, stuff);
+ if (n != Success)
+ return n;
+ return ProcXTestFakeInput(client);
+}
+
+static int
+SProcXTestGrabControl(ClientPtr client)
+{
+ int n;
+ REQUEST(xXTestGrabControlReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXTestGrabControlReq);
+ return ProcXTestGrabControl(client);
+}
+
+static int
+SProcXTestDispatch (ClientPtr client)
+{
+ REQUEST(xReq);
+ switch (stuff->data)
+ {
+ case X_XTestGetVersion:
+ return SProcXTestGetVersion(client);
+ case X_XTestCompareCursor:
+ return SProcXTestCompareCursor(client);
+ case X_XTestFakeInput:
+ return SProcXTestFakeInput(client);
+ case X_XTestGrabControl:
+ return SProcXTestGrabControl(client);
+ default:
+ return BadRequest;
+ }
+}
+
+/**
+ * Allocate an virtual slave device for xtest events, this
+ * is a slave device to inputInfo master devices
+ */
+void InitXTestDevices(void)
+{
+ if(AllocXTestDevice(serverClient, "Virtual core",
+ &xtestpointer, &xtestkeyboard,
+ inputInfo.pointer, inputInfo.keyboard) != Success)
+ FatalError("Failed to allocate XTest devices");
+
+ if (ActivateDevice(xtestpointer, TRUE) != Success ||
+ ActivateDevice(xtestkeyboard, TRUE) != Success)
+ FatalError("Failed to activate XTest core devices.");
+ if (!EnableDevice(xtestpointer, TRUE) ||
+ !EnableDevice(xtestkeyboard, TRUE))
+ FatalError("Failed to enable XTest core devices.");
+
+ AttachDevice(NULL, xtestpointer, inputInfo.pointer);
+ AttachDevice(NULL, xtestkeyboard, inputInfo.keyboard);
+}
+
+/**
+ * Don't allow changing the XTest property.
+ */
+static int
+DeviceSetXTestProperty(DeviceIntPtr dev, Atom property,
+ XIPropertyValuePtr prop, BOOL checkonly)
+{
+ if (property == XIGetKnownProperty(XI_PROP_XTEST_DEVICE))
+ return BadAccess;
+
+ return Success;
+}
+
+/**
+ * Allocate a device pair that is initialised as a slave
+ * device with properties that identify the devices as belonging
+ * to XTest subsystem.
+ * This only creates the pair, Activate/Enable Device
+ * still need to be called.
+ */
+int AllocXTestDevice (ClientPtr client, char* name,
+ DeviceIntPtr* ptr, DeviceIntPtr* keybd,
+ DeviceIntPtr master_ptr, DeviceIntPtr master_keybd)
+{
+ int retval;
+ int len = strlen(name);
+ char *xtestname = calloc(len + 7, 1 );
+ char dummy = 1;
+
+ strncpy( xtestname, name, len);
+ strncat( xtestname, " XTEST", 6 );
+
+ retval = AllocDevicePair( client, xtestname, ptr, keybd, CorePointerProc, CoreKeyboardProc, FALSE);
+ if ( retval == Success ){
+ (*ptr)->xtest_master_id = master_ptr->id;
+ (*keybd)->xtest_master_id = master_keybd->id;
+
+ XIChangeDeviceProperty(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
+ XA_INTEGER, 8, PropModeReplace, 1, &dummy,
+ FALSE);
+ XISetDevicePropertyDeletable(*ptr, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
+ XIRegisterPropertyHandler(*ptr, DeviceSetXTestProperty, NULL, NULL);
+ XIChangeDeviceProperty(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE),
+ XA_INTEGER, 8, PropModeReplace, 1, &dummy,
+ FALSE);
+ XISetDevicePropertyDeletable(*keybd, XIGetKnownProperty(XI_PROP_XTEST_DEVICE), FALSE);
+ XIRegisterPropertyHandler(*keybd, DeviceSetXTestProperty, NULL, NULL);
+ }
+
+ free( xtestname );
+
+ return retval;
+}
+
+/**
+ * If master is NULL, return TRUE if the given device is an xtest device or
+ * FALSE otherwise.
+ * If master is not NULL, return TRUE if the given device is this master's
+ * xtest device.
+ */
+BOOL
+IsXTestDevice(DeviceIntPtr dev, DeviceIntPtr master)
+{
+ if (IsMaster(dev))
+ return FALSE;
+
+ /* deviceid 0 is reserved for XIAllDevices, non-zero mid means XTest
+ * device */
+ if (master)
+ return dev->xtest_master_id == master->id;
+
+ return dev->xtest_master_id != 0;
+}
+
+/**
+ * @return The X Test virtual device for the given master.
+ */
+DeviceIntPtr
+GetXTestDevice(DeviceIntPtr master)
+{
+ DeviceIntPtr it;
+
+ for (it = inputInfo.devices; it; it = it->next)
+ {
+ if (IsXTestDevice(it, master))
+ return it;
+ }
+
+ /* This only happens if master is a slave device. don't do that */
+ return NULL;
+}
+
+void
+XTestExtensionInit(INITARGS)
+{
+ AddExtension(XTestExtensionName, 0, 0,
+ ProcXTestDispatch, SProcXTestDispatch,
+ NULL, StandardMinorOpcode);
+
+ xtest_evlist = InitEventList(GetMaximumEventsNum());
+}
diff --git a/xorg-server/Xi/exevents.c b/xorg-server/Xi/exevents.c
index 5b207bc4b..18803c95e 100644
--- a/xorg-server/Xi/exevents.c
+++ b/xorg-server/Xi/exevents.c
@@ -1607,14 +1607,18 @@ AddExtensionClient(WindowPtr pWin, ClientPtr client, Mask mask, int mskidx)
if (!others)
return BadAlloc;
if (!pWin->optional->inputMasks && !MakeInputMasks(pWin))
- return BadAlloc;
+ goto bail;
others->mask[mskidx] = mask;
others->resource = FakeClientID(client->index);
others->next = pWin->optional->inputMasks->inputClients;
pWin->optional->inputMasks->inputClients = others;
if (!AddResource(others->resource, RT_INPUTCLIENT, (pointer) pWin))
- return BadAlloc;
+ goto bail;
return Success;
+
+bail:
+ free(others);
+ return BadAlloc;
}
static Bool
diff --git a/xorg-server/Xi/extinit.c b/xorg-server/Xi/extinit.c
index 46d34599c..0b7280d95 100644
--- a/xorg-server/Xi/extinit.c
+++ b/xorg-server/Xi/extinit.c
@@ -49,6 +49,7 @@ SOFTWARE.
* Dispatch routines and initialization routines for the X input extension.
*
*/
+#define ARRAY_SIZE(_a) (sizeof((_a)) / sizeof((_a)[0]))
#define NUMTYPES 15
@@ -410,7 +411,7 @@ static int
ProcIDispatch(ClientPtr client)
{
REQUEST(xReq);
- if (stuff->data > (IREQUESTS + XI2REQUESTS) || !ProcIVector[stuff->data])
+ if (stuff->data > ARRAY_SIZE(ProcIVector) || !ProcIVector[stuff->data])
return BadRequest;
return (*ProcIVector[stuff->data])(client);
@@ -429,7 +430,7 @@ static int
SProcIDispatch(ClientPtr client)
{
REQUEST(xReq);
- if (stuff->data > IREQUESTS || !SProcIVector[stuff->data])
+ if (stuff->data > ARRAY_SIZE(SProcIVector) || !SProcIVector[stuff->data])
return BadRequest;
return (*SProcIVector[stuff->data])(client);
@@ -863,6 +864,8 @@ XI2EventSwap(xGenericEvent *from, xGenericEvent *to)
{
case XI_Enter:
case XI_Leave:
+ case XI_FocusIn:
+ case XI_FocusOut:
SDeviceLeaveNotifyEvent((xXILeaveEvent*)from, (xXILeaveEvent*)to);
break;
case XI_DeviceChanged:
diff --git a/xorg-server/Xi/getprop.c b/xorg-server/Xi/getprop.c
index 5be09c685..5e102627d 100644
--- a/xorg-server/Xi/getprop.c
+++ b/xorg-server/Xi/getprop.c
@@ -1,187 +1,187 @@
-/************************************************************
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Hewlett-Packard not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-********************************************************/
-
-/***********************************************************************
- *
- * Function to return the dont-propagate-list for an extension device.
- *
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "inputstr.h" /* DeviceIntPtr */
-#include "windowstr.h" /* window structs */
-#include <X11/extensions/XI.h>
-#include <X11/extensions/XIproto.h>
-#include "exglobals.h"
-#include "swaprep.h"
-
-#include "getprop.h"
-
-extern XExtEventInfo EventInfo[];
-extern int ExtEventIndex;
-
-/***********************************************************************
- *
- * Handle a request from a client with a different byte order.
- *
- */
-
-int
-SProcXGetDeviceDontPropagateList(ClientPtr client)
-{
- char n;
-
- REQUEST(xGetDeviceDontPropagateListReq);
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH(xGetDeviceDontPropagateListReq);
- swapl(&stuff->window, n);
- return (ProcXGetDeviceDontPropagateList(client));
-}
-
-/***********************************************************************
- *
- * This procedure lists the input devices available to the server.
- *
- */
-
-int
-ProcXGetDeviceDontPropagateList(ClientPtr client)
-{
- CARD16 count = 0;
- int i, rc;
- XEventClass *buf = NULL, *tbuf;
- WindowPtr pWin;
- xGetDeviceDontPropagateListReply rep;
- OtherInputMasks *others;
-
- REQUEST(xGetDeviceDontPropagateListReq);
- REQUEST_SIZE_MATCH(xGetDeviceDontPropagateListReq);
-
- rep.repType = X_Reply;
- rep.RepType = X_GetDeviceDontPropagateList;
- rep.sequenceNumber = client->sequence;
- rep.length = 0;
- rep.count = 0;
-
- rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
- if (rc != Success)
- return rc;
-
- if ((others = wOtherInputMasks(pWin)) != 0) {
- for (i = 0; i < EMASKSIZE; i++)
- tbuf = ClassFromMask(NULL, others->dontPropagateMask[i], i,
- &count, COUNT);
- if (count) {
- rep.count = count;
- buf = (XEventClass *) malloc(rep.count * sizeof(XEventClass));
- rep.length = bytes_to_int32(rep.count * sizeof(XEventClass));
-
- tbuf = buf;
- for (i = 0; i < EMASKSIZE; i++)
- tbuf = ClassFromMask(tbuf, others->dontPropagateMask[i], i,
- NULL, CREATE);
- }
- }
-
- WriteReplyToClient(client, sizeof(xGetDeviceDontPropagateListReply), &rep);
-
- if (count) {
- client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
- WriteSwappedDataToClient(client, count * sizeof(XEventClass), buf);
- free(buf);
- }
- return Success;
-}
-
-/***********************************************************************
- *
- * This procedure gets a list of event classes from a mask word.
- * A single mask may translate to more than one event class.
- *
- */
-
-XEventClass
- * ClassFromMask(XEventClass * buf, Mask mask, int maskndx, CARD16 * count,
- int mode)
-{
- int i, j;
- int id = maskndx;
- Mask tmask = 0x80000000;
-
- for (i = 0; i < 32; i++, tmask >>= 1)
- if (tmask & mask) {
- for (j = 0; j < ExtEventIndex; j++)
- if (EventInfo[j].mask == tmask) {
- if (mode == COUNT)
- (*count)++;
- else
- *buf++ = (id << 8) | EventInfo[j].type;
- }
- }
- return buf;
-}
-
-/***********************************************************************
- *
- * This procedure writes the reply for the XGetDeviceDontPropagateList function,
- * if the client and server have a different byte ordering.
- *
- */
-
-void
-SRepXGetDeviceDontPropagateList(ClientPtr client, int size,
- xGetDeviceDontPropagateListReply * rep)
-{
- char n;
-
- swaps(&rep->sequenceNumber, n);
- swapl(&rep->length, n);
- swaps(&rep->count, n);
- WriteToClient(client, size, (char *)rep);
-}
+/************************************************************
+
+Copyright 1989, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * Function to return the dont-propagate-list for an extension device.
+ *
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "inputstr.h" /* DeviceIntPtr */
+#include "windowstr.h" /* window structs */
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include "exglobals.h"
+#include "swaprep.h"
+
+#include "getprop.h"
+
+extern XExtEventInfo EventInfo[];
+extern int ExtEventIndex;
+
+/***********************************************************************
+ *
+ * Handle a request from a client with a different byte order.
+ *
+ */
+
+int
+SProcXGetDeviceDontPropagateList(ClientPtr client)
+{
+ char n;
+
+ REQUEST(xGetDeviceDontPropagateListReq);
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xGetDeviceDontPropagateListReq);
+ swapl(&stuff->window, n);
+ return (ProcXGetDeviceDontPropagateList(client));
+}
+
+/***********************************************************************
+ *
+ * This procedure lists the input devices available to the server.
+ *
+ */
+
+int
+ProcXGetDeviceDontPropagateList(ClientPtr client)
+{
+ CARD16 count = 0;
+ int i, rc;
+ XEventClass *buf = NULL, *tbuf;
+ WindowPtr pWin;
+ xGetDeviceDontPropagateListReply rep;
+ OtherInputMasks *others;
+
+ REQUEST(xGetDeviceDontPropagateListReq);
+ REQUEST_SIZE_MATCH(xGetDeviceDontPropagateListReq);
+
+ rep.repType = X_Reply;
+ rep.RepType = X_GetDeviceDontPropagateList;
+ rep.sequenceNumber = client->sequence;
+ rep.length = 0;
+ rep.count = 0;
+
+ rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
+ if (rc != Success)
+ return rc;
+
+ if ((others = wOtherInputMasks(pWin)) != 0) {
+ for (i = 0; i < EMASKSIZE; i++)
+ ClassFromMask(NULL, others->dontPropagateMask[i], i,
+ &count, COUNT);
+ if (count) {
+ rep.count = count;
+ buf = (XEventClass *) malloc(rep.count * sizeof(XEventClass));
+ rep.length = bytes_to_int32(rep.count * sizeof(XEventClass));
+
+ tbuf = buf;
+ for (i = 0; i < EMASKSIZE; i++)
+ tbuf = ClassFromMask(tbuf, others->dontPropagateMask[i], i,
+ NULL, CREATE);
+ }
+ }
+
+ WriteReplyToClient(client, sizeof(xGetDeviceDontPropagateListReply), &rep);
+
+ if (count) {
+ client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+ WriteSwappedDataToClient(client, count * sizeof(XEventClass), buf);
+ free(buf);
+ }
+ return Success;
+}
+
+/***********************************************************************
+ *
+ * This procedure gets a list of event classes from a mask word.
+ * A single mask may translate to more than one event class.
+ *
+ */
+
+XEventClass
+ * ClassFromMask(XEventClass * buf, Mask mask, int maskndx, CARD16 * count,
+ int mode)
+{
+ int i, j;
+ int id = maskndx;
+ Mask tmask = 0x80000000;
+
+ for (i = 0; i < 32; i++, tmask >>= 1)
+ if (tmask & mask) {
+ for (j = 0; j < ExtEventIndex; j++)
+ if (EventInfo[j].mask == tmask) {
+ if (mode == COUNT)
+ (*count)++;
+ else
+ *buf++ = (id << 8) | EventInfo[j].type;
+ }
+ }
+ return buf;
+}
+
+/***********************************************************************
+ *
+ * This procedure writes the reply for the XGetDeviceDontPropagateList function,
+ * if the client and server have a different byte ordering.
+ *
+ */
+
+void
+SRepXGetDeviceDontPropagateList(ClientPtr client, int size,
+ xGetDeviceDontPropagateListReply * rep)
+{
+ char n;
+
+ swaps(&rep->sequenceNumber, n);
+ swapl(&rep->length, n);
+ swaps(&rep->count, n);
+ WriteToClient(client, size, (char *)rep);
+}
diff --git a/xorg-server/Xi/getselev.c b/xorg-server/Xi/getselev.c
index 3b556000c..7304738b3 100644
--- a/xorg-server/Xi/getselev.c
+++ b/xorg-server/Xi/getselev.c
@@ -1,178 +1,178 @@
-/************************************************************
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Hewlett-Packard not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-********************************************************/
-
-/***********************************************************************
- *
- * Extension function to get the current selected events for a given window.
- *
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/extensions/XI.h>
-#include <X11/extensions/XIproto.h>
-#include "inputstr.h" /* DeviceIntPtr */
-#include "windowstr.h" /* window struct */
-#include "exglobals.h"
-#include "swaprep.h"
-
-#include "getprop.h"
-#include "getselev.h"
-
-/***********************************************************************
- *
- * This procedure gets the current selected extension events.
- *
- */
-
-int
-SProcXGetSelectedExtensionEvents(ClientPtr client)
-{
- char n;
-
- REQUEST(xGetSelectedExtensionEventsReq);
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH(xGetSelectedExtensionEventsReq);
- swapl(&stuff->window, n);
- return (ProcXGetSelectedExtensionEvents(client));
-}
-
-/***********************************************************************
- *
- * This procedure gets the current device select mask,
- * if the client and server have a different byte ordering.
- *
- */
-
-int
-ProcXGetSelectedExtensionEvents(ClientPtr client)
-{
- int i, rc, total_length = 0;
- xGetSelectedExtensionEventsReply rep;
- WindowPtr pWin;
- XEventClass *buf = NULL;
- XEventClass *tclient;
- XEventClass *aclient;
- OtherInputMasks *pOthers;
- InputClientsPtr others;
-
- REQUEST(xGetSelectedExtensionEventsReq);
- REQUEST_SIZE_MATCH(xGetSelectedExtensionEventsReq);
-
- rep.repType = X_Reply;
- rep.RepType = X_GetSelectedExtensionEvents;
- rep.length = 0;
- rep.sequenceNumber = client->sequence;
- rep.this_client_count = 0;
- rep.all_clients_count = 0;
-
- rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
- if (rc != Success)
- return rc;
-
- if ((pOthers = wOtherInputMasks(pWin)) != 0) {
- for (others = pOthers->inputClients; others; others = others->next)
- for (i = 0; i < EMASKSIZE; i++)
- tclient = ClassFromMask(NULL, others->mask[i], i,
- &rep.all_clients_count, COUNT);
-
- for (others = pOthers->inputClients; others; others = others->next)
- if (SameClient(others, client)) {
- for (i = 0; i < EMASKSIZE; i++)
- tclient = ClassFromMask(NULL, others->mask[i], i,
- &rep.this_client_count, COUNT);
- break;
- }
-
- total_length = (rep.all_clients_count + rep.this_client_count) *
- sizeof(XEventClass);
- rep.length = bytes_to_int32(total_length);
- buf = (XEventClass *) malloc(total_length);
-
- tclient = buf;
- aclient = buf + rep.this_client_count;
- if (others)
- for (i = 0; i < EMASKSIZE; i++)
- tclient =
- ClassFromMask(tclient, others->mask[i], i, NULL, CREATE);
-
- for (others = pOthers->inputClients; others; others = others->next)
- for (i = 0; i < EMASKSIZE; i++)
- aclient =
- ClassFromMask(aclient, others->mask[i], i, NULL, CREATE);
- }
-
- WriteReplyToClient(client, sizeof(xGetSelectedExtensionEventsReply), &rep);
-
- if (total_length) {
- client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
- WriteSwappedDataToClient(client, total_length, buf);
- free(buf);
- }
- return Success;
-}
-
-/***********************************************************************
- *
- * This procedure writes the reply for the XGetSelectedExtensionEvents function,
- * if the client and server have a different byte ordering.
- *
- */
-
-void
-SRepXGetSelectedExtensionEvents(ClientPtr client, int size,
- xGetSelectedExtensionEventsReply * rep)
-{
- char n;
-
- swaps(&rep->sequenceNumber, n);
- swapl(&rep->length, n);
- swaps(&rep->this_client_count, n);
- swaps(&rep->all_clients_count, n);
- WriteToClient(client, size, (char *)rep);
-}
+/************************************************************
+
+Copyright 1989, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+Copyright 1989 by Hewlett-Packard Company, Palo Alto, California.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Hewlett-Packard not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+HEWLETT-PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+HEWLETT-PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+********************************************************/
+
+/***********************************************************************
+ *
+ * Extension function to get the current selected events for a given window.
+ *
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include "inputstr.h" /* DeviceIntPtr */
+#include "windowstr.h" /* window struct */
+#include "exglobals.h"
+#include "swaprep.h"
+
+#include "getprop.h"
+#include "getselev.h"
+
+/***********************************************************************
+ *
+ * This procedure gets the current selected extension events.
+ *
+ */
+
+int
+SProcXGetSelectedExtensionEvents(ClientPtr client)
+{
+ char n;
+
+ REQUEST(xGetSelectedExtensionEventsReq);
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH(xGetSelectedExtensionEventsReq);
+ swapl(&stuff->window, n);
+ return (ProcXGetSelectedExtensionEvents(client));
+}
+
+/***********************************************************************
+ *
+ * This procedure gets the current device select mask,
+ * if the client and server have a different byte ordering.
+ *
+ */
+
+int
+ProcXGetSelectedExtensionEvents(ClientPtr client)
+{
+ int i, rc, total_length = 0;
+ xGetSelectedExtensionEventsReply rep;
+ WindowPtr pWin;
+ XEventClass *buf = NULL;
+ XEventClass *tclient;
+ XEventClass *aclient;
+ OtherInputMasks *pOthers;
+ InputClientsPtr others;
+
+ REQUEST(xGetSelectedExtensionEventsReq);
+ REQUEST_SIZE_MATCH(xGetSelectedExtensionEventsReq);
+
+ rep.repType = X_Reply;
+ rep.RepType = X_GetSelectedExtensionEvents;
+ rep.length = 0;
+ rep.sequenceNumber = client->sequence;
+ rep.this_client_count = 0;
+ rep.all_clients_count = 0;
+
+ rc = dixLookupWindow(&pWin, stuff->window, client, DixGetAttrAccess);
+ if (rc != Success)
+ return rc;
+
+ if ((pOthers = wOtherInputMasks(pWin)) != 0) {
+ for (others = pOthers->inputClients; others; others = others->next)
+ for (i = 0; i < EMASKSIZE; i++)
+ ClassFromMask(NULL, others->mask[i], i,
+ &rep.all_clients_count, COUNT);
+
+ for (others = pOthers->inputClients; others; others = others->next)
+ if (SameClient(others, client)) {
+ for (i = 0; i < EMASKSIZE; i++)
+ ClassFromMask(NULL, others->mask[i], i,
+ &rep.this_client_count, COUNT);
+ break;
+ }
+
+ total_length = (rep.all_clients_count + rep.this_client_count) *
+ sizeof(XEventClass);
+ rep.length = bytes_to_int32(total_length);
+ buf = (XEventClass *) malloc(total_length);
+
+ tclient = buf;
+ aclient = buf + rep.this_client_count;
+ if (others)
+ for (i = 0; i < EMASKSIZE; i++)
+ tclient =
+ ClassFromMask(tclient, others->mask[i], i, NULL, CREATE);
+
+ for (others = pOthers->inputClients; others; others = others->next)
+ for (i = 0; i < EMASKSIZE; i++)
+ aclient =
+ ClassFromMask(aclient, others->mask[i], i, NULL, CREATE);
+ }
+
+ WriteReplyToClient(client, sizeof(xGetSelectedExtensionEventsReply), &rep);
+
+ if (total_length) {
+ client->pSwapReplyFunc = (ReplySwapPtr) Swap32Write;
+ WriteSwappedDataToClient(client, total_length, buf);
+ }
+ free(buf);
+ return Success;
+}
+
+/***********************************************************************
+ *
+ * This procedure writes the reply for the XGetSelectedExtensionEvents function,
+ * if the client and server have a different byte ordering.
+ *
+ */
+
+void
+SRepXGetSelectedExtensionEvents(ClientPtr client, int size,
+ xGetSelectedExtensionEventsReply * rep)
+{
+ char n;
+
+ swaps(&rep->sequenceNumber, n);
+ swapl(&rep->length, n);
+ swaps(&rep->this_client_count, n);
+ swaps(&rep->all_clients_count, n);
+ WriteToClient(client, size, (char *)rep);
+}
diff --git a/xorg-server/Xi/xiquerydevice.c b/xorg-server/Xi/xiquerydevice.c
index 8b5421130..a768d499c 100644
--- a/xorg-server/Xi/xiquerydevice.c
+++ b/xorg-server/Xi/xiquerydevice.c
@@ -107,8 +107,10 @@ ProcXIQueryDevice(ClientPtr client)
}
info = calloc(1, len);
- if (!info)
+ if (!info) {
+ free(skip);
return BadAlloc;
+ }
memset(&rep, 0, sizeof(xXIQueryDeviceReply));
rep.repType = X_Reply;
@@ -153,8 +155,9 @@ ProcXIQueryDevice(ClientPtr client)
}
}
+ len = rep.length * 4;
WriteReplyToClient(client, sizeof(xXIQueryDeviceReply), &rep);
- WriteToClient(client, rep.length * 4, ptr);
+ WriteToClient(client, len, ptr);
free(ptr);
free(skip);
return rc;
diff --git a/xorg-server/dix/colormap.c b/xorg-server/dix/colormap.c
index b04739ad0..0e1feb6c4 100644
--- a/xorg-server/dix/colormap.c
+++ b/xorg-server/dix/colormap.c
@@ -1,2769 +1,2771 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include <stdio.h>
-#include <string.h>
-#include <strings.h>
-#include "misc.h"
-#include "dix.h"
-#include "dixstruct.h"
-#include "colormapst.h"
-#include "os.h"
-#include "scrnintstr.h"
-#include "resource.h"
-#include "windowstr.h"
-#include "privates.h"
-#include "xace.h"
-
-static Pixel FindBestPixel(
- EntryPtr /*pentFirst*/,
- int /*size*/,
- xrgb * /*prgb*/,
- int /*channel*/
-);
-
-static int AllComp(
- EntryPtr /*pent*/,
- xrgb * /*prgb*/
-);
-
-static int RedComp(
- EntryPtr /*pent*/,
- xrgb * /*prgb*/
-);
-
-static int GreenComp(
- EntryPtr /*pent*/,
- xrgb * /*prgb*/
-);
-
-static int BlueComp(
- EntryPtr /*pent*/,
- xrgb * /*prgb*/
-);
-
-static void FreePixels(
- ColormapPtr /*pmap*/,
- int /*client*/
-);
-
-static void CopyFree(
- int /*channel*/,
- int /*client*/,
- ColormapPtr /*pmapSrc*/,
- ColormapPtr /*pmapDst*/
-);
-
-static void FreeCell(
- ColormapPtr /*pmap*/,
- Pixel /*i*/,
- int /*channel*/
-);
-
-static void UpdateColors(
- ColormapPtr /*pmap*/
-);
-
-static int AllocDirect(
- int /*client*/,
- ColormapPtr /*pmap*/,
- int /*c*/,
- int /*r*/,
- int /*g*/,
- int /*b*/,
- Bool /*contig*/,
- Pixel * /*pixels*/,
- Pixel * /*prmask*/,
- Pixel * /*pgmask*/,
- Pixel * /*pbmask*/
-);
-
-static int AllocPseudo(
- int /*client*/,
- ColormapPtr /*pmap*/,
- int /*c*/,
- int /*r*/,
- Bool /*contig*/,
- Pixel * /*pixels*/,
- Pixel * /*pmask*/,
- Pixel ** /*pppixFirst*/
-);
-
-static Bool AllocCP(
- ColormapPtr /*pmap*/,
- EntryPtr /*pentFirst*/,
- int /*count*/,
- int /*planes*/,
- Bool /*contig*/,
- Pixel * /*pixels*/,
- Pixel * /*pMask*/
-);
-
-static Bool AllocShared(
- ColormapPtr /*pmap*/,
- Pixel * /*ppix*/,
- int /*c*/,
- int /*r*/,
- int /*g*/,
- int /*b*/,
- Pixel /*rmask*/,
- Pixel /*gmask*/,
- Pixel /*bmask*/,
- Pixel * /*ppixFirst*/
-);
-
-static int FreeCo(
- ColormapPtr /*pmap*/,
- int /*client*/,
- int /*color*/,
- int /*npixIn*/,
- Pixel * /*ppixIn*/,
- Pixel /*mask*/
-);
-
-static int TellNoMap(
- WindowPtr /*pwin*/,
- Colormap * /*pmid*/
-);
-
-static void FindColorInRootCmap (
- ColormapPtr /* pmap */,
- EntryPtr /* pentFirst */,
- int /* size */,
- xrgb* /* prgb */,
- Pixel* /* pPixel */,
- int /* channel */,
- ColorCompareProcPtr /* comp */
-);
-
-#define NUMRED(vis) ((vis->redMask >> vis->offsetRed) + 1)
-#define NUMGREEN(vis) ((vis->greenMask >> vis->offsetGreen) + 1)
-#define NUMBLUE(vis) ((vis->blueMask >> vis->offsetBlue) + 1)
-#if COMPOSITE
-#define ALPHAMASK(vis) ((vis)->nplanes < 32 ? 0 : \
- (CARD32) ~((vis)->redMask|(vis)->greenMask|(vis)->blueMask))
-#else
-#define ALPHAMASK(vis) 0
-#endif
-
-#define RGBMASK(vis) (vis->redMask | vis->greenMask | vis->blueMask | ALPHAMASK(vis))
-
-/* GetNextBitsOrBreak(bits, mask, base) --
- * (Suggestion: First read the macro, then read this explanation.
- *
- * Either generate the next value to OR in to a pixel or break out of this
- * while loop
- *
- * This macro is used when we're trying to generate all 2^n combinations of
- * bits in mask. What we're doing here is counting in binary, except that
- * the bits we use to count may not be contiguous. This macro will be
- * called 2^n times, returning a different value in bits each time. Then
- * it will cause us to break out of a surrounding loop. (It will always be
- * called from within a while loop.)
- * On call: mask is the value we want to find all the combinations for
- * base has 1 bit set where the least significant bit of mask is set
- *
- * For example,if mask is 01010, base should be 0010 and we count like this:
- * 00010 (see this isn't so hard),
- * then we add base to bits and get 0100. (bits & ~mask) is (0100 & 0100) so
- * we add that to bits getting (0100 + 0100) =
- * 01000 for our next value.
- * then we add 0010 to get
- * 01010 and we're done (easy as 1, 2, 3)
- */
-#define GetNextBitsOrBreak(bits, mask, base) \
- if((bits) == (mask)) \
- break; \
- (bits) += (base); \
- while((bits) & ~(mask)) \
- (bits) += ((bits) & ~(mask));
-/* ID of server as client */
-#define SERVER_ID 0
-
-typedef struct _colorResource
-{
- Colormap mid;
- int client;
-} colorResource;
-
-/* Invariants:
- * refcnt == 0 means entry is empty
- * refcnt > 0 means entry is useable by many clients, so it can't be changed
- * refcnt == AllocPrivate means entry owned by one client only
- * fShared should only be set if refcnt == AllocPrivate, and only in red map
- */
-
-
-/**
- * Create and initialize the color map
- *
- * \param mid resource to use for this colormap
- * \param alloc 1 iff all entries are allocated writable
- */
-int
-CreateColormap (Colormap mid, ScreenPtr pScreen, VisualPtr pVisual,
- ColormapPtr *ppcmap, int alloc, int client)
-{
- int class, size;
- unsigned long sizebytes;
- ColormapPtr pmap;
- EntryPtr pent;
- int i;
- Pixel *ppix, **pptr;
-
- class = pVisual->class;
- if(!(class & DynamicClass) && (alloc != AllocNone) && (client != SERVER_ID))
- return BadMatch;
-
- size = pVisual->ColormapEntries;
- sizebytes = (size * sizeof(Entry)) +
- (MAXCLIENTS * sizeof(Pixel *)) +
- (MAXCLIENTS * sizeof(int));
- if ((class | DynamicClass) == DirectColor)
- sizebytes *= 3;
- sizebytes += sizeof(ColormapRec);
- if (mid == pScreen->defColormap) {
- pmap = malloc(sizebytes);
- if (!pmap)
- return BadAlloc;
- if (!dixAllocatePrivates(&pmap->devPrivates, PRIVATE_COLORMAP)) {
- free (pmap);
- return BadAlloc;
- }
- } else {
- pmap = _dixAllocateObjectWithPrivates(sizebytes, sizebytes,
- offsetof(ColormapRec, devPrivates), PRIVATE_COLORMAP);
- if (!pmap)
- return BadAlloc;
- }
-#if defined(_XSERVER64)
- pmap->pad0 = 0;
- pmap->pad1 = 0;
-#if (X_BYTE_ORDER == X_LITTLE_ENDIAN)
- pmap->pad2 = 0;
-#endif
-#endif
- pmap->red = (EntryPtr)((char *)pmap + sizeof(ColormapRec));
- sizebytes = size * sizeof(Entry);
- pmap->clientPixelsRed = (Pixel **)((char *)pmap->red + sizebytes);
- pmap->numPixelsRed = (int *)((char *)pmap->clientPixelsRed +
- (MAXCLIENTS * sizeof(Pixel *)));
- pmap->mid = mid;
- pmap->flags = 0; /* start out with all flags clear */
- if(mid == pScreen->defColormap)
- pmap->flags |= IsDefault;
- pmap->pScreen = pScreen;
- pmap->pVisual = pVisual;
- pmap->class = class;
- if ((class | DynamicClass) == DirectColor)
- size = NUMRED(pVisual);
- pmap->freeRed = size;
- memset((char *) pmap->red, 0, (int)sizebytes);
- memset((char *) pmap->numPixelsRed, 0, MAXCLIENTS * sizeof(int));
- for (pptr = &pmap->clientPixelsRed[MAXCLIENTS]; --pptr >= pmap->clientPixelsRed; )
- *pptr = (Pixel *)NULL;
- if (alloc == AllocAll)
- {
- if (class & DynamicClass)
- pmap->flags |= AllAllocated;
- for (pent = &pmap->red[size - 1]; pent >= pmap->red; pent--)
- pent->refcnt = AllocPrivate;
- pmap->freeRed = 0;
- ppix = malloc(size * sizeof(Pixel));
- if (!ppix)
- {
- free(pmap);
- return BadAlloc;
- }
- pmap->clientPixelsRed[client] = ppix;
- for(i = 0; i < size; i++)
- ppix[i] = i;
- pmap->numPixelsRed[client] = size;
- }
-
- if ((class | DynamicClass) == DirectColor)
- {
- pmap->freeGreen = NUMGREEN(pVisual);
- pmap->green = (EntryPtr)((char *)pmap->numPixelsRed +
- (MAXCLIENTS * sizeof(int)));
- pmap->clientPixelsGreen = (Pixel **)((char *)pmap->green + sizebytes);
- pmap->numPixelsGreen = (int *)((char *)pmap->clientPixelsGreen +
- (MAXCLIENTS * sizeof(Pixel *)));
- pmap->freeBlue = NUMBLUE(pVisual);
- pmap->blue = (EntryPtr)((char *)pmap->numPixelsGreen +
- (MAXCLIENTS * sizeof(int)));
- pmap->clientPixelsBlue = (Pixel **)((char *)pmap->blue + sizebytes);
- pmap->numPixelsBlue = (int *)((char *)pmap->clientPixelsBlue +
- (MAXCLIENTS * sizeof(Pixel *)));
-
- memset((char *) pmap->green, 0, (int)sizebytes);
- memset((char *) pmap->blue, 0, (int)sizebytes);
-
- memmove((char *) pmap->clientPixelsGreen,
- (char *) pmap->clientPixelsRed,
- MAXCLIENTS * sizeof(Pixel *));
- memmove((char *) pmap->clientPixelsBlue,
- (char *) pmap->clientPixelsRed,
- MAXCLIENTS * sizeof(Pixel *));
- memset((char *) pmap->numPixelsGreen, 0, MAXCLIENTS * sizeof(int));
- memset((char *) pmap->numPixelsBlue, 0, MAXCLIENTS * sizeof(int));
-
- /* If every cell is allocated, mark its refcnt */
- if (alloc == AllocAll)
- {
- size = pmap->freeGreen;
- for(pent = &pmap->green[size-1]; pent >= pmap->green; pent--)
- pent->refcnt = AllocPrivate;
- pmap->freeGreen = 0;
- ppix = malloc(size * sizeof(Pixel));
- if (!ppix)
- {
- free(pmap->clientPixelsRed[client]);
- free(pmap);
- return BadAlloc;
- }
- pmap->clientPixelsGreen[client] = ppix;
- for(i = 0; i < size; i++)
- ppix[i] = i;
- pmap->numPixelsGreen[client] = size;
-
- size = pmap->freeBlue;
- for(pent = &pmap->blue[size-1]; pent >= pmap->blue; pent--)
- pent->refcnt = AllocPrivate;
- pmap->freeBlue = 0;
- ppix = malloc(size * sizeof(Pixel));
- if (!ppix)
- {
- free(pmap->clientPixelsGreen[client]);
- free(pmap->clientPixelsRed[client]);
- free(pmap);
- return BadAlloc;
- }
- pmap->clientPixelsBlue[client] = ppix;
- for(i = 0; i < size; i++)
- ppix[i] = i;
- pmap->numPixelsBlue[client] = size;
- }
- }
- pmap->flags |= BeingCreated;
-
- if (!AddResource(mid, RT_COLORMAP, (pointer)pmap))
- return BadAlloc;
-
- /*
- * Security creation/labeling check
- */
- i = XaceHook(XACE_RESOURCE_ACCESS, clients[client], mid, RT_COLORMAP,
- pmap, RT_NONE, NULL, DixCreateAccess);
- if (i != Success) {
- FreeResource(mid, RT_NONE);
- return i;
- }
-
- /* If the device wants a chance to initialize the colormap in any way,
- * this is it. In specific, if this is a Static colormap, this is the
- * time to fill in the colormap's values */
- if (!(*pScreen->CreateColormap)(pmap))
- {
- FreeResource (mid, RT_NONE);
- return BadAlloc;
- }
- pmap->flags &= ~BeingCreated;
- *ppcmap = pmap;
- return Success;
-}
-
-/**
- *
- * \param value must conform to DeleteType
- */
-int
-FreeColormap (pointer value, XID mid)
-{
- int i;
- EntryPtr pent;
- ColormapPtr pmap = (ColormapPtr)value;
-
- if(CLIENT_ID(mid) != SERVER_ID)
- {
- (*pmap->pScreen->UninstallColormap) (pmap);
- WalkTree(pmap->pScreen, (VisitWindowProcPtr)TellNoMap, (pointer) &mid);
- }
-
- /* This is the device's chance to undo anything it needs to, especially
- * to free any storage it allocated */
- (*pmap->pScreen->DestroyColormap)(pmap);
-
- if(pmap->clientPixelsRed)
- {
- for(i = 0; i < MAXCLIENTS; i++)
- free(pmap->clientPixelsRed[i]);
- }
-
- if ((pmap->class == PseudoColor) || (pmap->class == GrayScale))
- {
- for(pent = &pmap->red[pmap->pVisual->ColormapEntries - 1];
- pent >= pmap->red;
- pent--)
- {
- if(pent->fShared)
- {
- if (--pent->co.shco.red->refcnt == 0)
- free(pent->co.shco.red);
- if (--pent->co.shco.green->refcnt == 0)
- free(pent->co.shco.green);
- if (--pent->co.shco.blue->refcnt == 0)
- free(pent->co.shco.blue);
- }
- }
- }
- if((pmap->class | DynamicClass) == DirectColor)
- {
- for(i = 0; i < MAXCLIENTS; i++)
- {
- free(pmap->clientPixelsGreen[i]);
- free(pmap->clientPixelsBlue[i]);
- }
- }
-
- if (pmap->flags & IsDefault) {
- dixFreePrivates(pmap->devPrivates, PRIVATE_COLORMAP);
- free(pmap);
- } else
- dixFreeObjectWithPrivates(pmap, PRIVATE_COLORMAP);
- return Success;
-}
-
-/* Tell window that pmid has disappeared */
-static int
-TellNoMap (WindowPtr pwin, Colormap *pmid)
-{
- xEvent xE;
-
- if (wColormap(pwin) == *pmid)
- {
- /* This should be call to DeliverEvent */
- xE.u.u.type = ColormapNotify;
- xE.u.colormap.window = pwin->drawable.id;
- xE.u.colormap.colormap = None;
- xE.u.colormap.new = TRUE;
- xE.u.colormap.state = ColormapUninstalled;
-#ifdef PANORAMIX
- if(noPanoramiXExtension || !pwin->drawable.pScreen->myNum)
-#endif
- DeliverEvents(pwin, &xE, 1, (WindowPtr)NULL);
- if (pwin->optional) {
- pwin->optional->colormap = None;
- CheckWindowOptionalNeed (pwin);
- }
- }
-
- return WT_WALKCHILDREN;
-}
-
-/* Tell window that pmid got uninstalled */
-int
-TellLostMap (WindowPtr pwin, pointer value)
-{
- Colormap *pmid = (Colormap *)value;
- xEvent xE;
-
-#ifdef PANORAMIX
- if(!noPanoramiXExtension && pwin->drawable.pScreen->myNum)
- return WT_STOPWALKING;
-#endif
- if (wColormap(pwin) == *pmid)
- {
- /* This should be call to DeliverEvent */
- xE.u.u.type = ColormapNotify;
- xE.u.colormap.window = pwin->drawable.id;
- xE.u.colormap.colormap = *pmid;
- xE.u.colormap.new = FALSE;
- xE.u.colormap.state = ColormapUninstalled;
- DeliverEvents(pwin, &xE, 1, (WindowPtr)NULL);
- }
-
- return WT_WALKCHILDREN;
-}
-
-/* Tell window that pmid got installed */
-int
-TellGainedMap (WindowPtr pwin, pointer value)
-{
- Colormap *pmid = (Colormap *)value;
- xEvent xE;
-
-#ifdef PANORAMIX
- if(!noPanoramiXExtension && pwin->drawable.pScreen->myNum)
- return WT_STOPWALKING;
-#endif
- if (wColormap (pwin) == *pmid)
- {
- /* This should be call to DeliverEvent */
- xE.u.u.type = ColormapNotify;
- xE.u.colormap.window = pwin->drawable.id;
- xE.u.colormap.colormap = *pmid;
- xE.u.colormap.new = FALSE;
- xE.u.colormap.state = ColormapInstalled;
- DeliverEvents(pwin, &xE, 1, (WindowPtr)NULL);
- }
-
- return WT_WALKCHILDREN;
-}
-
-
-int
-CopyColormapAndFree (Colormap mid, ColormapPtr pSrc, int client)
-{
- ColormapPtr pmap = (ColormapPtr) NULL;
- int result, alloc, size;
- Colormap midSrc;
- ScreenPtr pScreen;
- VisualPtr pVisual;
-
- pScreen = pSrc->pScreen;
- pVisual = pSrc->pVisual;
- midSrc = pSrc->mid;
- alloc = ((pSrc->flags & AllAllocated) && CLIENT_ID(midSrc) == client) ?
- AllocAll : AllocNone;
- size = pVisual->ColormapEntries;
-
- /* If the create returns non-0, it failed */
- result = CreateColormap (mid, pScreen, pVisual, &pmap, alloc, client);
- if(result != Success)
- return result;
- if(alloc == AllocAll)
- {
- memmove((char *)pmap->red, (char *)pSrc->red, size * sizeof(Entry));
- if((pmap->class | DynamicClass) == DirectColor)
- {
- memmove((char *)pmap->green, (char *)pSrc->green, size * sizeof(Entry));
- memmove((char *)pmap->blue, (char *)pSrc->blue, size * sizeof(Entry));
- }
- pSrc->flags &= ~AllAllocated;
- FreePixels(pSrc, client);
- UpdateColors(pmap);
- return Success;
- }
-
- CopyFree(REDMAP, client, pSrc, pmap);
- if ((pmap->class | DynamicClass) == DirectColor)
- {
- CopyFree(GREENMAP, client, pSrc, pmap);
- CopyFree(BLUEMAP, client, pSrc, pmap);
- }
- if (pmap->class & DynamicClass)
- UpdateColors(pmap);
- /* XXX should worry about removing any RT_CMAPENTRY resource */
- return Success;
-}
-
-/* Helper routine for freeing large numbers of cells from a map */
-static void
-CopyFree (int channel, int client, ColormapPtr pmapSrc, ColormapPtr pmapDst)
-{
- int z, npix;
- EntryPtr pentSrcFirst, pentDstFirst;
- EntryPtr pentSrc, pentDst;
- Pixel *ppix;
- int nalloc;
-
- switch(channel)
- {
- default: /* so compiler can see that everything gets initialized */
- case REDMAP:
- ppix = (pmapSrc->clientPixelsRed)[client];
- npix = (pmapSrc->numPixelsRed)[client];
- pentSrcFirst = pmapSrc->red;
- pentDstFirst = pmapDst->red;
- break;
- case GREENMAP:
- ppix = (pmapSrc->clientPixelsGreen)[client];
- npix = (pmapSrc->numPixelsGreen)[client];
- pentSrcFirst = pmapSrc->green;
- pentDstFirst = pmapDst->green;
- break;
- case BLUEMAP:
- ppix = (pmapSrc->clientPixelsBlue)[client];
- npix = (pmapSrc->numPixelsBlue)[client];
- pentSrcFirst = pmapSrc->blue;
- pentDstFirst = pmapDst->blue;
- break;
- }
- nalloc = 0;
- if (pmapSrc->class & DynamicClass)
- {
- for(z = npix; --z >= 0; ppix++)
- {
- /* Copy entries */
- pentSrc = pentSrcFirst + *ppix;
- pentDst = pentDstFirst + *ppix;
- if (pentDst->refcnt > 0)
- {
- pentDst->refcnt++;
- }
- else
- {
- *pentDst = *pentSrc;
- nalloc++;
- if (pentSrc->refcnt > 0)
- pentDst->refcnt = 1;
- else
- pentSrc->fShared = FALSE;
- }
- FreeCell(pmapSrc, *ppix, channel);
- }
- }
-
- /* Note that FreeCell has already fixed pmapSrc->free{Color} */
- switch(channel)
- {
- case REDMAP:
- pmapDst->freeRed -= nalloc;
- (pmapDst->clientPixelsRed)[client] =
- (pmapSrc->clientPixelsRed)[client];
- (pmapSrc->clientPixelsRed)[client] = (Pixel *) NULL;
- (pmapDst->numPixelsRed)[client] = (pmapSrc->numPixelsRed)[client];
- (pmapSrc->numPixelsRed)[client] = 0;
- break;
- case GREENMAP:
- pmapDst->freeGreen -= nalloc;
- (pmapDst->clientPixelsGreen)[client] =
- (pmapSrc->clientPixelsGreen)[client];
- (pmapSrc->clientPixelsGreen)[client] = (Pixel *) NULL;
- (pmapDst->numPixelsGreen)[client] = (pmapSrc->numPixelsGreen)[client];
- (pmapSrc->numPixelsGreen)[client] = 0;
- break;
- case BLUEMAP:
- pmapDst->freeBlue -= nalloc;
- pmapDst->clientPixelsBlue[client] = pmapSrc->clientPixelsBlue[client];
- pmapSrc->clientPixelsBlue[client] = (Pixel *) NULL;
- pmapDst->numPixelsBlue[client] = pmapSrc->numPixelsBlue[client];
- pmapSrc->numPixelsBlue[client] = 0;
- break;
- }
-}
-
-/* Free the ith entry in a color map. Must handle freeing of
- * colors allocated through AllocColorPlanes */
-static void
-FreeCell (ColormapPtr pmap, Pixel i, int channel)
-{
- EntryPtr pent;
- int *pCount;
-
-
- switch (channel)
- {
- default: /* so compiler can see that everything gets initialized */
- case PSEUDOMAP:
- case REDMAP:
- pent = (EntryPtr) &pmap->red[i];
- pCount = &pmap->freeRed;
- break;
- case GREENMAP:
- pent = (EntryPtr) &pmap->green[i];
- pCount = &pmap->freeGreen;
- break;
- case BLUEMAP:
- pent = (EntryPtr) &pmap->blue[i];
- pCount = &pmap->freeBlue;
- break;
- }
- /* If it's not privately allocated and it's not time to free it, just
- * decrement the count */
- if (pent->refcnt > 1)
- pent->refcnt--;
- else
- {
- /* If the color type is shared, find the sharedcolor. If decremented
- * refcnt is 0, free the shared cell. */
- if (pent->fShared)
- {
- if(--pent->co.shco.red->refcnt == 0)
- free(pent->co.shco.red);
- if(--pent->co.shco.green->refcnt == 0)
- free(pent->co.shco.green);
- if(--pent->co.shco.blue->refcnt == 0)
- free(pent->co.shco.blue);
- pent->fShared = FALSE;
- }
- pent->refcnt = 0;
- *pCount += 1;
- }
-}
-
-static void
-UpdateColors (ColormapPtr pmap)
-{
- xColorItem *defs;
- xColorItem *pdef;
- EntryPtr pent;
- VisualPtr pVisual;
- int i, n, size;
-
- pVisual = pmap->pVisual;
- size = pVisual->ColormapEntries;
- defs = malloc(size * sizeof(xColorItem));
- if (!defs)
- return;
- n = 0;
- pdef = defs;
- if (pmap->class == DirectColor)
- {
- for (i = 0; i < size; i++)
- {
- if (!pmap->red[i].refcnt &&
- !pmap->green[i].refcnt &&
- !pmap->blue[i].refcnt)
- continue;
- pdef->pixel = ((Pixel)i << pVisual->offsetRed) |
- ((Pixel)i << pVisual->offsetGreen) |
- ((Pixel)i << pVisual->offsetBlue);
- pdef->red = pmap->red[i].co.local.red;
- pdef->green = pmap->green[i].co.local.green;
- pdef->blue = pmap->blue[i].co.local.blue;
- pdef->flags = DoRed|DoGreen|DoBlue;
- pdef++;
- n++;
- }
- }
- else
- {
- for (i = 0, pent = pmap->red; i < size; i++, pent++)
- {
- if (!pent->refcnt)
- continue;
- pdef->pixel = i;
- if(pent->fShared)
- {
- pdef->red = pent->co.shco.red->color;
- pdef->green = pent->co.shco.green->color;
- pdef->blue = pent->co.shco.blue->color;
- }
- else
- {
- pdef->red = pent->co.local.red;
- pdef->green = pent->co.local.green;
- pdef->blue = pent->co.local.blue;
- }
- pdef->flags = DoRed|DoGreen|DoBlue;
- pdef++;
- n++;
- }
- }
- if (n)
- (*pmap->pScreen->StoreColors)(pmap, n, defs);
- free(defs);
-}
-
-/* Get a read-only color from a ColorMap (probably slow for large maps)
- * Returns by changing the value in pred, pgreen, pblue and pPix
- */
-int
-AllocColor (ColormapPtr pmap,
- unsigned short *pred, unsigned short *pgreen, unsigned short *pblue,
- Pixel *pPix, int client)
-{
- Pixel pixR, pixG, pixB;
- int entries;
- xrgb rgb;
- int class;
- VisualPtr pVisual;
- int npix;
- Pixel *ppix;
-
- pVisual = pmap->pVisual;
- (*pmap->pScreen->ResolveColor) (pred, pgreen, pblue, pVisual);
- rgb.red = *pred;
- rgb.green = *pgreen;
- rgb.blue = *pblue;
- class = pmap->class;
- entries = pVisual->ColormapEntries;
-
- /* If the colormap is being created, then we want to be able to change
- * the colormap, even if it's a static type. Otherwise, we'd never be
- * able to initialize static colormaps
- */
- if(pmap->flags & BeingCreated)
- class |= DynamicClass;
-
- /* If this is one of the static storage classes, and we're not initializing
- * it, the best we can do is to find the closest color entry to the
- * requested one and return that.
- */
- switch (class) {
- case StaticColor:
- case StaticGray:
- /* Look up all three components in the same pmap */
- *pPix = pixR = FindBestPixel(pmap->red, entries, &rgb, PSEUDOMAP);
- *pred = pmap->red[pixR].co.local.red;
- *pgreen = pmap->red[pixR].co.local.green;
- *pblue = pmap->red[pixR].co.local.blue;
- npix = pmap->numPixelsRed[client];
- ppix = (Pixel *) realloc(pmap->clientPixelsRed[client],
- (npix + 1) * sizeof(Pixel));
- if (!ppix)
- return BadAlloc;
- ppix[npix] = pixR;
- pmap->clientPixelsRed[client] = ppix;
- pmap->numPixelsRed[client]++;
- break;
-
- case TrueColor:
- /* Look up each component in its own map, then OR them together */
- pixR = FindBestPixel(pmap->red, NUMRED(pVisual), &rgb, REDMAP);
- pixG = FindBestPixel(pmap->green, NUMGREEN(pVisual), &rgb, GREENMAP);
- pixB = FindBestPixel(pmap->blue, NUMBLUE(pVisual), &rgb, BLUEMAP);
- *pPix = (pixR << pVisual->offsetRed) |
- (pixG << pVisual->offsetGreen) |
- (pixB << pVisual->offsetBlue) |
- ALPHAMASK(pVisual);
-
- *pred = pmap->red[pixR].co.local.red;
- *pgreen = pmap->green[pixG].co.local.green;
- *pblue = pmap->blue[pixB].co.local.blue;
- npix = pmap->numPixelsRed[client];
- ppix = (Pixel *) realloc(pmap->clientPixelsRed[client],
- (npix + 1) * sizeof(Pixel));
- if (!ppix)
- return BadAlloc;
- ppix[npix] = pixR;
- pmap->clientPixelsRed[client] = ppix;
- npix = pmap->numPixelsGreen[client];
- ppix = (Pixel *) realloc(pmap->clientPixelsGreen[client],
- (npix + 1) * sizeof(Pixel));
- if (!ppix)
- return BadAlloc;
- ppix[npix] = pixG;
- pmap->clientPixelsGreen[client] = ppix;
- npix = pmap->numPixelsBlue[client];
- ppix = (Pixel *) realloc(pmap->clientPixelsBlue[client],
- (npix + 1) * sizeof(Pixel));
- if (!ppix)
- return BadAlloc;
- ppix[npix] = pixB;
- pmap->clientPixelsBlue[client] = ppix;
- pmap->numPixelsRed[client]++;
- pmap->numPixelsGreen[client]++;
- pmap->numPixelsBlue[client]++;
- break;
-
- case GrayScale:
- case PseudoColor:
- if (pmap->mid != pmap->pScreen->defColormap &&
- pmap->pVisual->vid == pmap->pScreen->rootVisual)
- {
- ColormapPtr prootmap;
- dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap,
- RT_COLORMAP, clients[client], DixReadAccess);
-
- if (pmap->class == prootmap->class)
- FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb,
- pPix, PSEUDOMAP, AllComp);
- }
- if (FindColor(pmap, pmap->red, entries, &rgb, pPix, PSEUDOMAP,
- client, AllComp) != Success)
- return BadAlloc;
- break;
-
- case DirectColor:
- if (pmap->mid != pmap->pScreen->defColormap &&
- pmap->pVisual->vid == pmap->pScreen->rootVisual)
- {
- ColormapPtr prootmap;
- dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap,
- RT_COLORMAP, clients[client], DixReadAccess);
-
- if (pmap->class == prootmap->class)
- {
- pixR = (*pPix & pVisual->redMask) >> pVisual->offsetRed;
- FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb,
- &pixR, REDMAP, RedComp);
- pixG = (*pPix & pVisual->greenMask) >> pVisual->offsetGreen;
- FindColorInRootCmap (prootmap, prootmap->green, entries, &rgb,
- &pixG, GREENMAP, GreenComp);
- pixB = (*pPix & pVisual->blueMask) >> pVisual->offsetBlue;
- FindColorInRootCmap (prootmap, prootmap->blue, entries, &rgb,
- &pixB, BLUEMAP, BlueComp);
- *pPix = pixR | pixG | pixB;
- }
- }
-
- pixR = (*pPix & pVisual->redMask) >> pVisual->offsetRed;
- if (FindColor(pmap, pmap->red, NUMRED(pVisual), &rgb, &pixR, REDMAP,
- client, RedComp) != Success)
- return BadAlloc;
- pixG = (*pPix & pVisual->greenMask) >> pVisual->offsetGreen;
- if (FindColor(pmap, pmap->green, NUMGREEN(pVisual), &rgb, &pixG,
- GREENMAP, client, GreenComp) != Success)
- {
- (void)FreeCo(pmap, client, REDMAP, 1, &pixR, (Pixel)0);
- return BadAlloc;
- }
- pixB = (*pPix & pVisual->blueMask) >> pVisual->offsetBlue;
- if (FindColor(pmap, pmap->blue, NUMBLUE(pVisual), &rgb, &pixB, BLUEMAP,
- client, BlueComp) != Success)
- {
- (void)FreeCo(pmap, client, GREENMAP, 1, &pixG, (Pixel)0);
- (void)FreeCo(pmap, client, REDMAP, 1, &pixR, (Pixel)0);
- return BadAlloc;
- }
- *pPix = pixR | pixG | pixB | ALPHAMASK(pVisual);
-
- break;
- }
-
- /* if this is the client's first pixel in this colormap, tell the
- * resource manager that the client has pixels in this colormap which
- * should be freed when the client dies */
- if ((pmap->numPixelsRed[client] == 1) &&
- (CLIENT_ID(pmap->mid) != client) &&
- !(pmap->flags & BeingCreated))
- {
- colorResource *pcr;
-
- pcr = malloc(sizeof(colorResource));
- if (!pcr)
- {
- (void)FreeColors(pmap, client, 1, pPix, (Pixel)0);
- return BadAlloc;
- }
- pcr->mid = pmap->mid;
- pcr->client = client;
- if (!AddResource(FakeClientID(client), RT_CMAPENTRY, (pointer)pcr))
- return BadAlloc;
- }
- return Success;
-}
-
-/*
- * FakeAllocColor -- fake an AllocColor request by
- * returning a free pixel if availible, otherwise returning
- * the closest matching pixel. This is used by the mi
- * software sprite code to recolor cursors. A nice side-effect
- * is that this routine will never return failure.
- */
-
-void
-FakeAllocColor (ColormapPtr pmap, xColorItem *item)
-{
- Pixel pixR, pixG, pixB;
- Pixel temp;
- int entries;
- xrgb rgb;
- int class;
- VisualPtr pVisual;
-
- pVisual = pmap->pVisual;
- rgb.red = item->red;
- rgb.green = item->green;
- rgb.blue = item->blue;
- (*pmap->pScreen->ResolveColor) (&rgb.red, &rgb.green, &rgb.blue, pVisual);
- class = pmap->class;
- entries = pVisual->ColormapEntries;
-
- switch (class) {
- case GrayScale:
- case PseudoColor:
- temp = 0;
- item->pixel = 0;
- if (FindColor(pmap, pmap->red, entries, &rgb, &temp, PSEUDOMAP,
- -1, AllComp) == Success) {
- item->pixel = temp;
- break;
- }
- /* fall through ... */
- case StaticColor:
- case StaticGray:
- item->pixel = FindBestPixel(pmap->red, entries, &rgb, PSEUDOMAP);
- break;
-
- case DirectColor:
- /* Look up each component in its own map, then OR them together */
- pixR = (item->pixel & pVisual->redMask) >> pVisual->offsetRed;
- pixG = (item->pixel & pVisual->greenMask) >> pVisual->offsetGreen;
- pixB = (item->pixel & pVisual->blueMask) >> pVisual->offsetBlue;
- if (FindColor(pmap, pmap->red, NUMRED(pVisual), &rgb, &pixR, REDMAP,
- -1, RedComp) != Success)
- pixR = FindBestPixel(pmap->red, NUMRED(pVisual), &rgb, REDMAP)
- << pVisual->offsetRed;
- if (FindColor(pmap, pmap->green, NUMGREEN(pVisual), &rgb, &pixG,
- GREENMAP, -1, GreenComp) != Success)
- pixG = FindBestPixel(pmap->green, NUMGREEN(pVisual), &rgb,
- GREENMAP) << pVisual->offsetGreen;
- if (FindColor(pmap, pmap->blue, NUMBLUE(pVisual), &rgb, &pixB, BLUEMAP,
- -1, BlueComp) != Success)
- pixB = FindBestPixel(pmap->blue, NUMBLUE(pVisual), &rgb, BLUEMAP)
- << pVisual->offsetBlue;
- item->pixel = pixR | pixG | pixB;
- break;
-
- case TrueColor:
- /* Look up each component in its own map, then OR them together */
- pixR = FindBestPixel(pmap->red, NUMRED(pVisual), &rgb, REDMAP);
- pixG = FindBestPixel(pmap->green, NUMGREEN(pVisual), &rgb, GREENMAP);
- pixB = FindBestPixel(pmap->blue, NUMBLUE(pVisual), &rgb, BLUEMAP);
- item->pixel = (pixR << pVisual->offsetRed) |
- (pixG << pVisual->offsetGreen) |
- (pixB << pVisual->offsetBlue);
- break;
- }
-}
-
-/* free a pixel value obtained from FakeAllocColor */
-void
-FakeFreeColor(ColormapPtr pmap, Pixel pixel)
-{
- VisualPtr pVisual;
- Pixel pixR, pixG, pixB;
-
- switch (pmap->class) {
- case GrayScale:
- case PseudoColor:
- if (pmap->red[pixel].refcnt == AllocTemporary)
- pmap->red[pixel].refcnt = 0;
- break;
- case DirectColor:
- pVisual = pmap->pVisual;
- pixR = (pixel & pVisual->redMask) >> pVisual->offsetRed;
- pixG = (pixel & pVisual->greenMask) >> pVisual->offsetGreen;
- pixB = (pixel & pVisual->blueMask) >> pVisual->offsetBlue;
- if (pmap->red[pixR].refcnt == AllocTemporary)
- pmap->red[pixR].refcnt = 0;
- if (pmap->green[pixG].refcnt == AllocTemporary)
- pmap->green[pixG].refcnt = 0;
- if (pmap->blue[pixB].refcnt == AllocTemporary)
- pmap->blue[pixB].refcnt = 0;
- break;
- }
-}
-
-typedef unsigned short BigNumUpper;
-typedef unsigned long BigNumLower;
-
-#define BIGNUMLOWERBITS 24
-#define BIGNUMUPPERBITS 16
-#define BIGNUMLOWER (1 << BIGNUMLOWERBITS)
-#define BIGNUMUPPER (1 << BIGNUMUPPERBITS)
-#define UPPERPART(i) ((i) >> BIGNUMLOWERBITS)
-#define LOWERPART(i) ((i) & (BIGNUMLOWER - 1))
-
-typedef struct _bignum {
- BigNumUpper upper;
- BigNumLower lower;
-} BigNumRec, *BigNumPtr;
-
-#define BigNumGreater(x,y) (((x)->upper > (y)->upper) ||\
- ((x)->upper == (y)->upper && (x)->lower > (y)->lower))
-
-#define UnsignedToBigNum(u,r) (((r)->upper = UPPERPART(u)), \
- ((r)->lower = LOWERPART(u)))
-
-#define MaxBigNum(r) (((r)->upper = BIGNUMUPPER-1), \
- ((r)->lower = BIGNUMLOWER-1))
-
-static void
-BigNumAdd (BigNumPtr x, BigNumPtr y, BigNumPtr r)
-{
- BigNumLower lower, carry = 0;
-
- lower = x->lower + y->lower;
- if (lower >= BIGNUMLOWER) {
- lower -= BIGNUMLOWER;
- carry = 1;
- }
- r->lower = lower;
- r->upper = x->upper + y->upper + carry;
-}
-
-static Pixel
-FindBestPixel(EntryPtr pentFirst, int size, xrgb *prgb, int channel)
-{
- EntryPtr pent;
- Pixel pixel, final;
- long dr, dg, db;
- unsigned long sq;
- BigNumRec minval, sum, temp;
-
- final = 0;
- MaxBigNum(&minval);
- /* look for the minimal difference */
- for (pent = pentFirst, pixel = 0; pixel < size; pent++, pixel++)
- {
- dr = dg = db = 0;
- switch(channel)
- {
- case PSEUDOMAP:
- dg = (long) pent->co.local.green - prgb->green;
- db = (long) pent->co.local.blue - prgb->blue;
- case REDMAP:
- dr = (long) pent->co.local.red - prgb->red;
- break;
- case GREENMAP:
- dg = (long) pent->co.local.green - prgb->green;
- break;
- case BLUEMAP:
- db = (long) pent->co.local.blue - prgb->blue;
- break;
- }
- sq = dr * dr;
- UnsignedToBigNum (sq, &sum);
- sq = dg * dg;
- UnsignedToBigNum (sq, &temp);
- BigNumAdd (&sum, &temp, &sum);
- sq = db * db;
- UnsignedToBigNum (sq, &temp);
- BigNumAdd (&sum, &temp, &sum);
- if (BigNumGreater (&minval, &sum))
- {
- final = pixel;
- minval = sum;
- }
- }
- return final;
-}
-
-static void
-FindColorInRootCmap (ColormapPtr pmap, EntryPtr pentFirst, int size,
- xrgb *prgb, Pixel *pPixel, int channel,
- ColorCompareProcPtr comp)
-{
- EntryPtr pent;
- Pixel pixel;
- int count;
-
- if ((pixel = *pPixel) >= size)
- pixel = 0;
- for (pent = pentFirst + pixel, count = size; --count >= 0; pent++, pixel++)
- {
- if (pent->refcnt > 0 && (*comp) (pent, prgb))
- {
- switch (channel)
- {
- case REDMAP:
- pixel <<= pmap->pVisual->offsetRed;
- break;
- case GREENMAP:
- pixel <<= pmap->pVisual->offsetGreen;
- break;
- case BLUEMAP:
- pixel <<= pmap->pVisual->offsetBlue;
- break;
- default: /* PSEUDOMAP */
- break;
- }
- *pPixel = pixel;
- }
- }
-}
-
-/* Tries to find a color in pmap that exactly matches the one requested in prgb
- * if it can't it allocates one.
- * Starts looking at pentFirst + *pPixel, so if you want a specific pixel,
- * load *pPixel with that value, otherwise set it to 0
- */
-int
-FindColor (ColormapPtr pmap, EntryPtr pentFirst, int size, xrgb *prgb,
- Pixel *pPixel, int channel, int client,
- ColorCompareProcPtr comp)
-{
- EntryPtr pent;
- Bool foundFree;
- Pixel pixel, Free = 0;
- int npix, count, *nump = NULL;
- Pixel **pixp = NULL, *ppix;
- xColorItem def;
-
- foundFree = FALSE;
-
- if((pixel = *pPixel) >= size)
- pixel = 0;
- /* see if there is a match, and also look for a free entry */
- for (pent = pentFirst + pixel, count = size; --count >= 0; )
- {
- if (pent->refcnt > 0)
- {
- if ((*comp) (pent, prgb))
- {
- if (client >= 0)
- pent->refcnt++;
- *pPixel = pixel;
- switch(channel)
- {
- case REDMAP:
- *pPixel <<= pmap->pVisual->offsetRed;
- case PSEUDOMAP:
- break;
- case GREENMAP:
- *pPixel <<= pmap->pVisual->offsetGreen;
- break;
- case BLUEMAP:
- *pPixel <<= pmap->pVisual->offsetBlue;
- break;
- }
- goto gotit;
- }
- }
- else if (!foundFree && pent->refcnt == 0)
- {
- Free = pixel;
- foundFree = TRUE;
- /* If we're initializing the colormap, then we are looking for
- * the first free cell we can find, not to minimize the number
- * of entries we use. So don't look any further. */
- if(pmap->flags & BeingCreated)
- break;
- }
- pixel++;
- if(pixel >= size)
- {
- pent = pentFirst;
- pixel = 0;
- }
- else
- pent++;
- }
-
- /* If we got here, we didn't find a match. If we also didn't find
- * a free entry, we're out of luck. Otherwise, we'll usurp a free
- * entry and fill it in */
- if (!foundFree)
- return BadAlloc;
- pent = pentFirst + Free;
- pent->fShared = FALSE;
- pent->refcnt = (client >= 0) ? 1 : AllocTemporary;
-
- switch (channel)
- {
- case PSEUDOMAP:
- pent->co.local.red = prgb->red;
- pent->co.local.green = prgb->green;
- pent->co.local.blue = prgb->blue;
- def.red = prgb->red;
- def.green = prgb->green;
- def.blue = prgb->blue;
- def.flags = (DoRed|DoGreen|DoBlue);
- if (client >= 0)
- pmap->freeRed--;
- def.pixel = Free;
- break;
-
- case REDMAP:
- pent->co.local.red = prgb->red;
- def.red = prgb->red;
- def.green = pmap->green[0].co.local.green;
- def.blue = pmap->blue[0].co.local.blue;
- def.flags = DoRed;
- if (client >= 0)
- pmap->freeRed--;
- def.pixel = Free << pmap->pVisual->offsetRed;
- break;
-
- case GREENMAP:
- pent->co.local.green = prgb->green;
- def.red = pmap->red[0].co.local.red;
- def.green = prgb->green;
- def.blue = pmap->blue[0].co.local.blue;
- def.flags = DoGreen;
- if (client >= 0)
- pmap->freeGreen--;
- def.pixel = Free << pmap->pVisual->offsetGreen;
- break;
-
- case BLUEMAP:
- pent->co.local.blue = prgb->blue;
- def.red = pmap->red[0].co.local.red;
- def.green = pmap->green[0].co.local.green;
- def.blue = prgb->blue;
- def.flags = DoBlue;
- if (client >= 0)
- pmap->freeBlue--;
- def.pixel = Free << pmap->pVisual->offsetBlue;
- break;
- }
- (*pmap->pScreen->StoreColors) (pmap, 1, &def);
- pixel = Free;
- *pPixel = def.pixel;
-
-gotit:
- if (pmap->flags & BeingCreated || client == -1)
- return Success;
- /* Now remember the pixel, for freeing later */
- switch (channel)
- {
- case PSEUDOMAP:
- case REDMAP:
- nump = pmap->numPixelsRed;
- pixp = pmap->clientPixelsRed;
- break;
-
- case GREENMAP:
- nump = pmap->numPixelsGreen;
- pixp = pmap->clientPixelsGreen;
- break;
-
- case BLUEMAP:
- nump = pmap->numPixelsBlue;
- pixp = pmap->clientPixelsBlue;
- break;
- }
- npix = nump[client];
- ppix = (Pixel *) realloc(pixp[client], (npix + 1) * sizeof(Pixel));
- if (!ppix)
- {
- pent->refcnt--;
- if (!pent->fShared)
- switch (channel)
- {
- case PSEUDOMAP:
- case REDMAP:
- pmap->freeRed++;
- break;
- case GREENMAP:
- pmap->freeGreen++;
- break;
- case BLUEMAP:
- pmap->freeBlue++;
- break;
- }
- return BadAlloc;
- }
- ppix[npix] = pixel;
- pixp[client] = ppix;
- nump[client]++;
-
- return Success;
-}
-
-/* Comparison functions -- passed to FindColor to determine if an
- * entry is already the color we're looking for or not */
-static int
-AllComp (EntryPtr pent, xrgb *prgb)
-{
- if((pent->co.local.red == prgb->red) &&
- (pent->co.local.green == prgb->green) &&
- (pent->co.local.blue == prgb->blue) )
- return 1;
- return 0;
-}
-
-static int
-RedComp (EntryPtr pent, xrgb *prgb)
-{
- if (pent->co.local.red == prgb->red)
- return 1;
- return 0;
-}
-
-static int
-GreenComp (EntryPtr pent, xrgb *prgb)
-{
- if (pent->co.local.green == prgb->green)
- return 1;
- return 0;
-}
-
-static int
-BlueComp (EntryPtr pent, xrgb *prgb)
-{
- if (pent->co.local.blue == prgb->blue)
- return 1;
- return 0;
-}
-
-
-/* Read the color value of a cell */
-
-int
-QueryColors (ColormapPtr pmap, int count, Pixel *ppixIn, xrgb *prgbList, ClientPtr client)
-{
- Pixel *ppix, pixel;
- xrgb *prgb;
- VisualPtr pVisual;
- EntryPtr pent;
- Pixel i;
- int errVal = Success;
-
- pVisual = pmap->pVisual;
- if ((pmap->class | DynamicClass) == DirectColor)
- {
- int numred, numgreen, numblue;
- Pixel rgbbad;
-
- numred = NUMRED(pVisual);
- numgreen = NUMGREEN(pVisual);
- numblue = NUMBLUE(pVisual);
- rgbbad = ~RGBMASK(pVisual);
- for( ppix = ppixIn, prgb = prgbList; --count >= 0; ppix++, prgb++)
- {
- pixel = *ppix;
- if (pixel & rgbbad) {
- client->errorValue = pixel;
- errVal = BadValue;
- continue;
- }
- i = (pixel & pVisual->redMask) >> pVisual->offsetRed;
- if (i >= numred)
- {
- client->errorValue = pixel;
- errVal = BadValue;
- continue;
- }
- prgb->red = pmap->red[i].co.local.red;
- i = (pixel & pVisual->greenMask) >> pVisual->offsetGreen;
- if (i >= numgreen)
- {
- client->errorValue = pixel;
- errVal = BadValue;
- continue;
- }
- prgb->green = pmap->green[i].co.local.green;
- i = (pixel & pVisual->blueMask) >> pVisual->offsetBlue;
- if (i >= numblue)
- {
- client->errorValue = pixel;
- errVal = BadValue;
- continue;
- }
- prgb->blue = pmap->blue[i].co.local.blue;
- }
- }
- else
- {
- for( ppix = ppixIn, prgb = prgbList; --count >= 0; ppix++, prgb++)
- {
- pixel = *ppix;
- if (pixel >= pVisual->ColormapEntries)
- {
- client->errorValue = pixel;
- errVal = BadValue;
- }
- else
- {
- pent = (EntryPtr)&pmap->red[pixel];
- if (pent->fShared)
- {
- prgb->red = pent->co.shco.red->color;
- prgb->green = pent->co.shco.green->color;
- prgb->blue = pent->co.shco.blue->color;
- }
- else
- {
- prgb->red = pent->co.local.red;
- prgb->green = pent->co.local.green;
- prgb->blue = pent->co.local.blue;
- }
- }
- }
- }
- return errVal;
-}
-
-static void
-FreePixels(ColormapPtr pmap, int client)
-{
- Pixel *ppix, *ppixStart;
- int n;
- int class;
-
- class = pmap->class;
- ppixStart = pmap->clientPixelsRed[client];
- if (class & DynamicClass)
- {
- n = pmap->numPixelsRed[client];
- for (ppix = ppixStart; --n >= 0; )
- {
- FreeCell(pmap, *ppix, REDMAP);
- ppix++;
- }
- }
-
- free(ppixStart);
- pmap->clientPixelsRed[client] = (Pixel *) NULL;
- pmap->numPixelsRed[client] = 0;
- if ((class | DynamicClass) == DirectColor)
- {
- ppixStart = pmap->clientPixelsGreen[client];
- if (class & DynamicClass)
- for (ppix = ppixStart, n = pmap->numPixelsGreen[client]; --n >= 0;)
- FreeCell(pmap, *ppix++, GREENMAP);
- free(ppixStart);
- pmap->clientPixelsGreen[client] = (Pixel *) NULL;
- pmap->numPixelsGreen[client] = 0;
-
- ppixStart = pmap->clientPixelsBlue[client];
- if (class & DynamicClass)
- for (ppix = ppixStart, n = pmap->numPixelsBlue[client]; --n >= 0; )
- FreeCell(pmap, *ppix++, BLUEMAP);
- free(ppixStart);
- pmap->clientPixelsBlue[client] = (Pixel *) NULL;
- pmap->numPixelsBlue[client] = 0;
- }
-}
-
-/**
- * Frees all of a client's colors and cells.
- *
- * \param value must conform to DeleteType
- * \unused fakeid
- */
-int
-FreeClientPixels (pointer value, XID fakeid)
-{
- pointer pmap;
- colorResource *pcr = value;
- int rc;
-
- rc = dixLookupResourceByType(&pmap, pcr->mid, RT_COLORMAP, serverClient,
- DixRemoveAccess);
- if (rc == Success)
- FreePixels((ColormapPtr)pmap, pcr->client);
- free(pcr);
- return Success;
-}
-
-int
-AllocColorCells (int client, ColormapPtr pmap, int colors, int planes,
- Bool contig, Pixel *ppix, Pixel *masks)
-{
- Pixel rmask, gmask, bmask, *ppixFirst, r, g, b;
- int n, class;
- int ok;
- int oldcount;
- colorResource *pcr = (colorResource *)NULL;
-
- class = pmap->class;
- if (!(class & DynamicClass))
- return BadAlloc; /* Shouldn't try on this type */
- oldcount = pmap->numPixelsRed[client];
- if (pmap->class == DirectColor)
- oldcount += pmap->numPixelsGreen[client] + pmap->numPixelsBlue[client];
- if (!oldcount && (CLIENT_ID(pmap->mid) != client))
- {
- pcr = malloc(sizeof(colorResource));
- if (!pcr)
- return BadAlloc;
- }
-
- if (pmap->class == DirectColor)
- {
- ok = AllocDirect (client, pmap, colors, planes, planes, planes,
- contig, ppix, &rmask, &gmask, &bmask);
- if(ok == Success)
- {
- for (r = g = b = 1, n = planes; --n >= 0; r += r, g += g, b += b)
- {
- while(!(rmask & r))
- r += r;
- while(!(gmask & g))
- g += g;
- while(!(bmask & b))
- b += b;
- *masks++ = r | g | b;
- }
- }
- }
- else
- {
- ok = AllocPseudo (client, pmap, colors, planes, contig, ppix, &rmask,
- &ppixFirst);
- if(ok == Success)
- {
- for (r = 1, n = planes; --n >= 0; r += r)
- {
- while(!(rmask & r))
- r += r;
- *masks++ = r;
- }
- }
- }
-
- /* if this is the client's first pixels in this colormap, tell the
- * resource manager that the client has pixels in this colormap which
- * should be freed when the client dies */
- if ((ok == Success) && pcr)
- {
- pcr->mid = pmap->mid;
- pcr->client = client;
- if (!AddResource(FakeClientID(client), RT_CMAPENTRY, (pointer)pcr))
- ok = BadAlloc;
- } else free(pcr);
-
- return ok;
-}
-
-
-int
-AllocColorPlanes (int client, ColormapPtr pmap, int colors,
- int r, int g, int b, Bool contig, Pixel *pixels,
- Pixel *prmask, Pixel *pgmask, Pixel *pbmask)
-{
- int ok;
- Pixel mask, *ppixFirst;
- Pixel shift;
- int i;
- int class;
- int oldcount;
- colorResource *pcr = (colorResource *)NULL;
-
- class = pmap->class;
- if (!(class & DynamicClass))
- return BadAlloc; /* Shouldn't try on this type */
- oldcount = pmap->numPixelsRed[client];
- if (class == DirectColor)
- oldcount += pmap->numPixelsGreen[client] + pmap->numPixelsBlue[client];
- if (!oldcount && (CLIENT_ID(pmap->mid) != client))
- {
- pcr = malloc(sizeof(colorResource));
- if (!pcr)
- return BadAlloc;
- }
-
- if (class == DirectColor)
- {
- ok = AllocDirect (client, pmap, colors, r, g, b, contig, pixels,
- prmask, pgmask, pbmask);
- }
- else
- {
- /* Allocate the proper pixels */
- /* XXX This is sort of bad, because of contig is set, we force all
- * r + g + b bits to be contiguous. Should only force contiguity
- * per mask
- */
- ok = AllocPseudo (client, pmap, colors, r + g + b, contig, pixels,
- &mask, &ppixFirst);
-
- if(ok == Success)
- {
- /* now split that mask into three */
- *prmask = *pgmask = *pbmask = 0;
- shift = 1;
- for (i = r; --i >= 0; shift += shift)
- {
- while (!(mask & shift))
- shift += shift;
- *prmask |= shift;
- }
- for (i = g; --i >= 0; shift += shift)
- {
- while (!(mask & shift))
- shift += shift;
- *pgmask |= shift;
- }
- for (i = b; --i >= 0; shift += shift)
- {
- while (!(mask & shift))
- shift += shift;
- *pbmask |= shift;
- }
-
- /* set up the shared color cells */
- if (!AllocShared(pmap, pixels, colors, r, g, b,
- *prmask, *pgmask, *pbmask, ppixFirst))
- {
- (void)FreeColors(pmap, client, colors, pixels, mask);
- ok = BadAlloc;
- }
- }
- }
-
- /* if this is the client's first pixels in this colormap, tell the
- * resource manager that the client has pixels in this colormap which
- * should be freed when the client dies */
- if ((ok == Success) && pcr)
- {
- pcr->mid = pmap->mid;
- pcr->client = client;
- if (!AddResource(FakeClientID(client), RT_CMAPENTRY, (pointer)pcr))
- ok = BadAlloc;
- } else free(pcr);
-
- return ok;
-}
-
-static int
-AllocDirect (int client, ColormapPtr pmap, int c, int r, int g, int b, Bool contig,
- Pixel *pixels, Pixel *prmask, Pixel *pgmask, Pixel *pbmask)
-{
- Pixel *ppixRed, *ppixGreen, *ppixBlue;
- Pixel *ppix, *pDst, *p;
- int npix, npixR, npixG, npixB;
- Bool okR, okG, okB;
- Pixel *rpix = 0, *gpix = 0, *bpix = 0;
-
- npixR = c << r;
- npixG = c << g;
- npixB = c << b;
- if ((r >= 32) || (g >= 32) || (b >= 32) ||
- (npixR > pmap->freeRed) || (npixR < c) ||
- (npixG > pmap->freeGreen) || (npixG < c) ||
- (npixB > pmap->freeBlue) || (npixB < c))
- return BadAlloc;
-
- /* start out with empty pixels */
- for(p = pixels; p < pixels + c; p++)
- *p = 0;
-
- ppixRed = malloc(npixR * sizeof(Pixel));
- ppixGreen = malloc(npixG * sizeof(Pixel));
- ppixBlue = malloc(npixB * sizeof(Pixel));
- if (!ppixRed || !ppixGreen || !ppixBlue)
- {
- free(ppixBlue);
- free(ppixGreen);
- free(ppixRed);
- return BadAlloc;
- }
-
- okR = AllocCP(pmap, pmap->red, c, r, contig, ppixRed, prmask);
- okG = AllocCP(pmap, pmap->green, c, g, contig, ppixGreen, pgmask);
- okB = AllocCP(pmap, pmap->blue, c, b, contig, ppixBlue, pbmask);
-
- if (okR && okG && okB)
- {
- rpix = (Pixel *) realloc(pmap->clientPixelsRed[client],
- (pmap->numPixelsRed[client] + (c << r)) *
- sizeof(Pixel));
- if (rpix)
- pmap->clientPixelsRed[client] = rpix;
- gpix = (Pixel *) realloc(pmap->clientPixelsGreen[client],
- (pmap->numPixelsGreen[client] + (c << g)) *
- sizeof(Pixel));
- if (gpix)
- pmap->clientPixelsGreen[client] = gpix;
- bpix = (Pixel *) realloc(pmap->clientPixelsBlue[client],
- (pmap->numPixelsBlue[client] + (c << b)) *
- sizeof(Pixel));
- if (bpix)
- pmap->clientPixelsBlue[client] = bpix;
- }
-
- if (!okR || !okG || !okB || !rpix || !gpix || !bpix)
- {
- if (okR)
- for(ppix = ppixRed, npix = npixR; --npix >= 0; ppix++)
- pmap->red[*ppix].refcnt = 0;
- if (okG)
- for(ppix = ppixGreen, npix = npixG; --npix >= 0; ppix++)
- pmap->green[*ppix].refcnt = 0;
- if (okB)
- for(ppix = ppixBlue, npix = npixB; --npix >= 0; ppix++)
- pmap->blue[*ppix].refcnt = 0;
- free(ppixBlue);
- free(ppixGreen);
- free(ppixRed);
- return BadAlloc;
- }
-
- *prmask <<= pmap->pVisual->offsetRed;
- *pgmask <<= pmap->pVisual->offsetGreen;
- *pbmask <<= pmap->pVisual->offsetBlue;
-
- ppix = rpix + pmap->numPixelsRed[client];
- for (pDst = pixels, p = ppixRed; p < ppixRed + npixR; p++)
- {
- *ppix++ = *p;
- if(p < ppixRed + c)
- *pDst++ |= *p << pmap->pVisual->offsetRed;
- }
- pmap->numPixelsRed[client] += npixR;
- pmap->freeRed -= npixR;
-
- ppix = gpix + pmap->numPixelsGreen[client];
- for (pDst = pixels, p = ppixGreen; p < ppixGreen + npixG; p++)
- {
- *ppix++ = *p;
- if(p < ppixGreen + c)
- *pDst++ |= *p << pmap->pVisual->offsetGreen;
- }
- pmap->numPixelsGreen[client] += npixG;
- pmap->freeGreen -= npixG;
-
- ppix = bpix + pmap->numPixelsBlue[client];
- for (pDst = pixels, p = ppixBlue; p < ppixBlue + npixB; p++)
- {
- *ppix++ = *p;
- if(p < ppixBlue + c)
- *pDst++ |= *p << pmap->pVisual->offsetBlue;
- }
- pmap->numPixelsBlue[client] += npixB;
- pmap->freeBlue -= npixB;
-
-
- for (pDst = pixels; pDst < pixels + c; pDst++)
- *pDst |= ALPHAMASK(pmap->pVisual);
-
- free(ppixBlue);
- free(ppixGreen);
- free(ppixRed);
-
- return Success;
-}
-
-static int
-AllocPseudo (int client, ColormapPtr pmap, int c, int r, Bool contig,
- Pixel *pixels, Pixel *pmask, Pixel **pppixFirst)
-{
- Pixel *ppix, *p, *pDst, *ppixTemp;
- int npix;
- Bool ok;
-
- npix = c << r;
- if ((r >= 32) || (npix > pmap->freeRed) || (npix < c))
- return BadAlloc;
- if(!(ppixTemp = malloc(npix * sizeof(Pixel))))
- return BadAlloc;
- ok = AllocCP(pmap, pmap->red, c, r, contig, ppixTemp, pmask);
-
- if (ok)
- {
-
- /* all the allocated pixels are added to the client pixel list,
- * but only the unique ones are returned to the client */
- ppix = (Pixel *)realloc(pmap->clientPixelsRed[client],
- (pmap->numPixelsRed[client] + npix) * sizeof(Pixel));
- if (!ppix)
- {
- for (p = ppixTemp; p < ppixTemp + npix; p++)
- pmap->red[*p].refcnt = 0;
- return BadAlloc;
- }
- pmap->clientPixelsRed[client] = ppix;
- ppix += pmap->numPixelsRed[client];
- *pppixFirst = ppix;
- pDst = pixels;
- for (p = ppixTemp; p < ppixTemp + npix; p++)
- {
- *ppix++ = *p;
- if(p < ppixTemp + c)
- *pDst++ = *p;
- }
- pmap->numPixelsRed[client] += npix;
- pmap->freeRed -= npix;
- }
- free(ppixTemp);
- return ok ? Success : BadAlloc;
-}
-
-/* Allocates count << planes pixels from colormap pmap for client. If
- * contig, then the plane mask is made of consecutive bits. Returns
- * all count << pixels in the array pixels. The first count of those
- * pixels are the unique pixels. *pMask has the mask to Or with the
- * unique pixels to get the rest of them.
- *
- * Returns True iff all pixels could be allocated
- * All cells allocated will have refcnt set to AllocPrivate and shared to FALSE
- * (see AllocShared for why we care)
- */
-static Bool
-AllocCP (ColormapPtr pmap, EntryPtr pentFirst, int count, int planes,
- Bool contig, Pixel *pixels, Pixel *pMask)
-{
- EntryPtr ent;
- Pixel pixel, base, entries, maxp, save;
- int dplanes, found;
- Pixel *ppix;
- Pixel mask;
- Pixel finalmask;
-
- dplanes = pmap->pVisual->nplanes;
-
- /* Easy case. Allocate pixels only */
- if (planes == 0)
- {
- /* allocate writable entries */
- ppix = pixels;
- ent = pentFirst;
- pixel = 0;
- while (--count >= 0)
- {
- /* Just find count unallocated cells */
- while (ent->refcnt)
- {
- ent++;
- pixel++;
- }
- ent->refcnt = AllocPrivate;
- *ppix++ = pixel;
- ent->fShared = FALSE;
- }
- *pMask = 0;
- return TRUE;
- }
- else if (planes > dplanes)
- {
- return FALSE;
- }
-
- /* General case count pixels * 2 ^ planes cells to be allocated */
-
- /* make room for new pixels */
- ent = pentFirst;
-
- /* first try for contiguous planes, since it's fastest */
- for (mask = (((Pixel)1) << planes) - 1, base = 1, dplanes -= (planes - 1);
- --dplanes >= 0;
- mask += mask, base += base)
- {
- ppix = pixels;
- found = 0;
- pixel = 0;
- entries = pmap->pVisual->ColormapEntries - mask;
- while (pixel < entries)
- {
- save = pixel;
- maxp = pixel + mask + base;
- /* check if all are free */
- while (pixel != maxp && ent[pixel].refcnt == 0)
- pixel += base;
- if (pixel == maxp)
- {
- /* this one works */
- *ppix++ = save;
- found++;
- if (found == count)
- {
- /* found enough, allocate them all */
- while (--count >= 0)
- {
- pixel = pixels[count];
- maxp = pixel + mask;
- while (1)
- {
- ent[pixel].refcnt = AllocPrivate;
- ent[pixel].fShared = FALSE;
- if (pixel == maxp)
- break;
- pixel += base;
- *ppix++ = pixel;
- }
- }
- *pMask = mask;
- return TRUE;
- }
- }
- pixel = save + 1;
- if (pixel & mask)
- pixel += mask;
- }
- }
-
- dplanes = pmap->pVisual->nplanes;
- if (contig || planes == 1 || dplanes < 3)
- return FALSE;
-
- /* this will be very slow for large maps, need a better algorithm */
-
- /*
- we can generate the smallest and largest numbers that fits in dplanes
- bits and contain exactly planes bits set as follows. First, we need to
- check that it is possible to generate such a mask at all.
- (Non-contiguous masks need one more bit than contiguous masks). Then
- the smallest such mask consists of the rightmost planes-1 bits set, then
- a zero, then a one in position planes + 1. The formula is
- (3 << (planes-1)) -1
- The largest such masks consists of the leftmost planes-1 bits set, then
- a zero, then a one bit in position dplanes-planes-1. If dplanes is
- smaller than 32 (the number of bits in a word) then the formula is:
- (1<<dplanes) - (1<<(dplanes-planes+1) + (1<<dplanes-planes-1)
- If dplanes = 32, then we can't calculate (1<<dplanes) and we have
- to use:
- ( (1<<(planes-1)) - 1) << (dplanes-planes+1) + (1<<(dplanes-planes-1))
-
- << Thank you, Loretta>>>
-
- */
-
- finalmask =
- (((((Pixel)1)<<(planes-1)) - 1) << (dplanes-planes+1)) +
- (((Pixel)1)<<(dplanes-planes-1));
- for (mask = (((Pixel)3) << (planes -1)) - 1; mask <= finalmask; mask++)
- {
- /* next 3 magic statements count number of ones (HAKMEM #169) */
- pixel = (mask >> 1) & 033333333333;
- pixel = mask - pixel - ((pixel >> 1) & 033333333333);
- if ((((pixel + (pixel >> 3)) & 030707070707) % 077) != planes)
- continue;
- ppix = pixels;
- found = 0;
- entries = pmap->pVisual->ColormapEntries - mask;
- base = lowbit (mask);
- for (pixel = 0; pixel < entries; pixel++)
- {
- if (pixel & mask)
- continue;
- maxp = 0;
- /* check if all are free */
- while (ent[pixel + maxp].refcnt == 0)
- {
- GetNextBitsOrBreak(maxp, mask, base);
- }
- if ((maxp < mask) || (ent[pixel + mask].refcnt != 0))
- continue;
- /* this one works */
- *ppix++ = pixel;
- found++;
- if (found < count)
- continue;
- /* found enough, allocate them all */
- while (--count >= 0)
- {
- pixel = (pixels)[count];
- maxp = 0;
- while (1)
- {
- ent[pixel + maxp].refcnt = AllocPrivate;
- ent[pixel + maxp].fShared = FALSE;
- GetNextBitsOrBreak(maxp, mask, base);
- *ppix++ = pixel + maxp;
- }
- }
-
- *pMask = mask;
- return TRUE;
- }
- }
- return FALSE;
-}
-
-/**
- *
- * \param ppixFirst First of the client's new pixels
- */
-static Bool
-AllocShared (ColormapPtr pmap, Pixel *ppix, int c, int r, int g, int b,
- Pixel rmask, Pixel gmask, Pixel bmask, Pixel *ppixFirst)
-{
- Pixel *pptr, *cptr;
- int npix, z, npixClientNew, npixShared;
- Pixel basemask, base, bits, common;
- SHAREDCOLOR *pshared, **ppshared, **psharedList;
-
- npixClientNew = c << (r + g + b);
- npixShared = (c << r) + (c << g) + (c << b);
- psharedList = malloc(npixShared * sizeof(SHAREDCOLOR *));
- if (!psharedList)
- return FALSE;
- ppshared = psharedList;
- for (z = npixShared; --z >= 0; )
- {
- if (!(ppshared[z] = malloc(sizeof(SHAREDCOLOR))))
- {
- for (z++ ; z < npixShared; z++)
- free(ppshared[z]);
- return FALSE;
- }
- }
- for(pptr = ppix, npix = c; --npix >= 0; pptr++)
- {
- basemask = ~(gmask | bmask);
- common = *pptr & basemask;
- if (rmask)
- {
- bits = 0;
- base = lowbit (rmask);
- while(1)
- {
- pshared = *ppshared++;
- pshared->refcnt = 1 << (g + b);
- for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
- {
- if ((*cptr & basemask) == (common | bits))
- {
- pmap->red[*cptr].fShared = TRUE;
- pmap->red[*cptr].co.shco.red = pshared;
- }
- }
- GetNextBitsOrBreak(bits, rmask, base);
- }
- }
- else
- {
- pshared = *ppshared++;
- pshared->refcnt = 1 << (g + b);
- for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
- {
- if ((*cptr & basemask) == common)
- {
- pmap->red[*cptr].fShared = TRUE;
- pmap->red[*cptr].co.shco.red = pshared;
- }
- }
- }
- basemask = ~(rmask | bmask);
- common = *pptr & basemask;
- if (gmask)
- {
- bits = 0;
- base = lowbit (gmask);
- while(1)
- {
- pshared = *ppshared++;
- pshared->refcnt = 1 << (r + b);
- for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
- {
- if ((*cptr & basemask) == (common | bits))
- {
- pmap->red[*cptr].co.shco.green = pshared;
- }
- }
- GetNextBitsOrBreak(bits, gmask, base);
- }
- }
- else
- {
- pshared = *ppshared++;
- pshared->refcnt = 1 << (g + b);
- for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
- {
- if ((*cptr & basemask) == common)
- {
- pmap->red[*cptr].co.shco.green = pshared;
- }
- }
- }
- basemask = ~(rmask | gmask);
- common = *pptr & basemask;
- if (bmask)
- {
- bits = 0;
- base = lowbit (bmask);
- while(1)
- {
- pshared = *ppshared++;
- pshared->refcnt = 1 << (r + g);
- for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
- {
- if ((*cptr & basemask) == (common | bits))
- {
- pmap->red[*cptr].co.shco.blue = pshared;
- }
- }
- GetNextBitsOrBreak(bits, bmask, base);
- }
- }
- else
- {
- pshared = *ppshared++;
- pshared->refcnt = 1 << (g + b);
- for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
- {
- if ((*cptr & basemask) == common)
- {
- pmap->red[*cptr].co.shco.blue = pshared;
- }
- }
- }
- }
- free(psharedList);
- return TRUE;
-}
-
-
-/** FreeColors
- * Free colors and/or cells (probably slow for large numbers)
- */
-int
-FreeColors (ColormapPtr pmap, int client, int count, Pixel *pixels, Pixel mask)
-{
- int rval, result, class;
- Pixel rmask;
-
- class = pmap->class;
- if (pmap->flags & AllAllocated)
- return BadAccess;
- if ((class | DynamicClass) == DirectColor)
- {
- rmask = mask & RGBMASK(pmap->pVisual);
- result = FreeCo(pmap, client, REDMAP, count, pixels,
- mask & pmap->pVisual->redMask);
- /* If any of the three calls fails, we must report that, if more
- * than one fails, it's ok that we report the last one */
- rval = FreeCo(pmap, client, GREENMAP, count, pixels,
- mask & pmap->pVisual->greenMask);
- if(rval != Success)
- result = rval;
- rval = FreeCo(pmap, client, BLUEMAP, count, pixels,
- mask & pmap->pVisual->blueMask);
- if(rval != Success)
- result = rval;
- }
- else
- {
- rmask = mask & ((((Pixel)1) << pmap->pVisual->nplanes) - 1);
- result = FreeCo(pmap, client, PSEUDOMAP, count, pixels, rmask);
- }
- if ((mask != rmask) && count)
- {
- clients[client]->errorValue = *pixels | mask;
- result = BadValue;
- }
- /* XXX should worry about removing any RT_CMAPENTRY resource */
- return result;
-}
-
-/**
- * Helper for FreeColors -- frees all combinations of *newpixels and mask bits
- * which the client has allocated in channel colormap cells of pmap.
- * doesn't change newpixels if it doesn't need to
- *
- * \param pmap which colormap head
- * \param color which sub-map, eg, RED, BLUE, PSEUDO
- * \param npixIn number of pixels passed in
- * \param ppixIn number of base pixels
- * \param mask mask client gave us
- */
-static int
-FreeCo (ColormapPtr pmap, int client, int color, int npixIn, Pixel *ppixIn, Pixel mask)
-{
- Pixel *ppixClient, pixTest;
- int npixClient, npixNew, npix;
- Pixel bits, base, cmask, rgbbad;
- Pixel *pptr, *cptr;
- int n, zapped;
- int errVal = Success;
- int offset, numents;
-
- if (npixIn == 0)
- return errVal;
- bits = 0;
- zapped = 0;
- base = lowbit (mask);
-
- switch(color)
- {
- case REDMAP:
- cmask = pmap->pVisual->redMask;
- rgbbad = ~RGBMASK(pmap->pVisual);
- offset = pmap->pVisual->offsetRed;
- numents = (cmask >> offset) + 1;
- ppixClient = pmap->clientPixelsRed[client];
- npixClient = pmap->numPixelsRed[client];
- break;
- case GREENMAP:
- cmask = pmap->pVisual->greenMask;
- rgbbad = ~RGBMASK(pmap->pVisual);
- offset = pmap->pVisual->offsetGreen;
- numents = (cmask >> offset) + 1;
- ppixClient = pmap->clientPixelsGreen[client];
- npixClient = pmap->numPixelsGreen[client];
- break;
- case BLUEMAP:
- cmask = pmap->pVisual->blueMask;
- rgbbad = ~RGBMASK(pmap->pVisual);
- offset = pmap->pVisual->offsetBlue;
- numents = (cmask >> offset) + 1;
- ppixClient = pmap->clientPixelsBlue[client];
- npixClient = pmap->numPixelsBlue[client];
- break;
- default: /* so compiler can see that everything gets initialized */
- case PSEUDOMAP:
- cmask = ~((Pixel)0);
- rgbbad = 0;
- offset = 0;
- numents = pmap->pVisual->ColormapEntries;
- ppixClient = pmap->clientPixelsRed[client];
- npixClient = pmap->numPixelsRed[client];
- break;
- }
-
-
- /* zap all pixels which match */
- while (1)
- {
- /* go through pixel list */
- for (pptr = ppixIn, n = npixIn; --n >= 0; pptr++)
- {
- pixTest = ((*pptr | bits) & cmask) >> offset;
- if ((pixTest >= numents) || (*pptr & rgbbad))
- {
- clients[client]->errorValue = *pptr | bits;
- errVal = BadValue;
- continue;
- }
-
- /* find match in client list */
- for (cptr = ppixClient, npix = npixClient;
- --npix >= 0 && *cptr != pixTest;
- cptr++) ;
-
- if (npix >= 0)
- {
- if (pmap->class & DynamicClass)
- {
- FreeCell(pmap, pixTest, color);
- }
- *cptr = ~((Pixel)0);
- zapped++;
- }
- else
- errVal = BadAccess;
- }
- /* generate next bits value */
- GetNextBitsOrBreak(bits, mask, base);
- }
-
- /* delete freed pixels from client pixel list */
- if (zapped)
- {
- npixNew = npixClient - zapped;
- if (npixNew)
- {
- /* Since the list can only get smaller, we can do a copy in
- * place and then realloc to a smaller size */
- pptr = cptr = ppixClient;
-
- /* If we have all the new pixels, we don't have to examine the
- * rest of the old ones */
- for(npix = 0; npix < npixNew; cptr++)
- {
- if (*cptr != ~((Pixel)0))
- {
- *pptr++ = *cptr;
- npix++;
- }
- }
- pptr = (Pixel *)realloc(ppixClient, npixNew * sizeof(Pixel));
- if (pptr)
- ppixClient = pptr;
- npixClient = npixNew;
- }
- else
- {
- npixClient = 0;
- free(ppixClient);
- ppixClient = (Pixel *)NULL;
- }
- switch(color)
- {
- case PSEUDOMAP:
- case REDMAP:
- pmap->clientPixelsRed[client] = ppixClient;
- pmap->numPixelsRed[client] = npixClient;
- break;
- case GREENMAP:
- pmap->clientPixelsGreen[client] = ppixClient;
- pmap->numPixelsGreen[client] = npixClient;
- break;
- case BLUEMAP:
- pmap->clientPixelsBlue[client] = ppixClient;
- pmap->numPixelsBlue[client] = npixClient;
- break;
- }
- }
- return errVal;
-}
-
-
-
-/* Redefine color values */
-int
-StoreColors (ColormapPtr pmap, int count, xColorItem *defs, ClientPtr client)
-{
- Pixel pix;
- xColorItem *pdef;
- EntryPtr pent, pentT, pentLast;
- VisualPtr pVisual;
- SHAREDCOLOR *pred, *pgreen, *pblue;
- int n, ChgRed, ChgGreen, ChgBlue, idef;
- int class, errVal = Success;
- int ok;
-
-
- class = pmap->class;
- if(!(class & DynamicClass) && !(pmap->flags & BeingCreated))
- {
- return BadAccess;
- }
- pVisual = pmap->pVisual;
-
- idef = 0;
- if((class | DynamicClass) == DirectColor)
- {
- int numred, numgreen, numblue;
- Pixel rgbbad;
-
- numred = NUMRED(pVisual);
- numgreen = NUMGREEN(pVisual);
- numblue = NUMBLUE(pVisual);
- rgbbad = ~RGBMASK(pVisual);
- for (pdef = defs, n = 0; n < count; pdef++, n++)
- {
- ok = TRUE;
- (*pmap->pScreen->ResolveColor)
- (&pdef->red, &pdef->green, &pdef->blue, pmap->pVisual);
-
- if (pdef->pixel & rgbbad)
- {
- errVal = BadValue;
- client->errorValue = pdef->pixel;
- continue;
- }
- pix = (pdef->pixel & pVisual->redMask) >> pVisual->offsetRed;
- if (pix >= numred)
- {
- errVal = BadValue;
- ok = FALSE;
- }
- else if (pmap->red[pix].refcnt != AllocPrivate)
- {
- errVal = BadAccess;
- ok = FALSE;
- }
- else if (pdef->flags & DoRed)
- {
- pmap->red[pix].co.local.red = pdef->red;
- }
- else
- {
- pdef->red = pmap->red[pix].co.local.red;
- }
-
- pix = (pdef->pixel & pVisual->greenMask) >> pVisual->offsetGreen;
- if (pix >= numgreen)
- {
- errVal = BadValue;
- ok = FALSE;
- }
- else if (pmap->green[pix].refcnt != AllocPrivate)
- {
- errVal = BadAccess;
- ok = FALSE;
- }
- else if (pdef->flags & DoGreen)
- {
- pmap->green[pix].co.local.green = pdef->green;
- }
- else
- {
- pdef->green = pmap->green[pix].co.local.green;
- }
-
- pix = (pdef->pixel & pVisual->blueMask) >> pVisual->offsetBlue;
- if (pix >= numblue)
- {
- errVal = BadValue;
- ok = FALSE;
- }
- else if (pmap->blue[pix].refcnt != AllocPrivate)
- {
- errVal = BadAccess;
- ok = FALSE;
- }
- else if (pdef->flags & DoBlue)
- {
- pmap->blue[pix].co.local.blue = pdef->blue;
- }
- else
- {
- pdef->blue = pmap->blue[pix].co.local.blue;
- }
- /* If this is an o.k. entry, then it gets added to the list
- * to be sent to the hardware. If not, skip it. Once we've
- * skipped one, we have to copy all the others.
- */
- if(ok)
- {
- if(idef != n)
- defs[idef] = defs[n];
- idef++;
- } else
- client->errorValue = pdef->pixel;
- }
- }
- else
- {
- for (pdef = defs, n = 0; n < count; pdef++, n++)
- {
-
- ok = TRUE;
- if (pdef->pixel >= pVisual->ColormapEntries)
- {
- client->errorValue = pdef->pixel;
- errVal = BadValue;
- ok = FALSE;
- }
- else if (pmap->red[pdef->pixel].refcnt != AllocPrivate)
- {
- errVal = BadAccess;
- ok = FALSE;
- }
-
- /* If this is an o.k. entry, then it gets added to the list
- * to be sent to the hardware. If not, skip it. Once we've
- * skipped one, we have to copy all the others.
- */
- if(ok)
- {
- if(idef != n)
- defs[idef] = defs[n];
- idef++;
- }
- else
- continue;
-
- (*pmap->pScreen->ResolveColor)
- (&pdef->red, &pdef->green, &pdef->blue, pmap->pVisual);
-
- pent = &pmap->red[pdef->pixel];
-
- if(pdef->flags & DoRed)
- {
- if(pent->fShared)
- {
- pent->co.shco.red->color = pdef->red;
- if (pent->co.shco.red->refcnt > 1)
- ok = FALSE;
- }
- else
- pent->co.local.red = pdef->red;
- }
- else
- {
- if(pent->fShared)
- pdef->red = pent->co.shco.red->color;
- else
- pdef->red = pent->co.local.red;
- }
- if(pdef->flags & DoGreen)
- {
- if(pent->fShared)
- {
- pent->co.shco.green->color = pdef->green;
- if (pent->co.shco.green->refcnt > 1)
- ok = FALSE;
- }
- else
- pent->co.local.green = pdef->green;
- }
- else
- {
- if(pent->fShared)
- pdef->green = pent->co.shco.green->color;
- else
- pdef->green = pent->co.local.green;
- }
- if(pdef->flags & DoBlue)
- {
- if(pent->fShared)
- {
- pent->co.shco.blue->color = pdef->blue;
- if (pent->co.shco.blue->refcnt > 1)
- ok = FALSE;
- }
- else
- pent->co.local.blue = pdef->blue;
- }
- else
- {
- if(pent->fShared)
- pdef->blue = pent->co.shco.blue->color;
- else
- pdef->blue = pent->co.local.blue;
- }
-
- if(!ok)
- {
- /* have to run through the colormap and change anybody who
- * shares this value */
- pred = pent->co.shco.red;
- pgreen = pent->co.shco.green;
- pblue = pent->co.shco.blue;
- ChgRed = pdef->flags & DoRed;
- ChgGreen = pdef->flags & DoGreen;
- ChgBlue = pdef->flags & DoBlue;
- pentLast = pmap->red + pVisual->ColormapEntries;
-
- for(pentT = pmap->red; pentT < pentLast; pentT++)
- {
- if(pentT->fShared && (pentT != pent))
- {
- xColorItem defChg;
-
- /* There are, alas, devices in this world too dumb
- * to read their own hardware colormaps. Sick, but
- * true. So we're going to be really nice and load
- * the xColorItem with the proper value for all the
- * fields. We will only set the flags for those
- * fields that actually change. Smart devices can
- * arrange to change only those fields. Dumb devices
- * can rest assured that we have provided for them,
- * and can change all three fields */
-
- defChg.flags = 0;
- if(ChgRed && pentT->co.shco.red == pred)
- {
- defChg.flags |= DoRed;
- }
- if(ChgGreen && pentT->co.shco.green == pgreen)
- {
- defChg.flags |= DoGreen;
- }
- if(ChgBlue && pentT->co.shco.blue == pblue)
- {
- defChg.flags |= DoBlue;
- }
- if(defChg.flags != 0)
- {
- defChg.pixel = pentT - pmap->red;
- defChg.red = pentT->co.shco.red->color;
- defChg.green = pentT->co.shco.green->color;
- defChg.blue = pentT->co.shco.blue->color;
- (*pmap->pScreen->StoreColors) (pmap, 1, &defChg);
- }
- }
- }
-
- }
- }
- }
- /* Note that we use idef, the count of acceptable entries, and not
- * count, the count of proposed entries */
- if (idef != 0)
- ( *pmap->pScreen->StoreColors) (pmap, idef, defs);
- return errVal;
-}
-
-int
-IsMapInstalled(Colormap map, WindowPtr pWin)
-{
- Colormap *pmaps;
- int imap, nummaps, found;
-
- pmaps = malloc(pWin->drawable.pScreen->maxInstalledCmaps*sizeof(Colormap));
- if(!pmaps)
- return FALSE;
- nummaps = (*pWin->drawable.pScreen->ListInstalledColormaps)
- (pWin->drawable.pScreen, pmaps);
- found = FALSE;
- for(imap = 0; imap < nummaps; imap++)
- {
- if(pmaps[imap] == map)
- {
- found = TRUE;
- break;
- }
- }
- free(pmaps);
- return found;
-}
-
-struct colormap_lookup_data {
- ScreenPtr pScreen;
- VisualPtr visuals;
-};
-
-static void _colormap_find_resource(pointer value, XID id,
- pointer cdata)
-{
- struct colormap_lookup_data *cmap_data = cdata;
- VisualPtr visuals = cmap_data->visuals;
- ScreenPtr pScreen = cmap_data->pScreen;
- ColormapPtr cmap = value;
- int j;
-
- if (pScreen != cmap->pScreen)
- return;
-
- j = cmap->pVisual - pScreen->visuals;
- cmap->pVisual = &visuals[j];
-}
-
-/* something has realloced the visuals, instead of breaking
- ABI fix it up here - glx and compsite did this wrong */
-Bool
-ResizeVisualArray(ScreenPtr pScreen, int new_visual_count,
- DepthPtr depth)
-{
- struct colormap_lookup_data cdata;
- int numVisuals;
- VisualPtr visuals;
- XID *vids, vid;
- int first_new_vid, first_new_visual, i;
-
- first_new_vid = depth->numVids;
- first_new_visual = pScreen->numVisuals;
-
- vids = realloc(depth->vids, (depth->numVids + new_visual_count) * sizeof(XID));
- if (!vids)
- return FALSE;
-
- /* its realloced now no going back if we fail the next one */
- depth->vids = vids;
-
- numVisuals = pScreen->numVisuals + new_visual_count;
- visuals = realloc(pScreen->visuals, numVisuals * sizeof(VisualRec));
- if (!visuals) {
- return FALSE;
- }
-
- cdata.visuals = visuals;
- cdata.pScreen = pScreen;
- FindClientResourcesByType(serverClient, RT_COLORMAP, _colormap_find_resource, &cdata);
-
- pScreen->visuals = visuals;
-
- for (i = 0; i < new_visual_count; i++) {
- vid = FakeClientID(0);
- pScreen->visuals[first_new_visual + i].vid = vid;
- vids[first_new_vid + i] = vid;
- }
-
- depth->numVids += new_visual_count;
- pScreen->numVisuals += new_visual_count;
-
- return TRUE;
-}
+/***********************************************************
+
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include <stdio.h>
+#include <string.h>
+#include <strings.h>
+#include "misc.h"
+#include "dix.h"
+#include "dixstruct.h"
+#include "colormapst.h"
+#include "os.h"
+#include "scrnintstr.h"
+#include "resource.h"
+#include "windowstr.h"
+#include "privates.h"
+#include "xace.h"
+
+static Pixel FindBestPixel(
+ EntryPtr /*pentFirst*/,
+ int /*size*/,
+ xrgb * /*prgb*/,
+ int /*channel*/
+);
+
+static int AllComp(
+ EntryPtr /*pent*/,
+ xrgb * /*prgb*/
+);
+
+static int RedComp(
+ EntryPtr /*pent*/,
+ xrgb * /*prgb*/
+);
+
+static int GreenComp(
+ EntryPtr /*pent*/,
+ xrgb * /*prgb*/
+);
+
+static int BlueComp(
+ EntryPtr /*pent*/,
+ xrgb * /*prgb*/
+);
+
+static void FreePixels(
+ ColormapPtr /*pmap*/,
+ int /*client*/
+);
+
+static void CopyFree(
+ int /*channel*/,
+ int /*client*/,
+ ColormapPtr /*pmapSrc*/,
+ ColormapPtr /*pmapDst*/
+);
+
+static void FreeCell(
+ ColormapPtr /*pmap*/,
+ Pixel /*i*/,
+ int /*channel*/
+);
+
+static void UpdateColors(
+ ColormapPtr /*pmap*/
+);
+
+static int AllocDirect(
+ int /*client*/,
+ ColormapPtr /*pmap*/,
+ int /*c*/,
+ int /*r*/,
+ int /*g*/,
+ int /*b*/,
+ Bool /*contig*/,
+ Pixel * /*pixels*/,
+ Pixel * /*prmask*/,
+ Pixel * /*pgmask*/,
+ Pixel * /*pbmask*/
+);
+
+static int AllocPseudo(
+ int /*client*/,
+ ColormapPtr /*pmap*/,
+ int /*c*/,
+ int /*r*/,
+ Bool /*contig*/,
+ Pixel * /*pixels*/,
+ Pixel * /*pmask*/,
+ Pixel ** /*pppixFirst*/
+);
+
+static Bool AllocCP(
+ ColormapPtr /*pmap*/,
+ EntryPtr /*pentFirst*/,
+ int /*count*/,
+ int /*planes*/,
+ Bool /*contig*/,
+ Pixel * /*pixels*/,
+ Pixel * /*pMask*/
+);
+
+static Bool AllocShared(
+ ColormapPtr /*pmap*/,
+ Pixel * /*ppix*/,
+ int /*c*/,
+ int /*r*/,
+ int /*g*/,
+ int /*b*/,
+ Pixel /*rmask*/,
+ Pixel /*gmask*/,
+ Pixel /*bmask*/,
+ Pixel * /*ppixFirst*/
+);
+
+static int FreeCo(
+ ColormapPtr /*pmap*/,
+ int /*client*/,
+ int /*color*/,
+ int /*npixIn*/,
+ Pixel * /*ppixIn*/,
+ Pixel /*mask*/
+);
+
+static int TellNoMap(
+ WindowPtr /*pwin*/,
+ Colormap * /*pmid*/
+);
+
+static void FindColorInRootCmap (
+ ColormapPtr /* pmap */,
+ EntryPtr /* pentFirst */,
+ int /* size */,
+ xrgb* /* prgb */,
+ Pixel* /* pPixel */,
+ int /* channel */,
+ ColorCompareProcPtr /* comp */
+);
+
+#define NUMRED(vis) ((vis->redMask >> vis->offsetRed) + 1)
+#define NUMGREEN(vis) ((vis->greenMask >> vis->offsetGreen) + 1)
+#define NUMBLUE(vis) ((vis->blueMask >> vis->offsetBlue) + 1)
+#if COMPOSITE
+#define ALPHAMASK(vis) ((vis)->nplanes < 32 ? 0 : \
+ (CARD32) ~((vis)->redMask|(vis)->greenMask|(vis)->blueMask))
+#else
+#define ALPHAMASK(vis) 0
+#endif
+
+#define RGBMASK(vis) (vis->redMask | vis->greenMask | vis->blueMask | ALPHAMASK(vis))
+
+/* GetNextBitsOrBreak(bits, mask, base) --
+ * (Suggestion: First read the macro, then read this explanation.
+ *
+ * Either generate the next value to OR in to a pixel or break out of this
+ * while loop
+ *
+ * This macro is used when we're trying to generate all 2^n combinations of
+ * bits in mask. What we're doing here is counting in binary, except that
+ * the bits we use to count may not be contiguous. This macro will be
+ * called 2^n times, returning a different value in bits each time. Then
+ * it will cause us to break out of a surrounding loop. (It will always be
+ * called from within a while loop.)
+ * On call: mask is the value we want to find all the combinations for
+ * base has 1 bit set where the least significant bit of mask is set
+ *
+ * For example,if mask is 01010, base should be 0010 and we count like this:
+ * 00010 (see this isn't so hard),
+ * then we add base to bits and get 0100. (bits & ~mask) is (0100 & 0100) so
+ * we add that to bits getting (0100 + 0100) =
+ * 01000 for our next value.
+ * then we add 0010 to get
+ * 01010 and we're done (easy as 1, 2, 3)
+ */
+#define GetNextBitsOrBreak(bits, mask, base) \
+ if((bits) == (mask)) \
+ break; \
+ (bits) += (base); \
+ while((bits) & ~(mask)) \
+ (bits) += ((bits) & ~(mask));
+/* ID of server as client */
+#define SERVER_ID 0
+
+typedef struct _colorResource
+{
+ Colormap mid;
+ int client;
+} colorResource;
+
+/* Invariants:
+ * refcnt == 0 means entry is empty
+ * refcnt > 0 means entry is useable by many clients, so it can't be changed
+ * refcnt == AllocPrivate means entry owned by one client only
+ * fShared should only be set if refcnt == AllocPrivate, and only in red map
+ */
+
+
+/**
+ * Create and initialize the color map
+ *
+ * \param mid resource to use for this colormap
+ * \param alloc 1 iff all entries are allocated writable
+ */
+int
+CreateColormap (Colormap mid, ScreenPtr pScreen, VisualPtr pVisual,
+ ColormapPtr *ppcmap, int alloc, int client)
+{
+ int class, size;
+ unsigned long sizebytes;
+ ColormapPtr pmap;
+ EntryPtr pent;
+ int i;
+ Pixel *ppix, **pptr;
+
+ class = pVisual->class;
+ if(!(class & DynamicClass) && (alloc != AllocNone) && (client != SERVER_ID))
+ return BadMatch;
+
+ size = pVisual->ColormapEntries;
+ sizebytes = (size * sizeof(Entry)) +
+ (MAXCLIENTS * sizeof(Pixel *)) +
+ (MAXCLIENTS * sizeof(int));
+ if ((class | DynamicClass) == DirectColor)
+ sizebytes *= 3;
+ sizebytes += sizeof(ColormapRec);
+ if (mid == pScreen->defColormap) {
+ pmap = malloc(sizebytes);
+ if (!pmap)
+ return BadAlloc;
+ if (!dixAllocatePrivates(&pmap->devPrivates, PRIVATE_COLORMAP)) {
+ free (pmap);
+ return BadAlloc;
+ }
+ } else {
+ pmap = _dixAllocateObjectWithPrivates(sizebytes, sizebytes,
+ offsetof(ColormapRec, devPrivates), PRIVATE_COLORMAP);
+ if (!pmap)
+ return BadAlloc;
+ }
+#if defined(_XSERVER64)
+ pmap->pad0 = 0;
+ pmap->pad1 = 0;
+#if (X_BYTE_ORDER == X_LITTLE_ENDIAN)
+ pmap->pad2 = 0;
+#endif
+#endif
+ pmap->red = (EntryPtr)((char *)pmap + sizeof(ColormapRec));
+ sizebytes = size * sizeof(Entry);
+ pmap->clientPixelsRed = (Pixel **)((char *)pmap->red + sizebytes);
+ pmap->numPixelsRed = (int *)((char *)pmap->clientPixelsRed +
+ (MAXCLIENTS * sizeof(Pixel *)));
+ pmap->mid = mid;
+ pmap->flags = 0; /* start out with all flags clear */
+ if(mid == pScreen->defColormap)
+ pmap->flags |= IsDefault;
+ pmap->pScreen = pScreen;
+ pmap->pVisual = pVisual;
+ pmap->class = class;
+ if ((class | DynamicClass) == DirectColor)
+ size = NUMRED(pVisual);
+ pmap->freeRed = size;
+ memset((char *) pmap->red, 0, (int)sizebytes);
+ memset((char *) pmap->numPixelsRed, 0, MAXCLIENTS * sizeof(int));
+ for (pptr = &pmap->clientPixelsRed[MAXCLIENTS]; --pptr >= pmap->clientPixelsRed; )
+ *pptr = (Pixel *)NULL;
+ if (alloc == AllocAll)
+ {
+ if (class & DynamicClass)
+ pmap->flags |= AllAllocated;
+ for (pent = &pmap->red[size - 1]; pent >= pmap->red; pent--)
+ pent->refcnt = AllocPrivate;
+ pmap->freeRed = 0;
+ ppix = malloc(size * sizeof(Pixel));
+ if (!ppix)
+ {
+ free(pmap);
+ return BadAlloc;
+ }
+ pmap->clientPixelsRed[client] = ppix;
+ for(i = 0; i < size; i++)
+ ppix[i] = i;
+ pmap->numPixelsRed[client] = size;
+ }
+
+ if ((class | DynamicClass) == DirectColor)
+ {
+ pmap->freeGreen = NUMGREEN(pVisual);
+ pmap->green = (EntryPtr)((char *)pmap->numPixelsRed +
+ (MAXCLIENTS * sizeof(int)));
+ pmap->clientPixelsGreen = (Pixel **)((char *)pmap->green + sizebytes);
+ pmap->numPixelsGreen = (int *)((char *)pmap->clientPixelsGreen +
+ (MAXCLIENTS * sizeof(Pixel *)));
+ pmap->freeBlue = NUMBLUE(pVisual);
+ pmap->blue = (EntryPtr)((char *)pmap->numPixelsGreen +
+ (MAXCLIENTS * sizeof(int)));
+ pmap->clientPixelsBlue = (Pixel **)((char *)pmap->blue + sizebytes);
+ pmap->numPixelsBlue = (int *)((char *)pmap->clientPixelsBlue +
+ (MAXCLIENTS * sizeof(Pixel *)));
+
+ memset((char *) pmap->green, 0, (int)sizebytes);
+ memset((char *) pmap->blue, 0, (int)sizebytes);
+
+ memmove((char *) pmap->clientPixelsGreen,
+ (char *) pmap->clientPixelsRed,
+ MAXCLIENTS * sizeof(Pixel *));
+ memmove((char *) pmap->clientPixelsBlue,
+ (char *) pmap->clientPixelsRed,
+ MAXCLIENTS * sizeof(Pixel *));
+ memset((char *) pmap->numPixelsGreen, 0, MAXCLIENTS * sizeof(int));
+ memset((char *) pmap->numPixelsBlue, 0, MAXCLIENTS * sizeof(int));
+
+ /* If every cell is allocated, mark its refcnt */
+ if (alloc == AllocAll)
+ {
+ size = pmap->freeGreen;
+ for(pent = &pmap->green[size-1]; pent >= pmap->green; pent--)
+ pent->refcnt = AllocPrivate;
+ pmap->freeGreen = 0;
+ ppix = malloc(size * sizeof(Pixel));
+ if (!ppix)
+ {
+ free(pmap->clientPixelsRed[client]);
+ free(pmap);
+ return BadAlloc;
+ }
+ pmap->clientPixelsGreen[client] = ppix;
+ for(i = 0; i < size; i++)
+ ppix[i] = i;
+ pmap->numPixelsGreen[client] = size;
+
+ size = pmap->freeBlue;
+ for(pent = &pmap->blue[size-1]; pent >= pmap->blue; pent--)
+ pent->refcnt = AllocPrivate;
+ pmap->freeBlue = 0;
+ ppix = malloc(size * sizeof(Pixel));
+ if (!ppix)
+ {
+ free(pmap->clientPixelsGreen[client]);
+ free(pmap->clientPixelsRed[client]);
+ free(pmap);
+ return BadAlloc;
+ }
+ pmap->clientPixelsBlue[client] = ppix;
+ for(i = 0; i < size; i++)
+ ppix[i] = i;
+ pmap->numPixelsBlue[client] = size;
+ }
+ }
+ pmap->flags |= BeingCreated;
+
+ if (!AddResource(mid, RT_COLORMAP, (pointer)pmap))
+ return BadAlloc;
+
+ /*
+ * Security creation/labeling check
+ */
+ i = XaceHook(XACE_RESOURCE_ACCESS, clients[client], mid, RT_COLORMAP,
+ pmap, RT_NONE, NULL, DixCreateAccess);
+ if (i != Success) {
+ FreeResource(mid, RT_NONE);
+ return i;
+ }
+
+ /* If the device wants a chance to initialize the colormap in any way,
+ * this is it. In specific, if this is a Static colormap, this is the
+ * time to fill in the colormap's values */
+ if (!(*pScreen->CreateColormap)(pmap))
+ {
+ FreeResource (mid, RT_NONE);
+ return BadAlloc;
+ }
+ pmap->flags &= ~BeingCreated;
+ *ppcmap = pmap;
+ return Success;
+}
+
+/**
+ *
+ * \param value must conform to DeleteType
+ */
+int
+FreeColormap (pointer value, XID mid)
+{
+ int i;
+ EntryPtr pent;
+ ColormapPtr pmap = (ColormapPtr)value;
+
+ if(CLIENT_ID(mid) != SERVER_ID)
+ {
+ (*pmap->pScreen->UninstallColormap) (pmap);
+ WalkTree(pmap->pScreen, (VisitWindowProcPtr)TellNoMap, (pointer) &mid);
+ }
+
+ /* This is the device's chance to undo anything it needs to, especially
+ * to free any storage it allocated */
+ (*pmap->pScreen->DestroyColormap)(pmap);
+
+ if(pmap->clientPixelsRed)
+ {
+ for(i = 0; i < MAXCLIENTS; i++)
+ free(pmap->clientPixelsRed[i]);
+ }
+
+ if ((pmap->class == PseudoColor) || (pmap->class == GrayScale))
+ {
+ for(pent = &pmap->red[pmap->pVisual->ColormapEntries - 1];
+ pent >= pmap->red;
+ pent--)
+ {
+ if(pent->fShared)
+ {
+ if (--pent->co.shco.red->refcnt == 0)
+ free(pent->co.shco.red);
+ if (--pent->co.shco.green->refcnt == 0)
+ free(pent->co.shco.green);
+ if (--pent->co.shco.blue->refcnt == 0)
+ free(pent->co.shco.blue);
+ }
+ }
+ }
+ if((pmap->class | DynamicClass) == DirectColor)
+ {
+ for(i = 0; i < MAXCLIENTS; i++)
+ {
+ free(pmap->clientPixelsGreen[i]);
+ free(pmap->clientPixelsBlue[i]);
+ }
+ }
+
+ if (pmap->flags & IsDefault) {
+ dixFreePrivates(pmap->devPrivates, PRIVATE_COLORMAP);
+ free(pmap);
+ } else
+ dixFreeObjectWithPrivates(pmap, PRIVATE_COLORMAP);
+ return Success;
+}
+
+/* Tell window that pmid has disappeared */
+static int
+TellNoMap (WindowPtr pwin, Colormap *pmid)
+{
+ xEvent xE;
+
+ if (wColormap(pwin) == *pmid)
+ {
+ /* This should be call to DeliverEvent */
+ xE.u.u.type = ColormapNotify;
+ xE.u.colormap.window = pwin->drawable.id;
+ xE.u.colormap.colormap = None;
+ xE.u.colormap.new = TRUE;
+ xE.u.colormap.state = ColormapUninstalled;
+#ifdef PANORAMIX
+ if(noPanoramiXExtension || !pwin->drawable.pScreen->myNum)
+#endif
+ DeliverEvents(pwin, &xE, 1, (WindowPtr)NULL);
+ if (pwin->optional) {
+ pwin->optional->colormap = None;
+ CheckWindowOptionalNeed (pwin);
+ }
+ }
+
+ return WT_WALKCHILDREN;
+}
+
+/* Tell window that pmid got uninstalled */
+int
+TellLostMap (WindowPtr pwin, pointer value)
+{
+ Colormap *pmid = (Colormap *)value;
+ xEvent xE;
+
+#ifdef PANORAMIX
+ if(!noPanoramiXExtension && pwin->drawable.pScreen->myNum)
+ return WT_STOPWALKING;
+#endif
+ if (wColormap(pwin) == *pmid)
+ {
+ /* This should be call to DeliverEvent */
+ xE.u.u.type = ColormapNotify;
+ xE.u.colormap.window = pwin->drawable.id;
+ xE.u.colormap.colormap = *pmid;
+ xE.u.colormap.new = FALSE;
+ xE.u.colormap.state = ColormapUninstalled;
+ DeliverEvents(pwin, &xE, 1, (WindowPtr)NULL);
+ }
+
+ return WT_WALKCHILDREN;
+}
+
+/* Tell window that pmid got installed */
+int
+TellGainedMap (WindowPtr pwin, pointer value)
+{
+ Colormap *pmid = (Colormap *)value;
+ xEvent xE;
+
+#ifdef PANORAMIX
+ if(!noPanoramiXExtension && pwin->drawable.pScreen->myNum)
+ return WT_STOPWALKING;
+#endif
+ if (wColormap (pwin) == *pmid)
+ {
+ /* This should be call to DeliverEvent */
+ xE.u.u.type = ColormapNotify;
+ xE.u.colormap.window = pwin->drawable.id;
+ xE.u.colormap.colormap = *pmid;
+ xE.u.colormap.new = FALSE;
+ xE.u.colormap.state = ColormapInstalled;
+ DeliverEvents(pwin, &xE, 1, (WindowPtr)NULL);
+ }
+
+ return WT_WALKCHILDREN;
+}
+
+
+int
+CopyColormapAndFree (Colormap mid, ColormapPtr pSrc, int client)
+{
+ ColormapPtr pmap = (ColormapPtr) NULL;
+ int result, alloc, size;
+ Colormap midSrc;
+ ScreenPtr pScreen;
+ VisualPtr pVisual;
+
+ pScreen = pSrc->pScreen;
+ pVisual = pSrc->pVisual;
+ midSrc = pSrc->mid;
+ alloc = ((pSrc->flags & AllAllocated) && CLIENT_ID(midSrc) == client) ?
+ AllocAll : AllocNone;
+ size = pVisual->ColormapEntries;
+
+ /* If the create returns non-0, it failed */
+ result = CreateColormap (mid, pScreen, pVisual, &pmap, alloc, client);
+ if(result != Success)
+ return result;
+ if(alloc == AllocAll)
+ {
+ memmove((char *)pmap->red, (char *)pSrc->red, size * sizeof(Entry));
+ if((pmap->class | DynamicClass) == DirectColor)
+ {
+ memmove((char *)pmap->green, (char *)pSrc->green, size * sizeof(Entry));
+ memmove((char *)pmap->blue, (char *)pSrc->blue, size * sizeof(Entry));
+ }
+ pSrc->flags &= ~AllAllocated;
+ FreePixels(pSrc, client);
+ UpdateColors(pmap);
+ return Success;
+ }
+
+ CopyFree(REDMAP, client, pSrc, pmap);
+ if ((pmap->class | DynamicClass) == DirectColor)
+ {
+ CopyFree(GREENMAP, client, pSrc, pmap);
+ CopyFree(BLUEMAP, client, pSrc, pmap);
+ }
+ if (pmap->class & DynamicClass)
+ UpdateColors(pmap);
+ /* XXX should worry about removing any RT_CMAPENTRY resource */
+ return Success;
+}
+
+/* Helper routine for freeing large numbers of cells from a map */
+static void
+CopyFree (int channel, int client, ColormapPtr pmapSrc, ColormapPtr pmapDst)
+{
+ int z, npix;
+ EntryPtr pentSrcFirst, pentDstFirst;
+ EntryPtr pentSrc, pentDst;
+ Pixel *ppix;
+ int nalloc;
+
+ switch(channel)
+ {
+ default: /* so compiler can see that everything gets initialized */
+ case REDMAP:
+ ppix = (pmapSrc->clientPixelsRed)[client];
+ npix = (pmapSrc->numPixelsRed)[client];
+ pentSrcFirst = pmapSrc->red;
+ pentDstFirst = pmapDst->red;
+ break;
+ case GREENMAP:
+ ppix = (pmapSrc->clientPixelsGreen)[client];
+ npix = (pmapSrc->numPixelsGreen)[client];
+ pentSrcFirst = pmapSrc->green;
+ pentDstFirst = pmapDst->green;
+ break;
+ case BLUEMAP:
+ ppix = (pmapSrc->clientPixelsBlue)[client];
+ npix = (pmapSrc->numPixelsBlue)[client];
+ pentSrcFirst = pmapSrc->blue;
+ pentDstFirst = pmapDst->blue;
+ break;
+ }
+ nalloc = 0;
+ if (pmapSrc->class & DynamicClass)
+ {
+ for(z = npix; --z >= 0; ppix++)
+ {
+ /* Copy entries */
+ pentSrc = pentSrcFirst + *ppix;
+ pentDst = pentDstFirst + *ppix;
+ if (pentDst->refcnt > 0)
+ {
+ pentDst->refcnt++;
+ }
+ else
+ {
+ *pentDst = *pentSrc;
+ nalloc++;
+ if (pentSrc->refcnt > 0)
+ pentDst->refcnt = 1;
+ else
+ pentSrc->fShared = FALSE;
+ }
+ FreeCell(pmapSrc, *ppix, channel);
+ }
+ }
+
+ /* Note that FreeCell has already fixed pmapSrc->free{Color} */
+ switch(channel)
+ {
+ case REDMAP:
+ pmapDst->freeRed -= nalloc;
+ (pmapDst->clientPixelsRed)[client] =
+ (pmapSrc->clientPixelsRed)[client];
+ (pmapSrc->clientPixelsRed)[client] = (Pixel *) NULL;
+ (pmapDst->numPixelsRed)[client] = (pmapSrc->numPixelsRed)[client];
+ (pmapSrc->numPixelsRed)[client] = 0;
+ break;
+ case GREENMAP:
+ pmapDst->freeGreen -= nalloc;
+ (pmapDst->clientPixelsGreen)[client] =
+ (pmapSrc->clientPixelsGreen)[client];
+ (pmapSrc->clientPixelsGreen)[client] = (Pixel *) NULL;
+ (pmapDst->numPixelsGreen)[client] = (pmapSrc->numPixelsGreen)[client];
+ (pmapSrc->numPixelsGreen)[client] = 0;
+ break;
+ case BLUEMAP:
+ pmapDst->freeBlue -= nalloc;
+ pmapDst->clientPixelsBlue[client] = pmapSrc->clientPixelsBlue[client];
+ pmapSrc->clientPixelsBlue[client] = (Pixel *) NULL;
+ pmapDst->numPixelsBlue[client] = pmapSrc->numPixelsBlue[client];
+ pmapSrc->numPixelsBlue[client] = 0;
+ break;
+ }
+}
+
+/* Free the ith entry in a color map. Must handle freeing of
+ * colors allocated through AllocColorPlanes */
+static void
+FreeCell (ColormapPtr pmap, Pixel i, int channel)
+{
+ EntryPtr pent;
+ int *pCount;
+
+
+ switch (channel)
+ {
+ default: /* so compiler can see that everything gets initialized */
+ case PSEUDOMAP:
+ case REDMAP:
+ pent = (EntryPtr) &pmap->red[i];
+ pCount = &pmap->freeRed;
+ break;
+ case GREENMAP:
+ pent = (EntryPtr) &pmap->green[i];
+ pCount = &pmap->freeGreen;
+ break;
+ case BLUEMAP:
+ pent = (EntryPtr) &pmap->blue[i];
+ pCount = &pmap->freeBlue;
+ break;
+ }
+ /* If it's not privately allocated and it's not time to free it, just
+ * decrement the count */
+ if (pent->refcnt > 1)
+ pent->refcnt--;
+ else
+ {
+ /* If the color type is shared, find the sharedcolor. If decremented
+ * refcnt is 0, free the shared cell. */
+ if (pent->fShared)
+ {
+ if(--pent->co.shco.red->refcnt == 0)
+ free(pent->co.shco.red);
+ if(--pent->co.shco.green->refcnt == 0)
+ free(pent->co.shco.green);
+ if(--pent->co.shco.blue->refcnt == 0)
+ free(pent->co.shco.blue);
+ pent->fShared = FALSE;
+ }
+ pent->refcnt = 0;
+ *pCount += 1;
+ }
+}
+
+static void
+UpdateColors (ColormapPtr pmap)
+{
+ xColorItem *defs;
+ xColorItem *pdef;
+ EntryPtr pent;
+ VisualPtr pVisual;
+ int i, n, size;
+
+ pVisual = pmap->pVisual;
+ size = pVisual->ColormapEntries;
+ defs = malloc(size * sizeof(xColorItem));
+ if (!defs)
+ return;
+ n = 0;
+ pdef = defs;
+ if (pmap->class == DirectColor)
+ {
+ for (i = 0; i < size; i++)
+ {
+ if (!pmap->red[i].refcnt &&
+ !pmap->green[i].refcnt &&
+ !pmap->blue[i].refcnt)
+ continue;
+ pdef->pixel = ((Pixel)i << pVisual->offsetRed) |
+ ((Pixel)i << pVisual->offsetGreen) |
+ ((Pixel)i << pVisual->offsetBlue);
+ pdef->red = pmap->red[i].co.local.red;
+ pdef->green = pmap->green[i].co.local.green;
+ pdef->blue = pmap->blue[i].co.local.blue;
+ pdef->flags = DoRed|DoGreen|DoBlue;
+ pdef++;
+ n++;
+ }
+ }
+ else
+ {
+ for (i = 0, pent = pmap->red; i < size; i++, pent++)
+ {
+ if (!pent->refcnt)
+ continue;
+ pdef->pixel = i;
+ if(pent->fShared)
+ {
+ pdef->red = pent->co.shco.red->color;
+ pdef->green = pent->co.shco.green->color;
+ pdef->blue = pent->co.shco.blue->color;
+ }
+ else
+ {
+ pdef->red = pent->co.local.red;
+ pdef->green = pent->co.local.green;
+ pdef->blue = pent->co.local.blue;
+ }
+ pdef->flags = DoRed|DoGreen|DoBlue;
+ pdef++;
+ n++;
+ }
+ }
+ if (n)
+ (*pmap->pScreen->StoreColors)(pmap, n, defs);
+ free(defs);
+}
+
+/* Get a read-only color from a ColorMap (probably slow for large maps)
+ * Returns by changing the value in pred, pgreen, pblue and pPix
+ */
+int
+AllocColor (ColormapPtr pmap,
+ unsigned short *pred, unsigned short *pgreen, unsigned short *pblue,
+ Pixel *pPix, int client)
+{
+ Pixel pixR, pixG, pixB;
+ int entries;
+ xrgb rgb;
+ int class;
+ VisualPtr pVisual;
+ int npix;
+ Pixel *ppix;
+
+ pVisual = pmap->pVisual;
+ (*pmap->pScreen->ResolveColor) (pred, pgreen, pblue, pVisual);
+ rgb.red = *pred;
+ rgb.green = *pgreen;
+ rgb.blue = *pblue;
+ class = pmap->class;
+ entries = pVisual->ColormapEntries;
+
+ /* If the colormap is being created, then we want to be able to change
+ * the colormap, even if it's a static type. Otherwise, we'd never be
+ * able to initialize static colormaps
+ */
+ if(pmap->flags & BeingCreated)
+ class |= DynamicClass;
+
+ /* If this is one of the static storage classes, and we're not initializing
+ * it, the best we can do is to find the closest color entry to the
+ * requested one and return that.
+ */
+ switch (class) {
+ case StaticColor:
+ case StaticGray:
+ /* Look up all three components in the same pmap */
+ *pPix = pixR = FindBestPixel(pmap->red, entries, &rgb, PSEUDOMAP);
+ *pred = pmap->red[pixR].co.local.red;
+ *pgreen = pmap->red[pixR].co.local.green;
+ *pblue = pmap->red[pixR].co.local.blue;
+ npix = pmap->numPixelsRed[client];
+ ppix = (Pixel *) realloc(pmap->clientPixelsRed[client],
+ (npix + 1) * sizeof(Pixel));
+ if (!ppix)
+ return BadAlloc;
+ ppix[npix] = pixR;
+ pmap->clientPixelsRed[client] = ppix;
+ pmap->numPixelsRed[client]++;
+ break;
+
+ case TrueColor:
+ /* Look up each component in its own map, then OR them together */
+ pixR = FindBestPixel(pmap->red, NUMRED(pVisual), &rgb, REDMAP);
+ pixG = FindBestPixel(pmap->green, NUMGREEN(pVisual), &rgb, GREENMAP);
+ pixB = FindBestPixel(pmap->blue, NUMBLUE(pVisual), &rgb, BLUEMAP);
+ *pPix = (pixR << pVisual->offsetRed) |
+ (pixG << pVisual->offsetGreen) |
+ (pixB << pVisual->offsetBlue) |
+ ALPHAMASK(pVisual);
+
+ *pred = pmap->red[pixR].co.local.red;
+ *pgreen = pmap->green[pixG].co.local.green;
+ *pblue = pmap->blue[pixB].co.local.blue;
+ npix = pmap->numPixelsRed[client];
+ ppix = (Pixel *) realloc(pmap->clientPixelsRed[client],
+ (npix + 1) * sizeof(Pixel));
+ if (!ppix)
+ return BadAlloc;
+ ppix[npix] = pixR;
+ pmap->clientPixelsRed[client] = ppix;
+ npix = pmap->numPixelsGreen[client];
+ ppix = (Pixel *) realloc(pmap->clientPixelsGreen[client],
+ (npix + 1) * sizeof(Pixel));
+ if (!ppix)
+ return BadAlloc;
+ ppix[npix] = pixG;
+ pmap->clientPixelsGreen[client] = ppix;
+ npix = pmap->numPixelsBlue[client];
+ ppix = (Pixel *) realloc(pmap->clientPixelsBlue[client],
+ (npix + 1) * sizeof(Pixel));
+ if (!ppix)
+ return BadAlloc;
+ ppix[npix] = pixB;
+ pmap->clientPixelsBlue[client] = ppix;
+ pmap->numPixelsRed[client]++;
+ pmap->numPixelsGreen[client]++;
+ pmap->numPixelsBlue[client]++;
+ break;
+
+ case GrayScale:
+ case PseudoColor:
+ if (pmap->mid != pmap->pScreen->defColormap &&
+ pmap->pVisual->vid == pmap->pScreen->rootVisual)
+ {
+ ColormapPtr prootmap;
+ dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap,
+ RT_COLORMAP, clients[client], DixReadAccess);
+
+ if (pmap->class == prootmap->class)
+ FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb,
+ pPix, PSEUDOMAP, AllComp);
+ }
+ if (FindColor(pmap, pmap->red, entries, &rgb, pPix, PSEUDOMAP,
+ client, AllComp) != Success)
+ return BadAlloc;
+ break;
+
+ case DirectColor:
+ if (pmap->mid != pmap->pScreen->defColormap &&
+ pmap->pVisual->vid == pmap->pScreen->rootVisual)
+ {
+ ColormapPtr prootmap;
+ dixLookupResourceByType((pointer *)&prootmap, pmap->pScreen->defColormap,
+ RT_COLORMAP, clients[client], DixReadAccess);
+
+ if (pmap->class == prootmap->class)
+ {
+ pixR = (*pPix & pVisual->redMask) >> pVisual->offsetRed;
+ FindColorInRootCmap (prootmap, prootmap->red, entries, &rgb,
+ &pixR, REDMAP, RedComp);
+ pixG = (*pPix & pVisual->greenMask) >> pVisual->offsetGreen;
+ FindColorInRootCmap (prootmap, prootmap->green, entries, &rgb,
+ &pixG, GREENMAP, GreenComp);
+ pixB = (*pPix & pVisual->blueMask) >> pVisual->offsetBlue;
+ FindColorInRootCmap (prootmap, prootmap->blue, entries, &rgb,
+ &pixB, BLUEMAP, BlueComp);
+ *pPix = pixR | pixG | pixB;
+ }
+ }
+
+ pixR = (*pPix & pVisual->redMask) >> pVisual->offsetRed;
+ if (FindColor(pmap, pmap->red, NUMRED(pVisual), &rgb, &pixR, REDMAP,
+ client, RedComp) != Success)
+ return BadAlloc;
+ pixG = (*pPix & pVisual->greenMask) >> pVisual->offsetGreen;
+ if (FindColor(pmap, pmap->green, NUMGREEN(pVisual), &rgb, &pixG,
+ GREENMAP, client, GreenComp) != Success)
+ {
+ (void)FreeCo(pmap, client, REDMAP, 1, &pixR, (Pixel)0);
+ return BadAlloc;
+ }
+ pixB = (*pPix & pVisual->blueMask) >> pVisual->offsetBlue;
+ if (FindColor(pmap, pmap->blue, NUMBLUE(pVisual), &rgb, &pixB, BLUEMAP,
+ client, BlueComp) != Success)
+ {
+ (void)FreeCo(pmap, client, GREENMAP, 1, &pixG, (Pixel)0);
+ (void)FreeCo(pmap, client, REDMAP, 1, &pixR, (Pixel)0);
+ return BadAlloc;
+ }
+ *pPix = pixR | pixG | pixB | ALPHAMASK(pVisual);
+
+ break;
+ }
+
+ /* if this is the client's first pixel in this colormap, tell the
+ * resource manager that the client has pixels in this colormap which
+ * should be freed when the client dies */
+ if ((pmap->numPixelsRed[client] == 1) &&
+ (CLIENT_ID(pmap->mid) != client) &&
+ !(pmap->flags & BeingCreated))
+ {
+ colorResource *pcr;
+
+ pcr = malloc(sizeof(colorResource));
+ if (!pcr)
+ {
+ (void)FreeColors(pmap, client, 1, pPix, (Pixel)0);
+ return BadAlloc;
+ }
+ pcr->mid = pmap->mid;
+ pcr->client = client;
+ if (!AddResource(FakeClientID(client), RT_CMAPENTRY, (pointer)pcr))
+ return BadAlloc;
+ }
+ return Success;
+}
+
+/*
+ * FakeAllocColor -- fake an AllocColor request by
+ * returning a free pixel if availible, otherwise returning
+ * the closest matching pixel. This is used by the mi
+ * software sprite code to recolor cursors. A nice side-effect
+ * is that this routine will never return failure.
+ */
+
+void
+FakeAllocColor (ColormapPtr pmap, xColorItem *item)
+{
+ Pixel pixR, pixG, pixB;
+ Pixel temp;
+ int entries;
+ xrgb rgb;
+ int class;
+ VisualPtr pVisual;
+
+ pVisual = pmap->pVisual;
+ rgb.red = item->red;
+ rgb.green = item->green;
+ rgb.blue = item->blue;
+ (*pmap->pScreen->ResolveColor) (&rgb.red, &rgb.green, &rgb.blue, pVisual);
+ class = pmap->class;
+ entries = pVisual->ColormapEntries;
+
+ switch (class) {
+ case GrayScale:
+ case PseudoColor:
+ temp = 0;
+ item->pixel = 0;
+ if (FindColor(pmap, pmap->red, entries, &rgb, &temp, PSEUDOMAP,
+ -1, AllComp) == Success) {
+ item->pixel = temp;
+ break;
+ }
+ /* fall through ... */
+ case StaticColor:
+ case StaticGray:
+ item->pixel = FindBestPixel(pmap->red, entries, &rgb, PSEUDOMAP);
+ break;
+
+ case DirectColor:
+ /* Look up each component in its own map, then OR them together */
+ pixR = (item->pixel & pVisual->redMask) >> pVisual->offsetRed;
+ pixG = (item->pixel & pVisual->greenMask) >> pVisual->offsetGreen;
+ pixB = (item->pixel & pVisual->blueMask) >> pVisual->offsetBlue;
+ if (FindColor(pmap, pmap->red, NUMRED(pVisual), &rgb, &pixR, REDMAP,
+ -1, RedComp) != Success)
+ pixR = FindBestPixel(pmap->red, NUMRED(pVisual), &rgb, REDMAP)
+ << pVisual->offsetRed;
+ if (FindColor(pmap, pmap->green, NUMGREEN(pVisual), &rgb, &pixG,
+ GREENMAP, -1, GreenComp) != Success)
+ pixG = FindBestPixel(pmap->green, NUMGREEN(pVisual), &rgb,
+ GREENMAP) << pVisual->offsetGreen;
+ if (FindColor(pmap, pmap->blue, NUMBLUE(pVisual), &rgb, &pixB, BLUEMAP,
+ -1, BlueComp) != Success)
+ pixB = FindBestPixel(pmap->blue, NUMBLUE(pVisual), &rgb, BLUEMAP)
+ << pVisual->offsetBlue;
+ item->pixel = pixR | pixG | pixB;
+ break;
+
+ case TrueColor:
+ /* Look up each component in its own map, then OR them together */
+ pixR = FindBestPixel(pmap->red, NUMRED(pVisual), &rgb, REDMAP);
+ pixG = FindBestPixel(pmap->green, NUMGREEN(pVisual), &rgb, GREENMAP);
+ pixB = FindBestPixel(pmap->blue, NUMBLUE(pVisual), &rgb, BLUEMAP);
+ item->pixel = (pixR << pVisual->offsetRed) |
+ (pixG << pVisual->offsetGreen) |
+ (pixB << pVisual->offsetBlue);
+ break;
+ }
+}
+
+/* free a pixel value obtained from FakeAllocColor */
+void
+FakeFreeColor(ColormapPtr pmap, Pixel pixel)
+{
+ VisualPtr pVisual;
+ Pixel pixR, pixG, pixB;
+
+ switch (pmap->class) {
+ case GrayScale:
+ case PseudoColor:
+ if (pmap->red[pixel].refcnt == AllocTemporary)
+ pmap->red[pixel].refcnt = 0;
+ break;
+ case DirectColor:
+ pVisual = pmap->pVisual;
+ pixR = (pixel & pVisual->redMask) >> pVisual->offsetRed;
+ pixG = (pixel & pVisual->greenMask) >> pVisual->offsetGreen;
+ pixB = (pixel & pVisual->blueMask) >> pVisual->offsetBlue;
+ if (pmap->red[pixR].refcnt == AllocTemporary)
+ pmap->red[pixR].refcnt = 0;
+ if (pmap->green[pixG].refcnt == AllocTemporary)
+ pmap->green[pixG].refcnt = 0;
+ if (pmap->blue[pixB].refcnt == AllocTemporary)
+ pmap->blue[pixB].refcnt = 0;
+ break;
+ }
+}
+
+typedef unsigned short BigNumUpper;
+typedef unsigned long BigNumLower;
+
+#define BIGNUMLOWERBITS 24
+#define BIGNUMUPPERBITS 16
+#define BIGNUMLOWER (1 << BIGNUMLOWERBITS)
+#define BIGNUMUPPER (1 << BIGNUMUPPERBITS)
+#define UPPERPART(i) ((i) >> BIGNUMLOWERBITS)
+#define LOWERPART(i) ((i) & (BIGNUMLOWER - 1))
+
+typedef struct _bignum {
+ BigNumUpper upper;
+ BigNumLower lower;
+} BigNumRec, *BigNumPtr;
+
+#define BigNumGreater(x,y) (((x)->upper > (y)->upper) ||\
+ ((x)->upper == (y)->upper && (x)->lower > (y)->lower))
+
+#define UnsignedToBigNum(u,r) (((r)->upper = UPPERPART(u)), \
+ ((r)->lower = LOWERPART(u)))
+
+#define MaxBigNum(r) (((r)->upper = BIGNUMUPPER-1), \
+ ((r)->lower = BIGNUMLOWER-1))
+
+static void
+BigNumAdd (BigNumPtr x, BigNumPtr y, BigNumPtr r)
+{
+ BigNumLower lower, carry = 0;
+
+ lower = x->lower + y->lower;
+ if (lower >= BIGNUMLOWER) {
+ lower -= BIGNUMLOWER;
+ carry = 1;
+ }
+ r->lower = lower;
+ r->upper = x->upper + y->upper + carry;
+}
+
+static Pixel
+FindBestPixel(EntryPtr pentFirst, int size, xrgb *prgb, int channel)
+{
+ EntryPtr pent;
+ Pixel pixel, final;
+ long dr, dg, db;
+ unsigned long sq;
+ BigNumRec minval, sum, temp;
+
+ final = 0;
+ MaxBigNum(&minval);
+ /* look for the minimal difference */
+ for (pent = pentFirst, pixel = 0; pixel < size; pent++, pixel++)
+ {
+ dr = dg = db = 0;
+ switch(channel)
+ {
+ case PSEUDOMAP:
+ dg = (long) pent->co.local.green - prgb->green;
+ db = (long) pent->co.local.blue - prgb->blue;
+ case REDMAP:
+ dr = (long) pent->co.local.red - prgb->red;
+ break;
+ case GREENMAP:
+ dg = (long) pent->co.local.green - prgb->green;
+ break;
+ case BLUEMAP:
+ db = (long) pent->co.local.blue - prgb->blue;
+ break;
+ }
+ sq = dr * dr;
+ UnsignedToBigNum (sq, &sum);
+ sq = dg * dg;
+ UnsignedToBigNum (sq, &temp);
+ BigNumAdd (&sum, &temp, &sum);
+ sq = db * db;
+ UnsignedToBigNum (sq, &temp);
+ BigNumAdd (&sum, &temp, &sum);
+ if (BigNumGreater (&minval, &sum))
+ {
+ final = pixel;
+ minval = sum;
+ }
+ }
+ return final;
+}
+
+static void
+FindColorInRootCmap (ColormapPtr pmap, EntryPtr pentFirst, int size,
+ xrgb *prgb, Pixel *pPixel, int channel,
+ ColorCompareProcPtr comp)
+{
+ EntryPtr pent;
+ Pixel pixel;
+ int count;
+
+ if ((pixel = *pPixel) >= size)
+ pixel = 0;
+ for (pent = pentFirst + pixel, count = size; --count >= 0; pent++, pixel++)
+ {
+ if (pent->refcnt > 0 && (*comp) (pent, prgb))
+ {
+ switch (channel)
+ {
+ case REDMAP:
+ pixel <<= pmap->pVisual->offsetRed;
+ break;
+ case GREENMAP:
+ pixel <<= pmap->pVisual->offsetGreen;
+ break;
+ case BLUEMAP:
+ pixel <<= pmap->pVisual->offsetBlue;
+ break;
+ default: /* PSEUDOMAP */
+ break;
+ }
+ *pPixel = pixel;
+ }
+ }
+}
+
+/* Tries to find a color in pmap that exactly matches the one requested in prgb
+ * if it can't it allocates one.
+ * Starts looking at pentFirst + *pPixel, so if you want a specific pixel,
+ * load *pPixel with that value, otherwise set it to 0
+ */
+int
+FindColor (ColormapPtr pmap, EntryPtr pentFirst, int size, xrgb *prgb,
+ Pixel *pPixel, int channel, int client,
+ ColorCompareProcPtr comp)
+{
+ EntryPtr pent;
+ Bool foundFree;
+ Pixel pixel, Free = 0;
+ int npix, count, *nump = NULL;
+ Pixel **pixp = NULL, *ppix;
+ xColorItem def;
+
+ foundFree = FALSE;
+
+ if((pixel = *pPixel) >= size)
+ pixel = 0;
+ /* see if there is a match, and also look for a free entry */
+ for (pent = pentFirst + pixel, count = size; --count >= 0; )
+ {
+ if (pent->refcnt > 0)
+ {
+ if ((*comp) (pent, prgb))
+ {
+ if (client >= 0)
+ pent->refcnt++;
+ *pPixel = pixel;
+ switch(channel)
+ {
+ case REDMAP:
+ *pPixel <<= pmap->pVisual->offsetRed;
+ case PSEUDOMAP:
+ break;
+ case GREENMAP:
+ *pPixel <<= pmap->pVisual->offsetGreen;
+ break;
+ case BLUEMAP:
+ *pPixel <<= pmap->pVisual->offsetBlue;
+ break;
+ }
+ goto gotit;
+ }
+ }
+ else if (!foundFree && pent->refcnt == 0)
+ {
+ Free = pixel;
+ foundFree = TRUE;
+ /* If we're initializing the colormap, then we are looking for
+ * the first free cell we can find, not to minimize the number
+ * of entries we use. So don't look any further. */
+ if(pmap->flags & BeingCreated)
+ break;
+ }
+ pixel++;
+ if(pixel >= size)
+ {
+ pent = pentFirst;
+ pixel = 0;
+ }
+ else
+ pent++;
+ }
+
+ /* If we got here, we didn't find a match. If we also didn't find
+ * a free entry, we're out of luck. Otherwise, we'll usurp a free
+ * entry and fill it in */
+ if (!foundFree)
+ return BadAlloc;
+ pent = pentFirst + Free;
+ pent->fShared = FALSE;
+ pent->refcnt = (client >= 0) ? 1 : AllocTemporary;
+
+ switch (channel)
+ {
+ case PSEUDOMAP:
+ pent->co.local.red = prgb->red;
+ pent->co.local.green = prgb->green;
+ pent->co.local.blue = prgb->blue;
+ def.red = prgb->red;
+ def.green = prgb->green;
+ def.blue = prgb->blue;
+ def.flags = (DoRed|DoGreen|DoBlue);
+ if (client >= 0)
+ pmap->freeRed--;
+ def.pixel = Free;
+ break;
+
+ case REDMAP:
+ pent->co.local.red = prgb->red;
+ def.red = prgb->red;
+ def.green = pmap->green[0].co.local.green;
+ def.blue = pmap->blue[0].co.local.blue;
+ def.flags = DoRed;
+ if (client >= 0)
+ pmap->freeRed--;
+ def.pixel = Free << pmap->pVisual->offsetRed;
+ break;
+
+ case GREENMAP:
+ pent->co.local.green = prgb->green;
+ def.red = pmap->red[0].co.local.red;
+ def.green = prgb->green;
+ def.blue = pmap->blue[0].co.local.blue;
+ def.flags = DoGreen;
+ if (client >= 0)
+ pmap->freeGreen--;
+ def.pixel = Free << pmap->pVisual->offsetGreen;
+ break;
+
+ case BLUEMAP:
+ pent->co.local.blue = prgb->blue;
+ def.red = pmap->red[0].co.local.red;
+ def.green = pmap->green[0].co.local.green;
+ def.blue = prgb->blue;
+ def.flags = DoBlue;
+ if (client >= 0)
+ pmap->freeBlue--;
+ def.pixel = Free << pmap->pVisual->offsetBlue;
+ break;
+ }
+ (*pmap->pScreen->StoreColors) (pmap, 1, &def);
+ pixel = Free;
+ *pPixel = def.pixel;
+
+gotit:
+ if (pmap->flags & BeingCreated || client == -1)
+ return Success;
+ /* Now remember the pixel, for freeing later */
+ switch (channel)
+ {
+ case PSEUDOMAP:
+ case REDMAP:
+ nump = pmap->numPixelsRed;
+ pixp = pmap->clientPixelsRed;
+ break;
+
+ case GREENMAP:
+ nump = pmap->numPixelsGreen;
+ pixp = pmap->clientPixelsGreen;
+ break;
+
+ case BLUEMAP:
+ nump = pmap->numPixelsBlue;
+ pixp = pmap->clientPixelsBlue;
+ break;
+ }
+ npix = nump[client];
+ ppix = (Pixel *) realloc(pixp[client], (npix + 1) * sizeof(Pixel));
+ if (!ppix)
+ {
+ pent->refcnt--;
+ if (!pent->fShared)
+ switch (channel)
+ {
+ case PSEUDOMAP:
+ case REDMAP:
+ pmap->freeRed++;
+ break;
+ case GREENMAP:
+ pmap->freeGreen++;
+ break;
+ case BLUEMAP:
+ pmap->freeBlue++;
+ break;
+ }
+ return BadAlloc;
+ }
+ ppix[npix] = pixel;
+ pixp[client] = ppix;
+ nump[client]++;
+
+ return Success;
+}
+
+/* Comparison functions -- passed to FindColor to determine if an
+ * entry is already the color we're looking for or not */
+static int
+AllComp (EntryPtr pent, xrgb *prgb)
+{
+ if((pent->co.local.red == prgb->red) &&
+ (pent->co.local.green == prgb->green) &&
+ (pent->co.local.blue == prgb->blue) )
+ return 1;
+ return 0;
+}
+
+static int
+RedComp (EntryPtr pent, xrgb *prgb)
+{
+ if (pent->co.local.red == prgb->red)
+ return 1;
+ return 0;
+}
+
+static int
+GreenComp (EntryPtr pent, xrgb *prgb)
+{
+ if (pent->co.local.green == prgb->green)
+ return 1;
+ return 0;
+}
+
+static int
+BlueComp (EntryPtr pent, xrgb *prgb)
+{
+ if (pent->co.local.blue == prgb->blue)
+ return 1;
+ return 0;
+}
+
+
+/* Read the color value of a cell */
+
+int
+QueryColors (ColormapPtr pmap, int count, Pixel *ppixIn, xrgb *prgbList, ClientPtr client)
+{
+ Pixel *ppix, pixel;
+ xrgb *prgb;
+ VisualPtr pVisual;
+ EntryPtr pent;
+ Pixel i;
+ int errVal = Success;
+
+ pVisual = pmap->pVisual;
+ if ((pmap->class | DynamicClass) == DirectColor)
+ {
+ int numred, numgreen, numblue;
+ Pixel rgbbad;
+
+ numred = NUMRED(pVisual);
+ numgreen = NUMGREEN(pVisual);
+ numblue = NUMBLUE(pVisual);
+ rgbbad = ~RGBMASK(pVisual);
+ for( ppix = ppixIn, prgb = prgbList; --count >= 0; ppix++, prgb++)
+ {
+ pixel = *ppix;
+ if (pixel & rgbbad) {
+ client->errorValue = pixel;
+ errVal = BadValue;
+ continue;
+ }
+ i = (pixel & pVisual->redMask) >> pVisual->offsetRed;
+ if (i >= numred)
+ {
+ client->errorValue = pixel;
+ errVal = BadValue;
+ continue;
+ }
+ prgb->red = pmap->red[i].co.local.red;
+ i = (pixel & pVisual->greenMask) >> pVisual->offsetGreen;
+ if (i >= numgreen)
+ {
+ client->errorValue = pixel;
+ errVal = BadValue;
+ continue;
+ }
+ prgb->green = pmap->green[i].co.local.green;
+ i = (pixel & pVisual->blueMask) >> pVisual->offsetBlue;
+ if (i >= numblue)
+ {
+ client->errorValue = pixel;
+ errVal = BadValue;
+ continue;
+ }
+ prgb->blue = pmap->blue[i].co.local.blue;
+ }
+ }
+ else
+ {
+ for( ppix = ppixIn, prgb = prgbList; --count >= 0; ppix++, prgb++)
+ {
+ pixel = *ppix;
+ if (pixel >= pVisual->ColormapEntries)
+ {
+ client->errorValue = pixel;
+ errVal = BadValue;
+ }
+ else
+ {
+ pent = (EntryPtr)&pmap->red[pixel];
+ if (pent->fShared)
+ {
+ prgb->red = pent->co.shco.red->color;
+ prgb->green = pent->co.shco.green->color;
+ prgb->blue = pent->co.shco.blue->color;
+ }
+ else
+ {
+ prgb->red = pent->co.local.red;
+ prgb->green = pent->co.local.green;
+ prgb->blue = pent->co.local.blue;
+ }
+ }
+ }
+ }
+ return errVal;
+}
+
+static void
+FreePixels(ColormapPtr pmap, int client)
+{
+ Pixel *ppix, *ppixStart;
+ int n;
+ int class;
+
+ class = pmap->class;
+ ppixStart = pmap->clientPixelsRed[client];
+ if (class & DynamicClass)
+ {
+ n = pmap->numPixelsRed[client];
+ for (ppix = ppixStart; --n >= 0; )
+ {
+ FreeCell(pmap, *ppix, REDMAP);
+ ppix++;
+ }
+ }
+
+ free(ppixStart);
+ pmap->clientPixelsRed[client] = (Pixel *) NULL;
+ pmap->numPixelsRed[client] = 0;
+ if ((class | DynamicClass) == DirectColor)
+ {
+ ppixStart = pmap->clientPixelsGreen[client];
+ if (class & DynamicClass)
+ for (ppix = ppixStart, n = pmap->numPixelsGreen[client]; --n >= 0;)
+ FreeCell(pmap, *ppix++, GREENMAP);
+ free(ppixStart);
+ pmap->clientPixelsGreen[client] = (Pixel *) NULL;
+ pmap->numPixelsGreen[client] = 0;
+
+ ppixStart = pmap->clientPixelsBlue[client];
+ if (class & DynamicClass)
+ for (ppix = ppixStart, n = pmap->numPixelsBlue[client]; --n >= 0; )
+ FreeCell(pmap, *ppix++, BLUEMAP);
+ free(ppixStart);
+ pmap->clientPixelsBlue[client] = (Pixel *) NULL;
+ pmap->numPixelsBlue[client] = 0;
+ }
+}
+
+/**
+ * Frees all of a client's colors and cells.
+ *
+ * \param value must conform to DeleteType
+ * \unused fakeid
+ */
+int
+FreeClientPixels (pointer value, XID fakeid)
+{
+ pointer pmap;
+ colorResource *pcr = value;
+ int rc;
+
+ rc = dixLookupResourceByType(&pmap, pcr->mid, RT_COLORMAP, serverClient,
+ DixRemoveAccess);
+ if (rc == Success)
+ FreePixels((ColormapPtr)pmap, pcr->client);
+ free(pcr);
+ return Success;
+}
+
+int
+AllocColorCells (int client, ColormapPtr pmap, int colors, int planes,
+ Bool contig, Pixel *ppix, Pixel *masks)
+{
+ Pixel rmask, gmask, bmask, *ppixFirst, r, g, b;
+ int n, class;
+ int ok;
+ int oldcount;
+ colorResource *pcr = (colorResource *)NULL;
+
+ class = pmap->class;
+ if (!(class & DynamicClass))
+ return BadAlloc; /* Shouldn't try on this type */
+ oldcount = pmap->numPixelsRed[client];
+ if (pmap->class == DirectColor)
+ oldcount += pmap->numPixelsGreen[client] + pmap->numPixelsBlue[client];
+ if (!oldcount && (CLIENT_ID(pmap->mid) != client))
+ {
+ pcr = malloc(sizeof(colorResource));
+ if (!pcr)
+ return BadAlloc;
+ }
+
+ if (pmap->class == DirectColor)
+ {
+ ok = AllocDirect (client, pmap, colors, planes, planes, planes,
+ contig, ppix, &rmask, &gmask, &bmask);
+ if(ok == Success)
+ {
+ for (r = g = b = 1, n = planes; --n >= 0; r += r, g += g, b += b)
+ {
+ while(!(rmask & r))
+ r += r;
+ while(!(gmask & g))
+ g += g;
+ while(!(bmask & b))
+ b += b;
+ *masks++ = r | g | b;
+ }
+ }
+ }
+ else
+ {
+ ok = AllocPseudo (client, pmap, colors, planes, contig, ppix, &rmask,
+ &ppixFirst);
+ if(ok == Success)
+ {
+ for (r = 1, n = planes; --n >= 0; r += r)
+ {
+ while(!(rmask & r))
+ r += r;
+ *masks++ = r;
+ }
+ }
+ }
+
+ /* if this is the client's first pixels in this colormap, tell the
+ * resource manager that the client has pixels in this colormap which
+ * should be freed when the client dies */
+ if ((ok == Success) && pcr)
+ {
+ pcr->mid = pmap->mid;
+ pcr->client = client;
+ if (!AddResource(FakeClientID(client), RT_CMAPENTRY, (pointer)pcr))
+ ok = BadAlloc;
+ } else free(pcr);
+
+ return ok;
+}
+
+
+int
+AllocColorPlanes (int client, ColormapPtr pmap, int colors,
+ int r, int g, int b, Bool contig, Pixel *pixels,
+ Pixel *prmask, Pixel *pgmask, Pixel *pbmask)
+{
+ int ok;
+ Pixel mask, *ppixFirst;
+ Pixel shift;
+ int i;
+ int class;
+ int oldcount;
+ colorResource *pcr = (colorResource *)NULL;
+
+ class = pmap->class;
+ if (!(class & DynamicClass))
+ return BadAlloc; /* Shouldn't try on this type */
+ oldcount = pmap->numPixelsRed[client];
+ if (class == DirectColor)
+ oldcount += pmap->numPixelsGreen[client] + pmap->numPixelsBlue[client];
+ if (!oldcount && (CLIENT_ID(pmap->mid) != client))
+ {
+ pcr = malloc(sizeof(colorResource));
+ if (!pcr)
+ return BadAlloc;
+ }
+
+ if (class == DirectColor)
+ {
+ ok = AllocDirect (client, pmap, colors, r, g, b, contig, pixels,
+ prmask, pgmask, pbmask);
+ }
+ else
+ {
+ /* Allocate the proper pixels */
+ /* XXX This is sort of bad, because of contig is set, we force all
+ * r + g + b bits to be contiguous. Should only force contiguity
+ * per mask
+ */
+ ok = AllocPseudo (client, pmap, colors, r + g + b, contig, pixels,
+ &mask, &ppixFirst);
+
+ if(ok == Success)
+ {
+ /* now split that mask into three */
+ *prmask = *pgmask = *pbmask = 0;
+ shift = 1;
+ for (i = r; --i >= 0; shift += shift)
+ {
+ while (!(mask & shift))
+ shift += shift;
+ *prmask |= shift;
+ }
+ for (i = g; --i >= 0; shift += shift)
+ {
+ while (!(mask & shift))
+ shift += shift;
+ *pgmask |= shift;
+ }
+ for (i = b; --i >= 0; shift += shift)
+ {
+ while (!(mask & shift))
+ shift += shift;
+ *pbmask |= shift;
+ }
+
+ /* set up the shared color cells */
+ if (!AllocShared(pmap, pixels, colors, r, g, b,
+ *prmask, *pgmask, *pbmask, ppixFirst))
+ {
+ (void)FreeColors(pmap, client, colors, pixels, mask);
+ ok = BadAlloc;
+ }
+ }
+ }
+
+ /* if this is the client's first pixels in this colormap, tell the
+ * resource manager that the client has pixels in this colormap which
+ * should be freed when the client dies */
+ if ((ok == Success) && pcr)
+ {
+ pcr->mid = pmap->mid;
+ pcr->client = client;
+ if (!AddResource(FakeClientID(client), RT_CMAPENTRY, (pointer)pcr))
+ ok = BadAlloc;
+ } else free(pcr);
+
+ return ok;
+}
+
+static int
+AllocDirect (int client, ColormapPtr pmap, int c, int r, int g, int b, Bool contig,
+ Pixel *pixels, Pixel *prmask, Pixel *pgmask, Pixel *pbmask)
+{
+ Pixel *ppixRed, *ppixGreen, *ppixBlue;
+ Pixel *ppix, *pDst, *p;
+ int npix, npixR, npixG, npixB;
+ Bool okR, okG, okB;
+ Pixel *rpix = 0, *gpix = 0, *bpix = 0;
+
+ npixR = c << r;
+ npixG = c << g;
+ npixB = c << b;
+ if ((r >= 32) || (g >= 32) || (b >= 32) ||
+ (npixR > pmap->freeRed) || (npixR < c) ||
+ (npixG > pmap->freeGreen) || (npixG < c) ||
+ (npixB > pmap->freeBlue) || (npixB < c))
+ return BadAlloc;
+
+ /* start out with empty pixels */
+ for(p = pixels; p < pixels + c; p++)
+ *p = 0;
+
+ ppixRed = malloc(npixR * sizeof(Pixel));
+ ppixGreen = malloc(npixG * sizeof(Pixel));
+ ppixBlue = malloc(npixB * sizeof(Pixel));
+ if (!ppixRed || !ppixGreen || !ppixBlue)
+ {
+ free(ppixBlue);
+ free(ppixGreen);
+ free(ppixRed);
+ return BadAlloc;
+ }
+
+ okR = AllocCP(pmap, pmap->red, c, r, contig, ppixRed, prmask);
+ okG = AllocCP(pmap, pmap->green, c, g, contig, ppixGreen, pgmask);
+ okB = AllocCP(pmap, pmap->blue, c, b, contig, ppixBlue, pbmask);
+
+ if (okR && okG && okB)
+ {
+ rpix = (Pixel *) realloc(pmap->clientPixelsRed[client],
+ (pmap->numPixelsRed[client] + (c << r)) *
+ sizeof(Pixel));
+ if (rpix)
+ pmap->clientPixelsRed[client] = rpix;
+ gpix = (Pixel *) realloc(pmap->clientPixelsGreen[client],
+ (pmap->numPixelsGreen[client] + (c << g)) *
+ sizeof(Pixel));
+ if (gpix)
+ pmap->clientPixelsGreen[client] = gpix;
+ bpix = (Pixel *) realloc(pmap->clientPixelsBlue[client],
+ (pmap->numPixelsBlue[client] + (c << b)) *
+ sizeof(Pixel));
+ if (bpix)
+ pmap->clientPixelsBlue[client] = bpix;
+ }
+
+ if (!okR || !okG || !okB || !rpix || !gpix || !bpix)
+ {
+ if (okR)
+ for(ppix = ppixRed, npix = npixR; --npix >= 0; ppix++)
+ pmap->red[*ppix].refcnt = 0;
+ if (okG)
+ for(ppix = ppixGreen, npix = npixG; --npix >= 0; ppix++)
+ pmap->green[*ppix].refcnt = 0;
+ if (okB)
+ for(ppix = ppixBlue, npix = npixB; --npix >= 0; ppix++)
+ pmap->blue[*ppix].refcnt = 0;
+ free(ppixBlue);
+ free(ppixGreen);
+ free(ppixRed);
+ return BadAlloc;
+ }
+
+ *prmask <<= pmap->pVisual->offsetRed;
+ *pgmask <<= pmap->pVisual->offsetGreen;
+ *pbmask <<= pmap->pVisual->offsetBlue;
+
+ ppix = rpix + pmap->numPixelsRed[client];
+ for (pDst = pixels, p = ppixRed; p < ppixRed + npixR; p++)
+ {
+ *ppix++ = *p;
+ if(p < ppixRed + c)
+ *pDst++ |= *p << pmap->pVisual->offsetRed;
+ }
+ pmap->numPixelsRed[client] += npixR;
+ pmap->freeRed -= npixR;
+
+ ppix = gpix + pmap->numPixelsGreen[client];
+ for (pDst = pixels, p = ppixGreen; p < ppixGreen + npixG; p++)
+ {
+ *ppix++ = *p;
+ if(p < ppixGreen + c)
+ *pDst++ |= *p << pmap->pVisual->offsetGreen;
+ }
+ pmap->numPixelsGreen[client] += npixG;
+ pmap->freeGreen -= npixG;
+
+ ppix = bpix + pmap->numPixelsBlue[client];
+ for (pDst = pixels, p = ppixBlue; p < ppixBlue + npixB; p++)
+ {
+ *ppix++ = *p;
+ if(p < ppixBlue + c)
+ *pDst++ |= *p << pmap->pVisual->offsetBlue;
+ }
+ pmap->numPixelsBlue[client] += npixB;
+ pmap->freeBlue -= npixB;
+
+
+ for (pDst = pixels; pDst < pixels + c; pDst++)
+ *pDst |= ALPHAMASK(pmap->pVisual);
+
+ free(ppixBlue);
+ free(ppixGreen);
+ free(ppixRed);
+
+ return Success;
+}
+
+static int
+AllocPseudo (int client, ColormapPtr pmap, int c, int r, Bool contig,
+ Pixel *pixels, Pixel *pmask, Pixel **pppixFirst)
+{
+ Pixel *ppix, *p, *pDst, *ppixTemp;
+ int npix;
+ Bool ok;
+
+ npix = c << r;
+ if ((r >= 32) || (npix > pmap->freeRed) || (npix < c))
+ return BadAlloc;
+ if(!(ppixTemp = malloc(npix * sizeof(Pixel))))
+ return BadAlloc;
+ ok = AllocCP(pmap, pmap->red, c, r, contig, ppixTemp, pmask);
+
+ if (ok)
+ {
+
+ /* all the allocated pixels are added to the client pixel list,
+ * but only the unique ones are returned to the client */
+ ppix = (Pixel *)realloc(pmap->clientPixelsRed[client],
+ (pmap->numPixelsRed[client] + npix) * sizeof(Pixel));
+ if (!ppix)
+ {
+ for (p = ppixTemp; p < ppixTemp + npix; p++)
+ pmap->red[*p].refcnt = 0;
+ free(ppixTemp);
+ return BadAlloc;
+ }
+ pmap->clientPixelsRed[client] = ppix;
+ ppix += pmap->numPixelsRed[client];
+ *pppixFirst = ppix;
+ pDst = pixels;
+ for (p = ppixTemp; p < ppixTemp + npix; p++)
+ {
+ *ppix++ = *p;
+ if(p < ppixTemp + c)
+ *pDst++ = *p;
+ }
+ pmap->numPixelsRed[client] += npix;
+ pmap->freeRed -= npix;
+ }
+ free(ppixTemp);
+ return ok ? Success : BadAlloc;
+}
+
+/* Allocates count << planes pixels from colormap pmap for client. If
+ * contig, then the plane mask is made of consecutive bits. Returns
+ * all count << pixels in the array pixels. The first count of those
+ * pixels are the unique pixels. *pMask has the mask to Or with the
+ * unique pixels to get the rest of them.
+ *
+ * Returns True iff all pixels could be allocated
+ * All cells allocated will have refcnt set to AllocPrivate and shared to FALSE
+ * (see AllocShared for why we care)
+ */
+static Bool
+AllocCP (ColormapPtr pmap, EntryPtr pentFirst, int count, int planes,
+ Bool contig, Pixel *pixels, Pixel *pMask)
+{
+ EntryPtr ent;
+ Pixel pixel, base, entries, maxp, save;
+ int dplanes, found;
+ Pixel *ppix;
+ Pixel mask;
+ Pixel finalmask;
+
+ dplanes = pmap->pVisual->nplanes;
+
+ /* Easy case. Allocate pixels only */
+ if (planes == 0)
+ {
+ /* allocate writable entries */
+ ppix = pixels;
+ ent = pentFirst;
+ pixel = 0;
+ while (--count >= 0)
+ {
+ /* Just find count unallocated cells */
+ while (ent->refcnt)
+ {
+ ent++;
+ pixel++;
+ }
+ ent->refcnt = AllocPrivate;
+ *ppix++ = pixel;
+ ent->fShared = FALSE;
+ }
+ *pMask = 0;
+ return TRUE;
+ }
+ else if (planes > dplanes)
+ {
+ return FALSE;
+ }
+
+ /* General case count pixels * 2 ^ planes cells to be allocated */
+
+ /* make room for new pixels */
+ ent = pentFirst;
+
+ /* first try for contiguous planes, since it's fastest */
+ for (mask = (((Pixel)1) << planes) - 1, base = 1, dplanes -= (planes - 1);
+ --dplanes >= 0;
+ mask += mask, base += base)
+ {
+ ppix = pixels;
+ found = 0;
+ pixel = 0;
+ entries = pmap->pVisual->ColormapEntries - mask;
+ while (pixel < entries)
+ {
+ save = pixel;
+ maxp = pixel + mask + base;
+ /* check if all are free */
+ while (pixel != maxp && ent[pixel].refcnt == 0)
+ pixel += base;
+ if (pixel == maxp)
+ {
+ /* this one works */
+ *ppix++ = save;
+ found++;
+ if (found == count)
+ {
+ /* found enough, allocate them all */
+ while (--count >= 0)
+ {
+ pixel = pixels[count];
+ maxp = pixel + mask;
+ while (1)
+ {
+ ent[pixel].refcnt = AllocPrivate;
+ ent[pixel].fShared = FALSE;
+ if (pixel == maxp)
+ break;
+ pixel += base;
+ *ppix++ = pixel;
+ }
+ }
+ *pMask = mask;
+ return TRUE;
+ }
+ }
+ pixel = save + 1;
+ if (pixel & mask)
+ pixel += mask;
+ }
+ }
+
+ dplanes = pmap->pVisual->nplanes;
+ if (contig || planes == 1 || dplanes < 3)
+ return FALSE;
+
+ /* this will be very slow for large maps, need a better algorithm */
+
+ /*
+ we can generate the smallest and largest numbers that fits in dplanes
+ bits and contain exactly planes bits set as follows. First, we need to
+ check that it is possible to generate such a mask at all.
+ (Non-contiguous masks need one more bit than contiguous masks). Then
+ the smallest such mask consists of the rightmost planes-1 bits set, then
+ a zero, then a one in position planes + 1. The formula is
+ (3 << (planes-1)) -1
+ The largest such masks consists of the leftmost planes-1 bits set, then
+ a zero, then a one bit in position dplanes-planes-1. If dplanes is
+ smaller than 32 (the number of bits in a word) then the formula is:
+ (1<<dplanes) - (1<<(dplanes-planes+1) + (1<<dplanes-planes-1)
+ If dplanes = 32, then we can't calculate (1<<dplanes) and we have
+ to use:
+ ( (1<<(planes-1)) - 1) << (dplanes-planes+1) + (1<<(dplanes-planes-1))
+
+ << Thank you, Loretta>>>
+
+ */
+
+ finalmask =
+ (((((Pixel)1)<<(planes-1)) - 1) << (dplanes-planes+1)) +
+ (((Pixel)1)<<(dplanes-planes-1));
+ for (mask = (((Pixel)3) << (planes -1)) - 1; mask <= finalmask; mask++)
+ {
+ /* next 3 magic statements count number of ones (HAKMEM #169) */
+ pixel = (mask >> 1) & 033333333333;
+ pixel = mask - pixel - ((pixel >> 1) & 033333333333);
+ if ((((pixel + (pixel >> 3)) & 030707070707) % 077) != planes)
+ continue;
+ ppix = pixels;
+ found = 0;
+ entries = pmap->pVisual->ColormapEntries - mask;
+ base = lowbit (mask);
+ for (pixel = 0; pixel < entries; pixel++)
+ {
+ if (pixel & mask)
+ continue;
+ maxp = 0;
+ /* check if all are free */
+ while (ent[pixel + maxp].refcnt == 0)
+ {
+ GetNextBitsOrBreak(maxp, mask, base);
+ }
+ if ((maxp < mask) || (ent[pixel + mask].refcnt != 0))
+ continue;
+ /* this one works */
+ *ppix++ = pixel;
+ found++;
+ if (found < count)
+ continue;
+ /* found enough, allocate them all */
+ while (--count >= 0)
+ {
+ pixel = (pixels)[count];
+ maxp = 0;
+ while (1)
+ {
+ ent[pixel + maxp].refcnt = AllocPrivate;
+ ent[pixel + maxp].fShared = FALSE;
+ GetNextBitsOrBreak(maxp, mask, base);
+ *ppix++ = pixel + maxp;
+ }
+ }
+
+ *pMask = mask;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/**
+ *
+ * \param ppixFirst First of the client's new pixels
+ */
+static Bool
+AllocShared (ColormapPtr pmap, Pixel *ppix, int c, int r, int g, int b,
+ Pixel rmask, Pixel gmask, Pixel bmask, Pixel *ppixFirst)
+{
+ Pixel *pptr, *cptr;
+ int npix, z, npixClientNew, npixShared;
+ Pixel basemask, base, bits, common;
+ SHAREDCOLOR *pshared, **ppshared, **psharedList;
+
+ npixClientNew = c << (r + g + b);
+ npixShared = (c << r) + (c << g) + (c << b);
+ psharedList = malloc(npixShared * sizeof(SHAREDCOLOR *));
+ if (!psharedList)
+ return FALSE;
+ ppshared = psharedList;
+ for (z = npixShared; --z >= 0; )
+ {
+ if (!(ppshared[z] = malloc(sizeof(SHAREDCOLOR))))
+ {
+ for (z++ ; z < npixShared; z++)
+ free(ppshared[z]);
+ free(psharedList);
+ return FALSE;
+ }
+ }
+ for(pptr = ppix, npix = c; --npix >= 0; pptr++)
+ {
+ basemask = ~(gmask | bmask);
+ common = *pptr & basemask;
+ if (rmask)
+ {
+ bits = 0;
+ base = lowbit (rmask);
+ while(1)
+ {
+ pshared = *ppshared++;
+ pshared->refcnt = 1 << (g + b);
+ for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
+ {
+ if ((*cptr & basemask) == (common | bits))
+ {
+ pmap->red[*cptr].fShared = TRUE;
+ pmap->red[*cptr].co.shco.red = pshared;
+ }
+ }
+ GetNextBitsOrBreak(bits, rmask, base);
+ }
+ }
+ else
+ {
+ pshared = *ppshared++;
+ pshared->refcnt = 1 << (g + b);
+ for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
+ {
+ if ((*cptr & basemask) == common)
+ {
+ pmap->red[*cptr].fShared = TRUE;
+ pmap->red[*cptr].co.shco.red = pshared;
+ }
+ }
+ }
+ basemask = ~(rmask | bmask);
+ common = *pptr & basemask;
+ if (gmask)
+ {
+ bits = 0;
+ base = lowbit (gmask);
+ while(1)
+ {
+ pshared = *ppshared++;
+ pshared->refcnt = 1 << (r + b);
+ for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
+ {
+ if ((*cptr & basemask) == (common | bits))
+ {
+ pmap->red[*cptr].co.shco.green = pshared;
+ }
+ }
+ GetNextBitsOrBreak(bits, gmask, base);
+ }
+ }
+ else
+ {
+ pshared = *ppshared++;
+ pshared->refcnt = 1 << (g + b);
+ for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
+ {
+ if ((*cptr & basemask) == common)
+ {
+ pmap->red[*cptr].co.shco.green = pshared;
+ }
+ }
+ }
+ basemask = ~(rmask | gmask);
+ common = *pptr & basemask;
+ if (bmask)
+ {
+ bits = 0;
+ base = lowbit (bmask);
+ while(1)
+ {
+ pshared = *ppshared++;
+ pshared->refcnt = 1 << (r + g);
+ for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
+ {
+ if ((*cptr & basemask) == (common | bits))
+ {
+ pmap->red[*cptr].co.shco.blue = pshared;
+ }
+ }
+ GetNextBitsOrBreak(bits, bmask, base);
+ }
+ }
+ else
+ {
+ pshared = *ppshared++;
+ pshared->refcnt = 1 << (g + b);
+ for (cptr = ppixFirst, z = npixClientNew; --z >= 0; cptr++)
+ {
+ if ((*cptr & basemask) == common)
+ {
+ pmap->red[*cptr].co.shco.blue = pshared;
+ }
+ }
+ }
+ }
+ free(psharedList);
+ return TRUE;
+}
+
+
+/** FreeColors
+ * Free colors and/or cells (probably slow for large numbers)
+ */
+int
+FreeColors (ColormapPtr pmap, int client, int count, Pixel *pixels, Pixel mask)
+{
+ int rval, result, class;
+ Pixel rmask;
+
+ class = pmap->class;
+ if (pmap->flags & AllAllocated)
+ return BadAccess;
+ if ((class | DynamicClass) == DirectColor)
+ {
+ rmask = mask & RGBMASK(pmap->pVisual);
+ result = FreeCo(pmap, client, REDMAP, count, pixels,
+ mask & pmap->pVisual->redMask);
+ /* If any of the three calls fails, we must report that, if more
+ * than one fails, it's ok that we report the last one */
+ rval = FreeCo(pmap, client, GREENMAP, count, pixels,
+ mask & pmap->pVisual->greenMask);
+ if(rval != Success)
+ result = rval;
+ rval = FreeCo(pmap, client, BLUEMAP, count, pixels,
+ mask & pmap->pVisual->blueMask);
+ if(rval != Success)
+ result = rval;
+ }
+ else
+ {
+ rmask = mask & ((((Pixel)1) << pmap->pVisual->nplanes) - 1);
+ result = FreeCo(pmap, client, PSEUDOMAP, count, pixels, rmask);
+ }
+ if ((mask != rmask) && count)
+ {
+ clients[client]->errorValue = *pixels | mask;
+ result = BadValue;
+ }
+ /* XXX should worry about removing any RT_CMAPENTRY resource */
+ return result;
+}
+
+/**
+ * Helper for FreeColors -- frees all combinations of *newpixels and mask bits
+ * which the client has allocated in channel colormap cells of pmap.
+ * doesn't change newpixels if it doesn't need to
+ *
+ * \param pmap which colormap head
+ * \param color which sub-map, eg, RED, BLUE, PSEUDO
+ * \param npixIn number of pixels passed in
+ * \param ppixIn number of base pixels
+ * \param mask mask client gave us
+ */
+static int
+FreeCo (ColormapPtr pmap, int client, int color, int npixIn, Pixel *ppixIn, Pixel mask)
+{
+ Pixel *ppixClient, pixTest;
+ int npixClient, npixNew, npix;
+ Pixel bits, base, cmask, rgbbad;
+ Pixel *pptr, *cptr;
+ int n, zapped;
+ int errVal = Success;
+ int offset, numents;
+
+ if (npixIn == 0)
+ return errVal;
+ bits = 0;
+ zapped = 0;
+ base = lowbit (mask);
+
+ switch(color)
+ {
+ case REDMAP:
+ cmask = pmap->pVisual->redMask;
+ rgbbad = ~RGBMASK(pmap->pVisual);
+ offset = pmap->pVisual->offsetRed;
+ numents = (cmask >> offset) + 1;
+ ppixClient = pmap->clientPixelsRed[client];
+ npixClient = pmap->numPixelsRed[client];
+ break;
+ case GREENMAP:
+ cmask = pmap->pVisual->greenMask;
+ rgbbad = ~RGBMASK(pmap->pVisual);
+ offset = pmap->pVisual->offsetGreen;
+ numents = (cmask >> offset) + 1;
+ ppixClient = pmap->clientPixelsGreen[client];
+ npixClient = pmap->numPixelsGreen[client];
+ break;
+ case BLUEMAP:
+ cmask = pmap->pVisual->blueMask;
+ rgbbad = ~RGBMASK(pmap->pVisual);
+ offset = pmap->pVisual->offsetBlue;
+ numents = (cmask >> offset) + 1;
+ ppixClient = pmap->clientPixelsBlue[client];
+ npixClient = pmap->numPixelsBlue[client];
+ break;
+ default: /* so compiler can see that everything gets initialized */
+ case PSEUDOMAP:
+ cmask = ~((Pixel)0);
+ rgbbad = 0;
+ offset = 0;
+ numents = pmap->pVisual->ColormapEntries;
+ ppixClient = pmap->clientPixelsRed[client];
+ npixClient = pmap->numPixelsRed[client];
+ break;
+ }
+
+
+ /* zap all pixels which match */
+ while (1)
+ {
+ /* go through pixel list */
+ for (pptr = ppixIn, n = npixIn; --n >= 0; pptr++)
+ {
+ pixTest = ((*pptr | bits) & cmask) >> offset;
+ if ((pixTest >= numents) || (*pptr & rgbbad))
+ {
+ clients[client]->errorValue = *pptr | bits;
+ errVal = BadValue;
+ continue;
+ }
+
+ /* find match in client list */
+ for (cptr = ppixClient, npix = npixClient;
+ --npix >= 0 && *cptr != pixTest;
+ cptr++) ;
+
+ if (npix >= 0)
+ {
+ if (pmap->class & DynamicClass)
+ {
+ FreeCell(pmap, pixTest, color);
+ }
+ *cptr = ~((Pixel)0);
+ zapped++;
+ }
+ else
+ errVal = BadAccess;
+ }
+ /* generate next bits value */
+ GetNextBitsOrBreak(bits, mask, base);
+ }
+
+ /* delete freed pixels from client pixel list */
+ if (zapped)
+ {
+ npixNew = npixClient - zapped;
+ if (npixNew)
+ {
+ /* Since the list can only get smaller, we can do a copy in
+ * place and then realloc to a smaller size */
+ pptr = cptr = ppixClient;
+
+ /* If we have all the new pixels, we don't have to examine the
+ * rest of the old ones */
+ for(npix = 0; npix < npixNew; cptr++)
+ {
+ if (*cptr != ~((Pixel)0))
+ {
+ *pptr++ = *cptr;
+ npix++;
+ }
+ }
+ pptr = (Pixel *)realloc(ppixClient, npixNew * sizeof(Pixel));
+ if (pptr)
+ ppixClient = pptr;
+ npixClient = npixNew;
+ }
+ else
+ {
+ npixClient = 0;
+ free(ppixClient);
+ ppixClient = (Pixel *)NULL;
+ }
+ switch(color)
+ {
+ case PSEUDOMAP:
+ case REDMAP:
+ pmap->clientPixelsRed[client] = ppixClient;
+ pmap->numPixelsRed[client] = npixClient;
+ break;
+ case GREENMAP:
+ pmap->clientPixelsGreen[client] = ppixClient;
+ pmap->numPixelsGreen[client] = npixClient;
+ break;
+ case BLUEMAP:
+ pmap->clientPixelsBlue[client] = ppixClient;
+ pmap->numPixelsBlue[client] = npixClient;
+ break;
+ }
+ }
+ return errVal;
+}
+
+
+
+/* Redefine color values */
+int
+StoreColors (ColormapPtr pmap, int count, xColorItem *defs, ClientPtr client)
+{
+ Pixel pix;
+ xColorItem *pdef;
+ EntryPtr pent, pentT, pentLast;
+ VisualPtr pVisual;
+ SHAREDCOLOR *pred, *pgreen, *pblue;
+ int n, ChgRed, ChgGreen, ChgBlue, idef;
+ int class, errVal = Success;
+ int ok;
+
+
+ class = pmap->class;
+ if(!(class & DynamicClass) && !(pmap->flags & BeingCreated))
+ {
+ return BadAccess;
+ }
+ pVisual = pmap->pVisual;
+
+ idef = 0;
+ if((class | DynamicClass) == DirectColor)
+ {
+ int numred, numgreen, numblue;
+ Pixel rgbbad;
+
+ numred = NUMRED(pVisual);
+ numgreen = NUMGREEN(pVisual);
+ numblue = NUMBLUE(pVisual);
+ rgbbad = ~RGBMASK(pVisual);
+ for (pdef = defs, n = 0; n < count; pdef++, n++)
+ {
+ ok = TRUE;
+ (*pmap->pScreen->ResolveColor)
+ (&pdef->red, &pdef->green, &pdef->blue, pmap->pVisual);
+
+ if (pdef->pixel & rgbbad)
+ {
+ errVal = BadValue;
+ client->errorValue = pdef->pixel;
+ continue;
+ }
+ pix = (pdef->pixel & pVisual->redMask) >> pVisual->offsetRed;
+ if (pix >= numred)
+ {
+ errVal = BadValue;
+ ok = FALSE;
+ }
+ else if (pmap->red[pix].refcnt != AllocPrivate)
+ {
+ errVal = BadAccess;
+ ok = FALSE;
+ }
+ else if (pdef->flags & DoRed)
+ {
+ pmap->red[pix].co.local.red = pdef->red;
+ }
+ else
+ {
+ pdef->red = pmap->red[pix].co.local.red;
+ }
+
+ pix = (pdef->pixel & pVisual->greenMask) >> pVisual->offsetGreen;
+ if (pix >= numgreen)
+ {
+ errVal = BadValue;
+ ok = FALSE;
+ }
+ else if (pmap->green[pix].refcnt != AllocPrivate)
+ {
+ errVal = BadAccess;
+ ok = FALSE;
+ }
+ else if (pdef->flags & DoGreen)
+ {
+ pmap->green[pix].co.local.green = pdef->green;
+ }
+ else
+ {
+ pdef->green = pmap->green[pix].co.local.green;
+ }
+
+ pix = (pdef->pixel & pVisual->blueMask) >> pVisual->offsetBlue;
+ if (pix >= numblue)
+ {
+ errVal = BadValue;
+ ok = FALSE;
+ }
+ else if (pmap->blue[pix].refcnt != AllocPrivate)
+ {
+ errVal = BadAccess;
+ ok = FALSE;
+ }
+ else if (pdef->flags & DoBlue)
+ {
+ pmap->blue[pix].co.local.blue = pdef->blue;
+ }
+ else
+ {
+ pdef->blue = pmap->blue[pix].co.local.blue;
+ }
+ /* If this is an o.k. entry, then it gets added to the list
+ * to be sent to the hardware. If not, skip it. Once we've
+ * skipped one, we have to copy all the others.
+ */
+ if(ok)
+ {
+ if(idef != n)
+ defs[idef] = defs[n];
+ idef++;
+ } else
+ client->errorValue = pdef->pixel;
+ }
+ }
+ else
+ {
+ for (pdef = defs, n = 0; n < count; pdef++, n++)
+ {
+
+ ok = TRUE;
+ if (pdef->pixel >= pVisual->ColormapEntries)
+ {
+ client->errorValue = pdef->pixel;
+ errVal = BadValue;
+ ok = FALSE;
+ }
+ else if (pmap->red[pdef->pixel].refcnt != AllocPrivate)
+ {
+ errVal = BadAccess;
+ ok = FALSE;
+ }
+
+ /* If this is an o.k. entry, then it gets added to the list
+ * to be sent to the hardware. If not, skip it. Once we've
+ * skipped one, we have to copy all the others.
+ */
+ if(ok)
+ {
+ if(idef != n)
+ defs[idef] = defs[n];
+ idef++;
+ }
+ else
+ continue;
+
+ (*pmap->pScreen->ResolveColor)
+ (&pdef->red, &pdef->green, &pdef->blue, pmap->pVisual);
+
+ pent = &pmap->red[pdef->pixel];
+
+ if(pdef->flags & DoRed)
+ {
+ if(pent->fShared)
+ {
+ pent->co.shco.red->color = pdef->red;
+ if (pent->co.shco.red->refcnt > 1)
+ ok = FALSE;
+ }
+ else
+ pent->co.local.red = pdef->red;
+ }
+ else
+ {
+ if(pent->fShared)
+ pdef->red = pent->co.shco.red->color;
+ else
+ pdef->red = pent->co.local.red;
+ }
+ if(pdef->flags & DoGreen)
+ {
+ if(pent->fShared)
+ {
+ pent->co.shco.green->color = pdef->green;
+ if (pent->co.shco.green->refcnt > 1)
+ ok = FALSE;
+ }
+ else
+ pent->co.local.green = pdef->green;
+ }
+ else
+ {
+ if(pent->fShared)
+ pdef->green = pent->co.shco.green->color;
+ else
+ pdef->green = pent->co.local.green;
+ }
+ if(pdef->flags & DoBlue)
+ {
+ if(pent->fShared)
+ {
+ pent->co.shco.blue->color = pdef->blue;
+ if (pent->co.shco.blue->refcnt > 1)
+ ok = FALSE;
+ }
+ else
+ pent->co.local.blue = pdef->blue;
+ }
+ else
+ {
+ if(pent->fShared)
+ pdef->blue = pent->co.shco.blue->color;
+ else
+ pdef->blue = pent->co.local.blue;
+ }
+
+ if(!ok)
+ {
+ /* have to run through the colormap and change anybody who
+ * shares this value */
+ pred = pent->co.shco.red;
+ pgreen = pent->co.shco.green;
+ pblue = pent->co.shco.blue;
+ ChgRed = pdef->flags & DoRed;
+ ChgGreen = pdef->flags & DoGreen;
+ ChgBlue = pdef->flags & DoBlue;
+ pentLast = pmap->red + pVisual->ColormapEntries;
+
+ for(pentT = pmap->red; pentT < pentLast; pentT++)
+ {
+ if(pentT->fShared && (pentT != pent))
+ {
+ xColorItem defChg;
+
+ /* There are, alas, devices in this world too dumb
+ * to read their own hardware colormaps. Sick, but
+ * true. So we're going to be really nice and load
+ * the xColorItem with the proper value for all the
+ * fields. We will only set the flags for those
+ * fields that actually change. Smart devices can
+ * arrange to change only those fields. Dumb devices
+ * can rest assured that we have provided for them,
+ * and can change all three fields */
+
+ defChg.flags = 0;
+ if(ChgRed && pentT->co.shco.red == pred)
+ {
+ defChg.flags |= DoRed;
+ }
+ if(ChgGreen && pentT->co.shco.green == pgreen)
+ {
+ defChg.flags |= DoGreen;
+ }
+ if(ChgBlue && pentT->co.shco.blue == pblue)
+ {
+ defChg.flags |= DoBlue;
+ }
+ if(defChg.flags != 0)
+ {
+ defChg.pixel = pentT - pmap->red;
+ defChg.red = pentT->co.shco.red->color;
+ defChg.green = pentT->co.shco.green->color;
+ defChg.blue = pentT->co.shco.blue->color;
+ (*pmap->pScreen->StoreColors) (pmap, 1, &defChg);
+ }
+ }
+ }
+
+ }
+ }
+ }
+ /* Note that we use idef, the count of acceptable entries, and not
+ * count, the count of proposed entries */
+ if (idef != 0)
+ ( *pmap->pScreen->StoreColors) (pmap, idef, defs);
+ return errVal;
+}
+
+int
+IsMapInstalled(Colormap map, WindowPtr pWin)
+{
+ Colormap *pmaps;
+ int imap, nummaps, found;
+
+ pmaps = malloc(pWin->drawable.pScreen->maxInstalledCmaps*sizeof(Colormap));
+ if(!pmaps)
+ return FALSE;
+ nummaps = (*pWin->drawable.pScreen->ListInstalledColormaps)
+ (pWin->drawable.pScreen, pmaps);
+ found = FALSE;
+ for(imap = 0; imap < nummaps; imap++)
+ {
+ if(pmaps[imap] == map)
+ {
+ found = TRUE;
+ break;
+ }
+ }
+ free(pmaps);
+ return found;
+}
+
+struct colormap_lookup_data {
+ ScreenPtr pScreen;
+ VisualPtr visuals;
+};
+
+static void _colormap_find_resource(pointer value, XID id,
+ pointer cdata)
+{
+ struct colormap_lookup_data *cmap_data = cdata;
+ VisualPtr visuals = cmap_data->visuals;
+ ScreenPtr pScreen = cmap_data->pScreen;
+ ColormapPtr cmap = value;
+ int j;
+
+ if (pScreen != cmap->pScreen)
+ return;
+
+ j = cmap->pVisual - pScreen->visuals;
+ cmap->pVisual = &visuals[j];
+}
+
+/* something has realloced the visuals, instead of breaking
+ ABI fix it up here - glx and compsite did this wrong */
+Bool
+ResizeVisualArray(ScreenPtr pScreen, int new_visual_count,
+ DepthPtr depth)
+{
+ struct colormap_lookup_data cdata;
+ int numVisuals;
+ VisualPtr visuals;
+ XID *vids, vid;
+ int first_new_vid, first_new_visual, i;
+
+ first_new_vid = depth->numVids;
+ first_new_visual = pScreen->numVisuals;
+
+ vids = realloc(depth->vids, (depth->numVids + new_visual_count) * sizeof(XID));
+ if (!vids)
+ return FALSE;
+
+ /* its realloced now no going back if we fail the next one */
+ depth->vids = vids;
+
+ numVisuals = pScreen->numVisuals + new_visual_count;
+ visuals = realloc(pScreen->visuals, numVisuals * sizeof(VisualRec));
+ if (!visuals) {
+ return FALSE;
+ }
+
+ cdata.visuals = visuals;
+ cdata.pScreen = pScreen;
+ FindClientResourcesByType(serverClient, RT_COLORMAP, _colormap_find_resource, &cdata);
+
+ pScreen->visuals = visuals;
+
+ for (i = 0; i < new_visual_count; i++) {
+ vid = FakeClientID(0);
+ pScreen->visuals[first_new_visual + i].vid = vid;
+ vids[first_new_vid + i] = vid;
+ }
+
+ depth->numVids += new_visual_count;
+ pScreen->numVisuals += new_visual_count;
+
+ return TRUE;
+}
diff --git a/xorg-server/dix/dixfonts.c b/xorg-server/dix/dixfonts.c
index d8f15290b..fbac124da 100644
--- a/xorg-server/dix/dixfonts.c
+++ b/xorg-server/dix/dixfonts.c
@@ -66,16 +66,10 @@ Equipment Corporation.
#include "dixfont.h"
#include "xace.h"
-#ifdef DEBUG
-#include <stdio.h>
-#endif
-
#ifdef XF86BIGFONT
#include "xf86bigfontsrv.h"
#endif
-#define QUERYCHARINFO(pci, pr) *(pr) = (pci)->metrics
-
extern pointer fosNaturalParams;
extern FontPtr defaultFont;
@@ -391,14 +385,6 @@ OpenFont(ClientPtr client, XID fid, Mask flags, unsigned lenfname, char *pfontna
int i;
FontPtr cached = (FontPtr)0;
-#ifdef FONTDEBUG
- char *f;
- f = malloc(lenfname + 1);
- memmove(f, pfontname, lenfname);
- f[lenfname] = '\0';
- ErrorF("[dix] OpenFont: fontname is \"%s\"\n", f);
- free(f);
-#endif
if (!lenfname || lenfname > XLFDMAXFONTNAMELEN)
return BadName;
if (patternCache)
@@ -1829,8 +1815,10 @@ SetDefaultFontPath(char *path)
/* get enough for string, plus values -- use up commas */
len = strlen(temp_path) + 1;
nump = cp = newpath = malloc(len);
- if (!newpath)
+ if (!newpath) {
+ free(temp_path);
return BadAlloc;
+ }
pp = (unsigned char *) temp_path;
cp++;
while (*pp) {
diff --git a/xorg-server/dix/eventconvert.c b/xorg-server/dix/eventconvert.c
index d5ac54796..a5fe0a9cc 100644
--- a/xorg-server/dix/eventconvert.c
+++ b/xorg-server/dix/eventconvert.c
@@ -1,770 +1,767 @@
-/*
- * Copyright © 2009 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- */
-
-/**
- * @file eventconvert.c
- * This file contains event conversion routines from InternalEvent to the
- * matching protocol events.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdint.h>
-#include <X11/X.h>
-#include <X11/extensions/XIproto.h>
-#include <X11/extensions/XI2proto.h>
-#include <X11/extensions/XI.h>
-#include <X11/extensions/XI2.h>
-
-#include "dix.h"
-#include "inputstr.h"
-#include "misc.h"
-#include "eventstr.h"
-#include "exglobals.h"
-#include "eventconvert.h"
-#include "xiquerydevice.h"
-#include "xkbsrv.h"
-
-
-static int countValuators(DeviceEvent *ev, int *first);
-static int getValuatorEvents(DeviceEvent *ev, deviceValuator *xv);
-static int eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count);
-static int eventToDeviceChanged(DeviceChangedEvent *ev, xEvent **dcce);
-static int eventToDeviceEvent(DeviceEvent *ev, xEvent **xi);
-static int eventToRawEvent(RawDeviceEvent *ev, xEvent **xi);
-
-/* Do not use, read comments below */
-BOOL EventIsKeyRepeat(xEvent *event);
-
-/**
- * Hack to allow detectable autorepeat for core and XI1 events.
- * The sequence number is unused until we send to the client and can be
- * misused to store data. More or less, anyway.
- *
- * Do not use this. It may change any time without warning, eat your babies
- * and piss on your cat.
- */
-static void
-EventSetKeyRepeatFlag(xEvent *event, BOOL on)
-{
- event->u.u.sequenceNumber = on;
-}
-
-/**
- * Check if the event was marked as a repeat event before.
- * NOTE: This is a nasty hack and should NOT be used by anyone else but
- * TryClientEvents.
- */
-BOOL
-EventIsKeyRepeat(xEvent *event)
-{
- return !!event->u.u.sequenceNumber;
-}
-
-/**
- * Convert the given event to the respective core event.
- *
- * Return values:
- * Success ... core contains the matching core event.
- * BadValue .. One or more values in the internal event are invalid.
- * BadMatch .. The event has no core equivalent.
- *
- * @param[in] event The event to convert into a core event.
- * @param[in] core The memory location to store the core event at.
- * @return Success or the matching error code.
- */
-int
-EventToCore(InternalEvent *event, xEvent **core_out, int *count_out)
-{
- xEvent *core = NULL;
- int count = 0;
- int ret = BadImplementation;
-
- switch(event->any.type)
- {
- case ET_Motion:
- {
- DeviceEvent *e = &event->device_event;
- /* Don't create core motion event if neither x nor y are
- * present */
- if (!BitIsOn(e->valuators.mask, 0) &&
- !BitIsOn(e->valuators.mask, 1))
- {
- ret = BadMatch;
- goto out;
- }
- }
- /* fallthrough */
- case ET_ButtonPress:
- case ET_ButtonRelease:
- case ET_KeyPress:
- case ET_KeyRelease:
- {
- DeviceEvent *e = &event->device_event;
-
- if (e->detail.key > 0xFF)
- {
- ret = BadMatch;
- goto out;
- }
-
- core = calloc(1, sizeof(*core));
- if (!core)
- return BadAlloc;
- count = 1;
- core->u.u.type = e->type - ET_KeyPress + KeyPress;
- core->u.u.detail = e->detail.key & 0xFF;
- core->u.keyButtonPointer.time = e->time;
- core->u.keyButtonPointer.rootX = e->root_x;
- core->u.keyButtonPointer.rootY = e->root_y;
- core->u.keyButtonPointer.state = e->corestate;
- core->u.keyButtonPointer.root = e->root;
- EventSetKeyRepeatFlag(core,
- (e->type == ET_KeyPress &&
- e->key_repeat));
- ret = Success;
- }
- break;
- case ET_ProximityIn:
- case ET_ProximityOut:
- case ET_RawKeyPress:
- case ET_RawKeyRelease:
- case ET_RawButtonPress:
- case ET_RawButtonRelease:
- case ET_RawMotion:
- ret = BadMatch;
- goto out;
- default:
- /* XXX: */
- ErrorF("[dix] EventToCore: Not implemented yet \n");
- ret = BadImplementation;
- }
-
-out:
- *core_out = core;
- *count_out = count;
- return ret;
-}
-
-/**
- * Convert the given event to the respective XI 1.x event and store it in
- * xi. xi is allocated on demand and must be freed by the caller.
- * count returns the number of events in xi. If count is 1, and the type of
- * xi is GenericEvent, then xi may be larger than 32 bytes.
- *
- * Return values:
- * Success ... core contains the matching core event.
- * BadValue .. One or more values in the internal event are invalid.
- * BadMatch .. The event has no XI equivalent.
- *
- * @param[in] ev The event to convert into an XI 1 event.
- * @param[out] xi Future memory location for the XI event.
- * @param[out] count Number of elements in xi.
- *
- * @return Success or the error code.
- */
-int
-EventToXI(InternalEvent *ev, xEvent **xi, int *count)
-{
- switch (ev->any.type)
- {
- case ET_Motion:
- case ET_ButtonPress:
- case ET_ButtonRelease:
- case ET_KeyPress:
- case ET_KeyRelease:
- case ET_ProximityIn:
- case ET_ProximityOut:
- return eventToKeyButtonPointer(&ev->device_event, xi, count);
- case ET_DeviceChanged:
- case ET_RawKeyPress:
- case ET_RawKeyRelease:
- case ET_RawButtonPress:
- case ET_RawButtonRelease:
- case ET_RawMotion:
- *count = 0;
- *xi = NULL;
- return BadMatch;
- default:
- break;
- }
-
- ErrorF("[dix] EventToXI: Not implemented for %d \n", ev->any.type);
- return BadImplementation;
-}
-
-/**
- * Convert the given event to the respective XI 2.x event and store it in xi.
- * xi is allocated on demand and must be freed by the caller.
- *
- * Return values:
- * Success ... core contains the matching core event.
- * BadValue .. One or more values in the internal event are invalid.
- * BadMatch .. The event has no XI2 equivalent.
- *
- * @param[in] ev The event to convert into an XI2 event
- * @param[out] xi Future memory location for the XI2 event.
- *
- * @return Success or the error code.
- */
-int
-EventToXI2(InternalEvent *ev, xEvent **xi)
-{
- switch (ev->any.type)
- {
- /* Enter/FocusIn are for grabs. We don't need an actual event, since
- * the real events delivered are triggered elsewhere */
- case ET_Enter:
- case ET_FocusIn:
- *xi = NULL;
- return Success;
- case ET_Motion:
- case ET_ButtonPress:
- case ET_ButtonRelease:
- case ET_KeyPress:
- case ET_KeyRelease:
- return eventToDeviceEvent(&ev->device_event, xi);
- case ET_ProximityIn:
- case ET_ProximityOut:
- *xi = NULL;
- return BadMatch;
- case ET_DeviceChanged:
- return eventToDeviceChanged(&ev->changed_event, xi);
- case ET_RawKeyPress:
- case ET_RawKeyRelease:
- case ET_RawButtonPress:
- case ET_RawButtonRelease:
- case ET_RawMotion:
- return eventToRawEvent(&ev->raw_event, xi);
- default:
- break;
- }
-
- ErrorF("[dix] EventToXI2: Not implemented for %d \n", ev->any.type);
- return BadImplementation;
-}
-
-static int
-eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count)
-{
- int num_events;
- int first; /* dummy */
- deviceKeyButtonPointer *kbp;
-
- /* Sorry, XI 1.x protocol restrictions. */
- if (ev->detail.button > 0xFF || ev->deviceid >= 0x80)
- {
- *count = 0;
- return Success;
- }
-
- num_events = (countValuators(ev, &first) + 5)/6; /* valuator ev */
- if (num_events <= 0)
- {
- switch (ev->type)
- {
- case ET_KeyPress:
- case ET_KeyRelease:
- case ET_ButtonPress:
- case ET_ButtonRelease:
- /* no axes is ok */
- break;
- case ET_Motion:
- case ET_ProximityIn:
- case ET_ProximityOut:
- *count = 0;
- return BadMatch;
- default:
- *count = 0;
- return BadImplementation;
- }
- }
-
- num_events++; /* the actual event event */
-
- *xi = calloc(num_events, sizeof(xEvent));
- if (!(*xi))
- {
- return BadAlloc;
- }
-
- kbp = (deviceKeyButtonPointer*)(*xi);
- kbp->detail = ev->detail.button;
- kbp->time = ev->time;
- kbp->root = ev->root;
- kbp->root_x = ev->root_x;
- kbp->root_y = ev->root_y;
- kbp->deviceid = ev->deviceid;
- kbp->state = ev->corestate;
- EventSetKeyRepeatFlag((xEvent*)kbp,
- (ev->type == ET_KeyPress && ev->key_repeat));
-
- if (num_events > 1)
- kbp->deviceid |= MORE_EVENTS;
-
- switch(ev->type)
- {
- case ET_Motion: kbp->type = DeviceMotionNotify; break;
- case ET_ButtonPress: kbp->type = DeviceButtonPress; break;
- case ET_ButtonRelease: kbp->type = DeviceButtonRelease; break;
- case ET_KeyPress: kbp->type = DeviceKeyPress; break;
- case ET_KeyRelease: kbp->type = DeviceKeyRelease; break;
- case ET_ProximityIn: kbp->type = ProximityIn; break;
- case ET_ProximityOut: kbp->type = ProximityOut; break;
- default:
- break;
- }
-
- if (num_events > 1)
- {
- getValuatorEvents(ev, (deviceValuator*)(kbp + 1));
- }
-
- *count = num_events;
- return Success;
-}
-
-
-/**
- * Set first to the first valuator in the event ev and return the number of
- * valuators from first to the last set valuator.
- */
-static int
-countValuators(DeviceEvent *ev, int *first)
-{
- int first_valuator = -1, last_valuator = -1, num_valuators = 0;
- int i;
-
- for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
- {
- if (BitIsOn(ev->valuators.mask, i))
- {
- if (first_valuator == -1)
- first_valuator = i;
- last_valuator = i;
- }
- }
-
- if (first_valuator != -1)
- {
- num_valuators = last_valuator - first_valuator + 1;
- *first = first_valuator;
- }
-
- return num_valuators;
-}
-
-static int
-getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
-{
- int i;
- int state = 0;
- int first_valuator, num_valuators;
-
-
- num_valuators = countValuators(ev, &first_valuator);
- if (num_valuators > 0)
- {
- DeviceIntPtr dev = NULL;
- dixLookupDevice(&dev, ev->deviceid, serverClient, DixUseAccess);
- /* State needs to be assembled BEFORE the device is updated. */
- state = (dev && dev->key) ? XkbStateFieldFromRec(&dev->key->xkbInfo->state) : 0;
- state |= (dev && dev->button) ? (dev->button->state) : 0;
- }
-
- /* FIXME: non-continuous valuator data in internal events*/
- for (i = 0; i < num_valuators; i += 6, xv++) {
- xv->type = DeviceValuator;
- xv->first_valuator = first_valuator + i;
- xv->num_valuators = ((num_valuators - i) > 6) ? 6 : (num_valuators - i);
- xv->deviceid = ev->deviceid;
- xv->device_state = state;
- switch (xv->num_valuators) {
- case 6:
- xv->valuator5 = ev->valuators.data[xv->first_valuator + 5];
- case 5:
- xv->valuator4 = ev->valuators.data[xv->first_valuator + 4];
- case 4:
- xv->valuator3 = ev->valuators.data[xv->first_valuator + 3];
- case 3:
- xv->valuator2 = ev->valuators.data[xv->first_valuator + 2];
- case 2:
- xv->valuator1 = ev->valuators.data[xv->first_valuator + 1];
- case 1:
- xv->valuator0 = ev->valuators.data[xv->first_valuator + 0];
- }
-
- if (i + 6 < num_valuators)
- xv->deviceid |= MORE_EVENTS;
- }
-
- return (num_valuators + 5) / 6;
-}
-
-
-static int
-appendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
-{
- uint32_t *kc;
- int i;
-
- info->type = XIKeyClass;
- info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
- info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
- info->sourceid = dce->sourceid;
-
- kc = (uint32_t*)&info[1];
- for (i = 0; i < info->num_keycodes; i++)
- *kc++ = i + dce->keys.min_keycode;
-
- return info->length * 4;
-}
-
-static int
-appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
-{
- unsigned char *bits;
- int mask_len;
-
- mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
-
- info->type = XIButtonClass;
- info->num_buttons = dce->buttons.num_buttons;
- info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
- info->num_buttons + mask_len;
- info->sourceid = dce->sourceid;
-
- bits = (unsigned char*)&info[1];
- memset(bits, 0, mask_len * 4);
- /* FIXME: is_down? */
-
- bits += mask_len * 4;
- memcpy(bits, dce->buttons.names, dce->buttons.num_buttons * sizeof(Atom));
-
- return info->length * 4;
-}
-
-static int
-appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
-{
- info->type = XIValuatorClass;
- info->length = sizeof(xXIValuatorInfo)/4;
- info->label = dce->valuators[axisnumber].name;
- info->min.integral = dce->valuators[axisnumber].min;
- info->min.frac = 0;
- info->max.integral = dce->valuators[axisnumber].max;
- info->max.frac = 0;
- /* FIXME: value */
- info->value.integral = 0;
- info->value.frac = 0;
- info->resolution = dce->valuators[axisnumber].resolution;
- info->number = axisnumber;
- info->mode = dce->valuators[axisnumber].mode;
- info->sourceid = dce->sourceid;
-
- return info->length * 4;
-}
-
-static int
-eventToDeviceChanged(DeviceChangedEvent *dce, xEvent **xi)
-{
- xXIDeviceChangedEvent *dcce;
- int len = sizeof(xXIDeviceChangedEvent);
- int nkeys;
- char *ptr;
-
- if (dce->buttons.num_buttons)
- {
- len += sizeof(xXIButtonInfo);
- len += dce->buttons.num_buttons * sizeof(Atom); /* button names */
- len += pad_to_int32(bits_to_bytes(dce->buttons.num_buttons));
- }
- if (dce->num_valuators)
- len += sizeof(xXIValuatorInfo) * dce->num_valuators;
-
- nkeys = (dce->keys.max_keycode > 0) ?
- dce->keys.max_keycode - dce->keys.min_keycode + 1 : 0;
- if (nkeys > 0)
- {
- len += sizeof(xXIKeyInfo);
- len += sizeof(CARD32) * nkeys; /* keycodes */
- }
-
- dcce = calloc(1, len);
- if (!dcce)
- {
- ErrorF("[Xi] BadAlloc in SendDeviceChangedEvent.\n");
- return BadAlloc;
- }
-
- dcce->type = GenericEvent;
- dcce->extension = IReqCode;
- dcce->evtype = XI_DeviceChanged;
- dcce->time = dce->time;
- dcce->deviceid = dce->deviceid;
- dcce->sourceid = dce->sourceid;
- dcce->reason = (dce->flags & DEVCHANGE_DEVICE_CHANGE) ? XIDeviceChange : XISlaveSwitch;
- dcce->num_classes = 0;
- dcce->length = bytes_to_int32(len - sizeof(xEvent));
-
- ptr = (char*)&dcce[1];
- if (dce->buttons.num_buttons)
- {
- dcce->num_classes++;
- ptr += appendButtonInfo(dce, (xXIButtonInfo*)ptr);
- }
-
- if (nkeys)
- {
- dcce->num_classes++;
- ptr += appendKeyInfo(dce, (xXIKeyInfo*)ptr);
- }
-
- if (dce->num_valuators)
- {
- int i;
-
- dcce->num_classes += dce->num_valuators;
- for (i = 0; i < dce->num_valuators; i++)
- ptr += appendValuatorInfo(dce, (xXIValuatorInfo*)ptr, i);
- }
-
- *xi = (xEvent*)dcce;
-
- return Success;
-}
-
-static int count_bits(unsigned char* ptr, int len)
-{
- int bits = 0;
- unsigned int i;
- unsigned char x;
-
- for (i = 0; i < len; i++)
- {
- x = ptr[i];
- while(x > 0)
- {
- bits += (x & 0x1);
- x >>= 1;
- }
- }
- return bits;
-}
-
-static int
-eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
-{
- int len = sizeof(xXIDeviceEvent);
- xXIDeviceEvent *xde;
- int i, btlen, vallen;
- char *ptr;
- FP3232 *axisval;
-
- /* FIXME: this should just send the buttons we have, not MAX_BUTTONs. Same
- * with MAX_VALUATORS below */
- /* btlen is in 4 byte units */
- btlen = bytes_to_int32(bits_to_bytes(MAX_BUTTONS));
- len += btlen * 4; /* buttonmask len */
-
-
- vallen = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask)/sizeof(ev->valuators.mask[0]));
- len += vallen * 2 * sizeof(uint32_t); /* axisvalues */
- vallen = bytes_to_int32(bits_to_bytes(MAX_VALUATORS));
- len += vallen * 4; /* valuators mask */
-
- *xi = calloc(1, len);
- xde = (xXIDeviceEvent*)*xi;
- xde->type = GenericEvent;
- xde->extension = IReqCode;
- xde->evtype = GetXI2Type((InternalEvent*)ev);
- xde->time = ev->time;
- xde->length = bytes_to_int32(len - sizeof(xEvent));
- xde->detail = ev->detail.button;
- xde->root = ev->root;
- xde->buttons_len = btlen;
- xde->valuators_len = vallen;
- xde->deviceid = ev->deviceid;
- xde->sourceid = ev->sourceid;
- xde->root_x = FP1616(ev->root_x, ev->root_x_frac);
- xde->root_y = FP1616(ev->root_y, ev->root_y_frac);
-
- if (ev->key_repeat)
- xde->flags |= XIKeyRepeat;
-
- xde->mods.base_mods = ev->mods.base;
- xde->mods.latched_mods = ev->mods.latched;
- xde->mods.locked_mods = ev->mods.locked;
- xde->mods.effective_mods = ev->mods.effective;
-
- xde->group.base_group = ev->group.base;
- xde->group.latched_group = ev->group.latched;
- xde->group.locked_group = ev->group.locked;
- xde->group.effective_group = ev->group.effective;
-
- ptr = (char*)&xde[1];
- for (i = 0; i < sizeof(ev->buttons) * 8; i++)
- {
- if (BitIsOn(ev->buttons, i))
- SetBit(ptr, i);
- }
-
- ptr += xde->buttons_len * 4;
- axisval = (FP3232*)(ptr + xde->valuators_len * 4);
- for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
- {
- if (BitIsOn(ev->valuators.mask, i))
- {
- SetBit(ptr, i);
- axisval->integral = ev->valuators.data[i];
- axisval->frac = ev->valuators.data_frac[i];
- axisval++;
- }
- }
-
- return Success;
-}
-
-static int
-eventToRawEvent(RawDeviceEvent *ev, xEvent **xi)
-{
- xXIRawEvent* raw;
- int vallen, nvals;
- int i, len = sizeof(xXIRawEvent);
- char *ptr;
- FP3232 *axisval;
-
- nvals = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask));
- len += nvals * sizeof(FP3232) * 2; /* 8 byte per valuator, once
- raw, once processed */
- vallen = bytes_to_int32(bits_to_bytes(MAX_VALUATORS));
- len += vallen * 4; /* valuators mask */
-
- *xi = calloc(1, len);
- raw = (xXIRawEvent*)*xi;
- raw->type = GenericEvent;
- raw->extension = IReqCode;
- raw->evtype = GetXI2Type((InternalEvent*)ev);
- raw->time = ev->time;
- raw->length = bytes_to_int32(len - sizeof(xEvent));
- raw->detail = ev->detail.button;
- raw->deviceid = ev->deviceid;
- raw->valuators_len = vallen;
-
- ptr = (char*)&raw[1];
- axisval = (FP3232*)(ptr + raw->valuators_len * 4);
- for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
- {
- if (BitIsOn(ev->valuators.mask, i))
- {
- SetBit(ptr, i);
- axisval->integral = ev->valuators.data[i];
- axisval->frac = ev->valuators.data_frac[i];
- (axisval + nvals)->integral = ev->valuators.data_raw[i];
- (axisval + nvals)->frac = ev->valuators.data_raw_frac[i];
- axisval++;
- }
- }
-
- return Success;
-}
-
-/**
- * Return the corresponding core type for the given event or 0 if no core
- * equivalent exists.
- */
-int
-GetCoreType(InternalEvent *event)
-{
- int coretype = 0;
- switch(event->any.type)
- {
- case ET_Motion: coretype = MotionNotify; break;
- case ET_ButtonPress: coretype = ButtonPress; break;
- case ET_ButtonRelease: coretype = ButtonRelease; break;
- case ET_KeyPress: coretype = KeyPress; break;
- case ET_KeyRelease: coretype = KeyRelease; break;
- default:
- break;
- }
- return coretype;
-}
-
-/**
- * Return the corresponding XI 1.x type for the given event or 0 if no
- * equivalent exists.
- */
-int
-GetXIType(InternalEvent *event)
-{
- int xitype = 0;
- switch(event->any.type)
- {
- case ET_Motion: xitype = DeviceMotionNotify; break;
- case ET_ButtonPress: xitype = DeviceButtonPress; break;
- case ET_ButtonRelease: xitype = DeviceButtonRelease; break;
- case ET_KeyPress: xitype = DeviceKeyPress; break;
- case ET_KeyRelease: xitype = DeviceKeyRelease; break;
- case ET_ProximityIn: xitype = ProximityIn; break;
- case ET_ProximityOut: xitype = ProximityOut; break;
- default:
- break;
- }
- return xitype;
-}
-
-/**
- * Return the corresponding XI 2.x type for the given event or 0 if no
- * equivalent exists.
- */
-int
-GetXI2Type(InternalEvent *event)
-{
- int xi2type = 0;
-
- switch(event->any.type)
- {
- case ET_Motion: xi2type = XI_Motion; break;
- case ET_ButtonPress: xi2type = XI_ButtonPress; break;
- case ET_ButtonRelease: xi2type = XI_ButtonRelease; break;
- case ET_KeyPress: xi2type = XI_KeyPress; break;
- case ET_KeyRelease: xi2type = XI_KeyRelease; break;
- case ET_Enter: xi2type = XI_Enter; break;
- case ET_Leave: xi2type = XI_Leave; break;
- case ET_Hierarchy: xi2type = XI_HierarchyChanged; break;
- case ET_DeviceChanged: xi2type = XI_DeviceChanged; break;
- case ET_RawKeyPress: xi2type = XI_RawKeyPress; break;
- case ET_RawKeyRelease: xi2type = XI_RawKeyRelease; break;
- case ET_RawButtonPress: xi2type = XI_RawButtonPress; break;
- case ET_RawButtonRelease: xi2type = XI_RawButtonRelease; break;
- case ET_RawMotion: xi2type = XI_RawMotion; break;
- case ET_FocusIn: xi2type = XI_FocusIn; break;
- case ET_FocusOut: xi2type = XI_FocusOut; break;
- default:
- break;
- }
- return xi2type;
-}
+/*
+ * Copyright © 2009 Red Hat, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ */
+
+/**
+ * @file eventconvert.c
+ * This file contains event conversion routines from InternalEvent to the
+ * matching protocol events.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdint.h>
+#include <X11/X.h>
+#include <X11/extensions/XIproto.h>
+#include <X11/extensions/XI2proto.h>
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XI2.h>
+
+#include "dix.h"
+#include "inputstr.h"
+#include "misc.h"
+#include "eventstr.h"
+#include "exglobals.h"
+#include "eventconvert.h"
+#include "xiquerydevice.h"
+#include "xkbsrv.h"
+
+
+static int countValuators(DeviceEvent *ev, int *first);
+static int getValuatorEvents(DeviceEvent *ev, deviceValuator *xv);
+static int eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count);
+static int eventToDeviceChanged(DeviceChangedEvent *ev, xEvent **dcce);
+static int eventToDeviceEvent(DeviceEvent *ev, xEvent **xi);
+static int eventToRawEvent(RawDeviceEvent *ev, xEvent **xi);
+
+/* Do not use, read comments below */
+BOOL EventIsKeyRepeat(xEvent *event);
+
+/**
+ * Hack to allow detectable autorepeat for core and XI1 events.
+ * The sequence number is unused until we send to the client and can be
+ * misused to store data. More or less, anyway.
+ *
+ * Do not use this. It may change any time without warning, eat your babies
+ * and piss on your cat.
+ */
+static void
+EventSetKeyRepeatFlag(xEvent *event, BOOL on)
+{
+ event->u.u.sequenceNumber = on;
+}
+
+/**
+ * Check if the event was marked as a repeat event before.
+ * NOTE: This is a nasty hack and should NOT be used by anyone else but
+ * TryClientEvents.
+ */
+BOOL
+EventIsKeyRepeat(xEvent *event)
+{
+ return !!event->u.u.sequenceNumber;
+}
+
+/**
+ * Convert the given event to the respective core event.
+ *
+ * Return values:
+ * Success ... core contains the matching core event.
+ * BadValue .. One or more values in the internal event are invalid.
+ * BadMatch .. The event has no core equivalent.
+ *
+ * @param[in] event The event to convert into a core event.
+ * @param[in] core The memory location to store the core event at.
+ * @return Success or the matching error code.
+ */
+int
+EventToCore(InternalEvent *event, xEvent **core_out, int *count_out)
+{
+ xEvent *core = NULL;
+ int count = 0;
+ int ret = BadImplementation;
+
+ switch(event->any.type)
+ {
+ case ET_Motion:
+ {
+ DeviceEvent *e = &event->device_event;
+ /* Don't create core motion event if neither x nor y are
+ * present */
+ if (!BitIsOn(e->valuators.mask, 0) &&
+ !BitIsOn(e->valuators.mask, 1))
+ {
+ ret = BadMatch;
+ goto out;
+ }
+ }
+ /* fallthrough */
+ case ET_ButtonPress:
+ case ET_ButtonRelease:
+ case ET_KeyPress:
+ case ET_KeyRelease:
+ {
+ DeviceEvent *e = &event->device_event;
+
+ if (e->detail.key > 0xFF)
+ {
+ ret = BadMatch;
+ goto out;
+ }
+
+ core = calloc(1, sizeof(*core));
+ if (!core)
+ return BadAlloc;
+ count = 1;
+ core->u.u.type = e->type - ET_KeyPress + KeyPress;
+ core->u.u.detail = e->detail.key & 0xFF;
+ core->u.keyButtonPointer.time = e->time;
+ core->u.keyButtonPointer.rootX = e->root_x;
+ core->u.keyButtonPointer.rootY = e->root_y;
+ core->u.keyButtonPointer.state = e->corestate;
+ core->u.keyButtonPointer.root = e->root;
+ EventSetKeyRepeatFlag(core,
+ (e->type == ET_KeyPress &&
+ e->key_repeat));
+ ret = Success;
+ }
+ break;
+ case ET_ProximityIn:
+ case ET_ProximityOut:
+ case ET_RawKeyPress:
+ case ET_RawKeyRelease:
+ case ET_RawButtonPress:
+ case ET_RawButtonRelease:
+ case ET_RawMotion:
+ ret = BadMatch;
+ goto out;
+ default:
+ /* XXX: */
+ ErrorF("[dix] EventToCore: Not implemented yet \n");
+ ret = BadImplementation;
+ }
+
+out:
+ *core_out = core;
+ *count_out = count;
+ return ret;
+}
+
+/**
+ * Convert the given event to the respective XI 1.x event and store it in
+ * xi. xi is allocated on demand and must be freed by the caller.
+ * count returns the number of events in xi. If count is 1, and the type of
+ * xi is GenericEvent, then xi may be larger than 32 bytes.
+ *
+ * Return values:
+ * Success ... core contains the matching core event.
+ * BadValue .. One or more values in the internal event are invalid.
+ * BadMatch .. The event has no XI equivalent.
+ *
+ * @param[in] ev The event to convert into an XI 1 event.
+ * @param[out] xi Future memory location for the XI event.
+ * @param[out] count Number of elements in xi.
+ *
+ * @return Success or the error code.
+ */
+int
+EventToXI(InternalEvent *ev, xEvent **xi, int *count)
+{
+ switch (ev->any.type)
+ {
+ case ET_Motion:
+ case ET_ButtonPress:
+ case ET_ButtonRelease:
+ case ET_KeyPress:
+ case ET_KeyRelease:
+ case ET_ProximityIn:
+ case ET_ProximityOut:
+ return eventToKeyButtonPointer(&ev->device_event, xi, count);
+ case ET_DeviceChanged:
+ case ET_RawKeyPress:
+ case ET_RawKeyRelease:
+ case ET_RawButtonPress:
+ case ET_RawButtonRelease:
+ case ET_RawMotion:
+ *count = 0;
+ *xi = NULL;
+ return BadMatch;
+ default:
+ break;
+ }
+
+ ErrorF("[dix] EventToXI: Not implemented for %d \n", ev->any.type);
+ return BadImplementation;
+}
+
+/**
+ * Convert the given event to the respective XI 2.x event and store it in xi.
+ * xi is allocated on demand and must be freed by the caller.
+ *
+ * Return values:
+ * Success ... core contains the matching core event.
+ * BadValue .. One or more values in the internal event are invalid.
+ * BadMatch .. The event has no XI2 equivalent.
+ *
+ * @param[in] ev The event to convert into an XI2 event
+ * @param[out] xi Future memory location for the XI2 event.
+ *
+ * @return Success or the error code.
+ */
+int
+EventToXI2(InternalEvent *ev, xEvent **xi)
+{
+ switch (ev->any.type)
+ {
+ /* Enter/FocusIn are for grabs. We don't need an actual event, since
+ * the real events delivered are triggered elsewhere */
+ case ET_Enter:
+ case ET_FocusIn:
+ *xi = NULL;
+ return Success;
+ case ET_Motion:
+ case ET_ButtonPress:
+ case ET_ButtonRelease:
+ case ET_KeyPress:
+ case ET_KeyRelease:
+ return eventToDeviceEvent(&ev->device_event, xi);
+ case ET_ProximityIn:
+ case ET_ProximityOut:
+ *xi = NULL;
+ return BadMatch;
+ case ET_DeviceChanged:
+ return eventToDeviceChanged(&ev->changed_event, xi);
+ case ET_RawKeyPress:
+ case ET_RawKeyRelease:
+ case ET_RawButtonPress:
+ case ET_RawButtonRelease:
+ case ET_RawMotion:
+ return eventToRawEvent(&ev->raw_event, xi);
+ default:
+ break;
+ }
+
+ ErrorF("[dix] EventToXI2: Not implemented for %d \n", ev->any.type);
+ return BadImplementation;
+}
+
+static int
+eventToKeyButtonPointer(DeviceEvent *ev, xEvent **xi, int *count)
+{
+ int num_events;
+ int first; /* dummy */
+ deviceKeyButtonPointer *kbp;
+
+ /* Sorry, XI 1.x protocol restrictions. */
+ if (ev->detail.button > 0xFF || ev->deviceid >= 0x80)
+ {
+ *count = 0;
+ return Success;
+ }
+
+ num_events = (countValuators(ev, &first) + 5)/6; /* valuator ev */
+ if (num_events <= 0)
+ {
+ switch (ev->type)
+ {
+ case ET_KeyPress:
+ case ET_KeyRelease:
+ case ET_ButtonPress:
+ case ET_ButtonRelease:
+ /* no axes is ok */
+ break;
+ case ET_Motion:
+ case ET_ProximityIn:
+ case ET_ProximityOut:
+ *count = 0;
+ return BadMatch;
+ default:
+ *count = 0;
+ return BadImplementation;
+ }
+ }
+
+ num_events++; /* the actual event event */
+
+ *xi = calloc(num_events, sizeof(xEvent));
+ if (!(*xi))
+ {
+ return BadAlloc;
+ }
+
+ kbp = (deviceKeyButtonPointer*)(*xi);
+ kbp->detail = ev->detail.button;
+ kbp->time = ev->time;
+ kbp->root = ev->root;
+ kbp->root_x = ev->root_x;
+ kbp->root_y = ev->root_y;
+ kbp->deviceid = ev->deviceid;
+ kbp->state = ev->corestate;
+ EventSetKeyRepeatFlag((xEvent*)kbp,
+ (ev->type == ET_KeyPress && ev->key_repeat));
+
+ if (num_events > 1)
+ kbp->deviceid |= MORE_EVENTS;
+
+ switch(ev->type)
+ {
+ case ET_Motion: kbp->type = DeviceMotionNotify; break;
+ case ET_ButtonPress: kbp->type = DeviceButtonPress; break;
+ case ET_ButtonRelease: kbp->type = DeviceButtonRelease; break;
+ case ET_KeyPress: kbp->type = DeviceKeyPress; break;
+ case ET_KeyRelease: kbp->type = DeviceKeyRelease; break;
+ case ET_ProximityIn: kbp->type = ProximityIn; break;
+ case ET_ProximityOut: kbp->type = ProximityOut; break;
+ default:
+ break;
+ }
+
+ if (num_events > 1)
+ {
+ getValuatorEvents(ev, (deviceValuator*)(kbp + 1));
+ }
+
+ *count = num_events;
+ return Success;
+}
+
+
+/**
+ * Set first to the first valuator in the event ev and return the number of
+ * valuators from first to the last set valuator.
+ */
+static int
+countValuators(DeviceEvent *ev, int *first)
+{
+ int first_valuator = -1, last_valuator = -1, num_valuators = 0;
+ int i;
+
+ for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
+ {
+ if (BitIsOn(ev->valuators.mask, i))
+ {
+ if (first_valuator == -1)
+ first_valuator = i;
+ last_valuator = i;
+ }
+ }
+
+ if (first_valuator != -1)
+ {
+ num_valuators = last_valuator - first_valuator + 1;
+ *first = first_valuator;
+ }
+
+ return num_valuators;
+}
+
+static int
+getValuatorEvents(DeviceEvent *ev, deviceValuator *xv)
+{
+ int i;
+ int state = 0;
+ int first_valuator, num_valuators;
+ DeviceIntPtr dev = NULL;
+
+
+ num_valuators = countValuators(ev, &first_valuator);
+ if (num_valuators > 0)
+ {
+ dixLookupDevice(&dev, ev->deviceid, serverClient, DixUseAccess);
+ /* State needs to be assembled BEFORE the device is updated. */
+ state = (dev && dev->key) ? XkbStateFieldFromRec(&dev->key->xkbInfo->state) : 0;
+ state |= (dev && dev->button) ? (dev->button->state) : 0;
+ }
+
+ for (i = 0; i < num_valuators; i += 6, xv++) {
+ INT32 *valuators = &xv->valuator0; // Treat all 6 vals as an array
+ int j;
+
+ xv->type = DeviceValuator;
+ xv->first_valuator = first_valuator + i;
+ xv->num_valuators = ((num_valuators - i) > 6) ? 6 : (num_valuators - i);
+ xv->deviceid = ev->deviceid;
+ xv->device_state = state;
+
+ for (j = 0; j < xv->num_valuators; j++) {
+ if (BitIsOn(ev->valuators.mask, xv->first_valuator + j))
+ valuators[j] = ev->valuators.data[xv->first_valuator + j];
+ else if (dev->valuator->axes[xv->first_valuator + j].mode == Absolute)
+ valuators[j] = dev->valuator->axisVal[xv->first_valuator + j];
+ else
+ valuators[j] = 0;
+ }
+
+ if (i + 6 < num_valuators)
+ xv->deviceid |= MORE_EVENTS;
+ }
+
+ return (num_valuators + 5) / 6;
+}
+
+
+static int
+appendKeyInfo(DeviceChangedEvent *dce, xXIKeyInfo* info)
+{
+ uint32_t *kc;
+ int i;
+
+ info->type = XIKeyClass;
+ info->num_keycodes = dce->keys.max_keycode - dce->keys.min_keycode + 1;
+ info->length = sizeof(xXIKeyInfo)/4 + info->num_keycodes;
+ info->sourceid = dce->sourceid;
+
+ kc = (uint32_t*)&info[1];
+ for (i = 0; i < info->num_keycodes; i++)
+ *kc++ = i + dce->keys.min_keycode;
+
+ return info->length * 4;
+}
+
+static int
+appendButtonInfo(DeviceChangedEvent *dce, xXIButtonInfo *info)
+{
+ unsigned char *bits;
+ int mask_len;
+
+ mask_len = bytes_to_int32(bits_to_bytes(dce->buttons.num_buttons));
+
+ info->type = XIButtonClass;
+ info->num_buttons = dce->buttons.num_buttons;
+ info->length = bytes_to_int32(sizeof(xXIButtonInfo)) +
+ info->num_buttons + mask_len;
+ info->sourceid = dce->sourceid;
+
+ bits = (unsigned char*)&info[1];
+ memset(bits, 0, mask_len * 4);
+ /* FIXME: is_down? */
+
+ bits += mask_len * 4;
+ memcpy(bits, dce->buttons.names, dce->buttons.num_buttons * sizeof(Atom));
+
+ return info->length * 4;
+}
+
+static int
+appendValuatorInfo(DeviceChangedEvent *dce, xXIValuatorInfo *info, int axisnumber)
+{
+ info->type = XIValuatorClass;
+ info->length = sizeof(xXIValuatorInfo)/4;
+ info->label = dce->valuators[axisnumber].name;
+ info->min.integral = dce->valuators[axisnumber].min;
+ info->min.frac = 0;
+ info->max.integral = dce->valuators[axisnumber].max;
+ info->max.frac = 0;
+ /* FIXME: value */
+ info->value.integral = 0;
+ info->value.frac = 0;
+ info->resolution = dce->valuators[axisnumber].resolution;
+ info->number = axisnumber;
+ info->mode = dce->valuators[axisnumber].mode;
+ info->sourceid = dce->sourceid;
+
+ return info->length * 4;
+}
+
+static int
+eventToDeviceChanged(DeviceChangedEvent *dce, xEvent **xi)
+{
+ xXIDeviceChangedEvent *dcce;
+ int len = sizeof(xXIDeviceChangedEvent);
+ int nkeys;
+ char *ptr;
+
+ if (dce->buttons.num_buttons)
+ {
+ len += sizeof(xXIButtonInfo);
+ len += dce->buttons.num_buttons * sizeof(Atom); /* button names */
+ len += pad_to_int32(bits_to_bytes(dce->buttons.num_buttons));
+ }
+ if (dce->num_valuators)
+ len += sizeof(xXIValuatorInfo) * dce->num_valuators;
+
+ nkeys = (dce->keys.max_keycode > 0) ?
+ dce->keys.max_keycode - dce->keys.min_keycode + 1 : 0;
+ if (nkeys > 0)
+ {
+ len += sizeof(xXIKeyInfo);
+ len += sizeof(CARD32) * nkeys; /* keycodes */
+ }
+
+ dcce = calloc(1, len);
+ if (!dcce)
+ {
+ ErrorF("[Xi] BadAlloc in SendDeviceChangedEvent.\n");
+ return BadAlloc;
+ }
+
+ dcce->type = GenericEvent;
+ dcce->extension = IReqCode;
+ dcce->evtype = XI_DeviceChanged;
+ dcce->time = dce->time;
+ dcce->deviceid = dce->deviceid;
+ dcce->sourceid = dce->sourceid;
+ dcce->reason = (dce->flags & DEVCHANGE_DEVICE_CHANGE) ? XIDeviceChange : XISlaveSwitch;
+ dcce->num_classes = 0;
+ dcce->length = bytes_to_int32(len - sizeof(xEvent));
+
+ ptr = (char*)&dcce[1];
+ if (dce->buttons.num_buttons)
+ {
+ dcce->num_classes++;
+ ptr += appendButtonInfo(dce, (xXIButtonInfo*)ptr);
+ }
+
+ if (nkeys)
+ {
+ dcce->num_classes++;
+ ptr += appendKeyInfo(dce, (xXIKeyInfo*)ptr);
+ }
+
+ if (dce->num_valuators)
+ {
+ int i;
+
+ dcce->num_classes += dce->num_valuators;
+ for (i = 0; i < dce->num_valuators; i++)
+ ptr += appendValuatorInfo(dce, (xXIValuatorInfo*)ptr, i);
+ }
+
+ *xi = (xEvent*)dcce;
+
+ return Success;
+}
+
+static int count_bits(unsigned char* ptr, int len)
+{
+ int bits = 0;
+ unsigned int i;
+ unsigned char x;
+
+ for (i = 0; i < len; i++)
+ {
+ x = ptr[i];
+ while(x > 0)
+ {
+ bits += (x & 0x1);
+ x >>= 1;
+ }
+ }
+ return bits;
+}
+
+static int
+eventToDeviceEvent(DeviceEvent *ev, xEvent **xi)
+{
+ int len = sizeof(xXIDeviceEvent);
+ xXIDeviceEvent *xde;
+ int i, btlen, vallen;
+ char *ptr;
+ FP3232 *axisval;
+
+ /* FIXME: this should just send the buttons we have, not MAX_BUTTONs. Same
+ * with MAX_VALUATORS below */
+ /* btlen is in 4 byte units */
+ btlen = bytes_to_int32(bits_to_bytes(MAX_BUTTONS));
+ len += btlen * 4; /* buttonmask len */
+
+
+ vallen = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask)/sizeof(ev->valuators.mask[0]));
+ len += vallen * 2 * sizeof(uint32_t); /* axisvalues */
+ vallen = bytes_to_int32(bits_to_bytes(MAX_VALUATORS));
+ len += vallen * 4; /* valuators mask */
+
+ *xi = calloc(1, len);
+ xde = (xXIDeviceEvent*)*xi;
+ xde->type = GenericEvent;
+ xde->extension = IReqCode;
+ xde->evtype = GetXI2Type((InternalEvent*)ev);
+ xde->time = ev->time;
+ xde->length = bytes_to_int32(len - sizeof(xEvent));
+ xde->detail = ev->detail.button;
+ xde->root = ev->root;
+ xde->buttons_len = btlen;
+ xde->valuators_len = vallen;
+ xde->deviceid = ev->deviceid;
+ xde->sourceid = ev->sourceid;
+ xde->root_x = FP1616(ev->root_x, ev->root_x_frac);
+ xde->root_y = FP1616(ev->root_y, ev->root_y_frac);
+
+ if (ev->key_repeat)
+ xde->flags |= XIKeyRepeat;
+
+ xde->mods.base_mods = ev->mods.base;
+ xde->mods.latched_mods = ev->mods.latched;
+ xde->mods.locked_mods = ev->mods.locked;
+ xde->mods.effective_mods = ev->mods.effective;
+
+ xde->group.base_group = ev->group.base;
+ xde->group.latched_group = ev->group.latched;
+ xde->group.locked_group = ev->group.locked;
+ xde->group.effective_group = ev->group.effective;
+
+ ptr = (char*)&xde[1];
+ for (i = 0; i < sizeof(ev->buttons) * 8; i++)
+ {
+ if (BitIsOn(ev->buttons, i))
+ SetBit(ptr, i);
+ }
+
+ ptr += xde->buttons_len * 4;
+ axisval = (FP3232*)(ptr + xde->valuators_len * 4);
+ for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
+ {
+ if (BitIsOn(ev->valuators.mask, i))
+ {
+ SetBit(ptr, i);
+ axisval->integral = ev->valuators.data[i];
+ axisval->frac = ev->valuators.data_frac[i];
+ axisval++;
+ }
+ }
+
+ return Success;
+}
+
+static int
+eventToRawEvent(RawDeviceEvent *ev, xEvent **xi)
+{
+ xXIRawEvent* raw;
+ int vallen, nvals;
+ int i, len = sizeof(xXIRawEvent);
+ char *ptr;
+ FP3232 *axisval;
+
+ nvals = count_bits(ev->valuators.mask, sizeof(ev->valuators.mask));
+ len += nvals * sizeof(FP3232) * 2; /* 8 byte per valuator, once
+ raw, once processed */
+ vallen = bytes_to_int32(bits_to_bytes(MAX_VALUATORS));
+ len += vallen * 4; /* valuators mask */
+
+ *xi = calloc(1, len);
+ raw = (xXIRawEvent*)*xi;
+ raw->type = GenericEvent;
+ raw->extension = IReqCode;
+ raw->evtype = GetXI2Type((InternalEvent*)ev);
+ raw->time = ev->time;
+ raw->length = bytes_to_int32(len - sizeof(xEvent));
+ raw->detail = ev->detail.button;
+ raw->deviceid = ev->deviceid;
+ raw->valuators_len = vallen;
+
+ ptr = (char*)&raw[1];
+ axisval = (FP3232*)(ptr + raw->valuators_len * 4);
+ for (i = 0; i < sizeof(ev->valuators.mask) * 8; i++)
+ {
+ if (BitIsOn(ev->valuators.mask, i))
+ {
+ SetBit(ptr, i);
+ axisval->integral = ev->valuators.data[i];
+ axisval->frac = ev->valuators.data_frac[i];
+ (axisval + nvals)->integral = ev->valuators.data_raw[i];
+ (axisval + nvals)->frac = ev->valuators.data_raw_frac[i];
+ axisval++;
+ }
+ }
+
+ return Success;
+}
+
+/**
+ * Return the corresponding core type for the given event or 0 if no core
+ * equivalent exists.
+ */
+int
+GetCoreType(InternalEvent *event)
+{
+ int coretype = 0;
+ switch(event->any.type)
+ {
+ case ET_Motion: coretype = MotionNotify; break;
+ case ET_ButtonPress: coretype = ButtonPress; break;
+ case ET_ButtonRelease: coretype = ButtonRelease; break;
+ case ET_KeyPress: coretype = KeyPress; break;
+ case ET_KeyRelease: coretype = KeyRelease; break;
+ default:
+ break;
+ }
+ return coretype;
+}
+
+/**
+ * Return the corresponding XI 1.x type for the given event or 0 if no
+ * equivalent exists.
+ */
+int
+GetXIType(InternalEvent *event)
+{
+ int xitype = 0;
+ switch(event->any.type)
+ {
+ case ET_Motion: xitype = DeviceMotionNotify; break;
+ case ET_ButtonPress: xitype = DeviceButtonPress; break;
+ case ET_ButtonRelease: xitype = DeviceButtonRelease; break;
+ case ET_KeyPress: xitype = DeviceKeyPress; break;
+ case ET_KeyRelease: xitype = DeviceKeyRelease; break;
+ case ET_ProximityIn: xitype = ProximityIn; break;
+ case ET_ProximityOut: xitype = ProximityOut; break;
+ default:
+ break;
+ }
+ return xitype;
+}
+
+/**
+ * Return the corresponding XI 2.x type for the given event or 0 if no
+ * equivalent exists.
+ */
+int
+GetXI2Type(InternalEvent *event)
+{
+ int xi2type = 0;
+
+ switch(event->any.type)
+ {
+ case ET_Motion: xi2type = XI_Motion; break;
+ case ET_ButtonPress: xi2type = XI_ButtonPress; break;
+ case ET_ButtonRelease: xi2type = XI_ButtonRelease; break;
+ case ET_KeyPress: xi2type = XI_KeyPress; break;
+ case ET_KeyRelease: xi2type = XI_KeyRelease; break;
+ case ET_Enter: xi2type = XI_Enter; break;
+ case ET_Leave: xi2type = XI_Leave; break;
+ case ET_Hierarchy: xi2type = XI_HierarchyChanged; break;
+ case ET_DeviceChanged: xi2type = XI_DeviceChanged; break;
+ case ET_RawKeyPress: xi2type = XI_RawKeyPress; break;
+ case ET_RawKeyRelease: xi2type = XI_RawKeyRelease; break;
+ case ET_RawButtonPress: xi2type = XI_RawButtonPress; break;
+ case ET_RawButtonRelease: xi2type = XI_RawButtonRelease; break;
+ case ET_RawMotion: xi2type = XI_RawMotion; break;
+ case ET_FocusIn: xi2type = XI_FocusIn; break;
+ case ET_FocusOut: xi2type = XI_FocusOut; break;
+ default:
+ break;
+ }
+ return xi2type;
+}
diff --git a/xorg-server/dix/extension.c b/xorg-server/dix/extension.c
index b7f5c9c8c..c7bbac5ff 100644
--- a/xorg-server/dix/extension.c
+++ b/xorg-server/dix/extension.c
@@ -1,361 +1,360 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include "misc.h"
-#include "dixstruct.h"
-#include "extnsionst.h"
-#include "gcstruct.h"
-#include "scrnintstr.h"
-#include "dispatch.h"
-#include "privates.h"
-#include "registry.h"
-#include "xace.h"
-
-#define LAST_EVENT 128
-#define LAST_ERROR 255
-
-static ExtensionEntry **extensions = (ExtensionEntry **)NULL;
-
-int lastEvent = EXTENSION_EVENT_BASE;
-static int lastError = FirstExtensionError;
-static unsigned int NumExtensions = 0;
-
-ExtensionEntry *
-AddExtension(char *name, int NumEvents, int NumErrors,
- int (*MainProc)(ClientPtr c1),
- int (*SwappedMainProc)(ClientPtr c2),
- void (*CloseDownProc)(ExtensionEntry *e),
- unsigned short (*MinorOpcodeProc)(ClientPtr c3))
-{
- int i;
- ExtensionEntry *ext, **newexts;
-
- if (!MainProc || !SwappedMainProc || !MinorOpcodeProc)
- return((ExtensionEntry *) NULL);
- if ((lastEvent + NumEvents > LAST_EVENT) ||
- (unsigned)(lastError + NumErrors > LAST_ERROR)) {
- LogMessage(X_ERROR, "Not enabling extension %s: maximum number of "
- "events or errors exceeded.\n", name);
- return((ExtensionEntry *) NULL);
- }
-
- ext = calloc(sizeof (ExtensionEntry), 1);
- if (!ext)
- return NULL;
- if (!dixAllocatePrivates(&ext->devPrivates, PRIVATE_EXTENSION)) {
- free(ext);
- return NULL;
- }
- ext->name = strdup(name);
- ext->num_aliases = 0;
- ext->aliases = (char **)NULL;
- if (!ext->name)
- {
- dixFreePrivates(ext->devPrivates, PRIVATE_EXTENSION);
- free(ext);
- return((ExtensionEntry *) NULL);
- }
- i = NumExtensions;
- newexts = (ExtensionEntry **) realloc(extensions,
- (i + 1) * sizeof(ExtensionEntry *));
- if (!newexts)
- {
- free(ext->name);
- dixFreePrivates(ext->devPrivates, PRIVATE_EXTENSION);
- free(ext);
- return((ExtensionEntry *) NULL);
- }
- NumExtensions++;
- extensions = newexts;
- extensions[i] = ext;
- ext->index = i;
- ext->base = i + EXTENSION_BASE;
- ext->CloseDown = CloseDownProc;
- ext->MinorOpcode = MinorOpcodeProc;
- ProcVector[i + EXTENSION_BASE] = MainProc;
- SwappedProcVector[i + EXTENSION_BASE] = SwappedMainProc;
- if (NumEvents)
- {
- ext->eventBase = lastEvent;
- ext->eventLast = lastEvent + NumEvents;
- lastEvent += NumEvents;
- }
- else
- {
- ext->eventBase = 0;
- ext->eventLast = 0;
- }
- if (NumErrors)
- {
- ext->errorBase = lastError;
- ext->errorLast = lastError + NumErrors;
- lastError += NumErrors;
- }
- else
- {
- ext->errorBase = 0;
- ext->errorLast = 0;
- }
-
- RegisterExtensionNames(ext);
- return ext;
-}
-
-Bool AddExtensionAlias(char *alias, ExtensionEntry *ext)
-{
- char *name;
- char **aliases;
-
- if (!ext)
- return FALSE ;
- aliases = (char **)realloc(ext->aliases,
- (ext->num_aliases + 1) * sizeof(char *));
- if (!aliases)
- return FALSE;
- ext->aliases = aliases;
- name = strdup(alias);
- if (!name)
- return FALSE;
- ext->aliases[ext->num_aliases] = name;
- ext->num_aliases++;
- return TRUE;
-}
-
-static int
-FindExtension(char *extname, int len)
-{
- int i, j;
-
- for (i=0; i<NumExtensions; i++)
- {
- if ((strlen(extensions[i]->name) == len) &&
- !strncmp(extname, extensions[i]->name, len))
- break;
- for (j = extensions[i]->num_aliases; --j >= 0;)
- {
- if ((strlen(extensions[i]->aliases[j]) == len) &&
- !strncmp(extname, extensions[i]->aliases[j], len))
- break;
- }
- if (j >= 0) break;
- }
- return ((i == NumExtensions) ? -1 : i);
-}
-
-/*
- * CheckExtension returns the extensions[] entry for the requested
- * extension name. Maybe this could just return a Bool instead?
- */
-ExtensionEntry *
-CheckExtension(const char *extname)
-{
- int n;
-
- n = FindExtension((char*)extname, strlen(extname));
- if (n != -1)
- return extensions[n];
- else
- return NULL;
-}
-
-/*
- * Added as part of Xace.
- */
-ExtensionEntry *
-GetExtensionEntry(int major)
-{
- if (major < EXTENSION_BASE)
- return NULL;
- major -= EXTENSION_BASE;
- if (major >= NumExtensions)
- return NULL;
- return extensions[major];
-}
-
-unsigned short
-StandardMinorOpcode(ClientPtr client)
-{
- return ((xReq *)client->requestBuffer)->data;
-}
-
-unsigned short
-MinorOpcodeOfRequest(ClientPtr client)
-{
- unsigned char major;
-
- major = ((xReq *)client->requestBuffer)->reqType;
- if (major < EXTENSION_BASE)
- return 0;
- major -= EXTENSION_BASE;
- if (major >= NumExtensions)
- return 0;
- return (*extensions[major]->MinorOpcode)(client);
-}
-
-void
-CloseDownExtensions(void)
-{
- int i,j;
-
- for (i = NumExtensions - 1; i >= 0; i--)
- {
- if (extensions[i]->CloseDown)
- extensions[i]->CloseDown(extensions[i]);
- NumExtensions = i;
- free(extensions[i]->name);
- for (j = extensions[i]->num_aliases; --j >= 0;)
- free(extensions[i]->aliases[j]);
- free(extensions[i]->aliases);
- dixFreePrivates(extensions[i]->devPrivates, PRIVATE_EXTENSION);
- free(extensions[i]);
- }
- free(extensions);
- extensions = (ExtensionEntry **)NULL;
- lastEvent = EXTENSION_EVENT_BASE;
- lastError = FirstExtensionError;
-}
-
-int
-ProcQueryExtension(ClientPtr client)
-{
- xQueryExtensionReply reply;
- int i;
- REQUEST(xQueryExtensionReq);
-
- REQUEST_FIXED_SIZE(xQueryExtensionReq, stuff->nbytes);
-
- memset(&reply, 0, sizeof(xQueryExtensionReply));
- reply.type = X_Reply;
- reply.length = 0;
- reply.major_opcode = 0;
- reply.sequenceNumber = client->sequence;
-
- if ( ! NumExtensions )
- reply.present = xFalse;
- else
- {
- i = FindExtension((char *)&stuff[1], stuff->nbytes);
- if (i < 0 || XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
- reply.present = xFalse;
- else
- {
- reply.present = xTrue;
- reply.major_opcode = extensions[i]->base;
- reply.first_event = extensions[i]->eventBase;
- reply.first_error = extensions[i]->errorBase;
- }
- }
- WriteReplyToClient(client, sizeof(xQueryExtensionReply), &reply);
- return Success;
-}
-
-int
-ProcListExtensions(ClientPtr client)
-{
- xListExtensionsReply reply;
- char *bufptr, *buffer;
- int total_length = 0;
-
- REQUEST_SIZE_MATCH(xReq);
-
- memset(&reply, 0, sizeof(xListExtensionsReply));
- reply.type = X_Reply;
- reply.nExtensions = 0;
- reply.length = 0;
- reply.sequenceNumber = client->sequence;
- buffer = NULL;
-
- if ( NumExtensions )
- {
- int i, j;
-
- for (i=0; i<NumExtensions; i++)
- {
- /* call callbacks to find out whether to show extension */
- if (XaceHook(XACE_EXT_ACCESS, client, extensions[i]) != Success)
- continue;
-
- total_length += strlen(extensions[i]->name) + 1;
- reply.nExtensions += 1 + extensions[i]->num_aliases;
- for (j = extensions[i]->num_aliases; --j >= 0;)
- total_length += strlen(extensions[i]->aliases[j]) + 1;
- }
- reply.length = bytes_to_int32(total_length);
- buffer = bufptr = malloc(total_length);
- if (!buffer)
- return BadAlloc;
- for (i=0; i<NumExtensions; i++)
- {
- int len;
- if (XaceHook(XACE_EXT_ACCESS, client, extensions[i]) != Success)
- continue;
-
- *bufptr++ = len = strlen(extensions[i]->name);
- memmove(bufptr, extensions[i]->name, len);
- bufptr += len;
- for (j = extensions[i]->num_aliases; --j >= 0;)
- {
- *bufptr++ = len = strlen(extensions[i]->aliases[j]);
- memmove(bufptr, extensions[i]->aliases[j], len);
- bufptr += len;
- }
- }
- }
- WriteReplyToClient(client, sizeof(xListExtensionsReply), &reply);
- if (reply.length)
- {
- WriteToClient(client, total_length, buffer);
- free(buffer);
- }
- return Success;
-}
+/***********************************************************
+
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include "misc.h"
+#include "dixstruct.h"
+#include "extnsionst.h"
+#include "gcstruct.h"
+#include "scrnintstr.h"
+#include "dispatch.h"
+#include "privates.h"
+#include "registry.h"
+#include "xace.h"
+
+#define LAST_EVENT 128
+#define LAST_ERROR 255
+
+static ExtensionEntry **extensions = (ExtensionEntry **)NULL;
+
+int lastEvent = EXTENSION_EVENT_BASE;
+static int lastError = FirstExtensionError;
+static unsigned int NumExtensions = 0;
+
+ExtensionEntry *
+AddExtension(char *name, int NumEvents, int NumErrors,
+ int (*MainProc)(ClientPtr c1),
+ int (*SwappedMainProc)(ClientPtr c2),
+ void (*CloseDownProc)(ExtensionEntry *e),
+ unsigned short (*MinorOpcodeProc)(ClientPtr c3))
+{
+ int i;
+ ExtensionEntry *ext, **newexts;
+
+ if (!MainProc || !SwappedMainProc || !MinorOpcodeProc)
+ return((ExtensionEntry *) NULL);
+ if ((lastEvent + NumEvents > LAST_EVENT) ||
+ (unsigned)(lastError + NumErrors > LAST_ERROR)) {
+ LogMessage(X_ERROR, "Not enabling extension %s: maximum number of "
+ "events or errors exceeded.\n", name);
+ return((ExtensionEntry *) NULL);
+ }
+
+ ext = calloc(sizeof (ExtensionEntry), 1);
+ if (!ext)
+ return NULL;
+ if (!dixAllocatePrivates(&ext->devPrivates, PRIVATE_EXTENSION)) {
+ free(ext);
+ return NULL;
+ }
+ ext->name = strdup(name);
+ ext->num_aliases = 0;
+ ext->aliases = (char **)NULL;
+ if (!ext->name)
+ {
+ dixFreePrivates(ext->devPrivates, PRIVATE_EXTENSION);
+ free(ext);
+ return((ExtensionEntry *) NULL);
+ }
+ i = NumExtensions;
+ newexts = (ExtensionEntry **) realloc(extensions,
+ (i + 1) * sizeof(ExtensionEntry *));
+ if (!newexts)
+ {
+ free(ext->name);
+ dixFreePrivates(ext->devPrivates, PRIVATE_EXTENSION);
+ free(ext);
+ return((ExtensionEntry *) NULL);
+ }
+ NumExtensions++;
+ extensions = newexts;
+ extensions[i] = ext;
+ ext->index = i;
+ ext->base = i + EXTENSION_BASE;
+ ext->CloseDown = CloseDownProc;
+ ext->MinorOpcode = MinorOpcodeProc;
+ ProcVector[i + EXTENSION_BASE] = MainProc;
+ SwappedProcVector[i + EXTENSION_BASE] = SwappedMainProc;
+ if (NumEvents)
+ {
+ ext->eventBase = lastEvent;
+ ext->eventLast = lastEvent + NumEvents;
+ lastEvent += NumEvents;
+ }
+ else
+ {
+ ext->eventBase = 0;
+ ext->eventLast = 0;
+ }
+ if (NumErrors)
+ {
+ ext->errorBase = lastError;
+ ext->errorLast = lastError + NumErrors;
+ lastError += NumErrors;
+ }
+ else
+ {
+ ext->errorBase = 0;
+ ext->errorLast = 0;
+ }
+
+ RegisterExtensionNames(ext);
+ return ext;
+}
+
+Bool AddExtensionAlias(char *alias, ExtensionEntry *ext)
+{
+ char *name;
+ char **aliases;
+
+ if (!ext)
+ return FALSE ;
+ aliases = (char **)realloc(ext->aliases,
+ (ext->num_aliases + 1) * sizeof(char *));
+ if (!aliases)
+ return FALSE;
+ ext->aliases = aliases;
+ name = strdup(alias);
+ if (!name)
+ return FALSE;
+ ext->aliases[ext->num_aliases] = name;
+ ext->num_aliases++;
+ return TRUE;
+}
+
+static int
+FindExtension(char *extname, int len)
+{
+ int i, j;
+
+ for (i=0; i<NumExtensions; i++)
+ {
+ if ((strlen(extensions[i]->name) == len) &&
+ !strncmp(extname, extensions[i]->name, len))
+ break;
+ for (j = extensions[i]->num_aliases; --j >= 0;)
+ {
+ if ((strlen(extensions[i]->aliases[j]) == len) &&
+ !strncmp(extname, extensions[i]->aliases[j], len))
+ break;
+ }
+ if (j >= 0) break;
+ }
+ return ((i == NumExtensions) ? -1 : i);
+}
+
+/*
+ * CheckExtension returns the extensions[] entry for the requested
+ * extension name. Maybe this could just return a Bool instead?
+ */
+ExtensionEntry *
+CheckExtension(const char *extname)
+{
+ int n;
+
+ n = FindExtension((char*)extname, strlen(extname));
+ if (n != -1)
+ return extensions[n];
+ else
+ return NULL;
+}
+
+/*
+ * Added as part of Xace.
+ */
+ExtensionEntry *
+GetExtensionEntry(int major)
+{
+ if (major < EXTENSION_BASE)
+ return NULL;
+ major -= EXTENSION_BASE;
+ if (major >= NumExtensions)
+ return NULL;
+ return extensions[major];
+}
+
+unsigned short
+StandardMinorOpcode(ClientPtr client)
+{
+ return ((xReq *)client->requestBuffer)->data;
+}
+
+unsigned short
+MinorOpcodeOfRequest(ClientPtr client)
+{
+ unsigned char major;
+
+ major = ((xReq *)client->requestBuffer)->reqType;
+ if (major < EXTENSION_BASE)
+ return 0;
+ major -= EXTENSION_BASE;
+ if (major >= NumExtensions)
+ return 0;
+ return (*extensions[major]->MinorOpcode)(client);
+}
+
+void
+CloseDownExtensions(void)
+{
+ int i,j;
+
+ for (i = NumExtensions - 1; i >= 0; i--)
+ {
+ if (extensions[i]->CloseDown)
+ extensions[i]->CloseDown(extensions[i]);
+ NumExtensions = i;
+ free(extensions[i]->name);
+ for (j = extensions[i]->num_aliases; --j >= 0;)
+ free(extensions[i]->aliases[j]);
+ free(extensions[i]->aliases);
+ dixFreePrivates(extensions[i]->devPrivates, PRIVATE_EXTENSION);
+ free(extensions[i]);
+ }
+ free(extensions);
+ extensions = (ExtensionEntry **)NULL;
+ lastEvent = EXTENSION_EVENT_BASE;
+ lastError = FirstExtensionError;
+}
+
+int
+ProcQueryExtension(ClientPtr client)
+{
+ xQueryExtensionReply reply;
+ int i;
+ REQUEST(xQueryExtensionReq);
+
+ REQUEST_FIXED_SIZE(xQueryExtensionReq, stuff->nbytes);
+
+ memset(&reply, 0, sizeof(xQueryExtensionReply));
+ reply.type = X_Reply;
+ reply.length = 0;
+ reply.major_opcode = 0;
+ reply.sequenceNumber = client->sequence;
+
+ if ( ! NumExtensions )
+ reply.present = xFalse;
+ else
+ {
+ i = FindExtension((char *)&stuff[1], stuff->nbytes);
+ if (i < 0 || XaceHook(XACE_EXT_ACCESS, client, extensions[i]))
+ reply.present = xFalse;
+ else
+ {
+ reply.present = xTrue;
+ reply.major_opcode = extensions[i]->base;
+ reply.first_event = extensions[i]->eventBase;
+ reply.first_error = extensions[i]->errorBase;
+ }
+ }
+ WriteReplyToClient(client, sizeof(xQueryExtensionReply), &reply);
+ return Success;
+}
+
+int
+ProcListExtensions(ClientPtr client)
+{
+ xListExtensionsReply reply;
+ char *bufptr, *buffer;
+ int total_length = 0;
+
+ REQUEST_SIZE_MATCH(xReq);
+
+ memset(&reply, 0, sizeof(xListExtensionsReply));
+ reply.type = X_Reply;
+ reply.nExtensions = 0;
+ reply.length = 0;
+ reply.sequenceNumber = client->sequence;
+ buffer = NULL;
+
+ if ( NumExtensions )
+ {
+ int i, j;
+
+ for (i=0; i<NumExtensions; i++)
+ {
+ /* call callbacks to find out whether to show extension */
+ if (XaceHook(XACE_EXT_ACCESS, client, extensions[i]) != Success)
+ continue;
+
+ total_length += strlen(extensions[i]->name) + 1;
+ reply.nExtensions += 1 + extensions[i]->num_aliases;
+ for (j = extensions[i]->num_aliases; --j >= 0;)
+ total_length += strlen(extensions[i]->aliases[j]) + 1;
+ }
+ reply.length = bytes_to_int32(total_length);
+ buffer = bufptr = malloc(total_length);
+ if (!buffer)
+ return BadAlloc;
+ for (i=0; i<NumExtensions; i++)
+ {
+ int len;
+ if (XaceHook(XACE_EXT_ACCESS, client, extensions[i]) != Success)
+ continue;
+
+ *bufptr++ = len = strlen(extensions[i]->name);
+ memmove(bufptr, extensions[i]->name, len);
+ bufptr += len;
+ for (j = extensions[i]->num_aliases; --j >= 0;)
+ {
+ *bufptr++ = len = strlen(extensions[i]->aliases[j]);
+ memmove(bufptr, extensions[i]->aliases[j], len);
+ bufptr += len;
+ }
+ }
+ }
+ WriteReplyToClient(client, sizeof(xListExtensionsReply), &reply);
+ if (reply.length)
+ WriteToClient(client, total_length, buffer);
+
+ free(buffer);
+ return Success;
+}
diff --git a/xorg-server/fb/fboverlay.c b/xorg-server/fb/fboverlay.c
index 61eaaa3f9..255cc23c1 100644
--- a/xorg-server/fb/fboverlay.c
+++ b/xorg-server/fb/fboverlay.c
@@ -384,12 +384,16 @@ fbOverlayFinishScreenInit(ScreenPtr pScreen,
if (!fbInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &depth1,
&defaultVisual, ((unsigned long)1<<(bpp1-1)) |
- ((unsigned long)1<<(bpp2-1)), 8))
+ ((unsigned long)1<<(bpp2-1)), 8)) {
+ free(pScrPriv);
return FALSE;
+ }
if (! miScreenInit(pScreen, 0, xsize, ysize, dpix, dpiy, 0,
depth1, ndepths, depths,
- defaultVisual, nvisuals, visuals))
+ defaultVisual, nvisuals, visuals)) {
+ free(pScrPriv);
return FALSE;
+ }
/* MI thinks there's no frame buffer */
#ifdef MITSHM
ShmRegisterFbFuncs(pScreen);
diff --git a/xorg-server/fb/fbscreen.c b/xorg-server/fb/fbscreen.c
index fa518f64a..9e6ecf50f 100644
--- a/xorg-server/fb/fbscreen.c
+++ b/xorg-server/fb/fbscreen.c
@@ -221,11 +221,7 @@ fbFinishScreenInit(ScreenPtr pScreen,
rootdepth = 0;
if (!fbInitVisuals (&visuals, &depths, &nvisuals, &ndepths, &rootdepth,
&defaultVisual,((unsigned long)1<<(imagebpp-1)), 8))
- {
- free(visuals);
- free(depths);
return FALSE;
- }
if (! miScreenInit(pScreen, pbits, xsize, ysize, dpix, dpiy, width,
rootdepth, ndepths, depths,
defaultVisual, nvisuals, visuals))
diff --git a/xorg-server/hw/xfree86/common/xf86Config.c b/xorg-server/hw/xfree86/common/xf86Config.c
index 5312ca60d..114bdc3a3 100644
--- a/xorg-server/hw/xfree86/common/xf86Config.c
+++ b/xorg-server/hw/xfree86/common/xf86Config.c
@@ -309,7 +309,7 @@ xf86ModulelistFromConfig(pointer **optlist)
}
if (found == FALSE) {
XF86LoadPtr ptr = (XF86LoadPtr)xf86configptr->conf_modules;
- ptr = xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt);
+ xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt);
xf86Msg(X_INFO, "\"%s\" will be loaded by default.\n", ModuleDefaults[i].name);
}
}
@@ -318,7 +318,7 @@ xf86ModulelistFromConfig(pointer **optlist)
for (i=0 ; ModuleDefaults[i].name != NULL ; i++) {
if (ModuleDefaults[i].toLoad == TRUE) {
XF86LoadPtr ptr = (XF86LoadPtr)xf86configptr->conf_modules;
- ptr = xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt);
+ xf86addNewLoadDirective(ptr, ModuleDefaults[i].name, XF86_LOAD_MODULE, ModuleDefaults[i].load_opt);
}
}
}
@@ -1459,8 +1459,9 @@ configInputDevices(XF86ConfLayoutPtr layout, serverLayoutPtr servlayoutp)
while (irp) {
indp[count] = xf86AllocateInput();
if (!configInput(indp[count], irp->iref_inputdev, X_CONFIG)) {
- while(count--)
+ do {
free(indp[count]);
+ } while(count--);
free(indp);
return FALSE;
}
@@ -1485,7 +1486,7 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
{
XF86ConfAdjacencyPtr adjp;
XF86ConfInactivePtr idp;
- int count = 0;
+ int saved_count, count = 0;
int scrnum;
XF86ConfLayoutPtr l;
MessageType from;
@@ -1553,6 +1554,9 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
scrnum = adjp->adj_scrnum;
if (!configScreen(slp[count].screen, adjp->adj_screen, scrnum,
X_CONFIG)) {
+ do {
+ free(slp[count].screen);
+ } while(count--);
free(slp);
return FALSE;
}
@@ -1641,6 +1645,10 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
}
}
+ if (!count)
+ saved_count = 1;
+ else
+ saved_count = count;
/*
* Count the number of inactive devices.
*/
@@ -1657,16 +1665,14 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
idp = conf_layout->lay_inactive_lst;
count = 0;
while (idp) {
- if (!configDevice(&gdp[count], idp->inactive_device, FALSE)) {
- free(gdp);
- return FALSE;
- }
+ if (!configDevice(&gdp[count], idp->inactive_device, FALSE))
+ goto bail;
count++;
idp = (XF86ConfInactivePtr)idp->list.next;
}
if (!configInputDevices(conf_layout, servlayoutp))
- return FALSE;
+ goto bail;
servlayoutp->id = conf_layout->lay_identifier;
servlayoutp->screens = slp;
@@ -1675,6 +1681,14 @@ configLayout(serverLayoutPtr servlayoutp, XF86ConfLayoutPtr conf_layout,
from = X_DEFAULT;
return TRUE;
+
+bail:
+ do {
+ free(slp[saved_count].screen);
+ } while(saved_count--);
+ free(slp);
+ free(gdp);
+ return FALSE;
}
/*
diff --git a/xorg-server/hw/xfree86/common/xf86Helper.c b/xorg-server/hw/xfree86/common/xf86Helper.c
index 399883886..3cdffdb43 100644
--- a/xorg-server/hw/xfree86/common/xf86Helper.c
+++ b/xorg-server/hw/xfree86/common/xf86Helper.c
@@ -1831,6 +1831,7 @@ xf86ConfigFbEntity(ScrnInfoPtr pScrn, int scrnFlag, int entityIndex,
xf86SetEntityFuncs(entityIndex,init,enter,leave,private);
+ free(pEnt);
return pScrn;
}
diff --git a/xorg-server/hw/xfree86/common/xf86Init.c b/xorg-server/hw/xfree86/common/xf86Init.c
index e017d9dce..0b36163c0 100644
--- a/xorg-server/hw/xfree86/common/xf86Init.c
+++ b/xorg-server/hw/xfree86/common/xf86Init.c
@@ -1,1497 +1,1499 @@
-/*
- * Loosely based on code bearing the following copyright:
- *
- * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
- */
-/*
- * Copyright (c) 1992-2003 by The XFree86 Project, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the copyright holder(s)
- * and author(s) shall not be used in advertising or otherwise to promote
- * the sale, use or other dealings in this Software without prior written
- * authorization from the copyright holder(s) and author(s).
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <stdlib.h>
-#include <errno.h>
-
-#undef HAS_UTSNAME
-#if !defined(WIN32)
-#define HAS_UTSNAME 1
-#include <sys/utsname.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xmd.h>
-#include <X11/Xproto.h>
-#include <X11/Xatom.h>
-#include "input.h"
-#include "servermd.h"
-#include "windowstr.h"
-#include "scrnintstr.h"
-#include "site.h"
-#include "mi.h"
-
-#include "compiler.h"
-
-#include "loaderProcs.h"
-#ifdef XFreeXDGA
-#include "dgaproc.h"
-#endif
-
-#define XF86_OS_PRIVS
-#include "xf86.h"
-#include "xf86Priv.h"
-#include "xf86Config.h"
-#include "xf86_OSlib.h"
-#include "xf86cmap.h"
-#include "xorgVersion.h"
-#include "xf86Build.h"
-#include "mipointer.h"
-#include <X11/extensions/XI.h>
-#include <X11/extensions/XIproto.h>
-#include "xf86DDC.h"
-#include "xf86Xinput.h"
-#include "xf86InPriv.h"
-#include "picturestr.h"
-
-#include "xf86Bus.h"
-#include "xf86VGAarbiter.h"
-#include "globals.h"
-
-#ifdef DPMSExtension
-#include <X11/extensions/dpmsconst.h>
-#include "dpmsproc.h"
-#endif
-#include <hotplug.h>
-
-
-#ifdef XF86PM
-void (*xf86OSPMClose)(void) = NULL;
-#endif
-static Bool xorgHWOpenConsole = FALSE;
-
-/* Common pixmap formats */
-
-static PixmapFormatRec formats[MAXFORMATS] = {
- { 1, 1, BITMAP_SCANLINE_PAD },
- { 4, 8, BITMAP_SCANLINE_PAD },
- { 8, 8, BITMAP_SCANLINE_PAD },
- { 15, 16, BITMAP_SCANLINE_PAD },
- { 16, 16, BITMAP_SCANLINE_PAD },
- { 24, 32, BITMAP_SCANLINE_PAD },
- { 32, 32, BITMAP_SCANLINE_PAD },
-};
-static int numFormats = 7;
-static Bool formatsDone = FALSE;
-
-#ifndef OSNAME
-#define OSNAME " unknown"
-#endif
-#ifndef OSVENDOR
-#define OSVENDOR ""
-#endif
-#ifndef PRE_RELEASE
-#define PRE_RELEASE XORG_VERSION_SNAP
-#endif
-
-static void
-xf86PrintBanner(void)
-{
-#if PRE_RELEASE
- xf86ErrorFVerb(0, "\n"
- "This is a pre-release version of the X server from " XVENDORNAME ".\n"
- "It is not supported in any way.\n"
- "Bugs may be filed in the bugzilla at http://bugs.freedesktop.org/.\n"
- "Select the \"xorg\" product for bugs you find in this release.\n"
- "Before reporting bugs in pre-release versions please check the\n"
- "latest version in the X.Org Foundation git repository.\n"
- "See http://wiki.x.org/wiki/GitPage for git access instructions.\n");
-#endif
- xf86ErrorFVerb(0, "\nX.Org X Server %d.%d.%d",
- XORG_VERSION_MAJOR,
- XORG_VERSION_MINOR,
- XORG_VERSION_PATCH);
-#if XORG_VERSION_SNAP > 0
- xf86ErrorFVerb(0, ".%d", XORG_VERSION_SNAP);
-#endif
-
-#if XORG_VERSION_SNAP >= 900
- /* When the minor number is 99, that signifies that the we are making
- * a release candidate for a major version. (X.0.0)
- * When the patch number is 99, that signifies that the we are making
- * a release candidate for a minor version. (X.Y.0)
- * When the patch number is < 99, then we are making a release
- * candidate for the next point release. (X.Y.Z)
- */
-#if XORG_VERSION_MINOR >= 99
- xf86ErrorFVerb(0, " (%d.0.0 RC %d)", XORG_VERSION_MAJOR+1,
- XORG_VERSION_SNAP - 900);
-#elif XORG_VERSION_PATCH == 99
- xf86ErrorFVerb(0, " (%d.%d.0 RC %d)", XORG_VERSION_MAJOR,
- XORG_VERSION_MINOR + 1, XORG_VERSION_SNAP - 900);
-#else
- xf86ErrorFVerb(0, " (%d.%d.%d RC %d)", XORG_VERSION_MAJOR,
- XORG_VERSION_MINOR, XORG_VERSION_PATCH + 1,
- XORG_VERSION_SNAP - 900);
-#endif
-#endif
-
-#ifdef XORG_CUSTOM_VERSION
- xf86ErrorFVerb(0, " (%s)", XORG_CUSTOM_VERSION);
-#endif
-#ifndef XORG_DATE
-# define XORG_DATE "Unknown"
-#endif
- xf86ErrorFVerb(0, "\nRelease Date: %s\n", XORG_DATE);
- xf86ErrorFVerb(0, "X Protocol Version %d, Revision %d\n",
- X_PROTOCOL, X_PROTOCOL_REVISION);
- xf86ErrorFVerb(0, "Build Operating System: %s %s\n", OSNAME, OSVENDOR);
-#ifdef HAS_UTSNAME
- {
- struct utsname name;
-
- /* Linux & BSD state that 0 is success, SysV (including Solaris, HP-UX,
- and Irix) and Single Unix Spec 3 just say that non-negative is success.
- All agree that failure is represented by a negative number.
- */
- if (uname(&name) >= 0) {
- xf86ErrorFVerb(0, "Current Operating System: %s %s %s %s %s\n",
- name.sysname, name.nodename, name.release, name.version, name.machine);
-#ifdef linux
- do {
- char buf[80];
- int fd = open("/proc/cmdline", O_RDONLY);
- if (fd != -1) {
- xf86ErrorFVerb(0, "Kernel command line: ");
- memset(buf, 0, 80);
- while (read(fd, buf, 80) > 0) {
- xf86ErrorFVerb(0, "%.80s", buf);
- memset(buf, 0, 80);
- }
- close(fd);
- }
- } while (0);
-#endif
- }
- }
-#endif
-#if defined(BUILD_DATE) && (BUILD_DATE > 19000000)
- {
- struct tm t;
- char buf[100];
-
- memset(&t, 0, sizeof(t));
- memset(buf, 0, sizeof(buf));
- t.tm_mday = BUILD_DATE % 100;
- t.tm_mon = (BUILD_DATE / 100) % 100 - 1;
- t.tm_year = BUILD_DATE / 10000 - 1900;
-#if defined(BUILD_TIME)
- t.tm_sec = BUILD_TIME % 100;
- t.tm_min = (BUILD_TIME / 100) % 100;
- t.tm_hour = (BUILD_TIME / 10000) % 100;
- if (strftime(buf, sizeof(buf), "%d %B %Y %I:%M:%S%p", &t))
- xf86ErrorFVerb(0, "Build Date: %s\n", buf);
-#else
- if (strftime(buf, sizeof(buf), "%d %B %Y", &t))
- xf86ErrorFVerb(0, "Build Date: %s\n", buf);
-#endif
- }
-#endif
-#if defined(BUILDERSTRING)
- xf86ErrorFVerb(0, "%s \n", BUILDERSTRING);
-#endif
- xf86ErrorFVerb(0, "Current version of pixman: %s\n",
- pixman_version_string());
- xf86ErrorFVerb(0, "\tBefore reporting problems, check "
- ""__VENDORDWEBSUPPORT__"\n"
- "\tto make sure that you have the latest version.\n");
-}
-
-static void
-xf86PrintMarkers(void)
-{
- LogPrintMarkers();
-}
-
-static Bool
-xf86CreateRootWindow(WindowPtr pWin)
-{
- int ret = TRUE;
- int err = Success;
- ScreenPtr pScreen = pWin->drawable.pScreen;
- RootWinPropPtr pProp;
- CreateWindowProcPtr CreateWindow = (CreateWindowProcPtr)
- dixLookupPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey);
-
- DebugF("xf86CreateRootWindow(%p)\n", pWin);
-
- if ( pScreen->CreateWindow != xf86CreateRootWindow ) {
- /* Can't find hook we are hung on */
- xf86DrvMsg(pScreen->myNum, X_WARNING /* X_ERROR */,
- "xf86CreateRootWindow %p called when not in pScreen->CreateWindow %p n",
- (void *)xf86CreateRootWindow,
- (void *)pScreen->CreateWindow );
- }
-
- /* Unhook this function ... */
- pScreen->CreateWindow = CreateWindow;
- dixSetPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey, NULL);
-
- /* ... and call the previous CreateWindow fuction, if any */
- if (NULL!=pScreen->CreateWindow) {
- ret = (*pScreen->CreateWindow)(pWin);
- }
-
- /* Now do our stuff */
- if (xf86RegisteredPropertiesTable != NULL) {
- if (pWin->parent == NULL && xf86RegisteredPropertiesTable != NULL) {
- for (pProp = xf86RegisteredPropertiesTable[pScreen->myNum];
- pProp != NULL && err==Success;
- pProp = pProp->next )
- {
- Atom prop;
-
- prop = MakeAtom(pProp->name, strlen(pProp->name), TRUE);
- err = dixChangeWindowProperty(serverClient, pWin,
- prop, pProp->type,
- pProp->format, PropModeReplace,
- pProp->size, pProp->data,
- FALSE);
- }
-
- /* Look at err */
- ret &= (err==Success);
-
- } else {
- xf86Msg(X_ERROR, "xf86CreateRootWindow unexpectedly called with "
- "non-root window %p (parent %p)\n",
- (void *)pWin, (void *)pWin->parent);
- ret = FALSE;
- }
- }
-
- DebugF("xf86CreateRootWindow() returns %d\n", ret);
- return ret;
-}
-
-
-static void
-InstallSignalHandlers(void)
-{
- /*
- * Install signal handler for unexpected signals
- */
- xf86Info.caughtSignal=FALSE;
- if (!xf86Info.notrapSignals) {
- OsRegisterSigWrapper(xf86SigWrapper);
- } else {
- signal(SIGSEGV, SIG_DFL);
- signal(SIGILL, SIG_DFL);
-#ifdef SIGEMT
- signal(SIGEMT, SIG_DFL);
-#endif
- signal(SIGFPE, SIG_DFL);
- signal(SIGBUS, SIG_DFL);
- signal(SIGSYS, SIG_DFL);
- signal(SIGXCPU, SIG_DFL);
- signal(SIGXFSZ, SIG_DFL);
- }
-}
-
-/*
- * InitOutput --
- * Initialize screenInfo for all actually accessible framebuffers.
- * That includes vt-manager setup, querying all possible devices and
- * collecting the pixmap formats.
- */
-void
-InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
-{
- int i, j, k, scr_index, was_blocked = 0;
- char **modulelist;
- pointer *optionlist;
- Pix24Flags screenpix24, pix24;
- MessageType pix24From = X_DEFAULT;
- Bool pix24Fail = FALSE;
- Bool autoconfig = FALSE;
- GDevPtr configured_device;
-
- xf86Initialising = TRUE;
-
- if (serverGeneration == 1) {
- if ((xf86ServerName = strrchr(argv[0], '/')) != 0)
- xf86ServerName++;
- else
- xf86ServerName = argv[0];
-
- xf86PrintBanner();
- xf86PrintMarkers();
- if (xf86LogFile) {
- time_t t;
- const char *ct;
- t = time(NULL);
- ct = ctime(&t);
- xf86MsgVerb(xf86LogFileFrom, 0, "Log file: \"%s\", Time: %s",
- xf86LogFile, ct);
- }
-
- /* Read and parse the config file */
- if (!xf86DoConfigure && !xf86DoShowOptions) {
- switch (xf86HandleConfigFile(FALSE)) {
- case CONFIG_OK:
- break;
- case CONFIG_PARSE_ERROR:
- xf86Msg(X_ERROR, "Error parsing the config file\n");
- return;
- case CONFIG_NOFILE:
- autoconfig = TRUE;
- break;
- }
- }
-
- InstallSignalHandlers();
-
- /* Initialise the loader */
- LoaderInit();
-
- /* Tell the loader the default module search path */
- LoaderSetPath(xf86ModulePath);
-
- if (xf86Info.ignoreABI) {
- LoaderSetOptions(LDR_OPT_ABI_MISMATCH_NONFATAL);
- }
-
- if (xf86DoShowOptions)
- DoShowOptions();
-
- /* Do a general bus probe. This will be a PCI probe for x86 platforms */
- xf86BusProbe();
-
- if (xf86DoConfigure)
- DoConfigure();
-
- if (autoconfig) {
- if (!xf86AutoConfig()) {
- xf86Msg(X_ERROR, "Auto configuration failed\n");
- return;
- }
- }
-
-#ifdef XF86PM
- xf86OSPMClose = xf86OSPMOpen();
-#endif
-
- /* Load all modules specified explicitly in the config file */
- if ((modulelist = xf86ModulelistFromConfig(&optionlist))) {
- xf86LoadModules(modulelist, optionlist);
- free(modulelist);
- free(optionlist);
- }
-
- /* Load all driver modules specified in the config file */
- /* If there aren't any specified in the config file, autoconfig them */
- /* FIXME: Does not handle multiple active screen sections, but I'm not
- * sure if we really want to handle that case*/
- configured_device = xf86ConfigLayout.screens->screen->device;
- if ((!configured_device) || (!configured_device->driver)) {
- if (!autoConfigDevice(configured_device)) {
- xf86Msg(X_ERROR, "Automatic driver configuration failed\n");
- return ;
- }
- }
- if ((modulelist = xf86DriverlistFromConfig())) {
- xf86LoadModules(modulelist, NULL);
- free(modulelist);
- }
-
- /* Load all input driver modules specified in the config file. */
- if ((modulelist = xf86InputDriverlistFromConfig())) {
- xf86LoadModules(modulelist, NULL);
- free(modulelist);
- }
-
- /*
- * It is expected that xf86AddDriver()/xf86AddInputDriver will be
- * called for each driver as it is loaded. Those functions save the
- * module pointers for drivers.
- * XXX Nothing keeps track of them for other modules.
- */
- /* XXX What do we do if not all of these could be loaded? */
-
- /*
- * At this point, xf86DriverList[] is all filled in with entries for
- * each of the drivers to try and xf86NumDrivers has the number of
- * drivers. If there are none, return now.
- */
-
- if (xf86NumDrivers == 0) {
- xf86Msg(X_ERROR, "No drivers available.\n");
- return;
- }
-
- /*
- * Call each of the Identify functions and call the driverFunc to check
- * if HW access is required. The Identify functions print out some
- * identifying information, and anything else that might be
- * needed at this early stage.
- */
-
- for (i = 0; i < xf86NumDrivers; i++) {
- if (xf86DriverList[i]->Identify != NULL)
- xf86DriverList[i]->Identify(0);
-
- if (!xorgHWAccess || !xorgHWOpenConsole) {
- xorgHWFlags flags;
- if(!xf86DriverList[i]->driverFunc
- || !xf86DriverList[i]->driverFunc(NULL,
- GET_REQUIRED_HW_INTERFACES,
- &flags))
- flags = HW_IO;
-
- if(NEED_IO_ENABLED(flags))
- xorgHWAccess = TRUE;
- if(!(flags & HW_SKIP_CONSOLE))
- xorgHWOpenConsole = TRUE;
- }
- }
-
- if (xorgHWOpenConsole)
- xf86OpenConsole();
- else
- xf86Info.dontVTSwitch = TRUE;
-
- if (xf86BusConfig() == FALSE)
- return;
-
- xf86PostProbe();
-
- /*
- * Sort the drivers to match the requested ording. Using a slow
- * bubble sort.
- */
- for (j = 0; j < xf86NumScreens - 1; j++) {
- for (i = 0; i < xf86NumScreens - j - 1; i++) {
- if (xf86Screens[i + 1]->confScreen->screennum <
- xf86Screens[i]->confScreen->screennum) {
- ScrnInfoPtr tmpScrn = xf86Screens[i + 1];
- xf86Screens[i + 1] = xf86Screens[i];
- xf86Screens[i] = tmpScrn;
- }
- }
- }
- /* Fix up the indexes */
- for (i = 0; i < xf86NumScreens; i++) {
- xf86Screens[i]->scrnIndex = i;
- }
-
- /*
- * Call the driver's PreInit()'s to complete initialisation for the first
- * generation.
- */
-
- for (i = 0; i < xf86NumScreens; i++) {
- xf86VGAarbiterScrnInit(xf86Screens[i]);
- xf86VGAarbiterLock(xf86Screens[i]);
- if (xf86Screens[i]->PreInit &&
- xf86Screens[i]->PreInit(xf86Screens[i], 0))
- xf86Screens[i]->configured = TRUE;
- xf86VGAarbiterUnlock(xf86Screens[i]);
- }
- for (i = 0; i < xf86NumScreens; i++)
- if (!xf86Screens[i]->configured)
- xf86DeleteScreen(i--, 0);
-
- /*
- * If no screens left, return now.
- */
-
- if (xf86NumScreens == 0) {
- xf86Msg(X_ERROR,
- "Screen(s) found, but none have a usable configuration.\n");
- return;
- }
-
- for (i = 0; i < xf86NumScreens; i++) {
- if (xf86Screens[i]->name == NULL) {
- XNFasprintf(&xf86Screens[i]->name, "screen%d", i);
- xf86MsgVerb(X_WARNING, 0,
- "Screen driver %d has no name set, using `%s'.\n",
- i, xf86Screens[i]->name);
- }
- }
-
- /* Remove (unload) drivers that are not required */
- for (i = 0; i < xf86NumDrivers; i++)
- if (xf86DriverList[i] && xf86DriverList[i]->refCount <= 0)
- xf86DeleteDriver(i);
-
- /*
- * At this stage we know how many screens there are.
- */
-
- for (i = 0; i < xf86NumScreens; i++)
- xf86InitViewport(xf86Screens[i]);
-
- /*
- * Collect all pixmap formats and check for conflicts at the display
- * level. Should we die here? Or just delete the offending screens?
- */
- screenpix24 = Pix24DontCare;
- for (i = 0; i < xf86NumScreens; i++) {
- if (xf86Screens[i]->imageByteOrder !=
- xf86Screens[0]->imageByteOrder)
- FatalError("Inconsistent display bitmapBitOrder. Exiting\n");
- if (xf86Screens[i]->bitmapScanlinePad !=
- xf86Screens[0]->bitmapScanlinePad)
- FatalError("Inconsistent display bitmapScanlinePad. Exiting\n");
- if (xf86Screens[i]->bitmapScanlineUnit !=
- xf86Screens[0]->bitmapScanlineUnit)
- FatalError("Inconsistent display bitmapScanlineUnit. Exiting\n");
- if (xf86Screens[i]->bitmapBitOrder !=
- xf86Screens[0]->bitmapBitOrder)
- FatalError("Inconsistent display bitmapBitOrder. Exiting\n");
-
- /* Determine the depth 24 pixmap format the screens would like */
- if (xf86Screens[i]->pixmap24 != Pix24DontCare) {
- if (screenpix24 == Pix24DontCare)
- screenpix24 = xf86Screens[i]->pixmap24;
- else if (screenpix24 != xf86Screens[i]->pixmap24)
- FatalError("Inconsistent depth 24 pixmap format. Exiting\n");
- }
- }
- /* check if screenpix24 is consistent with the config/cmdline */
- if (xf86Info.pixmap24 != Pix24DontCare) {
- pix24 = xf86Info.pixmap24;
- pix24From = xf86Info.pix24From;
- if (screenpix24 != Pix24DontCare && screenpix24 != xf86Info.pixmap24)
- pix24Fail = TRUE;
- } else if (screenpix24 != Pix24DontCare) {
- pix24 = screenpix24;
- pix24From = X_PROBED;
- } else
- pix24 = Pix24Use32;
-
- if (pix24Fail)
- FatalError("Screen(s) can't use the required depth 24 pixmap format"
- " (%d). Exiting\n", PIX24TOBPP(pix24));
-
- /* Initialise the depth 24 format */
- for (j = 0; j < numFormats && formats[j].depth != 24; j++)
- ;
- formats[j].bitsPerPixel = PIX24TOBPP(pix24);
-
- /* Collect additional formats */
- for (i = 0; i < xf86NumScreens; i++) {
- for (j = 0; j < xf86Screens[i]->numFormats; j++) {
- for (k = 0; ; k++) {
- if (k >= numFormats) {
- if (k >= MAXFORMATS)
- FatalError("Too many pixmap formats! Exiting\n");
- formats[k] = xf86Screens[i]->formats[j];
- numFormats++;
- break;
- }
- if (formats[k].depth == xf86Screens[i]->formats[j].depth) {
- if ((formats[k].bitsPerPixel ==
- xf86Screens[i]->formats[j].bitsPerPixel) &&
- (formats[k].scanlinePad ==
- xf86Screens[i]->formats[j].scanlinePad))
- break;
- FatalError("Inconsistent pixmap format for depth %d."
- " Exiting\n", formats[k].depth);
- }
- }
- }
- }
- formatsDone = TRUE;
-
- if (xf86Info.vtno >= 0 ) {
-#define VT_ATOM_NAME "XFree86_VT"
- Atom VTAtom=-1;
- CARD32 *VT = NULL;
- int ret;
-
- /* This memory needs to stay available until the screen has been
- initialized, and we can create the property for real.
- */
- if ( (VT = malloc(sizeof(CARD32)))==NULL ) {
- FatalError("Unable to make VT property - out of memory. Exiting...\n");
- }
- *VT = xf86Info.vtno;
-
- VTAtom = MakeAtom(VT_ATOM_NAME, sizeof(VT_ATOM_NAME) - 1, TRUE);
-
- for (i = 0, ret = Success; i < xf86NumScreens && ret == Success; i++) {
- ret = xf86RegisterRootWindowProperty(xf86Screens[i]->scrnIndex,
- VTAtom, XA_INTEGER, 32,
- 1, VT );
- if (ret != Success)
- xf86DrvMsg(xf86Screens[i]->scrnIndex, X_WARNING,
- "Failed to register VT property\n");
- }
- }
-
- /* If a screen uses depth 24, show what the pixmap format is */
- for (i = 0; i < xf86NumScreens; i++) {
- if (xf86Screens[i]->depth == 24) {
- xf86Msg(pix24From, "Depth 24 pixmap format is %d bpp\n",
- PIX24TOBPP(pix24));
- break;
- }
- }
- } else {
- /*
- * serverGeneration != 1; some OSs have to do things here, too.
- */
- if (xorgHWOpenConsole)
- xf86OpenConsole();
-
-#ifdef XF86PM
- /*
- should we reopen it here? We need to deal with an already opened
- device. We could leave this to the OS layer. For now we simply
- close it here
- */
- if (xf86OSPMClose)
- xf86OSPMClose();
- if ((xf86OSPMClose = xf86OSPMOpen()) != NULL)
- xf86MsgVerb(X_INFO, 3, "APM registered successfully\n");
-#endif
-
- /* Make sure full I/O access is enabled */
- if (xorgHWAccess)
- xf86EnableIO();
- }
-
- /*
- * Use the previously collected parts to setup pScreenInfo
- */
-
- pScreenInfo->imageByteOrder = xf86Screens[0]->imageByteOrder;
- pScreenInfo->bitmapScanlinePad = xf86Screens[0]->bitmapScanlinePad;
- pScreenInfo->bitmapScanlineUnit = xf86Screens[0]->bitmapScanlineUnit;
- pScreenInfo->bitmapBitOrder = xf86Screens[0]->bitmapBitOrder;
- pScreenInfo->numPixmapFormats = numFormats;
- for (i = 0; i < numFormats; i++)
- pScreenInfo->formats[i] = formats[i];
-
- /* Make sure the server's VT is active */
-
- if (serverGeneration != 1) {
- xf86Resetting = TRUE;
- /* All screens are in the same state, so just check the first */
- if (!xf86Screens[0]->vtSema) {
-#ifdef HAS_USL_VTS
- ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ);
-#endif
- xf86AccessEnter();
- was_blocked = xf86BlockSIGIO();
- }
- }
-
- for (i = 0; i < xf86NumScreens; i++)
- if (!xf86ColormapAllocatePrivates(xf86Screens[i]))
- FatalError("Cannot register DDX private keys");
-
- if (!dixRegisterPrivateKey(&xf86ScreenKeyRec, PRIVATE_SCREEN, 0) ||
- !dixRegisterPrivateKey(&xf86CreateRootWindowKeyRec, PRIVATE_SCREEN, 0))
- FatalError("Cannot register DDX private keys");
-
- for (i = 0; i < xf86NumScreens; i++) {
- xf86VGAarbiterLock(xf86Screens[i]);
- /*
- * Almost everything uses these defaults, and many of those that
- * don't, will wrap them.
- */
- xf86Screens[i]->EnableDisableFBAccess = xf86EnableDisableFBAccess;
-#ifdef XFreeXDGA
- xf86Screens[i]->SetDGAMode = xf86SetDGAMode;
-#endif
- xf86Screens[i]->DPMSSet = NULL;
- xf86Screens[i]->LoadPalette = NULL;
- xf86Screens[i]->SetOverscan = NULL;
- xf86Screens[i]->DriverFunc = NULL;
- xf86Screens[i]->pScreen = NULL;
- scr_index = AddScreen(xf86Screens[i]->ScreenInit, argc, argv);
- xf86VGAarbiterUnlock(xf86Screens[i]);
- if (scr_index == i) {
- /*
- * Hook in our ScrnInfoRec, and initialise some other pScreen
- * fields.
- */
- dixSetPrivate(&screenInfo.screens[scr_index]->devPrivates,
- xf86ScreenKey, xf86Screens[i]);
- xf86Screens[i]->pScreen = screenInfo.screens[scr_index];
- /* The driver should set this, but make sure it is set anyway */
- xf86Screens[i]->vtSema = TRUE;
- } else {
- /* This shouldn't normally happen */
- FatalError("AddScreen/ScreenInit failed for driver %d\n", i);
- }
-
- DebugF("InitOutput - xf86Screens[%d]->pScreen = %p\n",
- i, xf86Screens[i]->pScreen );
- DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n",
- i, xf86Screens[i]->pScreen->CreateWindow );
-
- dixSetPrivate(&screenInfo.screens[scr_index]->devPrivates,
- xf86CreateRootWindowKey,
- xf86Screens[i]->pScreen->CreateWindow);
- xf86Screens[i]->pScreen->CreateWindow = xf86CreateRootWindow;
-
- if (PictureGetSubpixelOrder (xf86Screens[i]->pScreen) == SubPixelUnknown)
- {
- xf86MonPtr DDC = (xf86MonPtr)(xf86Screens[i]->monitor->DDC);
- PictureSetSubpixelOrder (xf86Screens[i]->pScreen,
- DDC ?
- (DDC->features.input_type ?
- SubPixelHorizontalRGB : SubPixelNone) :
- SubPixelUnknown);
- }
-#ifdef RANDR
- if (!xf86Info.disableRandR)
- xf86RandRInit (screenInfo.screens[scr_index]);
- xf86Msg(xf86Info.randRFrom, "RandR %s\n",
- xf86Info.disableRandR ? "disabled" : "enabled");
-#endif
- }
-
- xf86VGAarbiterWrapFunctions();
- xf86UnblockSIGIO(was_blocked);
-
- xf86InitOrigins();
-
- xf86Resetting = FALSE;
- xf86Initialising = FALSE;
-
- RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, xf86Wakeup,
- NULL);
-}
-
-/*
- * InitInput --
- * Initialize all supported input devices.
- */
-
-void
-InitInput(int argc, char **argv)
-{
- InputInfoPtr* pDev;
- DeviceIntPtr dev;
-
- xf86Info.vtRequestsPending = FALSE;
-
- mieqInit();
-
- GetEventList(&xf86Events);
-
- /* Initialize all configured input devices */
- for (pDev = xf86ConfigLayout.inputs; pDev && *pDev; pDev++) {
- /* Replace obsolete keyboard driver with kbd */
- if (!xf86NameCmp((*pDev)->driver, "keyboard")) {
- strcpy((*pDev)->driver, "kbd");
- }
-
- /* If one fails, the others will too */
- if (xf86NewInputDevice(*pDev, &dev, TRUE) == BadAlloc)
- break;
- }
-
- config_init();
-}
-
-void
-CloseInput (void)
-{
- config_fini();
-}
-
-/*
- * OsVendorInit --
- * OS/Vendor-specific initialisations. Called from OsInit(), which
- * is called by dix before establishing the well known sockets.
- */
-
-void
-OsVendorInit(void)
-{
- static Bool beenHere = FALSE;
-
- signal(SIGCHLD, SIG_DFL); /* Need to wait for child processes */
-
- if (!beenHere) {
- umask(022);
- xf86LogInit();
- }
-
- /* Set stderr to non-blocking. */
-#ifndef O_NONBLOCK
-#if defined(FNDELAY)
-#define O_NONBLOCK FNDELAY
-#elif defined(O_NDELAY)
-#define O_NONBLOCK O_NDELAY
-#endif
-
-#ifdef O_NONBLOCK
- if (!beenHere) {
- if (geteuid() == 0 && getuid() != geteuid())
- {
- int status;
-
- status = fcntl(fileno(stderr), F_GETFL, 0);
- if (status != -1) {
- fcntl(fileno(stderr), F_SETFL, status | O_NONBLOCK);
- }
- }
- }
-#endif
-#endif
-
- beenHere = TRUE;
-}
-
-/*
- * ddxGiveUp --
- * Device dependent cleanup. Called by by dix before normal server death.
- * For SYSV386 we must switch the terminal back to normal mode. No error-
- * checking here, since there should be restored as much as possible.
- */
-
-void
-ddxGiveUp(void)
-{
- int i;
-
- xf86VGAarbiterFini();
-
-#ifdef XF86PM
- if (xf86OSPMClose)
- xf86OSPMClose();
- xf86OSPMClose = NULL;
-#endif
-
- for (i = 0; i < xf86NumScreens; i++) {
- /*
- * zero all access functions to
- * trap calls when switched away.
- */
- xf86Screens[i]->vtSema = FALSE;
- }
-
-#ifdef XFreeXDGA
- DGAShutdown();
-#endif
-
- if (xorgHWOpenConsole)
- xf86CloseConsole();
-
- xf86CloseLog();
-
- /* If an unexpected signal was caught, dump a core for debugging */
- if (xf86Info.caughtSignal)
- OsAbort();
-}
-
-
-
-/*
- * AbortDDX --
- * DDX - specific abort routine. Called by AbortServer(). The attempt is
- * made to restore all original setting of the displays. Also all devices
- * are closed.
- */
-
-void
-AbortDDX(void)
-{
- int i;
-
- xf86BlockSIGIO();
-
- /*
- * try to restore the original video state
- */
-#ifdef DPMSExtension /* Turn screens back on */
- if (DPMSPowerLevel != DPMSModeOn)
- DPMSSet(serverClient, DPMSModeOn);
-#endif
- if (xf86Screens) {
- for (i = 0; i < xf86NumScreens; i++)
- if (xf86Screens[i]->vtSema) {
- /*
- * if we are aborting before ScreenInit() has finished
- * we might not have been wrapped yet. Therefore enable
- * screen explicitely.
- */
- xf86VGAarbiterLock(xf86Screens[i]);
- (xf86Screens[i]->LeaveVT)(i, 0);
- xf86VGAarbiterUnlock(xf86Screens[i]);
- }
- }
-
- xf86AccessLeave();
-
- /*
- * This is needed for an abnormal server exit, since the normal exit stuff
- * MUST also be performed (i.e. the vt must be left in a defined state)
- */
- ddxGiveUp();
-}
-
-void
-OsVendorFatalError(void)
-{
-#ifdef VENDORSUPPORT
- ErrorF("\nPlease refer to your Operating System Vendor support pages\n"
- "at %s for support on this crash.\n",VENDORSUPPORT);
-#else
- ErrorF("\nPlease consult the "XVENDORNAME" support \n"
- "\t at "__VENDORDWEBSUPPORT__"\n for help. \n");
-#endif
- if (xf86LogFile && xf86LogFileWasOpened)
- ErrorF("Please also check the log file at \"%s\" for additional "
- "information.\n", xf86LogFile);
- ErrorF("\n");
-}
-
-int
-xf86SetVerbosity(int verb)
-{
- int save = xf86Verbose;
-
- xf86Verbose = verb;
- LogSetParameter(XLOG_VERBOSITY, verb);
- return save;
-}
-
-int
-xf86SetLogVerbosity(int verb)
-{
- int save = xf86LogVerbose;
-
- xf86LogVerbose = verb;
- LogSetParameter(XLOG_FILE_VERBOSITY, verb);
- return save;
-}
-
-static void
-xf86PrintDefaultModulePath(void)
-{
- ErrorF("%s\n", DEFAULT_MODULE_PATH);
-}
-
-static void
-xf86PrintDefaultLibraryPath(void)
-{
- ErrorF("%s\n", DEFAULT_LIBRARY_PATH);
-}
-
-/*
- * ddxProcessArgument --
- * Process device-dependent command line args. Returns 0 if argument is
- * not device dependent, otherwise Count of number of elements of argv
- * that are part of a device dependent commandline option.
- *
- */
-
-/* ARGSUSED */
-int
-ddxProcessArgument(int argc, char **argv, int i)
-{
-#define CHECK_FOR_REQUIRED_ARGUMENT() \
- if (((i + 1) >= argc) || (!argv[i + 1])) { \
- ErrorF("Required argument to %s not specified\n", argv[i]); \
- UseMsg(); \
- FatalError("Required argument to %s not specified\n", argv[i]); \
- }
-
- /* First the options that are only allowed for root */
- if (!strcmp(argv[i], "-modulepath") || !strcmp(argv[i], "-logfile")) {
- if ( (geteuid() == 0) && (getuid() != 0) ) {
- FatalError("The '%s' option can only be used by root.\n", argv[i]);
- }
- else if (!strcmp(argv[i], "-modulepath"))
- {
- char *mp;
- CHECK_FOR_REQUIRED_ARGUMENT();
- mp = strdup(argv[i + 1]);
- if (!mp)
- FatalError("Can't allocate memory for ModulePath\n");
- xf86ModulePath = mp;
- xf86ModPathFrom = X_CMDLINE;
- return 2;
- }
- else if (!strcmp(argv[i], "-logfile"))
- {
- char *lf;
- CHECK_FOR_REQUIRED_ARGUMENT();
- lf = strdup(argv[i + 1]);
- if (!lf)
- FatalError("Can't allocate memory for LogFile\n");
- xf86LogFile = lf;
- xf86LogFileFrom = X_CMDLINE;
- return 2;
- }
- }
- if (!strcmp(argv[i], "-config") || !strcmp(argv[i], "-xf86config"))
- {
- CHECK_FOR_REQUIRED_ARGUMENT();
- if (getuid() != 0 && !xf86PathIsSafe(argv[i + 1])) {
- FatalError("\nInvalid argument for %s\n"
- "\tFor non-root users, the file specified with %s must be\n"
- "\ta relative path and must not contain any \"..\" elements.\n"
- "\tUsing default "__XCONFIGFILE__" search path.\n\n",
- argv[i], argv[i]);
- }
- xf86ConfigFile = argv[i + 1];
- return 2;
- }
- if (!strcmp(argv[i], "-configdir"))
- {
- CHECK_FOR_REQUIRED_ARGUMENT();
- if (getuid() != 0 && !xf86PathIsSafe(argv[i + 1])) {
- FatalError("\nInvalid argument for %s\n"
- "\tFor non-root users, the file specified with %s must be\n"
- "\ta relative path and must not contain any \"..\" elements.\n"
- "\tUsing default "__XCONFIGDIR__" search path.\n\n",
- argv[i], argv[i]);
- }
- xf86ConfigDir = argv[i + 1];
- return 2;
- }
- if (!strcmp(argv[i],"-flipPixels"))
- {
- xf86FlipPixels = TRUE;
- return 1;
- }
-#ifdef XF86VIDMODE
- if (!strcmp(argv[i],"-disableVidMode"))
- {
- xf86VidModeDisabled = TRUE;
- return 1;
- }
- if (!strcmp(argv[i],"-allowNonLocalXvidtune"))
- {
- xf86VidModeAllowNonLocal = TRUE;
- return 1;
- }
-#endif
- if (!strcmp(argv[i],"-allowMouseOpenFail"))
- {
- xf86AllowMouseOpenFail = TRUE;
- return 1;
- }
- if (!strcmp(argv[i],"-ignoreABI"))
- {
- LoaderSetOptions(LDR_OPT_ABI_MISMATCH_NONFATAL);
- return 1;
- }
- if (!strcmp(argv[i],"-verbose"))
- {
- if (++i < argc && argv[i])
- {
- char *end;
- long val;
- val = strtol(argv[i], &end, 0);
- if (*end == '\0')
- {
- xf86SetVerbosity(val);
- return 2;
- }
- }
- xf86SetVerbosity(++xf86Verbose);
- return 1;
- }
- if (!strcmp(argv[i],"-logverbose"))
- {
- if (++i < argc && argv[i])
- {
- char *end;
- long val;
- val = strtol(argv[i], &end, 0);
- if (*end == '\0')
- {
- xf86SetLogVerbosity(val);
- return 2;
- }
- }
- xf86SetLogVerbosity(++xf86LogVerbose);
- return 1;
- }
- if (!strcmp(argv[i],"-quiet"))
- {
- xf86SetVerbosity(-1);
- return 1;
- }
- if (!strcmp(argv[i],"-showconfig") || !strcmp(argv[i],"-version"))
- {
- xf86PrintBanner();
- exit(0);
- }
- if (!strcmp(argv[i],"-showDefaultModulePath"))
- {
- xf86PrintDefaultModulePath();
- exit(0);
- }
- if (!strcmp(argv[i],"-showDefaultLibPath"))
- {
- xf86PrintDefaultLibraryPath();
- exit(0);
- }
- /* Notice the -fp flag, but allow it to pass to the dix layer */
- if (!strcmp(argv[i], "-fp"))
- {
- xf86fpFlag = TRUE;
- return 0;
- }
- /* Notice the -bs flag, but allow it to pass to the dix layer */
- if (!strcmp(argv[i], "-bs"))
- {
- xf86bsDisableFlag = TRUE;
- return 0;
- }
- /* Notice the +bs flag, but allow it to pass to the dix layer */
- if (!strcmp(argv[i], "+bs"))
- {
- xf86bsEnableFlag = TRUE;
- return 0;
- }
- /* Notice the -s flag, but allow it to pass to the dix layer */
- if (!strcmp(argv[i], "-s"))
- {
- xf86sFlag = TRUE;
- return 0;
- }
- if (!strcmp(argv[i], "-pixmap24"))
- {
- xf86Pix24 = Pix24Use24;
- return 1;
- }
- if (!strcmp(argv[i], "-pixmap32"))
- {
- xf86Pix24 = Pix24Use32;
- return 1;
- }
- if (!strcmp(argv[i], "-fbbpp"))
- {
- int bpp;
- CHECK_FOR_REQUIRED_ARGUMENT();
- if (sscanf(argv[++i], "%d", &bpp) == 1)
- {
- xf86FbBpp = bpp;
- return 2;
- }
- else
- {
- ErrorF("Invalid fbbpp\n");
- return 0;
- }
- }
- if (!strcmp(argv[i], "-depth"))
- {
- int depth;
- CHECK_FOR_REQUIRED_ARGUMENT();
- if (sscanf(argv[++i], "%d", &depth) == 1)
- {
- xf86Depth = depth;
- return 2;
- }
- else
- {
- ErrorF("Invalid depth\n");
- return 0;
- }
- }
- if (!strcmp(argv[i], "-weight"))
- {
- int red, green, blue;
- CHECK_FOR_REQUIRED_ARGUMENT();
- if (sscanf(argv[++i], "%1d%1d%1d", &red, &green, &blue) == 3)
- {
- xf86Weight.red = red;
- xf86Weight.green = green;
- xf86Weight.blue = blue;
- return 2;
- }
- else
- {
- ErrorF("Invalid weighting\n");
- return 0;
- }
- }
- if (!strcmp(argv[i], "-gamma") || !strcmp(argv[i], "-rgamma") ||
- !strcmp(argv[i], "-ggamma") || !strcmp(argv[i], "-bgamma"))
- {
- double gamma;
- CHECK_FOR_REQUIRED_ARGUMENT();
- if (sscanf(argv[++i], "%lf", &gamma) == 1) {
- if (gamma < GAMMA_MIN || gamma > GAMMA_MAX) {
- ErrorF("gamma out of range, only %.2f <= gamma_value <= %.1f"
- " is valid\n", GAMMA_MIN, GAMMA_MAX);
- return 0;
- }
- if (!strcmp(argv[i-1], "-gamma"))
- xf86Gamma.red = xf86Gamma.green = xf86Gamma.blue = gamma;
- else if (!strcmp(argv[i-1], "-rgamma")) xf86Gamma.red = gamma;
- else if (!strcmp(argv[i-1], "-ggamma")) xf86Gamma.green = gamma;
- else if (!strcmp(argv[i-1], "-bgamma")) xf86Gamma.blue = gamma;
- return 2;
- }
- }
- if (!strcmp(argv[i], "-layout"))
- {
- CHECK_FOR_REQUIRED_ARGUMENT();
- xf86LayoutName = argv[++i];
- return 2;
- }
- if (!strcmp(argv[i], "-screen"))
- {
- CHECK_FOR_REQUIRED_ARGUMENT();
- xf86ScreenName = argv[++i];
- return 2;
- }
- if (!strcmp(argv[i], "-pointer"))
- {
- CHECK_FOR_REQUIRED_ARGUMENT();
- xf86PointerName = argv[++i];
- return 2;
- }
- if (!strcmp(argv[i], "-keyboard"))
- {
- CHECK_FOR_REQUIRED_ARGUMENT();
- xf86KeyboardName = argv[++i];
- return 2;
- }
- if (!strcmp(argv[i], "-nosilk"))
- {
- xf86silkenMouseDisableFlag = TRUE;
- return 1;
- }
-#ifdef HAVE_ACPI
- if (!strcmp(argv[i], "-noacpi"))
- {
- xf86acpiDisableFlag = TRUE;
- return 1;
- }
-#endif
- if (!strcmp(argv[i], "-configure"))
- {
- if (getuid() != 0 && geteuid() == 0) {
- ErrorF("The '-configure' option can only be used by root.\n");
- exit(1);
- }
- xf86DoConfigure = TRUE;
- xf86AllowMouseOpenFail = TRUE;
- return 1;
- }
- if (!strcmp(argv[i], "-showopts"))
- {
- if (getuid() != 0 && geteuid() == 0) {
- ErrorF("The '-showopts' option can only be used by root.\n");
- exit(1);
- }
- xf86DoShowOptions = TRUE;
- return 1;
- }
- if (!strcmp(argv[i], "-isolateDevice"))
- {
- CHECK_FOR_REQUIRED_ARGUMENT();
- if (strncmp(argv[++i], "PCI:", 4)) {
- FatalError("Bus types other than PCI not yet isolable\n");
- }
- xf86PciIsolateDevice(argv[i]);
- return 2;
- }
- /* Notice cmdline xkbdir, but pass to dix as well */
- if (!strcmp(argv[i], "-xkbdir"))
- {
- xf86xkbdirFlag = TRUE;
- return 0;
- }
-
- /* OS-specific processing */
- return xf86ProcessArgument(argc, argv, i);
-}
-
-/*
- * ddxUseMsg --
- * Print out correct use of device dependent commandline options.
- * Maybe the user now knows what really to do ...
- */
-
-void
-ddxUseMsg(void)
-{
- ErrorF("\n");
- ErrorF("\n");
- ErrorF("Device Dependent Usage\n");
- if (getuid() == 0 || geteuid() != 0)
- {
- ErrorF("-modulepath paths specify the module search path\n");
- ErrorF("-logfile file specify a log file name\n");
- ErrorF("-configure probe for devices and write an "__XCONFIGFILE__"\n");
- ErrorF("-showopts print available options for all installed drivers\n");
- }
- ErrorF("-config file specify a configuration file, relative to the\n");
- ErrorF(" "__XCONFIGFILE__" search path, only root can use absolute\n");
- ErrorF("-configdir dir specify a configuration directory, relative to the\n");
- ErrorF(" "__XCONFIGDIR__" search path, only root can use absolute\n");
- ErrorF("-verbose [n] verbose startup messages\n");
- ErrorF("-logverbose [n] verbose log messages\n");
- ErrorF("-quiet minimal startup messages\n");
- ErrorF("-pixmap24 use 24bpp pixmaps for depth 24\n");
- ErrorF("-pixmap32 use 32bpp pixmaps for depth 24\n");
- ErrorF("-fbbpp n set bpp for the framebuffer. Default: 8\n");
- ErrorF("-depth n set colour depth. Default: 8\n");
- ErrorF("-gamma f set gamma value (0.1 < f < 10.0) Default: 1.0\n");
- ErrorF("-rgamma f set gamma value for red phase\n");
- ErrorF("-ggamma f set gamma value for green phase\n");
- ErrorF("-bgamma f set gamma value for blue phase\n");
- ErrorF("-weight nnn set RGB weighting at 16 bpp. Default: 565\n");
- ErrorF("-layout name specify the ServerLayout section name\n");
- ErrorF("-screen name specify the Screen section name\n");
- ErrorF("-keyboard name specify the core keyboard InputDevice name\n");
- ErrorF("-pointer name specify the core pointer InputDevice name\n");
- ErrorF("-nosilk disable Silken Mouse\n");
- ErrorF("-flipPixels swap default black/white Pixel values\n");
-#ifdef XF86VIDMODE
- ErrorF("-disableVidMode disable mode adjustments with xvidtune\n");
- ErrorF("-allowNonLocalXvidtune allow xvidtune to be run as a non-local client\n");
-#endif
- ErrorF("-allowMouseOpenFail start server even if the mouse can't be initialized\n");
- ErrorF("-ignoreABI make module ABI mismatches non-fatal\n");
- ErrorF("-isolateDevice bus_id restrict device resets to bus_id (PCI only)\n");
- ErrorF("-version show the server version\n");
- ErrorF("-showDefaultModulePath show the server default module path\n");
- ErrorF("-showDefaultLibPath show the server default library path\n");
- /* OS-specific usage */
- xf86UseMsg();
- ErrorF("\n");
-}
-
-
-/*
- * xf86LoadModules iterates over a list that is being passed in.
- */
-Bool
-xf86LoadModules(char **list, pointer *optlist)
-{
- int errmaj, errmin;
- pointer opt;
- int i;
- char *name;
- Bool failed = FALSE;
-
- if (!list)
- return TRUE;
-
- for (i = 0; list[i] != NULL; i++) {
-
- /* Normalise the module name */
- name = xf86NormalizeName(list[i]);
-
- /* Skip empty names */
- if (name == NULL || *name == '\0')
- continue;
-
- /* Replace obsolete keyboard driver with kbd */
- if (!xf86NameCmp(name, "keyboard")) {
- strcpy(name, "kbd");
- }
-
- if (optlist)
- opt = optlist[i];
- else
- opt = NULL;
-
- if (!LoadModule(name, NULL, NULL, NULL, opt, NULL, &errmaj, &errmin)) {
- LoaderErrorMsg(NULL, name, errmaj, errmin);
- failed = TRUE;
- }
- free(name);
- }
- return !failed;
-}
-
-/* Pixmap format stuff */
-
-PixmapFormatPtr
-xf86GetPixFormat(ScrnInfoPtr pScrn, int depth)
-{
- int i;
- static PixmapFormatRec format; /* XXX not reentrant */
-
- /*
- * When the formats[] list initialisation isn't complete, check the
- * depth 24 pixmap config/cmdline options and screen-specified formats.
- */
-
- if (!formatsDone) {
- if (depth == 24) {
- Pix24Flags pix24 = Pix24DontCare;
-
- format.depth = 24;
- format.scanlinePad = BITMAP_SCANLINE_PAD;
- if (xf86Info.pixmap24 != Pix24DontCare)
- pix24 = xf86Info.pixmap24;
- else if (pScrn->pixmap24 != Pix24DontCare)
- pix24 = pScrn->pixmap24;
- if (pix24 == Pix24Use24)
- format.bitsPerPixel = 24;
- else
- format.bitsPerPixel = 32;
- return &format;
- }
- }
-
- for (i = 0; i < numFormats; i++)
- if (formats[i].depth == depth)
- break;
- if (i != numFormats)
- return &formats[i];
- else if (!formatsDone) {
- /* Check for screen-specified formats */
- for (i = 0; i < pScrn->numFormats; i++)
- if (pScrn->formats[i].depth == depth)
- break;
- if (i != pScrn->numFormats)
- return &pScrn->formats[i];
- }
- return NULL;
-}
-
-int
-xf86GetBppFromDepth(ScrnInfoPtr pScrn, int depth)
-{
- PixmapFormatPtr format;
-
-
- format = xf86GetPixFormat(pScrn, depth);
- if (format)
- return format->bitsPerPixel;
- else
- return 0;
-}
+/*
+ * Loosely based on code bearing the following copyright:
+ *
+ * Copyright 1990,91 by Thomas Roell, Dinkelscherben, Germany.
+ */
+/*
+ * Copyright (c) 1992-2003 by The XFree86 Project, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include <stdlib.h>
+#include <errno.h>
+
+#undef HAS_UTSNAME
+#if !defined(WIN32)
+#define HAS_UTSNAME 1
+#include <sys/utsname.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xmd.h>
+#include <X11/Xproto.h>
+#include <X11/Xatom.h>
+#include "input.h"
+#include "servermd.h"
+#include "windowstr.h"
+#include "scrnintstr.h"
+#include "site.h"
+#include "mi.h"
+
+#include "compiler.h"
+
+#include "loaderProcs.h"
+#ifdef XFreeXDGA
+#include "dgaproc.h"
+#endif
+
+#define XF86_OS_PRIVS
+#include "xf86.h"
+#include "xf86Priv.h"
+#include "xf86Config.h"
+#include "xf86_OSlib.h"
+#include "xf86cmap.h"
+#include "xorgVersion.h"
+#include "xf86Build.h"
+#include "mipointer.h"
+#include <X11/extensions/XI.h>
+#include <X11/extensions/XIproto.h>
+#include "xf86DDC.h"
+#include "xf86Xinput.h"
+#include "xf86InPriv.h"
+#include "picturestr.h"
+
+#include "xf86Bus.h"
+#include "xf86VGAarbiter.h"
+#include "globals.h"
+
+#ifdef DPMSExtension
+#include <X11/extensions/dpmsconst.h>
+#include "dpmsproc.h"
+#endif
+#include <hotplug.h>
+
+
+#ifdef XF86PM
+void (*xf86OSPMClose)(void) = NULL;
+#endif
+static Bool xorgHWOpenConsole = FALSE;
+
+/* Common pixmap formats */
+
+static PixmapFormatRec formats[MAXFORMATS] = {
+ { 1, 1, BITMAP_SCANLINE_PAD },
+ { 4, 8, BITMAP_SCANLINE_PAD },
+ { 8, 8, BITMAP_SCANLINE_PAD },
+ { 15, 16, BITMAP_SCANLINE_PAD },
+ { 16, 16, BITMAP_SCANLINE_PAD },
+ { 24, 32, BITMAP_SCANLINE_PAD },
+ { 32, 32, BITMAP_SCANLINE_PAD },
+};
+static int numFormats = 7;
+static Bool formatsDone = FALSE;
+
+#ifndef OSNAME
+#define OSNAME " unknown"
+#endif
+#ifndef OSVENDOR
+#define OSVENDOR ""
+#endif
+#ifndef PRE_RELEASE
+#define PRE_RELEASE XORG_VERSION_SNAP
+#endif
+
+static void
+xf86PrintBanner(void)
+{
+#if PRE_RELEASE
+ xf86ErrorFVerb(0, "\n"
+ "This is a pre-release version of the X server from " XVENDORNAME ".\n"
+ "It is not supported in any way.\n"
+ "Bugs may be filed in the bugzilla at http://bugs.freedesktop.org/.\n"
+ "Select the \"xorg\" product for bugs you find in this release.\n"
+ "Before reporting bugs in pre-release versions please check the\n"
+ "latest version in the X.Org Foundation git repository.\n"
+ "See http://wiki.x.org/wiki/GitPage for git access instructions.\n");
+#endif
+ xf86ErrorFVerb(0, "\nX.Org X Server %d.%d.%d",
+ XORG_VERSION_MAJOR,
+ XORG_VERSION_MINOR,
+ XORG_VERSION_PATCH);
+#if XORG_VERSION_SNAP > 0
+ xf86ErrorFVerb(0, ".%d", XORG_VERSION_SNAP);
+#endif
+
+#if XORG_VERSION_SNAP >= 900
+ /* When the minor number is 99, that signifies that the we are making
+ * a release candidate for a major version. (X.0.0)
+ * When the patch number is 99, that signifies that the we are making
+ * a release candidate for a minor version. (X.Y.0)
+ * When the patch number is < 99, then we are making a release
+ * candidate for the next point release. (X.Y.Z)
+ */
+#if XORG_VERSION_MINOR >= 99
+ xf86ErrorFVerb(0, " (%d.0.0 RC %d)", XORG_VERSION_MAJOR+1,
+ XORG_VERSION_SNAP - 900);
+#elif XORG_VERSION_PATCH == 99
+ xf86ErrorFVerb(0, " (%d.%d.0 RC %d)", XORG_VERSION_MAJOR,
+ XORG_VERSION_MINOR + 1, XORG_VERSION_SNAP - 900);
+#else
+ xf86ErrorFVerb(0, " (%d.%d.%d RC %d)", XORG_VERSION_MAJOR,
+ XORG_VERSION_MINOR, XORG_VERSION_PATCH + 1,
+ XORG_VERSION_SNAP - 900);
+#endif
+#endif
+
+#ifdef XORG_CUSTOM_VERSION
+ xf86ErrorFVerb(0, " (%s)", XORG_CUSTOM_VERSION);
+#endif
+#ifndef XORG_DATE
+# define XORG_DATE "Unknown"
+#endif
+ xf86ErrorFVerb(0, "\nRelease Date: %s\n", XORG_DATE);
+ xf86ErrorFVerb(0, "X Protocol Version %d, Revision %d\n",
+ X_PROTOCOL, X_PROTOCOL_REVISION);
+ xf86ErrorFVerb(0, "Build Operating System: %s %s\n", OSNAME, OSVENDOR);
+#ifdef HAS_UTSNAME
+ {
+ struct utsname name;
+
+ /* Linux & BSD state that 0 is success, SysV (including Solaris, HP-UX,
+ and Irix) and Single Unix Spec 3 just say that non-negative is success.
+ All agree that failure is represented by a negative number.
+ */
+ if (uname(&name) >= 0) {
+ xf86ErrorFVerb(0, "Current Operating System: %s %s %s %s %s\n",
+ name.sysname, name.nodename, name.release, name.version, name.machine);
+#ifdef linux
+ do {
+ char buf[80];
+ int fd = open("/proc/cmdline", O_RDONLY);
+ if (fd != -1) {
+ xf86ErrorFVerb(0, "Kernel command line: ");
+ memset(buf, 0, 80);
+ while (read(fd, buf, 80) > 0) {
+ xf86ErrorFVerb(0, "%.80s", buf);
+ memset(buf, 0, 80);
+ }
+ close(fd);
+ }
+ } while (0);
+#endif
+ }
+ }
+#endif
+#if defined(BUILD_DATE) && (BUILD_DATE > 19000000)
+ {
+ struct tm t;
+ char buf[100];
+
+ memset(&t, 0, sizeof(t));
+ memset(buf, 0, sizeof(buf));
+ t.tm_mday = BUILD_DATE % 100;
+ t.tm_mon = (BUILD_DATE / 100) % 100 - 1;
+ t.tm_year = BUILD_DATE / 10000 - 1900;
+#if defined(BUILD_TIME)
+ t.tm_sec = BUILD_TIME % 100;
+ t.tm_min = (BUILD_TIME / 100) % 100;
+ t.tm_hour = (BUILD_TIME / 10000) % 100;
+ if (strftime(buf, sizeof(buf), "%d %B %Y %I:%M:%S%p", &t))
+ xf86ErrorFVerb(0, "Build Date: %s\n", buf);
+#else
+ if (strftime(buf, sizeof(buf), "%d %B %Y", &t))
+ xf86ErrorFVerb(0, "Build Date: %s\n", buf);
+#endif
+ }
+#endif
+#if defined(BUILDERSTRING)
+ xf86ErrorFVerb(0, "%s \n", BUILDERSTRING);
+#endif
+ xf86ErrorFVerb(0, "Current version of pixman: %s\n",
+ pixman_version_string());
+ xf86ErrorFVerb(0, "\tBefore reporting problems, check "
+ ""__VENDORDWEBSUPPORT__"\n"
+ "\tto make sure that you have the latest version.\n");
+}
+
+static void
+xf86PrintMarkers(void)
+{
+ LogPrintMarkers();
+}
+
+static Bool
+xf86CreateRootWindow(WindowPtr pWin)
+{
+ int ret = TRUE;
+ int err = Success;
+ ScreenPtr pScreen = pWin->drawable.pScreen;
+ RootWinPropPtr pProp;
+ CreateWindowProcPtr CreateWindow = (CreateWindowProcPtr)
+ dixLookupPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey);
+
+ DebugF("xf86CreateRootWindow(%p)\n", pWin);
+
+ if ( pScreen->CreateWindow != xf86CreateRootWindow ) {
+ /* Can't find hook we are hung on */
+ xf86DrvMsg(pScreen->myNum, X_WARNING /* X_ERROR */,
+ "xf86CreateRootWindow %p called when not in pScreen->CreateWindow %p n",
+ (void *)xf86CreateRootWindow,
+ (void *)pScreen->CreateWindow );
+ }
+
+ /* Unhook this function ... */
+ pScreen->CreateWindow = CreateWindow;
+ dixSetPrivate(&pScreen->devPrivates, xf86CreateRootWindowKey, NULL);
+
+ /* ... and call the previous CreateWindow fuction, if any */
+ if (NULL!=pScreen->CreateWindow) {
+ ret = (*pScreen->CreateWindow)(pWin);
+ }
+
+ /* Now do our stuff */
+ if (xf86RegisteredPropertiesTable != NULL) {
+ if (pWin->parent == NULL && xf86RegisteredPropertiesTable != NULL) {
+ for (pProp = xf86RegisteredPropertiesTable[pScreen->myNum];
+ pProp != NULL && err==Success;
+ pProp = pProp->next )
+ {
+ Atom prop;
+
+ prop = MakeAtom(pProp->name, strlen(pProp->name), TRUE);
+ err = dixChangeWindowProperty(serverClient, pWin,
+ prop, pProp->type,
+ pProp->format, PropModeReplace,
+ pProp->size, pProp->data,
+ FALSE);
+ }
+
+ /* Look at err */
+ ret &= (err==Success);
+
+ } else {
+ xf86Msg(X_ERROR, "xf86CreateRootWindow unexpectedly called with "
+ "non-root window %p (parent %p)\n",
+ (void *)pWin, (void *)pWin->parent);
+ ret = FALSE;
+ }
+ }
+
+ DebugF("xf86CreateRootWindow() returns %d\n", ret);
+ return ret;
+}
+
+
+static void
+InstallSignalHandlers(void)
+{
+ /*
+ * Install signal handler for unexpected signals
+ */
+ xf86Info.caughtSignal=FALSE;
+ if (!xf86Info.notrapSignals) {
+ OsRegisterSigWrapper(xf86SigWrapper);
+ } else {
+ signal(SIGSEGV, SIG_DFL);
+ signal(SIGILL, SIG_DFL);
+#ifdef SIGEMT
+ signal(SIGEMT, SIG_DFL);
+#endif
+ signal(SIGFPE, SIG_DFL);
+ signal(SIGBUS, SIG_DFL);
+ signal(SIGSYS, SIG_DFL);
+ signal(SIGXCPU, SIG_DFL);
+ signal(SIGXFSZ, SIG_DFL);
+ }
+}
+
+/*
+ * InitOutput --
+ * Initialize screenInfo for all actually accessible framebuffers.
+ * That includes vt-manager setup, querying all possible devices and
+ * collecting the pixmap formats.
+ */
+void
+InitOutput(ScreenInfo *pScreenInfo, int argc, char **argv)
+{
+ int i, j, k, scr_index, was_blocked = 0;
+ char **modulelist;
+ pointer *optionlist;
+ Pix24Flags screenpix24, pix24;
+ MessageType pix24From = X_DEFAULT;
+ Bool pix24Fail = FALSE;
+ Bool autoconfig = FALSE;
+ GDevPtr configured_device;
+
+ xf86Initialising = TRUE;
+
+ if (serverGeneration == 1) {
+ if ((xf86ServerName = strrchr(argv[0], '/')) != 0)
+ xf86ServerName++;
+ else
+ xf86ServerName = argv[0];
+
+ xf86PrintBanner();
+ xf86PrintMarkers();
+ if (xf86LogFile) {
+ time_t t;
+ const char *ct;
+ t = time(NULL);
+ ct = ctime(&t);
+ xf86MsgVerb(xf86LogFileFrom, 0, "Log file: \"%s\", Time: %s",
+ xf86LogFile, ct);
+ }
+
+ /* Read and parse the config file */
+ if (!xf86DoConfigure && !xf86DoShowOptions) {
+ switch (xf86HandleConfigFile(FALSE)) {
+ case CONFIG_OK:
+ break;
+ case CONFIG_PARSE_ERROR:
+ xf86Msg(X_ERROR, "Error parsing the config file\n");
+ return;
+ case CONFIG_NOFILE:
+ autoconfig = TRUE;
+ break;
+ }
+ }
+
+ InstallSignalHandlers();
+
+ /* Initialise the loader */
+ LoaderInit();
+
+ /* Tell the loader the default module search path */
+ LoaderSetPath(xf86ModulePath);
+
+ if (xf86Info.ignoreABI) {
+ LoaderSetOptions(LDR_OPT_ABI_MISMATCH_NONFATAL);
+ }
+
+ if (xf86DoShowOptions)
+ DoShowOptions();
+
+ /* Do a general bus probe. This will be a PCI probe for x86 platforms */
+ xf86BusProbe();
+
+ if (xf86DoConfigure)
+ DoConfigure();
+
+ if (autoconfig) {
+ if (!xf86AutoConfig()) {
+ xf86Msg(X_ERROR, "Auto configuration failed\n");
+ return;
+ }
+ }
+
+#ifdef XF86PM
+ xf86OSPMClose = xf86OSPMOpen();
+#endif
+
+ /* Load all modules specified explicitly in the config file */
+ if ((modulelist = xf86ModulelistFromConfig(&optionlist))) {
+ xf86LoadModules(modulelist, optionlist);
+ free(modulelist);
+ free(optionlist);
+ }
+
+ /* Load all driver modules specified in the config file */
+ /* If there aren't any specified in the config file, autoconfig them */
+ /* FIXME: Does not handle multiple active screen sections, but I'm not
+ * sure if we really want to handle that case*/
+ configured_device = xf86ConfigLayout.screens->screen->device;
+ if ((!configured_device) || (!configured_device->driver)) {
+ if (!autoConfigDevice(configured_device)) {
+ xf86Msg(X_ERROR, "Automatic driver configuration failed\n");
+ return ;
+ }
+ }
+ if ((modulelist = xf86DriverlistFromConfig())) {
+ xf86LoadModules(modulelist, NULL);
+ free(modulelist);
+ }
+
+ /* Load all input driver modules specified in the config file. */
+ if ((modulelist = xf86InputDriverlistFromConfig())) {
+ xf86LoadModules(modulelist, NULL);
+ free(modulelist);
+ }
+
+ /*
+ * It is expected that xf86AddDriver()/xf86AddInputDriver will be
+ * called for each driver as it is loaded. Those functions save the
+ * module pointers for drivers.
+ * XXX Nothing keeps track of them for other modules.
+ */
+ /* XXX What do we do if not all of these could be loaded? */
+
+ /*
+ * At this point, xf86DriverList[] is all filled in with entries for
+ * each of the drivers to try and xf86NumDrivers has the number of
+ * drivers. If there are none, return now.
+ */
+
+ if (xf86NumDrivers == 0) {
+ xf86Msg(X_ERROR, "No drivers available.\n");
+ return;
+ }
+
+ /*
+ * Call each of the Identify functions and call the driverFunc to check
+ * if HW access is required. The Identify functions print out some
+ * identifying information, and anything else that might be
+ * needed at this early stage.
+ */
+
+ for (i = 0; i < xf86NumDrivers; i++) {
+ if (xf86DriverList[i]->Identify != NULL)
+ xf86DriverList[i]->Identify(0);
+
+ if (!xorgHWAccess || !xorgHWOpenConsole) {
+ xorgHWFlags flags;
+ if(!xf86DriverList[i]->driverFunc
+ || !xf86DriverList[i]->driverFunc(NULL,
+ GET_REQUIRED_HW_INTERFACES,
+ &flags))
+ flags = HW_IO;
+
+ if(NEED_IO_ENABLED(flags))
+ xorgHWAccess = TRUE;
+ if(!(flags & HW_SKIP_CONSOLE))
+ xorgHWOpenConsole = TRUE;
+ }
+ }
+
+ if (xorgHWOpenConsole)
+ xf86OpenConsole();
+ else
+ xf86Info.dontVTSwitch = TRUE;
+
+ if (xf86BusConfig() == FALSE)
+ return;
+
+ xf86PostProbe();
+
+ /*
+ * Sort the drivers to match the requested ording. Using a slow
+ * bubble sort.
+ */
+ for (j = 0; j < xf86NumScreens - 1; j++) {
+ for (i = 0; i < xf86NumScreens - j - 1; i++) {
+ if (xf86Screens[i + 1]->confScreen->screennum <
+ xf86Screens[i]->confScreen->screennum) {
+ ScrnInfoPtr tmpScrn = xf86Screens[i + 1];
+ xf86Screens[i + 1] = xf86Screens[i];
+ xf86Screens[i] = tmpScrn;
+ }
+ }
+ }
+ /* Fix up the indexes */
+ for (i = 0; i < xf86NumScreens; i++) {
+ xf86Screens[i]->scrnIndex = i;
+ }
+
+ /*
+ * Call the driver's PreInit()'s to complete initialisation for the first
+ * generation.
+ */
+
+ for (i = 0; i < xf86NumScreens; i++) {
+ xf86VGAarbiterScrnInit(xf86Screens[i]);
+ xf86VGAarbiterLock(xf86Screens[i]);
+ if (xf86Screens[i]->PreInit &&
+ xf86Screens[i]->PreInit(xf86Screens[i], 0))
+ xf86Screens[i]->configured = TRUE;
+ xf86VGAarbiterUnlock(xf86Screens[i]);
+ }
+ for (i = 0; i < xf86NumScreens; i++)
+ if (!xf86Screens[i]->configured)
+ xf86DeleteScreen(i--, 0);
+
+ /*
+ * If no screens left, return now.
+ */
+
+ if (xf86NumScreens == 0) {
+ xf86Msg(X_ERROR,
+ "Screen(s) found, but none have a usable configuration.\n");
+ return;
+ }
+
+ for (i = 0; i < xf86NumScreens; i++) {
+ if (xf86Screens[i]->name == NULL) {
+ XNFasprintf(&xf86Screens[i]->name, "screen%d", i);
+ xf86MsgVerb(X_WARNING, 0,
+ "Screen driver %d has no name set, using `%s'.\n",
+ i, xf86Screens[i]->name);
+ }
+ }
+
+ /* Remove (unload) drivers that are not required */
+ for (i = 0; i < xf86NumDrivers; i++)
+ if (xf86DriverList[i] && xf86DriverList[i]->refCount <= 0)
+ xf86DeleteDriver(i);
+
+ /*
+ * At this stage we know how many screens there are.
+ */
+
+ for (i = 0; i < xf86NumScreens; i++)
+ xf86InitViewport(xf86Screens[i]);
+
+ /*
+ * Collect all pixmap formats and check for conflicts at the display
+ * level. Should we die here? Or just delete the offending screens?
+ */
+ screenpix24 = Pix24DontCare;
+ for (i = 0; i < xf86NumScreens; i++) {
+ if (xf86Screens[i]->imageByteOrder !=
+ xf86Screens[0]->imageByteOrder)
+ FatalError("Inconsistent display bitmapBitOrder. Exiting\n");
+ if (xf86Screens[i]->bitmapScanlinePad !=
+ xf86Screens[0]->bitmapScanlinePad)
+ FatalError("Inconsistent display bitmapScanlinePad. Exiting\n");
+ if (xf86Screens[i]->bitmapScanlineUnit !=
+ xf86Screens[0]->bitmapScanlineUnit)
+ FatalError("Inconsistent display bitmapScanlineUnit. Exiting\n");
+ if (xf86Screens[i]->bitmapBitOrder !=
+ xf86Screens[0]->bitmapBitOrder)
+ FatalError("Inconsistent display bitmapBitOrder. Exiting\n");
+
+ /* Determine the depth 24 pixmap format the screens would like */
+ if (xf86Screens[i]->pixmap24 != Pix24DontCare) {
+ if (screenpix24 == Pix24DontCare)
+ screenpix24 = xf86Screens[i]->pixmap24;
+ else if (screenpix24 != xf86Screens[i]->pixmap24)
+ FatalError("Inconsistent depth 24 pixmap format. Exiting\n");
+ }
+ }
+ /* check if screenpix24 is consistent with the config/cmdline */
+ if (xf86Info.pixmap24 != Pix24DontCare) {
+ pix24 = xf86Info.pixmap24;
+ pix24From = xf86Info.pix24From;
+ if (screenpix24 != Pix24DontCare && screenpix24 != xf86Info.pixmap24)
+ pix24Fail = TRUE;
+ } else if (screenpix24 != Pix24DontCare) {
+ pix24 = screenpix24;
+ pix24From = X_PROBED;
+ } else
+ pix24 = Pix24Use32;
+
+ if (pix24Fail)
+ FatalError("Screen(s) can't use the required depth 24 pixmap format"
+ " (%d). Exiting\n", PIX24TOBPP(pix24));
+
+ /* Initialise the depth 24 format */
+ for (j = 0; j < numFormats && formats[j].depth != 24; j++)
+ ;
+ formats[j].bitsPerPixel = PIX24TOBPP(pix24);
+
+ /* Collect additional formats */
+ for (i = 0; i < xf86NumScreens; i++) {
+ for (j = 0; j < xf86Screens[i]->numFormats; j++) {
+ for (k = 0; ; k++) {
+ if (k >= numFormats) {
+ if (k >= MAXFORMATS)
+ FatalError("Too many pixmap formats! Exiting\n");
+ formats[k] = xf86Screens[i]->formats[j];
+ numFormats++;
+ break;
+ }
+ if (formats[k].depth == xf86Screens[i]->formats[j].depth) {
+ if ((formats[k].bitsPerPixel ==
+ xf86Screens[i]->formats[j].bitsPerPixel) &&
+ (formats[k].scanlinePad ==
+ xf86Screens[i]->formats[j].scanlinePad))
+ break;
+ FatalError("Inconsistent pixmap format for depth %d."
+ " Exiting\n", formats[k].depth);
+ }
+ }
+ }
+ }
+ formatsDone = TRUE;
+
+ if (xf86Info.vtno >= 0 ) {
+#define VT_ATOM_NAME "XFree86_VT"
+ Atom VTAtom=-1;
+ CARD32 *VT = NULL;
+ int ret;
+
+ /* This memory needs to stay available until the screen has been
+ initialized, and we can create the property for real.
+ */
+ if ( (VT = malloc(sizeof(CARD32)))==NULL ) {
+ FatalError("Unable to make VT property - out of memory. Exiting...\n");
+ }
+ *VT = xf86Info.vtno;
+
+ VTAtom = MakeAtom(VT_ATOM_NAME, sizeof(VT_ATOM_NAME) - 1, TRUE);
+
+ for (i = 0, ret = Success; i < xf86NumScreens && ret == Success; i++) {
+ ret = xf86RegisterRootWindowProperty(xf86Screens[i]->scrnIndex,
+ VTAtom, XA_INTEGER, 32,
+ 1, VT );
+ if (ret != Success)
+ xf86DrvMsg(xf86Screens[i]->scrnIndex, X_WARNING,
+ "Failed to register VT property\n");
+ }
+ }
+
+ /* If a screen uses depth 24, show what the pixmap format is */
+ for (i = 0; i < xf86NumScreens; i++) {
+ if (xf86Screens[i]->depth == 24) {
+ xf86Msg(pix24From, "Depth 24 pixmap format is %d bpp\n",
+ PIX24TOBPP(pix24));
+ break;
+ }
+ }
+ } else {
+ /*
+ * serverGeneration != 1; some OSs have to do things here, too.
+ */
+ if (xorgHWOpenConsole)
+ xf86OpenConsole();
+
+#ifdef XF86PM
+ /*
+ should we reopen it here? We need to deal with an already opened
+ device. We could leave this to the OS layer. For now we simply
+ close it here
+ */
+ if (xf86OSPMClose)
+ xf86OSPMClose();
+ if ((xf86OSPMClose = xf86OSPMOpen()) != NULL)
+ xf86MsgVerb(X_INFO, 3, "APM registered successfully\n");
+#endif
+
+ /* Make sure full I/O access is enabled */
+ if (xorgHWAccess)
+ xf86EnableIO();
+ }
+
+ /*
+ * Use the previously collected parts to setup pScreenInfo
+ */
+
+ pScreenInfo->imageByteOrder = xf86Screens[0]->imageByteOrder;
+ pScreenInfo->bitmapScanlinePad = xf86Screens[0]->bitmapScanlinePad;
+ pScreenInfo->bitmapScanlineUnit = xf86Screens[0]->bitmapScanlineUnit;
+ pScreenInfo->bitmapBitOrder = xf86Screens[0]->bitmapBitOrder;
+ pScreenInfo->numPixmapFormats = numFormats;
+ for (i = 0; i < numFormats; i++)
+ pScreenInfo->formats[i] = formats[i];
+
+ /* Make sure the server's VT is active */
+
+ if (serverGeneration != 1) {
+ xf86Resetting = TRUE;
+ /* All screens are in the same state, so just check the first */
+ if (!xf86Screens[0]->vtSema) {
+#ifdef HAS_USL_VTS
+ ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ);
+#endif
+ xf86AccessEnter();
+ was_blocked = xf86BlockSIGIO();
+ }
+ }
+
+ for (i = 0; i < xf86NumScreens; i++)
+ if (!xf86ColormapAllocatePrivates(xf86Screens[i]))
+ FatalError("Cannot register DDX private keys");
+
+ if (!dixRegisterPrivateKey(&xf86ScreenKeyRec, PRIVATE_SCREEN, 0) ||
+ !dixRegisterPrivateKey(&xf86CreateRootWindowKeyRec, PRIVATE_SCREEN, 0))
+ FatalError("Cannot register DDX private keys");
+
+ for (i = 0; i < xf86NumScreens; i++) {
+ xf86VGAarbiterLock(xf86Screens[i]);
+ /*
+ * Almost everything uses these defaults, and many of those that
+ * don't, will wrap them.
+ */
+ xf86Screens[i]->EnableDisableFBAccess = xf86EnableDisableFBAccess;
+#ifdef XFreeXDGA
+ xf86Screens[i]->SetDGAMode = xf86SetDGAMode;
+#endif
+ xf86Screens[i]->DPMSSet = NULL;
+ xf86Screens[i]->LoadPalette = NULL;
+ xf86Screens[i]->SetOverscan = NULL;
+ xf86Screens[i]->DriverFunc = NULL;
+ xf86Screens[i]->pScreen = NULL;
+ scr_index = AddScreen(xf86Screens[i]->ScreenInit, argc, argv);
+ xf86VGAarbiterUnlock(xf86Screens[i]);
+ if (scr_index == i) {
+ /*
+ * Hook in our ScrnInfoRec, and initialise some other pScreen
+ * fields.
+ */
+ dixSetPrivate(&screenInfo.screens[scr_index]->devPrivates,
+ xf86ScreenKey, xf86Screens[i]);
+ xf86Screens[i]->pScreen = screenInfo.screens[scr_index];
+ /* The driver should set this, but make sure it is set anyway */
+ xf86Screens[i]->vtSema = TRUE;
+ } else {
+ /* This shouldn't normally happen */
+ FatalError("AddScreen/ScreenInit failed for driver %d\n", i);
+ }
+
+ DebugF("InitOutput - xf86Screens[%d]->pScreen = %p\n",
+ i, xf86Screens[i]->pScreen );
+ DebugF("xf86Screens[%d]->pScreen->CreateWindow = %p\n",
+ i, xf86Screens[i]->pScreen->CreateWindow );
+
+ dixSetPrivate(&screenInfo.screens[scr_index]->devPrivates,
+ xf86CreateRootWindowKey,
+ xf86Screens[i]->pScreen->CreateWindow);
+ xf86Screens[i]->pScreen->CreateWindow = xf86CreateRootWindow;
+
+ if (PictureGetSubpixelOrder (xf86Screens[i]->pScreen) == SubPixelUnknown)
+ {
+ xf86MonPtr DDC = (xf86MonPtr)(xf86Screens[i]->monitor->DDC);
+ PictureSetSubpixelOrder (xf86Screens[i]->pScreen,
+ DDC ?
+ (DDC->features.input_type ?
+ SubPixelHorizontalRGB : SubPixelNone) :
+ SubPixelUnknown);
+ }
+#ifdef RANDR
+ if (!xf86Info.disableRandR)
+ xf86RandRInit (screenInfo.screens[scr_index]);
+ xf86Msg(xf86Info.randRFrom, "RandR %s\n",
+ xf86Info.disableRandR ? "disabled" : "enabled");
+#endif
+ }
+
+ xf86VGAarbiterWrapFunctions();
+ xf86UnblockSIGIO(was_blocked);
+
+ xf86InitOrigins();
+
+ xf86Resetting = FALSE;
+ xf86Initialising = FALSE;
+
+ RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA, xf86Wakeup,
+ NULL);
+}
+
+/*
+ * InitInput --
+ * Initialize all supported input devices.
+ */
+
+void
+InitInput(int argc, char **argv)
+{
+ InputInfoPtr* pDev;
+ DeviceIntPtr dev;
+
+ xf86Info.vtRequestsPending = FALSE;
+
+ mieqInit();
+
+ GetEventList(&xf86Events);
+
+ /* Initialize all configured input devices */
+ for (pDev = xf86ConfigLayout.inputs; pDev && *pDev; pDev++) {
+ /* Replace obsolete keyboard driver with kbd */
+ if (!xf86NameCmp((*pDev)->driver, "keyboard")) {
+ strcpy((*pDev)->driver, "kbd");
+ }
+
+ /* If one fails, the others will too */
+ if (xf86NewInputDevice(*pDev, &dev, TRUE) == BadAlloc)
+ break;
+ }
+
+ config_init();
+}
+
+void
+CloseInput (void)
+{
+ config_fini();
+}
+
+/*
+ * OsVendorInit --
+ * OS/Vendor-specific initialisations. Called from OsInit(), which
+ * is called by dix before establishing the well known sockets.
+ */
+
+void
+OsVendorInit(void)
+{
+ static Bool beenHere = FALSE;
+
+ signal(SIGCHLD, SIG_DFL); /* Need to wait for child processes */
+
+ if (!beenHere) {
+ umask(022);
+ xf86LogInit();
+ }
+
+ /* Set stderr to non-blocking. */
+#ifndef O_NONBLOCK
+#if defined(FNDELAY)
+#define O_NONBLOCK FNDELAY
+#elif defined(O_NDELAY)
+#define O_NONBLOCK O_NDELAY
+#endif
+
+#ifdef O_NONBLOCK
+ if (!beenHere) {
+ if (geteuid() == 0 && getuid() != geteuid())
+ {
+ int status;
+
+ status = fcntl(fileno(stderr), F_GETFL, 0);
+ if (status != -1) {
+ fcntl(fileno(stderr), F_SETFL, status | O_NONBLOCK);
+ }
+ }
+ }
+#endif
+#endif
+
+ beenHere = TRUE;
+}
+
+/*
+ * ddxGiveUp --
+ * Device dependent cleanup. Called by by dix before normal server death.
+ * For SYSV386 we must switch the terminal back to normal mode. No error-
+ * checking here, since there should be restored as much as possible.
+ */
+
+void
+ddxGiveUp(void)
+{
+ int i;
+
+ xf86VGAarbiterFini();
+
+#ifdef XF86PM
+ if (xf86OSPMClose)
+ xf86OSPMClose();
+ xf86OSPMClose = NULL;
+#endif
+
+ for (i = 0; i < xf86NumScreens; i++) {
+ /*
+ * zero all access functions to
+ * trap calls when switched away.
+ */
+ xf86Screens[i]->vtSema = FALSE;
+ }
+
+#ifdef XFreeXDGA
+ DGAShutdown();
+#endif
+
+ if (xorgHWOpenConsole)
+ xf86CloseConsole();
+
+ xf86CloseLog();
+
+ /* If an unexpected signal was caught, dump a core for debugging */
+ if (xf86Info.caughtSignal)
+ OsAbort();
+}
+
+
+
+/*
+ * AbortDDX --
+ * DDX - specific abort routine. Called by AbortServer(). The attempt is
+ * made to restore all original setting of the displays. Also all devices
+ * are closed.
+ */
+
+void
+AbortDDX(void)
+{
+ int i;
+
+ xf86BlockSIGIO();
+
+ /*
+ * try to restore the original video state
+ */
+#ifdef DPMSExtension /* Turn screens back on */
+ if (DPMSPowerLevel != DPMSModeOn)
+ DPMSSet(serverClient, DPMSModeOn);
+#endif
+ if (xf86Screens) {
+ for (i = 0; i < xf86NumScreens; i++)
+ if (xf86Screens[i]->vtSema) {
+ /*
+ * if we are aborting before ScreenInit() has finished
+ * we might not have been wrapped yet. Therefore enable
+ * screen explicitely.
+ */
+ xf86VGAarbiterLock(xf86Screens[i]);
+ (xf86Screens[i]->LeaveVT)(i, 0);
+ xf86VGAarbiterUnlock(xf86Screens[i]);
+ }
+ }
+
+ xf86AccessLeave();
+
+ /*
+ * This is needed for an abnormal server exit, since the normal exit stuff
+ * MUST also be performed (i.e. the vt must be left in a defined state)
+ */
+ ddxGiveUp();
+}
+
+void
+OsVendorFatalError(void)
+{
+#ifdef VENDORSUPPORT
+ ErrorF("\nPlease refer to your Operating System Vendor support pages\n"
+ "at %s for support on this crash.\n",VENDORSUPPORT);
+#else
+ ErrorF("\nPlease consult the "XVENDORNAME" support \n"
+ "\t at "__VENDORDWEBSUPPORT__"\n for help. \n");
+#endif
+ if (xf86LogFile && xf86LogFileWasOpened)
+ ErrorF("Please also check the log file at \"%s\" for additional "
+ "information.\n", xf86LogFile);
+ ErrorF("\n");
+}
+
+int
+xf86SetVerbosity(int verb)
+{
+ int save = xf86Verbose;
+
+ xf86Verbose = verb;
+ LogSetParameter(XLOG_VERBOSITY, verb);
+ return save;
+}
+
+int
+xf86SetLogVerbosity(int verb)
+{
+ int save = xf86LogVerbose;
+
+ xf86LogVerbose = verb;
+ LogSetParameter(XLOG_FILE_VERBOSITY, verb);
+ return save;
+}
+
+static void
+xf86PrintDefaultModulePath(void)
+{
+ ErrorF("%s\n", DEFAULT_MODULE_PATH);
+}
+
+static void
+xf86PrintDefaultLibraryPath(void)
+{
+ ErrorF("%s\n", DEFAULT_LIBRARY_PATH);
+}
+
+/*
+ * ddxProcessArgument --
+ * Process device-dependent command line args. Returns 0 if argument is
+ * not device dependent, otherwise Count of number of elements of argv
+ * that are part of a device dependent commandline option.
+ *
+ */
+
+/* ARGSUSED */
+int
+ddxProcessArgument(int argc, char **argv, int i)
+{
+#define CHECK_FOR_REQUIRED_ARGUMENT() \
+ if (((i + 1) >= argc) || (!argv[i + 1])) { \
+ ErrorF("Required argument to %s not specified\n", argv[i]); \
+ UseMsg(); \
+ FatalError("Required argument to %s not specified\n", argv[i]); \
+ }
+
+ /* First the options that are only allowed for root */
+ if (!strcmp(argv[i], "-modulepath") || !strcmp(argv[i], "-logfile")) {
+ if ( (geteuid() == 0) && (getuid() != 0) ) {
+ FatalError("The '%s' option can only be used by root.\n", argv[i]);
+ }
+ else if (!strcmp(argv[i], "-modulepath"))
+ {
+ char *mp;
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ mp = strdup(argv[i + 1]);
+ if (!mp)
+ FatalError("Can't allocate memory for ModulePath\n");
+ xf86ModulePath = mp;
+ xf86ModPathFrom = X_CMDLINE;
+ return 2;
+ }
+ else if (!strcmp(argv[i], "-logfile"))
+ {
+ char *lf;
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ lf = strdup(argv[i + 1]);
+ if (!lf)
+ FatalError("Can't allocate memory for LogFile\n");
+ xf86LogFile = lf;
+ xf86LogFileFrom = X_CMDLINE;
+ return 2;
+ }
+ }
+ if (!strcmp(argv[i], "-config") || !strcmp(argv[i], "-xf86config"))
+ {
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ if (getuid() != 0 && !xf86PathIsSafe(argv[i + 1])) {
+ FatalError("\nInvalid argument for %s\n"
+ "\tFor non-root users, the file specified with %s must be\n"
+ "\ta relative path and must not contain any \"..\" elements.\n"
+ "\tUsing default "__XCONFIGFILE__" search path.\n\n",
+ argv[i], argv[i]);
+ }
+ xf86ConfigFile = argv[i + 1];
+ return 2;
+ }
+ if (!strcmp(argv[i], "-configdir"))
+ {
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ if (getuid() != 0 && !xf86PathIsSafe(argv[i + 1])) {
+ FatalError("\nInvalid argument for %s\n"
+ "\tFor non-root users, the file specified with %s must be\n"
+ "\ta relative path and must not contain any \"..\" elements.\n"
+ "\tUsing default "__XCONFIGDIR__" search path.\n\n",
+ argv[i], argv[i]);
+ }
+ xf86ConfigDir = argv[i + 1];
+ return 2;
+ }
+ if (!strcmp(argv[i],"-flipPixels"))
+ {
+ xf86FlipPixels = TRUE;
+ return 1;
+ }
+#ifdef XF86VIDMODE
+ if (!strcmp(argv[i],"-disableVidMode"))
+ {
+ xf86VidModeDisabled = TRUE;
+ return 1;
+ }
+ if (!strcmp(argv[i],"-allowNonLocalXvidtune"))
+ {
+ xf86VidModeAllowNonLocal = TRUE;
+ return 1;
+ }
+#endif
+ if (!strcmp(argv[i],"-allowMouseOpenFail"))
+ {
+ xf86AllowMouseOpenFail = TRUE;
+ return 1;
+ }
+ if (!strcmp(argv[i],"-ignoreABI"))
+ {
+ LoaderSetOptions(LDR_OPT_ABI_MISMATCH_NONFATAL);
+ return 1;
+ }
+ if (!strcmp(argv[i],"-verbose"))
+ {
+ if (++i < argc && argv[i])
+ {
+ char *end;
+ long val;
+ val = strtol(argv[i], &end, 0);
+ if (*end == '\0')
+ {
+ xf86SetVerbosity(val);
+ return 2;
+ }
+ }
+ xf86SetVerbosity(++xf86Verbose);
+ return 1;
+ }
+ if (!strcmp(argv[i],"-logverbose"))
+ {
+ if (++i < argc && argv[i])
+ {
+ char *end;
+ long val;
+ val = strtol(argv[i], &end, 0);
+ if (*end == '\0')
+ {
+ xf86SetLogVerbosity(val);
+ return 2;
+ }
+ }
+ xf86SetLogVerbosity(++xf86LogVerbose);
+ return 1;
+ }
+ if (!strcmp(argv[i],"-quiet"))
+ {
+ xf86SetVerbosity(-1);
+ return 1;
+ }
+ if (!strcmp(argv[i],"-showconfig") || !strcmp(argv[i],"-version"))
+ {
+ xf86PrintBanner();
+ exit(0);
+ }
+ if (!strcmp(argv[i],"-showDefaultModulePath"))
+ {
+ xf86PrintDefaultModulePath();
+ exit(0);
+ }
+ if (!strcmp(argv[i],"-showDefaultLibPath"))
+ {
+ xf86PrintDefaultLibraryPath();
+ exit(0);
+ }
+ /* Notice the -fp flag, but allow it to pass to the dix layer */
+ if (!strcmp(argv[i], "-fp"))
+ {
+ xf86fpFlag = TRUE;
+ return 0;
+ }
+ /* Notice the -bs flag, but allow it to pass to the dix layer */
+ if (!strcmp(argv[i], "-bs"))
+ {
+ xf86bsDisableFlag = TRUE;
+ return 0;
+ }
+ /* Notice the +bs flag, but allow it to pass to the dix layer */
+ if (!strcmp(argv[i], "+bs"))
+ {
+ xf86bsEnableFlag = TRUE;
+ return 0;
+ }
+ /* Notice the -s flag, but allow it to pass to the dix layer */
+ if (!strcmp(argv[i], "-s"))
+ {
+ xf86sFlag = TRUE;
+ return 0;
+ }
+ if (!strcmp(argv[i], "-pixmap24"))
+ {
+ xf86Pix24 = Pix24Use24;
+ return 1;
+ }
+ if (!strcmp(argv[i], "-pixmap32"))
+ {
+ xf86Pix24 = Pix24Use32;
+ return 1;
+ }
+ if (!strcmp(argv[i], "-fbbpp"))
+ {
+ int bpp;
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ if (sscanf(argv[++i], "%d", &bpp) == 1)
+ {
+ xf86FbBpp = bpp;
+ return 2;
+ }
+ else
+ {
+ ErrorF("Invalid fbbpp\n");
+ return 0;
+ }
+ }
+ if (!strcmp(argv[i], "-depth"))
+ {
+ int depth;
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ if (sscanf(argv[++i], "%d", &depth) == 1)
+ {
+ xf86Depth = depth;
+ return 2;
+ }
+ else
+ {
+ ErrorF("Invalid depth\n");
+ return 0;
+ }
+ }
+ if (!strcmp(argv[i], "-weight"))
+ {
+ int red, green, blue;
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ if (sscanf(argv[++i], "%1d%1d%1d", &red, &green, &blue) == 3)
+ {
+ xf86Weight.red = red;
+ xf86Weight.green = green;
+ xf86Weight.blue = blue;
+ return 2;
+ }
+ else
+ {
+ ErrorF("Invalid weighting\n");
+ return 0;
+ }
+ }
+ if (!strcmp(argv[i], "-gamma") || !strcmp(argv[i], "-rgamma") ||
+ !strcmp(argv[i], "-ggamma") || !strcmp(argv[i], "-bgamma"))
+ {
+ double gamma;
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ if (sscanf(argv[++i], "%lf", &gamma) == 1) {
+ if (gamma < GAMMA_MIN || gamma > GAMMA_MAX) {
+ ErrorF("gamma out of range, only %.2f <= gamma_value <= %.1f"
+ " is valid\n", GAMMA_MIN, GAMMA_MAX);
+ return 0;
+ }
+ if (!strcmp(argv[i-1], "-gamma"))
+ xf86Gamma.red = xf86Gamma.green = xf86Gamma.blue = gamma;
+ else if (!strcmp(argv[i-1], "-rgamma")) xf86Gamma.red = gamma;
+ else if (!strcmp(argv[i-1], "-ggamma")) xf86Gamma.green = gamma;
+ else if (!strcmp(argv[i-1], "-bgamma")) xf86Gamma.blue = gamma;
+ return 2;
+ }
+ }
+ if (!strcmp(argv[i], "-layout"))
+ {
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ xf86LayoutName = argv[++i];
+ return 2;
+ }
+ if (!strcmp(argv[i], "-screen"))
+ {
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ xf86ScreenName = argv[++i];
+ return 2;
+ }
+ if (!strcmp(argv[i], "-pointer"))
+ {
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ xf86PointerName = argv[++i];
+ return 2;
+ }
+ if (!strcmp(argv[i], "-keyboard"))
+ {
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ xf86KeyboardName = argv[++i];
+ return 2;
+ }
+ if (!strcmp(argv[i], "-nosilk"))
+ {
+ xf86silkenMouseDisableFlag = TRUE;
+ return 1;
+ }
+#ifdef HAVE_ACPI
+ if (!strcmp(argv[i], "-noacpi"))
+ {
+ xf86acpiDisableFlag = TRUE;
+ return 1;
+ }
+#endif
+ if (!strcmp(argv[i], "-configure"))
+ {
+ if (getuid() != 0 && geteuid() == 0) {
+ ErrorF("The '-configure' option can only be used by root.\n");
+ exit(1);
+ }
+ xf86DoConfigure = TRUE;
+ xf86AllowMouseOpenFail = TRUE;
+ return 1;
+ }
+ if (!strcmp(argv[i], "-showopts"))
+ {
+ if (getuid() != 0 && geteuid() == 0) {
+ ErrorF("The '-showopts' option can only be used by root.\n");
+ exit(1);
+ }
+ xf86DoShowOptions = TRUE;
+ return 1;
+ }
+ if (!strcmp(argv[i], "-isolateDevice"))
+ {
+ CHECK_FOR_REQUIRED_ARGUMENT();
+ if (strncmp(argv[++i], "PCI:", 4)) {
+ FatalError("Bus types other than PCI not yet isolable\n");
+ }
+ xf86PciIsolateDevice(argv[i]);
+ return 2;
+ }
+ /* Notice cmdline xkbdir, but pass to dix as well */
+ if (!strcmp(argv[i], "-xkbdir"))
+ {
+ xf86xkbdirFlag = TRUE;
+ return 0;
+ }
+
+ /* OS-specific processing */
+ return xf86ProcessArgument(argc, argv, i);
+}
+
+/*
+ * ddxUseMsg --
+ * Print out correct use of device dependent commandline options.
+ * Maybe the user now knows what really to do ...
+ */
+
+void
+ddxUseMsg(void)
+{
+ ErrorF("\n");
+ ErrorF("\n");
+ ErrorF("Device Dependent Usage\n");
+ if (getuid() == 0 || geteuid() != 0)
+ {
+ ErrorF("-modulepath paths specify the module search path\n");
+ ErrorF("-logfile file specify a log file name\n");
+ ErrorF("-configure probe for devices and write an "__XCONFIGFILE__"\n");
+ ErrorF("-showopts print available options for all installed drivers\n");
+ }
+ ErrorF("-config file specify a configuration file, relative to the\n");
+ ErrorF(" "__XCONFIGFILE__" search path, only root can use absolute\n");
+ ErrorF("-configdir dir specify a configuration directory, relative to the\n");
+ ErrorF(" "__XCONFIGDIR__" search path, only root can use absolute\n");
+ ErrorF("-verbose [n] verbose startup messages\n");
+ ErrorF("-logverbose [n] verbose log messages\n");
+ ErrorF("-quiet minimal startup messages\n");
+ ErrorF("-pixmap24 use 24bpp pixmaps for depth 24\n");
+ ErrorF("-pixmap32 use 32bpp pixmaps for depth 24\n");
+ ErrorF("-fbbpp n set bpp for the framebuffer. Default: 8\n");
+ ErrorF("-depth n set colour depth. Default: 8\n");
+ ErrorF("-gamma f set gamma value (0.1 < f < 10.0) Default: 1.0\n");
+ ErrorF("-rgamma f set gamma value for red phase\n");
+ ErrorF("-ggamma f set gamma value for green phase\n");
+ ErrorF("-bgamma f set gamma value for blue phase\n");
+ ErrorF("-weight nnn set RGB weighting at 16 bpp. Default: 565\n");
+ ErrorF("-layout name specify the ServerLayout section name\n");
+ ErrorF("-screen name specify the Screen section name\n");
+ ErrorF("-keyboard name specify the core keyboard InputDevice name\n");
+ ErrorF("-pointer name specify the core pointer InputDevice name\n");
+ ErrorF("-nosilk disable Silken Mouse\n");
+ ErrorF("-flipPixels swap default black/white Pixel values\n");
+#ifdef XF86VIDMODE
+ ErrorF("-disableVidMode disable mode adjustments with xvidtune\n");
+ ErrorF("-allowNonLocalXvidtune allow xvidtune to be run as a non-local client\n");
+#endif
+ ErrorF("-allowMouseOpenFail start server even if the mouse can't be initialized\n");
+ ErrorF("-ignoreABI make module ABI mismatches non-fatal\n");
+ ErrorF("-isolateDevice bus_id restrict device resets to bus_id (PCI only)\n");
+ ErrorF("-version show the server version\n");
+ ErrorF("-showDefaultModulePath show the server default module path\n");
+ ErrorF("-showDefaultLibPath show the server default library path\n");
+ /* OS-specific usage */
+ xf86UseMsg();
+ ErrorF("\n");
+}
+
+
+/*
+ * xf86LoadModules iterates over a list that is being passed in.
+ */
+Bool
+xf86LoadModules(char **list, pointer *optlist)
+{
+ int errmaj, errmin;
+ pointer opt;
+ int i;
+ char *name;
+ Bool failed = FALSE;
+
+ if (!list)
+ return TRUE;
+
+ for (i = 0; list[i] != NULL; i++) {
+
+ /* Normalise the module name */
+ name = xf86NormalizeName(list[i]);
+
+ /* Skip empty names */
+ if (name == NULL || *name == '\0') {
+ free(name);
+ continue;
+ }
+
+ /* Replace obsolete keyboard driver with kbd */
+ if (!xf86NameCmp(name, "keyboard")) {
+ strcpy(name, "kbd");
+ }
+
+ if (optlist)
+ opt = optlist[i];
+ else
+ opt = NULL;
+
+ if (!LoadModule(name, NULL, NULL, NULL, opt, NULL, &errmaj, &errmin)) {
+ LoaderErrorMsg(NULL, name, errmaj, errmin);
+ failed = TRUE;
+ }
+ free(name);
+ }
+ return !failed;
+}
+
+/* Pixmap format stuff */
+
+PixmapFormatPtr
+xf86GetPixFormat(ScrnInfoPtr pScrn, int depth)
+{
+ int i;
+ static PixmapFormatRec format; /* XXX not reentrant */
+
+ /*
+ * When the formats[] list initialisation isn't complete, check the
+ * depth 24 pixmap config/cmdline options and screen-specified formats.
+ */
+
+ if (!formatsDone) {
+ if (depth == 24) {
+ Pix24Flags pix24 = Pix24DontCare;
+
+ format.depth = 24;
+ format.scanlinePad = BITMAP_SCANLINE_PAD;
+ if (xf86Info.pixmap24 != Pix24DontCare)
+ pix24 = xf86Info.pixmap24;
+ else if (pScrn->pixmap24 != Pix24DontCare)
+ pix24 = pScrn->pixmap24;
+ if (pix24 == Pix24Use24)
+ format.bitsPerPixel = 24;
+ else
+ format.bitsPerPixel = 32;
+ return &format;
+ }
+ }
+
+ for (i = 0; i < numFormats; i++)
+ if (formats[i].depth == depth)
+ break;
+ if (i != numFormats)
+ return &formats[i];
+ else if (!formatsDone) {
+ /* Check for screen-specified formats */
+ for (i = 0; i < pScrn->numFormats; i++)
+ if (pScrn->formats[i].depth == depth)
+ break;
+ if (i != pScrn->numFormats)
+ return &pScrn->formats[i];
+ }
+ return NULL;
+}
+
+int
+xf86GetBppFromDepth(ScrnInfoPtr pScrn, int depth)
+{
+ PixmapFormatPtr format;
+
+
+ format = xf86GetPixFormat(pScrn, depth);
+ if (format)
+ return format->bitsPerPixel;
+ else
+ return 0;
+}
diff --git a/xorg-server/hw/xfree86/dri2/dri2.c b/xorg-server/hw/xfree86/dri2/dri2.c
index 7d6f772d7..10be59953 100644
--- a/xorg-server/hw/xfree86/dri2/dri2.c
+++ b/xorg-server/hw/xfree86/dri2/dri2.c
@@ -1,1227 +1,1232 @@
-/*
- * Copyright © 2007, 2008 Red Hat, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Soft-
- * ware"), to deal in the Software without restriction, including without
- * limitation the rights to use, copy, modify, merge, publish, distribute,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, provided that the above copyright
- * notice(s) and this permission notice appear in all copies of the Soft-
- * ware and that both the above copyright notice(s) and this permission
- * notice appear in supporting documentation.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
- * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY
- * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
- * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE-
- * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR-
- * MANCE OF THIS SOFTWARE.
- *
- * Except as contained in this notice, the name of a copyright holder shall
- * not be used in advertising or otherwise to promote the sale, use or
- * other dealings in this Software without prior written authorization of
- * the copyright holder.
- *
- * Authors:
- * Kristian Høgsberg (krh@redhat.com)
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include <errno.h>
-#ifdef WITH_LIBDRM
-#include <xf86drm.h>
-#endif
-#include "xf86Module.h"
-#include "list.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-#include "dixstruct.h"
-#include "dri2.h"
-#include "xf86VGAarbiter.h"
-
-#include "xf86.h"
-
-CARD8 dri2_major; /* version of DRI2 supported by DDX */
-CARD8 dri2_minor;
-
-static DevPrivateKeyRec dri2ScreenPrivateKeyRec;
-#define dri2ScreenPrivateKey (&dri2ScreenPrivateKeyRec)
-
-static DevPrivateKeyRec dri2WindowPrivateKeyRec;
-#define dri2WindowPrivateKey (&dri2WindowPrivateKeyRec)
-
-static DevPrivateKeyRec dri2PixmapPrivateKeyRec;
-#define dri2PixmapPrivateKey (&dri2PixmapPrivateKeyRec)
-
-static RESTYPE dri2DrawableRes;
-
-typedef struct _DRI2Screen *DRI2ScreenPtr;
-
-typedef struct _DRI2Drawable {
- DRI2ScreenPtr dri2_screen;
- DrawablePtr drawable;
- struct list reference_list;
- int width;
- int height;
- DRI2BufferPtr *buffers;
- int bufferCount;
- unsigned int swapsPending;
- ClientPtr blockedClient;
- Bool blockedOnMsc;
- int swap_interval;
- CARD64 swap_count;
- int64_t target_sbc; /* -1 means no SBC wait outstanding */
- CARD64 last_swap_target; /* most recently queued swap target */
- CARD64 last_swap_msc; /* msc at completion of most recent swap */
- CARD64 last_swap_ust; /* ust at completion of most recent swap */
- int swap_limit; /* for N-buffering */
- unsigned long serialNumber;
-} DRI2DrawableRec, *DRI2DrawablePtr;
-
-typedef struct _DRI2Screen {
- ScreenPtr screen;
- int refcnt;
- unsigned int numDrivers;
- const char **driverNames;
- const char *deviceName;
- int fd;
- unsigned int lastSequence;
-
- DRI2CreateBufferProcPtr CreateBuffer;
- DRI2DestroyBufferProcPtr DestroyBuffer;
- DRI2CopyRegionProcPtr CopyRegion;
- DRI2ScheduleSwapProcPtr ScheduleSwap;
- DRI2GetMSCProcPtr GetMSC;
- DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC;
- DRI2AuthMagicProcPtr AuthMagic;
-
- HandleExposuresProcPtr HandleExposures;
-
- ConfigNotifyProcPtr ConfigNotify;
-} DRI2ScreenRec;
-
-static DRI2ScreenPtr
-DRI2GetScreen(ScreenPtr pScreen)
-{
- return dixLookupPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey);
-}
-
-static DRI2DrawablePtr
-DRI2GetDrawable(DrawablePtr pDraw)
-{
- WindowPtr pWin;
- PixmapPtr pPixmap;
-
- switch (pDraw->type) {
- case DRAWABLE_WINDOW:
- pWin = (WindowPtr) pDraw;
- return dixLookupPrivate(&pWin->devPrivates, dri2WindowPrivateKey);
- case DRAWABLE_PIXMAP:
- pPixmap = (PixmapPtr) pDraw;
- return dixLookupPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey);
- default:
- return NULL;
- }
-}
-
-static unsigned long
-DRI2DrawableSerial(DrawablePtr pDraw)
-{
- ScreenPtr pScreen = pDraw->pScreen;
- PixmapPtr pPix;
-
- if (pDraw->type != DRAWABLE_WINDOW)
- return pDraw->serialNumber;
-
- pPix = pScreen->GetWindowPixmap((WindowPtr)pDraw);
- return pPix->drawable.serialNumber;
-}
-
-static DRI2DrawablePtr
-DRI2AllocateDrawable(DrawablePtr pDraw)
-{
- DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
- DRI2DrawablePtr pPriv;
- CARD64 ust;
- WindowPtr pWin;
- PixmapPtr pPixmap;
-
- pPriv = malloc(sizeof *pPriv);
- if (pPriv == NULL)
- return NULL;
-
- pPriv->dri2_screen = ds;
- pPriv->drawable = pDraw;
- pPriv->width = pDraw->width;
- pPriv->height = pDraw->height;
- pPriv->buffers = NULL;
- pPriv->bufferCount = 0;
- pPriv->swapsPending = 0;
- pPriv->blockedClient = NULL;
- pPriv->blockedOnMsc = FALSE;
- pPriv->swap_count = 0;
- pPriv->target_sbc = -1;
- pPriv->swap_interval = 1;
- /* Initialize last swap target from DDX if possible */
- if (!ds->GetMSC || !(*ds->GetMSC)(pDraw, &ust, &pPriv->last_swap_target))
- pPriv->last_swap_target = 0;
-
- pPriv->swap_limit = 1; /* default to double buffering */
- pPriv->last_swap_msc = 0;
- pPriv->last_swap_ust = 0;
- list_init(&pPriv->reference_list);
- pPriv->serialNumber = DRI2DrawableSerial(pDraw);
-
- if (pDraw->type == DRAWABLE_WINDOW) {
- pWin = (WindowPtr) pDraw;
- dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, pPriv);
- } else {
- pPixmap = (PixmapPtr) pDraw;
- dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, pPriv);
- }
-
- return pPriv;
-}
-
-typedef struct DRI2DrawableRefRec {
- XID id;
- XID dri2_id;
- DRI2InvalidateProcPtr invalidate;
- void *priv;
- struct list link;
-} DRI2DrawableRefRec, *DRI2DrawableRefPtr;
-
-static DRI2DrawableRefPtr
-DRI2LookupDrawableRef(DRI2DrawablePtr pPriv, XID id)
-{
- DRI2DrawableRefPtr ref;
-
- list_for_each_entry(ref, &pPriv->reference_list, link) {
- if (ref->id == id)
- return ref;
- }
-
- return NULL;
-}
-
-static int
-DRI2AddDrawableRef(DRI2DrawablePtr pPriv, XID id, XID dri2_id,
- DRI2InvalidateProcPtr invalidate, void *priv)
-{
- DRI2DrawableRefPtr ref;
-
- ref = malloc(sizeof *ref);
- if (ref == NULL)
- return BadAlloc;
-
- if (!AddResource(dri2_id, dri2DrawableRes, pPriv))
- return BadAlloc;
- if (!DRI2LookupDrawableRef(pPriv, id))
- if (!AddResource(id, dri2DrawableRes, pPriv))
- return BadAlloc;
-
- ref->id = id;
- ref->dri2_id = dri2_id;
- ref->invalidate = invalidate;
- ref->priv = priv;
- list_add(&ref->link, &pPriv->reference_list);
-
- return Success;
-}
-
-int
-DRI2CreateDrawable(ClientPtr client, DrawablePtr pDraw, XID id,
- DRI2InvalidateProcPtr invalidate, void *priv)
-{
- DRI2DrawablePtr pPriv;
- XID dri2_id;
- int rc;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL)
- pPriv = DRI2AllocateDrawable(pDraw);
- if (pPriv == NULL)
- return BadAlloc;
-
- dri2_id = FakeClientID(client->index);
- rc = DRI2AddDrawableRef(pPriv, id, dri2_id, invalidate, priv);
- if (rc != Success)
- return rc;
-
- return Success;
-}
-
-static int DRI2DrawableGone(pointer p, XID id)
-{
- DRI2DrawablePtr pPriv = p;
- DRI2ScreenPtr ds = pPriv->dri2_screen;
- DRI2DrawableRefPtr ref, next;
- WindowPtr pWin;
- PixmapPtr pPixmap;
- DrawablePtr pDraw;
- int i;
-
- list_for_each_entry_safe(ref, next, &pPriv->reference_list, link) {
- if (ref->dri2_id == id) {
- list_del(&ref->link);
- /* If this was the last ref under this X drawable XID,
- * unregister the X drawable resource. */
- if (!DRI2LookupDrawableRef(pPriv, ref->id))
- FreeResourceByType(ref->id, dri2DrawableRes, TRUE);
- free(ref);
- break;
- }
-
- if (ref->id == id) {
- list_del(&ref->link);
- FreeResourceByType(ref->dri2_id, dri2DrawableRes, TRUE);
- free(ref);
- }
- }
-
- if (!list_is_empty(&pPriv->reference_list))
- return Success;
-
- pDraw = pPriv->drawable;
- if (pDraw->type == DRAWABLE_WINDOW) {
- pWin = (WindowPtr) pDraw;
- dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, NULL);
- } else {
- pPixmap = (PixmapPtr) pDraw;
- dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, NULL);
- }
-
- if (pPriv->buffers != NULL) {
- for (i = 0; i < pPriv->bufferCount; i++)
- (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]);
-
- free(pPriv->buffers);
- }
-
- free(pPriv);
-
- return Success;
-}
-
-static int
-find_attachment(DRI2DrawablePtr pPriv, unsigned attachment)
-{
- int i;
-
- if (pPriv->buffers == NULL) {
- return -1;
- }
-
- for (i = 0; i < pPriv->bufferCount; i++) {
- if ((pPriv->buffers[i] != NULL)
- && (pPriv->buffers[i]->attachment == attachment)) {
- return i;
- }
- }
-
- return -1;
-}
-
-static Bool
-allocate_or_reuse_buffer(DrawablePtr pDraw, DRI2ScreenPtr ds,
- DRI2DrawablePtr pPriv,
- unsigned int attachment, unsigned int format,
- int dimensions_match, DRI2BufferPtr *buffer)
-{
- int old_buf = find_attachment(pPriv, attachment);
-
- if ((old_buf < 0)
- || !dimensions_match
- || (pPriv->buffers[old_buf]->format != format)) {
- *buffer = (*ds->CreateBuffer)(pDraw, attachment, format);
- pPriv->serialNumber = DRI2DrawableSerial(pDraw);
- return TRUE;
-
- } else {
- *buffer = pPriv->buffers[old_buf];
- pPriv->buffers[old_buf] = NULL;
- return FALSE;
- }
-}
-
-static void
-update_dri2_drawable_buffers(DRI2DrawablePtr pPriv, DrawablePtr pDraw,
- DRI2BufferPtr *buffers, int *out_count, int *width, int *height)
-{
- DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
- int i;
-
- if (pPriv->buffers != NULL) {
- for (i = 0; i < pPriv->bufferCount; i++) {
- if (pPriv->buffers[i] != NULL) {
- (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]);
- }
- }
-
- free(pPriv->buffers);
- }
-
- pPriv->buffers = buffers;
- pPriv->bufferCount = *out_count;
- pPriv->width = pDraw->width;
- pPriv->height = pDraw->height;
- *width = pPriv->width;
- *height = pPriv->height;
-}
-
-static DRI2BufferPtr *
-do_get_buffers(DrawablePtr pDraw, int *width, int *height,
- unsigned int *attachments, int count, int *out_count,
- int has_format)
-{
- DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
- DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
- DRI2BufferPtr *buffers;
- int need_real_front = 0;
- int need_fake_front = 0;
- int have_fake_front = 0;
- int front_format = 0;
- int dimensions_match;
- int buffers_changed = 0;
- int i;
-
- if (!pPriv) {
- *width = pDraw->width;
- *height = pDraw->height;
- *out_count = 0;
- return NULL;
- }
-
- dimensions_match = (pDraw->width == pPriv->width)
- && (pDraw->height == pPriv->height)
- && (pPriv->serialNumber == DRI2DrawableSerial(pDraw));
-
- buffers = calloc((count + 1), sizeof(buffers[0]));
-
- for (i = 0; i < count; i++) {
- const unsigned attachment = *(attachments++);
- const unsigned format = (has_format) ? *(attachments++) : 0;
-
- if (allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment,
- format, dimensions_match,
- &buffers[i]))
- buffers_changed = 1;
-
- if (buffers[i] == NULL)
- goto err_out;
-
- /* If the drawable is a window and the front-buffer is requested,
- * silently add the fake front-buffer to the list of requested
- * attachments. The counting logic in the loop accounts for the case
- * where the client requests both the fake and real front-buffer.
- */
- if (attachment == DRI2BufferBackLeft) {
- need_real_front++;
- front_format = format;
- }
-
- if (attachment == DRI2BufferFrontLeft) {
- need_real_front--;
- front_format = format;
-
- if (pDraw->type == DRAWABLE_WINDOW) {
- need_fake_front++;
- }
- }
-
- if (pDraw->type == DRAWABLE_WINDOW) {
- if (attachment == DRI2BufferFakeFrontLeft) {
- need_fake_front--;
- have_fake_front = 1;
- }
- }
- }
-
- if (need_real_front > 0) {
- if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFrontLeft,
- front_format, dimensions_match,
- &buffers[i]))
- buffers_changed = 1;
-
- if (buffers[i] == NULL)
- goto err_out;
- i++;
- }
-
- if (need_fake_front > 0) {
- if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFakeFrontLeft,
- front_format, dimensions_match,
- &buffers[i]))
- buffers_changed = 1;
-
- if (buffers[i] == NULL)
- goto err_out;
-
- i++;
- have_fake_front = 1;
- }
-
- *out_count = i;
-
- update_dri2_drawable_buffers(pPriv, pDraw, buffers, out_count, width, height);
-
- /* If the client is getting a fake front-buffer, pre-fill it with the
- * contents of the real front-buffer. This ensures correct operation of
- * applications that call glXWaitX before calling glDrawBuffer.
- */
- if (have_fake_front && buffers_changed) {
- BoxRec box;
- RegionRec region;
-
- box.x1 = 0;
- box.y1 = 0;
- box.x2 = pPriv->width;
- box.y2 = pPriv->height;
- RegionInit(&region, &box, 0);
-
- DRI2CopyRegion(pDraw, &region, DRI2BufferFakeFrontLeft,
- DRI2BufferFrontLeft);
- }
-
- return pPriv->buffers;
-
-err_out:
-
- *out_count = 0;
-
- for (i = 0; i < count; i++) {
- if (buffers[i] != NULL)
- (*ds->DestroyBuffer)(pDraw, buffers[i]);
- }
-
- free(buffers);
- buffers = NULL;
-
- update_dri2_drawable_buffers(pPriv, pDraw, buffers, out_count, width, height);
-
- return buffers;
-}
-
-DRI2BufferPtr *
-DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height,
- unsigned int *attachments, int count, int *out_count)
-{
- return do_get_buffers(pDraw, width, height, attachments, count,
- out_count, FALSE);
-}
-
-DRI2BufferPtr *
-DRI2GetBuffersWithFormat(DrawablePtr pDraw, int *width, int *height,
- unsigned int *attachments, int count, int *out_count)
-{
- return do_get_buffers(pDraw, width, height, attachments, count,
- out_count, TRUE);
-}
-
-static void
-DRI2InvalidateDrawable(DrawablePtr pDraw)
-{
- DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
- DRI2DrawableRefPtr ref;
-
- if (!pPriv)
- return;
-
- list_for_each_entry(ref, &pPriv->reference_list, link)
- ref->invalidate(pDraw, ref->priv);
-}
-
-/*
- * In the direct rendered case, we throttle the clients that have more
- * than their share of outstanding swaps (and thus busy buffers) when a
- * new GetBuffers request is received. In the AIGLX case, we allow the
- * client to get the new buffers, but throttle when the next GLX request
- * comes in (see __glXDRIcontextWait()).
- */
-Bool
-DRI2ThrottleClient(ClientPtr client, DrawablePtr pDraw)
-{
- DRI2DrawablePtr pPriv;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL)
- return FALSE;
-
- /* Throttle to swap limit */
- if ((pPriv->swapsPending >= pPriv->swap_limit) &&
- !pPriv->blockedClient) {
- ResetCurrentRequest(client);
- client->sequence--;
- IgnoreClient(client);
- pPriv->blockedClient = client;
- return TRUE;
- }
-
- return FALSE;
-}
-
-static void
-__DRI2BlockClient(ClientPtr client, DRI2DrawablePtr pPriv)
-{
- if (pPriv->blockedClient == NULL) {
- IgnoreClient(client);
- pPriv->blockedClient = client;
- }
-}
-
-void
-DRI2BlockClient(ClientPtr client, DrawablePtr pDraw)
-{
- DRI2DrawablePtr pPriv;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL)
- return;
-
- __DRI2BlockClient(client, pPriv);
- pPriv->blockedOnMsc = TRUE;
-}
-
-int
-DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion,
- unsigned int dest, unsigned int src)
-{
- DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
- DRI2DrawablePtr pPriv;
- DRI2BufferPtr pDestBuffer, pSrcBuffer;
- int i;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL)
- return BadDrawable;
-
- pDestBuffer = NULL;
- pSrcBuffer = NULL;
- for (i = 0; i < pPriv->bufferCount; i++)
- {
- if (pPriv->buffers[i]->attachment == dest)
- pDestBuffer = (DRI2BufferPtr) pPriv->buffers[i];
- if (pPriv->buffers[i]->attachment == src)
- pSrcBuffer = (DRI2BufferPtr) pPriv->buffers[i];
- }
- if (pSrcBuffer == NULL || pDestBuffer == NULL)
- return BadValue;
-
- (*ds->CopyRegion)(pDraw, pRegion, pDestBuffer, pSrcBuffer);
-
- return Success;
-}
-
-/* Can this drawable be page flipped? */
-Bool
-DRI2CanFlip(DrawablePtr pDraw)
-{
- ScreenPtr pScreen = pDraw->pScreen;
- WindowPtr pWin, pRoot;
- PixmapPtr pWinPixmap, pRootPixmap;
-
- if (pDraw->type == DRAWABLE_PIXMAP)
- return TRUE;
-
- pRoot = pScreen->root;
- pRootPixmap = pScreen->GetWindowPixmap(pRoot);
-
- pWin = (WindowPtr) pDraw;
- pWinPixmap = pScreen->GetWindowPixmap(pWin);
- if (pRootPixmap != pWinPixmap)
- return FALSE;
- if (!RegionEqual(&pWin->clipList, &pRoot->winSize))
- return FALSE;
-
- /* Does the window match the pixmap exactly? */
- if (pDraw->x != 0 ||
- pDraw->y != 0 ||
-#ifdef COMPOSITE
- pDraw->x != pWinPixmap->screen_x ||
- pDraw->y != pWinPixmap->screen_y ||
-#endif
- pDraw->width != pWinPixmap->drawable.width ||
- pDraw->height != pWinPixmap->drawable.height)
- return FALSE;
-
- return TRUE;
-}
-
-/* Can we do a pixmap exchange instead of a blit? */
-Bool
-DRI2CanExchange(DrawablePtr pDraw)
-{
- return FALSE;
-}
-
-void
-DRI2WaitMSCComplete(ClientPtr client, DrawablePtr pDraw, int frame,
- unsigned int tv_sec, unsigned int tv_usec)
-{
- DRI2DrawablePtr pPriv;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL)
- return;
-
- ProcDRI2WaitMSCReply(client, ((CARD64)tv_sec * 1000000) + tv_usec,
- frame, pPriv->swap_count);
-
- if (pPriv->blockedClient)
- AttendClient(pPriv->blockedClient);
-
- pPriv->blockedClient = NULL;
- pPriv->blockedOnMsc = FALSE;
-}
-
-static void
-DRI2WakeClient(ClientPtr client, DrawablePtr pDraw, int frame,
- unsigned int tv_sec, unsigned int tv_usec)
-{
- ScreenPtr pScreen = pDraw->pScreen;
- DRI2DrawablePtr pPriv;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL) {
- xf86DrvMsg(pScreen->myNum, X_ERROR,
- "[DRI2] %s: bad drawable\n", __func__);
- return;
- }
-
- /*
- * Swap completed.
- * Wake the client iff:
- * - it was waiting on SBC
- * - was blocked due to GLX make current
- * - was blocked due to swap throttling
- * - is not blocked due to an MSC wait
- */
- if (pPriv->target_sbc != -1 &&
- pPriv->target_sbc <= pPriv->swap_count) {
- ProcDRI2WaitMSCReply(client, ((CARD64)tv_sec * 1000000) + tv_usec,
- frame, pPriv->swap_count);
- pPriv->target_sbc = -1;
-
- AttendClient(pPriv->blockedClient);
- pPriv->blockedClient = NULL;
- } else if (pPriv->target_sbc == -1 && !pPriv->blockedOnMsc) {
- if (pPriv->blockedClient) {
- AttendClient(pPriv->blockedClient);
- pPriv->blockedClient = NULL;
- }
- }
-}
-
-void
-DRI2SwapComplete(ClientPtr client, DrawablePtr pDraw, int frame,
- unsigned int tv_sec, unsigned int tv_usec, int type,
- DRI2SwapEventPtr swap_complete, void *swap_data)
-{
- ScreenPtr pScreen = pDraw->pScreen;
- DRI2DrawablePtr pPriv;
- CARD64 ust = 0;
- BoxRec box;
- RegionRec region;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL) {
- xf86DrvMsg(pScreen->myNum, X_ERROR,
- "[DRI2] %s: bad drawable\n", __func__);
- return;
- }
-
- pPriv->swapsPending--;
- pPriv->swap_count++;
-
- box.x1 = 0;
- box.y1 = 0;
- box.x2 = pDraw->width;
- box.y2 = pDraw->height;
- RegionInit(&region, &box, 0);
- DRI2CopyRegion(pDraw, &region, DRI2BufferFakeFrontLeft,
- DRI2BufferFrontLeft);
-
- ust = ((CARD64)tv_sec * 1000000) + tv_usec;
- if (swap_complete)
- swap_complete(client, swap_data, type, ust, frame, pPriv->swap_count);
-
- pPriv->last_swap_msc = frame;
- pPriv->last_swap_ust = ust;
-
- DRI2WakeClient(client, pDraw, frame, tv_sec, tv_usec);
-}
-
-Bool
-DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable)
-{
- DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
-
- /* If we're currently waiting for a swap on this drawable, reset
- * the request and suspend the client. We only support one
- * blocked client per drawable. */
- if ((pPriv->swapsPending) &&
- pPriv->blockedClient == NULL) {
- ResetCurrentRequest(client);
- client->sequence--;
- __DRI2BlockClient(client, pPriv);
- return TRUE;
- }
-
- return FALSE;
-}
-
-int
-DRI2SwapBuffers(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
- CARD64 divisor, CARD64 remainder, CARD64 *swap_target,
- DRI2SwapEventPtr func, void *data)
-{
- ScreenPtr pScreen = pDraw->pScreen;
- DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
- DRI2DrawablePtr pPriv;
- DRI2BufferPtr pDestBuffer = NULL, pSrcBuffer = NULL;
- int ret, i;
- CARD64 ust, current_msc;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL) {
- xf86DrvMsg(pScreen->myNum, X_ERROR,
- "[DRI2] %s: bad drawable\n", __func__);
- return BadDrawable;
- }
-
- for (i = 0; i < pPriv->bufferCount; i++) {
- if (pPriv->buffers[i]->attachment == DRI2BufferFrontLeft)
- pDestBuffer = (DRI2BufferPtr) pPriv->buffers[i];
- if (pPriv->buffers[i]->attachment == DRI2BufferBackLeft)
- pSrcBuffer = (DRI2BufferPtr) pPriv->buffers[i];
- }
- if (pSrcBuffer == NULL || pDestBuffer == NULL) {
- xf86DrvMsg(pScreen->myNum, X_ERROR,
- "[DRI2] %s: drawable has no back or front?\n", __func__);
- return BadDrawable;
- }
-
- /* Old DDX or no swap interval, just blit */
- if (!ds->ScheduleSwap || !pPriv->swap_interval) {
- BoxRec box;
- RegionRec region;
-
- box.x1 = 0;
- box.y1 = 0;
- box.x2 = pDraw->width;
- box.y2 = pDraw->height;
- RegionInit(&region, &box, 0);
-
- pPriv->swapsPending++;
-
- (*ds->CopyRegion)(pDraw, &region, pDestBuffer, pSrcBuffer);
- DRI2SwapComplete(client, pDraw, target_msc, 0, 0, DRI2_BLIT_COMPLETE,
- func, data);
- return Success;
- }
-
- /*
- * In the simple glXSwapBuffers case, all params will be 0, and we just
- * need to schedule a swap for the last swap target + the swap interval.
- */
- if (target_msc == 0 && divisor == 0 && remainder == 0) {
- /* If the current vblank count of the drawable's crtc is lower
- * than the count stored in last_swap_target from a previous swap
- * then reinitialize last_swap_target to the current crtc's msc,
- * otherwise the swap will hang. This will happen if the drawable
- * is moved to a crtc with a lower refresh rate, or a crtc that just
- * got enabled.
- */
- if (ds->GetMSC) {
- if (!(*ds->GetMSC)(pDraw, &ust, &current_msc))
- pPriv->last_swap_target = 0;
-
- if (current_msc < pPriv->last_swap_target)
- pPriv->last_swap_target = current_msc;
-
- }
-
- /*
- * Swap target for this swap is last swap target + swap interval since
- * we have to account for the current swap count, interval, and the
- * number of pending swaps.
- */
- *swap_target = pPriv->last_swap_target + pPriv->swap_interval;
-
- } else {
- /* glXSwapBuffersMscOML could have a 0 target_msc, honor it */
- *swap_target = target_msc;
- }
-
- pPriv->swapsPending++;
- ret = (*ds->ScheduleSwap)(client, pDraw, pDestBuffer, pSrcBuffer,
- swap_target, divisor, remainder, func, data);
- if (!ret) {
- pPriv->swapsPending--; /* didn't schedule */
- xf86DrvMsg(pScreen->myNum, X_ERROR,
- "[DRI2] %s: driver failed to schedule swap\n", __func__);
- return BadDrawable;
- }
-
- pPriv->last_swap_target = *swap_target;
-
- /* According to spec, return expected swapbuffers count SBC after this swap
- * will complete.
- */
- *swap_target = pPriv->swap_count + pPriv->swapsPending;
-
- DRI2InvalidateDrawable(pDraw);
-
- return Success;
-}
-
-void
-DRI2SwapInterval(DrawablePtr pDrawable, int interval)
-{
- ScreenPtr pScreen = pDrawable->pScreen;
- DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
-
- if (pPriv == NULL) {
- xf86DrvMsg(pScreen->myNum, X_ERROR,
- "[DRI2] %s: bad drawable\n", __func__);
- return;
- }
-
- /* fixme: check against arbitrary max? */
- pPriv->swap_interval = interval;
-}
-
-int
-DRI2GetMSC(DrawablePtr pDraw, CARD64 *ust, CARD64 *msc, CARD64 *sbc)
-{
- ScreenPtr pScreen = pDraw->pScreen;
- DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
- DRI2DrawablePtr pPriv;
- Bool ret;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL) {
- xf86DrvMsg(pScreen->myNum, X_ERROR,
- "[DRI2] %s: bad drawable\n", __func__);
- return BadDrawable;
- }
-
- if (!ds->GetMSC) {
- *ust = 0;
- *msc = 0;
- *sbc = pPriv->swap_count;
- return Success;
- }
-
- /*
- * Spec needs to be updated to include unmapped or redirected
- * drawables
- */
-
- ret = (*ds->GetMSC)(pDraw, ust, msc);
- if (!ret)
- return BadDrawable;
-
- *sbc = pPriv->swap_count;
-
- return Success;
-}
-
-int
-DRI2WaitMSC(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
- CARD64 divisor, CARD64 remainder)
-{
- DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
- DRI2DrawablePtr pPriv;
- Bool ret;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL)
- return BadDrawable;
-
- /* Old DDX just completes immediately */
- if (!ds->ScheduleWaitMSC) {
- DRI2WaitMSCComplete(client, pDraw, target_msc, 0, 0);
-
- return Success;
- }
-
- ret = (*ds->ScheduleWaitMSC)(client, pDraw, target_msc, divisor, remainder);
- if (!ret)
- return BadDrawable;
-
- return Success;
-}
-
-int
-DRI2WaitSBC(ClientPtr client, DrawablePtr pDraw, CARD64 target_sbc)
-{
- DRI2DrawablePtr pPriv;
-
- pPriv = DRI2GetDrawable(pDraw);
- if (pPriv == NULL)
- return BadDrawable;
-
- /* target_sbc == 0 means to block until all pending swaps are
- * finished. Recalculate target_sbc to get that behaviour.
- */
- if (target_sbc == 0)
- target_sbc = pPriv->swap_count + pPriv->swapsPending;
-
- /* If current swap count already >= target_sbc, reply and
- * return immediately with (ust, msc, sbc) triplet of
- * most recent completed swap.
- */
- if (pPriv->swap_count >= target_sbc) {
- ProcDRI2WaitMSCReply(client, pPriv->last_swap_ust,
- pPriv->last_swap_msc, pPriv->swap_count);
- return Success;
- }
-
- pPriv->target_sbc = target_sbc;
- __DRI2BlockClient(client, pPriv);
-
- return Success;
-}
-
-Bool
-DRI2HasSwapControl(ScreenPtr pScreen)
-{
- DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
-
- return ds->ScheduleSwap && ds->GetMSC;
-}
-
-Bool
-DRI2Connect(ScreenPtr pScreen, unsigned int driverType, int *fd,
- const char **driverName, const char **deviceName)
-{
- DRI2ScreenPtr ds;
-
- if (!dixPrivateKeyRegistered(dri2ScreenPrivateKey))
- return FALSE;
-
- ds = DRI2GetScreen(pScreen);
- if (ds == NULL || driverType >= ds->numDrivers ||
- !ds->driverNames[driverType])
- return FALSE;
-
- *fd = ds->fd;
- *driverName = ds->driverNames[driverType];
- *deviceName = ds->deviceName;
-
- return TRUE;
-}
-
-Bool
-DRI2Authenticate(ScreenPtr pScreen, uint32_t magic)
-{
- DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
-
- if (ds == NULL || (*ds->AuthMagic)(ds->fd, magic))
- return FALSE;
-
- return TRUE;
-}
-
-static int
-DRI2ConfigNotify(WindowPtr pWin, int x, int y, int w, int h, int bw,
- WindowPtr pSib)
-{
- DrawablePtr pDraw = (DrawablePtr)pWin;
- ScreenPtr pScreen = pDraw->pScreen;
- DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
- DRI2DrawablePtr dd = DRI2GetDrawable(pDraw);
- int ret;
-
- if (ds->ConfigNotify) {
- pScreen->ConfigNotify = ds->ConfigNotify;
-
- ret = (*pScreen->ConfigNotify)(pWin, x, y, w, h, bw, pSib);
-
- ds->ConfigNotify = pScreen->ConfigNotify;
- pScreen->ConfigNotify = DRI2ConfigNotify;
- if (ret)
- return ret;
- }
-
- if (!dd || (dd->width == w && dd->height == h))
- return Success;
-
- DRI2InvalidateDrawable(pDraw);
- return Success;
-}
-
-Bool
-DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
-{
- DRI2ScreenPtr ds;
- const char* driverTypeNames[] = {
- "DRI", /* DRI2DriverDRI */
- "VDPAU", /* DRI2DriverVDPAU */
- };
- unsigned int i;
- CARD8 cur_minor;
-
- if (info->version < 3)
- return FALSE;
-
- if (!xf86VGAarbiterAllowDRI(pScreen)) {
- xf86DrvMsg(pScreen->myNum, X_WARNING,
- "[DRI2] Direct rendering is not supported when VGA arb is necessary for the device\n");
- return FALSE;
- }
-
- if (!dixRegisterPrivateKey(&dri2ScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
- return FALSE;
-
- if (!dixRegisterPrivateKey(&dri2WindowPrivateKeyRec, PRIVATE_WINDOW, 0))
- return FALSE;
-
- if (!dixRegisterPrivateKey(&dri2PixmapPrivateKeyRec, PRIVATE_PIXMAP, 0))
- return FALSE;
-
- ds = calloc(1, sizeof *ds);
- if (!ds)
- return FALSE;
-
- ds->screen = pScreen;
- ds->fd = info->fd;
- ds->deviceName = info->deviceName;
- dri2_major = 1;
-
- ds->CreateBuffer = info->CreateBuffer;
- ds->DestroyBuffer = info->DestroyBuffer;
- ds->CopyRegion = info->CopyRegion;
-
- if (info->version >= 4) {
- ds->ScheduleSwap = info->ScheduleSwap;
- ds->ScheduleWaitMSC = info->ScheduleWaitMSC;
- ds->GetMSC = info->GetMSC;
- cur_minor = 3;
- } else {
- cur_minor = 1;
- }
-
- if (info->version >= 5) {
- ds->AuthMagic = info->AuthMagic;
- }
-
- /*
- * if the driver doesn't provide an AuthMagic function or the info struct
- * version is too low, it relies on the old method (using libdrm) or fail
- */
- if (!ds->AuthMagic)
-#ifdef WITH_LIBDRM
- ds->AuthMagic = drmAuthMagic;
-#else
- goto err_out;
-#endif
-
- /* Initialize minor if needed and set to minimum provied by DDX */
- if (!dri2_minor || dri2_minor > cur_minor)
- dri2_minor = cur_minor;
-
- if (info->version == 3 || info->numDrivers == 0) {
- /* Driver too old: use the old-style driverName field */
- ds->numDrivers = 1;
- ds->driverNames = malloc(sizeof(*ds->driverNames));
- if (!ds->driverNames)
- goto err_out;
- ds->driverNames[0] = info->driverName;
- } else {
- ds->numDrivers = info->numDrivers;
- ds->driverNames = malloc(info->numDrivers * sizeof(*ds->driverNames));
- if (!ds->driverNames)
- goto err_out;
- memcpy(ds->driverNames, info->driverNames,
- info->numDrivers * sizeof(*ds->driverNames));
- }
-
- dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds);
-
- ds->ConfigNotify = pScreen->ConfigNotify;
- pScreen->ConfigNotify = DRI2ConfigNotify;
-
- xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] Setup complete\n");
- for (i = 0; i < sizeof(driverTypeNames) / sizeof(driverTypeNames[0]); i++) {
- if (i < ds->numDrivers && ds->driverNames[i]) {
- xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] %s driver: %s\n",
- driverTypeNames[i], ds->driverNames[i]);
- }
- }
-
- return TRUE;
-
-err_out:
- xf86DrvMsg(pScreen->myNum, X_WARNING,
- "[DRI2] Initialization failed for info version %d.\n", info->version);
- free(ds);
- return FALSE;
-}
-
-void
-DRI2CloseScreen(ScreenPtr pScreen)
-{
- DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
-
- free(ds->driverNames);
- free(ds);
- dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, NULL);
-}
-
-extern ExtensionModule dri2ExtensionModule;
-
-static pointer
-DRI2Setup(pointer module, pointer opts, int *errmaj, int *errmin)
-{
- static Bool setupDone = FALSE;
-
- dri2DrawableRes = CreateNewResourceType(DRI2DrawableGone, "DRI2Drawable");
-
- if (!setupDone)
- {
- setupDone = TRUE;
- LoadExtension(&dri2ExtensionModule, FALSE);
- }
- else
- {
- if (errmaj)
- *errmaj = LDR_ONCEONLY;
- }
-
- return (pointer) 1;
-}
-
-static XF86ModuleVersionInfo DRI2VersRec =
-{
- "dri2",
- MODULEVENDORSTRING,
- MODINFOSTRING1,
- MODINFOSTRING2,
- XORG_VERSION_CURRENT,
- 1, 2, 0,
- ABI_CLASS_EXTENSION,
- ABI_EXTENSION_VERSION,
- MOD_CLASS_NONE,
- { 0, 0, 0, 0 }
-};
-
-_X_EXPORT XF86ModuleData dri2ModuleData = { &DRI2VersRec, DRI2Setup, NULL };
-
-void
-DRI2Version(int *major, int *minor)
-{
- if (major != NULL)
- *major = DRI2VersRec.majorversion;
-
- if (minor != NULL)
- *minor = DRI2VersRec.minorversion;
-}
+/*
+ * Copyright © 2007, 2008 Red Hat, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Soft-
+ * ware"), to deal in the Software without restriction, including without
+ * limitation the rights to use, copy, modify, merge, publish, distribute,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, provided that the above copyright
+ * notice(s) and this permission notice appear in all copies of the Soft-
+ * ware and that both the above copyright notice(s) and this permission
+ * notice appear in supporting documentation.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABIL-
+ * ITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY
+ * RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR HOLDERS INCLUDED IN
+ * THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL INDIRECT OR CONSE-
+ * QUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFOR-
+ * MANCE OF THIS SOFTWARE.
+ *
+ * Except as contained in this notice, the name of a copyright holder shall
+ * not be used in advertising or otherwise to promote the sale, use or
+ * other dealings in this Software without prior written authorization of
+ * the copyright holder.
+ *
+ * Authors:
+ * Kristian Høgsberg (krh@redhat.com)
+ */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include <errno.h>
+#ifdef WITH_LIBDRM
+#include <xf86drm.h>
+#endif
+#include "xf86Module.h"
+#include "list.h"
+#include "scrnintstr.h"
+#include "windowstr.h"
+#include "dixstruct.h"
+#include "dri2.h"
+#include "xf86VGAarbiter.h"
+
+#include "xf86.h"
+
+CARD8 dri2_major; /* version of DRI2 supported by DDX */
+CARD8 dri2_minor;
+
+static DevPrivateKeyRec dri2ScreenPrivateKeyRec;
+#define dri2ScreenPrivateKey (&dri2ScreenPrivateKeyRec)
+
+static DevPrivateKeyRec dri2WindowPrivateKeyRec;
+#define dri2WindowPrivateKey (&dri2WindowPrivateKeyRec)
+
+static DevPrivateKeyRec dri2PixmapPrivateKeyRec;
+#define dri2PixmapPrivateKey (&dri2PixmapPrivateKeyRec)
+
+static RESTYPE dri2DrawableRes;
+
+typedef struct _DRI2Screen *DRI2ScreenPtr;
+
+typedef struct _DRI2Drawable {
+ DRI2ScreenPtr dri2_screen;
+ DrawablePtr drawable;
+ struct list reference_list;
+ int width;
+ int height;
+ DRI2BufferPtr *buffers;
+ int bufferCount;
+ unsigned int swapsPending;
+ ClientPtr blockedClient;
+ Bool blockedOnMsc;
+ int swap_interval;
+ CARD64 swap_count;
+ int64_t target_sbc; /* -1 means no SBC wait outstanding */
+ CARD64 last_swap_target; /* most recently queued swap target */
+ CARD64 last_swap_msc; /* msc at completion of most recent swap */
+ CARD64 last_swap_ust; /* ust at completion of most recent swap */
+ int swap_limit; /* for N-buffering */
+ unsigned long serialNumber;
+} DRI2DrawableRec, *DRI2DrawablePtr;
+
+typedef struct _DRI2Screen {
+ ScreenPtr screen;
+ int refcnt;
+ unsigned int numDrivers;
+ const char **driverNames;
+ const char *deviceName;
+ int fd;
+ unsigned int lastSequence;
+
+ DRI2CreateBufferProcPtr CreateBuffer;
+ DRI2DestroyBufferProcPtr DestroyBuffer;
+ DRI2CopyRegionProcPtr CopyRegion;
+ DRI2ScheduleSwapProcPtr ScheduleSwap;
+ DRI2GetMSCProcPtr GetMSC;
+ DRI2ScheduleWaitMSCProcPtr ScheduleWaitMSC;
+ DRI2AuthMagicProcPtr AuthMagic;
+
+ HandleExposuresProcPtr HandleExposures;
+
+ ConfigNotifyProcPtr ConfigNotify;
+} DRI2ScreenRec;
+
+static DRI2ScreenPtr
+DRI2GetScreen(ScreenPtr pScreen)
+{
+ return dixLookupPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey);
+}
+
+static DRI2DrawablePtr
+DRI2GetDrawable(DrawablePtr pDraw)
+{
+ WindowPtr pWin;
+ PixmapPtr pPixmap;
+
+ switch (pDraw->type) {
+ case DRAWABLE_WINDOW:
+ pWin = (WindowPtr) pDraw;
+ return dixLookupPrivate(&pWin->devPrivates, dri2WindowPrivateKey);
+ case DRAWABLE_PIXMAP:
+ pPixmap = (PixmapPtr) pDraw;
+ return dixLookupPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey);
+ default:
+ return NULL;
+ }
+}
+
+static unsigned long
+DRI2DrawableSerial(DrawablePtr pDraw)
+{
+ ScreenPtr pScreen = pDraw->pScreen;
+ PixmapPtr pPix;
+
+ if (pDraw->type != DRAWABLE_WINDOW)
+ return pDraw->serialNumber;
+
+ pPix = pScreen->GetWindowPixmap((WindowPtr)pDraw);
+ return pPix->drawable.serialNumber;
+}
+
+static DRI2DrawablePtr
+DRI2AllocateDrawable(DrawablePtr pDraw)
+{
+ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+ DRI2DrawablePtr pPriv;
+ CARD64 ust;
+ WindowPtr pWin;
+ PixmapPtr pPixmap;
+
+ pPriv = malloc(sizeof *pPriv);
+ if (pPriv == NULL)
+ return NULL;
+
+ pPriv->dri2_screen = ds;
+ pPriv->drawable = pDraw;
+ pPriv->width = pDraw->width;
+ pPriv->height = pDraw->height;
+ pPriv->buffers = NULL;
+ pPriv->bufferCount = 0;
+ pPriv->swapsPending = 0;
+ pPriv->blockedClient = NULL;
+ pPriv->blockedOnMsc = FALSE;
+ pPriv->swap_count = 0;
+ pPriv->target_sbc = -1;
+ pPriv->swap_interval = 1;
+ /* Initialize last swap target from DDX if possible */
+ if (!ds->GetMSC || !(*ds->GetMSC)(pDraw, &ust, &pPriv->last_swap_target))
+ pPriv->last_swap_target = 0;
+
+ pPriv->swap_limit = 1; /* default to double buffering */
+ pPriv->last_swap_msc = 0;
+ pPriv->last_swap_ust = 0;
+ list_init(&pPriv->reference_list);
+ pPriv->serialNumber = DRI2DrawableSerial(pDraw);
+
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ pWin = (WindowPtr) pDraw;
+ dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, pPriv);
+ } else {
+ pPixmap = (PixmapPtr) pDraw;
+ dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, pPriv);
+ }
+
+ return pPriv;
+}
+
+typedef struct DRI2DrawableRefRec {
+ XID id;
+ XID dri2_id;
+ DRI2InvalidateProcPtr invalidate;
+ void *priv;
+ struct list link;
+} DRI2DrawableRefRec, *DRI2DrawableRefPtr;
+
+static DRI2DrawableRefPtr
+DRI2LookupDrawableRef(DRI2DrawablePtr pPriv, XID id)
+{
+ DRI2DrawableRefPtr ref;
+
+ list_for_each_entry(ref, &pPriv->reference_list, link) {
+ if (ref->id == id)
+ return ref;
+ }
+
+ return NULL;
+}
+
+static int
+DRI2AddDrawableRef(DRI2DrawablePtr pPriv, XID id, XID dri2_id,
+ DRI2InvalidateProcPtr invalidate, void *priv)
+{
+ DRI2DrawableRefPtr ref;
+
+ ref = malloc(sizeof *ref);
+ if (ref == NULL)
+ return BadAlloc;
+
+ if (!AddResource(dri2_id, dri2DrawableRes, pPriv)) {
+ free(ref);
+ return BadAlloc;
+ }
+ if (!DRI2LookupDrawableRef(pPriv, id))
+ if (!AddResource(id, dri2DrawableRes, pPriv)) {
+ FreeResourceByType(dri2_id, dri2DrawableRes, TRUE);
+ free(ref);
+ return BadAlloc;
+ }
+
+ ref->id = id;
+ ref->dri2_id = dri2_id;
+ ref->invalidate = invalidate;
+ ref->priv = priv;
+ list_add(&ref->link, &pPriv->reference_list);
+
+ return Success;
+}
+
+int
+DRI2CreateDrawable(ClientPtr client, DrawablePtr pDraw, XID id,
+ DRI2InvalidateProcPtr invalidate, void *priv)
+{
+ DRI2DrawablePtr pPriv;
+ XID dri2_id;
+ int rc;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL)
+ pPriv = DRI2AllocateDrawable(pDraw);
+ if (pPriv == NULL)
+ return BadAlloc;
+
+ dri2_id = FakeClientID(client->index);
+ rc = DRI2AddDrawableRef(pPriv, id, dri2_id, invalidate, priv);
+ if (rc != Success)
+ return rc;
+
+ return Success;
+}
+
+static int DRI2DrawableGone(pointer p, XID id)
+{
+ DRI2DrawablePtr pPriv = p;
+ DRI2ScreenPtr ds = pPriv->dri2_screen;
+ DRI2DrawableRefPtr ref, next;
+ WindowPtr pWin;
+ PixmapPtr pPixmap;
+ DrawablePtr pDraw;
+ int i;
+
+ list_for_each_entry_safe(ref, next, &pPriv->reference_list, link) {
+ if (ref->dri2_id == id) {
+ list_del(&ref->link);
+ /* If this was the last ref under this X drawable XID,
+ * unregister the X drawable resource. */
+ if (!DRI2LookupDrawableRef(pPriv, ref->id))
+ FreeResourceByType(ref->id, dri2DrawableRes, TRUE);
+ free(ref);
+ break;
+ }
+
+ if (ref->id == id) {
+ list_del(&ref->link);
+ FreeResourceByType(ref->dri2_id, dri2DrawableRes, TRUE);
+ free(ref);
+ }
+ }
+
+ if (!list_is_empty(&pPriv->reference_list))
+ return Success;
+
+ pDraw = pPriv->drawable;
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ pWin = (WindowPtr) pDraw;
+ dixSetPrivate(&pWin->devPrivates, dri2WindowPrivateKey, NULL);
+ } else {
+ pPixmap = (PixmapPtr) pDraw;
+ dixSetPrivate(&pPixmap->devPrivates, dri2PixmapPrivateKey, NULL);
+ }
+
+ if (pPriv->buffers != NULL) {
+ for (i = 0; i < pPriv->bufferCount; i++)
+ (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]);
+
+ free(pPriv->buffers);
+ }
+
+ free(pPriv);
+
+ return Success;
+}
+
+static int
+find_attachment(DRI2DrawablePtr pPriv, unsigned attachment)
+{
+ int i;
+
+ if (pPriv->buffers == NULL) {
+ return -1;
+ }
+
+ for (i = 0; i < pPriv->bufferCount; i++) {
+ if ((pPriv->buffers[i] != NULL)
+ && (pPriv->buffers[i]->attachment == attachment)) {
+ return i;
+ }
+ }
+
+ return -1;
+}
+
+static Bool
+allocate_or_reuse_buffer(DrawablePtr pDraw, DRI2ScreenPtr ds,
+ DRI2DrawablePtr pPriv,
+ unsigned int attachment, unsigned int format,
+ int dimensions_match, DRI2BufferPtr *buffer)
+{
+ int old_buf = find_attachment(pPriv, attachment);
+
+ if ((old_buf < 0)
+ || !dimensions_match
+ || (pPriv->buffers[old_buf]->format != format)) {
+ *buffer = (*ds->CreateBuffer)(pDraw, attachment, format);
+ pPriv->serialNumber = DRI2DrawableSerial(pDraw);
+ return TRUE;
+
+ } else {
+ *buffer = pPriv->buffers[old_buf];
+ pPriv->buffers[old_buf] = NULL;
+ return FALSE;
+ }
+}
+
+static void
+update_dri2_drawable_buffers(DRI2DrawablePtr pPriv, DrawablePtr pDraw,
+ DRI2BufferPtr *buffers, int *out_count, int *width, int *height)
+{
+ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+ int i;
+
+ if (pPriv->buffers != NULL) {
+ for (i = 0; i < pPriv->bufferCount; i++) {
+ if (pPriv->buffers[i] != NULL) {
+ (*ds->DestroyBuffer)(pDraw, pPriv->buffers[i]);
+ }
+ }
+
+ free(pPriv->buffers);
+ }
+
+ pPriv->buffers = buffers;
+ pPriv->bufferCount = *out_count;
+ pPriv->width = pDraw->width;
+ pPriv->height = pDraw->height;
+ *width = pPriv->width;
+ *height = pPriv->height;
+}
+
+static DRI2BufferPtr *
+do_get_buffers(DrawablePtr pDraw, int *width, int *height,
+ unsigned int *attachments, int count, int *out_count,
+ int has_format)
+{
+ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+ DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
+ DRI2BufferPtr *buffers;
+ int need_real_front = 0;
+ int need_fake_front = 0;
+ int have_fake_front = 0;
+ int front_format = 0;
+ int dimensions_match;
+ int buffers_changed = 0;
+ int i;
+
+ if (!pPriv) {
+ *width = pDraw->width;
+ *height = pDraw->height;
+ *out_count = 0;
+ return NULL;
+ }
+
+ dimensions_match = (pDraw->width == pPriv->width)
+ && (pDraw->height == pPriv->height)
+ && (pPriv->serialNumber == DRI2DrawableSerial(pDraw));
+
+ buffers = calloc((count + 1), sizeof(buffers[0]));
+
+ for (i = 0; i < count; i++) {
+ const unsigned attachment = *(attachments++);
+ const unsigned format = (has_format) ? *(attachments++) : 0;
+
+ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, attachment,
+ format, dimensions_match,
+ &buffers[i]))
+ buffers_changed = 1;
+
+ if (buffers[i] == NULL)
+ goto err_out;
+
+ /* If the drawable is a window and the front-buffer is requested,
+ * silently add the fake front-buffer to the list of requested
+ * attachments. The counting logic in the loop accounts for the case
+ * where the client requests both the fake and real front-buffer.
+ */
+ if (attachment == DRI2BufferBackLeft) {
+ need_real_front++;
+ front_format = format;
+ }
+
+ if (attachment == DRI2BufferFrontLeft) {
+ need_real_front--;
+ front_format = format;
+
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ need_fake_front++;
+ }
+ }
+
+ if (pDraw->type == DRAWABLE_WINDOW) {
+ if (attachment == DRI2BufferFakeFrontLeft) {
+ need_fake_front--;
+ have_fake_front = 1;
+ }
+ }
+ }
+
+ if (need_real_front > 0) {
+ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFrontLeft,
+ front_format, dimensions_match,
+ &buffers[i]))
+ buffers_changed = 1;
+
+ if (buffers[i] == NULL)
+ goto err_out;
+ i++;
+ }
+
+ if (need_fake_front > 0) {
+ if (allocate_or_reuse_buffer(pDraw, ds, pPriv, DRI2BufferFakeFrontLeft,
+ front_format, dimensions_match,
+ &buffers[i]))
+ buffers_changed = 1;
+
+ if (buffers[i] == NULL)
+ goto err_out;
+
+ i++;
+ have_fake_front = 1;
+ }
+
+ *out_count = i;
+
+ update_dri2_drawable_buffers(pPriv, pDraw, buffers, out_count, width, height);
+
+ /* If the client is getting a fake front-buffer, pre-fill it with the
+ * contents of the real front-buffer. This ensures correct operation of
+ * applications that call glXWaitX before calling glDrawBuffer.
+ */
+ if (have_fake_front && buffers_changed) {
+ BoxRec box;
+ RegionRec region;
+
+ box.x1 = 0;
+ box.y1 = 0;
+ box.x2 = pPriv->width;
+ box.y2 = pPriv->height;
+ RegionInit(&region, &box, 0);
+
+ DRI2CopyRegion(pDraw, &region, DRI2BufferFakeFrontLeft,
+ DRI2BufferFrontLeft);
+ }
+
+ return pPriv->buffers;
+
+err_out:
+
+ *out_count = 0;
+
+ for (i = 0; i < count; i++) {
+ if (buffers[i] != NULL)
+ (*ds->DestroyBuffer)(pDraw, buffers[i]);
+ }
+
+ free(buffers);
+ buffers = NULL;
+
+ update_dri2_drawable_buffers(pPriv, pDraw, buffers, out_count, width, height);
+
+ return buffers;
+}
+
+DRI2BufferPtr *
+DRI2GetBuffers(DrawablePtr pDraw, int *width, int *height,
+ unsigned int *attachments, int count, int *out_count)
+{
+ return do_get_buffers(pDraw, width, height, attachments, count,
+ out_count, FALSE);
+}
+
+DRI2BufferPtr *
+DRI2GetBuffersWithFormat(DrawablePtr pDraw, int *width, int *height,
+ unsigned int *attachments, int count, int *out_count)
+{
+ return do_get_buffers(pDraw, width, height, attachments, count,
+ out_count, TRUE);
+}
+
+static void
+DRI2InvalidateDrawable(DrawablePtr pDraw)
+{
+ DRI2DrawablePtr pPriv = DRI2GetDrawable(pDraw);
+ DRI2DrawableRefPtr ref;
+
+ if (!pPriv)
+ return;
+
+ list_for_each_entry(ref, &pPriv->reference_list, link)
+ ref->invalidate(pDraw, ref->priv);
+}
+
+/*
+ * In the direct rendered case, we throttle the clients that have more
+ * than their share of outstanding swaps (and thus busy buffers) when a
+ * new GetBuffers request is received. In the AIGLX case, we allow the
+ * client to get the new buffers, but throttle when the next GLX request
+ * comes in (see __glXDRIcontextWait()).
+ */
+Bool
+DRI2ThrottleClient(ClientPtr client, DrawablePtr pDraw)
+{
+ DRI2DrawablePtr pPriv;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL)
+ return FALSE;
+
+ /* Throttle to swap limit */
+ if ((pPriv->swapsPending >= pPriv->swap_limit) &&
+ !pPriv->blockedClient) {
+ ResetCurrentRequest(client);
+ client->sequence--;
+ IgnoreClient(client);
+ pPriv->blockedClient = client;
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void
+__DRI2BlockClient(ClientPtr client, DRI2DrawablePtr pPriv)
+{
+ if (pPriv->blockedClient == NULL) {
+ IgnoreClient(client);
+ pPriv->blockedClient = client;
+ }
+}
+
+void
+DRI2BlockClient(ClientPtr client, DrawablePtr pDraw)
+{
+ DRI2DrawablePtr pPriv;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL)
+ return;
+
+ __DRI2BlockClient(client, pPriv);
+ pPriv->blockedOnMsc = TRUE;
+}
+
+int
+DRI2CopyRegion(DrawablePtr pDraw, RegionPtr pRegion,
+ unsigned int dest, unsigned int src)
+{
+ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+ DRI2DrawablePtr pPriv;
+ DRI2BufferPtr pDestBuffer, pSrcBuffer;
+ int i;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL)
+ return BadDrawable;
+
+ pDestBuffer = NULL;
+ pSrcBuffer = NULL;
+ for (i = 0; i < pPriv->bufferCount; i++)
+ {
+ if (pPriv->buffers[i]->attachment == dest)
+ pDestBuffer = (DRI2BufferPtr) pPriv->buffers[i];
+ if (pPriv->buffers[i]->attachment == src)
+ pSrcBuffer = (DRI2BufferPtr) pPriv->buffers[i];
+ }
+ if (pSrcBuffer == NULL || pDestBuffer == NULL)
+ return BadValue;
+
+ (*ds->CopyRegion)(pDraw, pRegion, pDestBuffer, pSrcBuffer);
+
+ return Success;
+}
+
+/* Can this drawable be page flipped? */
+Bool
+DRI2CanFlip(DrawablePtr pDraw)
+{
+ ScreenPtr pScreen = pDraw->pScreen;
+ WindowPtr pWin, pRoot;
+ PixmapPtr pWinPixmap, pRootPixmap;
+
+ if (pDraw->type == DRAWABLE_PIXMAP)
+ return TRUE;
+
+ pRoot = pScreen->root;
+ pRootPixmap = pScreen->GetWindowPixmap(pRoot);
+
+ pWin = (WindowPtr) pDraw;
+ pWinPixmap = pScreen->GetWindowPixmap(pWin);
+ if (pRootPixmap != pWinPixmap)
+ return FALSE;
+ if (!RegionEqual(&pWin->clipList, &pRoot->winSize))
+ return FALSE;
+
+ /* Does the window match the pixmap exactly? */
+ if (pDraw->x != 0 ||
+ pDraw->y != 0 ||
+#ifdef COMPOSITE
+ pDraw->x != pWinPixmap->screen_x ||
+ pDraw->y != pWinPixmap->screen_y ||
+#endif
+ pDraw->width != pWinPixmap->drawable.width ||
+ pDraw->height != pWinPixmap->drawable.height)
+ return FALSE;
+
+ return TRUE;
+}
+
+/* Can we do a pixmap exchange instead of a blit? */
+Bool
+DRI2CanExchange(DrawablePtr pDraw)
+{
+ return FALSE;
+}
+
+void
+DRI2WaitMSCComplete(ClientPtr client, DrawablePtr pDraw, int frame,
+ unsigned int tv_sec, unsigned int tv_usec)
+{
+ DRI2DrawablePtr pPriv;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL)
+ return;
+
+ ProcDRI2WaitMSCReply(client, ((CARD64)tv_sec * 1000000) + tv_usec,
+ frame, pPriv->swap_count);
+
+ if (pPriv->blockedClient)
+ AttendClient(pPriv->blockedClient);
+
+ pPriv->blockedClient = NULL;
+ pPriv->blockedOnMsc = FALSE;
+}
+
+static void
+DRI2WakeClient(ClientPtr client, DrawablePtr pDraw, int frame,
+ unsigned int tv_sec, unsigned int tv_usec)
+{
+ ScreenPtr pScreen = pDraw->pScreen;
+ DRI2DrawablePtr pPriv;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[DRI2] %s: bad drawable\n", __func__);
+ return;
+ }
+
+ /*
+ * Swap completed.
+ * Wake the client iff:
+ * - it was waiting on SBC
+ * - was blocked due to GLX make current
+ * - was blocked due to swap throttling
+ * - is not blocked due to an MSC wait
+ */
+ if (pPriv->target_sbc != -1 &&
+ pPriv->target_sbc <= pPriv->swap_count) {
+ ProcDRI2WaitMSCReply(client, ((CARD64)tv_sec * 1000000) + tv_usec,
+ frame, pPriv->swap_count);
+ pPriv->target_sbc = -1;
+
+ AttendClient(pPriv->blockedClient);
+ pPriv->blockedClient = NULL;
+ } else if (pPriv->target_sbc == -1 && !pPriv->blockedOnMsc) {
+ if (pPriv->blockedClient) {
+ AttendClient(pPriv->blockedClient);
+ pPriv->blockedClient = NULL;
+ }
+ }
+}
+
+void
+DRI2SwapComplete(ClientPtr client, DrawablePtr pDraw, int frame,
+ unsigned int tv_sec, unsigned int tv_usec, int type,
+ DRI2SwapEventPtr swap_complete, void *swap_data)
+{
+ ScreenPtr pScreen = pDraw->pScreen;
+ DRI2DrawablePtr pPriv;
+ CARD64 ust = 0;
+ BoxRec box;
+ RegionRec region;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[DRI2] %s: bad drawable\n", __func__);
+ return;
+ }
+
+ pPriv->swapsPending--;
+ pPriv->swap_count++;
+
+ box.x1 = 0;
+ box.y1 = 0;
+ box.x2 = pDraw->width;
+ box.y2 = pDraw->height;
+ RegionInit(&region, &box, 0);
+ DRI2CopyRegion(pDraw, &region, DRI2BufferFakeFrontLeft,
+ DRI2BufferFrontLeft);
+
+ ust = ((CARD64)tv_sec * 1000000) + tv_usec;
+ if (swap_complete)
+ swap_complete(client, swap_data, type, ust, frame, pPriv->swap_count);
+
+ pPriv->last_swap_msc = frame;
+ pPriv->last_swap_ust = ust;
+
+ DRI2WakeClient(client, pDraw, frame, tv_sec, tv_usec);
+}
+
+Bool
+DRI2WaitSwap(ClientPtr client, DrawablePtr pDrawable)
+{
+ DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
+
+ /* If we're currently waiting for a swap on this drawable, reset
+ * the request and suspend the client. We only support one
+ * blocked client per drawable. */
+ if ((pPriv->swapsPending) &&
+ pPriv->blockedClient == NULL) {
+ ResetCurrentRequest(client);
+ client->sequence--;
+ __DRI2BlockClient(client, pPriv);
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+int
+DRI2SwapBuffers(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
+ CARD64 divisor, CARD64 remainder, CARD64 *swap_target,
+ DRI2SwapEventPtr func, void *data)
+{
+ ScreenPtr pScreen = pDraw->pScreen;
+ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+ DRI2DrawablePtr pPriv;
+ DRI2BufferPtr pDestBuffer = NULL, pSrcBuffer = NULL;
+ int ret, i;
+ CARD64 ust, current_msc;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[DRI2] %s: bad drawable\n", __func__);
+ return BadDrawable;
+ }
+
+ for (i = 0; i < pPriv->bufferCount; i++) {
+ if (pPriv->buffers[i]->attachment == DRI2BufferFrontLeft)
+ pDestBuffer = (DRI2BufferPtr) pPriv->buffers[i];
+ if (pPriv->buffers[i]->attachment == DRI2BufferBackLeft)
+ pSrcBuffer = (DRI2BufferPtr) pPriv->buffers[i];
+ }
+ if (pSrcBuffer == NULL || pDestBuffer == NULL) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[DRI2] %s: drawable has no back or front?\n", __func__);
+ return BadDrawable;
+ }
+
+ /* Old DDX or no swap interval, just blit */
+ if (!ds->ScheduleSwap || !pPriv->swap_interval) {
+ BoxRec box;
+ RegionRec region;
+
+ box.x1 = 0;
+ box.y1 = 0;
+ box.x2 = pDraw->width;
+ box.y2 = pDraw->height;
+ RegionInit(&region, &box, 0);
+
+ pPriv->swapsPending++;
+
+ (*ds->CopyRegion)(pDraw, &region, pDestBuffer, pSrcBuffer);
+ DRI2SwapComplete(client, pDraw, target_msc, 0, 0, DRI2_BLIT_COMPLETE,
+ func, data);
+ return Success;
+ }
+
+ /*
+ * In the simple glXSwapBuffers case, all params will be 0, and we just
+ * need to schedule a swap for the last swap target + the swap interval.
+ */
+ if (target_msc == 0 && divisor == 0 && remainder == 0) {
+ /* If the current vblank count of the drawable's crtc is lower
+ * than the count stored in last_swap_target from a previous swap
+ * then reinitialize last_swap_target to the current crtc's msc,
+ * otherwise the swap will hang. This will happen if the drawable
+ * is moved to a crtc with a lower refresh rate, or a crtc that just
+ * got enabled.
+ */
+ if (ds->GetMSC) {
+ if (!(*ds->GetMSC)(pDraw, &ust, &current_msc))
+ pPriv->last_swap_target = 0;
+
+ if (current_msc < pPriv->last_swap_target)
+ pPriv->last_swap_target = current_msc;
+
+ }
+
+ /*
+ * Swap target for this swap is last swap target + swap interval since
+ * we have to account for the current swap count, interval, and the
+ * number of pending swaps.
+ */
+ *swap_target = pPriv->last_swap_target + pPriv->swap_interval;
+
+ } else {
+ /* glXSwapBuffersMscOML could have a 0 target_msc, honor it */
+ *swap_target = target_msc;
+ }
+
+ pPriv->swapsPending++;
+ ret = (*ds->ScheduleSwap)(client, pDraw, pDestBuffer, pSrcBuffer,
+ swap_target, divisor, remainder, func, data);
+ if (!ret) {
+ pPriv->swapsPending--; /* didn't schedule */
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[DRI2] %s: driver failed to schedule swap\n", __func__);
+ return BadDrawable;
+ }
+
+ pPriv->last_swap_target = *swap_target;
+
+ /* According to spec, return expected swapbuffers count SBC after this swap
+ * will complete.
+ */
+ *swap_target = pPriv->swap_count + pPriv->swapsPending;
+
+ DRI2InvalidateDrawable(pDraw);
+
+ return Success;
+}
+
+void
+DRI2SwapInterval(DrawablePtr pDrawable, int interval)
+{
+ ScreenPtr pScreen = pDrawable->pScreen;
+ DRI2DrawablePtr pPriv = DRI2GetDrawable(pDrawable);
+
+ if (pPriv == NULL) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[DRI2] %s: bad drawable\n", __func__);
+ return;
+ }
+
+ /* fixme: check against arbitrary max? */
+ pPriv->swap_interval = interval;
+}
+
+int
+DRI2GetMSC(DrawablePtr pDraw, CARD64 *ust, CARD64 *msc, CARD64 *sbc)
+{
+ ScreenPtr pScreen = pDraw->pScreen;
+ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+ DRI2DrawablePtr pPriv;
+ Bool ret;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL) {
+ xf86DrvMsg(pScreen->myNum, X_ERROR,
+ "[DRI2] %s: bad drawable\n", __func__);
+ return BadDrawable;
+ }
+
+ if (!ds->GetMSC) {
+ *ust = 0;
+ *msc = 0;
+ *sbc = pPriv->swap_count;
+ return Success;
+ }
+
+ /*
+ * Spec needs to be updated to include unmapped or redirected
+ * drawables
+ */
+
+ ret = (*ds->GetMSC)(pDraw, ust, msc);
+ if (!ret)
+ return BadDrawable;
+
+ *sbc = pPriv->swap_count;
+
+ return Success;
+}
+
+int
+DRI2WaitMSC(ClientPtr client, DrawablePtr pDraw, CARD64 target_msc,
+ CARD64 divisor, CARD64 remainder)
+{
+ DRI2ScreenPtr ds = DRI2GetScreen(pDraw->pScreen);
+ DRI2DrawablePtr pPriv;
+ Bool ret;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL)
+ return BadDrawable;
+
+ /* Old DDX just completes immediately */
+ if (!ds->ScheduleWaitMSC) {
+ DRI2WaitMSCComplete(client, pDraw, target_msc, 0, 0);
+
+ return Success;
+ }
+
+ ret = (*ds->ScheduleWaitMSC)(client, pDraw, target_msc, divisor, remainder);
+ if (!ret)
+ return BadDrawable;
+
+ return Success;
+}
+
+int
+DRI2WaitSBC(ClientPtr client, DrawablePtr pDraw, CARD64 target_sbc)
+{
+ DRI2DrawablePtr pPriv;
+
+ pPriv = DRI2GetDrawable(pDraw);
+ if (pPriv == NULL)
+ return BadDrawable;
+
+ /* target_sbc == 0 means to block until all pending swaps are
+ * finished. Recalculate target_sbc to get that behaviour.
+ */
+ if (target_sbc == 0)
+ target_sbc = pPriv->swap_count + pPriv->swapsPending;
+
+ /* If current swap count already >= target_sbc, reply and
+ * return immediately with (ust, msc, sbc) triplet of
+ * most recent completed swap.
+ */
+ if (pPriv->swap_count >= target_sbc) {
+ ProcDRI2WaitMSCReply(client, pPriv->last_swap_ust,
+ pPriv->last_swap_msc, pPriv->swap_count);
+ return Success;
+ }
+
+ pPriv->target_sbc = target_sbc;
+ __DRI2BlockClient(client, pPriv);
+
+ return Success;
+}
+
+Bool
+DRI2HasSwapControl(ScreenPtr pScreen)
+{
+ DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
+
+ return ds->ScheduleSwap && ds->GetMSC;
+}
+
+Bool
+DRI2Connect(ScreenPtr pScreen, unsigned int driverType, int *fd,
+ const char **driverName, const char **deviceName)
+{
+ DRI2ScreenPtr ds;
+
+ if (!dixPrivateKeyRegistered(dri2ScreenPrivateKey))
+ return FALSE;
+
+ ds = DRI2GetScreen(pScreen);
+ if (ds == NULL || driverType >= ds->numDrivers ||
+ !ds->driverNames[driverType])
+ return FALSE;
+
+ *fd = ds->fd;
+ *driverName = ds->driverNames[driverType];
+ *deviceName = ds->deviceName;
+
+ return TRUE;
+}
+
+Bool
+DRI2Authenticate(ScreenPtr pScreen, uint32_t magic)
+{
+ DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
+
+ if (ds == NULL || (*ds->AuthMagic)(ds->fd, magic))
+ return FALSE;
+
+ return TRUE;
+}
+
+static int
+DRI2ConfigNotify(WindowPtr pWin, int x, int y, int w, int h, int bw,
+ WindowPtr pSib)
+{
+ DrawablePtr pDraw = (DrawablePtr)pWin;
+ ScreenPtr pScreen = pDraw->pScreen;
+ DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
+ DRI2DrawablePtr dd = DRI2GetDrawable(pDraw);
+ int ret;
+
+ if (ds->ConfigNotify) {
+ pScreen->ConfigNotify = ds->ConfigNotify;
+
+ ret = (*pScreen->ConfigNotify)(pWin, x, y, w, h, bw, pSib);
+
+ ds->ConfigNotify = pScreen->ConfigNotify;
+ pScreen->ConfigNotify = DRI2ConfigNotify;
+ if (ret)
+ return ret;
+ }
+
+ if (!dd || (dd->width == w && dd->height == h))
+ return Success;
+
+ DRI2InvalidateDrawable(pDraw);
+ return Success;
+}
+
+Bool
+DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info)
+{
+ DRI2ScreenPtr ds;
+ const char* driverTypeNames[] = {
+ "DRI", /* DRI2DriverDRI */
+ "VDPAU", /* DRI2DriverVDPAU */
+ };
+ unsigned int i;
+ CARD8 cur_minor;
+
+ if (info->version < 3)
+ return FALSE;
+
+ if (!xf86VGAarbiterAllowDRI(pScreen)) {
+ xf86DrvMsg(pScreen->myNum, X_WARNING,
+ "[DRI2] Direct rendering is not supported when VGA arb is necessary for the device\n");
+ return FALSE;
+ }
+
+ if (!dixRegisterPrivateKey(&dri2ScreenPrivateKeyRec, PRIVATE_SCREEN, 0))
+ return FALSE;
+
+ if (!dixRegisterPrivateKey(&dri2WindowPrivateKeyRec, PRIVATE_WINDOW, 0))
+ return FALSE;
+
+ if (!dixRegisterPrivateKey(&dri2PixmapPrivateKeyRec, PRIVATE_PIXMAP, 0))
+ return FALSE;
+
+ ds = calloc(1, sizeof *ds);
+ if (!ds)
+ return FALSE;
+
+ ds->screen = pScreen;
+ ds->fd = info->fd;
+ ds->deviceName = info->deviceName;
+ dri2_major = 1;
+
+ ds->CreateBuffer = info->CreateBuffer;
+ ds->DestroyBuffer = info->DestroyBuffer;
+ ds->CopyRegion = info->CopyRegion;
+
+ if (info->version >= 4) {
+ ds->ScheduleSwap = info->ScheduleSwap;
+ ds->ScheduleWaitMSC = info->ScheduleWaitMSC;
+ ds->GetMSC = info->GetMSC;
+ cur_minor = 3;
+ } else {
+ cur_minor = 1;
+ }
+
+ if (info->version >= 5) {
+ ds->AuthMagic = info->AuthMagic;
+ }
+
+ /*
+ * if the driver doesn't provide an AuthMagic function or the info struct
+ * version is too low, it relies on the old method (using libdrm) or fail
+ */
+ if (!ds->AuthMagic)
+#ifdef WITH_LIBDRM
+ ds->AuthMagic = drmAuthMagic;
+#else
+ goto err_out;
+#endif
+
+ /* Initialize minor if needed and set to minimum provied by DDX */
+ if (!dri2_minor || dri2_minor > cur_minor)
+ dri2_minor = cur_minor;
+
+ if (info->version == 3 || info->numDrivers == 0) {
+ /* Driver too old: use the old-style driverName field */
+ ds->numDrivers = 1;
+ ds->driverNames = malloc(sizeof(*ds->driverNames));
+ if (!ds->driverNames)
+ goto err_out;
+ ds->driverNames[0] = info->driverName;
+ } else {
+ ds->numDrivers = info->numDrivers;
+ ds->driverNames = malloc(info->numDrivers * sizeof(*ds->driverNames));
+ if (!ds->driverNames)
+ goto err_out;
+ memcpy(ds->driverNames, info->driverNames,
+ info->numDrivers * sizeof(*ds->driverNames));
+ }
+
+ dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, ds);
+
+ ds->ConfigNotify = pScreen->ConfigNotify;
+ pScreen->ConfigNotify = DRI2ConfigNotify;
+
+ xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] Setup complete\n");
+ for (i = 0; i < sizeof(driverTypeNames) / sizeof(driverTypeNames[0]); i++) {
+ if (i < ds->numDrivers && ds->driverNames[i]) {
+ xf86DrvMsg(pScreen->myNum, X_INFO, "[DRI2] %s driver: %s\n",
+ driverTypeNames[i], ds->driverNames[i]);
+ }
+ }
+
+ return TRUE;
+
+err_out:
+ xf86DrvMsg(pScreen->myNum, X_WARNING,
+ "[DRI2] Initialization failed for info version %d.\n", info->version);
+ free(ds);
+ return FALSE;
+}
+
+void
+DRI2CloseScreen(ScreenPtr pScreen)
+{
+ DRI2ScreenPtr ds = DRI2GetScreen(pScreen);
+
+ free(ds->driverNames);
+ free(ds);
+ dixSetPrivate(&pScreen->devPrivates, dri2ScreenPrivateKey, NULL);
+}
+
+extern ExtensionModule dri2ExtensionModule;
+
+static pointer
+DRI2Setup(pointer module, pointer opts, int *errmaj, int *errmin)
+{
+ static Bool setupDone = FALSE;
+
+ dri2DrawableRes = CreateNewResourceType(DRI2DrawableGone, "DRI2Drawable");
+
+ if (!setupDone)
+ {
+ setupDone = TRUE;
+ LoadExtension(&dri2ExtensionModule, FALSE);
+ }
+ else
+ {
+ if (errmaj)
+ *errmaj = LDR_ONCEONLY;
+ }
+
+ return (pointer) 1;
+}
+
+static XF86ModuleVersionInfo DRI2VersRec =
+{
+ "dri2",
+ MODULEVENDORSTRING,
+ MODINFOSTRING1,
+ MODINFOSTRING2,
+ XORG_VERSION_CURRENT,
+ 1, 2, 0,
+ ABI_CLASS_EXTENSION,
+ ABI_EXTENSION_VERSION,
+ MOD_CLASS_NONE,
+ { 0, 0, 0, 0 }
+};
+
+_X_EXPORT XF86ModuleData dri2ModuleData = { &DRI2VersRec, DRI2Setup, NULL };
+
+void
+DRI2Version(int *major, int *minor)
+{
+ if (major != NULL)
+ *major = DRI2VersRec.majorversion;
+
+ if (minor != NULL)
+ *minor = DRI2VersRec.minorversion;
+}
diff --git a/xorg-server/hw/xfree86/loader/loadmod.c b/xorg-server/hw/xfree86/loader/loadmod.c
index 271cb5b79..46ce68b86 100644
--- a/xorg-server/hw/xfree86/loader/loadmod.c
+++ b/xorg-server/hw/xfree86/loader/loadmod.c
@@ -1,1255 +1,1261 @@
-/*
- * Copyright 1995-1998 by Metro Link, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Metro Link, Inc. not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Metro Link, Inc. makes no
- * representations about the suitability of this software for any purpose.
- * It is provided "as is" without express or implied warranty.
- *
- * METRO LINK, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL METRO LINK, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-/*
- * Copyright (c) 1997-2002 by The XFree86 Project, Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
- * OTHER DEALINGS IN THE SOFTWARE.
- *
- * Except as contained in this notice, the name of the copyright holder(s)
- * and author(s) shall not be used in advertising or otherwise to promote
- * the sale, use or other dealings in this Software without prior written
- * authorization from the copyright holder(s) and author(s).
- */
-
-#ifdef HAVE_XORG_CONFIG_H
-#include <xorg-config.h>
-#endif
-
-#include "os.h"
-/* For stat() and related stuff */
-#define NO_OSLIB_PROTOTYPES
-#include "xf86_OSlib.h"
-#define LOADERDECLARATIONS
-#include "loaderProcs.h"
-#include "misc.h"
-#include "xf86.h"
-#include "xf86Priv.h"
-#include "xf86Xinput.h"
-#include "loader.h"
-#include "xf86Optrec.h"
-
-#include <sys/types.h>
-#include <regex.h>
-#include <dirent.h>
-#include <limits.h>
-
-typedef struct _pattern {
- const char *pattern;
- regex_t rex;
-} PatternRec, *PatternPtr;
-
-/* Prototypes for static functions */
-static char *FindModule(const char *, const char *, const char **,
- PatternPtr);
-static Bool CheckVersion(const char *, XF86ModuleVersionInfo *,
- const XF86ModReqInfo *);
-static void UnloadModuleOrDriver(ModuleDescPtr mod);
-static char *LoaderGetCanonicalName(const char *, PatternPtr);
-static void RemoveChild(ModuleDescPtr);
-static ModuleDescPtr doLoadModule(const char *, const char *, const char **,
- const char **, pointer,
- const XF86ModReqInfo *, int *, int *);
-
-const ModuleVersions LoaderVersionInfo = {
- XORG_VERSION_CURRENT,
- ABI_ANSIC_VERSION,
- ABI_VIDEODRV_VERSION,
- ABI_XINPUT_VERSION,
- ABI_EXTENSION_VERSION,
- ABI_FONT_VERSION
-};
-
-static void
-FreeStringList(char **paths)
-{
- char **p;
-
- if (!paths)
- return;
-
- for (p = paths; *p; p++)
- free(*p);
-
- free(paths);
-}
-
-static char **defaultPathList = NULL;
-
-static Bool
-PathIsAbsolute(const char *path)
-{
- return *path == '/';
-}
-
-/*
- * Convert a comma-separated path into a NULL-terminated array of path
- * elements, rejecting any that are not full absolute paths, and appending
- * a '/' when it isn't already present.
- */
-static char **
-InitPathList(const char *path)
-{
- char *fullpath = NULL;
- char *elem = NULL;
- char **list = NULL, **save = NULL;
- int len;
- int addslash;
- int n = 0;
-
- if (!path)
- return defaultPathList;
-
- fullpath = strdup(path);
- if (!fullpath)
- return NULL;
- elem = strtok(fullpath, ",");
- while (elem) {
- if (PathIsAbsolute(elem))
- {
- len = strlen(elem);
- addslash = (elem[len - 1] != '/');
- if (addslash)
- len++;
- save = list;
- list = realloc(list, (n + 2) * sizeof(char *));
- if (!list) {
- if (save) {
- save[n] = NULL;
- FreeStringList(save);
- }
- free(fullpath);
- return NULL;
- }
- list[n] = malloc(len + 1);
- if (!list[n]) {
- FreeStringList(list);
- free(fullpath);
- return NULL;
- }
- strcpy(list[n], elem);
- if (addslash) {
- list[n][len - 1] = '/';
- list[n][len] = '\0';
- }
- n++;
- }
- elem = strtok(NULL, ",");
- }
- if (list)
- list[n] = NULL;
- free(fullpath);
- return list;
-}
-
-static void
-FreePathList(char **pathlist)
-{
- if (pathlist && pathlist != defaultPathList)
- FreeStringList(pathlist);
-}
-
-void
-LoaderSetPath(const char *path)
-{
- if (!path)
- return;
-
- defaultPathList = InitPathList(path);
-}
-
-/* Standard set of module subdirectories to search, in order of preference */
-static const char *stdSubdirs[] = {
- "",
- "input/",
- "drivers/",
- "multimedia/",
- "extensions/",
- "internal/",
- NULL
-};
-
-/*
- * Standard set of module name patterns to check, in order of preference
- * These are regular expressions (suitable for use with POSIX regex(3)).
- *
- * This list assumes that you're an ELFish platform and therefore your
- * shared libraries are named something.so. If we're ever nuts enough
- * to port this DDX to, say, Darwin, we'll need to fix this.
- */
-static PatternRec stdPatterns[] = {
- {"^lib(.*)\\.so$",},
- {"(.*)_drv\\.so$",},
- {"(.*)\\.so$",},
- {NULL,}
-};
-
-static PatternPtr
-InitPatterns(const char **patternlist)
-{
- char errmsg[80];
- int i, e;
- PatternPtr patterns = NULL;
- PatternPtr p = NULL;
- static int firstTime = 1;
- const char **s;
-
- if (firstTime) {
- /* precompile stdPatterns */
- firstTime = 0;
- for (p = stdPatterns; p->pattern; p++)
- if ((e = regcomp(&p->rex, p->pattern, REG_EXTENDED)) != 0) {
- regerror(e, &p->rex, errmsg, sizeof(errmsg));
- FatalError("InitPatterns: regcomp error for `%s': %s\n",
- p->pattern, errmsg);
- }
- }
-
- if (patternlist) {
- for (i = 0, s = patternlist; *s; i++, s++)
- if (*s == DEFAULT_LIST)
- i += sizeof(stdPatterns) / sizeof(stdPatterns[0]) - 1 - 1;
- patterns = malloc((i + 1) * sizeof(PatternRec));
- if (!patterns) {
- return NULL;
- }
- for (i = 0, s = patternlist; *s; i++, s++)
- if (*s != DEFAULT_LIST) {
- p = patterns + i;
- p->pattern = *s;
- if ((e = regcomp(&p->rex, p->pattern, REG_EXTENDED)) != 0) {
- regerror(e, &p->rex, errmsg, sizeof(errmsg));
- ErrorF("InitPatterns: regcomp error for `%s': %s\n",
- p->pattern, errmsg);
- i--;
- }
- } else {
- for (p = stdPatterns; p->pattern; p++, i++)
- patterns[i] = *p;
- if (p != stdPatterns)
- i--;
- }
- patterns[i].pattern = NULL;
- } else
- patterns = stdPatterns;
- return patterns;
-}
-
-static void
-FreePatterns(PatternPtr patterns)
-{
- if (patterns && patterns != stdPatterns)
- free(patterns);
-}
-
-static const char **
-InitSubdirs(const char **subdirlist)
-{
- int i;
- const char **tmp_subdirlist = NULL;
- char **subdirs = NULL;
- const char **s, **stmp = NULL;
- const char *osname;
- const char *slash;
- int oslen = 0, len;
- Bool indefault;
-
- if (subdirlist == NULL) {
- subdirlist = tmp_subdirlist = malloc(2 * sizeof(char *));
- if (subdirlist == NULL)
- return NULL;
- subdirlist[0] = DEFAULT_LIST;
- subdirlist[1] = NULL;
- }
-
- LoaderGetOS(&osname, NULL, NULL, NULL);
- oslen = strlen(osname);
-
- {
- /* Count number of entries and check for invalid paths */
- for (i = 0, s = subdirlist; *s; i++, s++) {
- if (*s == DEFAULT_LIST) {
- i += sizeof(stdSubdirs) / sizeof(stdSubdirs[0]) - 1 - 1;
- } else {
- /*
- * Path validity check. Don't allow absolute paths, or
- * paths containing "..". To catch absolute paths on
- * platforms that use driver letters, don't allow the ':'
- * character to appear at all.
- */
- if (**s == '/' || **s == '\\' || strchr(*s, ':') ||
- strstr(*s, "..")) {
- xf86Msg(X_ERROR, "InitSubdirs: Bad subdir: \"%s\"\n", *s);
- free(tmp_subdirlist);
- return NULL;
- }
- }
- }
- subdirs = malloc((i * 2 + 1) * sizeof(char *));
- if (!subdirs) {
- free(tmp_subdirlist);
- return NULL;
- }
- i = 0;
- s = subdirlist;
- indefault = FALSE;
- while (*s) {
- if (*s == DEFAULT_LIST) {
- /* Divert to the default list */
- indefault = TRUE;
- stmp = ++s;
- s = stdSubdirs;
- }
- len = strlen(*s);
- if (**s && (*s)[len - 1] != '/') {
- slash = "/";
- len++;
- } else
- slash = "";
- len += oslen + 2;
- if (!(subdirs[i] = malloc(len))) {
- while (--i >= 0)
- free(subdirs[i]);
- free(subdirs);
- free(tmp_subdirlist);
- return NULL;
- }
- /* tack on the OS name */
- sprintf(subdirs[i], "%s%s%s/", *s, slash, osname);
- i++;
- /* path as given */
- subdirs[i] = strdup(*s);
- i++;
- s++;
- if (indefault && !s) {
- /* revert back to the main list */
- indefault = FALSE;
- s = stmp;
- }
- }
- subdirs[i] = NULL;
- }
- free(tmp_subdirlist);
- return (const char **)subdirs;
-}
-
-static void
-FreeSubdirs(const char **subdirs)
-{
- const char **s;
-
- if (subdirs) {
- for (s = subdirs; *s; s++)
- free((char *)*s);
- free(subdirs);
- }
-}
-
-static char *
-FindModuleInSubdir(const char *dirpath, const char *module)
-{
- struct dirent *direntry = NULL;
- DIR *dir = NULL;
- char *ret = NULL, tmpBuf[PATH_MAX];
- struct stat stat_buf;
-
- dir = opendir(dirpath);
- if (!dir)
- return NULL;
-
- while ((direntry = readdir(dir))) {
- if (direntry->d_name[0] == '.')
- continue;
- snprintf(tmpBuf, PATH_MAX, "%s%s/", dirpath, direntry->d_name);
- /* the stat with the appended / fails for normal files,
- and works for sub dirs fine, looks a bit strange in strace
- but does seem to work */
- if ((stat(tmpBuf, &stat_buf) == 0) && S_ISDIR(stat_buf.st_mode)) {
- if ((ret = FindModuleInSubdir(tmpBuf, module)))
- break;
- continue;
- }
-
- snprintf(tmpBuf, PATH_MAX, "lib%s.so", module);
- if (strcmp(direntry->d_name, tmpBuf) == 0) {
- if (asprintf(&ret, "%s%s", dirpath, tmpBuf) == -1)
- ret = NULL;
- break;
- }
-
- snprintf(tmpBuf, PATH_MAX, "%s_drv.so", module);
- if (strcmp(direntry->d_name, tmpBuf) == 0) {
- if (asprintf(&ret, "%s%s", dirpath, tmpBuf) == -1)
- ret = NULL;
- break;
- }
-
- snprintf(tmpBuf, PATH_MAX, "%s.so", module);
- if (strcmp(direntry->d_name, tmpBuf) == 0) {
- if (asprintf(&ret, "%s%s", dirpath, tmpBuf) == -1)
- ret = NULL;
- break;
- }
- }
-
- closedir(dir);
- return ret;
-}
-
-static char *
-FindModule(const char *module, const char *dirname, const char **subdirlist,
- PatternPtr patterns)
-{
- char buf[PATH_MAX + 1];
- char *dirpath = NULL;
- char *name = NULL;
- int dirlen;
- const char **subdirs = NULL;
- const char **s;
-
- dirpath = (char *)dirname;
- if (strlen(dirpath) > PATH_MAX)
- return NULL;
-
- subdirs = InitSubdirs(subdirlist);
- if (!subdirs)
- return NULL;
-
- for (s = subdirs; *s; s++) {
- if ((dirlen = strlen(dirpath) + strlen(*s)) > PATH_MAX)
- continue;
- strcpy(buf, dirpath);
- strcat(buf, *s);
- if ((name = FindModuleInSubdir(buf, module)))
- break;
- }
-
- FreeSubdirs(subdirs);
- if (dirpath != dirname)
- free(dirpath);
-
- return name;
-}
-
-char **
-LoaderListDirs(const char **subdirlist, const char **patternlist)
-{
- char buf[PATH_MAX + 1];
- char **pathlist;
- char **elem;
- const char **subdirs;
- const char **s;
- PatternPtr patterns;
- PatternPtr p;
- DIR *d;
- struct dirent *dp;
- regmatch_t match[2];
- struct stat stat_buf;
- int len, dirlen;
- char *fp;
- char **listing = NULL;
- char **save;
- int n = 0;
-
- if (!(pathlist = InitPathList(NULL)))
- return NULL;
- if (!(subdirs = InitSubdirs(subdirlist))) {
- FreePathList(pathlist);
- return NULL;
- }
- if (!(patterns = InitPatterns(patternlist))) {
- FreePathList(pathlist);
- FreeSubdirs(subdirs);
- return NULL;
- }
-
- for (elem = pathlist; *elem; elem++) {
- for (s = subdirs; *s; s++) {
- if ((dirlen = strlen(*elem) + strlen(*s)) > PATH_MAX)
- continue;
- strcpy(buf, *elem);
- strcat(buf, *s);
- fp = buf + dirlen;
- if (stat(buf, &stat_buf) == 0 && S_ISDIR(stat_buf.st_mode) &&
- (d = opendir(buf))) {
- if (buf[dirlen - 1] != '/') {
- buf[dirlen++] = '/';
- fp++;
- }
- while ((dp = readdir(d))) {
- if (dirlen + strlen(dp->d_name) > PATH_MAX)
- continue;
- strcpy(fp, dp->d_name);
- if (!(stat(buf, &stat_buf) == 0 &&
- S_ISREG(stat_buf.st_mode)))
- continue;
- for (p = patterns; p->pattern; p++) {
- if (regexec(&p->rex, dp->d_name, 2, match, 0) == 0 &&
- match[1].rm_so != -1) {
- len = match[1].rm_eo - match[1].rm_so;
- save = listing;
- listing = realloc(listing,
- (n + 2) * sizeof(char *));
- if (!listing) {
- if (save) {
- save[n] = NULL;
- FreeStringList(save);
- }
- FreePathList(pathlist);
- FreeSubdirs(subdirs);
- FreePatterns(patterns);
- return NULL;
- }
- listing[n] = malloc(len + 1);
- if (!listing[n]) {
- FreeStringList(listing);
- FreePathList(pathlist);
- FreeSubdirs(subdirs);
- FreePatterns(patterns);
- return NULL;
- }
- strncpy(listing[n], dp->d_name + match[1].rm_so,
- len);
- listing[n][len] = '\0';
- n++;
- break;
- }
- }
- }
- closedir(d);
- }
- }
- }
- if (listing)
- listing[n] = NULL;
- return listing;
-}
-
-void
-LoaderFreeDirList(char **list)
-{
- FreeStringList(list);
-}
-
-static Bool
-CheckVersion(const char *module, XF86ModuleVersionInfo * data,
- const XF86ModReqInfo * req)
-{
- int vercode[4];
- char verstr[4];
- long ver = data->xf86version;
- MessageType errtype;
-
- xf86Msg(X_INFO, "Module %s: vendor=\"%s\"\n",
- data->modname ? data->modname : "UNKNOWN!",
- data->vendor ? data->vendor : "UNKNOWN!");
-
- /* Check for the different scheme used in XFree86 4.0.x releases:
- * ((((((((major << 7) | minor) << 7) | subminor) << 5) | beta) << 5) | alpha)
- * Since it wasn't used in 4.1.0 or later, limit to versions in the 4.0.x
- * range, which limits the overlap with the new version scheme to conflicts
- * with 6.71.8.764 through 6.72.39.934.
- */
- if ((ver > (4 << 24)) && (ver < ( (4 << 24) + (1 << 17)))) {
- /* 4.0.x and earlier */
- verstr[1] = verstr[3] = 0;
- verstr[2] = (ver & 0x1f) ? (ver & 0x1f) + 'a' - 1 : 0;
- ver >>= 5;
- verstr[0] = (ver & 0x1f) ? (ver & 0x1f) + 'A' - 1 : 0;
- ver >>= 5;
- vercode[2] = ver & 0x7f;
- ver >>= 7;
- vercode[1] = ver & 0x7f;
- ver >>= 7;
- vercode[0] = ver;
- xf86ErrorF("\tcompiled for %d.%d", vercode[0], vercode[1]);
- if (vercode[2] != 0)
- xf86ErrorF(".%d", vercode[2]);
- xf86ErrorF("%s%s, module version = %d.%d.%d\n", verstr, verstr + 2,
- data->majorversion, data->minorversion, data->patchlevel);
- } else {
- vercode[0] = ver / 10000000;
- vercode[1] = (ver / 100000) % 100;
- vercode[2] = (ver / 1000) % 100;
- vercode[3] = ver % 1000;
- xf86ErrorF("\tcompiled for %d.%d.%d", vercode[0], vercode[1],
- vercode[2]);
- if (vercode[3] != 0)
- xf86ErrorF(".%d", vercode[3]);
- xf86ErrorF(", module version = %d.%d.%d\n", data->majorversion,
- data->minorversion, data->patchlevel);
- }
-
- if (data->moduleclass)
- xf86ErrorFVerb(2, "\tModule class: %s\n", data->moduleclass);
-
- ver = -1;
- if (data->abiclass) {
- int abimaj, abimin;
- int vermaj, vermin;
-
- if (!strcmp(data->abiclass, ABI_CLASS_ANSIC))
- ver = LoaderVersionInfo.ansicVersion;
- else if (!strcmp(data->abiclass, ABI_CLASS_VIDEODRV))
- ver = LoaderVersionInfo.videodrvVersion;
- else if (!strcmp(data->abiclass, ABI_CLASS_XINPUT))
- ver = LoaderVersionInfo.xinputVersion;
- else if (!strcmp(data->abiclass, ABI_CLASS_EXTENSION))
- ver = LoaderVersionInfo.extensionVersion;
- else if (!strcmp(data->abiclass, ABI_CLASS_FONT))
- ver = LoaderVersionInfo.fontVersion;
-
- abimaj = GET_ABI_MAJOR(data->abiversion);
- abimin = GET_ABI_MINOR(data->abiversion);
- xf86ErrorFVerb(2, "\tABI class: %s, version %d.%d\n",
- data->abiclass, abimaj, abimin);
- if (ver != -1) {
- vermaj = GET_ABI_MAJOR(ver);
- vermin = GET_ABI_MINOR(ver);
- if (abimaj != vermaj) {
- if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL)
- errtype = X_WARNING;
- else
- errtype = X_ERROR;
- xf86MsgVerb(errtype, 0,
- "module ABI major version (%d) doesn't"
- " match the server's version (%d)\n",
- abimaj, vermaj);
- if (!(LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL))
- return FALSE;
- } else if (abimin > vermin) {
- if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL)
- errtype = X_WARNING;
- else
- errtype = X_ERROR;
- xf86MsgVerb(errtype, 0,
- "module ABI minor version (%d) is "
- "newer than the server's version "
- "(%d)\n", abimin, vermin);
- if (!(LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL))
- return FALSE;
- }
- }
- }
-
- /* Check against requirements that the caller has specified */
- if (req) {
- if (req->majorversion != MAJOR_UNSPEC) {
- if (data->majorversion != req->majorversion) {
- xf86MsgVerb(X_WARNING, 2, "module major version (%d) "
- "doesn't match required major version (%d)\n",
- data->majorversion, req->majorversion);
- return FALSE;
- } else if (req->minorversion != MINOR_UNSPEC) {
- if (data->minorversion < req->minorversion) {
- xf86MsgVerb(X_WARNING, 2, "module minor version (%d) "
- "is less than the required minor version (%d)\n",
- data->minorversion, req->minorversion);
- return FALSE;
- } else if (data->minorversion == req->minorversion &&
- req->patchlevel != PATCH_UNSPEC) {
- if (data->patchlevel < req->patchlevel) {
- xf86MsgVerb(X_WARNING, 2, "module patch level (%d) "
- "is less than the required patch level (%d)\n",
- data->patchlevel, req->patchlevel);
- return FALSE;
- }
- }
- }
- }
- if (req->moduleclass) {
- if (!data->moduleclass ||
- strcmp(req->moduleclass, data->moduleclass)) {
- xf86MsgVerb(X_WARNING, 2, "Module class (%s) doesn't match "
- "the required class (%s)\n",
- data->moduleclass ? data->moduleclass : "<NONE>",
- req->moduleclass);
- return FALSE;
- }
- } else if (req->abiclass != ABI_CLASS_NONE) {
- if (!data->abiclass || strcmp(req->abiclass, data->abiclass)) {
- xf86MsgVerb(X_WARNING, 2, "ABI class (%s) doesn't match the "
- "required ABI class (%s)\n",
- data->abiclass ? data->abiclass : "<NONE>",
- req->abiclass);
- return FALSE;
- }
- }
- if ((req->abiclass != ABI_CLASS_NONE) &&
- req->abiversion != ABI_VERS_UNSPEC) {
- int reqmaj, reqmin, maj, min;
-
- reqmaj = GET_ABI_MAJOR(req->abiversion);
- reqmin = GET_ABI_MINOR(req->abiversion);
- maj = GET_ABI_MAJOR(data->abiversion);
- min = GET_ABI_MINOR(data->abiversion);
- if (maj != reqmaj) {
- xf86MsgVerb(X_WARNING, 2, "ABI major version (%d) doesn't "
- "match the required ABI major version (%d)\n",
- maj, reqmaj);
- return FALSE;
- }
- /* XXX Maybe this should be the other way around? */
- if (min > reqmin) {
- xf86MsgVerb(X_WARNING, 2, "module ABI minor version (%d) "
- "is newer than that available (%d)\n", min, reqmin);
- return FALSE;
- }
- }
- }
- return TRUE;
-}
-
-static ModuleDescPtr
-AddSibling(ModuleDescPtr head, ModuleDescPtr new)
-{
- new->sib = head;
- return new;
-}
-
-pointer
-LoadSubModule(pointer _parent, const char *module,
- const char **subdirlist, const char **patternlist,
- pointer options, const XF86ModReqInfo * modreq,
- int *errmaj, int *errmin)
-{
- ModuleDescPtr submod;
- ModuleDescPtr parent = (ModuleDescPtr)_parent;
-
- xf86MsgVerb(X_INFO, 3, "Loading sub module \"%s\"\n", module);
-
- if (PathIsAbsolute(module)) {
- xf86Msg(X_ERROR,
- "LoadSubModule: Absolute module path not permitted: \"%s\"\n",
- module);
- if (errmaj)
- *errmaj = LDR_BADUSAGE;
- if (errmin)
- *errmin = 0;
- return NULL;
- }
-
- submod = doLoadModule(module, NULL, subdirlist, patternlist, options,
- modreq, errmaj, errmin);
- if (submod && submod != (ModuleDescPtr) 1) {
- parent->child = AddSibling(parent->child, submod);
- submod->parent = parent;
- }
- return submod;
-}
-
-static ModuleDescPtr
-NewModuleDesc(const char *name)
-{
- ModuleDescPtr mdp = calloc(1, sizeof(ModuleDesc));
-
- if (mdp)
- mdp->name = xstrdup(name);
-
- return mdp;
-}
-
-ModuleDescPtr
-DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent)
-{
- ModuleDescPtr ret;
- int errmaj, errmin;
-
- if (!mod)
- return NULL;
-
- ret = NewModuleDesc(mod->name);
- if (ret == NULL)
- return NULL;
-
- if (!(ret->handle = LoaderOpen(mod->path, &errmaj, &errmin))) {
- free(ret);
- return NULL;
- }
-
- ret->SetupProc = mod->SetupProc;
- ret->TearDownProc = mod->TearDownProc;
- ret->TearDownData = NULL;
- ret->child = DuplicateModule(mod->child, ret);
- ret->sib = DuplicateModule(mod->sib, parent);
- ret->parent = parent;
- ret->VersionInfo = mod->VersionInfo;
- ret->path = strdup(mod->path);
-
- return ret;
-}
-
-static const char *compiled_in_modules[] = {
- "ddc",
- "i2c",
- "ramdac",
- NULL
-};
-
-static ModuleDescPtr
-doLoadModule(const char *module, const char *path, const char **subdirlist,
- const char **patternlist, pointer options,
- const XF86ModReqInfo * modreq,
- int *errmaj, int *errmin)
-{
- XF86ModuleData *initdata = NULL;
- char **pathlist = NULL;
- char *found = NULL;
- char *name = NULL;
- char **path_elem = NULL;
- char *p = NULL;
- ModuleDescPtr ret = NULL;
- PatternPtr patterns = NULL;
- int noncanonical = 0;
- char *m = NULL;
- const char **cim;
-
- xf86MsgVerb(X_INFO, 3, "LoadModule: \"%s\"", module);
-
- patterns = InitPatterns(patternlist);
- name = LoaderGetCanonicalName(module, patterns);
- noncanonical = (name && strcmp(module, name) != 0);
- if (noncanonical) {
- xf86ErrorFVerb(3, " (%s)\n", name);
- xf86MsgVerb(X_WARNING, 1,
- "LoadModule: given non-canonical module name \"%s\"\n",
- module);
- m = name;
- } else {
- xf86ErrorFVerb(3, "\n");
- m = (char *)module;
- }
-
- for (cim = compiled_in_modules; *cim; cim++)
- if (!strcmp (m, *cim))
- {
- xf86MsgVerb(X_INFO, 3, "Module \"%s\" already built-in\n", m);
- ret = (ModuleDescPtr) 1;
- goto LoadModule_exit;
- }
-
- if (!name) {
- if (errmaj)
- *errmaj = LDR_BADUSAGE;
- if (errmin)
- *errmin = 0;
- goto LoadModule_fail;
- }
- ret = NewModuleDesc(name);
- if (!ret) {
- if (errmaj)
- *errmaj = LDR_NOMEM;
- if (errmin)
- *errmin = 0;
- goto LoadModule_fail;
- }
-
- pathlist = InitPathList(path);
- if (!pathlist) {
- /* This could be a malloc failure too */
- if (errmaj)
- *errmaj = LDR_BADUSAGE;
- if (errmin)
- *errmin = 1;
- goto LoadModule_fail;
- }
-
- /*
- * if the module name is not a full pathname, we need to
- * check the elements in the path
- */
- if (PathIsAbsolute(module))
- found = xstrdup(module);
- path_elem = pathlist;
- while (!found && *path_elem != NULL) {
- found = FindModule(m, *path_elem, subdirlist, patterns);
- path_elem++;
- /*
- * When the module name isn't the canonical name, search for the
- * former if no match was found for the latter.
- */
- if (!*path_elem && m == name) {
- path_elem = pathlist;
- m = (char *)module;
- }
- }
-
- /*
- * did we find the module?
- */
- if (!found) {
- xf86Msg(X_WARNING, "Warning, couldn't open module %s\n", module);
- if (errmaj)
- *errmaj = LDR_NOENT;
- if (errmin)
- *errmin = 0;
- goto LoadModule_fail;
- }
- ret->handle = LoaderOpen(found, errmaj, errmin);
- if (ret->handle < 0)
- goto LoadModule_fail;
- ret->path = strdup(found);
-
- /* drop any explicit suffix from the module name */
- p = strchr(name, '.');
- if (p)
- *p = '\0';
-
- /*
- * now check if the special data object <modulename>ModuleData is
- * present.
- */
- if (asprintf(&p, "%sModuleData", name) == -1) {
- p = NULL;
- if (errmaj)
- *errmaj = LDR_NOMEM;
- if (errmin)
- *errmin = 0;
- goto LoadModule_fail;
- }
- initdata = LoaderSymbol(p);
- if (initdata) {
- ModuleSetupProc setup;
- ModuleTearDownProc teardown;
- XF86ModuleVersionInfo *vers;
-
- vers = initdata->vers;
- setup = initdata->setup;
- teardown = initdata->teardown;
-
- if (vers) {
- if (!CheckVersion(module, vers, modreq)) {
- if (errmaj)
- *errmaj = LDR_MISMATCH;
- if (errmin)
- *errmin = 0;
- goto LoadModule_fail;
- }
- } else {
- xf86Msg(X_ERROR,
- "LoadModule: Module %s does not supply"
- " version information\n", module);
- if (errmaj)
- *errmaj = LDR_INVALID;
- if (errmin)
- *errmin = 0;
- goto LoadModule_fail;
- }
- if (setup)
- ret->SetupProc = setup;
- if (teardown)
- ret->TearDownProc = teardown;
- ret->VersionInfo = vers;
- } else {
- /* No initdata is OK for external modules */
- if (options == EXTERN_MODULE)
- goto LoadModule_exit;
-
- /* no initdata, fail the load */
- xf86Msg(X_ERROR, "LoadModule: Module %s does not have a %s "
- "data object.\n", module, p);
- if (errmaj)
- *errmaj = LDR_INVALID;
- if (errmin)
- *errmin = 0;
- goto LoadModule_fail;
- }
- if (ret->SetupProc) {
- ret->TearDownData = ret->SetupProc(ret, options, errmaj, errmin);
- if (!ret->TearDownData) {
- goto LoadModule_fail;
- }
- } else if (options) {
- xf86Msg(X_WARNING, "Module Options present, but no SetupProc "
- "available for %s\n", module);
- }
- goto LoadModule_exit;
-
- LoadModule_fail:
- UnloadModule(ret);
- ret = NULL;
-
- LoadModule_exit:
- FreePathList(pathlist);
- FreePatterns(patterns);
- free(found);
- free(name);
- free(p);
-
- return ret;
-}
-
-/*
- * LoadModule: load a module
- *
- * module The module name. Normally this is not a filename but the
- * module's "canonical name. A full pathname is, however,
- * also accepted.
- * path A comma separated list of module directories.
- * subdirlist A NULL terminated list of subdirectories to search. When
- * NULL, the default "stdSubdirs" list is used. The default
- * list is also substituted for entries with value DEFAULT_LIST.
- * patternlist A NULL terminated list of regular expressions used to find
- * module filenames. Each regex should contain exactly one
- * subexpression that corresponds to the canonical module name.
- * When NULL, the default "stdPatterns" list is used. The
- * default list is also substituted for entries with value
- * DEFAULT_LIST.
- * options A NULL terminated list of Options that are passed to the
- * module's SetupProc function.
- * modreq An optional XF86ModReqInfo* containing
- * version/ABI/vendor-ABI requirements to check for when
- * loading the module. The following fields of the
- * XF86ModReqInfo struct are checked:
- * majorversion - must match the module's majorversion exactly
- * minorversion - the module's minorversion must be >= this
- * patchlevel - the module's minorversion.patchlevel must be
- * >= this. Patchlevel is ignored when
- * minorversion is not set.
- * abiclass - (string) must match the module's abiclass
- * abiversion - must be consistent with the module's
- * abiversion (major equal, minor no older)
- * moduleclass - string must match the module's moduleclass
- * string
- * "don't care" values are ~0 for numbers, and NULL for strings
- * errmaj Major error return.
- * errmin Minor error return.
- *
- */
-ModuleDescPtr
-LoadModule(const char *module, const char *path, const char **subdirlist,
- const char **patternlist, pointer options,
- const XF86ModReqInfo * modreq, int *errmaj, int *errmin)
-{
- return doLoadModule(module, path, subdirlist, patternlist, options,
- modreq, errmaj, errmin);
-}
-
-void
-UnloadModule(pointer mod)
-{
- UnloadModuleOrDriver((ModuleDescPtr)mod);
-}
-
-static void
-UnloadModuleOrDriver(ModuleDescPtr mod)
-{
- if (mod == (ModuleDescPtr) 1)
- return;
-
- if (mod == NULL || mod->name == NULL)
- return;
-
- xf86MsgVerb(X_INFO, 3, "UnloadModule: \"%s\"\n", mod->name);
-
- if ((mod->TearDownProc) && (mod->TearDownData))
- mod->TearDownProc(mod->TearDownData);
- LoaderUnload(mod->name, mod->handle);
-
- if (mod->child)
- UnloadModuleOrDriver(mod->child);
- if (mod->sib)
- UnloadModuleOrDriver(mod->sib);
- free(mod->path);
- free(mod->name);
- free(mod);
-}
-
-void
-UnloadSubModule(pointer _mod)
-{
- ModuleDescPtr mod = (ModuleDescPtr)_mod;
-
- if (mod == NULL || mod->name == NULL)
- return;
-
- xf86MsgVerb(X_INFO, 3, "UnloadSubModule: \"%s\"\n", mod->name);
-
- if ((mod->TearDownProc) && (mod->TearDownData))
- mod->TearDownProc(mod->TearDownData);
- LoaderUnload(mod->name, mod->handle);
-
- RemoveChild(mod);
-
- if (mod->child)
- UnloadModuleOrDriver(mod->child);
-
- free(mod->path);
- free(mod->name);
- free(mod);
-}
-
-static void
-RemoveChild(ModuleDescPtr child)
-{
- ModuleDescPtr mdp;
- ModuleDescPtr prevsib;
- ModuleDescPtr parent;
-
- if (!child->parent)
- return;
-
- parent = child->parent;
- if (parent->child == child) {
- parent->child = child->sib;
- return;
- }
-
- prevsib = parent->child;
- mdp = prevsib->sib;
- while (mdp && mdp != child) {
- prevsib = mdp;
- mdp = mdp->sib;
- }
- if (mdp == child)
- prevsib->sib = child->sib;
- return;
-}
-
-void
-LoaderErrorMsg(const char *name, const char *modname, int errmaj, int errmin)
-{
- const char *msg;
- MessageType type = X_ERROR;
-
- switch (errmaj) {
- case LDR_NOERROR:
- msg = "no error";
- break;
- case LDR_NOMEM:
- msg = "out of memory";
- break;
- case LDR_NOENT:
- msg = "module does not exist";
- break;
- case LDR_NOSUBENT:
- msg = "a required submodule could not be loaded";
- break;
- case LDR_NOSPACE:
- msg = "too many modules";
- break;
- case LDR_NOMODOPEN:
- msg = "open failed";
- break;
- case LDR_UNKTYPE:
- msg = "unknown module type";
- break;
- case LDR_NOLOAD:
- msg = "loader failed";
- break;
- case LDR_ONCEONLY:
- msg = "already loaded";
- type = X_INFO;
- break;
- case LDR_NOPORTOPEN:
- msg = "port open failed";
- break;
- case LDR_NOHARDWARE:
- msg = "no hardware found";
- break;
- case LDR_MISMATCH:
- msg = "module requirement mismatch";
- break;
- case LDR_BADUSAGE:
- msg = "invalid argument(s) to LoadModule()";
- break;
- case LDR_INVALID:
- msg = "invalid module";
- break;
- case LDR_BADOS:
- msg = "module doesn't support this OS";
- break;
- case LDR_MODSPECIFIC:
- msg = "module-specific error";
- break;
- default:
- msg = "unknown error";
- }
- if (name)
- xf86Msg(type, "%s: Failed to load module \"%s\" (%s, %d)\n",
- name, modname, msg, errmin);
- else
- xf86Msg(type, "Failed to load module \"%s\" (%s, %d)\n",
- modname, msg, errmin);
-}
-
-/* Given a module path or file name, return the module's canonical name */
-static char *
-LoaderGetCanonicalName(const char *modname, PatternPtr patterns)
-{
- char *str;
- const char *s;
- int len;
- PatternPtr p;
- regmatch_t match[2];
-
- /* Strip off any leading path */
- s = strrchr(modname, '/');
- if (s == NULL)
- s = modname;
- else
- s++;
-
- /* Find the first regex that is matched */
- for (p = patterns; p->pattern; p++)
- if (regexec(&p->rex, s, 2, match, 0) == 0 && match[1].rm_so != -1) {
- len = match[1].rm_eo - match[1].rm_so;
- str = malloc(len + 1);
- if (!str)
- return NULL;
- strncpy(str, s + match[1].rm_so, len);
- str[len] = '\0';
- return str;
- }
-
- /* If there is no match, return the whole name minus the leading path */
- return strdup(s);
-}
-
-/*
- * Return the module version information.
- */
-unsigned long
-LoaderGetModuleVersion(ModuleDescPtr mod)
-{
- if (!mod || mod == (ModuleDescPtr) 1 || !mod->VersionInfo)
- return 0;
-
- return MODULE_VERSION_NUMERIC(mod->VersionInfo->majorversion,
- mod->VersionInfo->minorversion,
- mod->VersionInfo->patchlevel);
-}
+/*
+ * Copyright 1995-1998 by Metro Link, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Metro Link, Inc. not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Metro Link, Inc. makes no
+ * representations about the suitability of this software for any purpose.
+ * It is provided "as is" without express or implied warranty.
+ *
+ * METRO LINK, INC. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL METRO LINK, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+/*
+ * Copyright (c) 1997-2002 by The XFree86 Project, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+ * OTHER DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name of the copyright holder(s)
+ * and author(s) shall not be used in advertising or otherwise to promote
+ * the sale, use or other dealings in this Software without prior written
+ * authorization from the copyright holder(s) and author(s).
+ */
+
+#ifdef HAVE_XORG_CONFIG_H
+#include <xorg-config.h>
+#endif
+
+#include "os.h"
+/* For stat() and related stuff */
+#define NO_OSLIB_PROTOTYPES
+#include "xf86_OSlib.h"
+#define LOADERDECLARATIONS
+#include "loaderProcs.h"
+#include "misc.h"
+#include "xf86.h"
+#include "xf86Priv.h"
+#include "xf86Xinput.h"
+#include "loader.h"
+#include "xf86Optrec.h"
+
+#include <sys/types.h>
+#include <regex.h>
+#include <dirent.h>
+#include <limits.h>
+
+typedef struct _pattern {
+ const char *pattern;
+ regex_t rex;
+} PatternRec, *PatternPtr;
+
+/* Prototypes for static functions */
+static char *FindModule(const char *, const char *, const char **,
+ PatternPtr);
+static Bool CheckVersion(const char *, XF86ModuleVersionInfo *,
+ const XF86ModReqInfo *);
+static void UnloadModuleOrDriver(ModuleDescPtr mod);
+static char *LoaderGetCanonicalName(const char *, PatternPtr);
+static void RemoveChild(ModuleDescPtr);
+static ModuleDescPtr doLoadModule(const char *, const char *, const char **,
+ const char **, pointer,
+ const XF86ModReqInfo *, int *, int *);
+
+const ModuleVersions LoaderVersionInfo = {
+ XORG_VERSION_CURRENT,
+ ABI_ANSIC_VERSION,
+ ABI_VIDEODRV_VERSION,
+ ABI_XINPUT_VERSION,
+ ABI_EXTENSION_VERSION,
+ ABI_FONT_VERSION
+};
+
+static void
+FreeStringList(char **paths)
+{
+ char **p;
+
+ if (!paths)
+ return;
+
+ for (p = paths; *p; p++)
+ free(*p);
+
+ free(paths);
+}
+
+static char **defaultPathList = NULL;
+
+static Bool
+PathIsAbsolute(const char *path)
+{
+ return *path == '/';
+}
+
+/*
+ * Convert a comma-separated path into a NULL-terminated array of path
+ * elements, rejecting any that are not full absolute paths, and appending
+ * a '/' when it isn't already present.
+ */
+static char **
+InitPathList(const char *path)
+{
+ char *fullpath = NULL;
+ char *elem = NULL;
+ char **list = NULL, **save = NULL;
+ int len;
+ int addslash;
+ int n = 0;
+
+ if (!path)
+ return defaultPathList;
+
+ fullpath = strdup(path);
+ if (!fullpath)
+ return NULL;
+ elem = strtok(fullpath, ",");
+ while (elem) {
+ if (PathIsAbsolute(elem))
+ {
+ len = strlen(elem);
+ addslash = (elem[len - 1] != '/');
+ if (addslash)
+ len++;
+ save = list;
+ list = realloc(list, (n + 2) * sizeof(char *));
+ if (!list) {
+ if (save) {
+ save[n] = NULL;
+ FreeStringList(save);
+ }
+ free(fullpath);
+ return NULL;
+ }
+ list[n] = malloc(len + 1);
+ if (!list[n]) {
+ FreeStringList(list);
+ free(fullpath);
+ return NULL;
+ }
+ strcpy(list[n], elem);
+ if (addslash) {
+ list[n][len - 1] = '/';
+ list[n][len] = '\0';
+ }
+ n++;
+ }
+ elem = strtok(NULL, ",");
+ }
+ if (list)
+ list[n] = NULL;
+ free(fullpath);
+ return list;
+}
+
+static void
+FreePathList(char **pathlist)
+{
+ if (pathlist && pathlist != defaultPathList)
+ FreeStringList(pathlist);
+}
+
+void
+LoaderSetPath(const char *path)
+{
+ if (!path)
+ return;
+
+ defaultPathList = InitPathList(path);
+}
+
+/* Standard set of module subdirectories to search, in order of preference */
+static const char *stdSubdirs[] = {
+ "",
+ "input/",
+ "drivers/",
+ "multimedia/",
+ "extensions/",
+ "internal/",
+ NULL
+};
+
+/*
+ * Standard set of module name patterns to check, in order of preference
+ * These are regular expressions (suitable for use with POSIX regex(3)).
+ *
+ * This list assumes that you're an ELFish platform and therefore your
+ * shared libraries are named something.so. If we're ever nuts enough
+ * to port this DDX to, say, Darwin, we'll need to fix this.
+ */
+static PatternRec stdPatterns[] = {
+ {"^lib(.*)\\.so$",},
+ {"(.*)_drv\\.so$",},
+ {"(.*)\\.so$",},
+ {NULL,}
+};
+
+static PatternPtr
+InitPatterns(const char **patternlist)
+{
+ char errmsg[80];
+ int i, e;
+ PatternPtr patterns = NULL;
+ PatternPtr p = NULL;
+ static int firstTime = 1;
+ const char **s;
+
+ if (firstTime) {
+ /* precompile stdPatterns */
+ firstTime = 0;
+ for (p = stdPatterns; p->pattern; p++)
+ if ((e = regcomp(&p->rex, p->pattern, REG_EXTENDED)) != 0) {
+ regerror(e, &p->rex, errmsg, sizeof(errmsg));
+ FatalError("InitPatterns: regcomp error for `%s': %s\n",
+ p->pattern, errmsg);
+ }
+ }
+
+ if (patternlist) {
+ for (i = 0, s = patternlist; *s; i++, s++)
+ if (*s == DEFAULT_LIST)
+ i += sizeof(stdPatterns) / sizeof(stdPatterns[0]) - 1 - 1;
+ patterns = malloc((i + 1) * sizeof(PatternRec));
+ if (!patterns) {
+ return NULL;
+ }
+ for (i = 0, s = patternlist; *s; i++, s++)
+ if (*s != DEFAULT_LIST) {
+ p = patterns + i;
+ p->pattern = *s;
+ if ((e = regcomp(&p->rex, p->pattern, REG_EXTENDED)) != 0) {
+ regerror(e, &p->rex, errmsg, sizeof(errmsg));
+ ErrorF("InitPatterns: regcomp error for `%s': %s\n",
+ p->pattern, errmsg);
+ i--;
+ }
+ } else {
+ for (p = stdPatterns; p->pattern; p++, i++)
+ patterns[i] = *p;
+ if (p != stdPatterns)
+ i--;
+ }
+ patterns[i].pattern = NULL;
+ } else
+ patterns = stdPatterns;
+ return patterns;
+}
+
+static void
+FreePatterns(PatternPtr patterns)
+{
+ if (patterns && patterns != stdPatterns)
+ free(patterns);
+}
+
+static const char **
+InitSubdirs(const char **subdirlist)
+{
+ int i;
+ const char **tmp_subdirlist = NULL;
+ char **subdirs = NULL;
+ const char **s, **stmp = NULL;
+ const char *osname;
+ const char *slash;
+ int oslen = 0, len;
+ Bool indefault;
+
+ if (subdirlist == NULL) {
+ subdirlist = tmp_subdirlist = malloc(2 * sizeof(char *));
+ if (subdirlist == NULL)
+ return NULL;
+ subdirlist[0] = DEFAULT_LIST;
+ subdirlist[1] = NULL;
+ }
+
+ LoaderGetOS(&osname, NULL, NULL, NULL);
+ oslen = strlen(osname);
+
+ {
+ /* Count number of entries and check for invalid paths */
+ for (i = 0, s = subdirlist; *s; i++, s++) {
+ if (*s == DEFAULT_LIST) {
+ i += sizeof(stdSubdirs) / sizeof(stdSubdirs[0]) - 1 - 1;
+ } else {
+ /*
+ * Path validity check. Don't allow absolute paths, or
+ * paths containing "..". To catch absolute paths on
+ * platforms that use driver letters, don't allow the ':'
+ * character to appear at all.
+ */
+ if (**s == '/' || **s == '\\' || strchr(*s, ':') ||
+ strstr(*s, "..")) {
+ xf86Msg(X_ERROR, "InitSubdirs: Bad subdir: \"%s\"\n", *s);
+ free(tmp_subdirlist);
+ return NULL;
+ }
+ }
+ }
+ subdirs = malloc((i * 2 + 1) * sizeof(char *));
+ if (!subdirs) {
+ free(tmp_subdirlist);
+ return NULL;
+ }
+ i = 0;
+ s = subdirlist;
+ indefault = FALSE;
+ while (*s) {
+ if (*s == DEFAULT_LIST) {
+ /* Divert to the default list */
+ indefault = TRUE;
+ stmp = ++s;
+ s = stdSubdirs;
+ }
+ len = strlen(*s);
+ if (**s && (*s)[len - 1] != '/') {
+ slash = "/";
+ len++;
+ } else
+ slash = "";
+ len += oslen + 2;
+ if (!(subdirs[i] = malloc(len))) {
+ while (--i >= 0)
+ free(subdirs[i]);
+ free(subdirs);
+ free(tmp_subdirlist);
+ return NULL;
+ }
+ /* tack on the OS name */
+ sprintf(subdirs[i], "%s%s%s/", *s, slash, osname);
+ i++;
+ /* path as given */
+ subdirs[i] = strdup(*s);
+ i++;
+ s++;
+ if (indefault && !s) {
+ /* revert back to the main list */
+ indefault = FALSE;
+ s = stmp;
+ }
+ }
+ subdirs[i] = NULL;
+ }
+ free(tmp_subdirlist);
+ return (const char **)subdirs;
+}
+
+static void
+FreeSubdirs(const char **subdirs)
+{
+ const char **s;
+
+ if (subdirs) {
+ for (s = subdirs; *s; s++)
+ free((char *)*s);
+ free(subdirs);
+ }
+}
+
+static char *
+FindModuleInSubdir(const char *dirpath, const char *module)
+{
+ struct dirent *direntry = NULL;
+ DIR *dir = NULL;
+ char *ret = NULL, tmpBuf[PATH_MAX];
+ struct stat stat_buf;
+
+ dir = opendir(dirpath);
+ if (!dir)
+ return NULL;
+
+ while ((direntry = readdir(dir))) {
+ if (direntry->d_name[0] == '.')
+ continue;
+ snprintf(tmpBuf, PATH_MAX, "%s%s/", dirpath, direntry->d_name);
+ /* the stat with the appended / fails for normal files,
+ and works for sub dirs fine, looks a bit strange in strace
+ but does seem to work */
+ if ((stat(tmpBuf, &stat_buf) == 0) && S_ISDIR(stat_buf.st_mode)) {
+ if ((ret = FindModuleInSubdir(tmpBuf, module)))
+ break;
+ continue;
+ }
+
+ snprintf(tmpBuf, PATH_MAX, "lib%s.so", module);
+ if (strcmp(direntry->d_name, tmpBuf) == 0) {
+ if (asprintf(&ret, "%s%s", dirpath, tmpBuf) == -1)
+ ret = NULL;
+ break;
+ }
+
+ snprintf(tmpBuf, PATH_MAX, "%s_drv.so", module);
+ if (strcmp(direntry->d_name, tmpBuf) == 0) {
+ if (asprintf(&ret, "%s%s", dirpath, tmpBuf) == -1)
+ ret = NULL;
+ break;
+ }
+
+ snprintf(tmpBuf, PATH_MAX, "%s.so", module);
+ if (strcmp(direntry->d_name, tmpBuf) == 0) {
+ if (asprintf(&ret, "%s%s", dirpath, tmpBuf) == -1)
+ ret = NULL;
+ break;
+ }
+ }
+
+ closedir(dir);
+ return ret;
+}
+
+static char *
+FindModule(const char *module, const char *dirname, const char **subdirlist,
+ PatternPtr patterns)
+{
+ char buf[PATH_MAX + 1];
+ char *dirpath = NULL;
+ char *name = NULL;
+ int dirlen;
+ const char **subdirs = NULL;
+ const char **s;
+
+ dirpath = (char *)dirname;
+ if (strlen(dirpath) > PATH_MAX)
+ return NULL;
+
+ subdirs = InitSubdirs(subdirlist);
+ if (!subdirs)
+ return NULL;
+
+ for (s = subdirs; *s; s++) {
+ if ((dirlen = strlen(dirpath) + strlen(*s)) > PATH_MAX)
+ continue;
+ strcpy(buf, dirpath);
+ strcat(buf, *s);
+ if ((name = FindModuleInSubdir(buf, module)))
+ break;
+ }
+
+ FreeSubdirs(subdirs);
+ if (dirpath != dirname)
+ free(dirpath);
+
+ return name;
+}
+
+char **
+LoaderListDirs(const char **subdirlist, const char **patternlist)
+{
+ char buf[PATH_MAX + 1];
+ char **pathlist;
+ char **elem;
+ const char **subdirs;
+ const char **s;
+ PatternPtr patterns;
+ PatternPtr p;
+ DIR *d;
+ struct dirent *dp;
+ regmatch_t match[2];
+ struct stat stat_buf;
+ int len, dirlen;
+ char *fp;
+ char **listing = NULL;
+ char **save;
+ int n = 0;
+
+ if (!(pathlist = InitPathList(NULL)))
+ return NULL;
+ if (!(subdirs = InitSubdirs(subdirlist))) {
+ FreePathList(pathlist);
+ return NULL;
+ }
+ if (!(patterns = InitPatterns(patternlist))) {
+ FreePathList(pathlist);
+ FreeSubdirs(subdirs);
+ return NULL;
+ }
+
+ for (elem = pathlist; *elem; elem++) {
+ for (s = subdirs; *s; s++) {
+ if ((dirlen = strlen(*elem) + strlen(*s)) > PATH_MAX)
+ continue;
+ strcpy(buf, *elem);
+ strcat(buf, *s);
+ fp = buf + dirlen;
+ if (stat(buf, &stat_buf) == 0 && S_ISDIR(stat_buf.st_mode) &&
+ (d = opendir(buf))) {
+ if (buf[dirlen - 1] != '/') {
+ buf[dirlen++] = '/';
+ fp++;
+ }
+ while ((dp = readdir(d))) {
+ if (dirlen + strlen(dp->d_name) > PATH_MAX)
+ continue;
+ strcpy(fp, dp->d_name);
+ if (!(stat(buf, &stat_buf) == 0 &&
+ S_ISREG(stat_buf.st_mode)))
+ continue;
+ for (p = patterns; p->pattern; p++) {
+ if (regexec(&p->rex, dp->d_name, 2, match, 0) == 0 &&
+ match[1].rm_so != -1) {
+ len = match[1].rm_eo - match[1].rm_so;
+ save = listing;
+ listing = realloc(listing,
+ (n + 2) * sizeof(char *));
+ if (!listing) {
+ if (save) {
+ save[n] = NULL;
+ FreeStringList(save);
+ }
+ FreePathList(pathlist);
+ FreeSubdirs(subdirs);
+ FreePatterns(patterns);
+ closedir(d);
+ return NULL;
+ }
+ listing[n] = malloc(len + 1);
+ if (!listing[n]) {
+ FreeStringList(listing);
+ FreePathList(pathlist);
+ FreeSubdirs(subdirs);
+ FreePatterns(patterns);
+ closedir(d);
+ return NULL;
+ }
+ strncpy(listing[n], dp->d_name + match[1].rm_so,
+ len);
+ listing[n][len] = '\0';
+ n++;
+ break;
+ }
+ }
+ }
+ closedir(d);
+ }
+ }
+ }
+ if (listing)
+ listing[n] = NULL;
+
+ FreePathList(pathlist);
+ FreeSubdirs(subdirs);
+ FreePatterns(patterns);
+ return listing;
+}
+
+void
+LoaderFreeDirList(char **list)
+{
+ FreeStringList(list);
+}
+
+static Bool
+CheckVersion(const char *module, XF86ModuleVersionInfo * data,
+ const XF86ModReqInfo * req)
+{
+ int vercode[4];
+ char verstr[4];
+ long ver = data->xf86version;
+ MessageType errtype;
+
+ xf86Msg(X_INFO, "Module %s: vendor=\"%s\"\n",
+ data->modname ? data->modname : "UNKNOWN!",
+ data->vendor ? data->vendor : "UNKNOWN!");
+
+ /* Check for the different scheme used in XFree86 4.0.x releases:
+ * ((((((((major << 7) | minor) << 7) | subminor) << 5) | beta) << 5) | alpha)
+ * Since it wasn't used in 4.1.0 or later, limit to versions in the 4.0.x
+ * range, which limits the overlap with the new version scheme to conflicts
+ * with 6.71.8.764 through 6.72.39.934.
+ */
+ if ((ver > (4 << 24)) && (ver < ( (4 << 24) + (1 << 17)))) {
+ /* 4.0.x and earlier */
+ verstr[1] = verstr[3] = 0;
+ verstr[2] = (ver & 0x1f) ? (ver & 0x1f) + 'a' - 1 : 0;
+ ver >>= 5;
+ verstr[0] = (ver & 0x1f) ? (ver & 0x1f) + 'A' - 1 : 0;
+ ver >>= 5;
+ vercode[2] = ver & 0x7f;
+ ver >>= 7;
+ vercode[1] = ver & 0x7f;
+ ver >>= 7;
+ vercode[0] = ver;
+ xf86ErrorF("\tcompiled for %d.%d", vercode[0], vercode[1]);
+ if (vercode[2] != 0)
+ xf86ErrorF(".%d", vercode[2]);
+ xf86ErrorF("%s%s, module version = %d.%d.%d\n", verstr, verstr + 2,
+ data->majorversion, data->minorversion, data->patchlevel);
+ } else {
+ vercode[0] = ver / 10000000;
+ vercode[1] = (ver / 100000) % 100;
+ vercode[2] = (ver / 1000) % 100;
+ vercode[3] = ver % 1000;
+ xf86ErrorF("\tcompiled for %d.%d.%d", vercode[0], vercode[1],
+ vercode[2]);
+ if (vercode[3] != 0)
+ xf86ErrorF(".%d", vercode[3]);
+ xf86ErrorF(", module version = %d.%d.%d\n", data->majorversion,
+ data->minorversion, data->patchlevel);
+ }
+
+ if (data->moduleclass)
+ xf86ErrorFVerb(2, "\tModule class: %s\n", data->moduleclass);
+
+ ver = -1;
+ if (data->abiclass) {
+ int abimaj, abimin;
+ int vermaj, vermin;
+
+ if (!strcmp(data->abiclass, ABI_CLASS_ANSIC))
+ ver = LoaderVersionInfo.ansicVersion;
+ else if (!strcmp(data->abiclass, ABI_CLASS_VIDEODRV))
+ ver = LoaderVersionInfo.videodrvVersion;
+ else if (!strcmp(data->abiclass, ABI_CLASS_XINPUT))
+ ver = LoaderVersionInfo.xinputVersion;
+ else if (!strcmp(data->abiclass, ABI_CLASS_EXTENSION))
+ ver = LoaderVersionInfo.extensionVersion;
+ else if (!strcmp(data->abiclass, ABI_CLASS_FONT))
+ ver = LoaderVersionInfo.fontVersion;
+
+ abimaj = GET_ABI_MAJOR(data->abiversion);
+ abimin = GET_ABI_MINOR(data->abiversion);
+ xf86ErrorFVerb(2, "\tABI class: %s, version %d.%d\n",
+ data->abiclass, abimaj, abimin);
+ if (ver != -1) {
+ vermaj = GET_ABI_MAJOR(ver);
+ vermin = GET_ABI_MINOR(ver);
+ if (abimaj != vermaj) {
+ if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL)
+ errtype = X_WARNING;
+ else
+ errtype = X_ERROR;
+ xf86MsgVerb(errtype, 0,
+ "module ABI major version (%d) doesn't"
+ " match the server's version (%d)\n",
+ abimaj, vermaj);
+ if (!(LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL))
+ return FALSE;
+ } else if (abimin > vermin) {
+ if (LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL)
+ errtype = X_WARNING;
+ else
+ errtype = X_ERROR;
+ xf86MsgVerb(errtype, 0,
+ "module ABI minor version (%d) is "
+ "newer than the server's version "
+ "(%d)\n", abimin, vermin);
+ if (!(LoaderOptions & LDR_OPT_ABI_MISMATCH_NONFATAL))
+ return FALSE;
+ }
+ }
+ }
+
+ /* Check against requirements that the caller has specified */
+ if (req) {
+ if (req->majorversion != MAJOR_UNSPEC) {
+ if (data->majorversion != req->majorversion) {
+ xf86MsgVerb(X_WARNING, 2, "module major version (%d) "
+ "doesn't match required major version (%d)\n",
+ data->majorversion, req->majorversion);
+ return FALSE;
+ } else if (req->minorversion != MINOR_UNSPEC) {
+ if (data->minorversion < req->minorversion) {
+ xf86MsgVerb(X_WARNING, 2, "module minor version (%d) "
+ "is less than the required minor version (%d)\n",
+ data->minorversion, req->minorversion);
+ return FALSE;
+ } else if (data->minorversion == req->minorversion &&
+ req->patchlevel != PATCH_UNSPEC) {
+ if (data->patchlevel < req->patchlevel) {
+ xf86MsgVerb(X_WARNING, 2, "module patch level (%d) "
+ "is less than the required patch level (%d)\n",
+ data->patchlevel, req->patchlevel);
+ return FALSE;
+ }
+ }
+ }
+ }
+ if (req->moduleclass) {
+ if (!data->moduleclass ||
+ strcmp(req->moduleclass, data->moduleclass)) {
+ xf86MsgVerb(X_WARNING, 2, "Module class (%s) doesn't match "
+ "the required class (%s)\n",
+ data->moduleclass ? data->moduleclass : "<NONE>",
+ req->moduleclass);
+ return FALSE;
+ }
+ } else if (req->abiclass != ABI_CLASS_NONE) {
+ if (!data->abiclass || strcmp(req->abiclass, data->abiclass)) {
+ xf86MsgVerb(X_WARNING, 2, "ABI class (%s) doesn't match the "
+ "required ABI class (%s)\n",
+ data->abiclass ? data->abiclass : "<NONE>",
+ req->abiclass);
+ return FALSE;
+ }
+ }
+ if ((req->abiclass != ABI_CLASS_NONE) &&
+ req->abiversion != ABI_VERS_UNSPEC) {
+ int reqmaj, reqmin, maj, min;
+
+ reqmaj = GET_ABI_MAJOR(req->abiversion);
+ reqmin = GET_ABI_MINOR(req->abiversion);
+ maj = GET_ABI_MAJOR(data->abiversion);
+ min = GET_ABI_MINOR(data->abiversion);
+ if (maj != reqmaj) {
+ xf86MsgVerb(X_WARNING, 2, "ABI major version (%d) doesn't "
+ "match the required ABI major version (%d)\n",
+ maj, reqmaj);
+ return FALSE;
+ }
+ /* XXX Maybe this should be the other way around? */
+ if (min > reqmin) {
+ xf86MsgVerb(X_WARNING, 2, "module ABI minor version (%d) "
+ "is newer than that available (%d)\n", min, reqmin);
+ return FALSE;
+ }
+ }
+ }
+ return TRUE;
+}
+
+static ModuleDescPtr
+AddSibling(ModuleDescPtr head, ModuleDescPtr new)
+{
+ new->sib = head;
+ return new;
+}
+
+pointer
+LoadSubModule(pointer _parent, const char *module,
+ const char **subdirlist, const char **patternlist,
+ pointer options, const XF86ModReqInfo * modreq,
+ int *errmaj, int *errmin)
+{
+ ModuleDescPtr submod;
+ ModuleDescPtr parent = (ModuleDescPtr)_parent;
+
+ xf86MsgVerb(X_INFO, 3, "Loading sub module \"%s\"\n", module);
+
+ if (PathIsAbsolute(module)) {
+ xf86Msg(X_ERROR,
+ "LoadSubModule: Absolute module path not permitted: \"%s\"\n",
+ module);
+ if (errmaj)
+ *errmaj = LDR_BADUSAGE;
+ if (errmin)
+ *errmin = 0;
+ return NULL;
+ }
+
+ submod = doLoadModule(module, NULL, subdirlist, patternlist, options,
+ modreq, errmaj, errmin);
+ if (submod && submod != (ModuleDescPtr) 1) {
+ parent->child = AddSibling(parent->child, submod);
+ submod->parent = parent;
+ }
+ return submod;
+}
+
+static ModuleDescPtr
+NewModuleDesc(const char *name)
+{
+ ModuleDescPtr mdp = calloc(1, sizeof(ModuleDesc));
+
+ if (mdp)
+ mdp->name = xstrdup(name);
+
+ return mdp;
+}
+
+ModuleDescPtr
+DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent)
+{
+ ModuleDescPtr ret;
+ int errmaj, errmin;
+
+ if (!mod)
+ return NULL;
+
+ ret = NewModuleDesc(mod->name);
+ if (ret == NULL)
+ return NULL;
+
+ if (!(ret->handle = LoaderOpen(mod->path, &errmaj, &errmin))) {
+ free(ret);
+ return NULL;
+ }
+
+ ret->SetupProc = mod->SetupProc;
+ ret->TearDownProc = mod->TearDownProc;
+ ret->TearDownData = NULL;
+ ret->child = DuplicateModule(mod->child, ret);
+ ret->sib = DuplicateModule(mod->sib, parent);
+ ret->parent = parent;
+ ret->VersionInfo = mod->VersionInfo;
+ ret->path = strdup(mod->path);
+
+ return ret;
+}
+
+static const char *compiled_in_modules[] = {
+ "ddc",
+ "i2c",
+ "ramdac",
+ NULL
+};
+
+static ModuleDescPtr
+doLoadModule(const char *module, const char *path, const char **subdirlist,
+ const char **patternlist, pointer options,
+ const XF86ModReqInfo * modreq,
+ int *errmaj, int *errmin)
+{
+ XF86ModuleData *initdata = NULL;
+ char **pathlist = NULL;
+ char *found = NULL;
+ char *name = NULL;
+ char **path_elem = NULL;
+ char *p = NULL;
+ ModuleDescPtr ret = NULL;
+ PatternPtr patterns = NULL;
+ int noncanonical = 0;
+ char *m = NULL;
+ const char **cim;
+
+ xf86MsgVerb(X_INFO, 3, "LoadModule: \"%s\"", module);
+
+ patterns = InitPatterns(patternlist);
+ name = LoaderGetCanonicalName(module, patterns);
+ noncanonical = (name && strcmp(module, name) != 0);
+ if (noncanonical) {
+ xf86ErrorFVerb(3, " (%s)\n", name);
+ xf86MsgVerb(X_WARNING, 1,
+ "LoadModule: given non-canonical module name \"%s\"\n",
+ module);
+ m = name;
+ } else {
+ xf86ErrorFVerb(3, "\n");
+ m = (char *)module;
+ }
+
+ for (cim = compiled_in_modules; *cim; cim++)
+ if (!strcmp (m, *cim))
+ {
+ xf86MsgVerb(X_INFO, 3, "Module \"%s\" already built-in\n", m);
+ ret = (ModuleDescPtr) 1;
+ goto LoadModule_exit;
+ }
+
+ if (!name) {
+ if (errmaj)
+ *errmaj = LDR_BADUSAGE;
+ if (errmin)
+ *errmin = 0;
+ goto LoadModule_fail;
+ }
+ ret = NewModuleDesc(name);
+ if (!ret) {
+ if (errmaj)
+ *errmaj = LDR_NOMEM;
+ if (errmin)
+ *errmin = 0;
+ goto LoadModule_fail;
+ }
+
+ pathlist = InitPathList(path);
+ if (!pathlist) {
+ /* This could be a malloc failure too */
+ if (errmaj)
+ *errmaj = LDR_BADUSAGE;
+ if (errmin)
+ *errmin = 1;
+ goto LoadModule_fail;
+ }
+
+ /*
+ * if the module name is not a full pathname, we need to
+ * check the elements in the path
+ */
+ if (PathIsAbsolute(module))
+ found = xstrdup(module);
+ path_elem = pathlist;
+ while (!found && *path_elem != NULL) {
+ found = FindModule(m, *path_elem, subdirlist, patterns);
+ path_elem++;
+ /*
+ * When the module name isn't the canonical name, search for the
+ * former if no match was found for the latter.
+ */
+ if (!*path_elem && m == name) {
+ path_elem = pathlist;
+ m = (char *)module;
+ }
+ }
+
+ /*
+ * did we find the module?
+ */
+ if (!found) {
+ xf86Msg(X_WARNING, "Warning, couldn't open module %s\n", module);
+ if (errmaj)
+ *errmaj = LDR_NOENT;
+ if (errmin)
+ *errmin = 0;
+ goto LoadModule_fail;
+ }
+ ret->handle = LoaderOpen(found, errmaj, errmin);
+ if (ret->handle < 0)
+ goto LoadModule_fail;
+ ret->path = strdup(found);
+
+ /* drop any explicit suffix from the module name */
+ p = strchr(name, '.');
+ if (p)
+ *p = '\0';
+
+ /*
+ * now check if the special data object <modulename>ModuleData is
+ * present.
+ */
+ if (asprintf(&p, "%sModuleData", name) == -1) {
+ p = NULL;
+ if (errmaj)
+ *errmaj = LDR_NOMEM;
+ if (errmin)
+ *errmin = 0;
+ goto LoadModule_fail;
+ }
+ initdata = LoaderSymbol(p);
+ if (initdata) {
+ ModuleSetupProc setup;
+ ModuleTearDownProc teardown;
+ XF86ModuleVersionInfo *vers;
+
+ vers = initdata->vers;
+ setup = initdata->setup;
+ teardown = initdata->teardown;
+
+ if (vers) {
+ if (!CheckVersion(module, vers, modreq)) {
+ if (errmaj)
+ *errmaj = LDR_MISMATCH;
+ if (errmin)
+ *errmin = 0;
+ goto LoadModule_fail;
+ }
+ } else {
+ xf86Msg(X_ERROR,
+ "LoadModule: Module %s does not supply"
+ " version information\n", module);
+ if (errmaj)
+ *errmaj = LDR_INVALID;
+ if (errmin)
+ *errmin = 0;
+ goto LoadModule_fail;
+ }
+ if (setup)
+ ret->SetupProc = setup;
+ if (teardown)
+ ret->TearDownProc = teardown;
+ ret->VersionInfo = vers;
+ } else {
+ /* No initdata is OK for external modules */
+ if (options == EXTERN_MODULE)
+ goto LoadModule_exit;
+
+ /* no initdata, fail the load */
+ xf86Msg(X_ERROR, "LoadModule: Module %s does not have a %s "
+ "data object.\n", module, p);
+ if (errmaj)
+ *errmaj = LDR_INVALID;
+ if (errmin)
+ *errmin = 0;
+ goto LoadModule_fail;
+ }
+ if (ret->SetupProc) {
+ ret->TearDownData = ret->SetupProc(ret, options, errmaj, errmin);
+ if (!ret->TearDownData) {
+ goto LoadModule_fail;
+ }
+ } else if (options) {
+ xf86Msg(X_WARNING, "Module Options present, but no SetupProc "
+ "available for %s\n", module);
+ }
+ goto LoadModule_exit;
+
+ LoadModule_fail:
+ UnloadModule(ret);
+ ret = NULL;
+
+ LoadModule_exit:
+ FreePathList(pathlist);
+ FreePatterns(patterns);
+ free(found);
+ free(name);
+ free(p);
+
+ return ret;
+}
+
+/*
+ * LoadModule: load a module
+ *
+ * module The module name. Normally this is not a filename but the
+ * module's "canonical name. A full pathname is, however,
+ * also accepted.
+ * path A comma separated list of module directories.
+ * subdirlist A NULL terminated list of subdirectories to search. When
+ * NULL, the default "stdSubdirs" list is used. The default
+ * list is also substituted for entries with value DEFAULT_LIST.
+ * patternlist A NULL terminated list of regular expressions used to find
+ * module filenames. Each regex should contain exactly one
+ * subexpression that corresponds to the canonical module name.
+ * When NULL, the default "stdPatterns" list is used. The
+ * default list is also substituted for entries with value
+ * DEFAULT_LIST.
+ * options A NULL terminated list of Options that are passed to the
+ * module's SetupProc function.
+ * modreq An optional XF86ModReqInfo* containing
+ * version/ABI/vendor-ABI requirements to check for when
+ * loading the module. The following fields of the
+ * XF86ModReqInfo struct are checked:
+ * majorversion - must match the module's majorversion exactly
+ * minorversion - the module's minorversion must be >= this
+ * patchlevel - the module's minorversion.patchlevel must be
+ * >= this. Patchlevel is ignored when
+ * minorversion is not set.
+ * abiclass - (string) must match the module's abiclass
+ * abiversion - must be consistent with the module's
+ * abiversion (major equal, minor no older)
+ * moduleclass - string must match the module's moduleclass
+ * string
+ * "don't care" values are ~0 for numbers, and NULL for strings
+ * errmaj Major error return.
+ * errmin Minor error return.
+ *
+ */
+ModuleDescPtr
+LoadModule(const char *module, const char *path, const char **subdirlist,
+ const char **patternlist, pointer options,
+ const XF86ModReqInfo * modreq, int *errmaj, int *errmin)
+{
+ return doLoadModule(module, path, subdirlist, patternlist, options,
+ modreq, errmaj, errmin);
+}
+
+void
+UnloadModule(pointer mod)
+{
+ UnloadModuleOrDriver((ModuleDescPtr)mod);
+}
+
+static void
+UnloadModuleOrDriver(ModuleDescPtr mod)
+{
+ if (mod == (ModuleDescPtr) 1)
+ return;
+
+ if (mod == NULL || mod->name == NULL)
+ return;
+
+ xf86MsgVerb(X_INFO, 3, "UnloadModule: \"%s\"\n", mod->name);
+
+ if ((mod->TearDownProc) && (mod->TearDownData))
+ mod->TearDownProc(mod->TearDownData);
+ LoaderUnload(mod->name, mod->handle);
+
+ if (mod->child)
+ UnloadModuleOrDriver(mod->child);
+ if (mod->sib)
+ UnloadModuleOrDriver(mod->sib);
+ free(mod->path);
+ free(mod->name);
+ free(mod);
+}
+
+void
+UnloadSubModule(pointer _mod)
+{
+ ModuleDescPtr mod = (ModuleDescPtr)_mod;
+
+ if (mod == NULL || mod->name == NULL)
+ return;
+
+ xf86MsgVerb(X_INFO, 3, "UnloadSubModule: \"%s\"\n", mod->name);
+
+ if ((mod->TearDownProc) && (mod->TearDownData))
+ mod->TearDownProc(mod->TearDownData);
+ LoaderUnload(mod->name, mod->handle);
+
+ RemoveChild(mod);
+
+ if (mod->child)
+ UnloadModuleOrDriver(mod->child);
+
+ free(mod->path);
+ free(mod->name);
+ free(mod);
+}
+
+static void
+RemoveChild(ModuleDescPtr child)
+{
+ ModuleDescPtr mdp;
+ ModuleDescPtr prevsib;
+ ModuleDescPtr parent;
+
+ if (!child->parent)
+ return;
+
+ parent = child->parent;
+ if (parent->child == child) {
+ parent->child = child->sib;
+ return;
+ }
+
+ prevsib = parent->child;
+ mdp = prevsib->sib;
+ while (mdp && mdp != child) {
+ prevsib = mdp;
+ mdp = mdp->sib;
+ }
+ if (mdp == child)
+ prevsib->sib = child->sib;
+ return;
+}
+
+void
+LoaderErrorMsg(const char *name, const char *modname, int errmaj, int errmin)
+{
+ const char *msg;
+ MessageType type = X_ERROR;
+
+ switch (errmaj) {
+ case LDR_NOERROR:
+ msg = "no error";
+ break;
+ case LDR_NOMEM:
+ msg = "out of memory";
+ break;
+ case LDR_NOENT:
+ msg = "module does not exist";
+ break;
+ case LDR_NOSUBENT:
+ msg = "a required submodule could not be loaded";
+ break;
+ case LDR_NOSPACE:
+ msg = "too many modules";
+ break;
+ case LDR_NOMODOPEN:
+ msg = "open failed";
+ break;
+ case LDR_UNKTYPE:
+ msg = "unknown module type";
+ break;
+ case LDR_NOLOAD:
+ msg = "loader failed";
+ break;
+ case LDR_ONCEONLY:
+ msg = "already loaded";
+ type = X_INFO;
+ break;
+ case LDR_NOPORTOPEN:
+ msg = "port open failed";
+ break;
+ case LDR_NOHARDWARE:
+ msg = "no hardware found";
+ break;
+ case LDR_MISMATCH:
+ msg = "module requirement mismatch";
+ break;
+ case LDR_BADUSAGE:
+ msg = "invalid argument(s) to LoadModule()";
+ break;
+ case LDR_INVALID:
+ msg = "invalid module";
+ break;
+ case LDR_BADOS:
+ msg = "module doesn't support this OS";
+ break;
+ case LDR_MODSPECIFIC:
+ msg = "module-specific error";
+ break;
+ default:
+ msg = "unknown error";
+ }
+ if (name)
+ xf86Msg(type, "%s: Failed to load module \"%s\" (%s, %d)\n",
+ name, modname, msg, errmin);
+ else
+ xf86Msg(type, "Failed to load module \"%s\" (%s, %d)\n",
+ modname, msg, errmin);
+}
+
+/* Given a module path or file name, return the module's canonical name */
+static char *
+LoaderGetCanonicalName(const char *modname, PatternPtr patterns)
+{
+ char *str;
+ const char *s;
+ int len;
+ PatternPtr p;
+ regmatch_t match[2];
+
+ /* Strip off any leading path */
+ s = strrchr(modname, '/');
+ if (s == NULL)
+ s = modname;
+ else
+ s++;
+
+ /* Find the first regex that is matched */
+ for (p = patterns; p->pattern; p++)
+ if (regexec(&p->rex, s, 2, match, 0) == 0 && match[1].rm_so != -1) {
+ len = match[1].rm_eo - match[1].rm_so;
+ str = malloc(len + 1);
+ if (!str)
+ return NULL;
+ strncpy(str, s + match[1].rm_so, len);
+ str[len] = '\0';
+ return str;
+ }
+
+ /* If there is no match, return the whole name minus the leading path */
+ return strdup(s);
+}
+
+/*
+ * Return the module version information.
+ */
+unsigned long
+LoaderGetModuleVersion(ModuleDescPtr mod)
+{
+ if (!mod || mod == (ModuleDescPtr) 1 || !mod->VersionInfo)
+ return 0;
+
+ return MODULE_VERSION_NUMERIC(mod->VersionInfo->majorversion,
+ mod->VersionInfo->minorversion,
+ mod->VersionInfo->patchlevel);
+}
diff --git a/xorg-server/mi/micmap.c b/xorg-server/mi/micmap.c
index 87d4248d0..7448ef8fd 100644
--- a/xorg-server/mi/micmap.c
+++ b/xorg-server/mi/micmap.c
@@ -1,668 +1,670 @@
-/*
- * Copyright (c) 1987, Oracle and/or its affiliates. All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- */
-
-/*
- * This is based on cfbcmap.c. The functions here are useful independently
- * of cfb, which is the reason for including them here. How "mi" these
- * are may be debatable.
- */
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-#include <X11/Xproto.h>
-#include "scrnintstr.h"
-#include "colormapst.h"
-#include "resource.h"
-#include "globals.h"
-#include "micmap.h"
-
-DevPrivateKeyRec micmapScrPrivateKeyRec;
-
-int
-miListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
-{
- if (GetInstalledmiColormap(pScreen)) {
- *pmaps = GetInstalledmiColormap(pScreen)->mid;
- return 1;
- }
- return 0;
-}
-
-void
-miInstallColormap(ColormapPtr pmap)
-{
- ColormapPtr oldpmap = GetInstalledmiColormap(pmap->pScreen);
-
- if(pmap != oldpmap)
- {
- /* Uninstall pInstalledMap. No hardware changes required, just
- * notify all interested parties. */
- if(oldpmap != (ColormapPtr)None)
- WalkTree(pmap->pScreen, TellLostMap, (char *)&oldpmap->mid);
- /* Install pmap */
- SetInstalledmiColormap(pmap->pScreen, pmap);
- WalkTree(pmap->pScreen, TellGainedMap, (char *)&pmap->mid);
-
- }
-}
-
-void
-miUninstallColormap(ColormapPtr pmap)
-{
- ColormapPtr curpmap = GetInstalledmiColormap(pmap->pScreen);
-
- if(pmap == curpmap)
- {
- if (pmap->mid != pmap->pScreen->defColormap)
- {
- dixLookupResourceByType((pointer *)&curpmap,
- pmap->pScreen->defColormap,
- RT_COLORMAP, serverClient,
- DixUseAccess);
- (*pmap->pScreen->InstallColormap)(curpmap);
- }
- }
-}
-
-void
-miResolveColor(unsigned short *pred, unsigned short *pgreen,
- unsigned short *pblue, VisualPtr pVisual)
-{
- int shift = 16 - pVisual->bitsPerRGBValue;
- unsigned lim = (1 << pVisual->bitsPerRGBValue) - 1;
-
- if ((pVisual->class | DynamicClass) == GrayScale)
- {
- /* rescale to gray then rgb bits */
- *pred = (30L * *pred + 59L * *pgreen + 11L * *pblue) / 100;
- *pblue = *pgreen = *pred = ((*pred >> shift) * 65535) / lim;
- }
- else
- {
- /* rescale to rgb bits */
- *pred = ((*pred >> shift) * 65535) / lim;
- *pgreen = ((*pgreen >> shift) * 65535) / lim;
- *pblue = ((*pblue >> shift) * 65535) / lim;
- }
-}
-
-Bool
-miInitializeColormap(ColormapPtr pmap)
-{
- unsigned i;
- VisualPtr pVisual;
- unsigned lim, maxent, shift;
-
- pVisual = pmap->pVisual;
- lim = (1 << pVisual->bitsPerRGBValue) - 1;
- shift = 16 - pVisual->bitsPerRGBValue;
- maxent = pVisual->ColormapEntries - 1;
- if (pVisual->class == TrueColor)
- {
- unsigned limr, limg, limb;
-
- limr = pVisual->redMask >> pVisual->offsetRed;
- limg = pVisual->greenMask >> pVisual->offsetGreen;
- limb = pVisual->blueMask >> pVisual->offsetBlue;
- for(i = 0; i <= maxent; i++)
- {
- /* rescale to [0..65535] then rgb bits */
- pmap->red[i].co.local.red =
- ((((i * 65535) / limr) >> shift) * 65535) / lim;
- pmap->green[i].co.local.green =
- ((((i * 65535) / limg) >> shift) * 65535) / lim;
- pmap->blue[i].co.local.blue =
- ((((i * 65535) / limb) >> shift) * 65535) / lim;
- }
- }
- else if (pVisual->class == StaticColor)
- {
- unsigned limr, limg, limb;
-
- limr = pVisual->redMask >> pVisual->offsetRed;
- limg = pVisual->greenMask >> pVisual->offsetGreen;
- limb = pVisual->blueMask >> pVisual->offsetBlue;
- for(i = 0; i <= maxent; i++)
- {
- /* rescale to [0..65535] then rgb bits */
- pmap->red[i].co.local.red =
- ((((((i & pVisual->redMask) >> pVisual->offsetRed)
- * 65535) / limr) >> shift) * 65535) / lim;
- pmap->red[i].co.local.green =
- ((((((i & pVisual->greenMask) >> pVisual->offsetGreen)
- * 65535) / limg) >> shift) * 65535) / lim;
- pmap->red[i].co.local.blue =
- ((((((i & pVisual->blueMask) >> pVisual->offsetBlue)
- * 65535) / limb) >> shift) * 65535) / lim;
- }
- }
- else if (pVisual->class == StaticGray)
- {
- for(i = 0; i <= maxent; i++)
- {
- /* rescale to [0..65535] then rgb bits */
- pmap->red[i].co.local.red = ((((i * 65535) / maxent) >> shift)
- * 65535) / lim;
- pmap->red[i].co.local.green = pmap->red[i].co.local.red;
- pmap->red[i].co.local.blue = pmap->red[i].co.local.red;
- }
- }
- return TRUE;
-}
-
-/* When simulating DirectColor on PseudoColor hardware, multiple
- entries of the colormap must be updated
- */
-
-#define AddElement(mask) { \
- pixel = red | green | blue; \
- for (i = 0; i < nresult; i++) \
- if (outdefs[i].pixel == pixel) \
- break; \
- if (i == nresult) \
- { \
- nresult++; \
- outdefs[i].pixel = pixel; \
- outdefs[i].flags = 0; \
- } \
- outdefs[i].flags |= (mask); \
- outdefs[i].red = pmap->red[red >> pVisual->offsetRed].co.local.red; \
- outdefs[i].green = pmap->green[green >> pVisual->offsetGreen].co.local.green; \
- outdefs[i].blue = pmap->blue[blue >> pVisual->offsetBlue].co.local.blue; \
-}
-
-int
-miExpandDirectColors(ColormapPtr pmap, int ndef, xColorItem *indefs,
- xColorItem *outdefs)
-{
- int red, green, blue;
- int maxred, maxgreen, maxblue;
- int stepred, stepgreen, stepblue;
- VisualPtr pVisual;
- int pixel;
- int nresult;
- int i;
-
- pVisual = pmap->pVisual;
-
- stepred = 1 << pVisual->offsetRed;
- stepgreen = 1 << pVisual->offsetGreen;
- stepblue = 1 << pVisual->offsetBlue;
- maxred = pVisual->redMask;
- maxgreen = pVisual->greenMask;
- maxblue = pVisual->blueMask;
- nresult = 0;
- for (;ndef--; indefs++)
- {
- if (indefs->flags & DoRed)
- {
- red = indefs->pixel & pVisual->redMask;
- for (green = 0; green <= maxgreen; green += stepgreen)
- {
- for (blue = 0; blue <= maxblue; blue += stepblue)
- {
- AddElement (DoRed)
- }
- }
- }
- if (indefs->flags & DoGreen)
- {
- green = indefs->pixel & pVisual->greenMask;
- for (red = 0; red <= maxred; red += stepred)
- {
- for (blue = 0; blue <= maxblue; blue += stepblue)
- {
- AddElement (DoGreen)
- }
- }
- }
- if (indefs->flags & DoBlue)
- {
- blue = indefs->pixel & pVisual->blueMask;
- for (red = 0; red <= maxred; red += stepred)
- {
- for (green = 0; green <= maxgreen; green += stepgreen)
- {
- AddElement (DoBlue)
- }
- }
- }
- }
- return nresult;
-}
-
-Bool
-miCreateDefColormap(ScreenPtr pScreen)
-{
-/*
- * In the following sources PC X server vendors may want to delete
- * "_not_tog" from "#ifdef WIN32_not_tog"
- */
-#ifdef WIN32_not_tog
- /*
- * these are the MS-Windows desktop colors, adjusted for X's 16-bit
- * color specifications.
- */
- static xColorItem citems[] = {
- { 0, 0, 0, 0, 0, 0 },
- { 1, 0x8000, 0, 0, 0, 0 },
- { 2, 0, 0x8000, 0, 0, 0 },
- { 3, 0x8000, 0x8000, 0, 0, 0 },
- { 4, 0, 0, 0x8000, 0, 0 },
- { 5, 0x8000, 0, 0x8000, 0, 0 },
- { 6, 0, 0x8000, 0x8000, 0, 0 },
- { 7, 0xc000, 0xc000, 0xc000, 0, 0 },
- { 8, 0xc000, 0xdc00, 0xc000, 0, 0 },
- { 9, 0xa600, 0xca00, 0xf000, 0, 0 },
- { 246, 0xff00, 0xfb00, 0xf000, 0, 0 },
- { 247, 0xa000, 0xa000, 0xa400, 0, 0 },
- { 248, 0x8000, 0x8000, 0x8000, 0, 0 },
- { 249, 0xff00, 0, 0, 0, 0 },
- { 250, 0, 0xff00, 0, 0, 0 },
- { 251, 0xff00, 0xff00, 0, 0, 0 },
- { 252, 0, 0, 0xff00, 0, 0 },
- { 253, 0xff00, 0, 0xff00, 0, 0 },
- { 254, 0, 0xff00, 0xff00, 0, 0 },
- { 255, 0xff00, 0xff00, 0xff00, 0, 0 }
- };
-#define NUM_DESKTOP_COLORS sizeof citems / sizeof citems[0]
- int i;
-#else
- unsigned short zero = 0, ones = 0xFFFF;
-#endif
- Pixel wp, bp;
- VisualPtr pVisual;
- ColormapPtr cmap;
- int alloctype;
-
- if (!dixRegisterPrivateKey(&micmapScrPrivateKeyRec, PRIVATE_SCREEN, 0))
- return FALSE;
-
- for (pVisual = pScreen->visuals;
- pVisual->vid != pScreen->rootVisual;
- pVisual++)
- ;
-
- if (pScreen->rootDepth == 1 || (pVisual->class & DynamicClass))
- alloctype = AllocNone;
- else
- alloctype = AllocAll;
-
- if (CreateColormap(pScreen->defColormap, pScreen, pVisual, &cmap,
- alloctype, 0) != Success)
- return FALSE;
-
- if (pScreen->rootDepth > 1) {
- wp = pScreen->whitePixel;
- bp = pScreen->blackPixel;
-#ifdef WIN32_not_tog
- for (i = 0; i < NUM_DESKTOP_COLORS; i++) {
- if (AllocColor (cmap,
- &citems[i].red, &citems[i].green, &citems[i].blue,
- &citems[i].pixel, 0) != Success)
- return FALSE;
- }
-#else
- if ((AllocColor(cmap, &ones, &ones, &ones, &wp, 0) !=
- Success) ||
- (AllocColor(cmap, &zero, &zero, &zero, &bp, 0) !=
- Success))
- return FALSE;
- pScreen->whitePixel = wp;
- pScreen->blackPixel = bp;
-#endif
- }
-
- (*pScreen->InstallColormap)(cmap);
- return TRUE;
-}
-
-/*
- * Default true color bitmasks, should be overridden by
- * driver
- */
-
-#define _RZ(d) ((d + 2) / 3)
-#define _RS(d) 0
-#define _RM(d) ((1 << _RZ(d)) - 1)
-#define _GZ(d) ((d - _RZ(d) + 1) / 2)
-#define _GS(d) _RZ(d)
-#define _GM(d) (((1 << _GZ(d)) - 1) << _GS(d))
-#define _BZ(d) (d - _RZ(d) - _GZ(d))
-#define _BS(d) (_RZ(d) + _GZ(d))
-#define _BM(d) (((1 << _BZ(d)) - 1) << _BS(d))
-#define _CE(d) (1 << _RZ(d))
-
-typedef struct _miVisuals {
- struct _miVisuals *next;
- int depth;
- int bitsPerRGB;
- int visuals;
- int count;
- int preferredCVC;
- Pixel redMask, greenMask, blueMask;
-} miVisualsRec, *miVisualsPtr;
-
-static int miVisualPriority[] = {
- PseudoColor, GrayScale, StaticColor, TrueColor, DirectColor, StaticGray
-};
-
-#define NUM_PRIORITY 6
-
-static miVisualsPtr miVisuals;
-
-void
-miClearVisualTypes(void)
-{
- miVisualsPtr v;
-
- while ((v = miVisuals)) {
- miVisuals = v->next;
- free(v);
- }
-}
-
-
-Bool
-miSetVisualTypesAndMasks(int depth, int visuals, int bitsPerRGB,
- int preferredCVC,
- Pixel redMask, Pixel greenMask, Pixel blueMask)
-{
- miVisualsPtr new, *prev, v;
- int count;
-
- new = malloc(sizeof *new);
- if (!new)
- return FALSE;
- if (!redMask || !greenMask || !blueMask)
- {
- redMask = _RM(depth);
- greenMask = _GM(depth);
- blueMask = _BM(depth);
- }
- new->next = 0;
- new->depth = depth;
- new->visuals = visuals;
- new->bitsPerRGB = bitsPerRGB;
- new->preferredCVC = preferredCVC;
- new->redMask = redMask;
- new->greenMask = greenMask;
- new->blueMask = blueMask;
- count = (visuals >> 1) & 033333333333;
- count = visuals - count - ((count >> 1) & 033333333333);
- count = (((count + (count >> 3)) & 030707070707) % 077); /* HAKMEM 169 */
- new->count = count;
- for (prev = &miVisuals; (v = *prev); prev = &v->next);
- *prev = new;
- return TRUE;
-}
-
-Bool
-miSetVisualTypes(int depth, int visuals, int bitsPerRGB, int preferredCVC)
-{
- return miSetVisualTypesAndMasks (depth, visuals, bitsPerRGB,
- preferredCVC, 0, 0, 0);
-}
-
-int
-miGetDefaultVisualMask(int depth)
-{
- if (depth > MAX_PSEUDO_DEPTH)
- return LARGE_VISUALS;
- else if (depth >= MIN_TRUE_DEPTH)
- return ALL_VISUALS;
- else if (depth == 1)
- return StaticGrayMask;
- else
- return SMALL_VISUALS;
-}
-
-static Bool
-miVisualTypesSet (int depth)
-{
- miVisualsPtr visuals;
-
- for (visuals = miVisuals; visuals; visuals = visuals->next)
- if (visuals->depth == depth)
- return TRUE;
- return FALSE;
-}
-
-Bool
-miSetPixmapDepths (void)
-{
- int d, f;
-
- /* Add any unlisted depths from the pixmap formats */
- for (f = 0; f < screenInfo.numPixmapFormats; f++)
- {
- d = screenInfo.formats[f].depth;
- if (!miVisualTypesSet (d))
- {
- if (!miSetVisualTypes (d, 0, 0, -1))
- return FALSE;
- }
- }
- return TRUE;
-}
-
-/*
- * Distance to least significant one bit
- */
-static int
-maskShift (Pixel p)
-{
- int s;
-
- if (!p) return 0;
- s = 0;
- while (!(p & 1))
- {
- s++;
- p >>= 1;
- }
- return s;
-}
-
-/*
- * Given a list of formats for a screen, create a list
- * of visuals and depths for the screen which corespond to
- * the set which can be used with this version of cfb.
- */
-
-Bool
-miInitVisuals(VisualPtr *visualp, DepthPtr *depthp, int *nvisualp,
- int *ndepthp, int *rootDepthp, VisualID *defaultVisp,
- unsigned long sizes, int bitsPerRGB, int preferredVis)
-
-{
- int i, j = 0, k;
- VisualPtr visual;
- DepthPtr depth;
- VisualID *vid;
- int d, b;
- int f;
- int ndepth, nvisual;
- int nvtype;
- int vtype;
- miVisualsPtr visuals, nextVisuals;
- int *preferredCVCs, *prefp;
- int first_depth;
-
- /* none specified, we'll guess from pixmap formats */
- if (!miVisuals)
- {
- for (f = 0; f < screenInfo.numPixmapFormats; f++)
- {
- d = screenInfo.formats[f].depth;
- b = screenInfo.formats[f].bitsPerPixel;
- if (sizes & (1 << (b - 1)))
- vtype = miGetDefaultVisualMask(d);
- else
- vtype = 0;
- if (!miSetVisualTypes (d, vtype, bitsPerRGB, -1))
- return FALSE;
- }
- }
- nvisual = 0;
- ndepth = 0;
- for (visuals = miVisuals; visuals; visuals = nextVisuals)
- {
- nextVisuals = visuals->next;
- ndepth++;
- nvisual += visuals->count;
- }
- depth = malloc(ndepth * sizeof (DepthRec));
- visual = malloc(nvisual * sizeof (VisualRec));
- preferredCVCs = malloc(ndepth * sizeof(int));
- if (!depth || !visual || !preferredCVCs)
- {
- free(depth);
- free(visual);
- free(preferredCVCs);
- return FALSE;
- }
- *depthp = depth;
- *visualp = visual;
- *ndepthp = ndepth;
- *nvisualp = nvisual;
- prefp = preferredCVCs;
- for (visuals = miVisuals; visuals; visuals = nextVisuals)
- {
- nextVisuals = visuals->next;
- d = visuals->depth;
- vtype = visuals->visuals;
- nvtype = visuals->count;
- *prefp = visuals->preferredCVC;
- prefp++;
- vid = NULL;
- if (nvtype)
- {
- vid = malloc(nvtype * sizeof (VisualID));
- if (!vid) {
- free(preferredCVCs);
- return FALSE;
- }
- }
- depth->depth = d;
- depth->numVids = nvtype;
- depth->vids = vid;
- depth++;
- for (i = 0; i < NUM_PRIORITY; i++) {
- if (! (vtype & (1 << miVisualPriority[i])))
- continue;
- visual->class = miVisualPriority[i];
- visual->bitsPerRGBValue = visuals->bitsPerRGB;
- visual->ColormapEntries = 1 << d;
- visual->nplanes = d;
- visual->vid = *vid = FakeClientID (0);
- switch (visual->class) {
- case PseudoColor:
- case GrayScale:
- case StaticGray:
- visual->redMask = 0;
- visual->greenMask = 0;
- visual->blueMask = 0;
- visual->offsetRed = 0;
- visual->offsetGreen = 0;
- visual->offsetBlue = 0;
- break;
- case DirectColor:
- case TrueColor:
- visual->ColormapEntries = _CE(d);
- /* fall through */
- case StaticColor:
- visual->redMask = visuals->redMask;
- visual->greenMask = visuals->greenMask;
- visual->blueMask = visuals->blueMask;
- visual->offsetRed = maskShift (visuals->redMask);
- visual->offsetGreen = maskShift (visuals->greenMask);
- visual->offsetBlue = maskShift (visuals->blueMask);
- }
- vid++;
- visual++;
- }
- free(visuals);
- }
- miVisuals = NULL;
- visual = *visualp;
- depth = *depthp;
-
- /*
- * if we did not supplyied by a preferred visual class
- * check if there is a preferred class in one of the depth
- * structures - if there is, we want to start looking for the
- * default visual/depth from that depth.
- */
- first_depth = 0;
- if (preferredVis < 0 && defaultColorVisualClass < 0 ) {
- for (i = 0; i < ndepth; i++) {
- if (preferredCVCs[i] >= 0) {
- first_depth = i;
- break;
- }
- }
- }
-
- for (i = first_depth; i < ndepth; i++)
- {
- int prefColorVisualClass = -1;
-
- if (defaultColorVisualClass >= 0)
- prefColorVisualClass = defaultColorVisualClass;
- else if (preferredVis >= 0)
- prefColorVisualClass = preferredVis;
- else if (preferredCVCs[i] >= 0)
- prefColorVisualClass = preferredCVCs[i];
-
- if (*rootDepthp && *rootDepthp != depth[i].depth)
- continue;
-
- for (j = 0; j < depth[i].numVids; j++)
- {
- for (k = 0; k < nvisual; k++)
- if (visual[k].vid == depth[i].vids[j])
- break;
- if (k == nvisual)
- continue;
- if (prefColorVisualClass < 0 ||
- visual[k].class == prefColorVisualClass)
- break;
- }
- if (j != depth[i].numVids)
- break;
- }
- if (i == ndepth) {
- i = 0;
- j = 0;
- }
- *rootDepthp = depth[i].depth;
- *defaultVisp = depth[i].vids[j];
- free(preferredCVCs);
-
- return TRUE;
-}
+/*
+ * Copyright (c) 1987, Oracle and/or its affiliates. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+/*
+ * This is based on cfbcmap.c. The functions here are useful independently
+ * of cfb, which is the reason for including them here. How "mi" these
+ * are may be debatable.
+ */
+
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+#include <X11/Xproto.h>
+#include "scrnintstr.h"
+#include "colormapst.h"
+#include "resource.h"
+#include "globals.h"
+#include "micmap.h"
+
+DevPrivateKeyRec micmapScrPrivateKeyRec;
+
+int
+miListInstalledColormaps(ScreenPtr pScreen, Colormap *pmaps)
+{
+ if (GetInstalledmiColormap(pScreen)) {
+ *pmaps = GetInstalledmiColormap(pScreen)->mid;
+ return 1;
+ }
+ return 0;
+}
+
+void
+miInstallColormap(ColormapPtr pmap)
+{
+ ColormapPtr oldpmap = GetInstalledmiColormap(pmap->pScreen);
+
+ if(pmap != oldpmap)
+ {
+ /* Uninstall pInstalledMap. No hardware changes required, just
+ * notify all interested parties. */
+ if(oldpmap != (ColormapPtr)None)
+ WalkTree(pmap->pScreen, TellLostMap, (char *)&oldpmap->mid);
+ /* Install pmap */
+ SetInstalledmiColormap(pmap->pScreen, pmap);
+ WalkTree(pmap->pScreen, TellGainedMap, (char *)&pmap->mid);
+
+ }
+}
+
+void
+miUninstallColormap(ColormapPtr pmap)
+{
+ ColormapPtr curpmap = GetInstalledmiColormap(pmap->pScreen);
+
+ if(pmap == curpmap)
+ {
+ if (pmap->mid != pmap->pScreen->defColormap)
+ {
+ dixLookupResourceByType((pointer *)&curpmap,
+ pmap->pScreen->defColormap,
+ RT_COLORMAP, serverClient,
+ DixUseAccess);
+ (*pmap->pScreen->InstallColormap)(curpmap);
+ }
+ }
+}
+
+void
+miResolveColor(unsigned short *pred, unsigned short *pgreen,
+ unsigned short *pblue, VisualPtr pVisual)
+{
+ int shift = 16 - pVisual->bitsPerRGBValue;
+ unsigned lim = (1 << pVisual->bitsPerRGBValue) - 1;
+
+ if ((pVisual->class | DynamicClass) == GrayScale)
+ {
+ /* rescale to gray then rgb bits */
+ *pred = (30L * *pred + 59L * *pgreen + 11L * *pblue) / 100;
+ *pblue = *pgreen = *pred = ((*pred >> shift) * 65535) / lim;
+ }
+ else
+ {
+ /* rescale to rgb bits */
+ *pred = ((*pred >> shift) * 65535) / lim;
+ *pgreen = ((*pgreen >> shift) * 65535) / lim;
+ *pblue = ((*pblue >> shift) * 65535) / lim;
+ }
+}
+
+Bool
+miInitializeColormap(ColormapPtr pmap)
+{
+ unsigned i;
+ VisualPtr pVisual;
+ unsigned lim, maxent, shift;
+
+ pVisual = pmap->pVisual;
+ lim = (1 << pVisual->bitsPerRGBValue) - 1;
+ shift = 16 - pVisual->bitsPerRGBValue;
+ maxent = pVisual->ColormapEntries - 1;
+ if (pVisual->class == TrueColor)
+ {
+ unsigned limr, limg, limb;
+
+ limr = pVisual->redMask >> pVisual->offsetRed;
+ limg = pVisual->greenMask >> pVisual->offsetGreen;
+ limb = pVisual->blueMask >> pVisual->offsetBlue;
+ for(i = 0; i <= maxent; i++)
+ {
+ /* rescale to [0..65535] then rgb bits */
+ pmap->red[i].co.local.red =
+ ((((i * 65535) / limr) >> shift) * 65535) / lim;
+ pmap->green[i].co.local.green =
+ ((((i * 65535) / limg) >> shift) * 65535) / lim;
+ pmap->blue[i].co.local.blue =
+ ((((i * 65535) / limb) >> shift) * 65535) / lim;
+ }
+ }
+ else if (pVisual->class == StaticColor)
+ {
+ unsigned limr, limg, limb;
+
+ limr = pVisual->redMask >> pVisual->offsetRed;
+ limg = pVisual->greenMask >> pVisual->offsetGreen;
+ limb = pVisual->blueMask >> pVisual->offsetBlue;
+ for(i = 0; i <= maxent; i++)
+ {
+ /* rescale to [0..65535] then rgb bits */
+ pmap->red[i].co.local.red =
+ ((((((i & pVisual->redMask) >> pVisual->offsetRed)
+ * 65535) / limr) >> shift) * 65535) / lim;
+ pmap->red[i].co.local.green =
+ ((((((i & pVisual->greenMask) >> pVisual->offsetGreen)
+ * 65535) / limg) >> shift) * 65535) / lim;
+ pmap->red[i].co.local.blue =
+ ((((((i & pVisual->blueMask) >> pVisual->offsetBlue)
+ * 65535) / limb) >> shift) * 65535) / lim;
+ }
+ }
+ else if (pVisual->class == StaticGray)
+ {
+ for(i = 0; i <= maxent; i++)
+ {
+ /* rescale to [0..65535] then rgb bits */
+ pmap->red[i].co.local.red = ((((i * 65535) / maxent) >> shift)
+ * 65535) / lim;
+ pmap->red[i].co.local.green = pmap->red[i].co.local.red;
+ pmap->red[i].co.local.blue = pmap->red[i].co.local.red;
+ }
+ }
+ return TRUE;
+}
+
+/* When simulating DirectColor on PseudoColor hardware, multiple
+ entries of the colormap must be updated
+ */
+
+#define AddElement(mask) { \
+ pixel = red | green | blue; \
+ for (i = 0; i < nresult; i++) \
+ if (outdefs[i].pixel == pixel) \
+ break; \
+ if (i == nresult) \
+ { \
+ nresult++; \
+ outdefs[i].pixel = pixel; \
+ outdefs[i].flags = 0; \
+ } \
+ outdefs[i].flags |= (mask); \
+ outdefs[i].red = pmap->red[red >> pVisual->offsetRed].co.local.red; \
+ outdefs[i].green = pmap->green[green >> pVisual->offsetGreen].co.local.green; \
+ outdefs[i].blue = pmap->blue[blue >> pVisual->offsetBlue].co.local.blue; \
+}
+
+int
+miExpandDirectColors(ColormapPtr pmap, int ndef, xColorItem *indefs,
+ xColorItem *outdefs)
+{
+ int red, green, blue;
+ int maxred, maxgreen, maxblue;
+ int stepred, stepgreen, stepblue;
+ VisualPtr pVisual;
+ int pixel;
+ int nresult;
+ int i;
+
+ pVisual = pmap->pVisual;
+
+ stepred = 1 << pVisual->offsetRed;
+ stepgreen = 1 << pVisual->offsetGreen;
+ stepblue = 1 << pVisual->offsetBlue;
+ maxred = pVisual->redMask;
+ maxgreen = pVisual->greenMask;
+ maxblue = pVisual->blueMask;
+ nresult = 0;
+ for (;ndef--; indefs++)
+ {
+ if (indefs->flags & DoRed)
+ {
+ red = indefs->pixel & pVisual->redMask;
+ for (green = 0; green <= maxgreen; green += stepgreen)
+ {
+ for (blue = 0; blue <= maxblue; blue += stepblue)
+ {
+ AddElement (DoRed)
+ }
+ }
+ }
+ if (indefs->flags & DoGreen)
+ {
+ green = indefs->pixel & pVisual->greenMask;
+ for (red = 0; red <= maxred; red += stepred)
+ {
+ for (blue = 0; blue <= maxblue; blue += stepblue)
+ {
+ AddElement (DoGreen)
+ }
+ }
+ }
+ if (indefs->flags & DoBlue)
+ {
+ blue = indefs->pixel & pVisual->blueMask;
+ for (red = 0; red <= maxred; red += stepred)
+ {
+ for (green = 0; green <= maxgreen; green += stepgreen)
+ {
+ AddElement (DoBlue)
+ }
+ }
+ }
+ }
+ return nresult;
+}
+
+Bool
+miCreateDefColormap(ScreenPtr pScreen)
+{
+/*
+ * In the following sources PC X server vendors may want to delete
+ * "_not_tog" from "#ifdef WIN32_not_tog"
+ */
+#ifdef WIN32_not_tog
+ /*
+ * these are the MS-Windows desktop colors, adjusted for X's 16-bit
+ * color specifications.
+ */
+ static xColorItem citems[] = {
+ { 0, 0, 0, 0, 0, 0 },
+ { 1, 0x8000, 0, 0, 0, 0 },
+ { 2, 0, 0x8000, 0, 0, 0 },
+ { 3, 0x8000, 0x8000, 0, 0, 0 },
+ { 4, 0, 0, 0x8000, 0, 0 },
+ { 5, 0x8000, 0, 0x8000, 0, 0 },
+ { 6, 0, 0x8000, 0x8000, 0, 0 },
+ { 7, 0xc000, 0xc000, 0xc000, 0, 0 },
+ { 8, 0xc000, 0xdc00, 0xc000, 0, 0 },
+ { 9, 0xa600, 0xca00, 0xf000, 0, 0 },
+ { 246, 0xff00, 0xfb00, 0xf000, 0, 0 },
+ { 247, 0xa000, 0xa000, 0xa400, 0, 0 },
+ { 248, 0x8000, 0x8000, 0x8000, 0, 0 },
+ { 249, 0xff00, 0, 0, 0, 0 },
+ { 250, 0, 0xff00, 0, 0, 0 },
+ { 251, 0xff00, 0xff00, 0, 0, 0 },
+ { 252, 0, 0, 0xff00, 0, 0 },
+ { 253, 0xff00, 0, 0xff00, 0, 0 },
+ { 254, 0, 0xff00, 0xff00, 0, 0 },
+ { 255, 0xff00, 0xff00, 0xff00, 0, 0 }
+ };
+#define NUM_DESKTOP_COLORS sizeof citems / sizeof citems[0]
+ int i;
+#else
+ unsigned short zero = 0, ones = 0xFFFF;
+#endif
+ Pixel wp, bp;
+ VisualPtr pVisual;
+ ColormapPtr cmap;
+ int alloctype;
+
+ if (!dixRegisterPrivateKey(&micmapScrPrivateKeyRec, PRIVATE_SCREEN, 0))
+ return FALSE;
+
+ for (pVisual = pScreen->visuals;
+ pVisual->vid != pScreen->rootVisual;
+ pVisual++)
+ ;
+
+ if (pScreen->rootDepth == 1 || (pVisual->class & DynamicClass))
+ alloctype = AllocNone;
+ else
+ alloctype = AllocAll;
+
+ if (CreateColormap(pScreen->defColormap, pScreen, pVisual, &cmap,
+ alloctype, 0) != Success)
+ return FALSE;
+
+ if (pScreen->rootDepth > 1) {
+ wp = pScreen->whitePixel;
+ bp = pScreen->blackPixel;
+#ifdef WIN32_not_tog
+ for (i = 0; i < NUM_DESKTOP_COLORS; i++) {
+ if (AllocColor (cmap,
+ &citems[i].red, &citems[i].green, &citems[i].blue,
+ &citems[i].pixel, 0) != Success)
+ return FALSE;
+ }
+#else
+ if ((AllocColor(cmap, &ones, &ones, &ones, &wp, 0) !=
+ Success) ||
+ (AllocColor(cmap, &zero, &zero, &zero, &bp, 0) !=
+ Success))
+ return FALSE;
+ pScreen->whitePixel = wp;
+ pScreen->blackPixel = bp;
+#endif
+ }
+
+ (*pScreen->InstallColormap)(cmap);
+ return TRUE;
+}
+
+/*
+ * Default true color bitmasks, should be overridden by
+ * driver
+ */
+
+#define _RZ(d) ((d + 2) / 3)
+#define _RS(d) 0
+#define _RM(d) ((1 << _RZ(d)) - 1)
+#define _GZ(d) ((d - _RZ(d) + 1) / 2)
+#define _GS(d) _RZ(d)
+#define _GM(d) (((1 << _GZ(d)) - 1) << _GS(d))
+#define _BZ(d) (d - _RZ(d) - _GZ(d))
+#define _BS(d) (_RZ(d) + _GZ(d))
+#define _BM(d) (((1 << _BZ(d)) - 1) << _BS(d))
+#define _CE(d) (1 << _RZ(d))
+
+typedef struct _miVisuals {
+ struct _miVisuals *next;
+ int depth;
+ int bitsPerRGB;
+ int visuals;
+ int count;
+ int preferredCVC;
+ Pixel redMask, greenMask, blueMask;
+} miVisualsRec, *miVisualsPtr;
+
+static int miVisualPriority[] = {
+ PseudoColor, GrayScale, StaticColor, TrueColor, DirectColor, StaticGray
+};
+
+#define NUM_PRIORITY 6
+
+static miVisualsPtr miVisuals;
+
+void
+miClearVisualTypes(void)
+{
+ miVisualsPtr v;
+
+ while ((v = miVisuals)) {
+ miVisuals = v->next;
+ free(v);
+ }
+}
+
+
+Bool
+miSetVisualTypesAndMasks(int depth, int visuals, int bitsPerRGB,
+ int preferredCVC,
+ Pixel redMask, Pixel greenMask, Pixel blueMask)
+{
+ miVisualsPtr new, *prev, v;
+ int count;
+
+ new = malloc(sizeof *new);
+ if (!new)
+ return FALSE;
+ if (!redMask || !greenMask || !blueMask)
+ {
+ redMask = _RM(depth);
+ greenMask = _GM(depth);
+ blueMask = _BM(depth);
+ }
+ new->next = 0;
+ new->depth = depth;
+ new->visuals = visuals;
+ new->bitsPerRGB = bitsPerRGB;
+ new->preferredCVC = preferredCVC;
+ new->redMask = redMask;
+ new->greenMask = greenMask;
+ new->blueMask = blueMask;
+ count = (visuals >> 1) & 033333333333;
+ count = visuals - count - ((count >> 1) & 033333333333);
+ count = (((count + (count >> 3)) & 030707070707) % 077); /* HAKMEM 169 */
+ new->count = count;
+ for (prev = &miVisuals; (v = *prev); prev = &v->next);
+ *prev = new;
+ return TRUE;
+}
+
+Bool
+miSetVisualTypes(int depth, int visuals, int bitsPerRGB, int preferredCVC)
+{
+ return miSetVisualTypesAndMasks (depth, visuals, bitsPerRGB,
+ preferredCVC, 0, 0, 0);
+}
+
+int
+miGetDefaultVisualMask(int depth)
+{
+ if (depth > MAX_PSEUDO_DEPTH)
+ return LARGE_VISUALS;
+ else if (depth >= MIN_TRUE_DEPTH)
+ return ALL_VISUALS;
+ else if (depth == 1)
+ return StaticGrayMask;
+ else
+ return SMALL_VISUALS;
+}
+
+static Bool
+miVisualTypesSet (int depth)
+{
+ miVisualsPtr visuals;
+
+ for (visuals = miVisuals; visuals; visuals = visuals->next)
+ if (visuals->depth == depth)
+ return TRUE;
+ return FALSE;
+}
+
+Bool
+miSetPixmapDepths (void)
+{
+ int d, f;
+
+ /* Add any unlisted depths from the pixmap formats */
+ for (f = 0; f < screenInfo.numPixmapFormats; f++)
+ {
+ d = screenInfo.formats[f].depth;
+ if (!miVisualTypesSet (d))
+ {
+ if (!miSetVisualTypes (d, 0, 0, -1))
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+/*
+ * Distance to least significant one bit
+ */
+static int
+maskShift (Pixel p)
+{
+ int s;
+
+ if (!p) return 0;
+ s = 0;
+ while (!(p & 1))
+ {
+ s++;
+ p >>= 1;
+ }
+ return s;
+}
+
+/*
+ * Given a list of formats for a screen, create a list
+ * of visuals and depths for the screen which corespond to
+ * the set which can be used with this version of cfb.
+ */
+
+Bool
+miInitVisuals(VisualPtr *visualp, DepthPtr *depthp, int *nvisualp,
+ int *ndepthp, int *rootDepthp, VisualID *defaultVisp,
+ unsigned long sizes, int bitsPerRGB, int preferredVis)
+
+{
+ int i, j = 0, k;
+ VisualPtr visual;
+ DepthPtr depth;
+ VisualID *vid;
+ int d, b;
+ int f;
+ int ndepth, nvisual;
+ int nvtype;
+ int vtype;
+ miVisualsPtr visuals, nextVisuals;
+ int *preferredCVCs, *prefp;
+ int first_depth;
+
+ /* none specified, we'll guess from pixmap formats */
+ if (!miVisuals)
+ {
+ for (f = 0; f < screenInfo.numPixmapFormats; f++)
+ {
+ d = screenInfo.formats[f].depth;
+ b = screenInfo.formats[f].bitsPerPixel;
+ if (sizes & (1 << (b - 1)))
+ vtype = miGetDefaultVisualMask(d);
+ else
+ vtype = 0;
+ if (!miSetVisualTypes (d, vtype, bitsPerRGB, -1))
+ return FALSE;
+ }
+ }
+ nvisual = 0;
+ ndepth = 0;
+ for (visuals = miVisuals; visuals; visuals = nextVisuals)
+ {
+ nextVisuals = visuals->next;
+ ndepth++;
+ nvisual += visuals->count;
+ }
+ depth = malloc(ndepth * sizeof (DepthRec));
+ visual = malloc(nvisual * sizeof (VisualRec));
+ preferredCVCs = malloc(ndepth * sizeof(int));
+ if (!depth || !visual || !preferredCVCs)
+ {
+ free(depth);
+ free(visual);
+ free(preferredCVCs);
+ return FALSE;
+ }
+ *depthp = depth;
+ *visualp = visual;
+ *ndepthp = ndepth;
+ *nvisualp = nvisual;
+ prefp = preferredCVCs;
+ for (visuals = miVisuals; visuals; visuals = nextVisuals)
+ {
+ nextVisuals = visuals->next;
+ d = visuals->depth;
+ vtype = visuals->visuals;
+ nvtype = visuals->count;
+ *prefp = visuals->preferredCVC;
+ prefp++;
+ vid = NULL;
+ if (nvtype)
+ {
+ vid = malloc(nvtype * sizeof (VisualID));
+ if (!vid) {
+ free(depth);
+ free(visual);
+ free(preferredCVCs);
+ return FALSE;
+ }
+ }
+ depth->depth = d;
+ depth->numVids = nvtype;
+ depth->vids = vid;
+ depth++;
+ for (i = 0; i < NUM_PRIORITY; i++) {
+ if (! (vtype & (1 << miVisualPriority[i])))
+ continue;
+ visual->class = miVisualPriority[i];
+ visual->bitsPerRGBValue = visuals->bitsPerRGB;
+ visual->ColormapEntries = 1 << d;
+ visual->nplanes = d;
+ visual->vid = *vid = FakeClientID (0);
+ switch (visual->class) {
+ case PseudoColor:
+ case GrayScale:
+ case StaticGray:
+ visual->redMask = 0;
+ visual->greenMask = 0;
+ visual->blueMask = 0;
+ visual->offsetRed = 0;
+ visual->offsetGreen = 0;
+ visual->offsetBlue = 0;
+ break;
+ case DirectColor:
+ case TrueColor:
+ visual->ColormapEntries = _CE(d);
+ /* fall through */
+ case StaticColor:
+ visual->redMask = visuals->redMask;
+ visual->greenMask = visuals->greenMask;
+ visual->blueMask = visuals->blueMask;
+ visual->offsetRed = maskShift (visuals->redMask);
+ visual->offsetGreen = maskShift (visuals->greenMask);
+ visual->offsetBlue = maskShift (visuals->blueMask);
+ }
+ vid++;
+ visual++;
+ }
+ free(visuals);
+ }
+ miVisuals = NULL;
+ visual = *visualp;
+ depth = *depthp;
+
+ /*
+ * if we did not supplyied by a preferred visual class
+ * check if there is a preferred class in one of the depth
+ * structures - if there is, we want to start looking for the
+ * default visual/depth from that depth.
+ */
+ first_depth = 0;
+ if (preferredVis < 0 && defaultColorVisualClass < 0 ) {
+ for (i = 0; i < ndepth; i++) {
+ if (preferredCVCs[i] >= 0) {
+ first_depth = i;
+ break;
+ }
+ }
+ }
+
+ for (i = first_depth; i < ndepth; i++)
+ {
+ int prefColorVisualClass = -1;
+
+ if (defaultColorVisualClass >= 0)
+ prefColorVisualClass = defaultColorVisualClass;
+ else if (preferredVis >= 0)
+ prefColorVisualClass = preferredVis;
+ else if (preferredCVCs[i] >= 0)
+ prefColorVisualClass = preferredCVCs[i];
+
+ if (*rootDepthp && *rootDepthp != depth[i].depth)
+ continue;
+
+ for (j = 0; j < depth[i].numVids; j++)
+ {
+ for (k = 0; k < nvisual; k++)
+ if (visual[k].vid == depth[i].vids[j])
+ break;
+ if (k == nvisual)
+ continue;
+ if (prefColorVisualClass < 0 ||
+ visual[k].class == prefColorVisualClass)
+ break;
+ }
+ if (j != depth[i].numVids)
+ break;
+ }
+ if (i == ndepth) {
+ i = 0;
+ j = 0;
+ }
+ *rootDepthp = depth[i].depth;
+ *defaultVisp = depth[i].vids[j];
+ free(preferredCVCs);
+
+ return TRUE;
+}
diff --git a/xorg-server/mi/midispcur.c b/xorg-server/mi/midispcur.c
index 9b3e87a57..32c5c9df6 100644
--- a/xorg-server/mi/midispcur.c
+++ b/xorg-server/mi/midispcur.c
@@ -397,7 +397,6 @@ Bool
miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
int x, int y, unsigned long source, unsigned long mask)
{
- miDCScreenPtr pScreenPriv;
miDCCursorPtr pPriv;
miDCBufferPtr pBuffer;
WindowPtr pWin;
@@ -410,8 +409,7 @@ miDCPutUpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
if (!pPriv)
return FALSE;
}
- pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
- miDCScreenKey);
+
pWin = pScreen->root;
pBuffer = miGetDCDevice(pDev, pScreen);
@@ -444,14 +442,11 @@ Bool
miDCSaveUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
int x, int y, int w, int h)
{
- miDCScreenPtr pScreenPriv;
miDCBufferPtr pBuffer;
PixmapPtr pSave;
WindowPtr pWin;
GCPtr pGC;
- pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
- miDCScreenKey);
pBuffer = miGetDCDevice(pDev, pScreen);
pSave = pBuffer->pSave;
@@ -478,14 +473,11 @@ Bool
miDCRestoreUnderCursor (DeviceIntPtr pDev, ScreenPtr pScreen,
int x, int y, int w, int h)
{
- miDCScreenPtr pScreenPriv;
miDCBufferPtr pBuffer;
PixmapPtr pSave;
WindowPtr pWin;
GCPtr pGC;
- pScreenPriv = (miDCScreenPtr)dixLookupPrivate(&pScreen->devPrivates,
- miDCScreenKey);
pBuffer = miGetDCDevice(pDev, pScreen);
pSave = pBuffer->pSave;
diff --git a/xorg-server/mi/mipointer.c b/xorg-server/mi/mipointer.c
index e8ed106ea..db243810c 100644
--- a/xorg-server/mi/mipointer.c
+++ b/xorg-server/mi/mipointer.c
@@ -1,698 +1,697 @@
-/*
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-*/
-
-/**
- * @file
- * This file contains functions to move the pointer on the screen and/or
- * restrict its movement. These functions are divided into two sets:
- * Screen-specific functions that are used as function pointers from other
- * parts of the server (and end up heavily wrapped by e.g. animcur and
- * xfixes):
- * miPointerConstrainCursor
- * miPointerCursorLimits
- * miPointerDisplayCursor
- * miPointerRealizeCursor
- * miPointerUnrealizeCursor
- * miPointerSetCursorPosition
- * miRecolorCursor
- * miPointerDeviceInitialize
- * miPointerDeviceCleanup
- * If wrapped, these are the last element in the wrapping chain. They may
- * call into sprite-specific code through further function pointers though.
- *
- * The second type of functions are those that are directly called by the
- * DIX, DDX and some drivers.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-# include <X11/X.h>
-# include <X11/Xmd.h>
-# include <X11/Xproto.h>
-# include "misc.h"
-# include "windowstr.h"
-# include "pixmapstr.h"
-# include "mi.h"
-# include "scrnintstr.h"
-# include "mipointrst.h"
-# include "cursorstr.h"
-# include "dixstruct.h"
-# include "inputstr.h"
-# include "inpututils.h"
-
-DevPrivateKeyRec miPointerScreenKeyRec;
-
-#define GetScreenPrivate(s) ((miPointerScreenPtr) \
- dixLookupPrivate(&(s)->devPrivates, miPointerScreenKey))
-#define SetupScreen(s) miPointerScreenPtr pScreenPriv = GetScreenPrivate(s)
-
-DevPrivateKeyRec miPointerPrivKeyRec;
-
-#define MIPOINTER(dev) \
- (IsFloating(dev) ? \
- (miPointerPtr)dixLookupPrivate(&(dev)->devPrivates, miPointerPrivKey): \
- (miPointerPtr)dixLookupPrivate(&(GetMaster(dev, MASTER_POINTER))->devPrivates, miPointerPrivKey))
-
-static Bool miPointerRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
- CursorPtr pCursor);
-static Bool miPointerUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
- CursorPtr pCursor);
-static Bool miPointerDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
- CursorPtr pCursor);
-static void miPointerConstrainCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
- BoxPtr pBox);
-static void miPointerCursorLimits(DeviceIntPtr pDev, ScreenPtr pScreen,
- CursorPtr pCursor, BoxPtr pHotBox,
- BoxPtr pTopLeftBox);
-static Bool miPointerSetCursorPosition(DeviceIntPtr pDev, ScreenPtr pScreen,
- int x, int y,
- Bool generateEvent);
-static Bool miPointerCloseScreen(int index, ScreenPtr pScreen);
-static void miPointerMove(DeviceIntPtr pDev, ScreenPtr pScreen,
- int x, int y);
-static Bool miPointerDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen);
-static void miPointerDeviceCleanup(DeviceIntPtr pDev,
- ScreenPtr pScreen);
-static void miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y);
-
-static EventList* events; /* for WarpPointer MotionNotifies */
-
-Bool
-miPointerInitialize (ScreenPtr pScreen,
- miPointerSpriteFuncPtr spriteFuncs,
- miPointerScreenFuncPtr screenFuncs,
- Bool waitForUpdate)
-{
- miPointerScreenPtr pScreenPriv;
-
- if (!dixRegisterPrivateKey(&miPointerScreenKeyRec, PRIVATE_SCREEN, 0))
- return FALSE;
-
- if (!dixRegisterPrivateKey(&miPointerPrivKeyRec, PRIVATE_DEVICE, 0))
- return FALSE;
-
- pScreenPriv = malloc(sizeof (miPointerScreenRec));
- if (!pScreenPriv)
- return FALSE;
- pScreenPriv->spriteFuncs = spriteFuncs;
- pScreenPriv->screenFuncs = screenFuncs;
- /*
- * check for uninitialized methods
- */
- if (!screenFuncs->EnqueueEvent)
- screenFuncs->EnqueueEvent = mieqEnqueue;
- if (!screenFuncs->NewEventScreen)
- screenFuncs->NewEventScreen = mieqSwitchScreen;
- pScreenPriv->waitForUpdate = waitForUpdate;
- pScreenPriv->showTransparent = FALSE;
- pScreenPriv->CloseScreen = pScreen->CloseScreen;
- pScreen->CloseScreen = miPointerCloseScreen;
- dixSetPrivate(&pScreen->devPrivates, miPointerScreenKey, pScreenPriv);
- /*
- * set up screen cursor method table
- */
- pScreen->ConstrainCursor = miPointerConstrainCursor;
- pScreen->CursorLimits = miPointerCursorLimits;
- pScreen->DisplayCursor = miPointerDisplayCursor;
- pScreen->RealizeCursor = miPointerRealizeCursor;
- pScreen->UnrealizeCursor = miPointerUnrealizeCursor;
- pScreen->SetCursorPosition = miPointerSetCursorPosition;
- pScreen->RecolorCursor = miRecolorCursor;
- pScreen->DeviceCursorInitialize = miPointerDeviceInitialize;
- pScreen->DeviceCursorCleanup = miPointerDeviceCleanup;
-
- events = NULL;
- return TRUE;
-}
-
-/**
- * Destroy screen-specific information.
- *
- * @param index Screen index of the screen in screenInfo.screens[]
- * @param pScreen The actual screen pointer
- */
-static Bool
-miPointerCloseScreen (int index, ScreenPtr pScreen)
-{
- SetupScreen(pScreen);
-
- pScreen->CloseScreen = pScreenPriv->CloseScreen;
- free((pointer) pScreenPriv);
- FreeEventList(events, GetMaximumEventsNum());
- events = NULL;
- return (*pScreen->CloseScreen) (index, pScreen);
-}
-
-/*
- * DIX/DDX interface routines
- */
-
-static Bool
-miPointerRealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
-{
- SetupScreen(pScreen);
- return (*pScreenPriv->spriteFuncs->RealizeCursor) (pDev, pScreen, pCursor);
-}
-
-static Bool
-miPointerUnrealizeCursor (DeviceIntPtr pDev,
- ScreenPtr pScreen,
- CursorPtr pCursor)
-{
- SetupScreen(pScreen);
- return (*pScreenPriv->spriteFuncs->UnrealizeCursor) (pDev, pScreen, pCursor);
-}
-
-static Bool
-miPointerDisplayCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
-{
- miPointerPtr pPointer;
-
- /* return for keyboards */
- if (!IsPointerDevice(pDev))
- return FALSE;
-
- pPointer = MIPOINTER(pDev);
-
- pPointer->pCursor = pCursor;
- pPointer->pScreen = pScreen;
- miPointerUpdateSprite(pDev);
- return TRUE;
-}
-
-/**
- * Set up the constraints for the given device. This function does not
- * actually constrain the cursor but merely copies the given box to the
- * internal constraint storage.
- *
- * @param pDev The device to constrain to the box
- * @param pBox The rectangle to constrain the cursor to
- * @param pScreen Used for copying screen confinement
- */
-static void
-miPointerConstrainCursor (DeviceIntPtr pDev, ScreenPtr pScreen, BoxPtr pBox)
-{
- miPointerPtr pPointer;
-
- pPointer = MIPOINTER(pDev);
-
- pPointer->limits = *pBox;
- pPointer->confined = PointerConfinedToScreen(pDev);
-}
-
-/**
- * Should calculate the box for the given cursor, based on screen and the
- * confinement given. But we assume that whatever box is passed in is valid
- * anyway.
- *
- * @param pDev The device to calculate the cursor limits for
- * @param pScreen The screen the confinement happens on
- * @param pCursor The screen the confinement happens on
- * @param pHotBox The confinement box for the cursor
- * @param[out] pTopLeftBox The new confinement box, always *pHotBox.
- */
-static void
-miPointerCursorLimits(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
- BoxPtr pHotBox, BoxPtr pTopLeftBox)
-{
- *pTopLeftBox = *pHotBox;
-}
-
-/**
- * Set the device's cursor position to the x/y position on the given screen.
- * Generates and event if required.
- *
- * This function is called from:
- * - sprite init code to place onto initial position
- * - the various WarpPointer implementations (core, XI, Xinerama, dmx,…)
- * - during the cursor update path in CheckMotion
- * - in the Xinerama part of NewCurrentScreen
- * - when a RandR/RandR1.2 mode was applied (it may have moved the pointer, so
- * it's set back to the original pos)
- *
- * @param pDev The device to move
- * @param pScreen The screen the device is on
- * @param x The x coordinate in per-screen coordinates
- * @param y The y coordinate in per-screen coordinates
- * @param generateEvent True if the pointer movement should generate an
- * event.
- *
- * @return TRUE in all cases
- */
-static Bool
-miPointerSetCursorPosition(DeviceIntPtr pDev, ScreenPtr pScreen,
- int x, int y, Bool generateEvent)
-{
- SetupScreen (pScreen);
- miPointerPtr pPointer = MIPOINTER(pDev);
-
- pPointer->generateEvent = generateEvent;
-
- if (pScreen->ConstrainCursorHarder)
- pScreen->ConstrainCursorHarder(pDev, pScreen, Absolute, &x, &y);
-
- /* device dependent - must pend signal and call miPointerWarpCursor */
- (*pScreenPriv->screenFuncs->WarpCursor) (pDev, pScreen, x, y);
- if (!generateEvent)
- miPointerUpdateSprite(pDev);
- return TRUE;
-}
-
-/**
- * Set up sprite information for the device.
- * This function will be called once for each device after it is initialized
- * in the DIX.
- *
- * @param pDev The newly created device
- * @param pScreen The initial sprite scree.
- */
-static Bool
-miPointerDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
-{
- miPointerPtr pPointer;
- SetupScreen (pScreen);
-
- pPointer = malloc(sizeof(miPointerRec));
- if (!pPointer)
- return FALSE;
-
- pPointer->pScreen = NULL;
- pPointer->pSpriteScreen = NULL;
- pPointer->pCursor = NULL;
- pPointer->pSpriteCursor = NULL;
- pPointer->limits.x1 = 0;
- pPointer->limits.x2 = 32767;
- pPointer->limits.y1 = 0;
- pPointer->limits.y2 = 32767;
- pPointer->confined = FALSE;
- pPointer->x = 0;
- pPointer->y = 0;
- pPointer->generateEvent = FALSE;
-
- if (!((*pScreenPriv->spriteFuncs->DeviceCursorInitialize)(pDev, pScreen)))
- {
- free(pPointer);
- return FALSE;
- }
-
- dixSetPrivate(&pDev->devPrivates, miPointerPrivKey, pPointer);
- return TRUE;
-}
-
-/**
- * Clean up after device.
- * This function will be called once before the device is freed in the DIX
- *
- * @param pDev The device to be removed from the server
- * @param pScreen Current screen of the device
- */
-static void
-miPointerDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
-{
- SetupScreen(pScreen);
-
- if (!IsMaster(pDev) && !IsFloating(pDev))
- return;
-
- (*pScreenPriv->spriteFuncs->DeviceCursorCleanup)(pDev, pScreen);
- free(dixLookupPrivate(&pDev->devPrivates, miPointerPrivKey));
- dixSetPrivate(&pDev->devPrivates, miPointerPrivKey, NULL);
-}
-
-
-/**
- * Warp the pointer to the given position on the given screen. May generate
- * an event, depending on whether we're coming from miPointerSetPosition.
- *
- * Once signals are ignored, the WarpCursor function can call this
- *
- * @param pDev The device to warp
- * @param pScreen Screen to warp on
- * @param x The x coordinate in per-screen coordinates
- * @param y The y coordinate in per-screen coordinates
- */
-
-void
-miPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
-{
- miPointerPtr pPointer;
- BOOL changedScreen = FALSE;
-
- SetupScreen (pScreen);
- pPointer = MIPOINTER(pDev);
-
- if (pPointer->pScreen != pScreen)
- {
- (*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen, TRUE);
- changedScreen = TRUE;
- }
-
- if (pPointer->generateEvent)
- miPointerMove (pDev, pScreen, x, y);
- else
- miPointerMoveNoEvent(pDev, pScreen, x, y);
-
- /* Don't call USFS if we use Xinerama, otherwise the root window is
- * updated to the second screen, and we never receive any events.
- * (FDO bug #18668) */
- if (changedScreen
-#ifdef PANORAMIX
- && noPanoramiXExtension
-#endif
- )
- UpdateSpriteForScreen (pDev, pScreen) ;
-}
-
-/**
- * Syncronize the sprite with the cursor.
- *
- * @param pDev The device to sync
- */
-void
-miPointerUpdateSprite (DeviceIntPtr pDev)
-{
- ScreenPtr pScreen;
- miPointerScreenPtr pScreenPriv;
- CursorPtr pCursor;
- int x, y, devx, devy;
- miPointerPtr pPointer;
-
- if (!pDev || !pDev->coreEvents)
- return;
-
- pPointer = MIPOINTER(pDev);
-
- if (!pPointer)
- return;
-
- pScreen = pPointer->pScreen;
- if (!pScreen)
- return;
-
- x = pPointer->x;
- y = pPointer->y;
- devx = pPointer->devx;
- devy = pPointer->devy;
-
- pScreenPriv = GetScreenPrivate (pScreen);
- /*
- * if the cursor has switched screens, disable the sprite
- * on the old screen
- */
- if (pScreen != pPointer->pSpriteScreen)
- {
- if (pPointer->pSpriteScreen)
- {
- miPointerScreenPtr pOldPriv;
-
- pOldPriv = GetScreenPrivate (pPointer->pSpriteScreen);
- if (pPointer->pCursor)
- {
- (*pOldPriv->spriteFuncs->SetCursor)
- (pDev, pPointer->pSpriteScreen, NullCursor, 0, 0);
- }
- (*pOldPriv->screenFuncs->CrossScreen) (pPointer->pSpriteScreen, FALSE);
- }
- (*pScreenPriv->screenFuncs->CrossScreen) (pScreen, TRUE);
- (*pScreenPriv->spriteFuncs->SetCursor)
- (pDev, pScreen, pPointer->pCursor, x, y);
- pPointer->devx = x;
- pPointer->devy = y;
- pPointer->pSpriteCursor = pPointer->pCursor;
- pPointer->pSpriteScreen = pScreen;
- }
- /*
- * if the cursor has changed, display the new one
- */
- else if (pPointer->pCursor != pPointer->pSpriteCursor)
- {
- pCursor = pPointer->pCursor;
- if (!pCursor || (pCursor->bits->emptyMask && !pScreenPriv->showTransparent))
- pCursor = NullCursor;
- (*pScreenPriv->spriteFuncs->SetCursor) (pDev, pScreen, pCursor, x, y);
-
- pPointer->devx = x;
- pPointer->devy = y;
- pPointer->pSpriteCursor = pPointer->pCursor;
- }
- else if (x != devx || y != devy)
- {
- pPointer->devx = x;
- pPointer->devy = y;
- if(pPointer->pCursor && !pPointer->pCursor->bits->emptyMask)
- (*pScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y);
- }
-}
-
-/**
- * Set the device to the coordinates on the given screen.
- *
- * @param pDev The device to move
- * @param screen_no Index of the screen to move to
- * @param x The x coordinate in per-screen coordinates
- * @param y The y coordinate in per-screen coordinates
- */
-void
-miPointerSetScreen(DeviceIntPtr pDev, int screen_no, int x, int y)
-{
- miPointerScreenPtr pScreenPriv;
- ScreenPtr pScreen;
- miPointerPtr pPointer;
-
- pPointer = MIPOINTER(pDev);
-
- pScreen = screenInfo.screens[screen_no];
- pScreenPriv = GetScreenPrivate (pScreen);
- (*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen, FALSE);
- NewCurrentScreen (pDev, pScreen, x, y);
-
- pPointer->limits.x2 = pScreen->width;
- pPointer->limits.y2 = pScreen->height;
-}
-
-/**
- * @return The current screen of the VCP
- */
-ScreenPtr
-miPointerCurrentScreen (void)
-{
- return miPointerGetScreen(inputInfo.pointer);
-}
-
-/**
- * @return The current screen of the given device or NULL.
- */
-ScreenPtr
-miPointerGetScreen(DeviceIntPtr pDev)
-{
- miPointerPtr pPointer = MIPOINTER(pDev);
- return (pPointer) ? pPointer->pScreen : NULL;
-}
-
-/* Controls whether the cursor image should be updated immediately when
- moved (FALSE) or if something else will be responsible for updating
- it later (TRUE). Returns current setting.
- Caller is responsible for calling OsBlockSignal first.
-*/
-Bool
-miPointerSetWaitForUpdate(ScreenPtr pScreen, Bool wait)
-{
- SetupScreen(pScreen);
- Bool prevWait = pScreenPriv->waitForUpdate;
-
- pScreenPriv->waitForUpdate = wait;
- return prevWait;
-}
-
-
-/* Move the pointer on the current screen, and update the sprite. */
-static void
-miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen,
- int x, int y)
-{
- miPointerPtr pPointer;
- SetupScreen(pScreen);
-
- pPointer = MIPOINTER(pDev);
-
- /* Hack: We mustn't call into ->MoveCursor for anything but the
- * VCP, as this may cause a non-HW rendered cursor to be rendered during
- * SIGIO. This again leads to allocs during SIGIO which leads to SIGABRT.
- */
- if (GetMaster(pDev, MASTER_POINTER) == inputInfo.pointer
- && !pScreenPriv->waitForUpdate && pScreen == pPointer->pSpriteScreen)
- {
- pPointer->devx = x;
- pPointer->devy = y;
- if(pPointer->pCursor && !pPointer->pCursor->bits->emptyMask)
- (*pScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y);
- }
-
- pPointer->x = x;
- pPointer->y = y;
- pPointer->pScreen = pScreen;
-}
-
-/**
- * Set the devices' cursor position to the given x/y position.
- *
- * This function is called during the pointer update path in
- * GetPointerEvents and friends (and the same in the xwin DDX).
- *
- * The coordinates provided are always absolute. The parameter mode whether
- * it was relative or absolute movement that landed us at those coordinates.
- *
- * @param pDev The device to move
- * @param mode Movement mode (Absolute or Relative)
- * @param[in,out] x The x coordiante in screen coordinates (in regards to total
- * desktop size)
- * @param[in,out] y The y coordiante in screen coordinates (in regards to total
- * desktop size)
- */
-void
-miPointerSetPosition(DeviceIntPtr pDev, int mode, int *x, int *y)
-{
- miPointerScreenPtr pScreenPriv;
- ScreenPtr pScreen;
- ScreenPtr newScreen;
-
- miPointerPtr pPointer;
-
- if (!pDev || !pDev->coreEvents)
- return;
-
- pPointer = MIPOINTER(pDev);
- pScreen = pPointer->pScreen;
- if (!pScreen)
- return; /* called before ready */
-
- if (*x < 0 || *x >= pScreen->width || *y < 0 || *y >= pScreen->height)
- {
- pScreenPriv = GetScreenPrivate (pScreen);
- if (!pPointer->confined)
- {
- newScreen = pScreen;
- (*pScreenPriv->screenFuncs->CursorOffScreen) (&newScreen, x, y);
- if (newScreen != pScreen)
- {
- pScreen = newScreen;
- (*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen,
- FALSE);
- pScreenPriv = GetScreenPrivate (pScreen);
- /* Smash the confine to the new screen */
- pPointer->limits.x2 = pScreen->width;
- pPointer->limits.y2 = pScreen->height;
- }
- }
- }
- /* Constrain the sprite to the current limits. */
- if (*x < pPointer->limits.x1)
- *x = pPointer->limits.x1;
- if (*x >= pPointer->limits.x2)
- *x = pPointer->limits.x2 - 1;
- if (*y < pPointer->limits.y1)
- *y = pPointer->limits.y1;
- if (*y >= pPointer->limits.y2)
- *y = pPointer->limits.y2 - 1;
-
- if (pScreen->ConstrainCursorHarder)
- pScreen->ConstrainCursorHarder(pDev, pScreen, mode, x, y);
-
- if (pPointer->x == *x && pPointer->y == *y &&
- pPointer->pScreen == pScreen)
- return;
-
- miPointerMoveNoEvent(pDev, pScreen, *x, *y);
-}
-
-/**
- * Get the current position of the device in desktop coordinates.
- *
- * @param x Return value for the current x coordinate in desktop coordiates.
- * @param y Return value for the current y coordinate in desktop coordiates.
- */
-void
-miPointerGetPosition(DeviceIntPtr pDev, int *x, int *y)
-{
- *x = MIPOINTER(pDev)->x;
- *y = MIPOINTER(pDev)->y;
-}
-
-#ifdef XQUARTZ
-#include <pthread.h>
-void darwinEvents_lock(void);
-void darwinEvents_unlock(void);
-#endif
-
-/**
- * Move the device's pointer to the x/y coordinates on the given screen.
- * This function generates and enqueues pointer events.
- *
- * @param pDev The device to move
- * @param pScreen The screen the device is on
- * @param x The x coordinate in per-screen coordinates
- * @param y The y coordinate in per-screen coordinates
- */
-void
-miPointerMove (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
-{
- int i, nevents;
- int valuators[2];
- ValuatorMask mask;
-
- miPointerMoveNoEvent(pDev, pScreen, x, y);
-
- /* generate motion notify */
- valuators[0] = x;
- valuators[1] = y;
-
- if (!events)
- {
- events = InitEventList(GetMaximumEventsNum());
-
- if (!events)
- {
- FatalError("Could not allocate event store.\n");
- return;
- }
- }
-
- valuator_mask_set_range(&mask, 0, 2, valuators);
- nevents = GetPointerEvents(events, pDev, MotionNotify, 0,
- POINTER_SCREEN | POINTER_ABSOLUTE, &mask);
-
- OsBlockSignals();
-#ifdef XQUARTZ
- darwinEvents_lock();
-#endif
- for (i = 0; i < nevents; i++)
- mieqEnqueue(pDev, (InternalEvent*)events[i].event);
-#ifdef XQUARTZ
- darwinEvents_unlock();
-#endif
- OsReleaseSignals();
-}
+/*
+
+Copyright 1989, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+*/
+
+/**
+ * @file
+ * This file contains functions to move the pointer on the screen and/or
+ * restrict its movement. These functions are divided into two sets:
+ * Screen-specific functions that are used as function pointers from other
+ * parts of the server (and end up heavily wrapped by e.g. animcur and
+ * xfixes):
+ * miPointerConstrainCursor
+ * miPointerCursorLimits
+ * miPointerDisplayCursor
+ * miPointerRealizeCursor
+ * miPointerUnrealizeCursor
+ * miPointerSetCursorPosition
+ * miRecolorCursor
+ * miPointerDeviceInitialize
+ * miPointerDeviceCleanup
+ * If wrapped, these are the last element in the wrapping chain. They may
+ * call into sprite-specific code through further function pointers though.
+ *
+ * The second type of functions are those that are directly called by the
+ * DIX, DDX and some drivers.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+# include <X11/X.h>
+# include <X11/Xmd.h>
+# include <X11/Xproto.h>
+# include "misc.h"
+# include "windowstr.h"
+# include "pixmapstr.h"
+# include "mi.h"
+# include "scrnintstr.h"
+# include "mipointrst.h"
+# include "cursorstr.h"
+# include "dixstruct.h"
+# include "inputstr.h"
+# include "inpututils.h"
+
+DevPrivateKeyRec miPointerScreenKeyRec;
+
+#define GetScreenPrivate(s) ((miPointerScreenPtr) \
+ dixLookupPrivate(&(s)->devPrivates, miPointerScreenKey))
+#define SetupScreen(s) miPointerScreenPtr pScreenPriv = GetScreenPrivate(s)
+
+DevPrivateKeyRec miPointerPrivKeyRec;
+
+#define MIPOINTER(dev) \
+ (IsFloating(dev) ? \
+ (miPointerPtr)dixLookupPrivate(&(dev)->devPrivates, miPointerPrivKey): \
+ (miPointerPtr)dixLookupPrivate(&(GetMaster(dev, MASTER_POINTER))->devPrivates, miPointerPrivKey))
+
+static Bool miPointerRealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+ CursorPtr pCursor);
+static Bool miPointerUnrealizeCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+ CursorPtr pCursor);
+static Bool miPointerDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+ CursorPtr pCursor);
+static void miPointerConstrainCursor(DeviceIntPtr pDev, ScreenPtr pScreen,
+ BoxPtr pBox);
+static void miPointerCursorLimits(DeviceIntPtr pDev, ScreenPtr pScreen,
+ CursorPtr pCursor, BoxPtr pHotBox,
+ BoxPtr pTopLeftBox);
+static Bool miPointerSetCursorPosition(DeviceIntPtr pDev, ScreenPtr pScreen,
+ int x, int y,
+ Bool generateEvent);
+static Bool miPointerCloseScreen(int index, ScreenPtr pScreen);
+static void miPointerMove(DeviceIntPtr pDev, ScreenPtr pScreen,
+ int x, int y);
+static Bool miPointerDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen);
+static void miPointerDeviceCleanup(DeviceIntPtr pDev,
+ ScreenPtr pScreen);
+static void miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y);
+
+static EventList* events; /* for WarpPointer MotionNotifies */
+
+Bool
+miPointerInitialize (ScreenPtr pScreen,
+ miPointerSpriteFuncPtr spriteFuncs,
+ miPointerScreenFuncPtr screenFuncs,
+ Bool waitForUpdate)
+{
+ miPointerScreenPtr pScreenPriv;
+
+ if (!dixRegisterPrivateKey(&miPointerScreenKeyRec, PRIVATE_SCREEN, 0))
+ return FALSE;
+
+ if (!dixRegisterPrivateKey(&miPointerPrivKeyRec, PRIVATE_DEVICE, 0))
+ return FALSE;
+
+ pScreenPriv = malloc(sizeof (miPointerScreenRec));
+ if (!pScreenPriv)
+ return FALSE;
+ pScreenPriv->spriteFuncs = spriteFuncs;
+ pScreenPriv->screenFuncs = screenFuncs;
+ /*
+ * check for uninitialized methods
+ */
+ if (!screenFuncs->EnqueueEvent)
+ screenFuncs->EnqueueEvent = mieqEnqueue;
+ if (!screenFuncs->NewEventScreen)
+ screenFuncs->NewEventScreen = mieqSwitchScreen;
+ pScreenPriv->waitForUpdate = waitForUpdate;
+ pScreenPriv->showTransparent = FALSE;
+ pScreenPriv->CloseScreen = pScreen->CloseScreen;
+ pScreen->CloseScreen = miPointerCloseScreen;
+ dixSetPrivate(&pScreen->devPrivates, miPointerScreenKey, pScreenPriv);
+ /*
+ * set up screen cursor method table
+ */
+ pScreen->ConstrainCursor = miPointerConstrainCursor;
+ pScreen->CursorLimits = miPointerCursorLimits;
+ pScreen->DisplayCursor = miPointerDisplayCursor;
+ pScreen->RealizeCursor = miPointerRealizeCursor;
+ pScreen->UnrealizeCursor = miPointerUnrealizeCursor;
+ pScreen->SetCursorPosition = miPointerSetCursorPosition;
+ pScreen->RecolorCursor = miRecolorCursor;
+ pScreen->DeviceCursorInitialize = miPointerDeviceInitialize;
+ pScreen->DeviceCursorCleanup = miPointerDeviceCleanup;
+
+ events = NULL;
+ return TRUE;
+}
+
+/**
+ * Destroy screen-specific information.
+ *
+ * @param index Screen index of the screen in screenInfo.screens[]
+ * @param pScreen The actual screen pointer
+ */
+static Bool
+miPointerCloseScreen (int index, ScreenPtr pScreen)
+{
+ SetupScreen(pScreen);
+
+ pScreen->CloseScreen = pScreenPriv->CloseScreen;
+ free((pointer) pScreenPriv);
+ FreeEventList(events, GetMaximumEventsNum());
+ events = NULL;
+ return (*pScreen->CloseScreen) (index, pScreen);
+}
+
+/*
+ * DIX/DDX interface routines
+ */
+
+static Bool
+miPointerRealizeCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
+{
+ SetupScreen(pScreen);
+ return (*pScreenPriv->spriteFuncs->RealizeCursor) (pDev, pScreen, pCursor);
+}
+
+static Bool
+miPointerUnrealizeCursor (DeviceIntPtr pDev,
+ ScreenPtr pScreen,
+ CursorPtr pCursor)
+{
+ SetupScreen(pScreen);
+ return (*pScreenPriv->spriteFuncs->UnrealizeCursor) (pDev, pScreen, pCursor);
+}
+
+static Bool
+miPointerDisplayCursor (DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
+{
+ miPointerPtr pPointer;
+
+ /* return for keyboards */
+ if (!IsPointerDevice(pDev))
+ return FALSE;
+
+ pPointer = MIPOINTER(pDev);
+
+ pPointer->pCursor = pCursor;
+ pPointer->pScreen = pScreen;
+ miPointerUpdateSprite(pDev);
+ return TRUE;
+}
+
+/**
+ * Set up the constraints for the given device. This function does not
+ * actually constrain the cursor but merely copies the given box to the
+ * internal constraint storage.
+ *
+ * @param pDev The device to constrain to the box
+ * @param pBox The rectangle to constrain the cursor to
+ * @param pScreen Used for copying screen confinement
+ */
+static void
+miPointerConstrainCursor (DeviceIntPtr pDev, ScreenPtr pScreen, BoxPtr pBox)
+{
+ miPointerPtr pPointer;
+
+ pPointer = MIPOINTER(pDev);
+
+ pPointer->limits = *pBox;
+ pPointer->confined = PointerConfinedToScreen(pDev);
+}
+
+/**
+ * Should calculate the box for the given cursor, based on screen and the
+ * confinement given. But we assume that whatever box is passed in is valid
+ * anyway.
+ *
+ * @param pDev The device to calculate the cursor limits for
+ * @param pScreen The screen the confinement happens on
+ * @param pCursor The screen the confinement happens on
+ * @param pHotBox The confinement box for the cursor
+ * @param[out] pTopLeftBox The new confinement box, always *pHotBox.
+ */
+static void
+miPointerCursorLimits(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor,
+ BoxPtr pHotBox, BoxPtr pTopLeftBox)
+{
+ *pTopLeftBox = *pHotBox;
+}
+
+/**
+ * Set the device's cursor position to the x/y position on the given screen.
+ * Generates and event if required.
+ *
+ * This function is called from:
+ * - sprite init code to place onto initial position
+ * - the various WarpPointer implementations (core, XI, Xinerama, dmx,…)
+ * - during the cursor update path in CheckMotion
+ * - in the Xinerama part of NewCurrentScreen
+ * - when a RandR/RandR1.2 mode was applied (it may have moved the pointer, so
+ * it's set back to the original pos)
+ *
+ * @param pDev The device to move
+ * @param pScreen The screen the device is on
+ * @param x The x coordinate in per-screen coordinates
+ * @param y The y coordinate in per-screen coordinates
+ * @param generateEvent True if the pointer movement should generate an
+ * event.
+ *
+ * @return TRUE in all cases
+ */
+static Bool
+miPointerSetCursorPosition(DeviceIntPtr pDev, ScreenPtr pScreen,
+ int x, int y, Bool generateEvent)
+{
+ SetupScreen (pScreen);
+ miPointerPtr pPointer = MIPOINTER(pDev);
+
+ pPointer->generateEvent = generateEvent;
+
+ if (pScreen->ConstrainCursorHarder)
+ pScreen->ConstrainCursorHarder(pDev, pScreen, Absolute, &x, &y);
+
+ /* device dependent - must pend signal and call miPointerWarpCursor */
+ (*pScreenPriv->screenFuncs->WarpCursor) (pDev, pScreen, x, y);
+ if (!generateEvent)
+ miPointerUpdateSprite(pDev);
+ return TRUE;
+}
+
+/**
+ * Set up sprite information for the device.
+ * This function will be called once for each device after it is initialized
+ * in the DIX.
+ *
+ * @param pDev The newly created device
+ * @param pScreen The initial sprite scree.
+ */
+static Bool
+miPointerDeviceInitialize(DeviceIntPtr pDev, ScreenPtr pScreen)
+{
+ miPointerPtr pPointer;
+ SetupScreen (pScreen);
+
+ pPointer = malloc(sizeof(miPointerRec));
+ if (!pPointer)
+ return FALSE;
+
+ pPointer->pScreen = NULL;
+ pPointer->pSpriteScreen = NULL;
+ pPointer->pCursor = NULL;
+ pPointer->pSpriteCursor = NULL;
+ pPointer->limits.x1 = 0;
+ pPointer->limits.x2 = 32767;
+ pPointer->limits.y1 = 0;
+ pPointer->limits.y2 = 32767;
+ pPointer->confined = FALSE;
+ pPointer->x = 0;
+ pPointer->y = 0;
+ pPointer->generateEvent = FALSE;
+
+ if (!((*pScreenPriv->spriteFuncs->DeviceCursorInitialize)(pDev, pScreen)))
+ {
+ free(pPointer);
+ return FALSE;
+ }
+
+ dixSetPrivate(&pDev->devPrivates, miPointerPrivKey, pPointer);
+ return TRUE;
+}
+
+/**
+ * Clean up after device.
+ * This function will be called once before the device is freed in the DIX
+ *
+ * @param pDev The device to be removed from the server
+ * @param pScreen Current screen of the device
+ */
+static void
+miPointerDeviceCleanup(DeviceIntPtr pDev, ScreenPtr pScreen)
+{
+ SetupScreen(pScreen);
+
+ if (!IsMaster(pDev) && !IsFloating(pDev))
+ return;
+
+ (*pScreenPriv->spriteFuncs->DeviceCursorCleanup)(pDev, pScreen);
+ free(dixLookupPrivate(&pDev->devPrivates, miPointerPrivKey));
+ dixSetPrivate(&pDev->devPrivates, miPointerPrivKey, NULL);
+}
+
+
+/**
+ * Warp the pointer to the given position on the given screen. May generate
+ * an event, depending on whether we're coming from miPointerSetPosition.
+ *
+ * Once signals are ignored, the WarpCursor function can call this
+ *
+ * @param pDev The device to warp
+ * @param pScreen Screen to warp on
+ * @param x The x coordinate in per-screen coordinates
+ * @param y The y coordinate in per-screen coordinates
+ */
+
+void
+miPointerWarpCursor (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
+{
+ miPointerPtr pPointer;
+ BOOL changedScreen = FALSE;
+
+ SetupScreen (pScreen);
+ pPointer = MIPOINTER(pDev);
+
+ if (pPointer->pScreen != pScreen)
+ {
+ (*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen, TRUE);
+ changedScreen = TRUE;
+ }
+
+ if (pPointer->generateEvent)
+ miPointerMove (pDev, pScreen, x, y);
+ else
+ miPointerMoveNoEvent(pDev, pScreen, x, y);
+
+ /* Don't call USFS if we use Xinerama, otherwise the root window is
+ * updated to the second screen, and we never receive any events.
+ * (FDO bug #18668) */
+ if (changedScreen
+#ifdef PANORAMIX
+ && noPanoramiXExtension
+#endif
+ )
+ UpdateSpriteForScreen (pDev, pScreen) ;
+}
+
+/**
+ * Syncronize the sprite with the cursor.
+ *
+ * @param pDev The device to sync
+ */
+void
+miPointerUpdateSprite (DeviceIntPtr pDev)
+{
+ ScreenPtr pScreen;
+ miPointerScreenPtr pScreenPriv;
+ CursorPtr pCursor;
+ int x, y, devx, devy;
+ miPointerPtr pPointer;
+
+ if (!pDev || !pDev->coreEvents)
+ return;
+
+ pPointer = MIPOINTER(pDev);
+
+ if (!pPointer)
+ return;
+
+ pScreen = pPointer->pScreen;
+ if (!pScreen)
+ return;
+
+ x = pPointer->x;
+ y = pPointer->y;
+ devx = pPointer->devx;
+ devy = pPointer->devy;
+
+ pScreenPriv = GetScreenPrivate (pScreen);
+ /*
+ * if the cursor has switched screens, disable the sprite
+ * on the old screen
+ */
+ if (pScreen != pPointer->pSpriteScreen)
+ {
+ if (pPointer->pSpriteScreen)
+ {
+ miPointerScreenPtr pOldPriv;
+
+ pOldPriv = GetScreenPrivate (pPointer->pSpriteScreen);
+ if (pPointer->pCursor)
+ {
+ (*pOldPriv->spriteFuncs->SetCursor)
+ (pDev, pPointer->pSpriteScreen, NullCursor, 0, 0);
+ }
+ (*pOldPriv->screenFuncs->CrossScreen) (pPointer->pSpriteScreen, FALSE);
+ }
+ (*pScreenPriv->screenFuncs->CrossScreen) (pScreen, TRUE);
+ (*pScreenPriv->spriteFuncs->SetCursor)
+ (pDev, pScreen, pPointer->pCursor, x, y);
+ pPointer->devx = x;
+ pPointer->devy = y;
+ pPointer->pSpriteCursor = pPointer->pCursor;
+ pPointer->pSpriteScreen = pScreen;
+ }
+ /*
+ * if the cursor has changed, display the new one
+ */
+ else if (pPointer->pCursor != pPointer->pSpriteCursor)
+ {
+ pCursor = pPointer->pCursor;
+ if (!pCursor || (pCursor->bits->emptyMask && !pScreenPriv->showTransparent))
+ pCursor = NullCursor;
+ (*pScreenPriv->spriteFuncs->SetCursor) (pDev, pScreen, pCursor, x, y);
+
+ pPointer->devx = x;
+ pPointer->devy = y;
+ pPointer->pSpriteCursor = pPointer->pCursor;
+ }
+ else if (x != devx || y != devy)
+ {
+ pPointer->devx = x;
+ pPointer->devy = y;
+ if(pPointer->pCursor && !pPointer->pCursor->bits->emptyMask)
+ (*pScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y);
+ }
+}
+
+/**
+ * Set the device to the coordinates on the given screen.
+ *
+ * @param pDev The device to move
+ * @param screen_no Index of the screen to move to
+ * @param x The x coordinate in per-screen coordinates
+ * @param y The y coordinate in per-screen coordinates
+ */
+void
+miPointerSetScreen(DeviceIntPtr pDev, int screen_no, int x, int y)
+{
+ miPointerScreenPtr pScreenPriv;
+ ScreenPtr pScreen;
+ miPointerPtr pPointer;
+
+ pPointer = MIPOINTER(pDev);
+
+ pScreen = screenInfo.screens[screen_no];
+ pScreenPriv = GetScreenPrivate (pScreen);
+ (*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen, FALSE);
+ NewCurrentScreen (pDev, pScreen, x, y);
+
+ pPointer->limits.x2 = pScreen->width;
+ pPointer->limits.y2 = pScreen->height;
+}
+
+/**
+ * @return The current screen of the VCP
+ */
+ScreenPtr
+miPointerCurrentScreen (void)
+{
+ return miPointerGetScreen(inputInfo.pointer);
+}
+
+/**
+ * @return The current screen of the given device or NULL.
+ */
+ScreenPtr
+miPointerGetScreen(DeviceIntPtr pDev)
+{
+ miPointerPtr pPointer = MIPOINTER(pDev);
+ return (pPointer) ? pPointer->pScreen : NULL;
+}
+
+/* Controls whether the cursor image should be updated immediately when
+ moved (FALSE) or if something else will be responsible for updating
+ it later (TRUE). Returns current setting.
+ Caller is responsible for calling OsBlockSignal first.
+*/
+Bool
+miPointerSetWaitForUpdate(ScreenPtr pScreen, Bool wait)
+{
+ SetupScreen(pScreen);
+ Bool prevWait = pScreenPriv->waitForUpdate;
+
+ pScreenPriv->waitForUpdate = wait;
+ return prevWait;
+}
+
+
+/* Move the pointer on the current screen, and update the sprite. */
+static void
+miPointerMoveNoEvent (DeviceIntPtr pDev, ScreenPtr pScreen,
+ int x, int y)
+{
+ miPointerPtr pPointer;
+ SetupScreen(pScreen);
+
+ pPointer = MIPOINTER(pDev);
+
+ /* Hack: We mustn't call into ->MoveCursor for anything but the
+ * VCP, as this may cause a non-HW rendered cursor to be rendered during
+ * SIGIO. This again leads to allocs during SIGIO which leads to SIGABRT.
+ */
+ if (GetMaster(pDev, MASTER_POINTER) == inputInfo.pointer
+ && !pScreenPriv->waitForUpdate && pScreen == pPointer->pSpriteScreen)
+ {
+ pPointer->devx = x;
+ pPointer->devy = y;
+ if(pPointer->pCursor && !pPointer->pCursor->bits->emptyMask)
+ (*pScreenPriv->spriteFuncs->MoveCursor) (pDev, pScreen, x, y);
+ }
+
+ pPointer->x = x;
+ pPointer->y = y;
+ pPointer->pScreen = pScreen;
+}
+
+/**
+ * Set the devices' cursor position to the given x/y position.
+ *
+ * This function is called during the pointer update path in
+ * GetPointerEvents and friends (and the same in the xwin DDX).
+ *
+ * The coordinates provided are always absolute. The parameter mode whether
+ * it was relative or absolute movement that landed us at those coordinates.
+ *
+ * @param pDev The device to move
+ * @param mode Movement mode (Absolute or Relative)
+ * @param[in,out] x The x coordiante in screen coordinates (in regards to total
+ * desktop size)
+ * @param[in,out] y The y coordiante in screen coordinates (in regards to total
+ * desktop size)
+ */
+void
+miPointerSetPosition(DeviceIntPtr pDev, int mode, int *x, int *y)
+{
+ miPointerScreenPtr pScreenPriv;
+ ScreenPtr pScreen;
+ ScreenPtr newScreen;
+
+ miPointerPtr pPointer;
+
+ if (!pDev || !pDev->coreEvents)
+ return;
+
+ pPointer = MIPOINTER(pDev);
+ pScreen = pPointer->pScreen;
+ if (!pScreen)
+ return; /* called before ready */
+
+ if (*x < 0 || *x >= pScreen->width || *y < 0 || *y >= pScreen->height)
+ {
+ pScreenPriv = GetScreenPrivate (pScreen);
+ if (!pPointer->confined)
+ {
+ newScreen = pScreen;
+ (*pScreenPriv->screenFuncs->CursorOffScreen) (&newScreen, x, y);
+ if (newScreen != pScreen)
+ {
+ pScreen = newScreen;
+ (*pScreenPriv->screenFuncs->NewEventScreen) (pDev, pScreen,
+ FALSE);
+ /* Smash the confine to the new screen */
+ pPointer->limits.x2 = pScreen->width;
+ pPointer->limits.y2 = pScreen->height;
+ }
+ }
+ }
+ /* Constrain the sprite to the current limits. */
+ if (*x < pPointer->limits.x1)
+ *x = pPointer->limits.x1;
+ if (*x >= pPointer->limits.x2)
+ *x = pPointer->limits.x2 - 1;
+ if (*y < pPointer->limits.y1)
+ *y = pPointer->limits.y1;
+ if (*y >= pPointer->limits.y2)
+ *y = pPointer->limits.y2 - 1;
+
+ if (pScreen->ConstrainCursorHarder)
+ pScreen->ConstrainCursorHarder(pDev, pScreen, mode, x, y);
+
+ if (pPointer->x == *x && pPointer->y == *y &&
+ pPointer->pScreen == pScreen)
+ return;
+
+ miPointerMoveNoEvent(pDev, pScreen, *x, *y);
+}
+
+/**
+ * Get the current position of the device in desktop coordinates.
+ *
+ * @param x Return value for the current x coordinate in desktop coordiates.
+ * @param y Return value for the current y coordinate in desktop coordiates.
+ */
+void
+miPointerGetPosition(DeviceIntPtr pDev, int *x, int *y)
+{
+ *x = MIPOINTER(pDev)->x;
+ *y = MIPOINTER(pDev)->y;
+}
+
+#ifdef XQUARTZ
+#include <pthread.h>
+void darwinEvents_lock(void);
+void darwinEvents_unlock(void);
+#endif
+
+/**
+ * Move the device's pointer to the x/y coordinates on the given screen.
+ * This function generates and enqueues pointer events.
+ *
+ * @param pDev The device to move
+ * @param pScreen The screen the device is on
+ * @param x The x coordinate in per-screen coordinates
+ * @param y The y coordinate in per-screen coordinates
+ */
+void
+miPointerMove (DeviceIntPtr pDev, ScreenPtr pScreen, int x, int y)
+{
+ int i, nevents;
+ int valuators[2];
+ ValuatorMask mask;
+
+ miPointerMoveNoEvent(pDev, pScreen, x, y);
+
+ /* generate motion notify */
+ valuators[0] = x;
+ valuators[1] = y;
+
+ if (!events)
+ {
+ events = InitEventList(GetMaximumEventsNum());
+
+ if (!events)
+ {
+ FatalError("Could not allocate event store.\n");
+ return;
+ }
+ }
+
+ valuator_mask_set_range(&mask, 0, 2, valuators);
+ nevents = GetPointerEvents(events, pDev, MotionNotify, 0,
+ POINTER_SCREEN | POINTER_ABSOLUTE, &mask);
+
+ OsBlockSignals();
+#ifdef XQUARTZ
+ darwinEvents_lock();
+#endif
+ for (i = 0; i < nevents; i++)
+ mieqEnqueue(pDev, (InternalEvent*)events[i].event);
+#ifdef XQUARTZ
+ darwinEvents_unlock();
+#endif
+ OsReleaseSignals();
+}
diff --git a/xorg-server/mi/mispans.c b/xorg-server/mi/mispans.c
index 4202c9bb9..21ba4da4f 100644
--- a/xorg-server/mi/mispans.c
+++ b/xorg-server/mi/mispans.c
@@ -1,525 +1,527 @@
-/***********************************************************
-
-Copyright 1989, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "misc.h"
-#include "pixmapstr.h"
-#include "gcstruct.h"
-#include "mispans.h"
-
-/*
-
-These routines maintain lists of Spans, in order to implement the
-``touch-each-pixel-once'' rules of wide lines and arcs.
-
-Written by Joel McCormack, Summer 1989.
-
-*/
-
-
-void miInitSpanGroup(SpanGroup *spanGroup)
-{
- spanGroup->size = 0;
- spanGroup->count = 0;
- spanGroup->group = NULL;
- spanGroup->ymin = MAXSHORT;
- spanGroup->ymax = MINSHORT;
-} /* InitSpanGroup */
-
-#define YMIN(spans) (spans->points[0].y)
-#define YMAX(spans) (spans->points[spans->count-1].y)
-
-static void miSubtractSpans (SpanGroup *spanGroup, Spans *sub)
-{
- int i, subCount, spansCount;
- int ymin, ymax, xmin, xmax;
- Spans *spans;
- DDXPointPtr subPt, spansPt;
- int *subWid, *spansWid;
- int extra;
-
- ymin = YMIN(sub);
- ymax = YMAX(sub);
- spans = spanGroup->group;
- for (i = spanGroup->count; i; i--, spans++) {
- if (YMIN(spans) <= ymax && ymin <= YMAX(spans)) {
- subCount = sub->count;
- subPt = sub->points;
- subWid = sub->widths;
- spansCount = spans->count;
- spansPt = spans->points;
- spansWid = spans->widths;
- extra = 0;
- for (;;)
- {
- while (spansCount && spansPt->y < subPt->y)
- {
- spansPt++; spansWid++; spansCount--;
- }
- if (!spansCount)
- break;
- while (subCount && subPt->y < spansPt->y)
- {
- subPt++; subWid++; subCount--;
- }
- if (!subCount)
- break;
- if (subPt->y == spansPt->y)
- {
- xmin = subPt->x;
- xmax = xmin + *subWid;
- if (xmin >= spansPt->x + *spansWid || spansPt->x >= xmax)
- {
- ;
- }
- else if (xmin <= spansPt->x)
- {
- if (xmax >= spansPt->x + *spansWid)
- {
- memmove (spansPt, spansPt + 1, sizeof *spansPt * (spansCount - 1));
- memmove (spansWid, spansWid + 1, sizeof *spansWid * (spansCount - 1));
- spansPt--;
- spansWid--;
- spans->count--;
- extra++;
- }
- else
- {
- *spansWid = *spansWid - (xmax - spansPt->x);
- spansPt->x = xmax;
- }
- }
- else
- {
- if (xmax >= spansPt->x + *spansWid)
- {
- *spansWid = xmin - spansPt->x;
- }
- else
- {
- if (!extra) {
- DDXPointPtr newPt;
- int *newwid;
-
-#define EXTRA 8
- newPt = (DDXPointPtr) realloc(spans->points, (spans->count + EXTRA) * sizeof (DDXPointRec));
- if (!newPt)
- break;
- spansPt = newPt + (spansPt - spans->points);
- spans->points = newPt;
- newwid = (int *) realloc(spans->widths, (spans->count + EXTRA) * sizeof (int));
- if (!newwid)
- break;
- spansWid = newwid + (spansWid - spans->widths);
- spans->widths = newwid;
- extra = EXTRA;
- }
- memmove (spansPt + 1, spansPt, sizeof *spansPt * (spansCount));
- memmove (spansWid + 1, spansWid, sizeof *spansWid * (spansCount));
- spans->count++;
- extra--;
- *spansWid = xmin - spansPt->x;
- spansWid++;
- spansPt++;
- *spansWid = *spansWid - (xmax - spansPt->x);
- spansPt->x = xmax;
- }
- }
- }
- spansPt++; spansWid++; spansCount--;
- }
- }
- }
-}
-
-void miAppendSpans(SpanGroup *spanGroup, SpanGroup *otherGroup, Spans *spans)
-{
- int ymin, ymax;
- int spansCount;
-
- spansCount = spans->count;
- if (spansCount > 0) {
- if (spanGroup->size == spanGroup->count) {
- spanGroup->size = (spanGroup->size + 8) * 2;
- spanGroup->group = (Spans *)
- realloc(spanGroup->group, sizeof(Spans) * spanGroup->size);
- }
-
- spanGroup->group[spanGroup->count] = *spans;
- (spanGroup->count)++;
- ymin = spans->points[0].y;
- if (ymin < spanGroup->ymin) spanGroup->ymin = ymin;
- ymax = spans->points[spansCount - 1].y;
- if (ymax > spanGroup->ymax) spanGroup->ymax = ymax;
- if (otherGroup &&
- otherGroup->ymin < ymax &&
- ymin < otherGroup->ymax)
- {
- miSubtractSpans (otherGroup, spans);
- }
- }
- else
- {
- free(spans->points);
- free(spans->widths);
- }
-} /* AppendSpans */
-
-void miFreeSpanGroup(SpanGroup *spanGroup)
-{
- free(spanGroup->group);
-}
-
-static void QuickSortSpansX(
- DDXPointRec points[],
- int widths[],
- int numSpans )
-{
- int x;
- int i, j, m;
- DDXPointPtr r;
-
-/* Always called with numSpans > 1 */
-/* Sorts only by x, as all y should be the same */
-
-#define ExchangeSpans(a, b) \
-{ \
- DDXPointRec tpt; \
- int tw; \
- \
- tpt = points[a]; points[a] = points[b]; points[b] = tpt; \
- tw = widths[a]; widths[a] = widths[b]; widths[b] = tw; \
-}
-
- do {
- if (numSpans < 9) {
- /* Do insertion sort */
- int xprev;
-
- xprev = points[0].x;
- i = 1;
- do { /* while i != numSpans */
- x = points[i].x;
- if (xprev > x) {
- /* points[i] is out of order. Move into proper location. */
- DDXPointRec tpt;
- int tw, k;
-
- for (j = 0; x >= points[j].x; j++) {}
- tpt = points[i];
- tw = widths[i];
- for (k = i; k != j; k--) {
- points[k] = points[k-1];
- widths[k] = widths[k-1];
- }
- points[j] = tpt;
- widths[j] = tw;
- x = points[i].x;
- } /* if out of order */
- xprev = x;
- i++;
- } while (i != numSpans);
- return;
- }
-
- /* Choose partition element, stick in location 0 */
- m = numSpans / 2;
- if (points[m].x > points[0].x) ExchangeSpans(m, 0);
- if (points[m].x > points[numSpans-1].x) ExchangeSpans(m, numSpans-1);
- if (points[m].x > points[0].x) ExchangeSpans(m, 0);
- x = points[0].x;
-
- /* Partition array */
- i = 0;
- j = numSpans;
- do {
- r = &(points[i]);
- do {
- r++;
- i++;
- } while (i != numSpans && r->x < x);
- r = &(points[j]);
- do {
- r--;
- j--;
- } while (x < r->x);
- if (i < j) ExchangeSpans(i, j);
- } while (i < j);
-
- /* Move partition element back to middle */
- ExchangeSpans(0, j);
-
- /* Recurse */
- if (numSpans-j-1 > 1)
- QuickSortSpansX(&points[j+1], &widths[j+1], numSpans-j-1);
- numSpans = j;
- } while (numSpans > 1);
-} /* QuickSortSpans */
-
-
-static int UniquifySpansX(
- Spans *spans,
- DDXPointRec *newPoints,
- int *newWidths )
-{
- int newx1, newx2, oldpt, i, y;
- DDXPointRec *oldPoints;
- int *oldWidths;
- int *startNewWidths;
-
-/* Always called with numSpans > 1 */
-/* Uniquify the spans, and stash them into newPoints and newWidths. Return the
- number of unique spans. */
-
-
- startNewWidths = newWidths;
-
- oldPoints = spans->points;
- oldWidths = spans->widths;
-
- y = oldPoints->y;
- newx1 = oldPoints->x;
- newx2 = newx1 + *oldWidths;
-
- for (i = spans->count-1; i != 0; i--) {
- oldPoints++;
- oldWidths++;
- oldpt = oldPoints->x;
- if (oldpt > newx2) {
- /* Write current span, start a new one */
- newPoints->x = newx1;
- newPoints->y = y;
- *newWidths = newx2 - newx1;
- newPoints++;
- newWidths++;
- newx1 = oldpt;
- newx2 = oldpt + *oldWidths;
- } else {
- /* extend current span, if old extends beyond new */
- oldpt = oldpt + *oldWidths;
- if (oldpt > newx2) newx2 = oldpt;
- }
- } /* for */
-
- /* Write final span */
- newPoints->x = newx1;
- *newWidths = newx2 - newx1;
- newPoints->y = y;
-
- return (newWidths - startNewWidths) + 1;
-} /* UniquifySpansX */
-
-static void
-miDisposeSpanGroup (SpanGroup *spanGroup)
-{
- int i;
- Spans *spans;
-
- for (i = 0; i < spanGroup->count; i++)
- {
- spans = spanGroup->group + i;
- free(spans->points);
- free(spans->widths);
- }
-}
-
-void miFillUniqueSpanGroup(DrawablePtr pDraw, GCPtr pGC, SpanGroup *spanGroup)
-{
- int i;
- Spans *spans;
- Spans *yspans;
- int *ysizes;
- int ymin, ylength;
-
- /* Outgoing spans for one big call to FillSpans */
- DDXPointPtr points;
- int *widths;
- int count;
-
- if (spanGroup->count == 0) return;
-
- if (spanGroup->count == 1) {
- /* Already should be sorted, unique */
- spans = spanGroup->group;
- (*pGC->ops->FillSpans)
- (pDraw, pGC, spans->count, spans->points, spans->widths, TRUE);
- free(spans->points);
- free(spans->widths);
- }
- else
- {
- /* Yuck. Gross. Radix sort into y buckets, then sort x and uniquify */
- /* This seems to be the fastest thing to do. I've tried sorting on
- both x and y at the same time rather than creating into all those
- y buckets, but it was somewhat slower. */
-
- ymin = spanGroup->ymin;
- ylength = spanGroup->ymax - ymin + 1;
-
- /* Allocate Spans for y buckets */
- yspans = malloc(ylength * sizeof(Spans));
- ysizes = malloc(ylength * sizeof (int));
-
- if (!yspans || !ysizes)
- {
- free(yspans);
- free(ysizes);
- miDisposeSpanGroup (spanGroup);
- return;
- }
-
- for (i = 0; i != ylength; i++) {
- ysizes[i] = 0;
- yspans[i].count = 0;
- yspans[i].points = NULL;
- yspans[i].widths = NULL;
- }
-
- /* Go through every single span and put it into the correct bucket */
- count = 0;
- for (i = 0, spans = spanGroup->group;
- i != spanGroup->count;
- i++, spans++) {
- int index;
- int j;
-
- for (j = 0, points = spans->points, widths = spans->widths;
- j != spans->count;
- j++, points++, widths++) {
- index = points->y - ymin;
- if (index >= 0 && index < ylength) {
- Spans *newspans = &(yspans[index]);
- if (newspans->count == ysizes[index]) {
- DDXPointPtr newpoints;
- int *newwidths;
- ysizes[index] = (ysizes[index] + 8) * 2;
- newpoints = (DDXPointPtr) realloc(
- newspans->points,
- ysizes[index] * sizeof(DDXPointRec));
- newwidths = (int *) realloc(
- newspans->widths,
- ysizes[index] * sizeof(int));
- if (!newpoints || !newwidths)
- {
- int i;
-
- for (i = 0; i < ylength; i++)
- {
- free(yspans[i].points);
- free(yspans[i].widths);
- }
- free(yspans);
- free(ysizes);
- miDisposeSpanGroup (spanGroup);
- return;
- }
- newspans->points = newpoints;
- newspans->widths = newwidths;
- }
- newspans->points[newspans->count] = *points;
- newspans->widths[newspans->count] = *widths;
- (newspans->count)++;
- } /* if y value of span in range */
- } /* for j through spans */
- count += spans->count;
- free(spans->points);
- spans->points = NULL;
- free(spans->widths);
- spans->widths = NULL;
- } /* for i thorough Spans */
-
- /* Now sort by x and uniquify each bucket into the final array */
- points = malloc(count * sizeof(DDXPointRec));
- widths = malloc(count * sizeof(int));
- if (!points || !widths)
- {
- int i;
-
- for (i = 0; i < ylength; i++)
- {
- free(yspans[i].points);
- free(yspans[i].widths);
- }
- free(yspans);
- free(ysizes);
- free(points);
- free(widths);
- return;
- }
- count = 0;
- for (i = 0; i != ylength; i++) {
- int ycount = yspans[i].count;
- if (ycount > 0) {
- if (ycount > 1) {
- QuickSortSpansX(yspans[i].points, yspans[i].widths, ycount);
- count += UniquifySpansX
- (&(yspans[i]), &(points[count]), &(widths[count]));
- } else {
- points[count] = yspans[i].points[0];
- widths[count] = yspans[i].widths[0];
- count++;
- }
- free(yspans[i].points);
- free(yspans[i].widths);
- }
- }
-
- (*pGC->ops->FillSpans) (pDraw, pGC, count, points, widths, TRUE);
- free(points);
- free(widths);
- free(yspans);
- free(ysizes); /* use (DE)xalloc for these? */
- }
-
- spanGroup->count = 0;
- spanGroup->ymin = MAXSHORT;
- spanGroup->ymax = MINSHORT;
-}
+/***********************************************************
+
+Copyright 1989, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+
+Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "misc.h"
+#include "pixmapstr.h"
+#include "gcstruct.h"
+#include "mispans.h"
+
+/*
+
+These routines maintain lists of Spans, in order to implement the
+``touch-each-pixel-once'' rules of wide lines and arcs.
+
+Written by Joel McCormack, Summer 1989.
+
+*/
+
+
+void miInitSpanGroup(SpanGroup *spanGroup)
+{
+ spanGroup->size = 0;
+ spanGroup->count = 0;
+ spanGroup->group = NULL;
+ spanGroup->ymin = MAXSHORT;
+ spanGroup->ymax = MINSHORT;
+} /* InitSpanGroup */
+
+#define YMIN(spans) (spans->points[0].y)
+#define YMAX(spans) (spans->points[spans->count-1].y)
+
+static void miSubtractSpans (SpanGroup *spanGroup, Spans *sub)
+{
+ int i, subCount, spansCount;
+ int ymin, ymax, xmin, xmax;
+ Spans *spans;
+ DDXPointPtr subPt, spansPt;
+ int *subWid, *spansWid;
+ int extra;
+
+ ymin = YMIN(sub);
+ ymax = YMAX(sub);
+ spans = spanGroup->group;
+ for (i = spanGroup->count; i; i--, spans++) {
+ if (YMIN(spans) <= ymax && ymin <= YMAX(spans)) {
+ subCount = sub->count;
+ subPt = sub->points;
+ subWid = sub->widths;
+ spansCount = spans->count;
+ spansPt = spans->points;
+ spansWid = spans->widths;
+ extra = 0;
+ for (;;)
+ {
+ while (spansCount && spansPt->y < subPt->y)
+ {
+ spansPt++; spansWid++; spansCount--;
+ }
+ if (!spansCount)
+ break;
+ while (subCount && subPt->y < spansPt->y)
+ {
+ subPt++; subWid++; subCount--;
+ }
+ if (!subCount)
+ break;
+ if (subPt->y == spansPt->y)
+ {
+ xmin = subPt->x;
+ xmax = xmin + *subWid;
+ if (xmin >= spansPt->x + *spansWid || spansPt->x >= xmax)
+ {
+ ;
+ }
+ else if (xmin <= spansPt->x)
+ {
+ if (xmax >= spansPt->x + *spansWid)
+ {
+ memmove (spansPt, spansPt + 1, sizeof *spansPt * (spansCount - 1));
+ memmove (spansWid, spansWid + 1, sizeof *spansWid * (spansCount - 1));
+ spansPt--;
+ spansWid--;
+ spans->count--;
+ extra++;
+ }
+ else
+ {
+ *spansWid = *spansWid - (xmax - spansPt->x);
+ spansPt->x = xmax;
+ }
+ }
+ else
+ {
+ if (xmax >= spansPt->x + *spansWid)
+ {
+ *spansWid = xmin - spansPt->x;
+ }
+ else
+ {
+ if (!extra) {
+ DDXPointPtr newPt;
+ int *newwid;
+
+#define EXTRA 8
+ newPt = (DDXPointPtr) realloc(spans->points, (spans->count + EXTRA) * sizeof (DDXPointRec));
+ if (!newPt)
+ break;
+ spansPt = newPt + (spansPt - spans->points);
+ spans->points = newPt;
+ newwid = (int *) realloc(spans->widths, (spans->count + EXTRA) * sizeof (int));
+ if (!newwid)
+ break;
+ spansWid = newwid + (spansWid - spans->widths);
+ spans->widths = newwid;
+ extra = EXTRA;
+ }
+ memmove (spansPt + 1, spansPt, sizeof *spansPt * (spansCount));
+ memmove (spansWid + 1, spansWid, sizeof *spansWid * (spansCount));
+ spans->count++;
+ extra--;
+ *spansWid = xmin - spansPt->x;
+ spansWid++;
+ spansPt++;
+ *spansWid = *spansWid - (xmax - spansPt->x);
+ spansPt->x = xmax;
+ }
+ }
+ }
+ spansPt++; spansWid++; spansCount--;
+ }
+ }
+ }
+}
+
+void miAppendSpans(SpanGroup *spanGroup, SpanGroup *otherGroup, Spans *spans)
+{
+ int ymin, ymax;
+ int spansCount;
+
+ spansCount = spans->count;
+ if (spansCount > 0) {
+ if (spanGroup->size == spanGroup->count) {
+ spanGroup->size = (spanGroup->size + 8) * 2;
+ spanGroup->group = (Spans *)
+ realloc(spanGroup->group, sizeof(Spans) * spanGroup->size);
+ }
+
+ spanGroup->group[spanGroup->count] = *spans;
+ (spanGroup->count)++;
+ ymin = spans->points[0].y;
+ if (ymin < spanGroup->ymin) spanGroup->ymin = ymin;
+ ymax = spans->points[spansCount - 1].y;
+ if (ymax > spanGroup->ymax) spanGroup->ymax = ymax;
+ if (otherGroup &&
+ otherGroup->ymin < ymax &&
+ ymin < otherGroup->ymax)
+ {
+ miSubtractSpans (otherGroup, spans);
+ }
+ }
+ else
+ {
+ free(spans->points);
+ free(spans->widths);
+ }
+} /* AppendSpans */
+
+void miFreeSpanGroup(SpanGroup *spanGroup)
+{
+ free(spanGroup->group);
+}
+
+static void QuickSortSpansX(
+ DDXPointRec points[],
+ int widths[],
+ int numSpans )
+{
+ int x;
+ int i, j, m;
+ DDXPointPtr r;
+
+/* Always called with numSpans > 1 */
+/* Sorts only by x, as all y should be the same */
+
+#define ExchangeSpans(a, b) \
+{ \
+ DDXPointRec tpt; \
+ int tw; \
+ \
+ tpt = points[a]; points[a] = points[b]; points[b] = tpt; \
+ tw = widths[a]; widths[a] = widths[b]; widths[b] = tw; \
+}
+
+ do {
+ if (numSpans < 9) {
+ /* Do insertion sort */
+ int xprev;
+
+ xprev = points[0].x;
+ i = 1;
+ do { /* while i != numSpans */
+ x = points[i].x;
+ if (xprev > x) {
+ /* points[i] is out of order. Move into proper location. */
+ DDXPointRec tpt;
+ int tw, k;
+
+ for (j = 0; x >= points[j].x; j++) {}
+ tpt = points[i];
+ tw = widths[i];
+ for (k = i; k != j; k--) {
+ points[k] = points[k-1];
+ widths[k] = widths[k-1];
+ }
+ points[j] = tpt;
+ widths[j] = tw;
+ x = points[i].x;
+ } /* if out of order */
+ xprev = x;
+ i++;
+ } while (i != numSpans);
+ return;
+ }
+
+ /* Choose partition element, stick in location 0 */
+ m = numSpans / 2;
+ if (points[m].x > points[0].x) ExchangeSpans(m, 0);
+ if (points[m].x > points[numSpans-1].x) ExchangeSpans(m, numSpans-1);
+ if (points[m].x > points[0].x) ExchangeSpans(m, 0);
+ x = points[0].x;
+
+ /* Partition array */
+ i = 0;
+ j = numSpans;
+ do {
+ r = &(points[i]);
+ do {
+ r++;
+ i++;
+ } while (i != numSpans && r->x < x);
+ r = &(points[j]);
+ do {
+ r--;
+ j--;
+ } while (x < r->x);
+ if (i < j) ExchangeSpans(i, j);
+ } while (i < j);
+
+ /* Move partition element back to middle */
+ ExchangeSpans(0, j);
+
+ /* Recurse */
+ if (numSpans-j-1 > 1)
+ QuickSortSpansX(&points[j+1], &widths[j+1], numSpans-j-1);
+ numSpans = j;
+ } while (numSpans > 1);
+} /* QuickSortSpans */
+
+
+static int UniquifySpansX(
+ Spans *spans,
+ DDXPointRec *newPoints,
+ int *newWidths )
+{
+ int newx1, newx2, oldpt, i, y;
+ DDXPointRec *oldPoints;
+ int *oldWidths;
+ int *startNewWidths;
+
+/* Always called with numSpans > 1 */
+/* Uniquify the spans, and stash them into newPoints and newWidths. Return the
+ number of unique spans. */
+
+
+ startNewWidths = newWidths;
+
+ oldPoints = spans->points;
+ oldWidths = spans->widths;
+
+ y = oldPoints->y;
+ newx1 = oldPoints->x;
+ newx2 = newx1 + *oldWidths;
+
+ for (i = spans->count-1; i != 0; i--) {
+ oldPoints++;
+ oldWidths++;
+ oldpt = oldPoints->x;
+ if (oldpt > newx2) {
+ /* Write current span, start a new one */
+ newPoints->x = newx1;
+ newPoints->y = y;
+ *newWidths = newx2 - newx1;
+ newPoints++;
+ newWidths++;
+ newx1 = oldpt;
+ newx2 = oldpt + *oldWidths;
+ } else {
+ /* extend current span, if old extends beyond new */
+ oldpt = oldpt + *oldWidths;
+ if (oldpt > newx2) newx2 = oldpt;
+ }
+ } /* for */
+
+ /* Write final span */
+ newPoints->x = newx1;
+ *newWidths = newx2 - newx1;
+ newPoints->y = y;
+
+ return (newWidths - startNewWidths) + 1;
+} /* UniquifySpansX */
+
+static void
+miDisposeSpanGroup (SpanGroup *spanGroup)
+{
+ int i;
+ Spans *spans;
+
+ for (i = 0; i < spanGroup->count; i++)
+ {
+ spans = spanGroup->group + i;
+ free(spans->points);
+ free(spans->widths);
+ }
+}
+
+void miFillUniqueSpanGroup(DrawablePtr pDraw, GCPtr pGC, SpanGroup *spanGroup)
+{
+ int i;
+ Spans *spans;
+ Spans *yspans;
+ int *ysizes;
+ int ymin, ylength;
+
+ /* Outgoing spans for one big call to FillSpans */
+ DDXPointPtr points;
+ int *widths;
+ int count;
+
+ if (spanGroup->count == 0) return;
+
+ if (spanGroup->count == 1) {
+ /* Already should be sorted, unique */
+ spans = spanGroup->group;
+ (*pGC->ops->FillSpans)
+ (pDraw, pGC, spans->count, spans->points, spans->widths, TRUE);
+ free(spans->points);
+ free(spans->widths);
+ }
+ else
+ {
+ /* Yuck. Gross. Radix sort into y buckets, then sort x and uniquify */
+ /* This seems to be the fastest thing to do. I've tried sorting on
+ both x and y at the same time rather than creating into all those
+ y buckets, but it was somewhat slower. */
+
+ ymin = spanGroup->ymin;
+ ylength = spanGroup->ymax - ymin + 1;
+
+ /* Allocate Spans for y buckets */
+ yspans = malloc(ylength * sizeof(Spans));
+ ysizes = malloc(ylength * sizeof (int));
+
+ if (!yspans || !ysizes)
+ {
+ free(yspans);
+ free(ysizes);
+ miDisposeSpanGroup (spanGroup);
+ return;
+ }
+
+ for (i = 0; i != ylength; i++) {
+ ysizes[i] = 0;
+ yspans[i].count = 0;
+ yspans[i].points = NULL;
+ yspans[i].widths = NULL;
+ }
+
+ /* Go through every single span and put it into the correct bucket */
+ count = 0;
+ for (i = 0, spans = spanGroup->group;
+ i != spanGroup->count;
+ i++, spans++) {
+ int index;
+ int j;
+
+ for (j = 0, points = spans->points, widths = spans->widths;
+ j != spans->count;
+ j++, points++, widths++) {
+ index = points->y - ymin;
+ if (index >= 0 && index < ylength) {
+ Spans *newspans = &(yspans[index]);
+ if (newspans->count == ysizes[index]) {
+ DDXPointPtr newpoints;
+ int *newwidths;
+ ysizes[index] = (ysizes[index] + 8) * 2;
+ newpoints = (DDXPointPtr) realloc(
+ newspans->points,
+ ysizes[index] * sizeof(DDXPointRec));
+ newwidths = (int *) realloc(
+ newspans->widths,
+ ysizes[index] * sizeof(int));
+ if (!newpoints || !newwidths)
+ {
+ int i;
+
+ for (i = 0; i < ylength; i++)
+ {
+ free(yspans[i].points);
+ free(yspans[i].widths);
+ }
+ free(yspans);
+ free(ysizes);
+ free(newpoints);
+ free(newwidths);
+ miDisposeSpanGroup (spanGroup);
+ return;
+ }
+ newspans->points = newpoints;
+ newspans->widths = newwidths;
+ }
+ newspans->points[newspans->count] = *points;
+ newspans->widths[newspans->count] = *widths;
+ (newspans->count)++;
+ } /* if y value of span in range */
+ } /* for j through spans */
+ count += spans->count;
+ free(spans->points);
+ spans->points = NULL;
+ free(spans->widths);
+ spans->widths = NULL;
+ } /* for i thorough Spans */
+
+ /* Now sort by x and uniquify each bucket into the final array */
+ points = malloc(count * sizeof(DDXPointRec));
+ widths = malloc(count * sizeof(int));
+ if (!points || !widths)
+ {
+ int i;
+
+ for (i = 0; i < ylength; i++)
+ {
+ free(yspans[i].points);
+ free(yspans[i].widths);
+ }
+ free(yspans);
+ free(ysizes);
+ free(points);
+ free(widths);
+ return;
+ }
+ count = 0;
+ for (i = 0; i != ylength; i++) {
+ int ycount = yspans[i].count;
+ if (ycount > 0) {
+ if (ycount > 1) {
+ QuickSortSpansX(yspans[i].points, yspans[i].widths, ycount);
+ count += UniquifySpansX
+ (&(yspans[i]), &(points[count]), &(widths[count]));
+ } else {
+ points[count] = yspans[i].points[0];
+ widths[count] = yspans[i].widths[0];
+ count++;
+ }
+ free(yspans[i].points);
+ free(yspans[i].widths);
+ }
+ }
+
+ (*pGC->ops->FillSpans) (pDraw, pGC, count, points, widths, TRUE);
+ free(points);
+ free(widths);
+ free(yspans);
+ free(ysizes); /* use (DE)xalloc for these? */
+ }
+
+ spanGroup->count = 0;
+ spanGroup->ymin = MAXSHORT;
+ spanGroup->ymax = MINSHORT;
+}
diff --git a/xorg-server/mi/mizerline.c b/xorg-server/mi/mizerline.c
index d37e1cc96..7077b5198 100644
--- a/xorg-server/mi/mizerline.c
+++ b/xorg-server/mi/mizerline.c
@@ -1,379 +1,381 @@
-/***********************************************************
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <X11/X.h>
-
-#include "misc.h"
-#include "scrnintstr.h"
-#include "gcstruct.h"
-#include "windowstr.h"
-#include "pixmap.h"
-#include "mi.h"
-#include "miline.h"
-
-/* Draw lineSolid, fillStyle-independent zero width lines.
- *
- * Must keep X and Y coordinates in "ints" at least until after they're
- * translated and clipped to accomodate CoordModePrevious lines with very
- * large coordinates.
- *
- * Draws the same pixels regardless of sign(dx) or sign(dy).
- *
- * Ken Whaley
- *
- */
-
-/* largest positive value that can fit into a component of a point.
- * Assumes that the point structure is {type x, y;} where type is
- * a signed type.
- */
-#define MAX_COORDINATE ((1 << (((sizeof(DDXPointRec) >> 1) << 3) - 1)) - 1)
-
-#define MI_OUTPUT_POINT(xx, yy)\
-{\
- if ( !new_span && yy == current_y)\
- {\
- if (xx < spans->x)\
- spans->x = xx;\
- ++*widths;\
- }\
- else\
- {\
- ++Nspans;\
- ++spans;\
- ++widths;\
- spans->x = xx;\
- spans->y = yy;\
- *widths = 1;\
- current_y = yy;\
- new_span = FALSE;\
- }\
-}
-
-void
-miZeroLine(
- DrawablePtr pDraw,
- GCPtr pGC,
- int mode, /* Origin or Previous */
- int npt, /* number of points */
- DDXPointPtr pptInit)
-{
- int Nspans, current_y = 0;
- DDXPointPtr ppt;
- DDXPointPtr pspanInit, spans;
- int *pwidthInit, *widths, list_len;
- int xleft, ytop, xright, ybottom;
- int new_x1, new_y1, new_x2, new_y2;
- int x = 0, y = 0, x1, y1, x2, y2, xstart, ystart;
- int oc1, oc2;
- int result;
- int pt1_clipped, pt2_clipped = 0;
- Bool new_span;
- int signdx, signdy;
- int clipdx, clipdy;
- int width, height;
- int adx, ady;
- int octant;
- unsigned int bias = miGetZeroLineBias(pDraw->pScreen);
- int e, e1, e2, e3; /* Bresenham error terms */
- int length; /* length of lines == # of pixels on major axis */
-
- xleft = pDraw->x;
- ytop = pDraw->y;
- xright = pDraw->x + pDraw->width - 1;
- ybottom = pDraw->y + pDraw->height - 1;
-
- if (!pGC->miTranslate)
- {
- /* do everything in drawable-relative coordinates */
- xleft = 0;
- ytop = 0;
- xright -= pDraw->x;
- ybottom -= pDraw->y;
- }
-
- /* it doesn't matter whether we're in drawable or screen coordinates,
- * FillSpans simply cannot take starting coordinates outside of the
- * range of a DDXPointRec component.
- */
- if (xright > MAX_COORDINATE)
- xright = MAX_COORDINATE;
- if (ybottom > MAX_COORDINATE)
- ybottom = MAX_COORDINATE;
-
- /* since we're clipping to the drawable's boundaries & coordinate
- * space boundaries, we're guaranteed that the larger of width/height
- * is the longest span we'll need to output
- */
- width = xright - xleft + 1;
- height = ybottom - ytop + 1;
- list_len = (height >= width) ? height : width;
- pspanInit = malloc(list_len * sizeof(DDXPointRec));
- pwidthInit = malloc(list_len * sizeof(int));
- if (!pspanInit || !pwidthInit)
- return;
-
- Nspans = 0;
- new_span = TRUE;
- spans = pspanInit - 1;
- widths = pwidthInit - 1;
- ppt = pptInit;
-
- xstart = ppt->x;
- ystart = ppt->y;
- if (pGC->miTranslate)
- {
- xstart += pDraw->x;
- ystart += pDraw->y;
- }
-
- /* x2, y2, oc2 copied to x1, y1, oc1 at top of loop to simplify
- * iteration logic
- */
- x2 = xstart;
- y2 = ystart;
- oc2 = 0;
- MIOUTCODES(oc2, x2, y2, xleft, ytop, xright, ybottom);
-
- while (--npt > 0)
- {
- if (Nspans > 0)
- (*pGC->ops->FillSpans)(pDraw, pGC, Nspans, pspanInit,
- pwidthInit, FALSE);
- Nspans = 0;
- new_span = TRUE;
- spans = pspanInit - 1;
- widths = pwidthInit - 1;
-
- x1 = x2;
- y1 = y2;
- oc1 = oc2;
- ++ppt;
-
- x2 = ppt->x;
- y2 = ppt->y;
- if (pGC->miTranslate && (mode != CoordModePrevious))
- {
- x2 += pDraw->x;
- y2 += pDraw->y;
- }
- else if (mode == CoordModePrevious)
- {
- x2 += x1;
- y2 += y1;
- }
-
- oc2 = 0;
- MIOUTCODES(oc2, x2, y2, xleft, ytop, xright, ybottom);
-
- CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy, 1, 1, octant);
-
- if (adx > ady)
- {
- e1 = ady << 1;
- e2 = e1 - (adx << 1);
- e = e1 - adx;
- length = adx; /* don't draw endpoint in main loop */
-
- FIXUP_ERROR(e, octant, bias);
-
- new_x1 = x1;
- new_y1 = y1;
- new_x2 = x2;
- new_y2 = y2;
- pt1_clipped = 0;
- pt2_clipped = 0;
-
- if ((oc1 | oc2) != 0)
- {
- result = miZeroClipLine(xleft, ytop, xright, ybottom,
- &new_x1, &new_y1, &new_x2, &new_y2,
- adx, ady,
- &pt1_clipped, &pt2_clipped,
- octant, bias, oc1, oc2);
- if (result == -1)
- continue;
-
- length = abs(new_x2 - new_x1);
-
- /* if we've clipped the endpoint, always draw the full length
- * of the segment, because then the capstyle doesn't matter
- */
- if (pt2_clipped)
- length++;
-
- if (pt1_clipped)
- {
- /* must calculate new error terms */
- clipdx = abs(new_x1 - x1);
- clipdy = abs(new_y1 - y1);
- e += (clipdy * e2) + ((clipdx - clipdy) * e1);
- }
- }
-
- /* draw the segment */
-
- x = new_x1;
- y = new_y1;
-
- e3 = e2 - e1;
- e = e - e1;
-
- while (length--)
- {
- MI_OUTPUT_POINT(x, y);
- e += e1;
- if (e >= 0)
- {
- y += signdy;
- e += e3;
- }
- x += signdx;
- }
- }
- else /* Y major line */
- {
- e1 = adx << 1;
- e2 = e1 - (ady << 1);
- e = e1 - ady;
- length = ady; /* don't draw endpoint in main loop */
-
- SetYMajorOctant(octant);
- FIXUP_ERROR(e, octant, bias);
-
- new_x1 = x1;
- new_y1 = y1;
- new_x2 = x2;
- new_y2 = y2;
- pt1_clipped = 0;
- pt2_clipped = 0;
-
- if ((oc1 | oc2) != 0)
- {
- result = miZeroClipLine(xleft, ytop, xright, ybottom,
- &new_x1, &new_y1, &new_x2, &new_y2,
- adx, ady,
- &pt1_clipped, &pt2_clipped,
- octant, bias, oc1, oc2);
- if (result == -1)
- continue;
-
- length = abs(new_y2 - new_y1);
-
- /* if we've clipped the endpoint, always draw the full length
- * of the segment, because then the capstyle doesn't matter
- */
- if (pt2_clipped)
- length++;
-
- if (pt1_clipped)
- {
- /* must calculate new error terms */
- clipdx = abs(new_x1 - x1);
- clipdy = abs(new_y1 - y1);
- e += (clipdx * e2) + ((clipdy - clipdx) * e1);
- }
- }
-
- /* draw the segment */
-
- x = new_x1;
- y = new_y1;
-
- e3 = e2 - e1;
- e = e - e1;
-
- while (length--)
- {
- MI_OUTPUT_POINT(x, y);
- e += e1;
- if (e >= 0)
- {
- x += signdx;
- e += e3;
- }
- y += signdy;
- }
- }
- }
-
- /* only do the capnotlast check on the last segment
- * and only if the endpoint wasn't clipped. And then, if the last
- * point is the same as the first point, do not draw it, unless the
- * line is degenerate
- */
- if ( (! pt2_clipped) && (pGC->capStyle != CapNotLast) &&
- (((xstart != x2) || (ystart != y2)) || (ppt == pptInit + 1)))
- {
- MI_OUTPUT_POINT(x, y);
- }
-
- if (Nspans > 0)
- (*pGC->ops->FillSpans)(pDraw, pGC, Nspans, pspanInit,
- pwidthInit, FALSE);
-
- free(pwidthInit);
- free(pspanInit);
-}
-
-void
-miZeroDashLine(
- DrawablePtr dst,
- GCPtr pgc,
- int mode,
- int nptInit, /* number of points in polyline */
- DDXPointRec *pptInit /* points in the polyline */
- )
-{
- /* XXX kludge until real zero-width dash code is written */
- pgc->lineWidth = 1;
- miWideDash (dst, pgc, mode, nptInit, pptInit);
- pgc->lineWidth = 0;
-}
+/***********************************************************
+
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+******************************************************************/
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+
+#include "misc.h"
+#include "scrnintstr.h"
+#include "gcstruct.h"
+#include "windowstr.h"
+#include "pixmap.h"
+#include "mi.h"
+#include "miline.h"
+
+/* Draw lineSolid, fillStyle-independent zero width lines.
+ *
+ * Must keep X and Y coordinates in "ints" at least until after they're
+ * translated and clipped to accomodate CoordModePrevious lines with very
+ * large coordinates.
+ *
+ * Draws the same pixels regardless of sign(dx) or sign(dy).
+ *
+ * Ken Whaley
+ *
+ */
+
+/* largest positive value that can fit into a component of a point.
+ * Assumes that the point structure is {type x, y;} where type is
+ * a signed type.
+ */
+#define MAX_COORDINATE ((1 << (((sizeof(DDXPointRec) >> 1) << 3) - 1)) - 1)
+
+#define MI_OUTPUT_POINT(xx, yy)\
+{\
+ if ( !new_span && yy == current_y)\
+ {\
+ if (xx < spans->x)\
+ spans->x = xx;\
+ ++*widths;\
+ }\
+ else\
+ {\
+ ++Nspans;\
+ ++spans;\
+ ++widths;\
+ spans->x = xx;\
+ spans->y = yy;\
+ *widths = 1;\
+ current_y = yy;\
+ new_span = FALSE;\
+ }\
+}
+
+void
+miZeroLine(
+ DrawablePtr pDraw,
+ GCPtr pGC,
+ int mode, /* Origin or Previous */
+ int npt, /* number of points */
+ DDXPointPtr pptInit)
+{
+ int Nspans, current_y = 0;
+ DDXPointPtr ppt;
+ DDXPointPtr pspanInit, spans;
+ int *pwidthInit, *widths, list_len;
+ int xleft, ytop, xright, ybottom;
+ int new_x1, new_y1, new_x2, new_y2;
+ int x = 0, y = 0, x1, y1, x2, y2, xstart, ystart;
+ int oc1, oc2;
+ int result;
+ int pt1_clipped, pt2_clipped = 0;
+ Bool new_span;
+ int signdx, signdy;
+ int clipdx, clipdy;
+ int width, height;
+ int adx, ady;
+ int octant;
+ unsigned int bias = miGetZeroLineBias(pDraw->pScreen);
+ int e, e1, e2, e3; /* Bresenham error terms */
+ int length; /* length of lines == # of pixels on major axis */
+
+ xleft = pDraw->x;
+ ytop = pDraw->y;
+ xright = pDraw->x + pDraw->width - 1;
+ ybottom = pDraw->y + pDraw->height - 1;
+
+ if (!pGC->miTranslate)
+ {
+ /* do everything in drawable-relative coordinates */
+ xleft = 0;
+ ytop = 0;
+ xright -= pDraw->x;
+ ybottom -= pDraw->y;
+ }
+
+ /* it doesn't matter whether we're in drawable or screen coordinates,
+ * FillSpans simply cannot take starting coordinates outside of the
+ * range of a DDXPointRec component.
+ */
+ if (xright > MAX_COORDINATE)
+ xright = MAX_COORDINATE;
+ if (ybottom > MAX_COORDINATE)
+ ybottom = MAX_COORDINATE;
+
+ /* since we're clipping to the drawable's boundaries & coordinate
+ * space boundaries, we're guaranteed that the larger of width/height
+ * is the longest span we'll need to output
+ */
+ width = xright - xleft + 1;
+ height = ybottom - ytop + 1;
+ list_len = (height >= width) ? height : width;
+ pspanInit = malloc(list_len * sizeof(DDXPointRec));
+ pwidthInit = malloc(list_len * sizeof(int));
+ if (!pspanInit || !pwidthInit) {
+ free(pspanInit);
+ free(pwidthInit);
+ return;
+ }
+ Nspans = 0;
+ new_span = TRUE;
+ spans = pspanInit - 1;
+ widths = pwidthInit - 1;
+ ppt = pptInit;
+
+ xstart = ppt->x;
+ ystart = ppt->y;
+ if (pGC->miTranslate)
+ {
+ xstart += pDraw->x;
+ ystart += pDraw->y;
+ }
+
+ /* x2, y2, oc2 copied to x1, y1, oc1 at top of loop to simplify
+ * iteration logic
+ */
+ x2 = xstart;
+ y2 = ystart;
+ oc2 = 0;
+ MIOUTCODES(oc2, x2, y2, xleft, ytop, xright, ybottom);
+
+ while (--npt > 0)
+ {
+ if (Nspans > 0)
+ (*pGC->ops->FillSpans)(pDraw, pGC, Nspans, pspanInit,
+ pwidthInit, FALSE);
+ Nspans = 0;
+ new_span = TRUE;
+ spans = pspanInit - 1;
+ widths = pwidthInit - 1;
+
+ x1 = x2;
+ y1 = y2;
+ oc1 = oc2;
+ ++ppt;
+
+ x2 = ppt->x;
+ y2 = ppt->y;
+ if (pGC->miTranslate && (mode != CoordModePrevious))
+ {
+ x2 += pDraw->x;
+ y2 += pDraw->y;
+ }
+ else if (mode == CoordModePrevious)
+ {
+ x2 += x1;
+ y2 += y1;
+ }
+
+ oc2 = 0;
+ MIOUTCODES(oc2, x2, y2, xleft, ytop, xright, ybottom);
+
+ CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy, 1, 1, octant);
+
+ if (adx > ady)
+ {
+ e1 = ady << 1;
+ e2 = e1 - (adx << 1);
+ e = e1 - adx;
+ length = adx; /* don't draw endpoint in main loop */
+
+ FIXUP_ERROR(e, octant, bias);
+
+ new_x1 = x1;
+ new_y1 = y1;
+ new_x2 = x2;
+ new_y2 = y2;
+ pt1_clipped = 0;
+ pt2_clipped = 0;
+
+ if ((oc1 | oc2) != 0)
+ {
+ result = miZeroClipLine(xleft, ytop, xright, ybottom,
+ &new_x1, &new_y1, &new_x2, &new_y2,
+ adx, ady,
+ &pt1_clipped, &pt2_clipped,
+ octant, bias, oc1, oc2);
+ if (result == -1)
+ continue;
+
+ length = abs(new_x2 - new_x1);
+
+ /* if we've clipped the endpoint, always draw the full length
+ * of the segment, because then the capstyle doesn't matter
+ */
+ if (pt2_clipped)
+ length++;
+
+ if (pt1_clipped)
+ {
+ /* must calculate new error terms */
+ clipdx = abs(new_x1 - x1);
+ clipdy = abs(new_y1 - y1);
+ e += (clipdy * e2) + ((clipdx - clipdy) * e1);
+ }
+ }
+
+ /* draw the segment */
+
+ x = new_x1;
+ y = new_y1;
+
+ e3 = e2 - e1;
+ e = e - e1;
+
+ while (length--)
+ {
+ MI_OUTPUT_POINT(x, y);
+ e += e1;
+ if (e >= 0)
+ {
+ y += signdy;
+ e += e3;
+ }
+ x += signdx;
+ }
+ }
+ else /* Y major line */
+ {
+ e1 = adx << 1;
+ e2 = e1 - (ady << 1);
+ e = e1 - ady;
+ length = ady; /* don't draw endpoint in main loop */
+
+ SetYMajorOctant(octant);
+ FIXUP_ERROR(e, octant, bias);
+
+ new_x1 = x1;
+ new_y1 = y1;
+ new_x2 = x2;
+ new_y2 = y2;
+ pt1_clipped = 0;
+ pt2_clipped = 0;
+
+ if ((oc1 | oc2) != 0)
+ {
+ result = miZeroClipLine(xleft, ytop, xright, ybottom,
+ &new_x1, &new_y1, &new_x2, &new_y2,
+ adx, ady,
+ &pt1_clipped, &pt2_clipped,
+ octant, bias, oc1, oc2);
+ if (result == -1)
+ continue;
+
+ length = abs(new_y2 - new_y1);
+
+ /* if we've clipped the endpoint, always draw the full length
+ * of the segment, because then the capstyle doesn't matter
+ */
+ if (pt2_clipped)
+ length++;
+
+ if (pt1_clipped)
+ {
+ /* must calculate new error terms */
+ clipdx = abs(new_x1 - x1);
+ clipdy = abs(new_y1 - y1);
+ e += (clipdx * e2) + ((clipdy - clipdx) * e1);
+ }
+ }
+
+ /* draw the segment */
+
+ x = new_x1;
+ y = new_y1;
+
+ e3 = e2 - e1;
+ e = e - e1;
+
+ while (length--)
+ {
+ MI_OUTPUT_POINT(x, y);
+ e += e1;
+ if (e >= 0)
+ {
+ x += signdx;
+ e += e3;
+ }
+ y += signdy;
+ }
+ }
+ }
+
+ /* only do the capnotlast check on the last segment
+ * and only if the endpoint wasn't clipped. And then, if the last
+ * point is the same as the first point, do not draw it, unless the
+ * line is degenerate
+ */
+ if ( (! pt2_clipped) && (pGC->capStyle != CapNotLast) &&
+ (((xstart != x2) || (ystart != y2)) || (ppt == pptInit + 1)))
+ {
+ MI_OUTPUT_POINT(x, y);
+ }
+
+ if (Nspans > 0)
+ (*pGC->ops->FillSpans)(pDraw, pGC, Nspans, pspanInit,
+ pwidthInit, FALSE);
+
+ free(pwidthInit);
+ free(pspanInit);
+}
+
+void
+miZeroDashLine(
+ DrawablePtr dst,
+ GCPtr pgc,
+ int mode,
+ int nptInit, /* number of points in polyline */
+ DDXPointRec *pptInit /* points in the polyline */
+ )
+{
+ /* XXX kludge until real zero-width dash code is written */
+ pgc->lineWidth = 1;
+ miWideDash (dst, pgc, mode, nptInit, pptInit);
+ pgc->lineWidth = 0;
+}
diff --git a/xorg-server/os/utils.c b/xorg-server/os/utils.c
index 30d14460a..36cb46f11 100644
--- a/xorg-server/os/utils.c
+++ b/xorg-server/os/utils.c
@@ -1,1821 +1,1814 @@
-/*
-
-Copyright 1987, 1998 The Open Group
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
-Copyright 1994 Quarterdeck Office Systems.
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in
-supporting documentation, and that the names of Digital and
-Quarterdeck not be used in advertising or publicity pertaining to
-distribution of the software without specific, written prior
-permission.
-
-DIGITAL AND QUARTERDECK DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
-FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT
-OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
-OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
-OR PERFORMANCE OF THIS SOFTWARE.
-
-*/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#ifdef __CYGWIN__
-#include <stdlib.h>
-#include <signal.h>
-/*
- Sigh... We really need a prototype for this to know it is stdcall,
- but #include-ing <windows.h> here is not a good idea...
-*/
-__stdcall unsigned long GetTickCount(void);
-#endif
-
-#if defined(WIN32) && !defined(__CYGWIN__)
-#include <X11/Xwinsock.h>
-#endif
-#include <X11/Xos.h>
-#include <stdio.h>
-#include <time.h>
-#if !defined(WIN32) || !defined(__MINGW32__)
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-#include "misc.h"
-#include <X11/X.h>
-#define XSERV_t
-#define TRANS_SERVER
-#define TRANS_REOPEN
-#include <X11/Xtrans/Xtrans.h>
-#include "input.h"
-#include "dixfont.h"
-#include "osdep.h"
-#include "extension.h"
-#ifdef X_POSIX_C_SOURCE
-#define _POSIX_C_SOURCE X_POSIX_C_SOURCE
-#include <signal.h>
-#undef _POSIX_C_SOURCE
-#else
-#if defined(_POSIX_SOURCE)
-#include <signal.h>
-#else
-#define _POSIX_SOURCE
-#include <signal.h>
-#undef _POSIX_SOURCE
-#endif
-#endif
-#ifndef WIN32
-#include <sys/wait.h>
-#endif
-#if !defined(SYSV) && !defined(WIN32)
-#include <sys/resource.h>
-#endif
-#include <sys/stat.h>
-#include <ctype.h> /* for isspace */
-#include <stdarg.h>
-
-#include <stdlib.h> /* for malloc() */
-
-#if defined(TCPCONN) || defined(STREAMSCONN)
-# ifndef WIN32
-# include <netdb.h>
-# endif
-#endif
-
-#include "opaque.h"
-
-#include "dixstruct.h"
-
-#include "xkbsrv.h"
-
-#include "picture.h"
-
-Bool noTestExtensions;
-#ifdef COMPOSITE
-Bool noCompositeExtension = FALSE;
-#endif
-
-#ifdef DAMAGE
-Bool noDamageExtension = FALSE;
-#endif
-#ifdef DBE
-Bool noDbeExtension = FALSE;
-#endif
-#ifdef DPMSExtension
-Bool noDPMSExtension = FALSE;
-#endif
-#ifdef GLXEXT
-Bool noGlxExtension = FALSE;
-Bool noGlxVisualInit = FALSE;
-#endif
-#ifdef SCREENSAVER
-Bool noScreenSaverExtension = FALSE;
-#endif
-#ifdef MITSHM
-Bool noMITShmExtension = FALSE;
-#endif
-#ifdef RANDR
-Bool noRRExtension = FALSE;
-#endif
-Bool noRenderExtension = FALSE;
-#ifdef XCSECURITY
-Bool noSecurityExtension = FALSE;
-#endif
-#ifdef RES
-Bool noResExtension = FALSE;
-#endif
-#ifdef XF86BIGFONT
-Bool noXFree86BigfontExtension = FALSE;
-#endif
-#ifdef XFreeXDGA
-Bool noXFree86DGAExtension = FALSE;
-#endif
-#ifdef XF86DRI
-Bool noXFree86DRIExtension = FALSE;
-#endif
-#ifdef XF86VIDMODE
-Bool noXFree86VidModeExtension = FALSE;
-#endif
-#ifdef XFIXES
-Bool noXFixesExtension = FALSE;
-#endif
-#ifdef PANORAMIX
-/* Xinerama is disabled by default unless enabled via +xinerama */
-Bool noPanoramiXExtension = TRUE;
-#endif
-#ifdef XSELINUX
-Bool noSELinuxExtension = FALSE;
-int selinuxEnforcingState = SELINUX_MODE_DEFAULT;
-#endif
-#ifdef XV
-Bool noXvExtension = FALSE;
-#endif
-#ifdef DRI2
-Bool noDRI2Extension = FALSE;
-#endif
-
-Bool noGEExtension = FALSE;
-
-#define X_INCLUDE_NETDB_H
-#include <X11/Xos_r.h>
-
-#include <errno.h>
-
-Bool CoreDump;
-
-#ifdef PANORAMIX
-Bool PanoramiXExtensionDisabledHack = FALSE;
-#endif
-
-int auditTrailLevel = 1;
-
-#if defined(SVR4) || defined(__linux__) || defined(CSRG_BASED)
-#define HAS_SAVED_IDS_AND_SETEUID
-#endif
-
-OsSigHandlerPtr
-OsSignal(int sig, OsSigHandlerPtr handler)
-{
- struct sigaction act, oact;
-
- sigemptyset(&act.sa_mask);
- if (handler != SIG_IGN)
- sigaddset(&act.sa_mask, sig);
- act.sa_flags = 0;
- act.sa_handler = handler;
- if (sigaction(sig, &act, &oact))
- perror("sigaction");
- return oact.sa_handler;
-}
-
-/*
- * Explicit support for a server lock file like the ones used for UUCP.
- * For architectures with virtual terminals that can run more than one
- * server at a time. This keeps the servers from stomping on each other
- * if the user forgets to give them different display numbers.
- */
-#define LOCK_DIR "/tmp"
-#define LOCK_TMP_PREFIX "/.tX"
-#define LOCK_PREFIX "/.X"
-#define LOCK_SUFFIX "-lock"
-
-static Bool StillLocking = FALSE;
-static char LockFile[PATH_MAX];
-static Bool nolock = FALSE;
-
-/*
- * LockServer --
- * Check if the server lock file exists. If so, check if the PID
- * contained inside is valid. If so, then die. Otherwise, create
- * the lock file containing the PID.
- */
-void
-LockServer(void)
-{
- char tmp[PATH_MAX], pid_str[12];
- int lfd, i, haslock, l_pid, t;
- char *tmppath = NULL;
- int len;
- char port[20];
-
- if (nolock) return;
- /*
- * Path names
- */
- tmppath = LOCK_DIR;
-
- sprintf(port, "%d", atoi(display));
- len = strlen(LOCK_PREFIX) > strlen(LOCK_TMP_PREFIX) ? strlen(LOCK_PREFIX) :
- strlen(LOCK_TMP_PREFIX);
- len += strlen(tmppath) + strlen(port) + strlen(LOCK_SUFFIX) + 1;
- if (len > sizeof(LockFile))
- FatalError("Display name `%s' is too long\n", port);
- (void)sprintf(tmp, "%s" LOCK_TMP_PREFIX "%s" LOCK_SUFFIX, tmppath, port);
- (void)sprintf(LockFile, "%s" LOCK_PREFIX "%s" LOCK_SUFFIX, tmppath, port);
-
- /*
- * Create a temporary file containing our PID. Attempt three times
- * to create the file.
- */
- StillLocking = TRUE;
- i = 0;
- do {
- i++;
- lfd = open(tmp, O_CREAT | O_EXCL | O_WRONLY, 0644);
- if (lfd < 0)
- sleep(2);
- else
- break;
- } while (i < 3);
- if (lfd < 0) {
- unlink(tmp);
- i = 0;
- do {
- i++;
- lfd = open(tmp, O_CREAT | O_EXCL | O_WRONLY, 0644);
- if (lfd < 0)
- sleep(2);
- else
- break;
- } while (i < 3);
- }
- if (lfd < 0)
- FatalError("Could not create lock file in %s\n", tmp);
- (void) sprintf(pid_str, "%10ld\n", (long)getpid());
- (void) write(lfd, pid_str, 11);
- (void) chmod(tmp, 0444);
- (void) close(lfd);
-
- /*
- * OK. Now the tmp file exists. Try three times to move it in place
- * for the lock.
- */
- i = 0;
- haslock = 0;
- while ((!haslock) && (i++ < 3)) {
- haslock = (link(tmp,LockFile) == 0);
- if (haslock) {
- /*
- * We're done.
- */
- break;
- }
- else {
- /*
- * Read the pid from the existing file
- */
- lfd = open(LockFile, O_RDONLY);
- if (lfd < 0) {
- unlink(tmp);
- FatalError("Can't read lock file %s\n", LockFile);
- }
- pid_str[0] = '\0';
- if (read(lfd, pid_str, 11) != 11) {
- /*
- * Bogus lock file.
- */
- unlink(LockFile);
- close(lfd);
- continue;
- }
- pid_str[11] = '\0';
- sscanf(pid_str, "%d", &l_pid);
- close(lfd);
-
- /*
- * Now try to kill the PID to see if it exists.
- */
- errno = 0;
- t = kill(l_pid, 0);
- if ((t< 0) && (errno == ESRCH)) {
- /*
- * Stale lock file.
- */
- unlink(LockFile);
- continue;
- }
- else if (((t < 0) && (errno == EPERM)) || (t == 0)) {
- /*
- * Process is still active.
- */
- unlink(tmp);
- FatalError("Server is already active for display %s\n%s %s\n%s\n",
- port, "\tIf this server is no longer running, remove",
- LockFile, "\tand start again.");
- }
- }
- }
- unlink(tmp);
- if (!haslock)
- FatalError("Could not create server lock file: %s\n", LockFile);
- StillLocking = FALSE;
-}
-
-/*
- * UnlockServer --
- * Remove the server lock file.
- */
-void
-UnlockServer(void)
-{
- if (nolock) return;
-
- if (!StillLocking){
-
- (void) unlink(LockFile);
- }
-}
-
-/* Force connections to close on SIGHUP from init */
-
-void
-AutoResetServer (int sig)
-{
- int olderrno = errno;
-
- dispatchException |= DE_RESET;
- isItTimeToYield = TRUE;
- errno = olderrno;
-}
-
-/* Force connections to close and then exit on SIGTERM, SIGINT */
-
-void
-GiveUp(int sig)
-{
- int olderrno = errno;
-
- dispatchException |= DE_TERMINATE;
- isItTimeToYield = TRUE;
- errno = olderrno;
-}
-
-#if (defined WIN32 && defined __MINGW32__) || defined(__CYGWIN__)
-CARD32
-GetTimeInMillis (void)
-{
- return GetTickCount ();
-}
-#else
-CARD32
-GetTimeInMillis(void)
-{
- struct timeval tv;
-
-#ifdef MONOTONIC_CLOCK
- struct timespec tp;
- static clockid_t clockid;
- if (!clockid) {
-#ifdef CLOCK_MONOTONIC_COARSE
- if (clock_getres(CLOCK_MONOTONIC_COARSE, &tp) == 0 &&
- (tp.tv_nsec / 1000) <= 1000 &&
- clock_gettime(CLOCK_MONOTONIC_COARSE, &tp) == 0)
- clockid = CLOCK_MONOTONIC_COARSE;
- else
-#endif
- if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
- clockid = CLOCK_MONOTONIC;
- else
- clockid = ~0L;
- }
- if (clockid != ~0L && clock_gettime(clockid, &tp) == 0)
- return (tp.tv_sec * 1000) + (tp.tv_nsec / 1000000L);
-#endif
-
- X_GETTIMEOFDAY(&tv);
- return(tv.tv_sec * 1000) + (tv.tv_usec / 1000);
-}
-#endif
-
-void
-AdjustWaitForDelay (pointer waitTime, unsigned long newdelay)
-{
- static struct timeval delay_val;
- struct timeval **wt = (struct timeval **) waitTime;
- unsigned long olddelay;
-
- if (*wt == NULL)
- {
- delay_val.tv_sec = newdelay / 1000;
- delay_val.tv_usec = 1000 * (newdelay % 1000);
- *wt = &delay_val;
- }
- else
- {
- olddelay = (*wt)->tv_sec * 1000 + (*wt)->tv_usec / 1000;
- if (newdelay < olddelay)
- {
- (*wt)->tv_sec = newdelay / 1000;
- (*wt)->tv_usec = 1000 * (newdelay % 1000);
- }
- }
-}
-
-void UseMsg(void)
-{
- ErrorF("use: X [:<display>] [option]\n");
- ErrorF("-a # default pointer acceleration (factor)\n");
- ErrorF("-ac disable access control restrictions\n");
- ErrorF("-audit int set audit trail level\n");
- ErrorF("-auth file select authorization file\n");
- ErrorF("-br create root window with black background\n");
- ErrorF("+bs enable any backing store support\n");
- ErrorF("-bs disable any backing store support\n");
- ErrorF("-c turns off key-click\n");
- ErrorF("c # key-click volume (0-100)\n");
- ErrorF("-cc int default color visual class\n");
- ErrorF("-nocursor disable the cursor\n");
- ErrorF("-core generate core dump on fatal error\n");
- ErrorF("-dpi int screen resolution in dots per inch\n");
-#ifdef DPMSExtension
- ErrorF("-dpms disables VESA DPMS monitor control\n");
-#endif
- ErrorF("-deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs\n");
- ErrorF("-f # bell base (0-100)\n");
- ErrorF("-fc string cursor font\n");
- ErrorF("-fn string default font name\n");
- ErrorF("-fp string default font path\n");
- ErrorF("-help prints message with these options\n");
- ErrorF("-I ignore all remaining arguments\n");
-#ifdef RLIMIT_DATA
- ErrorF("-ld int limit data space to N Kb\n");
-#endif
-#ifdef RLIMIT_NOFILE
- ErrorF("-lf int limit number of open files to N\n");
-#endif
-#ifdef RLIMIT_STACK
- ErrorF("-ls int limit stack space to N Kb\n");
-#endif
- ErrorF("-nolock disable the locking mechanism\n");
- ErrorF("-nolisten string don't listen on protocol\n");
- ErrorF("-noreset don't reset after last client exists\n");
- ErrorF("-background [none] create root window with no background\n");
- ErrorF("-reset reset after last client exists\n");
- ErrorF("-p # screen-saver pattern duration (minutes)\n");
- ErrorF("-pn accept failure to listen on all ports\n");
- ErrorF("-nopn reject failure to listen on all ports\n");
- ErrorF("-r turns off auto-repeat\n");
- ErrorF("r turns on auto-repeat \n");
- ErrorF("-render [default|mono|gray|color] set render color alloc policy\n");
- ErrorF("-retro start with classic stipple and cursor\n");
- ErrorF("-s # screen-saver timeout (minutes)\n");
- ErrorF("-t # default pointer threshold (pixels/t)\n");
- ErrorF("-terminate terminate at server reset\n");
- ErrorF("-to # connection time out\n");
- ErrorF("-tst disable testing extensions\n");
- ErrorF("ttyxx server started from init on /dev/ttyxx\n");
- ErrorF("v video blanking for screen-saver\n");
- ErrorF("-v screen-saver without video blanking\n");
- ErrorF("-wm WhenMapped default backing-store\n");
- ErrorF("-wr create root window with white background\n");
- ErrorF("-maxbigreqsize set maximal bigrequest size \n");
-#ifdef PANORAMIX
- ErrorF("+xinerama Enable XINERAMA extension\n");
- ErrorF("-xinerama Disable XINERAMA extension\n");
-#endif
- ErrorF("-dumbSched Disable smart scheduling, enable old behavior\n");
- ErrorF("-schedInterval int Set scheduler interval in msec\n");
- ErrorF("-sigstop Enable SIGSTOP based startup\n");
- ErrorF("+extension name Enable extension\n");
- ErrorF("-extension name Disable extension\n");
-#ifdef XDMCP
- XdmcpUseMsg();
-#endif
- XkbUseMsg();
- ddxUseMsg();
-}
-
-/* This function performs a rudimentary sanity check
- * on the display name passed in on the command-line,
- * since this string is used to generate filenames.
- * It is especially important that the display name
- * not contain a "/" and not start with a "-".
- * --kvajk
- */
-static int
-VerifyDisplayName(const char *d)
-{
- if ( d == (char *)0 ) return 0; /* null */
- if ( *d == '\0' ) return 0; /* empty */
- if ( *d == '-' ) return 0; /* could be confused for an option */
- if ( *d == '.' ) return 0; /* must not equal "." or ".." */
- if ( strchr(d, '/') != (char *)0 ) return 0; /* very important!!! */
- return 1;
-}
-
-/*
- * This function parses the command line. Handles device-independent fields
- * and allows ddx to handle additional fields. It is not allowed to modify
- * argc or any of the strings pointed to by argv.
- */
-void
-ProcessCommandLine(int argc, char *argv[])
-{
- int i, skip;
-
- defaultKeyboardControl.autoRepeat = TRUE;
-
-#ifdef NO_PART_NET
- PartialNetwork = FALSE;
-#else
- PartialNetwork = TRUE;
-#endif
-
- for ( i = 1; i < argc; i++ )
- {
- /* call ddx first, so it can peek/override if it wants */
- if((skip = ddxProcessArgument(argc, argv, i)))
- {
- i += (skip - 1);
- }
- else if(argv[i][0] == ':')
- {
- /* initialize display */
- display = argv[i];
- display++;
- if( ! VerifyDisplayName( display ) ) {
- ErrorF("Bad display name: %s\n", display);
- UseMsg();
- FatalError("Bad display name, exiting: %s\n", display);
- }
- }
- else if ( strcmp( argv[i], "-a") == 0)
- {
- if(++i < argc)
- defaultPointerControl.num = atoi(argv[i]);
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-ac") == 0)
- {
- defeatAccessControl = TRUE;
- }
- else if ( strcmp( argv[i], "-audit") == 0)
- {
- if(++i < argc)
- auditTrailLevel = atoi(argv[i]);
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-auth") == 0)
- {
- if(++i < argc)
- InitAuthorization (argv[i]);
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-br") == 0) ; /* default */
- else if ( strcmp( argv[i], "+bs") == 0)
- enableBackingStore = TRUE;
- else if ( strcmp( argv[i], "-bs") == 0)
- disableBackingStore = TRUE;
- else if ( strcmp( argv[i], "c") == 0)
- {
- if(++i < argc)
- defaultKeyboardControl.click = atoi(argv[i]);
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-c") == 0)
- {
- defaultKeyboardControl.click = 0;
- }
- else if ( strcmp( argv[i], "-cc") == 0)
- {
- if(++i < argc)
- defaultColorVisualClass = atoi(argv[i]);
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-core") == 0)
- {
-#if !defined(WIN32) || !defined(__MINGW32__)
- struct rlimit core_limit;
- getrlimit (RLIMIT_CORE, &core_limit);
- core_limit.rlim_cur = core_limit.rlim_max;
- setrlimit (RLIMIT_CORE, &core_limit);
-#endif
- CoreDump = TRUE;
- }
- else if ( strcmp( argv[i], "-nocursor") == 0)
- {
- EnableCursor = FALSE;
- }
- else if ( strcmp( argv[i], "-dpi") == 0)
- {
- if(++i < argc)
- monitorResolution = atoi(argv[i]);
- else
- UseMsg();
- }
-#ifdef DPMSExtension
- else if ( strcmp( argv[i], "dpms") == 0)
- /* ignored for compatibility */ ;
- else if ( strcmp( argv[i], "-dpms") == 0)
- DPMSDisabledSwitch = TRUE;
-#endif
- else if ( strcmp( argv[i], "-deferglyphs") == 0)
- {
- if(++i >= argc || !ParseGlyphCachingMode(argv[i]))
- UseMsg();
- }
- else if ( strcmp( argv[i], "-f") == 0)
- {
- if(++i < argc)
- defaultKeyboardControl.bell = atoi(argv[i]);
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-fc") == 0)
- {
- if(++i < argc)
- defaultCursorFont = argv[i];
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-fn") == 0)
- {
- if(++i < argc)
- defaultTextFont = argv[i];
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-fp") == 0)
- {
- if(++i < argc)
- {
- defaultFontPath = argv[i];
- }
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-help") == 0)
- {
- UseMsg();
- exit(0);
- }
- else if ( (skip=XkbProcessArguments(argc,argv,i))!=0 ) {
- if (skip>0)
- i+= skip-1;
- else UseMsg();
- }
-#ifdef RLIMIT_DATA
- else if ( strcmp( argv[i], "-ld") == 0)
- {
- if(++i < argc)
- {
- limitDataSpace = atoi(argv[i]);
- if (limitDataSpace > 0)
- limitDataSpace *= 1024;
- }
- else
- UseMsg();
- }
-#endif
-#ifdef RLIMIT_NOFILE
- else if ( strcmp( argv[i], "-lf") == 0)
- {
- if(++i < argc)
- limitNoFile = atoi(argv[i]);
- else
- UseMsg();
- }
-#endif
-#ifdef RLIMIT_STACK
- else if ( strcmp( argv[i], "-ls") == 0)
- {
- if(++i < argc)
- {
- limitStackSpace = atoi(argv[i]);
- if (limitStackSpace > 0)
- limitStackSpace *= 1024;
- }
- else
- UseMsg();
- }
-#endif
- else if ( strcmp ( argv[i], "-nolock") == 0)
- {
-#if !defined(WIN32) && !defined(__CYGWIN__)
- if (getuid() != 0)
- ErrorF("Warning: the -nolock option can only be used by root\n");
- else
-#endif
- nolock = TRUE;
- }
- else if ( strcmp( argv[i], "-nolisten") == 0)
- {
- if(++i < argc) {
- if (_XSERVTransNoListen(argv[i]))
- FatalError ("Failed to disable listen for %s transport",
- argv[i]);
- } else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-noreset") == 0)
- {
- dispatchExceptionAtReset = 0;
- }
- else if ( strcmp( argv[i], "-reset") == 0)
- {
- dispatchExceptionAtReset = DE_RESET;
- }
- else if ( strcmp( argv[i], "-p") == 0)
- {
- if(++i < argc)
- defaultScreenSaverInterval = ((CARD32)atoi(argv[i])) *
- MILLI_PER_MIN;
- else
- UseMsg();
- }
- else if (strcmp(argv[i], "-pogo") == 0)
- {
- dispatchException = DE_TERMINATE;
- }
- else if ( strcmp( argv[i], "-pn") == 0)
- PartialNetwork = TRUE;
- else if ( strcmp( argv[i], "-nopn") == 0)
- PartialNetwork = FALSE;
- else if ( strcmp( argv[i], "r") == 0)
- defaultKeyboardControl.autoRepeat = TRUE;
- else if ( strcmp( argv[i], "-r") == 0)
- defaultKeyboardControl.autoRepeat = FALSE;
- else if ( strcmp( argv[i], "-retro") == 0)
- party_like_its_1989 = TRUE;
- else if ( strcmp( argv[i], "-s") == 0)
- {
- if(++i < argc)
- defaultScreenSaverTime = ((CARD32)atoi(argv[i])) *
- MILLI_PER_MIN;
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-t") == 0)
- {
- if(++i < argc)
- defaultPointerControl.threshold = atoi(argv[i]);
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-terminate") == 0)
- {
- dispatchExceptionAtReset = DE_TERMINATE;
- }
- else if ( strcmp( argv[i], "-to") == 0)
- {
- if(++i < argc)
- TimeOutValue = ((CARD32)atoi(argv[i])) * MILLI_PER_SECOND;
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-tst") == 0)
- {
- noTestExtensions = TRUE;
- }
- else if ( strcmp( argv[i], "v") == 0)
- defaultScreenSaverBlanking = PreferBlanking;
- else if ( strcmp( argv[i], "-v") == 0)
- defaultScreenSaverBlanking = DontPreferBlanking;
- else if ( strcmp( argv[i], "-wm") == 0)
- defaultBackingStore = WhenMapped;
- else if ( strcmp( argv[i], "-wr") == 0)
- whiteRoot = TRUE;
- else if ( strcmp( argv[i], "-background") == 0) {
- if(++i < argc) {
- if (!strcmp ( argv[i], "none"))
- bgNoneRoot = TRUE;
- else
- UseMsg();
- }
- }
- else if ( strcmp( argv[i], "-maxbigreqsize") == 0) {
- if(++i < argc) {
- long reqSizeArg = atol(argv[i]);
-
- /* Request size > 128MB does not make much sense... */
- if( reqSizeArg > 0L && reqSizeArg < 128L ) {
- maxBigRequestSize = (reqSizeArg * 1048576L) - 1L;
- }
- else
- {
- UseMsg();
- }
- }
- else
- {
- UseMsg();
- }
- }
-#ifdef PANORAMIX
- else if ( strcmp( argv[i], "+xinerama") == 0){
- noPanoramiXExtension = FALSE;
- }
- else if ( strcmp( argv[i], "-xinerama") == 0){
- noPanoramiXExtension = TRUE;
- }
- else if ( strcmp( argv[i], "-disablexineramaextension") == 0){
- PanoramiXExtensionDisabledHack = TRUE;
- }
-#endif
- else if ( strcmp( argv[i], "-I") == 0)
- {
- /* ignore all remaining arguments */
- break;
- }
- else if (strncmp (argv[i], "tty", 3) == 0)
- {
- /* init supplies us with this useless information */
- }
-#ifdef XDMCP
- else if ((skip = XdmcpOptions(argc, argv, i)) != i)
- {
- i = skip - 1;
- }
-#endif
- else if ( strcmp( argv[i], "-dumbSched") == 0)
- {
- SmartScheduleDisable = TRUE;
- }
- else if ( strcmp( argv[i], "-schedInterval") == 0)
- {
- if (++i < argc)
- {
- SmartScheduleInterval = atoi(argv[i]);
- SmartScheduleSlice = SmartScheduleInterval;
- }
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-schedMax") == 0)
- {
- if (++i < argc)
- {
- SmartScheduleMaxSlice = atoi(argv[i]);
- }
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-render" ) == 0)
- {
- if (++i < argc)
- {
- int policy = PictureParseCmapPolicy (argv[i]);
-
- if (policy != PictureCmapPolicyInvalid)
- PictureCmapPolicy = policy;
- else
- UseMsg ();
- }
- else
- UseMsg ();
- }
- else if ( strcmp( argv[i], "-sigstop") == 0)
- {
- RunFromSigStopParent = TRUE;
- }
- else if ( strcmp( argv[i], "+extension") == 0)
- {
- if (++i < argc)
- {
- if (!EnableDisableExtension(argv[i], TRUE))
- EnableDisableExtensionError(argv[i], TRUE);
- }
- else
- UseMsg();
- }
- else if ( strcmp( argv[i], "-extension") == 0)
- {
- if (++i < argc)
- {
- if (!EnableDisableExtension(argv[i], FALSE))
- EnableDisableExtensionError(argv[i], FALSE);
- }
- else
- UseMsg();
- }
- else
- {
- ErrorF("Unrecognized option: %s\n", argv[i]);
- UseMsg();
- FatalError("Unrecognized option: %s\n", argv[i]);
- }
- }
-}
-
-/* Implement a simple-minded font authorization scheme. The authorization
- name is "hp-hostname-1", the contents are simply the host name. */
-int
-set_font_authorizations(char **authorizations, int *authlen, pointer client)
-{
-#define AUTHORIZATION_NAME "hp-hostname-1"
-#if defined(TCPCONN) || defined(STREAMSCONN)
- static char *result = NULL;
- static char *p = NULL;
-
- if (p == NULL)
- {
- char hname[1024], *hnameptr;
- unsigned int len;
-#if defined(IPv6) && defined(AF_INET6)
- struct addrinfo hints, *ai = NULL;
-#else
- struct hostent *host;
-#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
- _Xgethostbynameparams hparams;
-#endif
-#endif
-
- gethostname(hname, 1024);
-#if defined(IPv6) && defined(AF_INET6)
- memset(&hints, 0, sizeof(hints));
- hints.ai_flags = AI_CANONNAME;
- if (getaddrinfo(hname, NULL, &hints, &ai) == 0) {
- hnameptr = ai->ai_canonname;
- } else {
- hnameptr = hname;
- }
-#else
- host = _XGethostbyname(hname, hparams);
- if (host == NULL)
- hnameptr = hname;
- else
- hnameptr = host->h_name;
-#endif
-
- len = strlen(hnameptr) + 1;
- result = malloc(len + sizeof(AUTHORIZATION_NAME) + 4);
-
- p = result;
- *p++ = sizeof(AUTHORIZATION_NAME) >> 8;
- *p++ = sizeof(AUTHORIZATION_NAME) & 0xff;
- *p++ = (len) >> 8;
- *p++ = (len & 0xff);
-
- memmove(p, AUTHORIZATION_NAME, sizeof(AUTHORIZATION_NAME));
- p += sizeof(AUTHORIZATION_NAME);
- memmove(p, hnameptr, len);
- p += len;
-#if defined(IPv6) && defined(AF_INET6)
- if (ai) {
- freeaddrinfo(ai);
- }
-#endif
- }
- *authlen = p - result;
- *authorizations = result;
- return 1;
-#else /* TCPCONN */
- return 0;
-#endif /* TCPCONN */
-}
-
-void *
-Xalloc(unsigned long amount)
-{
- /*
- * Xalloc used to return NULL when large amount of memory is requested. In
- * order to catch the buggy callers this warning has been added, slated to
- * removal by anyone who touches this code (or just looks at it) in 2011.
- *
- * -- Mikhail Gusarov
- */
- if ((long)amount <= 0)
- ErrorF("Warning: Xalloc: "
- "requesting unpleasantly large amount of memory: %lu bytes.\n",
- amount);
-
- return malloc(amount);
-}
-
-void *
-XNFalloc(unsigned long amount)
-{
- void *ptr = malloc(amount);
- if (!ptr)
- FatalError("Out of memory");
- return ptr;
-}
-
-void *
-Xcalloc(unsigned long amount)
-{
- return calloc(1, amount);
-}
-
-void *
-XNFcalloc(unsigned long amount)
-{
- void *ret = calloc(1, amount);
- if (!ret)
- FatalError("XNFcalloc: Out of memory");
- return ret;
-}
-
-void *
-Xrealloc(void *ptr, unsigned long amount)
-{
- /*
- * Xrealloc used to return NULL when large amount of memory is requested. In
- * order to catch the buggy callers this warning has been added, slated to
- * removal by anyone who touches this code (or just looks at it) in 2011.
- *
- * -- Mikhail Gusarov
- */
- if ((long)amount <= 0)
- ErrorF("Warning: Xrealloc: "
- "requesting unpleasantly large amount of memory: %lu bytes.\n",
- amount);
-
- return realloc(ptr, amount);
-}
-
-void *
-XNFrealloc(void *ptr, unsigned long amount)
-{
- void *ret = realloc(ptr, amount);
- if (!ret)
- FatalError("XNFrealloc: Out of memory");
- return ret;
-}
-
-void
-Xfree(void *ptr)
-{
- free(ptr);
-}
-
-
-char *
-Xstrdup(const char *s)
-{
- if (s == NULL)
- return NULL;
- return strdup(s);
-}
-
-char *
-XNFstrdup(const char *s)
-{
- char *ret;
-
- if (s == NULL)
- return NULL;
-
- ret = strdup(s);
- if (!ret)
- FatalError("XNFstrdup: Out of memory");
- return ret;
-}
-
-void
-SmartScheduleStopTimer (void)
-{
- struct itimerval timer;
-
- if (SmartScheduleDisable)
- return;
- timer.it_interval.tv_sec = 0;
- timer.it_interval.tv_usec = 0;
- timer.it_value.tv_sec = 0;
- timer.it_value.tv_usec = 0;
- (void) setitimer (ITIMER_REAL, &timer, 0);
-}
-
-void
-SmartScheduleStartTimer (void)
-{
- struct itimerval timer;
-
- if (SmartScheduleDisable)
- return;
- timer.it_interval.tv_sec = 0;
- timer.it_interval.tv_usec = SmartScheduleInterval * 1000;
- timer.it_value.tv_sec = 0;
- timer.it_value.tv_usec = SmartScheduleInterval * 1000;
- setitimer (ITIMER_REAL, &timer, 0);
-}
-
-static void
-SmartScheduleTimer (int sig)
-{
- SmartScheduleTime += SmartScheduleInterval;
-}
-
-void
-SmartScheduleInit (void)
-{
- struct sigaction act;
-
- if (SmartScheduleDisable)
- return;
-
- memset((char *) &act, 0, sizeof(struct sigaction));
-
- /* Set up the timer signal function */
- act.sa_handler = SmartScheduleTimer;
- sigemptyset (&act.sa_mask);
- sigaddset (&act.sa_mask, SIGALRM);
- if (sigaction (SIGALRM, &act, 0) < 0)
- {
- perror ("sigaction for smart scheduler");
- SmartScheduleDisable = TRUE;
- }
-}
-
-#ifdef SIG_BLOCK
-static sigset_t PreviousSignalMask;
-static int BlockedSignalCount;
-#endif
-
-void
-OsBlockSignals (void)
-{
-#ifdef SIG_BLOCK
- if (BlockedSignalCount++ == 0)
- {
- sigset_t set;
-
- sigemptyset (&set);
- sigaddset (&set, SIGALRM);
- sigaddset (&set, SIGVTALRM);
-#ifdef SIGWINCH
- sigaddset (&set, SIGWINCH);
-#endif
-#ifdef SIGIO
- sigaddset (&set, SIGIO);
-#endif
- sigaddset (&set, SIGTSTP);
- sigaddset (&set, SIGTTIN);
- sigaddset (&set, SIGTTOU);
- sigaddset (&set, SIGCHLD);
- sigprocmask (SIG_BLOCK, &set, &PreviousSignalMask);
- }
-#endif
-}
-
-void
-OsReleaseSignals (void)
-{
-#ifdef SIG_BLOCK
- if (--BlockedSignalCount == 0)
- {
- sigprocmask (SIG_SETMASK, &PreviousSignalMask, 0);
- }
-#endif
-}
-
-/*
- * Pending signals may interfere with core dumping. Provide a
- * mechanism to block signals when aborting.
- */
-
-void
-OsAbort (void)
-{
-#ifndef __APPLE__
- OsBlockSignals();
-#endif
- abort();
-}
-
-#if !defined(WIN32)
-/*
- * "safer" versions of system(3), popen(3) and pclose(3) which give up
- * all privs before running a command.
- *
- * This is based on the code in FreeBSD 2.2 libc.
- *
- * XXX It'd be good to redirect stderr so that it ends up in the log file
- * as well. As it is now, xkbcomp messages don't end up in the log file.
- */
-
-int
-System(char *command)
-{
- int pid, p;
- void (*csig)(int);
- int status;
-
- if (!command)
- return 1;
-
- csig = signal(SIGCHLD, SIG_DFL);
- if (csig == SIG_ERR) {
- perror("signal");
- return -1;
- }
-
-#ifdef DEBUG
- ErrorF("System: `%s'\n", command);
-#endif
-
- switch (pid = fork()) {
- case -1: /* error */
- p = -1;
- case 0: /* child */
- if (setgid(getgid()) == -1)
- _exit(127);
- if (setuid(getuid()) == -1)
- _exit(127);
- execl("/bin/sh", "sh", "-c", command, (char *)NULL);
- _exit(127);
- default: /* parent */
- do {
- p = waitpid(pid, &status, 0);
- } while (p == -1 && errno == EINTR);
-
- }
-
- if (signal(SIGCHLD, csig) == SIG_ERR) {
- perror("signal");
- return -1;
- }
-
- return p == -1 ? -1 : status;
-}
-
-static struct pid {
- struct pid *next;
- FILE *fp;
- int pid;
-} *pidlist;
-
-OsSigHandlerPtr old_alarm = NULL; /* XXX horrible awful hack */
-
-pointer
-Popen(char *command, char *type)
-{
- struct pid *cur;
- FILE *iop;
- int pdes[2], pid;
-
- if (command == NULL || type == NULL)
- return NULL;
-
- if ((*type != 'r' && *type != 'w') || type[1])
- return NULL;
-
- if ((cur = malloc(sizeof(struct pid))) == NULL)
- return NULL;
-
- if (pipe(pdes) < 0) {
- free(cur);
- return NULL;
- }
-
- /* Ignore the smart scheduler while this is going on */
- old_alarm = OsSignal(SIGALRM, SIG_IGN);
- if (old_alarm == SIG_ERR) {
- perror("signal");
- return NULL;
- }
-
- switch (pid = fork()) {
- case -1: /* error */
- close(pdes[0]);
- close(pdes[1]);
- free(cur);
- if (OsSignal(SIGALRM, old_alarm) == SIG_ERR)
- perror("signal");
- return NULL;
- case 0: /* child */
- if (setgid(getgid()) == -1)
- _exit(127);
- if (setuid(getuid()) == -1)
- _exit(127);
- if (*type == 'r') {
- if (pdes[1] != 1) {
- /* stdout */
- dup2(pdes[1], 1);
- close(pdes[1]);
- }
- close(pdes[0]);
- } else {
- if (pdes[0] != 0) {
- /* stdin */
- dup2(pdes[0], 0);
- close(pdes[0]);
- }
- close(pdes[1]);
- }
- execl("/bin/sh", "sh", "-c", command, (char *)NULL);
- _exit(127);
- }
-
- /* Avoid EINTR during stdio calls */
- OsBlockSignals ();
-
- /* parent */
- if (*type == 'r') {
- iop = fdopen(pdes[0], type);
- close(pdes[1]);
- } else {
- iop = fdopen(pdes[1], type);
- close(pdes[0]);
- }
-
- cur->fp = iop;
- cur->pid = pid;
- cur->next = pidlist;
- pidlist = cur;
-
-#ifdef DEBUG
- ErrorF("Popen: `%s', fp = %p\n", command, iop);
-#endif
-
- return iop;
-}
-
-/* fopen that drops privileges */
-pointer
-Fopen(char *file, char *type)
-{
- FILE *iop;
-#ifndef HAS_SAVED_IDS_AND_SETEUID
- struct pid *cur;
- int pdes[2], pid;
-
- if (file == NULL || type == NULL)
- return NULL;
-
- if ((*type != 'r' && *type != 'w') || type[1])
- return NULL;
-
- if ((cur = malloc(sizeof(struct pid))) == NULL)
- return NULL;
-
- if (pipe(pdes) < 0) {
- free(cur);
- return NULL;
- }
-
- switch (pid = fork()) {
- case -1: /* error */
- close(pdes[0]);
- close(pdes[1]);
- free(cur);
- return NULL;
- case 0: /* child */
- if (setgid(getgid()) == -1)
- _exit(127);
- if (setuid(getuid()) == -1)
- _exit(127);
- if (*type == 'r') {
- if (pdes[1] != 1) {
- /* stdout */
- dup2(pdes[1], 1);
- close(pdes[1]);
- }
- close(pdes[0]);
- } else {
- if (pdes[0] != 0) {
- /* stdin */
- dup2(pdes[0], 0);
- close(pdes[0]);
- }
- close(pdes[1]);
- }
- execl("/bin/cat", "cat", file, (char *)NULL);
- _exit(127);
- }
-
- /* Avoid EINTR during stdio calls */
- OsBlockSignals ();
-
- /* parent */
- if (*type == 'r') {
- iop = fdopen(pdes[0], type);
- close(pdes[1]);
- } else {
- iop = fdopen(pdes[1], type);
- close(pdes[0]);
- }
-
- cur->fp = iop;
- cur->pid = pid;
- cur->next = pidlist;
- pidlist = cur;
-
-#ifdef DEBUG
- ErrorF("Fopen(%s), fp = %p\n", file, iop);
-#endif
-
- return iop;
-#else
- int ruid, euid;
-
- ruid = getuid();
- euid = geteuid();
-
- if (seteuid(ruid) == -1) {
- return NULL;
- }
- iop = fopen(file, type);
-
- if (seteuid(euid) == -1) {
- fclose(iop);
- return NULL;
- }
- return iop;
-#endif /* HAS_SAVED_IDS_AND_SETEUID */
-}
-
-int
-Pclose(pointer iop)
-{
- struct pid *cur, *last;
- int pstat;
- int pid;
-
-#ifdef DEBUG
- ErrorF("Pclose: fp = %p\n", iop);
-#endif
-
- fclose(iop);
-
- for (last = NULL, cur = pidlist; cur; last = cur, cur = cur->next)
- if (cur->fp == iop)
- break;
- if (cur == NULL)
- return -1;
-
- do {
- pid = waitpid(cur->pid, &pstat, 0);
- } while (pid == -1 && errno == EINTR);
-
- if (last == NULL)
- pidlist = cur->next;
- else
- last->next = cur->next;
- free(cur);
-
- /* allow EINTR again */
- OsReleaseSignals ();
-
- if (old_alarm && OsSignal(SIGALRM, old_alarm) == SIG_ERR) {
- perror("signal");
- return -1;
- }
-
- return pid == -1 ? -1 : pstat;
-}
-
-int
-Fclose(pointer iop)
-{
-#ifdef HAS_SAVED_IDS_AND_SETEUID
- return fclose(iop);
-#else
- return Pclose(iop);
-#endif
-}
-
-#endif /* !WIN32 */
-
-
-/*
- * CheckUserParameters: check for long command line arguments and long
- * environment variables. By default, these checks are only done when
- * the server's euid != ruid. In 3.3.x, these checks were done in an
- * external wrapper utility.
- */
-
-/* Consider LD* variables insecure? */
-#ifndef REMOVE_ENV_LD
-#define REMOVE_ENV_LD 1
-#endif
-
-/* Remove long environment variables? */
-#ifndef REMOVE_LONG_ENV
-#define REMOVE_LONG_ENV 1
-#endif
-
-/*
- * Disallow stdout or stderr as pipes? It's possible to block the X server
- * when piping stdout+stderr to a pipe.
- *
- * Don't enable this because it looks like it's going to cause problems.
- */
-#ifndef NO_OUTPUT_PIPES
-#define NO_OUTPUT_PIPES 0
-#endif
-
-
-/* Check args and env only if running setuid (euid == 0 && euid != uid) ? */
-#ifndef CHECK_EUID
-#ifndef WIN32
-#define CHECK_EUID 1
-#else
-#define CHECK_EUID 0
-#endif
-#endif
-
-/*
- * Maybe the locale can be faked to make isprint(3) report that everything
- * is printable? Avoid it by default.
- */
-#ifndef USE_ISPRINT
-#define USE_ISPRINT 0
-#endif
-
-#define MAX_ARG_LENGTH 128
-#define MAX_ENV_LENGTH 256
-#define MAX_ENV_PATH_LENGTH 2048 /* Limit for *PATH and TERMCAP */
-
-#if USE_ISPRINT
-#include <ctype.h>
-#define checkPrintable(c) isprint(c)
-#else
-#define checkPrintable(c) (((c) & 0x7f) >= 0x20 && ((c) & 0x7f) != 0x7f)
-#endif
-
-enum BadCode {
- NotBad = 0,
- UnsafeArg,
- ArgTooLong,
- UnprintableArg,
- EnvTooLong,
- OutputIsPipe,
- InternalError
-};
-
-#if defined(VENDORSUPPORT)
-#define BUGADDRESS VENDORSUPPORT
-#elif defined(BUILDERADDR)
-#define BUGADDRESS BUILDERADDR
-#else
-#define BUGADDRESS "xorg@freedesktop.org"
-#endif
-
-void
-CheckUserParameters(int argc, char **argv, char **envp)
-{
- enum BadCode bad = NotBad;
- int i = 0, j;
- char *a, *e = NULL;
-
-#if CHECK_EUID
- if (geteuid() == 0 && getuid() != geteuid())
-#endif
- {
- /* Check each argv[] */
- for (i = 1; i < argc; i++) {
- if (strcmp(argv[i], "-fp") == 0)
- {
- i++; /* continue with next argument. skip the length check */
- if (i >= argc)
- break;
- } else
- {
- if (strlen(argv[i]) > MAX_ARG_LENGTH) {
- bad = ArgTooLong;
- break;
- }
- }
- a = argv[i];
- while (*a) {
- if (checkPrintable(*a) == 0) {
- bad = UnprintableArg;
- break;
- }
- a++;
- }
- if (bad)
- break;
- }
- if (!bad) {
- /* Check each envp[] */
- for (i = 0; envp[i]; i++) {
-
- /* Check for bad environment variables and values */
-#if REMOVE_ENV_LD
- while (envp[i] && (strncmp(envp[i], "LD", 2) == 0)) {
- for (j = i; envp[j]; j++) {
- envp[j] = envp[j+1];
- }
- }
-#endif
- if (envp[i] && (strlen(envp[i]) > MAX_ENV_LENGTH)) {
-#if REMOVE_LONG_ENV
- for (j = i; envp[j]; j++) {
- envp[j] = envp[j+1];
- }
- i--;
-#else
- char *eq;
- int len;
-
- eq = strchr(envp[i], '=');
- if (!eq)
- continue;
- len = eq - envp[i];
- e = malloc(len + 1);
- if (!e) {
- bad = InternalError;
- break;
- }
- strncpy(e, envp[i], len);
- e[len] = 0;
- if (len >= 4 &&
- (strcmp(e + len - 4, "PATH") == 0 ||
- strcmp(e, "TERMCAP") == 0)) {
- if (strlen(envp[i]) > MAX_ENV_PATH_LENGTH) {
- bad = EnvTooLong;
- break;
- } else {
- free(e);
- }
- } else {
- bad = EnvTooLong;
- break;
- }
-#endif
- }
- }
- }
-#if NO_OUTPUT_PIPES
- if (!bad) {
- struct stat buf;
-
- if (fstat(fileno(stdout), &buf) == 0 && S_ISFIFO(buf.st_mode))
- bad = OutputIsPipe;
- if (fstat(fileno(stderr), &buf) == 0 && S_ISFIFO(buf.st_mode))
- bad = OutputIsPipe;
- }
-#endif
- }
- switch (bad) {
- case NotBad:
- return;
- case UnsafeArg:
- ErrorF("Command line argument number %d is unsafe\n", i);
- break;
- case ArgTooLong:
- ErrorF("Command line argument number %d is too long\n", i);
- break;
- case UnprintableArg:
- ErrorF("Command line argument number %d contains unprintable"
- " characters\n", i);
- break;
- case EnvTooLong:
- ErrorF("Environment variable `%s' is too long\n", e);
- break;
- case OutputIsPipe:
- ErrorF("Stdout and/or stderr is a pipe\n");
- break;
- case InternalError:
- ErrorF("Internal Error\n");
- break;
- default:
- ErrorF("Unknown error\n");
- break;
- }
- FatalError("X server aborted because of unsafe environment\n");
-}
-
-/*
- * CheckUserAuthorization: check if the user is allowed to start the
- * X server. This usually means some sort of PAM checking, and it is
- * usually only done for setuid servers (uid != euid).
- */
-
-#ifdef USE_PAM
-#include <security/pam_appl.h>
-#include <security/pam_misc.h>
-#include <pwd.h>
-#endif /* USE_PAM */
-
-void
-CheckUserAuthorization(void)
-{
-#ifdef USE_PAM
- static struct pam_conv conv = {
- misc_conv,
- NULL
- };
-
- pam_handle_t *pamh = NULL;
- struct passwd *pw;
- int retval;
-
- if (getuid() != geteuid()) {
- pw = getpwuid(getuid());
- if (pw == NULL)
- FatalError("getpwuid() failed for uid %d\n", getuid());
-
- retval = pam_start("xserver", pw->pw_name, &conv, &pamh);
- if (retval != PAM_SUCCESS)
- FatalError("pam_start() failed.\n"
- "\tMissing or mangled PAM config file or module?\n");
-
- retval = pam_authenticate(pamh, 0);
- if (retval != PAM_SUCCESS) {
- pam_end(pamh, retval);
- FatalError("PAM authentication failed, cannot start X server.\n"
- "\tPerhaps you do not have console ownership?\n");
- }
-
- retval = pam_acct_mgmt(pamh, 0);
- if (retval != PAM_SUCCESS) {
- pam_end(pamh, retval);
- FatalError("PAM authentication failed, cannot start X server.\n"
- "\tPerhaps you do not have console ownership?\n");
- }
-
- /* this is not a session, so do not do session management */
- pam_end(pamh, PAM_SUCCESS);
- }
-#endif
-}
-
-/*
- * Tokenize a string into a NULL terminated array of strings. Always returns
- * an allocated array unless an error occurs.
- */
-char**
-xstrtokenize(const char *str, const char *separators)
-{
- char **list, **nlist;
- char *tok, *tmp;
- unsigned num = 0, n;
-
- if (!str)
- return NULL;
- list = calloc(1, sizeof(*list));
- if (!list)
- return NULL;
- tmp = strdup(str);
- if (!tmp)
- goto error;
- for (tok = strtok(tmp, separators); tok; tok = strtok(NULL, separators)) {
- nlist = realloc(list, (num + 2) * sizeof(*list));
- if (!nlist)
- goto error;
- list = nlist;
- list[num] = strdup(tok);
- if (!list[num])
- goto error;
- list[++num] = NULL;
- }
- free(tmp);
- return list;
-
-error:
- free(tmp);
- for (n = 0; n < num; n++)
- free(list[n]);
- free(list);
- return NULL;
-}
+/*
+
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
+OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall
+not be used in advertising or otherwise to promote the sale, use or
+other dealings in this Software without prior written authorization
+from The Open Group.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts,
+Copyright 1994 Quarterdeck Office Systems.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the names of Digital and
+Quarterdeck not be used in advertising or publicity pertaining to
+distribution of the software without specific, written prior
+permission.
+
+DIGITAL AND QUARTERDECK DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+FITNESS, IN NO EVENT SHALL DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT
+OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
+OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE
+OR PERFORMANCE OF THIS SOFTWARE.
+
+*/
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#ifdef __CYGWIN__
+#include <stdlib.h>
+#include <signal.h>
+/*
+ Sigh... We really need a prototype for this to know it is stdcall,
+ but #include-ing <windows.h> here is not a good idea...
+*/
+__stdcall unsigned long GetTickCount(void);
+#endif
+
+#if defined(WIN32) && !defined(__CYGWIN__)
+#include <X11/Xwinsock.h>
+#endif
+#include <X11/Xos.h>
+#include <stdio.h>
+#include <time.h>
+#if !defined(WIN32) || !defined(__MINGW32__)
+#include <sys/time.h>
+#include <sys/resource.h>
+#endif
+#include "misc.h"
+#include <X11/X.h>
+#define XSERV_t
+#define TRANS_SERVER
+#define TRANS_REOPEN
+#include <X11/Xtrans/Xtrans.h>
+#include "input.h"
+#include "dixfont.h"
+#include "osdep.h"
+#include "extension.h"
+#ifdef X_POSIX_C_SOURCE
+#define _POSIX_C_SOURCE X_POSIX_C_SOURCE
+#include <signal.h>
+#undef _POSIX_C_SOURCE
+#else
+#if defined(_POSIX_SOURCE)
+#include <signal.h>
+#else
+#define _POSIX_SOURCE
+#include <signal.h>
+#undef _POSIX_SOURCE
+#endif
+#endif
+#ifndef WIN32
+#include <sys/wait.h>
+#endif
+#if !defined(SYSV) && !defined(WIN32)
+#include <sys/resource.h>
+#endif
+#include <sys/stat.h>
+#include <ctype.h> /* for isspace */
+#include <stdarg.h>
+
+#include <stdlib.h> /* for malloc() */
+
+#if defined(TCPCONN) || defined(STREAMSCONN)
+# ifndef WIN32
+# include <netdb.h>
+# endif
+#endif
+
+#include "opaque.h"
+
+#include "dixstruct.h"
+
+#include "xkbsrv.h"
+
+#include "picture.h"
+
+Bool noTestExtensions;
+#ifdef COMPOSITE
+Bool noCompositeExtension = FALSE;
+#endif
+
+#ifdef DAMAGE
+Bool noDamageExtension = FALSE;
+#endif
+#ifdef DBE
+Bool noDbeExtension = FALSE;
+#endif
+#ifdef DPMSExtension
+Bool noDPMSExtension = FALSE;
+#endif
+#ifdef GLXEXT
+Bool noGlxExtension = FALSE;
+Bool noGlxVisualInit = FALSE;
+#endif
+#ifdef SCREENSAVER
+Bool noScreenSaverExtension = FALSE;
+#endif
+#ifdef MITSHM
+Bool noMITShmExtension = FALSE;
+#endif
+#ifdef RANDR
+Bool noRRExtension = FALSE;
+#endif
+Bool noRenderExtension = FALSE;
+#ifdef XCSECURITY
+Bool noSecurityExtension = FALSE;
+#endif
+#ifdef RES
+Bool noResExtension = FALSE;
+#endif
+#ifdef XF86BIGFONT
+Bool noXFree86BigfontExtension = FALSE;
+#endif
+#ifdef XFreeXDGA
+Bool noXFree86DGAExtension = FALSE;
+#endif
+#ifdef XF86DRI
+Bool noXFree86DRIExtension = FALSE;
+#endif
+#ifdef XF86VIDMODE
+Bool noXFree86VidModeExtension = FALSE;
+#endif
+#ifdef XFIXES
+Bool noXFixesExtension = FALSE;
+#endif
+#ifdef PANORAMIX
+/* Xinerama is disabled by default unless enabled via +xinerama */
+Bool noPanoramiXExtension = TRUE;
+#endif
+#ifdef XSELINUX
+Bool noSELinuxExtension = FALSE;
+int selinuxEnforcingState = SELINUX_MODE_DEFAULT;
+#endif
+#ifdef XV
+Bool noXvExtension = FALSE;
+#endif
+#ifdef DRI2
+Bool noDRI2Extension = FALSE;
+#endif
+
+Bool noGEExtension = FALSE;
+
+#define X_INCLUDE_NETDB_H
+#include <X11/Xos_r.h>
+
+#include <errno.h>
+
+Bool CoreDump;
+
+#ifdef PANORAMIX
+Bool PanoramiXExtensionDisabledHack = FALSE;
+#endif
+
+int auditTrailLevel = 1;
+
+#if defined(SVR4) || defined(__linux__) || defined(CSRG_BASED)
+#define HAS_SAVED_IDS_AND_SETEUID
+#endif
+
+OsSigHandlerPtr
+OsSignal(int sig, OsSigHandlerPtr handler)
+{
+ struct sigaction act, oact;
+
+ sigemptyset(&act.sa_mask);
+ if (handler != SIG_IGN)
+ sigaddset(&act.sa_mask, sig);
+ act.sa_flags = 0;
+ act.sa_handler = handler;
+ if (sigaction(sig, &act, &oact))
+ perror("sigaction");
+ return oact.sa_handler;
+}
+
+/*
+ * Explicit support for a server lock file like the ones used for UUCP.
+ * For architectures with virtual terminals that can run more than one
+ * server at a time. This keeps the servers from stomping on each other
+ * if the user forgets to give them different display numbers.
+ */
+#define LOCK_DIR "/tmp"
+#define LOCK_TMP_PREFIX "/.tX"
+#define LOCK_PREFIX "/.X"
+#define LOCK_SUFFIX "-lock"
+
+static Bool StillLocking = FALSE;
+static char LockFile[PATH_MAX];
+static Bool nolock = FALSE;
+
+/*
+ * LockServer --
+ * Check if the server lock file exists. If so, check if the PID
+ * contained inside is valid. If so, then die. Otherwise, create
+ * the lock file containing the PID.
+ */
+void
+LockServer(void)
+{
+ char tmp[PATH_MAX], pid_str[12];
+ int lfd, i, haslock, l_pid, t;
+ char *tmppath = NULL;
+ int len;
+ char port[20];
+
+ if (nolock) return;
+ /*
+ * Path names
+ */
+ tmppath = LOCK_DIR;
+
+ sprintf(port, "%d", atoi(display));
+ len = strlen(LOCK_PREFIX) > strlen(LOCK_TMP_PREFIX) ? strlen(LOCK_PREFIX) :
+ strlen(LOCK_TMP_PREFIX);
+ len += strlen(tmppath) + strlen(port) + strlen(LOCK_SUFFIX) + 1;
+ if (len > sizeof(LockFile))
+ FatalError("Display name `%s' is too long\n", port);
+ (void)sprintf(tmp, "%s" LOCK_TMP_PREFIX "%s" LOCK_SUFFIX, tmppath, port);
+ (void)sprintf(LockFile, "%s" LOCK_PREFIX "%s" LOCK_SUFFIX, tmppath, port);
+
+ /*
+ * Create a temporary file containing our PID. Attempt three times
+ * to create the file.
+ */
+ StillLocking = TRUE;
+ i = 0;
+ do {
+ i++;
+ lfd = open(tmp, O_CREAT | O_EXCL | O_WRONLY, 0644);
+ if (lfd < 0)
+ sleep(2);
+ else
+ break;
+ } while (i < 3);
+ if (lfd < 0) {
+ unlink(tmp);
+ i = 0;
+ do {
+ i++;
+ lfd = open(tmp, O_CREAT | O_EXCL | O_WRONLY, 0644);
+ if (lfd < 0)
+ sleep(2);
+ else
+ break;
+ } while (i < 3);
+ }
+ if (lfd < 0)
+ FatalError("Could not create lock file in %s\n", tmp);
+ (void) sprintf(pid_str, "%10ld\n", (long)getpid());
+ (void) write(lfd, pid_str, 11);
+ (void) chmod(tmp, 0444);
+ (void) close(lfd);
+
+ /*
+ * OK. Now the tmp file exists. Try three times to move it in place
+ * for the lock.
+ */
+ i = 0;
+ haslock = 0;
+ while ((!haslock) && (i++ < 3)) {
+ haslock = (link(tmp,LockFile) == 0);
+ if (haslock) {
+ /*
+ * We're done.
+ */
+ break;
+ }
+ else {
+ /*
+ * Read the pid from the existing file
+ */
+ lfd = open(LockFile, O_RDONLY);
+ if (lfd < 0) {
+ unlink(tmp);
+ FatalError("Can't read lock file %s\n", LockFile);
+ }
+ pid_str[0] = '\0';
+ if (read(lfd, pid_str, 11) != 11) {
+ /*
+ * Bogus lock file.
+ */
+ unlink(LockFile);
+ close(lfd);
+ continue;
+ }
+ pid_str[11] = '\0';
+ sscanf(pid_str, "%d", &l_pid);
+ close(lfd);
+
+ /*
+ * Now try to kill the PID to see if it exists.
+ */
+ errno = 0;
+ t = kill(l_pid, 0);
+ if ((t< 0) && (errno == ESRCH)) {
+ /*
+ * Stale lock file.
+ */
+ unlink(LockFile);
+ continue;
+ }
+ else if (((t < 0) && (errno == EPERM)) || (t == 0)) {
+ /*
+ * Process is still active.
+ */
+ unlink(tmp);
+ FatalError("Server is already active for display %s\n%s %s\n%s\n",
+ port, "\tIf this server is no longer running, remove",
+ LockFile, "\tand start again.");
+ }
+ }
+ }
+ unlink(tmp);
+ if (!haslock)
+ FatalError("Could not create server lock file: %s\n", LockFile);
+ StillLocking = FALSE;
+}
+
+/*
+ * UnlockServer --
+ * Remove the server lock file.
+ */
+void
+UnlockServer(void)
+{
+ if (nolock) return;
+
+ if (!StillLocking){
+
+ (void) unlink(LockFile);
+ }
+}
+
+/* Force connections to close on SIGHUP from init */
+
+void
+AutoResetServer (int sig)
+{
+ int olderrno = errno;
+
+ dispatchException |= DE_RESET;
+ isItTimeToYield = TRUE;
+ errno = olderrno;
+}
+
+/* Force connections to close and then exit on SIGTERM, SIGINT */
+
+void
+GiveUp(int sig)
+{
+ int olderrno = errno;
+
+ dispatchException |= DE_TERMINATE;
+ isItTimeToYield = TRUE;
+ errno = olderrno;
+}
+
+#if (defined WIN32 && defined __MINGW32__) || defined(__CYGWIN__)
+CARD32
+GetTimeInMillis (void)
+{
+ return GetTickCount ();
+}
+#else
+CARD32
+GetTimeInMillis(void)
+{
+ struct timeval tv;
+
+#ifdef MONOTONIC_CLOCK
+ struct timespec tp;
+ static clockid_t clockid;
+ if (!clockid) {
+#ifdef CLOCK_MONOTONIC_COARSE
+ if (clock_getres(CLOCK_MONOTONIC_COARSE, &tp) == 0 &&
+ (tp.tv_nsec / 1000) <= 1000 &&
+ clock_gettime(CLOCK_MONOTONIC_COARSE, &tp) == 0)
+ clockid = CLOCK_MONOTONIC_COARSE;
+ else
+#endif
+ if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
+ clockid = CLOCK_MONOTONIC;
+ else
+ clockid = ~0L;
+ }
+ if (clockid != ~0L && clock_gettime(clockid, &tp) == 0)
+ return (tp.tv_sec * 1000) + (tp.tv_nsec / 1000000L);
+#endif
+
+ X_GETTIMEOFDAY(&tv);
+ return(tv.tv_sec * 1000) + (tv.tv_usec / 1000);
+}
+#endif
+
+void
+AdjustWaitForDelay (pointer waitTime, unsigned long newdelay)
+{
+ static struct timeval delay_val;
+ struct timeval **wt = (struct timeval **) waitTime;
+ unsigned long olddelay;
+
+ if (*wt == NULL)
+ {
+ delay_val.tv_sec = newdelay / 1000;
+ delay_val.tv_usec = 1000 * (newdelay % 1000);
+ *wt = &delay_val;
+ }
+ else
+ {
+ olddelay = (*wt)->tv_sec * 1000 + (*wt)->tv_usec / 1000;
+ if (newdelay < olddelay)
+ {
+ (*wt)->tv_sec = newdelay / 1000;
+ (*wt)->tv_usec = 1000 * (newdelay % 1000);
+ }
+ }
+}
+
+void UseMsg(void)
+{
+ ErrorF("use: X [:<display>] [option]\n");
+ ErrorF("-a # default pointer acceleration (factor)\n");
+ ErrorF("-ac disable access control restrictions\n");
+ ErrorF("-audit int set audit trail level\n");
+ ErrorF("-auth file select authorization file\n");
+ ErrorF("-br create root window with black background\n");
+ ErrorF("+bs enable any backing store support\n");
+ ErrorF("-bs disable any backing store support\n");
+ ErrorF("-c turns off key-click\n");
+ ErrorF("c # key-click volume (0-100)\n");
+ ErrorF("-cc int default color visual class\n");
+ ErrorF("-nocursor disable the cursor\n");
+ ErrorF("-core generate core dump on fatal error\n");
+ ErrorF("-dpi int screen resolution in dots per inch\n");
+#ifdef DPMSExtension
+ ErrorF("-dpms disables VESA DPMS monitor control\n");
+#endif
+ ErrorF("-deferglyphs [none|all|16] defer loading of [no|all|16-bit] glyphs\n");
+ ErrorF("-f # bell base (0-100)\n");
+ ErrorF("-fc string cursor font\n");
+ ErrorF("-fn string default font name\n");
+ ErrorF("-fp string default font path\n");
+ ErrorF("-help prints message with these options\n");
+ ErrorF("-I ignore all remaining arguments\n");
+#ifdef RLIMIT_DATA
+ ErrorF("-ld int limit data space to N Kb\n");
+#endif
+#ifdef RLIMIT_NOFILE
+ ErrorF("-lf int limit number of open files to N\n");
+#endif
+#ifdef RLIMIT_STACK
+ ErrorF("-ls int limit stack space to N Kb\n");
+#endif
+ ErrorF("-nolock disable the locking mechanism\n");
+ ErrorF("-nolisten string don't listen on protocol\n");
+ ErrorF("-noreset don't reset after last client exists\n");
+ ErrorF("-background [none] create root window with no background\n");
+ ErrorF("-reset reset after last client exists\n");
+ ErrorF("-p # screen-saver pattern duration (minutes)\n");
+ ErrorF("-pn accept failure to listen on all ports\n");
+ ErrorF("-nopn reject failure to listen on all ports\n");
+ ErrorF("-r turns off auto-repeat\n");
+ ErrorF("r turns on auto-repeat \n");
+ ErrorF("-render [default|mono|gray|color] set render color alloc policy\n");
+ ErrorF("-retro start with classic stipple and cursor\n");
+ ErrorF("-s # screen-saver timeout (minutes)\n");
+ ErrorF("-t # default pointer threshold (pixels/t)\n");
+ ErrorF("-terminate terminate at server reset\n");
+ ErrorF("-to # connection time out\n");
+ ErrorF("-tst disable testing extensions\n");
+ ErrorF("ttyxx server started from init on /dev/ttyxx\n");
+ ErrorF("v video blanking for screen-saver\n");
+ ErrorF("-v screen-saver without video blanking\n");
+ ErrorF("-wm WhenMapped default backing-store\n");
+ ErrorF("-wr create root window with white background\n");
+ ErrorF("-maxbigreqsize set maximal bigrequest size \n");
+#ifdef PANORAMIX
+ ErrorF("+xinerama Enable XINERAMA extension\n");
+ ErrorF("-xinerama Disable XINERAMA extension\n");
+#endif
+ ErrorF("-dumbSched Disable smart scheduling, enable old behavior\n");
+ ErrorF("-schedInterval int Set scheduler interval in msec\n");
+ ErrorF("-sigstop Enable SIGSTOP based startup\n");
+ ErrorF("+extension name Enable extension\n");
+ ErrorF("-extension name Disable extension\n");
+#ifdef XDMCP
+ XdmcpUseMsg();
+#endif
+ XkbUseMsg();
+ ddxUseMsg();
+}
+
+/* This function performs a rudimentary sanity check
+ * on the display name passed in on the command-line,
+ * since this string is used to generate filenames.
+ * It is especially important that the display name
+ * not contain a "/" and not start with a "-".
+ * --kvajk
+ */
+static int
+VerifyDisplayName(const char *d)
+{
+ if ( d == (char *)0 ) return 0; /* null */
+ if ( *d == '\0' ) return 0; /* empty */
+ if ( *d == '-' ) return 0; /* could be confused for an option */
+ if ( *d == '.' ) return 0; /* must not equal "." or ".." */
+ if ( strchr(d, '/') != (char *)0 ) return 0; /* very important!!! */
+ return 1;
+}
+
+/*
+ * This function parses the command line. Handles device-independent fields
+ * and allows ddx to handle additional fields. It is not allowed to modify
+ * argc or any of the strings pointed to by argv.
+ */
+void
+ProcessCommandLine(int argc, char *argv[])
+{
+ int i, skip;
+
+ defaultKeyboardControl.autoRepeat = TRUE;
+
+#ifdef NO_PART_NET
+ PartialNetwork = FALSE;
+#else
+ PartialNetwork = TRUE;
+#endif
+
+ for ( i = 1; i < argc; i++ )
+ {
+ /* call ddx first, so it can peek/override if it wants */
+ if((skip = ddxProcessArgument(argc, argv, i)))
+ {
+ i += (skip - 1);
+ }
+ else if(argv[i][0] == ':')
+ {
+ /* initialize display */
+ display = argv[i];
+ display++;
+ if( ! VerifyDisplayName( display ) ) {
+ ErrorF("Bad display name: %s\n", display);
+ UseMsg();
+ FatalError("Bad display name, exiting: %s\n", display);
+ }
+ }
+ else if ( strcmp( argv[i], "-a") == 0)
+ {
+ if(++i < argc)
+ defaultPointerControl.num = atoi(argv[i]);
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-ac") == 0)
+ {
+ defeatAccessControl = TRUE;
+ }
+ else if ( strcmp( argv[i], "-audit") == 0)
+ {
+ if(++i < argc)
+ auditTrailLevel = atoi(argv[i]);
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-auth") == 0)
+ {
+ if(++i < argc)
+ InitAuthorization (argv[i]);
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-br") == 0) ; /* default */
+ else if ( strcmp( argv[i], "+bs") == 0)
+ enableBackingStore = TRUE;
+ else if ( strcmp( argv[i], "-bs") == 0)
+ disableBackingStore = TRUE;
+ else if ( strcmp( argv[i], "c") == 0)
+ {
+ if(++i < argc)
+ defaultKeyboardControl.click = atoi(argv[i]);
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-c") == 0)
+ {
+ defaultKeyboardControl.click = 0;
+ }
+ else if ( strcmp( argv[i], "-cc") == 0)
+ {
+ if(++i < argc)
+ defaultColorVisualClass = atoi(argv[i]);
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-core") == 0)
+ {
+#if !defined(WIN32) || !defined(__MINGW32__)
+ struct rlimit core_limit;
+ getrlimit (RLIMIT_CORE, &core_limit);
+ core_limit.rlim_cur = core_limit.rlim_max;
+ setrlimit (RLIMIT_CORE, &core_limit);
+#endif
+ CoreDump = TRUE;
+ }
+ else if ( strcmp( argv[i], "-nocursor") == 0)
+ {
+ EnableCursor = FALSE;
+ }
+ else if ( strcmp( argv[i], "-dpi") == 0)
+ {
+ if(++i < argc)
+ monitorResolution = atoi(argv[i]);
+ else
+ UseMsg();
+ }
+#ifdef DPMSExtension
+ else if ( strcmp( argv[i], "dpms") == 0)
+ /* ignored for compatibility */ ;
+ else if ( strcmp( argv[i], "-dpms") == 0)
+ DPMSDisabledSwitch = TRUE;
+#endif
+ else if ( strcmp( argv[i], "-deferglyphs") == 0)
+ {
+ if(++i >= argc || !ParseGlyphCachingMode(argv[i]))
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-f") == 0)
+ {
+ if(++i < argc)
+ defaultKeyboardControl.bell = atoi(argv[i]);
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-fc") == 0)
+ {
+ if(++i < argc)
+ defaultCursorFont = argv[i];
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-fn") == 0)
+ {
+ if(++i < argc)
+ defaultTextFont = argv[i];
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-fp") == 0)
+ {
+ if(++i < argc)
+ {
+ defaultFontPath = argv[i];
+ }
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-help") == 0)
+ {
+ UseMsg();
+ exit(0);
+ }
+ else if ( (skip=XkbProcessArguments(argc,argv,i))!=0 ) {
+ if (skip>0)
+ i+= skip-1;
+ else UseMsg();
+ }
+#ifdef RLIMIT_DATA
+ else if ( strcmp( argv[i], "-ld") == 0)
+ {
+ if(++i < argc)
+ {
+ limitDataSpace = atoi(argv[i]);
+ if (limitDataSpace > 0)
+ limitDataSpace *= 1024;
+ }
+ else
+ UseMsg();
+ }
+#endif
+#ifdef RLIMIT_NOFILE
+ else if ( strcmp( argv[i], "-lf") == 0)
+ {
+ if(++i < argc)
+ limitNoFile = atoi(argv[i]);
+ else
+ UseMsg();
+ }
+#endif
+#ifdef RLIMIT_STACK
+ else if ( strcmp( argv[i], "-ls") == 0)
+ {
+ if(++i < argc)
+ {
+ limitStackSpace = atoi(argv[i]);
+ if (limitStackSpace > 0)
+ limitStackSpace *= 1024;
+ }
+ else
+ UseMsg();
+ }
+#endif
+ else if ( strcmp ( argv[i], "-nolock") == 0)
+ {
+#if !defined(WIN32) && !defined(__CYGWIN__)
+ if (getuid() != 0)
+ ErrorF("Warning: the -nolock option can only be used by root\n");
+ else
+#endif
+ nolock = TRUE;
+ }
+ else if ( strcmp( argv[i], "-nolisten") == 0)
+ {
+ if(++i < argc) {
+ if (_XSERVTransNoListen(argv[i]))
+ FatalError ("Failed to disable listen for %s transport",
+ argv[i]);
+ } else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-noreset") == 0)
+ {
+ dispatchExceptionAtReset = 0;
+ }
+ else if ( strcmp( argv[i], "-reset") == 0)
+ {
+ dispatchExceptionAtReset = DE_RESET;
+ }
+ else if ( strcmp( argv[i], "-p") == 0)
+ {
+ if(++i < argc)
+ defaultScreenSaverInterval = ((CARD32)atoi(argv[i])) *
+ MILLI_PER_MIN;
+ else
+ UseMsg();
+ }
+ else if (strcmp(argv[i], "-pogo") == 0)
+ {
+ dispatchException = DE_TERMINATE;
+ }
+ else if ( strcmp( argv[i], "-pn") == 0)
+ PartialNetwork = TRUE;
+ else if ( strcmp( argv[i], "-nopn") == 0)
+ PartialNetwork = FALSE;
+ else if ( strcmp( argv[i], "r") == 0)
+ defaultKeyboardControl.autoRepeat = TRUE;
+ else if ( strcmp( argv[i], "-r") == 0)
+ defaultKeyboardControl.autoRepeat = FALSE;
+ else if ( strcmp( argv[i], "-retro") == 0)
+ party_like_its_1989 = TRUE;
+ else if ( strcmp( argv[i], "-s") == 0)
+ {
+ if(++i < argc)
+ defaultScreenSaverTime = ((CARD32)atoi(argv[i])) *
+ MILLI_PER_MIN;
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-t") == 0)
+ {
+ if(++i < argc)
+ defaultPointerControl.threshold = atoi(argv[i]);
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-terminate") == 0)
+ {
+ dispatchExceptionAtReset = DE_TERMINATE;
+ }
+ else if ( strcmp( argv[i], "-to") == 0)
+ {
+ if(++i < argc)
+ TimeOutValue = ((CARD32)atoi(argv[i])) * MILLI_PER_SECOND;
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-tst") == 0)
+ {
+ noTestExtensions = TRUE;
+ }
+ else if ( strcmp( argv[i], "v") == 0)
+ defaultScreenSaverBlanking = PreferBlanking;
+ else if ( strcmp( argv[i], "-v") == 0)
+ defaultScreenSaverBlanking = DontPreferBlanking;
+ else if ( strcmp( argv[i], "-wm") == 0)
+ defaultBackingStore = WhenMapped;
+ else if ( strcmp( argv[i], "-wr") == 0)
+ whiteRoot = TRUE;
+ else if ( strcmp( argv[i], "-background") == 0) {
+ if(++i < argc) {
+ if (!strcmp ( argv[i], "none"))
+ bgNoneRoot = TRUE;
+ else
+ UseMsg();
+ }
+ }
+ else if ( strcmp( argv[i], "-maxbigreqsize") == 0) {
+ if(++i < argc) {
+ long reqSizeArg = atol(argv[i]);
+
+ /* Request size > 128MB does not make much sense... */
+ if( reqSizeArg > 0L && reqSizeArg < 128L ) {
+ maxBigRequestSize = (reqSizeArg * 1048576L) - 1L;
+ }
+ else
+ {
+ UseMsg();
+ }
+ }
+ else
+ {
+ UseMsg();
+ }
+ }
+#ifdef PANORAMIX
+ else if ( strcmp( argv[i], "+xinerama") == 0){
+ noPanoramiXExtension = FALSE;
+ }
+ else if ( strcmp( argv[i], "-xinerama") == 0){
+ noPanoramiXExtension = TRUE;
+ }
+ else if ( strcmp( argv[i], "-disablexineramaextension") == 0){
+ PanoramiXExtensionDisabledHack = TRUE;
+ }
+#endif
+ else if ( strcmp( argv[i], "-I") == 0)
+ {
+ /* ignore all remaining arguments */
+ break;
+ }
+ else if (strncmp (argv[i], "tty", 3) == 0)
+ {
+ /* init supplies us with this useless information */
+ }
+#ifdef XDMCP
+ else if ((skip = XdmcpOptions(argc, argv, i)) != i)
+ {
+ i = skip - 1;
+ }
+#endif
+ else if ( strcmp( argv[i], "-dumbSched") == 0)
+ {
+ SmartScheduleDisable = TRUE;
+ }
+ else if ( strcmp( argv[i], "-schedInterval") == 0)
+ {
+ if (++i < argc)
+ {
+ SmartScheduleInterval = atoi(argv[i]);
+ SmartScheduleSlice = SmartScheduleInterval;
+ }
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-schedMax") == 0)
+ {
+ if (++i < argc)
+ {
+ SmartScheduleMaxSlice = atoi(argv[i]);
+ }
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-render" ) == 0)
+ {
+ if (++i < argc)
+ {
+ int policy = PictureParseCmapPolicy (argv[i]);
+
+ if (policy != PictureCmapPolicyInvalid)
+ PictureCmapPolicy = policy;
+ else
+ UseMsg ();
+ }
+ else
+ UseMsg ();
+ }
+ else if ( strcmp( argv[i], "-sigstop") == 0)
+ {
+ RunFromSigStopParent = TRUE;
+ }
+ else if ( strcmp( argv[i], "+extension") == 0)
+ {
+ if (++i < argc)
+ {
+ if (!EnableDisableExtension(argv[i], TRUE))
+ EnableDisableExtensionError(argv[i], TRUE);
+ }
+ else
+ UseMsg();
+ }
+ else if ( strcmp( argv[i], "-extension") == 0)
+ {
+ if (++i < argc)
+ {
+ if (!EnableDisableExtension(argv[i], FALSE))
+ EnableDisableExtensionError(argv[i], FALSE);
+ }
+ else
+ UseMsg();
+ }
+ else
+ {
+ ErrorF("Unrecognized option: %s\n", argv[i]);
+ UseMsg();
+ FatalError("Unrecognized option: %s\n", argv[i]);
+ }
+ }
+}
+
+/* Implement a simple-minded font authorization scheme. The authorization
+ name is "hp-hostname-1", the contents are simply the host name. */
+int
+set_font_authorizations(char **authorizations, int *authlen, pointer client)
+{
+#define AUTHORIZATION_NAME "hp-hostname-1"
+#if defined(TCPCONN) || defined(STREAMSCONN)
+ static char *result = NULL;
+ static char *p = NULL;
+
+ if (p == NULL)
+ {
+ char hname[1024], *hnameptr;
+ unsigned int len;
+#if defined(IPv6) && defined(AF_INET6)
+ struct addrinfo hints, *ai = NULL;
+#else
+ struct hostent *host;
+#ifdef XTHREADS_NEEDS_BYNAMEPARAMS
+ _Xgethostbynameparams hparams;
+#endif
+#endif
+
+ gethostname(hname, 1024);
+#if defined(IPv6) && defined(AF_INET6)
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_flags = AI_CANONNAME;
+ if (getaddrinfo(hname, NULL, &hints, &ai) == 0) {
+ hnameptr = ai->ai_canonname;
+ } else {
+ hnameptr = hname;
+ }
+#else
+ host = _XGethostbyname(hname, hparams);
+ if (host == NULL)
+ hnameptr = hname;
+ else
+ hnameptr = host->h_name;
+#endif
+
+ len = strlen(hnameptr) + 1;
+ result = malloc(len + sizeof(AUTHORIZATION_NAME) + 4);
+
+ p = result;
+ *p++ = sizeof(AUTHORIZATION_NAME) >> 8;
+ *p++ = sizeof(AUTHORIZATION_NAME) & 0xff;
+ *p++ = (len) >> 8;
+ *p++ = (len & 0xff);
+
+ memmove(p, AUTHORIZATION_NAME, sizeof(AUTHORIZATION_NAME));
+ p += sizeof(AUTHORIZATION_NAME);
+ memmove(p, hnameptr, len);
+ p += len;
+#if defined(IPv6) && defined(AF_INET6)
+ if (ai) {
+ freeaddrinfo(ai);
+ }
+#endif
+ }
+ *authlen = p - result;
+ *authorizations = result;
+ return 1;
+#else /* TCPCONN */
+ return 0;
+#endif /* TCPCONN */
+}
+
+void *
+Xalloc(unsigned long amount)
+{
+ /*
+ * Xalloc used to return NULL when large amount of memory is requested. In
+ * order to catch the buggy callers this warning has been added, slated to
+ * removal by anyone who touches this code (or just looks at it) in 2011.
+ *
+ * -- Mikhail Gusarov
+ */
+ if ((long)amount <= 0)
+ ErrorF("Warning: Xalloc: "
+ "requesting unpleasantly large amount of memory: %lu bytes.\n",
+ amount);
+
+ return malloc(amount);
+}
+
+void *
+XNFalloc(unsigned long amount)
+{
+ void *ptr = malloc(amount);
+ if (!ptr)
+ FatalError("Out of memory");
+ return ptr;
+}
+
+void *
+Xcalloc(unsigned long amount)
+{
+ return calloc(1, amount);
+}
+
+void *
+XNFcalloc(unsigned long amount)
+{
+ void *ret = calloc(1, amount);
+ if (!ret)
+ FatalError("XNFcalloc: Out of memory");
+ return ret;
+}
+
+void *
+Xrealloc(void *ptr, unsigned long amount)
+{
+ /*
+ * Xrealloc used to return NULL when large amount of memory is requested. In
+ * order to catch the buggy callers this warning has been added, slated to
+ * removal by anyone who touches this code (or just looks at it) in 2011.
+ *
+ * -- Mikhail Gusarov
+ */
+ if ((long)amount <= 0)
+ ErrorF("Warning: Xrealloc: "
+ "requesting unpleasantly large amount of memory: %lu bytes.\n",
+ amount);
+
+ return realloc(ptr, amount);
+}
+
+void *
+XNFrealloc(void *ptr, unsigned long amount)
+{
+ void *ret = realloc(ptr, amount);
+ if (!ret)
+ FatalError("XNFrealloc: Out of memory");
+ return ret;
+}
+
+void
+Xfree(void *ptr)
+{
+ free(ptr);
+}
+
+
+char *
+Xstrdup(const char *s)
+{
+ if (s == NULL)
+ return NULL;
+ return strdup(s);
+}
+
+char *
+XNFstrdup(const char *s)
+{
+ char *ret;
+
+ if (s == NULL)
+ return NULL;
+
+ ret = strdup(s);
+ if (!ret)
+ FatalError("XNFstrdup: Out of memory");
+ return ret;
+}
+
+void
+SmartScheduleStopTimer (void)
+{
+ struct itimerval timer;
+
+ if (SmartScheduleDisable)
+ return;
+ timer.it_interval.tv_sec = 0;
+ timer.it_interval.tv_usec = 0;
+ timer.it_value.tv_sec = 0;
+ timer.it_value.tv_usec = 0;
+ (void) setitimer (ITIMER_REAL, &timer, 0);
+}
+
+void
+SmartScheduleStartTimer (void)
+{
+ struct itimerval timer;
+
+ if (SmartScheduleDisable)
+ return;
+ timer.it_interval.tv_sec = 0;
+ timer.it_interval.tv_usec = SmartScheduleInterval * 1000;
+ timer.it_value.tv_sec = 0;
+ timer.it_value.tv_usec = SmartScheduleInterval * 1000;
+ setitimer (ITIMER_REAL, &timer, 0);
+}
+
+static void
+SmartScheduleTimer (int sig)
+{
+ SmartScheduleTime += SmartScheduleInterval;
+}
+
+void
+SmartScheduleInit (void)
+{
+ struct sigaction act;
+
+ if (SmartScheduleDisable)
+ return;
+
+ memset((char *) &act, 0, sizeof(struct sigaction));
+
+ /* Set up the timer signal function */
+ act.sa_handler = SmartScheduleTimer;
+ sigemptyset (&act.sa_mask);
+ sigaddset (&act.sa_mask, SIGALRM);
+ if (sigaction (SIGALRM, &act, 0) < 0)
+ {
+ perror ("sigaction for smart scheduler");
+ SmartScheduleDisable = TRUE;
+ }
+}
+
+#ifdef SIG_BLOCK
+static sigset_t PreviousSignalMask;
+static int BlockedSignalCount;
+#endif
+
+void
+OsBlockSignals (void)
+{
+#ifdef SIG_BLOCK
+ if (BlockedSignalCount++ == 0)
+ {
+ sigset_t set;
+
+ sigemptyset (&set);
+ sigaddset (&set, SIGALRM);
+ sigaddset (&set, SIGVTALRM);
+#ifdef SIGWINCH
+ sigaddset (&set, SIGWINCH);
+#endif
+#ifdef SIGIO
+ sigaddset (&set, SIGIO);
+#endif
+ sigaddset (&set, SIGTSTP);
+ sigaddset (&set, SIGTTIN);
+ sigaddset (&set, SIGTTOU);
+ sigaddset (&set, SIGCHLD);
+ sigprocmask (SIG_BLOCK, &set, &PreviousSignalMask);
+ }
+#endif
+}
+
+void
+OsReleaseSignals (void)
+{
+#ifdef SIG_BLOCK
+ if (--BlockedSignalCount == 0)
+ {
+ sigprocmask (SIG_SETMASK, &PreviousSignalMask, 0);
+ }
+#endif
+}
+
+/*
+ * Pending signals may interfere with core dumping. Provide a
+ * mechanism to block signals when aborting.
+ */
+
+void
+OsAbort (void)
+{
+#ifndef __APPLE__
+ OsBlockSignals();
+#endif
+ abort();
+}
+
+#if !defined(WIN32)
+/*
+ * "safer" versions of system(3), popen(3) and pclose(3) which give up
+ * all privs before running a command.
+ *
+ * This is based on the code in FreeBSD 2.2 libc.
+ *
+ * XXX It'd be good to redirect stderr so that it ends up in the log file
+ * as well. As it is now, xkbcomp messages don't end up in the log file.
+ */
+
+int
+System(char *command)
+{
+ int pid, p;
+ void (*csig)(int);
+ int status;
+
+ if (!command)
+ return 1;
+
+ csig = signal(SIGCHLD, SIG_DFL);
+ if (csig == SIG_ERR) {
+ perror("signal");
+ return -1;
+ }
+ DebugF("System: `%s'\n", command);
+
+ switch (pid = fork()) {
+ case -1: /* error */
+ p = -1;
+ case 0: /* child */
+ if (setgid(getgid()) == -1)
+ _exit(127);
+ if (setuid(getuid()) == -1)
+ _exit(127);
+ execl("/bin/sh", "sh", "-c", command, (char *)NULL);
+ _exit(127);
+ default: /* parent */
+ do {
+ p = waitpid(pid, &status, 0);
+ } while (p == -1 && errno == EINTR);
+
+ }
+
+ if (signal(SIGCHLD, csig) == SIG_ERR) {
+ perror("signal");
+ return -1;
+ }
+
+ return p == -1 ? -1 : status;
+}
+
+static struct pid {
+ struct pid *next;
+ FILE *fp;
+ int pid;
+} *pidlist;
+
+OsSigHandlerPtr old_alarm = NULL; /* XXX horrible awful hack */
+
+pointer
+Popen(char *command, char *type)
+{
+ struct pid *cur;
+ FILE *iop;
+ int pdes[2], pid;
+
+ if (command == NULL || type == NULL)
+ return NULL;
+
+ if ((*type != 'r' && *type != 'w') || type[1])
+ return NULL;
+
+ if ((cur = malloc(sizeof(struct pid))) == NULL)
+ return NULL;
+
+ if (pipe(pdes) < 0) {
+ free(cur);
+ return NULL;
+ }
+
+ /* Ignore the smart scheduler while this is going on */
+ old_alarm = OsSignal(SIGALRM, SIG_IGN);
+ if (old_alarm == SIG_ERR) {
+ close(pdes[0]);
+ close(pdes[1]);
+ free(cur);
+ perror("signal");
+ return NULL;
+ }
+
+ switch (pid = fork()) {
+ case -1: /* error */
+ close(pdes[0]);
+ close(pdes[1]);
+ free(cur);
+ if (OsSignal(SIGALRM, old_alarm) == SIG_ERR)
+ perror("signal");
+ return NULL;
+ case 0: /* child */
+ if (setgid(getgid()) == -1)
+ _exit(127);
+ if (setuid(getuid()) == -1)
+ _exit(127);
+ if (*type == 'r') {
+ if (pdes[1] != 1) {
+ /* stdout */
+ dup2(pdes[1], 1);
+ close(pdes[1]);
+ }
+ close(pdes[0]);
+ } else {
+ if (pdes[0] != 0) {
+ /* stdin */
+ dup2(pdes[0], 0);
+ close(pdes[0]);
+ }
+ close(pdes[1]);
+ }
+ execl("/bin/sh", "sh", "-c", command, (char *)NULL);
+ _exit(127);
+ }
+
+ /* Avoid EINTR during stdio calls */
+ OsBlockSignals ();
+
+ /* parent */
+ if (*type == 'r') {
+ iop = fdopen(pdes[0], type);
+ close(pdes[1]);
+ } else {
+ iop = fdopen(pdes[1], type);
+ close(pdes[0]);
+ }
+
+ cur->fp = iop;
+ cur->pid = pid;
+ cur->next = pidlist;
+ pidlist = cur;
+
+ DebugF("Popen: `%s', fp = %p\n", command, iop);
+
+ return iop;
+}
+
+/* fopen that drops privileges */
+pointer
+Fopen(char *file, char *type)
+{
+ FILE *iop;
+#ifndef HAS_SAVED_IDS_AND_SETEUID
+ struct pid *cur;
+ int pdes[2], pid;
+
+ if (file == NULL || type == NULL)
+ return NULL;
+
+ if ((*type != 'r' && *type != 'w') || type[1])
+ return NULL;
+
+ if ((cur = malloc(sizeof(struct pid))) == NULL)
+ return NULL;
+
+ if (pipe(pdes) < 0) {
+ free(cur);
+ return NULL;
+ }
+
+ switch (pid = fork()) {
+ case -1: /* error */
+ close(pdes[0]);
+ close(pdes[1]);
+ free(cur);
+ return NULL;
+ case 0: /* child */
+ if (setgid(getgid()) == -1)
+ _exit(127);
+ if (setuid(getuid()) == -1)
+ _exit(127);
+ if (*type == 'r') {
+ if (pdes[1] != 1) {
+ /* stdout */
+ dup2(pdes[1], 1);
+ close(pdes[1]);
+ }
+ close(pdes[0]);
+ } else {
+ if (pdes[0] != 0) {
+ /* stdin */
+ dup2(pdes[0], 0);
+ close(pdes[0]);
+ }
+ close(pdes[1]);
+ }
+ execl("/bin/cat", "cat", file, (char *)NULL);
+ _exit(127);
+ }
+
+ /* Avoid EINTR during stdio calls */
+ OsBlockSignals ();
+
+ /* parent */
+ if (*type == 'r') {
+ iop = fdopen(pdes[0], type);
+ close(pdes[1]);
+ } else {
+ iop = fdopen(pdes[1], type);
+ close(pdes[0]);
+ }
+
+ cur->fp = iop;
+ cur->pid = pid;
+ cur->next = pidlist;
+ pidlist = cur;
+
+ DebugF("Fopen(%s), fp = %p\n", file, iop);
+
+ return iop;
+#else
+ int ruid, euid;
+
+ ruid = getuid();
+ euid = geteuid();
+
+ if (seteuid(ruid) == -1) {
+ return NULL;
+ }
+ iop = fopen(file, type);
+
+ if (seteuid(euid) == -1) {
+ fclose(iop);
+ return NULL;
+ }
+ return iop;
+#endif /* HAS_SAVED_IDS_AND_SETEUID */
+}
+
+int
+Pclose(pointer iop)
+{
+ struct pid *cur, *last;
+ int pstat;
+ int pid;
+
+ DebugF("Pclose: fp = %p\n", iop);
+ fclose(iop);
+
+ for (last = NULL, cur = pidlist; cur; last = cur, cur = cur->next)
+ if (cur->fp == iop)
+ break;
+ if (cur == NULL)
+ return -1;
+
+ do {
+ pid = waitpid(cur->pid, &pstat, 0);
+ } while (pid == -1 && errno == EINTR);
+
+ if (last == NULL)
+ pidlist = cur->next;
+ else
+ last->next = cur->next;
+ free(cur);
+
+ /* allow EINTR again */
+ OsReleaseSignals ();
+
+ if (old_alarm && OsSignal(SIGALRM, old_alarm) == SIG_ERR) {
+ perror("signal");
+ return -1;
+ }
+
+ return pid == -1 ? -1 : pstat;
+}
+
+int
+Fclose(pointer iop)
+{
+#ifdef HAS_SAVED_IDS_AND_SETEUID
+ return fclose(iop);
+#else
+ return Pclose(iop);
+#endif
+}
+
+#endif /* !WIN32 */
+
+
+/*
+ * CheckUserParameters: check for long command line arguments and long
+ * environment variables. By default, these checks are only done when
+ * the server's euid != ruid. In 3.3.x, these checks were done in an
+ * external wrapper utility.
+ */
+
+/* Consider LD* variables insecure? */
+#ifndef REMOVE_ENV_LD
+#define REMOVE_ENV_LD 1
+#endif
+
+/* Remove long environment variables? */
+#ifndef REMOVE_LONG_ENV
+#define REMOVE_LONG_ENV 1
+#endif
+
+/*
+ * Disallow stdout or stderr as pipes? It's possible to block the X server
+ * when piping stdout+stderr to a pipe.
+ *
+ * Don't enable this because it looks like it's going to cause problems.
+ */
+#ifndef NO_OUTPUT_PIPES
+#define NO_OUTPUT_PIPES 0
+#endif
+
+
+/* Check args and env only if running setuid (euid == 0 && euid != uid) ? */
+#ifndef CHECK_EUID
+#ifndef WIN32
+#define CHECK_EUID 1
+#else
+#define CHECK_EUID 0
+#endif
+#endif
+
+/*
+ * Maybe the locale can be faked to make isprint(3) report that everything
+ * is printable? Avoid it by default.
+ */
+#ifndef USE_ISPRINT
+#define USE_ISPRINT 0
+#endif
+
+#define MAX_ARG_LENGTH 128
+#define MAX_ENV_LENGTH 256
+#define MAX_ENV_PATH_LENGTH 2048 /* Limit for *PATH and TERMCAP */
+
+#if USE_ISPRINT
+#include <ctype.h>
+#define checkPrintable(c) isprint(c)
+#else
+#define checkPrintable(c) (((c) & 0x7f) >= 0x20 && ((c) & 0x7f) != 0x7f)
+#endif
+
+enum BadCode {
+ NotBad = 0,
+ UnsafeArg,
+ ArgTooLong,
+ UnprintableArg,
+ EnvTooLong,
+ OutputIsPipe,
+ InternalError
+};
+
+#if defined(VENDORSUPPORT)
+#define BUGADDRESS VENDORSUPPORT
+#elif defined(BUILDERADDR)
+#define BUGADDRESS BUILDERADDR
+#else
+#define BUGADDRESS "xorg@freedesktop.org"
+#endif
+
+void
+CheckUserParameters(int argc, char **argv, char **envp)
+{
+ enum BadCode bad = NotBad;
+ int i = 0, j;
+ char *a, *e = NULL;
+
+#if CHECK_EUID
+ if (geteuid() == 0 && getuid() != geteuid())
+#endif
+ {
+ /* Check each argv[] */
+ for (i = 1; i < argc; i++) {
+ if (strcmp(argv[i], "-fp") == 0)
+ {
+ i++; /* continue with next argument. skip the length check */
+ if (i >= argc)
+ break;
+ } else
+ {
+ if (strlen(argv[i]) > MAX_ARG_LENGTH) {
+ bad = ArgTooLong;
+ break;
+ }
+ }
+ a = argv[i];
+ while (*a) {
+ if (checkPrintable(*a) == 0) {
+ bad = UnprintableArg;
+ break;
+ }
+ a++;
+ }
+ if (bad)
+ break;
+ }
+ if (!bad) {
+ /* Check each envp[] */
+ for (i = 0; envp[i]; i++) {
+
+ /* Check for bad environment variables and values */
+#if REMOVE_ENV_LD
+ while (envp[i] && (strncmp(envp[i], "LD", 2) == 0)) {
+ for (j = i; envp[j]; j++) {
+ envp[j] = envp[j+1];
+ }
+ }
+#endif
+ if (envp[i] && (strlen(envp[i]) > MAX_ENV_LENGTH)) {
+#if REMOVE_LONG_ENV
+ for (j = i; envp[j]; j++) {
+ envp[j] = envp[j+1];
+ }
+ i--;
+#else
+ char *eq;
+ int len;
+
+ eq = strchr(envp[i], '=');
+ if (!eq)
+ continue;
+ len = eq - envp[i];
+ e = malloc(len + 1);
+ if (!e) {
+ bad = InternalError;
+ break;
+ }
+ strncpy(e, envp[i], len);
+ e[len] = 0;
+ if (len >= 4 &&
+ (strcmp(e + len - 4, "PATH") == 0 ||
+ strcmp(e, "TERMCAP") == 0)) {
+ if (strlen(envp[i]) > MAX_ENV_PATH_LENGTH) {
+ bad = EnvTooLong;
+ break;
+ } else {
+ free(e);
+ }
+ } else {
+ bad = EnvTooLong;
+ break;
+ }
+#endif
+ }
+ }
+ }
+#if NO_OUTPUT_PIPES
+ if (!bad) {
+ struct stat buf;
+
+ if (fstat(fileno(stdout), &buf) == 0 && S_ISFIFO(buf.st_mode))
+ bad = OutputIsPipe;
+ if (fstat(fileno(stderr), &buf) == 0 && S_ISFIFO(buf.st_mode))
+ bad = OutputIsPipe;
+ }
+#endif
+ }
+ switch (bad) {
+ case NotBad:
+ return;
+ case UnsafeArg:
+ ErrorF("Command line argument number %d is unsafe\n", i);
+ break;
+ case ArgTooLong:
+ ErrorF("Command line argument number %d is too long\n", i);
+ break;
+ case UnprintableArg:
+ ErrorF("Command line argument number %d contains unprintable"
+ " characters\n", i);
+ break;
+ case EnvTooLong:
+ ErrorF("Environment variable `%s' is too long\n", e);
+ break;
+ case OutputIsPipe:
+ ErrorF("Stdout and/or stderr is a pipe\n");
+ break;
+ case InternalError:
+ ErrorF("Internal Error\n");
+ break;
+ default:
+ ErrorF("Unknown error\n");
+ break;
+ }
+ FatalError("X server aborted because of unsafe environment\n");
+}
+
+/*
+ * CheckUserAuthorization: check if the user is allowed to start the
+ * X server. This usually means some sort of PAM checking, and it is
+ * usually only done for setuid servers (uid != euid).
+ */
+
+#ifdef USE_PAM
+#include <security/pam_appl.h>
+#include <security/pam_misc.h>
+#include <pwd.h>
+#endif /* USE_PAM */
+
+void
+CheckUserAuthorization(void)
+{
+#ifdef USE_PAM
+ static struct pam_conv conv = {
+ misc_conv,
+ NULL
+ };
+
+ pam_handle_t *pamh = NULL;
+ struct passwd *pw;
+ int retval;
+
+ if (getuid() != geteuid()) {
+ pw = getpwuid(getuid());
+ if (pw == NULL)
+ FatalError("getpwuid() failed for uid %d\n", getuid());
+
+ retval = pam_start("xserver", pw->pw_name, &conv, &pamh);
+ if (retval != PAM_SUCCESS)
+ FatalError("pam_start() failed.\n"
+ "\tMissing or mangled PAM config file or module?\n");
+
+ retval = pam_authenticate(pamh, 0);
+ if (retval != PAM_SUCCESS) {
+ pam_end(pamh, retval);
+ FatalError("PAM authentication failed, cannot start X server.\n"
+ "\tPerhaps you do not have console ownership?\n");
+ }
+
+ retval = pam_acct_mgmt(pamh, 0);
+ if (retval != PAM_SUCCESS) {
+ pam_end(pamh, retval);
+ FatalError("PAM authentication failed, cannot start X server.\n"
+ "\tPerhaps you do not have console ownership?\n");
+ }
+
+ /* this is not a session, so do not do session management */
+ pam_end(pamh, PAM_SUCCESS);
+ }
+#endif
+}
+
+/*
+ * Tokenize a string into a NULL terminated array of strings. Always returns
+ * an allocated array unless an error occurs.
+ */
+char**
+xstrtokenize(const char *str, const char *separators)
+{
+ char **list, **nlist;
+ char *tok, *tmp;
+ unsigned num = 0, n;
+
+ if (!str)
+ return NULL;
+ list = calloc(1, sizeof(*list));
+ if (!list)
+ return NULL;
+ tmp = strdup(str);
+ if (!tmp)
+ goto error;
+ for (tok = strtok(tmp, separators); tok; tok = strtok(NULL, separators)) {
+ nlist = realloc(list, (num + 2) * sizeof(*list));
+ if (!nlist)
+ goto error;
+ list = nlist;
+ list[num] = strdup(tok);
+ if (!list[num])
+ goto error;
+ list[++num] = NULL;
+ }
+ free(tmp);
+ return list;
+
+error:
+ free(tmp);
+ for (n = 0; n < num; n++)
+ free(list[n]);
+ free(list);
+ return NULL;
+}
diff --git a/xorg-server/render/render.c b/xorg-server/render/render.c
index 8ff8ee6f6..c5da6d78f 100644
--- a/xorg-server/render/render.c
+++ b/xorg-server/render/render.c
@@ -1372,8 +1372,10 @@ ProcRenderCompositeGlyphs (ClientPtr client)
else
{
listsBase = (GlyphListPtr) malloc(nlist * sizeof (GlyphListRec));
- if (!listsBase)
- return BadAlloc;
+ if (!listsBase) {
+ rc = BadAlloc;
+ goto bail;
+ }
}
buffer = (CARD8 *) (stuff + 1);
glyphs = glyphsBase;
@@ -1392,13 +1394,7 @@ ProcRenderCompositeGlyphs (ClientPtr client)
GlyphSetType, client,
DixUseAccess);
if (rc != Success)
- {
- if (glyphsBase != glyphsLocal)
- free(glyphsBase);
- if (listsBase != listsLocal)
- free(listsBase);
- return rc;
- }
+ goto bail;
}
buffer += 4;
}
@@ -1436,8 +1432,10 @@ ProcRenderCompositeGlyphs (ClientPtr client)
lists++;
}
}
- if (buffer > end)
- return BadLength;
+ if (buffer > end) {
+ rc = BadLength;
+ goto bail;
+ }
CompositeGlyphs (stuff->op,
pSrc,
@@ -1448,13 +1446,14 @@ ProcRenderCompositeGlyphs (ClientPtr client)
nlist,
listsBase,
glyphsBase);
+ rc = Success;
+bail:
if (glyphsBase != glyphsLocal)
free(glyphsBase);
if (listsBase != listsLocal)
free(listsBase);
-
- return Success;
+ return rc;
}
static int
diff --git a/xorg-server/xfixes/region.c b/xorg-server/xfixes/region.c
index d7270f10d..f49349629 100644
--- a/xorg-server/xfixes/region.c
+++ b/xorg-server/xfixes/region.c
@@ -1,922 +1,920 @@
-/*
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Keith Packard not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Keith Packard makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include "xfixesint.h"
-#include "scrnintstr.h"
-#include <picturestr.h>
-extern int RenderErrBase;
-#include <regionstr.h>
-#include <gcstruct.h>
-#include <window.h>
-
-RESTYPE RegionResType;
-
-static int
-RegionResFree (pointer data, XID id)
-{
- RegionPtr pRegion = (RegionPtr) data;
-
- RegionDestroy(pRegion);
- return Success;
-}
-
-RegionPtr
-XFixesRegionCopy (RegionPtr pRegion)
-{
- RegionPtr pNew = RegionCreate(RegionExtents(pRegion),
- RegionNumRects(pRegion));
- if (!pNew)
- return 0;
- if (!RegionCopy(pNew, pRegion))
- {
- RegionDestroy(pNew);
- return 0;
- }
- return pNew;
-}
-
-Bool
-XFixesRegionInit (void)
-{
- RegionResType = CreateNewResourceType(RegionResFree, "XFixesRegion");
-
- return RegionResType != 0;
-}
-
-int
-ProcXFixesCreateRegion (ClientPtr client)
-{
- int things;
- RegionPtr pRegion;
- REQUEST (xXFixesCreateRegionReq);
-
- REQUEST_AT_LEAST_SIZE(xXFixesCreateRegionReq);
- LEGAL_NEW_RESOURCE (stuff->region, client);
-
- things = (client->req_len << 2) - sizeof (xXFixesCreateRegionReq);
- if (things & 4)
- return BadLength;
- things >>= 3;
-
- pRegion = RegionFromRects(things, (xRectangle *) (stuff + 1), CT_UNSORTED);
- if (!pRegion)
- return BadAlloc;
- if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
- return BadAlloc;
-
- return Success;
-}
-
-int
-SProcXFixesCreateRegion (ClientPtr client)
-{
- register int n;
- REQUEST(xXFixesCreateRegionReq);
-
- swaps(&stuff->length, n);
- REQUEST_AT_LEAST_SIZE(xXFixesCreateRegionReq);
- swapl(&stuff->region, n);
- SwapRestS(stuff);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesCreateRegionFromBitmap (ClientPtr client)
-{
- RegionPtr pRegion;
- PixmapPtr pPixmap;
- int rc;
- REQUEST (xXFixesCreateRegionFromBitmapReq);
-
- REQUEST_SIZE_MATCH (xXFixesCreateRegionFromBitmapReq);
- LEGAL_NEW_RESOURCE (stuff->region, client);
-
- rc = dixLookupResourceByType((pointer *)&pPixmap, stuff->bitmap, RT_PIXMAP,
- client, DixReadAccess);
- if (rc != Success)
- {
- client->errorValue = stuff->bitmap;
- return rc;
- }
- if (pPixmap->drawable.depth != 1)
- return BadMatch;
-
- pRegion = BitmapToRegion(pPixmap->drawable.pScreen, pPixmap);
-
- if (!pRegion)
- return BadAlloc;
-
- if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
- return BadAlloc;
-
- return Success;
-}
-
-int
-SProcXFixesCreateRegionFromBitmap (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesCreateRegionFromBitmapReq);
-
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH (xXFixesCreateRegionFromBitmapReq);
- swapl(&stuff->region, n);
- swapl(&stuff->bitmap, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesCreateRegionFromWindow (ClientPtr client)
-{
- RegionPtr pRegion;
- Bool copy = TRUE;
- WindowPtr pWin;
- int rc;
- REQUEST (xXFixesCreateRegionFromWindowReq);
-
- REQUEST_SIZE_MATCH (xXFixesCreateRegionFromWindowReq);
- LEGAL_NEW_RESOURCE (stuff->region, client);
- rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW,
- client, DixGetAttrAccess);
- if (rc != Success)
- {
- client->errorValue = stuff->window;
- return rc;
- }
- switch (stuff->kind) {
- case WindowRegionBounding:
- pRegion = wBoundingShape(pWin);
- if (!pRegion)
- {
- pRegion = CreateBoundingShape (pWin);
- copy = FALSE;
- }
- break;
- case WindowRegionClip:
- pRegion = wClipShape(pWin);
- if (!pRegion)
- {
- pRegion = CreateClipShape (pWin);
- copy = FALSE;
- }
- break;
- default:
- client->errorValue = stuff->kind;
- return BadValue;
- }
- if (copy && pRegion)
- pRegion = XFixesRegionCopy (pRegion);
- if (!pRegion)
- return BadAlloc;
- if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
- return BadAlloc;
-
- return Success;
-}
-
-int
-SProcXFixesCreateRegionFromWindow (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesCreateRegionFromWindowReq);
-
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH (xXFixesCreateRegionFromWindowReq);
- swapl(&stuff->region, n);
- swapl(&stuff->window, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesCreateRegionFromGC (ClientPtr client)
-{
- RegionPtr pRegion, pClip;
- GCPtr pGC;
- int rc;
- REQUEST (xXFixesCreateRegionFromGCReq);
-
- REQUEST_SIZE_MATCH (xXFixesCreateRegionFromGCReq);
- LEGAL_NEW_RESOURCE (stuff->region, client);
-
- rc = dixLookupGC(&pGC, stuff->gc, client, DixGetAttrAccess);
- if (rc != Success)
- return rc;
-
- switch (pGC->clientClipType) {
- case CT_PIXMAP:
- pRegion = BitmapToRegion(pGC->pScreen, (PixmapPtr) pGC->clientClip);
- if (!pRegion)
- return BadAlloc;
- break;
- case CT_REGION:
- pClip = (RegionPtr) pGC->clientClip;
- pRegion = XFixesRegionCopy (pClip);
- if (!pRegion)
- return BadAlloc;
- break;
- default:
- return BadImplementation; /* assume sane server bits */
- }
-
- if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
- return BadAlloc;
-
- return Success;
-}
-
-int
-SProcXFixesCreateRegionFromGC (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesCreateRegionFromGCReq);
-
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH (xXFixesCreateRegionFromGCReq);
- swapl(&stuff->region, n);
- swapl(&stuff->gc, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesCreateRegionFromPicture (ClientPtr client)
-{
- RegionPtr pRegion;
- PicturePtr pPicture;
- REQUEST (xXFixesCreateRegionFromPictureReq);
-
- REQUEST_SIZE_MATCH (xXFixesCreateRegionFromPictureReq);
- LEGAL_NEW_RESOURCE (stuff->region, client);
-
- VERIFY_PICTURE(pPicture, stuff->picture, client, DixGetAttrAccess);
-
- switch (pPicture->clientClipType) {
- case CT_PIXMAP:
- pRegion = BitmapToRegion(pPicture->pDrawable->pScreen,
- (PixmapPtr) pPicture->clientClip);
- if (!pRegion)
- return BadAlloc;
- break;
- case CT_REGION:
- pRegion = XFixesRegionCopy ((RegionPtr) pPicture->clientClip);
- if (!pRegion)
- return BadAlloc;
- break;
- default:
- return BadImplementation; /* assume sane server bits */
- }
-
- if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
- return BadAlloc;
-
- return Success;
-}
-
-int
-SProcXFixesCreateRegionFromPicture (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesCreateRegionFromPictureReq);
-
- swaps(&stuff->length, n);
- REQUEST_SIZE_MATCH (xXFixesCreateRegionFromPictureReq);
- swapl(&stuff->region, n);
- swapl(&stuff->picture, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesDestroyRegion (ClientPtr client)
-{
- REQUEST (xXFixesDestroyRegionReq);
- RegionPtr pRegion;
-
- REQUEST_SIZE_MATCH(xXFixesDestroyRegionReq);
- VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
- FreeResource (stuff->region, RT_NONE);
- return Success;
-}
-
-int
-SProcXFixesDestroyRegion (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesDestroyRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH(xXFixesDestroyRegionReq);
- swapl (&stuff->region, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesSetRegion (ClientPtr client)
-{
- int things;
- RegionPtr pRegion, pNew;
- REQUEST (xXFixesSetRegionReq);
-
- REQUEST_AT_LEAST_SIZE(xXFixesSetRegionReq);
- VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
-
- things = (client->req_len << 2) - sizeof (xXFixesCreateRegionReq);
- if (things & 4)
- return BadLength;
- things >>= 3;
-
- pNew = RegionFromRects(things, (xRectangle *) (stuff + 1), CT_UNSORTED);
- if (!pNew)
- return BadAlloc;
- if (!RegionCopy(pRegion, pNew))
- {
- RegionDestroy(pNew);
- return BadAlloc;
- }
- RegionDestroy(pNew);
- return Success;
-}
-
-int
-SProcXFixesSetRegion (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesSetRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_AT_LEAST_SIZE(xXFixesSetRegionReq);
- swapl (&stuff->region, n);
- SwapRestS(stuff);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesCopyRegion (ClientPtr client)
-{
- RegionPtr pSource, pDestination;
- REQUEST (xXFixesCopyRegionReq);
-
- VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
- VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
-
- if (!RegionCopy(pDestination, pSource))
- return BadAlloc;
-
- return Success;
-}
-
-int
-SProcXFixesCopyRegion (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesCopyRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_AT_LEAST_SIZE(xXFixesCopyRegionReq);
- swapl (&stuff->source, n);
- swapl (&stuff->destination, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesCombineRegion (ClientPtr client)
-{
- RegionPtr pSource1, pSource2, pDestination;
- REQUEST (xXFixesCombineRegionReq);
-
- REQUEST_SIZE_MATCH (xXFixesCombineRegionReq);
- VERIFY_REGION(pSource1, stuff->source1, client, DixReadAccess);
- VERIFY_REGION(pSource2, stuff->source2, client, DixReadAccess);
- VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
-
- switch (stuff->xfixesReqType) {
- case X_XFixesUnionRegion:
- if (!RegionUnion(pDestination, pSource1, pSource2))
- return BadAlloc;
- break;
- case X_XFixesIntersectRegion:
- if (!RegionIntersect(pDestination, pSource1, pSource2))
- return BadAlloc;
- break;
- case X_XFixesSubtractRegion:
- if (!RegionSubtract(pDestination, pSource1, pSource2))
- return BadAlloc;
- break;
- }
-
- return Success;
-}
-
-int
-SProcXFixesCombineRegion (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesCombineRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH (xXFixesCombineRegionReq);
- swapl (&stuff->source1, n);
- swapl (&stuff->source2, n);
- swapl (&stuff->destination, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesInvertRegion (ClientPtr client)
-{
- RegionPtr pSource, pDestination;
- BoxRec bounds;
- REQUEST(xXFixesInvertRegionReq);
-
- REQUEST_SIZE_MATCH(xXFixesInvertRegionReq);
- VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
- VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
-
- /* Compute bounds, limit to 16 bits */
- bounds.x1 = stuff->x;
- bounds.y1 = stuff->y;
- if ((int) stuff->x + (int) stuff->width > MAXSHORT)
- bounds.x2 = MAXSHORT;
- else
- bounds.x2 = stuff->x + stuff->width;
-
- if ((int) stuff->y + (int) stuff->height > MAXSHORT)
- bounds.y2 = MAXSHORT;
- else
- bounds.y2 = stuff->y + stuff->height;
-
- if (!RegionInverse(pDestination, pSource, &bounds))
- return BadAlloc;
-
- return Success;
-}
-
-int
-SProcXFixesInvertRegion (ClientPtr client)
-{
- int n;
- REQUEST(xXFixesInvertRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH(xXFixesInvertRegionReq);
- swapl (&stuff->source, n);
- swaps (&stuff->x, n);
- swaps (&stuff->y, n);
- swaps (&stuff->width, n);
- swaps (&stuff->height, n);
- swapl (&stuff->destination, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesTranslateRegion (ClientPtr client)
-{
- RegionPtr pRegion;
- REQUEST(xXFixesTranslateRegionReq);
-
- REQUEST_SIZE_MATCH(xXFixesTranslateRegionReq);
- VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
-
- RegionTranslate(pRegion, stuff->dx, stuff->dy);
- return Success;
-}
-
-int
-SProcXFixesTranslateRegion (ClientPtr client)
-{
- int n;
- REQUEST(xXFixesTranslateRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH(xXFixesTranslateRegionReq);
- swapl (&stuff->region, n);
- swaps (&stuff->dx, n);
- swaps (&stuff->dy, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesRegionExtents (ClientPtr client)
-{
- RegionPtr pSource, pDestination;
- REQUEST(xXFixesRegionExtentsReq);
-
- REQUEST_SIZE_MATCH(xXFixesRegionExtentsReq);
- VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
- VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
-
- RegionReset(pDestination, RegionExtents(pSource));
-
- return Success;
-}
-
-int
-SProcXFixesRegionExtents (ClientPtr client)
-{
- int n;
- REQUEST(xXFixesRegionExtentsReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH(xXFixesRegionExtentsReq);
- swapl (&stuff->source, n);
- swapl (&stuff->destination, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesFetchRegion (ClientPtr client)
-{
- RegionPtr pRegion;
- xXFixesFetchRegionReply *reply;
- xRectangle *pRect;
- BoxPtr pExtent;
- BoxPtr pBox;
- int i, nBox;
- REQUEST(xXFixesFetchRegionReq);
-
- REQUEST_SIZE_MATCH(xXFixesFetchRegionReq);
- VERIFY_REGION(pRegion, stuff->region, client, DixReadAccess);
-
- pExtent = RegionExtents(pRegion);
- pBox = RegionRects (pRegion);
- nBox = RegionNumRects (pRegion);
-
- reply = malloc(sizeof (xXFixesFetchRegionReply) +
- nBox * sizeof (xRectangle));
- if (!reply)
- return BadAlloc;
- reply->type = X_Reply;
- reply->sequenceNumber = client->sequence;
- reply->length = nBox << 1;
- reply->x = pExtent->x1;
- reply->y = pExtent->y1;
- reply->width = pExtent->x2 - pExtent->x1;
- reply->height = pExtent->y2 - pExtent->y1;
-
- pRect = (xRectangle *) (reply + 1);
- for (i = 0; i < nBox; i++)
- {
- pRect[i].x = pBox[i].x1;
- pRect[i].y = pBox[i].y1;
- pRect[i].width = pBox[i].x2 - pBox[i].x1;
- pRect[i].height = pBox[i].y2 - pBox[i].y1;
- }
- if (client->swapped)
- {
- int n;
- swaps (&reply->sequenceNumber, n);
- swapl (&reply->length, n);
- swaps (&reply->x, n);
- swaps (&reply->y, n);
- swaps (&reply->width, n);
- swaps (&reply->height, n);
- SwapShorts ((INT16 *) pRect, nBox * 4);
- }
- (void) WriteToClient(client, sizeof (xXFixesFetchRegionReply) +
- nBox * sizeof (xRectangle), (char *) reply);
- free(reply);
- return Success;
-}
-
-int
-SProcXFixesFetchRegion (ClientPtr client)
-{
- int n;
- REQUEST(xXFixesFetchRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH(xXFixesFetchRegionReq);
- swapl (&stuff->region, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesSetGCClipRegion (ClientPtr client)
-{
- GCPtr pGC;
- RegionPtr pRegion;
- ChangeGCVal vals[2];
- int rc;
- REQUEST(xXFixesSetGCClipRegionReq);
- REQUEST_SIZE_MATCH(xXFixesSetGCClipRegionReq);
-
- rc = dixLookupGC(&pGC, stuff->gc, client, DixSetAttrAccess);
- if (rc != Success)
- return rc;
-
- VERIFY_REGION_OR_NONE (pRegion, stuff->region, client, DixReadAccess);
-
- if (pRegion)
- {
- pRegion = XFixesRegionCopy (pRegion);
- if (!pRegion)
- return BadAlloc;
- }
-
- vals[0].val = stuff->xOrigin;
- vals[1].val = stuff->yOrigin;
- ChangeGC (NullClient, pGC, GCClipXOrigin|GCClipYOrigin, vals);
- (*pGC->funcs->ChangeClip)(pGC, pRegion ? CT_REGION : CT_NONE, (pointer)pRegion, 0);
-
- return Success;
-}
-
-int
-SProcXFixesSetGCClipRegion (ClientPtr client)
-{
- int n;
- REQUEST(xXFixesSetGCClipRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH(xXFixesSetGCClipRegionReq);
- swapl (&stuff->gc, n);
- swapl (&stuff->region, n);
- swaps (&stuff->xOrigin, n);
- swaps (&stuff->yOrigin, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-typedef RegionPtr (*CreateDftPtr)(WindowPtr pWin);
-
-int
-ProcXFixesSetWindowShapeRegion (ClientPtr client)
-{
- WindowPtr pWin;
- RegionPtr pRegion;
- RegionPtr *pDestRegion;
- int rc;
- REQUEST(xXFixesSetWindowShapeRegionReq);
-
- REQUEST_SIZE_MATCH(xXFixesSetWindowShapeRegionReq);
- rc = dixLookupResourceByType((pointer *)&pWin, stuff->dest, RT_WINDOW,
- client, DixSetAttrAccess);
- if (rc != Success)
- {
- client->errorValue = stuff->dest;
- return rc;
- }
- VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, DixWriteAccess);
- switch (stuff->destKind) {
- case ShapeBounding:
- case ShapeClip:
- case ShapeInput:
- break;
- default:
- client->errorValue = stuff->destKind;
- return BadValue;
- }
- if (pRegion)
- {
- pRegion = XFixesRegionCopy (pRegion);
- if (!pRegion)
- return BadAlloc;
- if (!pWin->optional)
- MakeWindowOptional (pWin);
- switch (stuff->destKind) {
- default:
- case ShapeBounding:
- pDestRegion = &pWin->optional->boundingShape;
- break;
- case ShapeClip:
- pDestRegion = &pWin->optional->clipShape;
- break;
- case ShapeInput:
- pDestRegion = &pWin->optional->inputShape;
- break;
- }
- if (stuff->xOff || stuff->yOff)
- RegionTranslate(pRegion, stuff->xOff, stuff->yOff);
- }
- else
- {
- if (pWin->optional)
- {
- switch (stuff->destKind) {
- default:
- case ShapeBounding:
- pDestRegion = &pWin->optional->boundingShape;
- break;
- case ShapeClip:
- pDestRegion = &pWin->optional->clipShape;
- break;
- case ShapeInput:
- pDestRegion = &pWin->optional->inputShape;
- break;
- }
- }
- else
- pDestRegion = &pRegion; /* a NULL region pointer */
- }
- if (*pDestRegion)
- RegionDestroy(*pDestRegion);
- *pDestRegion = pRegion;
- (*pWin->drawable.pScreen->SetShape) (pWin, stuff->destKind);
- SendShapeNotify (pWin, stuff->destKind);
- return Success;
-}
-
-int
-SProcXFixesSetWindowShapeRegion (ClientPtr client)
-{
- int n;
- REQUEST(xXFixesSetWindowShapeRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH(xXFixesSetWindowShapeRegionReq);
- swapl (&stuff->dest, n);
- swaps (&stuff->xOff, n);
- swaps (&stuff->yOff, n);
- swapl (&stuff->region, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesSetPictureClipRegion (ClientPtr client)
-{
- PicturePtr pPicture;
- RegionPtr pRegion;
- ScreenPtr pScreen;
- PictureScreenPtr ps;
- REQUEST(xXFixesSetPictureClipRegionReq);
-
- REQUEST_SIZE_MATCH (xXFixesSetPictureClipRegionReq);
- VERIFY_PICTURE(pPicture, stuff->picture, client, DixSetAttrAccess);
- pScreen = pPicture->pDrawable->pScreen;
- ps = GetPictureScreen (pScreen);
- VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, DixReadAccess);
-
- return SetPictureClipRegion (pPicture, stuff->xOrigin, stuff->yOrigin,
- pRegion);
-}
-
-int
-SProcXFixesSetPictureClipRegion (ClientPtr client)
-{
- int n;
- REQUEST(xXFixesSetPictureClipRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH (xXFixesSetPictureClipRegionReq);
- swapl (&stuff->picture, n);
- swapl (&stuff->region, n);
- swaps (&stuff->xOrigin, n);
- swaps (&stuff->yOrigin, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-int
-ProcXFixesExpandRegion (ClientPtr client)
-{
- RegionPtr pSource, pDestination;
- REQUEST (xXFixesExpandRegionReq);
- BoxPtr pTmp;
- BoxPtr pSrc;
- int nBoxes;
- int i;
-
- REQUEST_SIZE_MATCH (xXFixesExpandRegionReq);
- VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
- VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
-
- nBoxes = RegionNumRects(pSource);
- pSrc = RegionRects(pSource);
- if (nBoxes)
- {
- pTmp = malloc(nBoxes * sizeof (BoxRec));
- if (!pTmp)
- return BadAlloc;
- for (i = 0; i < nBoxes; i++)
- {
- pTmp[i].x1 = pSrc[i].x1 - stuff->left;
- pTmp[i].x2 = pSrc[i].x2 + stuff->right;
- pTmp[i].y1 = pSrc[i].y1 - stuff->top;
- pTmp[i].y2 = pSrc[i].y2 + stuff->bottom;
- }
- RegionEmpty(pDestination);
- for (i = 0; i < nBoxes; i++)
- {
- RegionRec r;
- RegionInit(&r, &pTmp[i], 0);
- RegionUnion(pDestination, pDestination, &r);
- }
- free(pTmp);
- }
- return Success;
-}
-
-int
-SProcXFixesExpandRegion (ClientPtr client)
-{
- int n;
- REQUEST (xXFixesExpandRegionReq);
-
- swaps (&stuff->length, n);
- REQUEST_SIZE_MATCH (xXFixesExpandRegionReq);
- swapl (&stuff->source, n);
- swapl (&stuff->destination, n);
- swaps (&stuff->left, n);
- swaps (&stuff->right, n);
- swaps (&stuff->top, n);
- swaps (&stuff->bottom, n);
- return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
-}
-
-#ifdef PANORAMIX
-#include "panoramiX.h"
-#include "panoramiXsrv.h"
-
-int
-PanoramiXFixesSetGCClipRegion (ClientPtr client)
-{
- REQUEST(xXFixesSetGCClipRegionReq);
- int result = Success, j;
- PanoramiXRes *gc;
- REQUEST_SIZE_MATCH(xXFixesSetGCClipRegionReq);
-
- if ((result = dixLookupResourceByType((void **)&gc, stuff->gc, XRT_GC,
- client, DixWriteAccess))) {
- client->errorValue = stuff->gc;
- return result;
- }
-
- FOR_NSCREENS_BACKWARD(j) {
- stuff->gc = gc->info[j].id;
- result = (*PanoramiXSaveXFixesVector[X_XFixesSetGCClipRegion]) (client);
- if(result != Success) break;
- }
-
- return result;
-}
-
-int
-PanoramiXFixesSetWindowShapeRegion (ClientPtr client)
-{
- int result = Success, j;
- PanoramiXRes *win;
- REQUEST(xXFixesSetWindowShapeRegionReq);
-
- REQUEST_SIZE_MATCH(xXFixesSetWindowShapeRegionReq);
-
- if ((result = dixLookupResourceByType((void **)&win, stuff->dest,
- XRT_WINDOW, client,
- DixWriteAccess))) {
- client->errorValue = stuff->dest;
- return result;
- }
-
- FOR_NSCREENS_FORWARD(j) {
- stuff->dest = win->info[j].id;
- result = (*PanoramiXSaveXFixesVector[X_XFixesSetWindowShapeRegion]) (client);
- if(result != Success) break;
- }
-
- return result;
-}
-
-int
-PanoramiXFixesSetPictureClipRegion (ClientPtr client)
-{
- REQUEST(xXFixesSetPictureClipRegionReq);
- int result = Success, j;
- PanoramiXRes *pict;
-
- REQUEST_SIZE_MATCH (xXFixesSetPictureClipRegionReq);
-
- if ((result = dixLookupResourceByType((void **)&pict, stuff->picture,
- XRT_PICTURE, client,
- DixWriteAccess))) {
- client->errorValue = stuff->picture;
- return result;
- }
-
- FOR_NSCREENS_BACKWARD(j) {
- stuff->picture = pict->info[j].id;
- result = (*PanoramiXSaveXFixesVector[X_XFixesSetPictureClipRegion]) (client);
- if(result != Success) break;
- }
-
- return result;
-}
-
-#endif
+/*
+ * Copyright © 2003 Keith Packard
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and its
+ * documentation for any purpose is hereby granted without fee, provided that
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of Keith Packard not be used in
+ * advertising or publicity pertaining to distribution of the software without
+ * specific, written prior permission. Keith Packard makes no
+ * representations about the suitability of this software for any purpose. It
+ * is provided "as is" without express or implied warranty.
+ *
+ * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
+ * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
+ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
+ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include "xfixesint.h"
+#include "scrnintstr.h"
+#include <picturestr.h>
+extern int RenderErrBase;
+#include <regionstr.h>
+#include <gcstruct.h>
+#include <window.h>
+
+RESTYPE RegionResType;
+
+static int
+RegionResFree (pointer data, XID id)
+{
+ RegionPtr pRegion = (RegionPtr) data;
+
+ RegionDestroy(pRegion);
+ return Success;
+}
+
+RegionPtr
+XFixesRegionCopy (RegionPtr pRegion)
+{
+ RegionPtr pNew = RegionCreate(RegionExtents(pRegion),
+ RegionNumRects(pRegion));
+ if (!pNew)
+ return 0;
+ if (!RegionCopy(pNew, pRegion))
+ {
+ RegionDestroy(pNew);
+ return 0;
+ }
+ return pNew;
+}
+
+Bool
+XFixesRegionInit (void)
+{
+ RegionResType = CreateNewResourceType(RegionResFree, "XFixesRegion");
+
+ return RegionResType != 0;
+}
+
+int
+ProcXFixesCreateRegion (ClientPtr client)
+{
+ int things;
+ RegionPtr pRegion;
+ REQUEST (xXFixesCreateRegionReq);
+
+ REQUEST_AT_LEAST_SIZE(xXFixesCreateRegionReq);
+ LEGAL_NEW_RESOURCE (stuff->region, client);
+
+ things = (client->req_len << 2) - sizeof (xXFixesCreateRegionReq);
+ if (things & 4)
+ return BadLength;
+ things >>= 3;
+
+ pRegion = RegionFromRects(things, (xRectangle *) (stuff + 1), CT_UNSORTED);
+ if (!pRegion)
+ return BadAlloc;
+ if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
+ return BadAlloc;
+
+ return Success;
+}
+
+int
+SProcXFixesCreateRegion (ClientPtr client)
+{
+ register int n;
+ REQUEST(xXFixesCreateRegionReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_AT_LEAST_SIZE(xXFixesCreateRegionReq);
+ swapl(&stuff->region, n);
+ SwapRestS(stuff);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesCreateRegionFromBitmap (ClientPtr client)
+{
+ RegionPtr pRegion;
+ PixmapPtr pPixmap;
+ int rc;
+ REQUEST (xXFixesCreateRegionFromBitmapReq);
+
+ REQUEST_SIZE_MATCH (xXFixesCreateRegionFromBitmapReq);
+ LEGAL_NEW_RESOURCE (stuff->region, client);
+
+ rc = dixLookupResourceByType((pointer *)&pPixmap, stuff->bitmap, RT_PIXMAP,
+ client, DixReadAccess);
+ if (rc != Success)
+ {
+ client->errorValue = stuff->bitmap;
+ return rc;
+ }
+ if (pPixmap->drawable.depth != 1)
+ return BadMatch;
+
+ pRegion = BitmapToRegion(pPixmap->drawable.pScreen, pPixmap);
+
+ if (!pRegion)
+ return BadAlloc;
+
+ if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
+ return BadAlloc;
+
+ return Success;
+}
+
+int
+SProcXFixesCreateRegionFromBitmap (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesCreateRegionFromBitmapReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH (xXFixesCreateRegionFromBitmapReq);
+ swapl(&stuff->region, n);
+ swapl(&stuff->bitmap, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesCreateRegionFromWindow (ClientPtr client)
+{
+ RegionPtr pRegion;
+ Bool copy = TRUE;
+ WindowPtr pWin;
+ int rc;
+ REQUEST (xXFixesCreateRegionFromWindowReq);
+
+ REQUEST_SIZE_MATCH (xXFixesCreateRegionFromWindowReq);
+ LEGAL_NEW_RESOURCE (stuff->region, client);
+ rc = dixLookupResourceByType((pointer *)&pWin, stuff->window, RT_WINDOW,
+ client, DixGetAttrAccess);
+ if (rc != Success)
+ {
+ client->errorValue = stuff->window;
+ return rc;
+ }
+ switch (stuff->kind) {
+ case WindowRegionBounding:
+ pRegion = wBoundingShape(pWin);
+ if (!pRegion)
+ {
+ pRegion = CreateBoundingShape (pWin);
+ copy = FALSE;
+ }
+ break;
+ case WindowRegionClip:
+ pRegion = wClipShape(pWin);
+ if (!pRegion)
+ {
+ pRegion = CreateClipShape (pWin);
+ copy = FALSE;
+ }
+ break;
+ default:
+ client->errorValue = stuff->kind;
+ return BadValue;
+ }
+ if (copy && pRegion)
+ pRegion = XFixesRegionCopy (pRegion);
+ if (!pRegion)
+ return BadAlloc;
+ if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
+ return BadAlloc;
+
+ return Success;
+}
+
+int
+SProcXFixesCreateRegionFromWindow (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesCreateRegionFromWindowReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH (xXFixesCreateRegionFromWindowReq);
+ swapl(&stuff->region, n);
+ swapl(&stuff->window, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesCreateRegionFromGC (ClientPtr client)
+{
+ RegionPtr pRegion, pClip;
+ GCPtr pGC;
+ int rc;
+ REQUEST (xXFixesCreateRegionFromGCReq);
+
+ REQUEST_SIZE_MATCH (xXFixesCreateRegionFromGCReq);
+ LEGAL_NEW_RESOURCE (stuff->region, client);
+
+ rc = dixLookupGC(&pGC, stuff->gc, client, DixGetAttrAccess);
+ if (rc != Success)
+ return rc;
+
+ switch (pGC->clientClipType) {
+ case CT_PIXMAP:
+ pRegion = BitmapToRegion(pGC->pScreen, (PixmapPtr) pGC->clientClip);
+ if (!pRegion)
+ return BadAlloc;
+ break;
+ case CT_REGION:
+ pClip = (RegionPtr) pGC->clientClip;
+ pRegion = XFixesRegionCopy (pClip);
+ if (!pRegion)
+ return BadAlloc;
+ break;
+ default:
+ return BadImplementation; /* assume sane server bits */
+ }
+
+ if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
+ return BadAlloc;
+
+ return Success;
+}
+
+int
+SProcXFixesCreateRegionFromGC (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesCreateRegionFromGCReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH (xXFixesCreateRegionFromGCReq);
+ swapl(&stuff->region, n);
+ swapl(&stuff->gc, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesCreateRegionFromPicture (ClientPtr client)
+{
+ RegionPtr pRegion;
+ PicturePtr pPicture;
+ REQUEST (xXFixesCreateRegionFromPictureReq);
+
+ REQUEST_SIZE_MATCH (xXFixesCreateRegionFromPictureReq);
+ LEGAL_NEW_RESOURCE (stuff->region, client);
+
+ VERIFY_PICTURE(pPicture, stuff->picture, client, DixGetAttrAccess);
+
+ switch (pPicture->clientClipType) {
+ case CT_PIXMAP:
+ pRegion = BitmapToRegion(pPicture->pDrawable->pScreen,
+ (PixmapPtr) pPicture->clientClip);
+ if (!pRegion)
+ return BadAlloc;
+ break;
+ case CT_REGION:
+ pRegion = XFixesRegionCopy ((RegionPtr) pPicture->clientClip);
+ if (!pRegion)
+ return BadAlloc;
+ break;
+ default:
+ return BadImplementation; /* assume sane server bits */
+ }
+
+ if (!AddResource (stuff->region, RegionResType, (pointer) pRegion))
+ return BadAlloc;
+
+ return Success;
+}
+
+int
+SProcXFixesCreateRegionFromPicture (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesCreateRegionFromPictureReq);
+
+ swaps(&stuff->length, n);
+ REQUEST_SIZE_MATCH (xXFixesCreateRegionFromPictureReq);
+ swapl(&stuff->region, n);
+ swapl(&stuff->picture, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesDestroyRegion (ClientPtr client)
+{
+ REQUEST (xXFixesDestroyRegionReq);
+ RegionPtr pRegion;
+
+ REQUEST_SIZE_MATCH(xXFixesDestroyRegionReq);
+ VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
+ FreeResource (stuff->region, RT_NONE);
+ return Success;
+}
+
+int
+SProcXFixesDestroyRegion (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesDestroyRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXFixesDestroyRegionReq);
+ swapl (&stuff->region, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesSetRegion (ClientPtr client)
+{
+ int things;
+ RegionPtr pRegion, pNew;
+ REQUEST (xXFixesSetRegionReq);
+
+ REQUEST_AT_LEAST_SIZE(xXFixesSetRegionReq);
+ VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
+
+ things = (client->req_len << 2) - sizeof (xXFixesCreateRegionReq);
+ if (things & 4)
+ return BadLength;
+ things >>= 3;
+
+ pNew = RegionFromRects(things, (xRectangle *) (stuff + 1), CT_UNSORTED);
+ if (!pNew)
+ return BadAlloc;
+ if (!RegionCopy(pRegion, pNew))
+ {
+ RegionDestroy(pNew);
+ return BadAlloc;
+ }
+ RegionDestroy(pNew);
+ return Success;
+}
+
+int
+SProcXFixesSetRegion (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesSetRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_AT_LEAST_SIZE(xXFixesSetRegionReq);
+ swapl (&stuff->region, n);
+ SwapRestS(stuff);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesCopyRegion (ClientPtr client)
+{
+ RegionPtr pSource, pDestination;
+ REQUEST (xXFixesCopyRegionReq);
+
+ VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
+ VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
+
+ if (!RegionCopy(pDestination, pSource))
+ return BadAlloc;
+
+ return Success;
+}
+
+int
+SProcXFixesCopyRegion (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesCopyRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_AT_LEAST_SIZE(xXFixesCopyRegionReq);
+ swapl (&stuff->source, n);
+ swapl (&stuff->destination, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesCombineRegion (ClientPtr client)
+{
+ RegionPtr pSource1, pSource2, pDestination;
+ REQUEST (xXFixesCombineRegionReq);
+
+ REQUEST_SIZE_MATCH (xXFixesCombineRegionReq);
+ VERIFY_REGION(pSource1, stuff->source1, client, DixReadAccess);
+ VERIFY_REGION(pSource2, stuff->source2, client, DixReadAccess);
+ VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
+
+ switch (stuff->xfixesReqType) {
+ case X_XFixesUnionRegion:
+ if (!RegionUnion(pDestination, pSource1, pSource2))
+ return BadAlloc;
+ break;
+ case X_XFixesIntersectRegion:
+ if (!RegionIntersect(pDestination, pSource1, pSource2))
+ return BadAlloc;
+ break;
+ case X_XFixesSubtractRegion:
+ if (!RegionSubtract(pDestination, pSource1, pSource2))
+ return BadAlloc;
+ break;
+ }
+
+ return Success;
+}
+
+int
+SProcXFixesCombineRegion (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesCombineRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH (xXFixesCombineRegionReq);
+ swapl (&stuff->source1, n);
+ swapl (&stuff->source2, n);
+ swapl (&stuff->destination, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesInvertRegion (ClientPtr client)
+{
+ RegionPtr pSource, pDestination;
+ BoxRec bounds;
+ REQUEST(xXFixesInvertRegionReq);
+
+ REQUEST_SIZE_MATCH(xXFixesInvertRegionReq);
+ VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
+ VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
+
+ /* Compute bounds, limit to 16 bits */
+ bounds.x1 = stuff->x;
+ bounds.y1 = stuff->y;
+ if ((int) stuff->x + (int) stuff->width > MAXSHORT)
+ bounds.x2 = MAXSHORT;
+ else
+ bounds.x2 = stuff->x + stuff->width;
+
+ if ((int) stuff->y + (int) stuff->height > MAXSHORT)
+ bounds.y2 = MAXSHORT;
+ else
+ bounds.y2 = stuff->y + stuff->height;
+
+ if (!RegionInverse(pDestination, pSource, &bounds))
+ return BadAlloc;
+
+ return Success;
+}
+
+int
+SProcXFixesInvertRegion (ClientPtr client)
+{
+ int n;
+ REQUEST(xXFixesInvertRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXFixesInvertRegionReq);
+ swapl (&stuff->source, n);
+ swaps (&stuff->x, n);
+ swaps (&stuff->y, n);
+ swaps (&stuff->width, n);
+ swaps (&stuff->height, n);
+ swapl (&stuff->destination, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesTranslateRegion (ClientPtr client)
+{
+ RegionPtr pRegion;
+ REQUEST(xXFixesTranslateRegionReq);
+
+ REQUEST_SIZE_MATCH(xXFixesTranslateRegionReq);
+ VERIFY_REGION(pRegion, stuff->region, client, DixWriteAccess);
+
+ RegionTranslate(pRegion, stuff->dx, stuff->dy);
+ return Success;
+}
+
+int
+SProcXFixesTranslateRegion (ClientPtr client)
+{
+ int n;
+ REQUEST(xXFixesTranslateRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXFixesTranslateRegionReq);
+ swapl (&stuff->region, n);
+ swaps (&stuff->dx, n);
+ swaps (&stuff->dy, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesRegionExtents (ClientPtr client)
+{
+ RegionPtr pSource, pDestination;
+ REQUEST(xXFixesRegionExtentsReq);
+
+ REQUEST_SIZE_MATCH(xXFixesRegionExtentsReq);
+ VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
+ VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
+
+ RegionReset(pDestination, RegionExtents(pSource));
+
+ return Success;
+}
+
+int
+SProcXFixesRegionExtents (ClientPtr client)
+{
+ int n;
+ REQUEST(xXFixesRegionExtentsReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXFixesRegionExtentsReq);
+ swapl (&stuff->source, n);
+ swapl (&stuff->destination, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesFetchRegion (ClientPtr client)
+{
+ RegionPtr pRegion;
+ xXFixesFetchRegionReply *reply;
+ xRectangle *pRect;
+ BoxPtr pExtent;
+ BoxPtr pBox;
+ int i, nBox;
+ REQUEST(xXFixesFetchRegionReq);
+
+ REQUEST_SIZE_MATCH(xXFixesFetchRegionReq);
+ VERIFY_REGION(pRegion, stuff->region, client, DixReadAccess);
+
+ pExtent = RegionExtents(pRegion);
+ pBox = RegionRects (pRegion);
+ nBox = RegionNumRects (pRegion);
+
+ reply = malloc(sizeof (xXFixesFetchRegionReply) +
+ nBox * sizeof (xRectangle));
+ if (!reply)
+ return BadAlloc;
+ reply->type = X_Reply;
+ reply->sequenceNumber = client->sequence;
+ reply->length = nBox << 1;
+ reply->x = pExtent->x1;
+ reply->y = pExtent->y1;
+ reply->width = pExtent->x2 - pExtent->x1;
+ reply->height = pExtent->y2 - pExtent->y1;
+
+ pRect = (xRectangle *) (reply + 1);
+ for (i = 0; i < nBox; i++)
+ {
+ pRect[i].x = pBox[i].x1;
+ pRect[i].y = pBox[i].y1;
+ pRect[i].width = pBox[i].x2 - pBox[i].x1;
+ pRect[i].height = pBox[i].y2 - pBox[i].y1;
+ }
+ if (client->swapped)
+ {
+ int n;
+ swaps (&reply->sequenceNumber, n);
+ swapl (&reply->length, n);
+ swaps (&reply->x, n);
+ swaps (&reply->y, n);
+ swaps (&reply->width, n);
+ swaps (&reply->height, n);
+ SwapShorts ((INT16 *) pRect, nBox * 4);
+ }
+ (void) WriteToClient(client, sizeof (xXFixesFetchRegionReply) +
+ nBox * sizeof (xRectangle), (char *) reply);
+ free(reply);
+ return Success;
+}
+
+int
+SProcXFixesFetchRegion (ClientPtr client)
+{
+ int n;
+ REQUEST(xXFixesFetchRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXFixesFetchRegionReq);
+ swapl (&stuff->region, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesSetGCClipRegion (ClientPtr client)
+{
+ GCPtr pGC;
+ RegionPtr pRegion;
+ ChangeGCVal vals[2];
+ int rc;
+ REQUEST(xXFixesSetGCClipRegionReq);
+ REQUEST_SIZE_MATCH(xXFixesSetGCClipRegionReq);
+
+ rc = dixLookupGC(&pGC, stuff->gc, client, DixSetAttrAccess);
+ if (rc != Success)
+ return rc;
+
+ VERIFY_REGION_OR_NONE (pRegion, stuff->region, client, DixReadAccess);
+
+ if (pRegion)
+ {
+ pRegion = XFixesRegionCopy (pRegion);
+ if (!pRegion)
+ return BadAlloc;
+ }
+
+ vals[0].val = stuff->xOrigin;
+ vals[1].val = stuff->yOrigin;
+ ChangeGC (NullClient, pGC, GCClipXOrigin|GCClipYOrigin, vals);
+ (*pGC->funcs->ChangeClip)(pGC, pRegion ? CT_REGION : CT_NONE, (pointer)pRegion, 0);
+
+ return Success;
+}
+
+int
+SProcXFixesSetGCClipRegion (ClientPtr client)
+{
+ int n;
+ REQUEST(xXFixesSetGCClipRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXFixesSetGCClipRegionReq);
+ swapl (&stuff->gc, n);
+ swapl (&stuff->region, n);
+ swaps (&stuff->xOrigin, n);
+ swaps (&stuff->yOrigin, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+typedef RegionPtr (*CreateDftPtr)(WindowPtr pWin);
+
+int
+ProcXFixesSetWindowShapeRegion (ClientPtr client)
+{
+ WindowPtr pWin;
+ RegionPtr pRegion;
+ RegionPtr *pDestRegion;
+ int rc;
+ REQUEST(xXFixesSetWindowShapeRegionReq);
+
+ REQUEST_SIZE_MATCH(xXFixesSetWindowShapeRegionReq);
+ rc = dixLookupResourceByType((pointer *)&pWin, stuff->dest, RT_WINDOW,
+ client, DixSetAttrAccess);
+ if (rc != Success)
+ {
+ client->errorValue = stuff->dest;
+ return rc;
+ }
+ VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, DixWriteAccess);
+ switch (stuff->destKind) {
+ case ShapeBounding:
+ case ShapeClip:
+ case ShapeInput:
+ break;
+ default:
+ client->errorValue = stuff->destKind;
+ return BadValue;
+ }
+ if (pRegion)
+ {
+ pRegion = XFixesRegionCopy (pRegion);
+ if (!pRegion)
+ return BadAlloc;
+ if (!pWin->optional)
+ MakeWindowOptional (pWin);
+ switch (stuff->destKind) {
+ default:
+ case ShapeBounding:
+ pDestRegion = &pWin->optional->boundingShape;
+ break;
+ case ShapeClip:
+ pDestRegion = &pWin->optional->clipShape;
+ break;
+ case ShapeInput:
+ pDestRegion = &pWin->optional->inputShape;
+ break;
+ }
+ if (stuff->xOff || stuff->yOff)
+ RegionTranslate(pRegion, stuff->xOff, stuff->yOff);
+ }
+ else
+ {
+ if (pWin->optional)
+ {
+ switch (stuff->destKind) {
+ default:
+ case ShapeBounding:
+ pDestRegion = &pWin->optional->boundingShape;
+ break;
+ case ShapeClip:
+ pDestRegion = &pWin->optional->clipShape;
+ break;
+ case ShapeInput:
+ pDestRegion = &pWin->optional->inputShape;
+ break;
+ }
+ }
+ else
+ pDestRegion = &pRegion; /* a NULL region pointer */
+ }
+ if (*pDestRegion)
+ RegionDestroy(*pDestRegion);
+ *pDestRegion = pRegion;
+ (*pWin->drawable.pScreen->SetShape) (pWin, stuff->destKind);
+ SendShapeNotify (pWin, stuff->destKind);
+ return Success;
+}
+
+int
+SProcXFixesSetWindowShapeRegion (ClientPtr client)
+{
+ int n;
+ REQUEST(xXFixesSetWindowShapeRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH(xXFixesSetWindowShapeRegionReq);
+ swapl (&stuff->dest, n);
+ swaps (&stuff->xOff, n);
+ swaps (&stuff->yOff, n);
+ swapl (&stuff->region, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesSetPictureClipRegion (ClientPtr client)
+{
+ PicturePtr pPicture;
+ RegionPtr pRegion;
+ ScreenPtr pScreen;
+ REQUEST(xXFixesSetPictureClipRegionReq);
+
+ REQUEST_SIZE_MATCH (xXFixesSetPictureClipRegionReq);
+ VERIFY_PICTURE(pPicture, stuff->picture, client, DixSetAttrAccess);
+ pScreen = pPicture->pDrawable->pScreen;
+ VERIFY_REGION_OR_NONE(pRegion, stuff->region, client, DixReadAccess);
+
+ return SetPictureClipRegion (pPicture, stuff->xOrigin, stuff->yOrigin,
+ pRegion);
+}
+
+int
+SProcXFixesSetPictureClipRegion (ClientPtr client)
+{
+ int n;
+ REQUEST(xXFixesSetPictureClipRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH (xXFixesSetPictureClipRegionReq);
+ swapl (&stuff->picture, n);
+ swapl (&stuff->region, n);
+ swaps (&stuff->xOrigin, n);
+ swaps (&stuff->yOrigin, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+int
+ProcXFixesExpandRegion (ClientPtr client)
+{
+ RegionPtr pSource, pDestination;
+ REQUEST (xXFixesExpandRegionReq);
+ BoxPtr pTmp;
+ BoxPtr pSrc;
+ int nBoxes;
+ int i;
+
+ REQUEST_SIZE_MATCH (xXFixesExpandRegionReq);
+ VERIFY_REGION(pSource, stuff->source, client, DixReadAccess);
+ VERIFY_REGION(pDestination, stuff->destination, client, DixWriteAccess);
+
+ nBoxes = RegionNumRects(pSource);
+ pSrc = RegionRects(pSource);
+ if (nBoxes)
+ {
+ pTmp = malloc(nBoxes * sizeof (BoxRec));
+ if (!pTmp)
+ return BadAlloc;
+ for (i = 0; i < nBoxes; i++)
+ {
+ pTmp[i].x1 = pSrc[i].x1 - stuff->left;
+ pTmp[i].x2 = pSrc[i].x2 + stuff->right;
+ pTmp[i].y1 = pSrc[i].y1 - stuff->top;
+ pTmp[i].y2 = pSrc[i].y2 + stuff->bottom;
+ }
+ RegionEmpty(pDestination);
+ for (i = 0; i < nBoxes; i++)
+ {
+ RegionRec r;
+ RegionInit(&r, &pTmp[i], 0);
+ RegionUnion(pDestination, pDestination, &r);
+ }
+ free(pTmp);
+ }
+ return Success;
+}
+
+int
+SProcXFixesExpandRegion (ClientPtr client)
+{
+ int n;
+ REQUEST (xXFixesExpandRegionReq);
+
+ swaps (&stuff->length, n);
+ REQUEST_SIZE_MATCH (xXFixesExpandRegionReq);
+ swapl (&stuff->source, n);
+ swapl (&stuff->destination, n);
+ swaps (&stuff->left, n);
+ swaps (&stuff->right, n);
+ swaps (&stuff->top, n);
+ swaps (&stuff->bottom, n);
+ return (*ProcXFixesVector[stuff->xfixesReqType]) (client);
+}
+
+#ifdef PANORAMIX
+#include "panoramiX.h"
+#include "panoramiXsrv.h"
+
+int
+PanoramiXFixesSetGCClipRegion (ClientPtr client)
+{
+ REQUEST(xXFixesSetGCClipRegionReq);
+ int result = Success, j;
+ PanoramiXRes *gc;
+ REQUEST_SIZE_MATCH(xXFixesSetGCClipRegionReq);
+
+ if ((result = dixLookupResourceByType((void **)&gc, stuff->gc, XRT_GC,
+ client, DixWriteAccess))) {
+ client->errorValue = stuff->gc;
+ return result;
+ }
+
+ FOR_NSCREENS_BACKWARD(j) {
+ stuff->gc = gc->info[j].id;
+ result = (*PanoramiXSaveXFixesVector[X_XFixesSetGCClipRegion]) (client);
+ if(result != Success) break;
+ }
+
+ return result;
+}
+
+int
+PanoramiXFixesSetWindowShapeRegion (ClientPtr client)
+{
+ int result = Success, j;
+ PanoramiXRes *win;
+ REQUEST(xXFixesSetWindowShapeRegionReq);
+
+ REQUEST_SIZE_MATCH(xXFixesSetWindowShapeRegionReq);
+
+ if ((result = dixLookupResourceByType((void **)&win, stuff->dest,
+ XRT_WINDOW, client,
+ DixWriteAccess))) {
+ client->errorValue = stuff->dest;
+ return result;
+ }
+
+ FOR_NSCREENS_FORWARD(j) {
+ stuff->dest = win->info[j].id;
+ result = (*PanoramiXSaveXFixesVector[X_XFixesSetWindowShapeRegion]) (client);
+ if(result != Success) break;
+ }
+
+ return result;
+}
+
+int
+PanoramiXFixesSetPictureClipRegion (ClientPtr client)
+{
+ REQUEST(xXFixesSetPictureClipRegionReq);
+ int result = Success, j;
+ PanoramiXRes *pict;
+
+ REQUEST_SIZE_MATCH (xXFixesSetPictureClipRegionReq);
+
+ if ((result = dixLookupResourceByType((void **)&pict, stuff->picture,
+ XRT_PICTURE, client,
+ DixWriteAccess))) {
+ client->errorValue = stuff->picture;
+ return result;
+ }
+
+ FOR_NSCREENS_BACKWARD(j) {
+ stuff->picture = pict->info[j].id;
+ result = (*PanoramiXSaveXFixesVector[X_XFixesSetPictureClipRegion]) (client);
+ if(result != Success) break;
+ }
+
+ return result;
+}
+
+#endif
diff --git a/xorg-server/xkb/XKBGAlloc.c b/xorg-server/xkb/XKBGAlloc.c
index 65f92fdba..dd2b04696 100644
--- a/xorg-server/xkb/XKBGAlloc.c
+++ b/xorg-server/xkb/XKBGAlloc.c
@@ -435,6 +435,57 @@ XkbFreeGeometry(XkbGeometryPtr geom,unsigned which,Bool freeMap)
/***====================================================================***/
+/**
+ * Resize and clear an XKB geometry item array. The array size may
+ * grow or shrink unlike in _XkbGeomAlloc.
+ *
+ * @param buffer[in,out] buffer to reallocate and clear
+ * @param szItems[in] currently allocated item count for "buffer"
+ * @param nrItems[in] required item count for "buffer"
+ * @param itemSize[in] size of a single item in "buffer"
+ * @param clearance[in] items to clear after reallocation
+ *
+ * @see _XkbGeomAlloc
+ *
+ * @return TRUE if reallocation succeeded. Otherwise FALSE is returned
+ * and contents of "buffer" aren't touched.
+ */
+Bool
+XkbGeomRealloc(void **buffer, int szItems, int nrItems,
+ int itemSize, XkbGeomClearance clearance)
+{
+ void *items;
+ int clearBegin;
+ /* Check validity of arguments. */
+ if (!buffer)
+ return FALSE;
+ items = *buffer;
+ if (!((items && (szItems > 0)) || (!items && !szItems)))
+ return FALSE;
+ /* Check if there is need to resize. */
+ if (nrItems != szItems)
+ if (!(items = realloc(items, nrItems * itemSize)))
+ return FALSE;
+ /* Clear specified items to zero. */
+ switch (clearance)
+ {
+ case XKB_GEOM_CLEAR_EXCESS:
+ clearBegin = szItems;
+ break;
+ case XKB_GEOM_CLEAR_ALL:
+ clearBegin = 0;
+ break;
+ case XKB_GEOM_CLEAR_NONE:
+ default:
+ clearBegin = nrItems;
+ break;
+ }
+ if (items && (clearBegin < nrItems))
+ memset((char *)items + (clearBegin * itemSize), 0, (nrItems - clearBegin) * itemSize);
+ *buffer = items;
+ return TRUE;
+}
+
static Status
_XkbGeomAlloc( void ** old,
unsigned short * num,
@@ -451,18 +502,15 @@ _XkbGeomAlloc( void ** old,
return Success;
*total= (*num)+num_new;
- if ((*old)!=NULL)
- (*old)= realloc((*old),(*total)*sz_elem);
- else (*old)= calloc((*total),sz_elem);
- if ((*old)==NULL) {
+
+ if (!XkbGeomRealloc(old, *num, *total, sz_elem, XKB_GEOM_CLEAR_EXCESS))
+ {
+ free(*old);
+ (*old)= NULL;
*total= *num= 0;
return BadAlloc;
}
- if (*num>0) {
- char *tmp= (char *)(*old);
- memset(&tmp[sz_elem*(*num)], 0, (num_new*sz_elem));
- }
return Success;
}
diff --git a/xorg-server/xkb/ddxList.c b/xorg-server/xkb/ddxList.c
index e62078de8..3d301d88e 100644
--- a/xorg-server/xkb/ddxList.c
+++ b/xorg-server/xkb/ddxList.c
@@ -1,301 +1,303 @@
-/************************************************************
-Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc.
-
-Permission to use, copy, modify, and distribute this
-software and its documentation for any purpose and without
-fee is hereby granted, provided that the above copyright
-notice appear in all copies and that both that copyright
-notice and this permission notice appear in supporting
-documentation, and that the name of Silicon Graphics not be
-used in advertising or publicity pertaining to distribution
-of the software without specific prior written permission.
-Silicon Graphics makes no representation about the suitability
-of this software for any purpose. It is provided "as is"
-without any express or implied warranty.
-
-SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
-GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
-OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
-THE USE OR PERFORMANCE OF THIS SOFTWARE.
-
-********************************************************/
-
-#ifdef HAVE_DIX_CONFIG_H
-#include <dix-config.h>
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <X11/X.h>
-#include <X11/Xos.h>
-#include <X11/Xproto.h>
-#include <X11/keysym.h>
-#include <X11/extensions/XKM.h>
-#include "inputstr.h"
-#include "scrnintstr.h"
-#include "windowstr.h"
-#define XKBSRV_NEED_FILE_FUNCS
-#include <xkbsrv.h>
-#include <X11/extensions/XI.h>
-
-#ifdef WIN32
-/* from ddxLoad.c */
-extern const char* Win32TempDir();
-extern int Win32System(const char *cmdline);
-#undef System
-#define System Win32System
-
-#define W32_tmparg " '%s'"
-#define W32_tmpfile ,tmpname
-#define W32_tmplen strlen(tmpname)+3
-#else
-#define W32_tmparg
-#define W32_tmpfile
-#define W32_tmplen 0
-#endif
-
-/***====================================================================***/
-
-static char *componentDirs[_XkbListNumComponents] = {
- "keycodes", "types", "compat", "symbols", "geometry"
-};
-
-/***====================================================================***/
-
-static Status
-_AddListComponent( XkbSrvListInfoPtr list,
- int what,
- unsigned flags,
- char * str,
- ClientPtr client)
-{
-int slen,wlen;
-unsigned char * wire8;
-unsigned short *wire16;
-char * tmp;
-
- if (list->nTotal>=list->maxRtrn) {
- list->nTotal++;
- return Success;
- }
- tmp= strchr(str,')');
- if ((tmp==NULL)&&((tmp=strchr(str,'('))==NULL)) {
- slen= strlen(str);
- while ((slen>0) && isspace(str[slen-1])) {
- slen--;
- }
- }
- else {
- slen= (tmp-str+1);
- }
- wlen= (((slen+1)/2)*2)+4; /* four bytes for flags and length, pad to */
- /* 2-byte boundary */
- if ((list->szPool-list->nPool)<wlen) {
- if (wlen>1024) list->szPool+= XkbPaddedSize(wlen*2);
- else list->szPool+= 1024;
- list->pool= realloc(list->pool, list->szPool * sizeof(char));
- if (!list->pool)
- return BadAlloc;
- }
- wire16= (unsigned short *)&list->pool[list->nPool];
- wire8= (unsigned char *)&wire16[2];
- wire16[0]= flags;
- wire16[1]= slen;
- memcpy(wire8,str,slen);
- if (client->swapped) {
- register int n;
- swaps(&wire16[0],n);
- swaps(&wire16[1],n);
- }
- list->nPool+= wlen;
- list->nFound[what]++;
- list->nTotal++;
- return Success;
-}
-
-/***====================================================================***/
-static Status
-XkbDDXListComponent( DeviceIntPtr dev,
- int what,
- XkbSrvListInfoPtr list,
- ClientPtr client)
-{
-char *file,*map,*tmp,*buf=NULL;
-FILE *in;
-Status status;
-int rval;
-Bool haveDir;
-#ifdef WIN32
-char tmpname[PATH_MAX];
-#endif
-
- if ((list->pattern[what]==NULL)||(list->pattern[what][0]=='\0'))
- return Success;
- file= list->pattern[what];
- map= strrchr(file,'(');
- if (map!=NULL) {
- char *tmp;
- map++;
- tmp= strrchr(map,')');
- if ((tmp==NULL)||(tmp[1]!='\0')) {
- /* illegal pattern. No error, but no match */
- return Success;
- }
- }
-
- in= NULL;
- haveDir= TRUE;
-#ifdef WIN32
- strcpy(tmpname, Win32TempDir());
- strcat(tmpname, "\\xkb_XXXXXX");
- (void) mktemp(tmpname);
-#endif
- if (XkbBaseDirectory!=NULL) {
- if ((list->pattern[what][0]=='*')&&(list->pattern[what][1]=='\0')) {
- if (asprintf(&buf, "%s/%s.dir", XkbBaseDirectory,
- componentDirs[what]) == -1)
- buf = NULL;
- else
- in = fopen(buf,"r");
- }
- if (!in) {
- haveDir= FALSE;
- free(buf);
- if (asprintf
- (&buf,
- "'%s/xkbcomp' '-R%s/%s' -w %ld -l -vlfhpR '%s'" W32_tmparg,
- XkbBinDirectory, XkbBaseDirectory, componentDirs[what],
- (long) ((xkbDebugFlags < 2) ? 1 :
- ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)),
- file W32_tmpfile
- ) == -1)
- buf = NULL;
- }
- }
- else {
- if ((list->pattern[what][0]=='*')&&(list->pattern[what][1]=='\0')) {
- if (asprintf(&buf, "%s.dir", componentDirs[what]) == -1)
- buf = NULL;
- else
- in = fopen(buf,"r");
- }
- if (!in) {
- haveDir= FALSE;
- free(buf);
- if (asprintf
- (&buf,
- "xkbcomp -R%s -w %ld -l -vlfhpR '%s'" W32_tmparg,
- componentDirs[what],
- (long) ((xkbDebugFlags < 2) ? 1 :
- ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)),
- file W32_tmpfile
- ) == -1)
- buf = NULL;
- }
- }
- status= Success;
- if (!haveDir)
- {
-#ifndef WIN32
- in= Popen(buf,"r");
-#else
- if (xkbDebugFlags)
- DebugF("[xkb] xkbList executes: %s\n",buf);
- if (System(buf) < 0)
- ErrorF("[xkb] Could not invoke keymap compiler\n");
- else
- in= fopen(tmpname, "r");
-#endif
- }
- if (!in)
- {
- free(buf);
-#ifdef WIN32
- unlink(tmpname);
-#endif
- return BadImplementation;
- }
- list->nFound[what]= 0;
- free(buf);
- buf = malloc(PATH_MAX * sizeof(char));
- if (!buf)
- return BadAlloc;
- while ((status==Success)&&((tmp=fgets(buf,PATH_MAX,in))!=NULL)) {
- unsigned flags;
- register unsigned int i;
- if (*tmp=='#') /* comment, skip it */
- continue;
- if (!strncmp(tmp, "Warning:", 8) || !strncmp(tmp, " ", 8))
- /* skip warnings too */
- continue;
- flags= 0;
- /* each line in the listing is supposed to start with two */
- /* groups of eight characters, which specify the general */
- /* flags and the flags that are specific to the component */
- /* if they're missing, fail with BadImplementation */
- for (i=0;(i<8)&&(status==Success);i++) { /* read the general flags */
- if (isalpha(*tmp)) flags|= (1L<<i);
- else if (*tmp!='-') status= BadImplementation;
- tmp++;
- }
- if (status != Success) break;
- if (!isspace(*tmp)) {
- status= BadImplementation;
- break;
- }
- else tmp++;
- for (i=0;(i<8)&&(status==Success);i++) { /* read the component flags */
- if (isalpha(*tmp)) flags|= (1L<<(i+8));
- else if (*tmp!='-') status= BadImplementation;
- tmp++;
- }
- if (status != Success) break;
- if (isspace(*tmp)) {
- while (isspace(*tmp)) {
- tmp++;
- }
- }
- else {
- status= BadImplementation;
- break;
- }
- status= _AddListComponent(list,what,flags,tmp,client);
- }
-#ifndef WIN32
- if (haveDir)
- fclose(in);
- else if ((rval=Pclose(in))!=0) {
- if (xkbDebugFlags)
- ErrorF("[xkb] xkbcomp returned exit code %d\n",rval);
- }
-#else
- fclose(in);
- unlink(tmpname);
-#endif
- free(buf);
- return status;
-}
-
-/***====================================================================***/
-
-/* ARGSUSED */
-Status
-XkbDDXList(DeviceIntPtr dev,XkbSrvListInfoPtr list,ClientPtr client)
-{
-Status status;
-
- status= XkbDDXListComponent(dev,_XkbListKeycodes,list,client);
- if (status==Success)
- status= XkbDDXListComponent(dev,_XkbListTypes,list,client);
- if (status==Success)
- status= XkbDDXListComponent(dev,_XkbListCompat,list,client);
- if (status==Success)
- status= XkbDDXListComponent(dev,_XkbListSymbols,list,client);
- if (status==Success)
- status= XkbDDXListComponent(dev,_XkbListGeometry,list,client);
- return status;
-}
+/************************************************************
+Copyright (c) 1995 by Silicon Graphics Computer Systems, Inc.
+
+Permission to use, copy, modify, and distribute this
+software and its documentation for any purpose and without
+fee is hereby granted, provided that the above copyright
+notice appear in all copies and that both that copyright
+notice and this permission notice appear in supporting
+documentation, and that the name of Silicon Graphics not be
+used in advertising or publicity pertaining to distribution
+of the software without specific prior written permission.
+Silicon Graphics makes no representation about the suitability
+of this software for any purpose. It is provided "as is"
+without any express or implied warranty.
+
+SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
+SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
+GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
+DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH
+THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+********************************************************/
+
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <stdio.h>
+#include <ctype.h>
+#include <X11/X.h>
+#include <X11/Xos.h>
+#include <X11/Xproto.h>
+#include <X11/keysym.h>
+#include <X11/extensions/XKM.h>
+#include "inputstr.h"
+#include "scrnintstr.h"
+#include "windowstr.h"
+#define XKBSRV_NEED_FILE_FUNCS
+#include <xkbsrv.h>
+#include <X11/extensions/XI.h>
+
+#ifdef WIN32
+/* from ddxLoad.c */
+extern const char* Win32TempDir();
+extern int Win32System(const char *cmdline);
+#undef System
+#define System Win32System
+
+#define W32_tmparg " '%s'"
+#define W32_tmpfile ,tmpname
+#define W32_tmplen strlen(tmpname)+3
+#else
+#define W32_tmparg
+#define W32_tmpfile
+#define W32_tmplen 0
+#endif
+
+/***====================================================================***/
+
+static char *componentDirs[_XkbListNumComponents] = {
+ "keycodes", "types", "compat", "symbols", "geometry"
+};
+
+/***====================================================================***/
+
+static Status
+_AddListComponent( XkbSrvListInfoPtr list,
+ int what,
+ unsigned flags,
+ char * str,
+ ClientPtr client)
+{
+int slen,wlen;
+unsigned char * wire8;
+unsigned short *wire16;
+char * tmp;
+
+ if (list->nTotal>=list->maxRtrn) {
+ list->nTotal++;
+ return Success;
+ }
+ tmp= strchr(str,')');
+ if ((tmp==NULL)&&((tmp=strchr(str,'('))==NULL)) {
+ slen= strlen(str);
+ while ((slen>0) && isspace(str[slen-1])) {
+ slen--;
+ }
+ }
+ else {
+ slen= (tmp-str+1);
+ }
+ wlen= (((slen+1)/2)*2)+4; /* four bytes for flags and length, pad to */
+ /* 2-byte boundary */
+ if ((list->szPool-list->nPool)<wlen) {
+ if (wlen>1024) list->szPool+= XkbPaddedSize(wlen*2);
+ else list->szPool+= 1024;
+ list->pool= realloc(list->pool, list->szPool * sizeof(char));
+ if (!list->pool)
+ return BadAlloc;
+ }
+ wire16= (unsigned short *)&list->pool[list->nPool];
+ wire8= (unsigned char *)&wire16[2];
+ wire16[0]= flags;
+ wire16[1]= slen;
+ memcpy(wire8,str,slen);
+ if (client->swapped) {
+ register int n;
+ swaps(&wire16[0],n);
+ swaps(&wire16[1],n);
+ }
+ list->nPool+= wlen;
+ list->nFound[what]++;
+ list->nTotal++;
+ return Success;
+}
+
+/***====================================================================***/
+static Status
+XkbDDXListComponent( DeviceIntPtr dev,
+ int what,
+ XkbSrvListInfoPtr list,
+ ClientPtr client)
+{
+char *file,*map,*tmp,*buf=NULL;
+FILE *in;
+Status status;
+int rval;
+Bool haveDir;
+#ifdef WIN32
+char tmpname[PATH_MAX];
+#endif
+
+ if ((list->pattern[what]==NULL)||(list->pattern[what][0]=='\0'))
+ return Success;
+ file= list->pattern[what];
+ map= strrchr(file,'(');
+ if (map!=NULL) {
+ char *tmp;
+ map++;
+ tmp= strrchr(map,')');
+ if ((tmp==NULL)||(tmp[1]!='\0')) {
+ /* illegal pattern. No error, but no match */
+ return Success;
+ }
+ }
+
+ in= NULL;
+ haveDir= TRUE;
+#ifdef WIN32
+ strcpy(tmpname, Win32TempDir());
+ strcat(tmpname, "\\xkb_XXXXXX");
+ (void) mktemp(tmpname);
+#endif
+ if (XkbBaseDirectory!=NULL) {
+ if ((list->pattern[what][0]=='*')&&(list->pattern[what][1]=='\0')) {
+ if (asprintf(&buf, "%s/%s.dir", XkbBaseDirectory,
+ componentDirs[what]) == -1)
+ buf = NULL;
+ else
+ in = fopen(buf,"r");
+ }
+ if (!in) {
+ haveDir= FALSE;
+ free(buf);
+ if (asprintf
+ (&buf,
+ "'%s/xkbcomp' '-R%s/%s' -w %ld -l -vlfhpR '%s'" W32_tmparg,
+ XkbBinDirectory, XkbBaseDirectory, componentDirs[what],
+ (long) ((xkbDebugFlags < 2) ? 1 :
+ ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)),
+ file W32_tmpfile
+ ) == -1)
+ buf = NULL;
+ }
+ }
+ else {
+ if ((list->pattern[what][0]=='*')&&(list->pattern[what][1]=='\0')) {
+ if (asprintf(&buf, "%s.dir", componentDirs[what]) == -1)
+ buf = NULL;
+ else
+ in = fopen(buf,"r");
+ }
+ if (!in) {
+ haveDir= FALSE;
+ free(buf);
+ if (asprintf
+ (&buf,
+ "xkbcomp -R%s -w %ld -l -vlfhpR '%s'" W32_tmparg,
+ componentDirs[what],
+ (long) ((xkbDebugFlags < 2) ? 1 :
+ ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)),
+ file W32_tmpfile
+ ) == -1)
+ buf = NULL;
+ }
+ }
+ status= Success;
+ if (!haveDir)
+ {
+#ifndef WIN32
+ in= Popen(buf,"r");
+#else
+ if (xkbDebugFlags)
+ DebugF("[xkb] xkbList executes: %s\n",buf);
+ if (System(buf) < 0)
+ ErrorF("[xkb] Could not invoke keymap compiler\n");
+ else
+ in= fopen(tmpname, "r");
+#endif
+ }
+ if (!in)
+ {
+ free(buf);
+#ifdef WIN32
+ unlink(tmpname);
+#endif
+ return BadImplementation;
+ }
+ list->nFound[what]= 0;
+ free(buf);
+ buf = malloc(PATH_MAX * sizeof(char));
+ if (!buf) {
+ fclose(in);
+ return BadAlloc;
+ }
+ while ((status==Success)&&((tmp=fgets(buf,PATH_MAX,in))!=NULL)) {
+ unsigned flags;
+ register unsigned int i;
+ if (*tmp=='#') /* comment, skip it */
+ continue;
+ if (!strncmp(tmp, "Warning:", 8) || !strncmp(tmp, " ", 8))
+ /* skip warnings too */
+ continue;
+ flags= 0;
+ /* each line in the listing is supposed to start with two */
+ /* groups of eight characters, which specify the general */
+ /* flags and the flags that are specific to the component */
+ /* if they're missing, fail with BadImplementation */
+ for (i=0;(i<8)&&(status==Success);i++) { /* read the general flags */
+ if (isalpha(*tmp)) flags|= (1L<<i);
+ else if (*tmp!='-') status= BadImplementation;
+ tmp++;
+ }
+ if (status != Success) break;
+ if (!isspace(*tmp)) {
+ status= BadImplementation;
+ break;
+ }
+ else tmp++;
+ for (i=0;(i<8)&&(status==Success);i++) { /* read the component flags */
+ if (isalpha(*tmp)) flags|= (1L<<(i+8));
+ else if (*tmp!='-') status= BadImplementation;
+ tmp++;
+ }
+ if (status != Success) break;
+ if (isspace(*tmp)) {
+ while (isspace(*tmp)) {
+ tmp++;
+ }
+ }
+ else {
+ status= BadImplementation;
+ break;
+ }
+ status= _AddListComponent(list,what,flags,tmp,client);
+ }
+#ifndef WIN32
+ if (haveDir)
+ fclose(in);
+ else if ((rval=Pclose(in))!=0) {
+ if (xkbDebugFlags)
+ ErrorF("[xkb] xkbcomp returned exit code %d\n",rval);
+ }
+#else
+ fclose(in);
+ unlink(tmpname);
+#endif
+ free(buf);
+ return status;
+}
+
+/***====================================================================***/
+
+/* ARGSUSED */
+Status
+XkbDDXList(DeviceIntPtr dev,XkbSrvListInfoPtr list,ClientPtr client)
+{
+Status status;
+
+ status= XkbDDXListComponent(dev,_XkbListKeycodes,list,client);
+ if (status==Success)
+ status= XkbDDXListComponent(dev,_XkbListTypes,list,client);
+ if (status==Success)
+ status= XkbDDXListComponent(dev,_XkbListCompat,list,client);
+ if (status==Success)
+ status= XkbDDXListComponent(dev,_XkbListSymbols,list,client);
+ if (status==Success)
+ status= XkbDDXListComponent(dev,_XkbListGeometry,list,client);
+ return status;
+}
diff --git a/xorg-server/xkb/xkbUtils.c b/xorg-server/xkb/xkbUtils.c
index 3a56bea4c..cc9aaa75a 100644
--- a/xorg-server/xkb/xkbUtils.c
+++ b/xorg-server/xkb/xkbUtils.c
@@ -1398,42 +1398,26 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
/* properties */
if (src->geom->num_properties) {
- if (src->geom->num_properties != dst->geom->sz_properties) {
- /* If we've got more properties in the destination than
- * the source, run through and free all the excess ones
- * first. */
- if (src->geom->num_properties < dst->geom->sz_properties) {
- for (i = src->geom->num_properties,
- dprop = dst->geom->properties + i;
- i < dst->geom->num_properties;
- i++, dprop++) {
- free(dprop->name);
- free(dprop->value);
- }
+ /* If we've got more properties in the destination than
+ * the source, run through and free all the excess ones
+ * first. */
+ if (src->geom->num_properties < dst->geom->sz_properties) {
+ for (i = src->geom->num_properties, dprop = dst->geom->properties + i;
+ i < dst->geom->num_properties;
+ i++, dprop++) {
+ free(dprop->name);
+ free(dprop->value);
}
-
- if (dst->geom->sz_properties)
- tmp = realloc(dst->geom->properties,
- src->geom->num_properties *
- sizeof(XkbPropertyRec));
- else
- tmp = malloc(src->geom->num_properties *
- sizeof(XkbPropertyRec));
- if (!tmp)
- return FALSE;
- dst->geom->properties = tmp;
}
+ /* Reallocate and clear all new items if the buffer grows. */
+ if (!XkbGeomRealloc((void **)&dst->geom->properties, dst->geom->sz_properties, src->geom->num_properties,
+ sizeof(XkbPropertyRec), XKB_GEOM_CLEAR_EXCESS))
+ return FALSE;
/* We don't set num_properties as we need it to try and avoid
* too much reallocing. */
dst->geom->sz_properties = src->geom->num_properties;
- if (dst->geom->sz_properties > dst->geom->num_properties) {
- memset(dst->geom->properties + dst->geom->num_properties, 0,
- (dst->geom->sz_properties - dst->geom->num_properties) *
- sizeof(XkbPropertyRec));
- }
-
for (i = 0,
sprop = src->geom->properties,
dprop = dst->geom->properties;
@@ -1482,36 +1466,20 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
/* colors */
if (src->geom->num_colors) {
- if (src->geom->num_colors != dst->geom->sz_colors) {
- if (src->geom->num_colors < dst->geom->sz_colors) {
- for (i = src->geom->num_colors,
- dcolor = dst->geom->colors + i;
- i < dst->geom->num_colors;
- i++, dcolor++) {
- free(dcolor->spec);
- }
+ if (src->geom->num_colors < dst->geom->sz_colors) {
+ for (i = src->geom->num_colors, dcolor = dst->geom->colors + i;
+ i < dst->geom->num_colors;
+ i++, dcolor++) {
+ free(dcolor->spec);
}
-
- if (dst->geom->sz_colors)
- tmp = realloc(dst->geom->colors,
- src->geom->num_colors *
- sizeof(XkbColorRec));
- else
- tmp = malloc(src->geom->num_colors *
- sizeof(XkbColorRec));
- if (!tmp)
- return FALSE;
- dst->geom->colors = tmp;
}
+ /* Reallocate and clear all new items if the buffer grows. */
+ if (!XkbGeomRealloc((void **)&dst->geom->colors, dst->geom->sz_colors, src->geom->num_colors,
+ sizeof(XkbColorRec), XKB_GEOM_CLEAR_EXCESS))
+ return FALSE;
dst->geom->sz_colors = src->geom->num_colors;
- if (dst->geom->sz_colors > dst->geom->num_colors) {
- memset(dst->geom->colors + dst->geom->num_colors, 0,
- (dst->geom->sz_colors - dst->geom->num_colors) *
- sizeof(XkbColorRec));
- }
-
for (i = 0,
scolor = src->geom->colors,
dcolor = dst->geom->colors;
@@ -1573,10 +1541,10 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
}
if (src->geom->num_shapes) {
- tmp = calloc(src->geom->num_shapes, sizeof(XkbShapeRec));
- if (!tmp)
+ /* Reallocate and clear all items. */
+ if (!XkbGeomRealloc((void **)&dst->geom->shapes, dst->geom->sz_shapes, src->geom->num_shapes,
+ sizeof(XkbShapeRec), XKB_GEOM_CLEAR_ALL))
return FALSE;
- dst->geom->shapes = tmp;
for (i = 0, sshape = src->geom->shapes, dshape = dst->geom->shapes;
i < src->geom->num_shapes;
@@ -1693,20 +1661,13 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
}
dst->geom->num_sections = 0;
- dst->geom->sections = NULL;
}
if (src->geom->num_sections) {
- if (dst->geom->sz_sections)
- tmp = realloc(dst->geom->sections,
- src->geom->num_sections *
- sizeof(XkbSectionRec));
- else
- tmp = malloc(src->geom->num_sections * sizeof(XkbSectionRec));
- if (!tmp)
+ /* Reallocate and clear all items. */
+ if (!XkbGeomRealloc((void **)&dst->geom->sections, dst->geom->sz_sections, src->geom->num_sections,
+ sizeof(XkbSectionRec), XKB_GEOM_CLEAR_ALL))
return FALSE;
- memset(tmp, 0, src->geom->num_sections * sizeof(XkbSectionRec));
- dst->geom->sections = tmp;
dst->geom->num_sections = src->geom->num_sections;
dst->geom->sz_sections = src->geom->num_sections;
@@ -1809,21 +1770,13 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
}
}
dst->geom->num_doodads = 0;
- dst->geom->doodads = NULL;
}
if (src->geom->num_doodads) {
- if (dst->geom->sz_doodads)
- tmp = realloc(dst->geom->doodads,
- src->geom->num_doodads *
- sizeof(XkbDoodadRec));
- else
- tmp = malloc(src->geom->num_doodads *
- sizeof(XkbDoodadRec));
- if (!tmp)
+ /* Reallocate and clear all items. */
+ if (!XkbGeomRealloc((void **)&dst->geom->doodads, dst->geom->sz_doodads, src->geom->num_doodads,
+ sizeof(XkbDoodadRec), XKB_GEOM_CLEAR_ALL))
return FALSE;
- memset(tmp, 0, src->geom->num_doodads * sizeof(XkbDoodadRec));
- dst->geom->doodads = tmp;
dst->geom->sz_doodads = src->geom->num_doodads;
@@ -1860,20 +1813,14 @@ _XkbCopyGeom(XkbDescPtr src, XkbDescPtr dst)
/* key aliases */
if (src->geom->num_key_aliases) {
- if (src->geom->num_key_aliases != dst->geom->sz_key_aliases) {
- if (dst->geom->sz_key_aliases)
- tmp = realloc(dst->geom->key_aliases,
- src->geom->num_key_aliases *
- 2 * XkbKeyNameLength);
- else
- tmp = malloc(src->geom->num_key_aliases *
- 2 * XkbKeyNameLength);
- if (!tmp)
- return FALSE;
- dst->geom->key_aliases = tmp;
+ /* Reallocate but don't clear any items. There is no need
+ * to clear anything because data is immediately copied
+ * over the whole memory area with memcpy. */
+ if (!XkbGeomRealloc((void **)&dst->geom->key_aliases, dst->geom->sz_key_aliases, src->geom->num_key_aliases,
+ 2 * XkbKeyNameLength, XKB_GEOM_CLEAR_NONE))
+ return FALSE;
- dst->geom->sz_key_aliases = src->geom->num_key_aliases;
- }
+ dst->geom->sz_key_aliases = src->geom->num_key_aliases;
memcpy(dst->geom->key_aliases, src->geom->key_aliases,
src->geom->num_key_aliases * 2 * XkbKeyNameLength);
diff --git a/xorg-server/xkb/xkbgeom.h b/xorg-server/xkb/xkbgeom.h
index fe4da3806..d10b956a6 100644
--- a/xorg-server/xkb/xkbgeom.h
+++ b/xorg-server/xkb/xkbgeom.h
@@ -311,6 +311,17 @@ typedef struct _XkbGeometrySizes {
unsigned short num_key_aliases;
} XkbGeometrySizesRec,*XkbGeometrySizesPtr;
+/**
+ * Specifies which items should be cleared in an XKB geometry array
+ * when the array is reallocated.
+ */
+typedef enum
+{
+ XKB_GEOM_CLEAR_NONE, /* Don't clear any items, just reallocate. */
+ XKB_GEOM_CLEAR_EXCESS, /* Clear new extra items after reallocation. */
+ XKB_GEOM_CLEAR_ALL /* Clear all items after reallocation. */
+} XkbGeomClearance;
+
extern XkbPropertyPtr
XkbAddGeomProperty(
XkbGeometryPtr /* geom */,
@@ -507,6 +518,15 @@ XkbFreeGeometry(
Bool /* freeMap */
);
+extern Bool
+XkbGeomRealloc(
+ void ** /* buffer */,
+ int /* szItems */,
+ int /* nrItems */,
+ int /* itemSize */,
+ XkbGeomClearance /* clearance */
+);
+
extern Status
XkbAllocGeomProps(
XkbGeometryPtr /* geom */,
diff --git a/xorg-server/xkeyboard-config/NEWS b/xorg-server/xkeyboard-config/NEWS
index b3c2bf6dc..306c1e638 100644
--- a/xorg-server/xkeyboard-config/NEWS
+++ b/xorg-server/xkeyboard-config/NEWS
@@ -1,3 +1,6 @@
+2.2 Non-scheduled release for GNOME3.
+ Major change in the structure of descriptions.
+ Some new stuff added too.
2.1.99 Prerelease for 2.2. Major changes in descriptions: for GNOME3 release
Some new layouts and models. Translations are not updated.
Checking runtime dependencies at build time
diff --git a/xorg-server/xkeyboard-config/configure.in b/xorg-server/xkeyboard-config/configure.in
index dfc308f0d..460138ed1 100644
--- a/xorg-server/xkeyboard-config/configure.in
+++ b/xorg-server/xkeyboard-config/configure.in
@@ -1,4 +1,4 @@
-AC_INIT(xkeyboard-config, 2.1.99)
+AC_INIT(xkeyboard-config, 2.2)
AC_CONFIG_SRCDIR(rules/base.xml.in)
AM_INIT_AUTOMAKE([foreign dist-bzip2])
AM_MAINTAINER_MODE
diff --git a/xorg-server/xkeyboard-config/po/ca.po b/xorg-server/xkeyboard-config/po/ca.po
index c1eaef7ad..53b0bf898 100644
--- a/xorg-server/xkeyboard-config/po/ca.po
+++ b/xorg-server/xkeyboard-config/po/ca.po
@@ -5,12 +5,13 @@
# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.1-pre1\n"
+"Project-Id-Version: xkeyboard-config-2.1.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2011-01-12 00:16+0000\n"
-"PO-Revision-Date: 2011-01-13 00:20+0100\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-03-26 23:59+0100\n"
"Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n"
"Language-Team: Catalan <ca@dodds.net>\n"
+"Language: ca\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -22,3082 +23,4159 @@ msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Més petit/Més gran&gt;"
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Més petit/Més gran&gt; (selecciona el nivell 3r, bloqueja en prémer conjuntament amb un altre selector de nivell 3r)"
#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è i activa el bloqueig del nivell 5è en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr "(F)"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr "(Llegat) Alternativa"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Més petit/Més gran&gt; selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(Llegat) Alternativa, tecles mortes de Sun"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(Llegat) Alternativa, sense tecles mortes"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr "Compatible de 101/104 tecles"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/coma/tecles mortes"
+msgid "ATM/phone-style"
+msgstr "Estil ATM/telèfon"
#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/coma/sense tecles mortes"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/punt/tecles mortes"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/punt/sense tecles mortes"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/coma/tecles mortes"
+msgid "Acer Laptop"
+msgstr "Portàtil Acer"
#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwertz/coma/sense tecles mortes"
+msgid "Add the standard behavior to Menu key"
+msgstr "Afegeix el comportament estàndard a la tecla Menú"
#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/punt/tecles mortes"
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "S'afegeix el circumflex de l'esperanto (supersigno)"
#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/punt/sense tecles mortes"
+msgid "Adding currency signs to certain keys"
+msgstr "S'afegeix el signe de moneda a certes tecles"
#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/coma/tecles mortes"
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/coma/sense tecles mortes"
+msgid "Afg"
+msgstr "Afg"
#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/punt/tecles mortes"
+msgid "Afghani"
+msgstr "Afganès"
#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/punt/sense tecles mortes"
+msgid "Akan"
+msgstr "Akan"
#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/coma/tecles mortes"
+msgid "Albanian"
+msgstr "Albanès"
#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/coma/sense tecles mortes"
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt i Meta són a les tecles Alt"
#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/punt/tecles mortes"
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt s'assigna a la tecla Win dreta i Super a Menú"
#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/punt/sense tecles mortes"
+msgid "Alt+Caps Lock"
+msgstr "Alt+Bloq Maj"
#: ../rules/base.xml.in.h:25
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
#: ../rules/base.xml.in.h:26
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Alt+Shift"
+msgstr "Alt+Maj"
#: ../rules/base.xml.in.h:27
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
+msgid "Alt+Space"
+msgstr "Alt+Espai"
#: ../rules/base.xml.in.h:28
-msgid "ATM/phone-style"
-msgstr "Estil ATM/telèfon"
+msgid "Alt/Win key behavior"
+msgstr "Comportament de la tecla Alt/Win"
#: ../rules/base.xml.in.h:29
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Amharic"
+msgstr "Amhàric"
#: ../rules/base.xml.in.h:30
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Any Alt key"
+msgstr "Qualsevol tecla Alt"
#: ../rules/base.xml.in.h:31
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Any Win key"
+msgstr "Qualsevol tecla Win"
#: ../rules/base.xml.in.h:32
-msgid "Acer Laptop"
-msgstr "Portàtil Acer"
+msgid "Any Win key (while pressed)"
+msgstr "Qualsevol tecla Win (mentre estan premudes)"
#: ../rules/base.xml.in.h:33
-msgid "Add the standard behavior to Menu key"
-msgstr "Afegeix el comportament estàndard a la tecla Menú"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:34
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "S'afegeix el circumflex de l'esperanto (supersigno)"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Teclat Apple Aluminium (ANSI)"
#: ../rules/base.xml.in.h:35
-msgid "Adding currency signs to certain keys"
-msgstr "S'afegeix el signe de moneda a certes tecles"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Teclat Apple Aluminium (ISO)"
#: ../rules/base.xml.in.h:36
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Teclat Apple Aluminium (JIS)"
#: ../rules/base.xml.in.h:37
-msgid "Afg"
-msgstr "Afg"
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Teclat Apple Aluminium: emula les tecles del PC (Impr, Bloq Despl, Pausa, Bloq Núm)"
#: ../rules/base.xml.in.h:38
-msgid "Afghanistan"
-msgstr "Afganistan"
+msgid "Apple Laptop"
+msgstr "Portàtil Apple"
#: ../rules/base.xml.in.h:39
-msgid "Akan"
-msgstr "Akan"
+msgid "Arabic"
+msgstr "Àrab"
#: ../rules/base.xml.in.h:40
-msgid "Alb"
-msgstr "Alb"
+msgid "Arabic (Buckwalter)"
+msgstr "Àrab (Buckwalter)"
#: ../rules/base.xml.in.h:41
-msgid "Albania"
-msgstr "Albània"
+msgid "Arabic (Morocco)"
+msgstr "Àrab (Marroc)"
#: ../rules/base.xml.in.h:42
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt i Meta són a les tecles Alt"
+msgid "Arabic (Pakistan)"
+msgstr "Àrab (Pakistan)"
#: ../rules/base.xml.in.h:43
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt s'assigna a la tecla Win dreta i Super a Menú"
+msgid "Arabic (Syria)"
+msgstr "Àrab (Síria)"
#: ../rules/base.xml.in.h:44
-msgid "Alt+Caps Lock"
-msgstr "Alt+Bloq Maj"
+msgid "Arabic (azerty)"
+msgstr "Àrab (azerty)"
#: ../rules/base.xml.in.h:45
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
+msgid "Arabic (azerty/digits)"
+msgstr "Àrab (azerty/dígits)"
#: ../rules/base.xml.in.h:46
-msgid "Alt+Shift"
-msgstr "Alt+Maj"
+msgid "Arabic (digits)"
+msgstr "Àrab (dígits)"
#: ../rules/base.xml.in.h:47
-msgid "Alt+Space"
-msgstr "Alt+Espai"
+msgid "Arabic (qwerty)"
+msgstr "Àrab (qwerty)"
#: ../rules/base.xml.in.h:48
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Arabic (qwerty/digits)"
+msgstr "Àrab (qwerty/dígits)"
#: ../rules/base.xml.in.h:49
-msgid "Alt/Win key behavior"
-msgstr "Comportament de la tecla Alt/Win"
+msgid "Armenian"
+msgstr "Armeni"
#: ../rules/base.xml.in.h:50
-msgid "Alternative"
-msgstr "Alternativa"
+msgid "Armenian (alternative eastern)"
+msgstr "Armeni (oriental alternatiu)"
#: ../rules/base.xml.in.h:51
-msgid "Alternative Eastern"
-msgstr "Oriental alternativa"
+msgid "Armenian (alternative phonetic)"
+msgstr "Armeni (fonètic alternatiu)"
#: ../rules/base.xml.in.h:52
-msgid "Alternative Phonetic"
-msgstr "Fonètic alternativa"
+msgid "Armenian (eastern)"
+msgstr "Armeni (oriental)"
#: ../rules/base.xml.in.h:53
-msgid "Alternative international"
-msgstr "Internacional alternativa"
+msgid "Armenian (phonetic)"
+msgstr "Armeni (fonètic)"
#: ../rules/base.xml.in.h:54
-msgid "Alternative, Sun dead keys"
-msgstr "Alternativa, Sun tecles mortes"
+msgid "Armenian (western)"
+msgstr "Armeni (occidental)"
#: ../rules/base.xml.in.h:55
-msgid "Alternative, eliminate dead keys"
-msgstr "Alternativa, sense tecles mortes"
+msgid "Asus Laptop"
+msgstr "Portàtil Asus"
#: ../rules/base.xml.in.h:56
-msgid "Alternative, latin-9 only"
-msgstr "Alternativa, només latin-9"
+msgid "At bottom left"
+msgstr "A baix esquerra"
#: ../rules/base.xml.in.h:57
-msgid "And"
-msgstr "And"
+msgid "At left of 'A'"
+msgstr "A l'esquerra d'«A»"
#: ../rules/base.xml.in.h:58
-msgid "Andorra"
-msgstr "Andorra"
+msgid "Avatime"
+msgstr "Avatime"
#: ../rules/base.xml.in.h:59
-msgid "Any Alt key"
-msgstr "Qualsevol tecla Alt"
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Azerbaitjan (ciríl·lic)"
#: ../rules/base.xml.in.h:60
-msgid "Any Win key"
-msgstr "Qualsevol tecla Win"
+msgid "Azerbaijani"
+msgstr "Àzeri"
#: ../rules/base.xml.in.h:61
-msgid "Any Win key (while pressed)"
-msgstr "Qualsevol tecla Win (mentre estan premudes)"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Teclat Azona RF2300 wireless Internet"
#: ../rules/base.xml.in.h:62
-msgid "Apostrophe (') variant"
-msgstr "Variant amb apòstrof (')"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:63
-msgid "Apple"
-msgstr "Apple"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimedia"
#: ../rules/base.xml.in.h:64
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Teclat Apple Aluminium (ANSI)"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:65
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Teclat Apple Aluminium (ISO)"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:66
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Teclat Apple Aluminium (JIS)"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Teclat Apple Aluminium: emula les tecles del PC (Impr, Bloq Despl, Pausa, Bloq Núm)"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:68
-msgid "Apple Laptop"
-msgstr "Portàtil Apple"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:69
-msgid "Ara"
-msgstr "Ara"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:70
-msgid "Arabic"
-msgstr "Àrab"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
#: ../rules/base.xml.in.h:71
-msgid "Arm"
-msgstr "Arm"
+msgid "Backslash"
+msgstr "Barra inversa"
#: ../rules/base.xml.in.h:72
-msgid "Armenia"
-msgstr "Armènia"
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "La barra inversa selecciona el nivell 3r, bloqueja en prémer conjuntament amb un altre selector de nivell 3r"
#: ../rules/base.xml.in.h:73
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Variant asturiana amb H punt baix i L amb punt volat"
+msgid "Bambara"
+msgstr "Bambara"
#: ../rules/base.xml.in.h:74
-msgid "Asus Laptop"
-msgstr "Portàtil Asus"
+msgid "Belarusian"
+msgstr "Bielorús"
#: ../rules/base.xml.in.h:75
-msgid "At bottom left"
-msgstr "A baix esquerra"
+msgid "Belarusian (Latin)"
+msgstr "Bielorús (llatí)"
#: ../rules/base.xml.in.h:76
-msgid "At left of 'A'"
-msgstr "A l'esquerra d'«A»"
+msgid "Belarusian (legacy)"
+msgstr "Bielorús (antic)"
#: ../rules/base.xml.in.h:77
-msgid "Austria"
-msgstr "Àustria"
+msgid "Belgian"
+msgstr "Belga"
#: ../rules/base.xml.in.h:78
-msgid "Aut"
-msgstr "Aut"
+msgid "Belgian (ISO alternate)"
+msgstr "Belga (alternatiu ISO)"
#: ../rules/base.xml.in.h:79
-msgid "Avatime"
-msgstr "Avatime"
+msgid "Belgian (Sun dead keys)"
+msgstr "Belga (tecles mortes de Sun)"
#: ../rules/base.xml.in.h:80
-msgid "Aze"
-msgstr "Aze"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belga (Wang model 724 azerty)"
#: ../rules/base.xml.in.h:81
-msgid "Azerbaijan"
-msgstr "Azerbaitjan"
+msgid "Belgian (alternative)"
+msgstr "Belga (alternatiu)"
#: ../rules/base.xml.in.h:82
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Teclat Azona RF2300 wireless Internet"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belga (alternatiu, tecles mortes de Sun)"
#: ../rules/base.xml.in.h:83
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belga (alternatiu, només latin-9)"
#: ../rules/base.xml.in.h:84
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF Multimedia"
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belga (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:85
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:86
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:87
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:88
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Bengali"
+msgstr "Bengalí"
#: ../rules/base.xml.in.h:89
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Bengali (Probhat)"
+msgstr "Bengalí (Probhat)"
#: ../rules/base.xml.in.h:90
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Berber (Marroc, Tifinagh fonètic alternatiu)"
#: ../rules/base.xml.in.h:91
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Berber (Marroc, Tifinagh alternatiu)"
#: ../rules/base.xml.in.h:92
-msgid "Backslash"
-msgstr "Barra inversa"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Berber (Marroc, Tifinagh fonètic ampliat)"
#: ../rules/base.xml.in.h:93
-msgid "Bangladesh"
-msgstr "Bangladesh"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Berber (Marroc, Tifinagh ampliat)"
#: ../rules/base.xml.in.h:94
-msgid "Bashkirian"
-msgstr "Baixkir"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Berber (Marroc, Tifinagh fonètic)"
#: ../rules/base.xml.in.h:95
-msgid "Bel"
-msgstr "Bel"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Berber (Marroc, Tifinagh)"
#: ../rules/base.xml.in.h:96
-msgid "Belarus"
-msgstr "Bielorússia"
+msgid "Bosnian"
+msgstr "Bosnià"
#: ../rules/base.xml.in.h:97
-msgid "Belgium"
-msgstr "Bèlgica"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bosnià (teclat US amb dígrafs bosnians)"
#: ../rules/base.xml.in.h:98
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bosnià (teclat US amb lletres bosnianes)"
#: ../rules/base.xml.in.h:99
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bosnià (usa dígrafs bosnians)"
#: ../rules/base.xml.in.h:100
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bosnià (usa cometes angulars per les cometes)"
#: ../rules/base.xml.in.h:101
-msgid "Bengali"
-msgstr "Bengalí"
+msgid "Both Alt keys together"
+msgstr "Les dues tecles Alt juntes"
#: ../rules/base.xml.in.h:102
-msgid "Bengali Probhat"
-msgstr "Bengalí Probhat"
+msgid "Both Ctrl keys together"
+msgstr "Les dues tecles Ctrl juntes"
#: ../rules/base.xml.in.h:103
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ergonòmic, tipus Dvorak"
+msgid "Both Shift keys together"
+msgstr "Les dues tecles Maj juntes"
#: ../rules/base.xml.in.h:104
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ergonòmic, tipus Dvorak, només latin-9"
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Les dues tecles Maj juntes commuten Bloq Maj, una tecla Maj ho desactiva"
#: ../rules/base.xml.in.h:105
-msgid "Bgd"
-msgstr "Bgd"
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Les dues tecles Maj juntes commuten Bloq Maj"
#: ../rules/base.xml.in.h:106
-msgid "Bgr"
-msgstr "Bgr"
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Les dues tecles Maj juntes commuten Bloq Maj"
#: ../rules/base.xml.in.h:107
-msgid "Bhutan"
-msgstr "Bhutan"
+msgid "Braille"
+msgstr "Braille"
#: ../rules/base.xml.in.h:108
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Hebreu bíblic (Tiro)"
+msgid "Braille (left hand)"
+msgstr "Braille (ma esquerra)"
#: ../rules/base.xml.in.h:109
-msgid "Bih"
-msgstr "Bih"
+msgid "Braille (right hand)"
+msgstr "Braille (ma dretà)"
#: ../rules/base.xml.in.h:110
-msgid "Blr"
-msgstr "Blr"
+msgid "Brother Internet Keyboard"
+msgstr "Teclat Brother Internet"
#: ../rules/base.xml.in.h:111
-msgid "Bosnia and Herzegovina"
-msgstr "Bòsnia i Hercegovina"
+msgid "Bulgarian"
+msgstr "Búlgar"
#: ../rules/base.xml.in.h:112
-msgid "Both Alt keys together"
-msgstr "Les dues tecles Alt juntes"
+msgid "Bulgarian (new phonetic)"
+msgstr "Búlgar (fonètic nou)"
#: ../rules/base.xml.in.h:113
-msgid "Both Ctrl keys together"
-msgstr "Les dues tecles Ctrl juntes"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Búlgar (fonètic tradicional)"
#: ../rules/base.xml.in.h:114
-msgid "Both Shift keys together"
-msgstr "Les dues tecles Maj juntes"
+msgid "Burmese"
+msgstr "Birmà"
#: ../rules/base.xml.in.h:115
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "Les dues tecles Maj juntes commuten Bloq Maj"
+msgid "Canadian Multilingual"
+msgstr "Canadenc multilingüe"
#: ../rules/base.xml.in.h:116
-msgid "Botswana"
-msgstr "Botswana"
+msgid "Canadian Multilingual (first part)"
+msgstr "Canadenc multilingüe (primera part)"
#: ../rules/base.xml.in.h:117
-msgid "Bra"
-msgstr "Bra"
+msgid "Canadian Multilingual (second part)"
+msgstr "Canadenc multilingüe (segona part)"
#: ../rules/base.xml.in.h:118
-msgid "Braille"
-msgstr "Braille"
+msgid "Caps Lock"
+msgstr "Bloq Majús"
#: ../rules/base.xml.in.h:119
-msgid "Brazil"
-msgstr "Brasil"
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Bloq Maj (selecciona el nivell 3r, bloqueja en prémer conjuntament amb un altre selector de nivell 3r)"
#: ../rules/base.xml.in.h:120
-msgid "Breton"
-msgstr "Bretó"
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Bloq Maj (a la primera disposició), Maj+Bloq Maj (a la darrera disposició)"
#: ../rules/base.xml.in.h:121
-msgid "Brl"
-msgstr "Brl"
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Bloq Maj (mentre està premuda), Alt+Bloq Maj efectua l'acció de Bloq Maj original"
#: ../rules/base.xml.in.h:122
-msgid "Brother Internet Keyboard"
-msgstr "Teclat Brother Internet"
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Bloq Maj actua com a Maj amb bloqueig. Maj «pausa» Bloq Maj"
#: ../rules/base.xml.in.h:123
-msgid "Btn"
-msgstr "Btn"
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Bloq Maj actua com a Maj amb bloqueig. Maj no afecta a Bloq Maj"
#: ../rules/base.xml.in.h:124
-msgid "Buckwalter"
-msgstr "Buckwalter"
+msgid "Caps Lock is disabled"
+msgstr "Bloq Maj està deshabilitat"
#: ../rules/base.xml.in.h:125
-msgid "Bulgaria"
-msgstr "Bulgària"
+msgid "Caps Lock key behavior"
+msgstr "Comportament de la tecla Bloq Maj"
#: ../rules/base.xml.in.h:126
-msgid "Bwa"
-msgstr "Bwa"
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Bloq Maj commuta Maj, de manera que afecta a totes les tecles"
#: ../rules/base.xml.in.h:127
-msgid "COD"
-msgstr "COD"
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Bloq Maj commuta les majúscules normals dels caràcters alfabètics"
#: ../rules/base.xml.in.h:128
-msgid "CRULP"
-msgstr "CRULP"
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Bloq Maj usa internament les majúscules. Maj «pausa» Bloq Maj"
#: ../rules/base.xml.in.h:129
-msgid "Cambodia"
-msgstr "Cambodja"
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Bloq Maj usa internament les majúscules. Maj no afecta a Bloq Maj"
#: ../rules/base.xml.in.h:130
-msgid "Can"
-msgstr "Can"
+msgid "Catalan"
+msgstr "Català"
#: ../rules/base.xml.in.h:131
-msgid "Canada"
-msgstr "Canadà"
+msgid "Cherokee"
+msgstr "Cherokee"
#: ../rules/base.xml.in.h:132
-msgid "Capewell-Dvorak (Baybayin)"
-msgstr "Capewell-Dvorak (Baybayin)"
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
#: ../rules/base.xml.in.h:133
-msgid "Capewell-Dvorak (Latin)"
-msgstr "Capewell-Dvorak (Llatí)"
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
#: ../rules/base.xml.in.h:134
-msgid "Capewell-QWERF 2006 (Baybayin)"
-msgstr "Capewell-QWERF 2006 (Baybayin)"
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (opció alternativa)"
#: ../rules/base.xml.in.h:135
-msgid "Capewell-QWERF 2006 (Latin)"
-msgstr "Capewell-QWERF 2006 (Llatí)"
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
#: ../rules/base.xml.in.h:136
-msgid "Caps Lock"
-msgstr "Bloq Majús"
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
#: ../rules/base.xml.in.h:137
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "Bloq Maj (a la primera disposició), Maj+Bloq Maj (a la darrera disposició)"
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:138
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "Bloq Maj (mentre està premuda), Alt+Bloq Maj efectua l'acció de Bloq Maj original"
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "Bloq Maj actua com a Maj amb bloqueig. Maj «pausa» Bloq Maj"
+msgid "Chicony Internet Keyboard"
+msgstr "Teclat Chicony Internet"
#: ../rules/base.xml.in.h:140
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "Bloq Maj actua com a Maj amb bloqueig. Maj no afecta a Bloq Maj"
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
#: ../rules/base.xml.in.h:141
-msgid "Caps Lock is disabled"
-msgstr "Bloq Maj està deshabilitat"
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
#: ../rules/base.xml.in.h:142
-msgid "Caps Lock key behavior"
-msgstr "Comportament de la tecla Bloq Maj"
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "Bloq Maj commuta Maj, de manera que afecta a totes les tecles"
+msgid "Chinese"
+msgstr "Xinès"
#: ../rules/base.xml.in.h:144
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr "Bloq Maj commuta les majúscules normals dels caràcters alfabètics"
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Xinès (Tibetà amb nombres ASCII)"
#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr "Bloq Maj usa internament les majúscules. Maj «pausa» Bloq Maj"
+msgid "Chinese (Tibetan)"
+msgstr "Xinès (Tibetà)"
#: ../rules/base.xml.in.h:146
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr "Bloq Maj usa internament les majúscules. Maj no afecta a Bloq Maj"
+msgid "Chinese (Uyghur)"
+msgstr "Xinès (Uigur)"
#: ../rules/base.xml.in.h:147
-msgid "Catalan variant with middle-dot L"
-msgstr "Variant catalana amb L amb punt volat"
+msgid "Classmate PC"
+msgstr "Classmate PC"
#: ../rules/base.xml.in.h:148
-msgid "Cedilla"
-msgstr "Trencat"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Teclat Compaq Easy Access"
#: ../rules/base.xml.in.h:149
-msgid "Che"
-msgstr "Che"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Teclat Compaq Internet (13 tecles)"
#: ../rules/base.xml.in.h:150
-msgid "Cherokee"
-msgstr "Cherokee"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Teclat Compaq Internet (18 tecles)"
#: ../rules/base.xml.in.h:151
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UNLIMITED"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Teclat Compaq Internet (7 tecles)"
#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
+msgid "Compaq iPaq Keyboard"
+msgstr "Teclat Compaq iPaq"
#: ../rules/base.xml.in.h:153
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (opció alternativa)"
+msgid "Compose key position"
+msgstr "Posició de la tecla Compose"
#: ../rules/base.xml.in.h:154
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Retrocés"
#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control s'assigna a les tecles Alt, Alt s'assigna a les tecles Win"
#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control s'assigna a les tecles Win (i a les tecles Ctrl habituals)"
#: ../rules/base.xml.in.h:157
-msgid "Cherry CyMotion Master XPress"
-msgstr "Cherry CyMotion Master XPress"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
#: ../rules/base.xml.in.h:158
-msgid "Chicony Internet Keyboard"
-msgstr "Teclat Chicony Internet"
+msgid "Croatian"
+msgstr "Croat"
#: ../rules/base.xml.in.h:159
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Croat (teclat US amb dígrafs croats)"
#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Croat (teclat US amb lletres croates)"
#: ../rules/base.xml.in.h:161
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Croat (usa dígrafs croats)"
#: ../rules/base.xml.in.h:162
-msgid "China"
-msgstr "Xina"
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Croat (usa cometes angulars per les cometes)"
#: ../rules/base.xml.in.h:163
-msgid "Chn"
-msgstr "Chn"
+msgid "Ctrl key position"
+msgstr "Posició de la tecla Ctrl"
#: ../rules/base.xml.in.h:164
-msgid "Chuvash"
-msgstr "Chuvash"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Maj"
#: ../rules/base.xml.in.h:165
-msgid "Chuvash Latin"
-msgstr "Chuvash llatí"
+msgid "Czech"
+msgstr "Txec"
#: ../rules/base.xml.in.h:166
-msgid "Classic"
-msgstr "Clàssic"
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Txec (disposició UCW només lletres accentuades)"
#: ../rules/base.xml.in.h:167
-msgid "Classic Dvorak"
-msgstr "Dvorak clàssic"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Txec (Dvorak US que permet UCW CZ)"
#: ../rules/base.xml.in.h:168
-msgid "Classic, eliminate dead keys"
-msgstr "Clàssic, elimina les tecles mortes"
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Txec (amb la tecla &lt;\\|&gt;)"
#: ../rules/base.xml.in.h:169
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Czech (qwerty)"
+msgstr "Txec (qwerty)"
#: ../rules/base.xml.in.h:170
-msgid "CloGaelach"
-msgstr "CloGaelach"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Txec (qwerty, barra inversa ampliada)"
#: ../rules/base.xml.in.h:171
-msgid "Colemak"
-msgstr "Colemak"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:172
-msgid "Colemak (Baybayin)"
-msgstr "Colemak (Baybayin)"
+msgid "Danish"
+msgstr "Danès"
#: ../rules/base.xml.in.h:173
-msgid "Colemak (Latin)"
-msgstr "Colemak (Llatí)"
+msgid "Danish (Dvorak)"
+msgstr "Danès (Dvorak)"
#: ../rules/base.xml.in.h:174
-msgid "Compaq Easy Access Keyboard"
-msgstr "Teclat Compaq Easy Access"
+msgid "Danish (Mac)"
+msgstr "Danès (Mac)"
#: ../rules/base.xml.in.h:175
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Teclat Compaq Internet (13 tecles)"
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Danès (Mac, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:176
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Teclat Compaq Internet (18 tecles)"
+msgid "Danish (eliminate dead keys)"
+msgstr "Danès (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:177
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Teclat Compaq Internet (7 tecles)"
+msgid "Default numeric keypad keys"
+msgstr "Tecles del teclat numèric per defecte"
#: ../rules/base.xml.in.h:178
-msgid "Compaq iPaq Keyboard"
-msgstr "Teclat Compaq iPaq"
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:179
-msgid "Compose key position"
-msgstr "Posició de la tecla Compose"
+msgid "Dell 101-key PC"
+msgstr "Dell PC 101 tecles"
#: ../rules/base.xml.in.h:180
-msgid "Congo, Democratic Republic of the"
-msgstr "Congo, República Democràtica del"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Portàtil Dell Inspiron 6xxx/8xxx"
#: ../rules/base.xml.in.h:181
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Retrocés"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Portàtil Dell sèrie Precision M"
#: ../rules/base.xml.in.h:182
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Control s'assigna a les tecles Alt, Alt s'assigna a les tecles Win"
+msgid "Dell Latitude series laptop"
+msgstr "Portàtil Dell sèrie Latitude"
#: ../rules/base.xml.in.h:183
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control s'assigna a les tecles Win (i a les tecles Ctrl habituals)"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:184
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Tàtar de Crimea (Dobruca-1 Q)"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Tàtar de Crimea (Dobruca-2 Q)"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Teclat Dell USB Multimedia"
#: ../rules/base.xml.in.h:187
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Tàtar de Crimea (Turc Alt-Q)"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Teclat Dexxa Wireless Desktop"
#: ../rules/base.xml.in.h:188
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Tàtar de Crimea (Turc F)"
+msgid "Dhivehi"
+msgstr "Diveí"
#: ../rules/base.xml.in.h:189
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Tàtar de Crimea (Turc Q)"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond sèries 9801 / 9802"
#: ../rules/base.xml.in.h:190
-msgid "Croatia"
-msgstr "Croàcia"
+msgid "Dutch"
+msgstr "Holandès"
#: ../rules/base.xml.in.h:191
-msgid "Ctrl key position"
-msgstr "Posició de la tecla Ctrl"
+msgid "Dutch (Mac)"
+msgstr "Holandès (Mac)"
#: ../rules/base.xml.in.h:192
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Maj"
+msgid "Dutch (Sun dead keys)"
+msgstr "Holandès (tecles mortes de Sun)"
#: ../rules/base.xml.in.h:193
-msgid "Cyrillic"
-msgstr "Ciríl·lic"
+msgid "Dutch (standard)"
+msgstr "Holandès (estàndard)"
#: ../rules/base.xml.in.h:194
-msgid "Cyrillic with guillemets"
-msgstr "Ciríl·lic amb cometes angulars"
+msgid "Dzongkha"
+msgstr "Dzongkha"
#: ../rules/base.xml.in.h:195
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Ciríl·lic, Z i ZHE intercanviades"
+msgid "Enable extra typographic characters"
+msgstr "Habilita els caràcters tipogràfics extres"
#: ../rules/base.xml.in.h:196
-msgid "Cze"
-msgstr "Cze"
+msgid "English (Canada)"
+msgstr "Anglès (Canadà)"
#: ../rules/base.xml.in.h:197
-msgid "Czechia"
-msgstr "Txèquia"
+msgid "English (Colemak)"
+msgstr "Anglès (Colemak)"
#: ../rules/base.xml.in.h:198
-msgid "DOS"
-msgstr "DOS"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Anglès (Dvorak internacional alternatiu sense tecles mortes)"
#: ../rules/base.xml.in.h:199
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "English (Dvorak international with dead keys)"
+msgstr "Anglès (Dvorak internacional amb tecles mortes)"
#: ../rules/base.xml.in.h:200
-msgid "Dead acute"
-msgstr "Accent mort"
+msgid "English (Dvorak)"
+msgstr "Anglès (Dvorak)"
#: ../rules/base.xml.in.h:201
-msgid "Dead grave acute"
-msgstr "Accent greu mort"
+msgid "English (Ghana)"
+msgstr "Anglès (Ghana)"
#: ../rules/base.xml.in.h:202
-msgid "Default numeric keypad keys"
-msgstr "Tecles predeterminades del teclat numèric"
+msgid "English (Ghana, GILLBT)"
+msgstr "Anglès (Ghana, GILLBT)"
#: ../rules/base.xml.in.h:203
-msgid "Dell"
-msgstr "Dell"
+msgid "English (Ghana, multilingual)"
+msgstr "Anglès (Ghana, multilingüe)"
#: ../rules/base.xml.in.h:204
-msgid "Dell 101-key PC"
-msgstr "Dell PC 101 tecles"
+msgid "English (India, with RupeeSign)"
+msgstr "Anglès (Índia, amb signe de rupia)"
#: ../rules/base.xml.in.h:205
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Portàtil Dell Inspiron 6xxx/8xxx"
+msgid "English (Macintosh)"
+msgstr "Anglès (Macintosh)"
#: ../rules/base.xml.in.h:206
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Portàtil Dell sèrie Precision M"
+msgid "English (Mali, USA Mac)"
+msgstr "Anglès (Mali, Mac EUA)"
#: ../rules/base.xml.in.h:207
-msgid "Dell Latitude series laptop"
-msgstr "Portàtil Dell sèrie Latitude"
+msgid "English (Mali, USA international)"
+msgstr "Anglès (Mali, internacional EUA)"
#: ../rules/base.xml.in.h:208
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "English (Nigeria)"
+msgstr "Anglès (Nigèria)"
#: ../rules/base.xml.in.h:209
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
+msgid "English (South Africa)"
+msgstr "Anglès (Sud-àfrica)"
#: ../rules/base.xml.in.h:210
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "English (UK)"
+msgstr "Anglès (RU)"
#: ../rules/base.xml.in.h:211
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Teclat Dell USB Multimedia"
+msgid "English (UK, Colemak)"
+msgstr "Anglès (RU, Colemak)"
#: ../rules/base.xml.in.h:212
-msgid "Denmark"
-msgstr "Dinamarca"
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Anglès (RU, Dvorak amb puntuació RU)"
#: ../rules/base.xml.in.h:213
-msgid "Deu"
-msgstr "Deu"
+msgid "English (UK, Dvorak)"
+msgstr "Anglès (RU, Dvorak)"
#: ../rules/base.xml.in.h:214
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Teclat Dexxa Wireless Desktop"
+msgid "English (UK, Mac international)"
+msgstr "Anglès (RU, Mac internacional)"
#: ../rules/base.xml.in.h:215
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond sèries 9801 / 9802"
+msgid "English (UK, Mac)"
+msgstr "Anglès (RU, Mac)"
#: ../rules/base.xml.in.h:216
-msgid "Dnk"
-msgstr "Dnk"
+msgid "English (UK, extended, WinKeys)"
+msgstr "Anglès (RU, ampliat, tecles Win)"
#: ../rules/base.xml.in.h:217
-msgid "Dvorak"
-msgstr "Dvorak"
+msgid "English (UK, international with dead keys)"
+msgstr "Anglès (RU, internacional amb tecles mortes)"
#: ../rules/base.xml.in.h:218
-msgid "Dvorak (Baybayin)"
-msgstr "Dvorak (Baybayin)"
+msgid "English (US)"
+msgstr "Anglès (US)"
#: ../rules/base.xml.in.h:219
-msgid "Dvorak (Latin)"
-msgstr "Dvorak (Llatí)"
+msgid "English (US, alternative international)"
+msgstr "Anglès (US, internacional alternatiu)"
#: ../rules/base.xml.in.h:220
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvorak (Puntuació UK)"
+msgid "English (US, international with dead keys)"
+msgstr "Anglès (US, internacional amb tecles mortes)"
#: ../rules/base.xml.in.h:221
-msgid "Dvorak alternative international (no dead keys)"
-msgstr "Dvorak internacional alternatiu (sense tecles mortes)"
+msgid "English (US, with euro on 5)"
+msgstr "Anglès (US, amb l'euro en el 5)"
#: ../rules/base.xml.in.h:222
-msgid "Dvorak international (with dead keys)"
-msgstr "Dvorak internacional (amb tecles mortes)"
+msgid "English (classic Dvorak)"
+msgstr "Anglès (Dvorak clàssic)"
#: ../rules/base.xml.in.h:223
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Dvorak, cometes poloneses a la tecla 1"
+msgid "English (international AltGr dead keys)"
+msgstr "Anglès (internacional tecles mortes AltGr)"
#: ../rules/base.xml.in.h:224
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvorak, cometes poloneses a la tecla cometes"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Anglès (commutació de disposició en la tecla de multiplicació/divisió)"
#: ../rules/base.xml.in.h:225
-msgid "Eastern"
-msgstr "Oriental"
+msgid "English (left handed Dvorak)"
+msgstr "Anglès (Dvorak esquerrà)"
#: ../rules/base.xml.in.h:226
-msgid "Eliminate dead keys"
-msgstr "Elimina les tecles mortes"
+msgid "English (programmer Dvorak)"
+msgstr "Anglès (Dvorak de programador)"
#: ../rules/base.xml.in.h:227
-msgid "Enable extra typographic characters"
-msgstr "Habilita els caràcters tipogràfics extres"
+msgid "English (right handed Dvorak)"
+msgstr "Anglès (Dvorak dretà)"
#: ../rules/base.xml.in.h:228
-msgid "English"
-msgstr "Anglès"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:229
-msgid "English (USA International)"
-msgstr "Anglès (Internacional EUA)"
+msgid "Enter on keypad"
+msgstr "Retorn en el teclat numèric"
#: ../rules/base.xml.in.h:230
-msgid "English (USA Macintosh)"
-msgstr "Anglès (Macintosh EUA)"
+msgid "Esperanto"
+msgstr "Esperanto"
#: ../rules/base.xml.in.h:231
-msgid "English with RupeeSign"
-msgstr "Anglès amb signe de rupia"
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Esperanto (punt i coma i cometa desplaçats, obsolet)"
#: ../rules/base.xml.in.h:232
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
+msgid "Estonian"
+msgstr "Estonià"
#: ../rules/base.xml.in.h:233
-msgid "Enter on keypad"
-msgstr "Retorn en el teclat numèric"
+msgid "Estonian (Dvorak)"
+msgstr "Estonià (Dvorak)"
#: ../rules/base.xml.in.h:234
-msgid "Epo"
-msgstr "Epo"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Estonià (teclat US amb lletres estonianes)"
#: ../rules/base.xml.in.h:235
-msgid "Ergonomic"
-msgstr "Ergonòmic"
+msgid "Estonian (eliminate dead keys)"
+msgstr "Estonià (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:236
-msgid "Esp"
-msgstr "Esp"
+msgid "Euro on 2"
+msgstr "Euro en el 2"
#: ../rules/base.xml.in.h:237
-msgid "Esperanto"
-msgstr "Esperanto"
+msgid "Euro on 4"
+msgstr "Euro en el 4"
#: ../rules/base.xml.in.h:238
-msgid "Est"
-msgstr "Est"
+msgid "Euro on 5"
+msgstr "Euro en el 5"
#: ../rules/base.xml.in.h:239
-msgid "Estonia"
-msgstr "Estònia"
+msgid "Euro on E"
+msgstr "Euro en la E "
#: ../rules/base.xml.in.h:240
-msgid "Eth"
-msgstr "Eth"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:241
-msgid "Ethiopia"
-msgstr "Etiòpia"
+msgid "Ewe"
+msgstr "Ewe"
#: ../rules/base.xml.in.h:242
-msgid "Euro on 2"
-msgstr "Euro en el 2"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:243
-msgid "Euro on 4"
-msgstr "Euro en el 4"
+msgid "Faroese"
+msgstr "Feroès"
#: ../rules/base.xml.in.h:244
-msgid "Euro on 5"
-msgstr "Euro en el 5"
+msgid "Faroese (eliminate dead keys)"
+msgstr "Feroès (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:245
-msgid "Euro on E"
-msgstr "Euro en la E "
+msgid "Filipino"
+msgstr "Filipí"
#: ../rules/base.xml.in.h:246
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Filipí (Capewell-Dvorak Baybayin)"
#: ../rules/base.xml.in.h:247
-msgid "Ewe"
-msgstr "Ewe"
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Filipí (Capewell-Dvorak llatí)"
#: ../rules/base.xml.in.h:248
-msgid "Extended"
-msgstr "Ampliat"
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Filipí (Capewell-QWERF 2006 Baybayin)"
#: ../rules/base.xml.in.h:249
-msgid "Extended - Winkeys"
-msgstr "Ampliat - Tecles Win"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Filipí (Capewell-QWERF 2006 llatí)"
#: ../rules/base.xml.in.h:250
-msgid "Extended Backslash"
-msgstr "Barra inversa estesa"
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Filipí (Colemak Baybayin)"
#: ../rules/base.xml.in.h:251
-msgid "F-letter (F) variant"
-msgstr "Variant de lletra F (F)"
+msgid "Filipino (Colemak Latin)"
+msgstr "Filipí (Colemak llatí)"
#: ../rules/base.xml.in.h:252
-msgid "FL90"
-msgstr "FL90"
+msgid "Filipino (Dvorak Latin)"
+msgstr "Filipí (Dvorak llatí)"
#: ../rules/base.xml.in.h:253
-msgid "Faroe Islands"
-msgstr "Illes Faroe"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Filipí (QWERTY Baybayin)"
#: ../rules/base.xml.in.h:254
-msgid "Fin"
-msgstr "Fin"
+msgid "Finnish"
+msgstr "Finès"
#: ../rules/base.xml.in.h:255
-msgid "Finland"
-msgstr "Finlàndia"
+msgid "Finnish (Mac)"
+msgstr "Finès (Mac)"
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "Finès (clàssic)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Finès (clàssic, elimina les tecles mortes)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr "Finès (Sami del nord)"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:261
msgid "Four-level key with abstract separators"
msgstr "Tecla de quatre nivells amb separadors abstractes"
-#: ../rules/base.xml.in.h:259
+#: ../rules/base.xml.in.h:262
msgid "Four-level key with comma"
msgstr "Tecla de quatre nivells amb coma"
-#: ../rules/base.xml.in.h:260
+#: ../rules/base.xml.in.h:263
msgid "Four-level key with dot"
msgstr "Tecla de quatre nivells amb punt"
-#: ../rules/base.xml.in.h:261
+#: ../rules/base.xml.in.h:264
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Tecla de quatre nivells amb punt, restricció de latin-9"
# Què collons és momayyez? jm
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:265
msgid "Four-level key with momayyez"
msgstr "Tecla de quatre nivells amb momayyez"
-#: ../rules/base.xml.in.h:263
-msgid "Fra"
-msgstr "Fra"
-
-#: ../rules/base.xml.in.h:264
-msgid "France"
-msgstr "França"
-
-#: ../rules/base.xml.in.h:265
-msgid "Français (France Alternative)"
-msgstr "Francès (Alternatiu França)"
-
#: ../rules/base.xml.in.h:266
msgid "French"
msgstr "Francès"
#: ../rules/base.xml.in.h:267
-msgid "French (Macintosh)"
-msgstr "Francès (Macintosh)"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Francès (Bepo, ergonòmic, tipus Dvorak)"
#: ../rules/base.xml.in.h:268
-msgid "French (legacy)"
-msgstr "Francès (llegat)"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Francès (Bepo, ergonòmic, tipus Dvorak, només latin-9)"
#: ../rules/base.xml.in.h:269
-msgid "French Dvorak"
-msgstr "Francès Dvorak"
+msgid "French (Breton)"
+msgstr "Francès (Bretó)"
#: ../rules/base.xml.in.h:270
-msgid "French, Sun dead keys"
-msgstr "Francès, tecles mortes de Sun"
+msgid "French (Canada, Dvorak)"
+msgstr "Francès (Canadà, Dvorak)"
#: ../rules/base.xml.in.h:271
-msgid "French, eliminate dead keys"
-msgstr "Francès, sense tecles mortes"
+msgid "French (Canada, legacy)"
+msgstr "Francès (Canadà, antic)"
#: ../rules/base.xml.in.h:272
-msgid "Fro"
-msgstr "Fro"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Francès (República Democràtica del Congo)"
#: ../rules/base.xml.in.h:273
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Fujitsu-Siemens Computers AMILO portàtil"
+msgid "French (Dvorak)"
+msgstr "Francès (Dvorak)"
#: ../rules/base.xml.in.h:274
-msgid "Fula"
-msgstr "Fula"
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Francès (Georgià AZERTY Tskapo)"
#: ../rules/base.xml.in.h:275
-msgid "GBr"
-msgstr "GBr"
+msgid "French (Guinea)"
+msgstr "Francès (Guinea)"
#: ../rules/base.xml.in.h:276
-msgid "GILLBT"
-msgstr "GILLBT"
+msgid "French (Mac)"
+msgstr "Francès (Mac)"
#: ../rules/base.xml.in.h:277
-msgid "Ga"
-msgstr "Ga"
+msgid "French (Mali, alternative)"
+msgstr "Francès (Mali, alternatiu)"
#: ../rules/base.xml.in.h:278
-msgid "Generic 101-key PC"
-msgstr "PC genèric de 101 tecles"
+msgid "French (Morocco)"
+msgstr "Francès (Marroc)"
#: ../rules/base.xml.in.h:279
-msgid "Generic 102-key (Intl) PC"
-msgstr "PC genèric de 102 tecles (intl)"
+msgid "French (Occitan)"
+msgstr "Francès (Occità)"
#: ../rules/base.xml.in.h:280
-msgid "Generic 104-key PC"
-msgstr "PC genèric de 104 tecles"
+msgid "French (Sun dead keys)"
+msgstr "Francès (tecles mortes de Sun)"
#: ../rules/base.xml.in.h:281
-msgid "Generic 105-key (Intl) PC"
-msgstr "PC genèric de 105 tecles (intl)"
+msgid "French (Switzerland)"
+msgstr "Francès (Suïssa)"
#: ../rules/base.xml.in.h:282
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "French (Switzerland, Mac)"
+msgstr "Francès (Suïssa, Mac)"
#: ../rules/base.xml.in.h:283
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Teclat Genius MM KWD-910"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Francès (Suïssa, tecles mortes de Sun)"
#: ../rules/base.xml.in.h:284
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Francès (Suïssa, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:285
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
+msgid "French (alternative)"
+msgstr "Francès (alternatiu)"
#: ../rules/base.xml.in.h:286
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
+msgid "French (alternative, Sun dead keys)"
+msgstr "Francès (alternatiu, tecles mortes de Sun)"
#: ../rules/base.xml.in.h:287
-msgid "Geo"
-msgstr "Geo"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Francès (alternatiu, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:288
-msgid "Georgia"
-msgstr "Geòrgia"
+msgid "French (alternative, latin-9 only)"
+msgstr "Francès (alternatiu, només latin-9)"
#: ../rules/base.xml.in.h:289
-msgid "Georgian"
-msgstr "Georgià"
+msgid "French (eliminate dead keys)"
+msgstr "Francès (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:290
-msgid "Georgian AZERTY Tskapo"
-msgstr "Georgià AZERTY Tskapo"
+msgid "French (legacy alternative)"
+msgstr "Francès (alternatiu antic)"
#: ../rules/base.xml.in.h:291
-msgid "German (Macintosh)"
-msgstr "Alemany (Macintosh)"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Francès (antic, alternatiu, tecles mortes de Sun)"
#: ../rules/base.xml.in.h:292
-msgid "German, Sun dead keys"
-msgstr "Alemany, tecles mortes de Sun"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Francès (antic, alternatiu, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:293
-msgid "German, eliminate dead keys"
-msgstr "Alemany, sense tecles mortes"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Fujitsu-Siemens Computers AMILO portàtil"
#: ../rules/base.xml.in.h:294
-msgid "Germany"
-msgstr "Alemanya"
+msgid "Fula"
+msgstr "Fula"
#: ../rules/base.xml.in.h:295
-msgid "Gha"
-msgstr "Gha"
+msgid "GBr"
+msgstr "GBr"
#: ../rules/base.xml.in.h:296
-msgid "Ghana"
-msgstr "Ghana"
+msgid "Ga"
+msgstr "Ga"
#: ../rules/base.xml.in.h:297
-msgid "Gin"
-msgstr "Gin"
+msgid "Generic 101-key PC"
+msgstr "PC genèric de 101 tecles"
#: ../rules/base.xml.in.h:298
-msgid "Grc"
-msgstr "Grc"
+msgid "Generic 102-key (Intl) PC"
+msgstr "PC genèric de 102 tecles (intl)"
#: ../rules/base.xml.in.h:299
-msgid "Greece"
-msgstr "Grècia"
+msgid "Generic 104-key PC"
+msgstr "PC genèric de 104 tecles"
#: ../rules/base.xml.in.h:300
-msgid "Guinea"
-msgstr "Guinea"
+msgid "Generic 105-key (Intl) PC"
+msgstr "PC genèric de 105 tecles (intl)"
#: ../rules/base.xml.in.h:301
-msgid "Gujarati"
-msgstr "Gujarati"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:302
-msgid "Gurmukhi"
-msgstr "Gurmukhi"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Teclat Genius MM KWD-910"
#: ../rules/base.xml.in.h:303
-msgid "Gurmukhi Jhelum"
-msgstr "Gurmukhi Jhelum"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:304
-msgid "Gyration"
-msgstr "Gyration"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
#: ../rules/base.xml.in.h:305
-msgid "HTC Dream"
-msgstr "HTC Dream"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:306
-msgid "Happy Hacking Keyboard"
-msgstr "Teclat Happy Hacking"
+msgid "Georgian"
+msgstr "Georgià"
#: ../rules/base.xml.in.h:307
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Teclat Happy Hacking per a Mac"
+msgid "Georgian (MESS)"
+msgstr "Georgià (MESS)"
#: ../rules/base.xml.in.h:308
-msgid "Hausa"
-msgstr "Haussa"
+msgid "Georgian (Ossetian)"
+msgstr "Georgià (Osseta)"
#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Teclat Hewlett-Packard Internet"
+msgid "Georgian (ergonomic)"
+msgstr "Georgià (ergonòmic)"
#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 Notebook"
+msgid "German"
+msgstr "Alemany"
#: ../rules/base.xml.in.h:311
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "German (Austria)"
+msgstr "Alemany (Àustria)"
#: ../rules/base.xml.in.h:312
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "German (Austria, Mac)"
+msgstr "Alemany (Àustria, Mac)"
#: ../rules/base.xml.in.h:313
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+msgid "German (Austria, Sun dead keys)"
+msgstr "Alemany (Àustria, tecles mortes de Sun)"
#: ../rules/base.xml.in.h:314
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Alemany (Àustria, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:315
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "German (Dvorak)"
+msgstr "Alemany (Dvorak)"
#: ../rules/base.xml.in.h:316
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "German (Mac)"
+msgstr "Alemany (Mac)"
#: ../rules/base.xml.in.h:317
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Alemany (Mac, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:318
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
+msgid "German (Neo 2)"
+msgstr "Alemany (Neo 2)"
#: ../rules/base.xml.in.h:319
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Teclat Hewlett-Packard SK-250x Multimedia"
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Alemany (teclat romanès amb lletres alemanyes)"
#: ../rules/base.xml.in.h:320
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Alemany (teclat romanès amb lletres alemanyes, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:321
-msgid "Hexadecimal"
-msgstr "Hexadecimal"
+msgid "German (Sun dead keys)"
+msgstr "Alemany (tecles mortes de Sun)"
#: ../rules/base.xml.in.h:322
-msgid "Hindi Bolnagri"
-msgstr "Hindi Bolnagri"
+msgid "German (Switzerland, Mac)"
+msgstr "Alemany (Suïssa, Mac)"
#: ../rules/base.xml.in.h:323
-msgid "Hindi Wx"
-msgstr "Hindi Wx"
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Alemany (Suïssa, tecles mortes de Sun)"
#: ../rules/base.xml.in.h:324
-msgid "Homophonic"
-msgstr "Homofònic"
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Alemany (Suïssa, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:325
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "German (dead acute)"
+msgstr "Alemany (accent mort)"
#: ../rules/base.xml.in.h:326
-msgid "Hrv"
-msgstr "Hrv"
+msgid "German (dead grave acute)"
+msgstr "Alemany (accent greu mort)"
#: ../rules/base.xml.in.h:327
-msgid "Htc Dream phone"
-msgstr "Telèfon HTC Dream"
+msgid "German (eliminate dead keys)"
+msgstr "Alemany (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:328
-msgid "Hun"
-msgstr "Hun"
+msgid "German (lower Sorbian qwertz)"
+msgstr "Alemany (baix sòrab qwertz)"
#: ../rules/base.xml.in.h:329
-msgid "Hungary"
-msgstr "Hongria"
+msgid "German (lower Sorbian)"
+msgstr "Alemany (baix sòrab)"
#: ../rules/base.xml.in.h:330
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper s'assigna a les tecles Win"
+msgid "German (qwerty)"
+msgstr "Alemany (qwerty)"
#: ../rules/base.xml.in.h:331
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
+msgid "Greek"
+msgstr "Grec"
#: ../rules/base.xml.in.h:332
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "Greek (eliminate dead keys)"
+msgstr "Grec (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:333
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Greek (extended)"
+msgstr "Grec (ampliat)"
#: ../rules/base.xml.in.h:334
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "Greek (polytonic)"
+msgstr "Grec (politònic)"
#: ../rules/base.xml.in.h:335
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "Greek (simple)"
+msgstr "Grec (senzill)"
#: ../rules/base.xml.in.h:336
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
+msgid "Gujarati"
+msgstr "Gujarati"
#: ../rules/base.xml.in.h:337
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "Gyration"
+msgstr "Gyration"
#: ../rules/base.xml.in.h:338
-msgid "ISO Alternate"
-msgstr "Alternativa ISO"
+msgid "HTC Dream"
+msgstr "HTC Dream"
#: ../rules/base.xml.in.h:339
-msgid "Iceland"
-msgstr "Islàndia"
+msgid "Happy Hacking Keyboard"
+msgstr "Teclat Happy Hacking"
#: ../rules/base.xml.in.h:340
-msgid "Igbo"
-msgstr "Igbo"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Teclat Happy Hacking per a Mac"
#: ../rules/base.xml.in.h:341
-msgid "Include dead tilde"
-msgstr "Inclou la titlla morta"
+msgid "Hausa"
+msgstr "Haussa"
#: ../rules/base.xml.in.h:342
-msgid "Ind"
-msgstr "Ind"
+msgid "Hebrew"
+msgstr "Hebreu"
#: ../rules/base.xml.in.h:343
-msgid "India"
-msgstr "Índia"
+msgid "Hebrew (Phonetic)"
+msgstr "Hebreu (fonètic)"
#: ../rules/base.xml.in.h:344
-msgid "International (AltGr dead keys)"
-msgstr "Internacional (tecles mortes AltGr)"
+msgid "Hebrew (Tiro)"
+msgstr "Hebreu (Tiro)"
#: ../rules/base.xml.in.h:345
-msgid "International (with dead keys)"
-msgstr "Internacional (amb tecles mortes)"
+msgid "Hebrew (lyx)"
+msgstr "Hebreu (lyx)"
#: ../rules/base.xml.in.h:346
-msgid "Inuktitut"
-msgstr "Inuktitut"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Teclat Hewlett-Packard Internet"
-#: ../rules/base.xml.in.h:347 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr "Iran"
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
#: ../rules/base.xml.in.h:348
-msgid "Iraq"
-msgstr "Iraq"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:349
-msgid "Ireland"
-msgstr "Irlanda"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:350
-msgid "Irl"
-msgstr "Irl"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:351
-msgid "Irn"
-msgstr "Irn"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:352
-msgid "Irq"
-msgstr "Irq"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:353
-msgid "Isl"
-msgstr "Isl"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:354
-msgid "Isr"
-msgstr "Isr"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:355
-msgid "Israel"
-msgstr "Israel"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:356
-msgid "Ita"
-msgstr "Ita"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Teclat Hewlett-Packard SK-250x Multimedia"
#: ../rules/base.xml.in.h:357
-msgid "Italy"
-msgstr "Itàlia"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:358
-msgid "Japan"
-msgstr "Japó"
+msgid "Hexadecimal"
+msgstr "Hexadecimal"
#: ../rules/base.xml.in.h:359
-msgid "Japan (PC-98xx Series)"
-msgstr "Japó (sèries PC-98xx)"
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi (Bolnagri)"
#: ../rules/base.xml.in.h:360
-msgid "Japanese keyboard options"
-msgstr "Opcions del teclat japonès"
+msgid "Hindi (Wx)"
+msgstr "Hindi (Wx)"
#: ../rules/base.xml.in.h:361
-msgid "Jpn"
-msgstr "Jpn"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
#: ../rules/base.xml.in.h:362
-msgid "Kalmyk"
-msgstr "Calmuc"
+msgid "Htc Dream phone"
+msgstr "Telèfon HTC Dream"
#: ../rules/base.xml.in.h:363
-msgid "Kana"
-msgstr "Kana"
+msgid "Hungarian"
+msgstr "Hongarès"
#: ../rules/base.xml.in.h:364
-msgid "Kana 86"
-msgstr "Kana 86"
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Hongarès (101/qwerty/coma/tecles mortes)"
#: ../rules/base.xml.in.h:365
-msgid "Kana Lock key is locking"
-msgstr "La tecla de bloqueig Kana està blocant"
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Hongarès (101/qwerty/coma/elimina les tecles mortes)"
#: ../rules/base.xml.in.h:366
-msgid "Kannada"
-msgstr "Kannada"
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Hongarès (101/qwerty/punt/tecles mortes)"
#: ../rules/base.xml.in.h:367
-msgid "Kashubian"
-msgstr "Caixubi"
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Hongarès (101/qwerty/punt/elimina les tecles mortes)"
#: ../rules/base.xml.in.h:368
-msgid "Kaz"
-msgstr "Kaz"
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Hongarès (101/qwertz/coma/tecles mortes)"
#: ../rules/base.xml.in.h:369
-msgid "Kazakh with Russian"
-msgstr "Kazakh amb rus"
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Hongarès (101/qwertz/coma/elimina les tecles mortes)"
#: ../rules/base.xml.in.h:370
-msgid "Kazakhstan"
-msgstr "Kazakhstan"
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Hongarès (101/qwertz/punt/tecles mortes)"
#: ../rules/base.xml.in.h:371
-msgid "Ken"
-msgstr "Ken"
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Hongarès (101/qwertz/punt/elimina les tecles mortes)"
#: ../rules/base.xml.in.h:372
-msgid "Kenya"
-msgstr "Kenya"
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Hongarès (102/qwerty/coma/tecles mortes)"
#: ../rules/base.xml.in.h:373
-msgid "Key sequence to kill the X server"
-msgstr "Seqüència de tecles per a matar el servidor X"
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Hongarès (102/qwerty/coma/elimina les tecles mortes)"
#: ../rules/base.xml.in.h:374
-msgid "Key to choose 3rd level"
-msgstr "Tecla per a seleccionar el 3r nivell"
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Hongarès (102/qwerty/punt/tecles mortes)"
#: ../rules/base.xml.in.h:375
-msgid "Key to choose 5th level"
-msgstr "Tecla per a seleccionar el 5è nivell"
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Hongarès (102/qwerty/punt/elimina les tecles mortes)"
#: ../rules/base.xml.in.h:376
-msgid "Key(s) to change layout"
-msgstr "Tecla(es) per a canviar la disposició"
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Hongarès (102/qwertz/coma/tecles mortes)"
#: ../rules/base.xml.in.h:377
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Hongarès (102/qwertz/coma/elimina les tecles mortes)"
#: ../rules/base.xml.in.h:378
-msgid "Kgz"
-msgstr "Kgz"
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Hongarès (102/qwertz/punt/tecles mortes)"
#: ../rules/base.xml.in.h:379
-msgid "Khm"
-msgstr "Khm"
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Hongarès (102/qwertz/punt/elimina les tecles mortes)"
#: ../rules/base.xml.in.h:380
-msgid "Kikuyu"
-msgstr "Kikuyu"
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Hongarès (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:381
-msgid "Kinesis"
-msgstr "Kinesis"
+msgid "Hungarian (qwerty)"
+msgstr "Hongarès (qwerty)"
#: ../rules/base.xml.in.h:382
-msgid "Komi"
-msgstr "Komi"
+msgid "Hungarian (standard)"
+msgstr "Hongarès (estàndard)"
#: ../rules/base.xml.in.h:383
-msgid "Kor"
-msgstr "Kor"
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper s'assigna a les tecles Win"
#: ../rules/base.xml.in.h:384
-msgid "Korea, Republic of"
-msgstr "Corea, República de"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:385
-msgid "Ktunaxa"
-msgstr "Kutenai (Ktunaxa)"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:386
-msgid "Kurdish, (F)"
-msgstr "Kurd, (F)"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:387
-msgid "Kurdish, Arabic-Latin"
-msgstr "Kurd, aràbic-llatí"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:388
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Kurd, llatí Alt-Q"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
#: ../rules/base.xml.in.h:389
-msgid "Kurdish, Latin Q"
-msgstr "Kurd, llatí Q"
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
#: ../rules/base.xml.in.h:390
-msgid "Kyrgyzstan"
-msgstr "Kirguizistan"
+msgid "Icelandic"
+msgstr "Islandès"
#: ../rules/base.xml.in.h:391
-msgid "LEKP"
-msgstr "LEKP"
+msgid "Icelandic (Dvorak)"
+msgstr "Islandès (Dvorak)"
#: ../rules/base.xml.in.h:392
-msgid "LEKPa"
-msgstr "LEKPa"
+msgid "Icelandic (Mac)"
+msgstr "Islandès (Mac)"
#: ../rules/base.xml.in.h:393
-msgid "Lao"
-msgstr "Laosià"
+msgid "Icelandic (Sun dead keys)"
+msgstr "Islandès (tecles mortes de Sun)"
#: ../rules/base.xml.in.h:394
-msgid "Laos"
-msgstr "Laos"
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Islandès (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:395
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Teclat de portàtil Compaq (p.ex. Armada)"
+msgid "Igbo"
+msgstr "Igbo"
#: ../rules/base.xml.in.h:396
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Teclat Internet de portàtil Compaq (p.ex. Presario)"
+msgid "Indian"
+msgstr "Indi"
#: ../rules/base.xml.in.h:397
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Portàtil eMachines m68xx"
+msgid "Inuktitut"
+msgstr "Inuktitut"
#: ../rules/base.xml.in.h:398
-msgid "Latin"
-msgstr "Llatí"
+msgid "Iraqi"
+msgstr "Iraquià"
#: ../rules/base.xml.in.h:399
-msgid "Latin American"
-msgstr "Llatinoamericà"
+msgid "Irish"
+msgstr "Irlandès"
#: ../rules/base.xml.in.h:400
-msgid "Latin Unicode"
-msgstr "Llatí Unicode"
+msgid "Irish (CloGaelach)"
+msgstr "Irlandès (CloGaelach)"
#: ../rules/base.xml.in.h:401
-msgid "Latin Unicode qwerty"
-msgstr "Llatí Unicode qwerty"
+msgid "Irish (Ogham IS434)"
+msgstr "Irlandès (Ogham IS434)"
#: ../rules/base.xml.in.h:402
-msgid "Latin qwerty"
-msgstr "Llatí qwerty"
+msgid "Irish (Ogham)"
+msgstr "Irlandès (Ogham)"
#: ../rules/base.xml.in.h:403
-msgid "Latin unicode"
-msgstr "Llatí unicode"
+msgid "Irish (UnicodeExpert)"
+msgstr "Irlandès (UnicodeExpert)"
#: ../rules/base.xml.in.h:404
-msgid "Latin unicode qwerty"
-msgstr "Llatí unicode qwerty"
+msgid "Italian"
+msgstr "Italià"
#: ../rules/base.xml.in.h:405
-msgid "Latin with guillemets"
-msgstr "Llatí amb cometes angulars"
+msgid "Italian (Georgian)"
+msgstr "Italià (Georgià)"
#: ../rules/base.xml.in.h:406
-msgid "Latvia"
-msgstr "Letònia"
+msgid "Italian (Mac)"
+msgstr "Italià (Mac)"
#: ../rules/base.xml.in.h:407
-msgid "Layout toggle on multiply/divide key"
-msgstr "Commutació de disposició en la tecla de multiplicació/divisió"
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Italià (teclat US amb lletres italianes)"
#: ../rules/base.xml.in.h:408
-msgid "Left Alt"
-msgstr "Alt esquerra"
+msgid "Italian (eliminate dead keys)"
+msgstr "Italià (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:409
-msgid "Left Alt (while pressed)"
-msgstr "Alt esquerra (mentre està premuda)"
+msgid "Japanese"
+msgstr "Japonès"
#: ../rules/base.xml.in.h:410
-msgid "Left Alt is swapped with Left Win"
-msgstr "Alt esquerra està intercanviada amb la tecla Win esquerra"
+msgid "Japanese (Kana 86)"
+msgstr "Japonès (Kana 86)"
#: ../rules/base.xml.in.h:411
-msgid "Left Ctrl"
-msgstr "Ctrl esquerra"
+msgid "Japanese (Kana)"
+msgstr "Japonès (Kana)"
#: ../rules/base.xml.in.h:412
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Ctrl esquerra (a la primera disposició), Ctrl dreta (a la darrera disposició)"
+msgid "Japanese (Mac)"
+msgstr "Japonès (Mac)"
#: ../rules/base.xml.in.h:413
-msgid "Left Ctrl+Left Shift"
-msgstr "Ctrl esquerra + Maj esquerra"
+msgid "Japanese (OADG 109A)"
+msgstr "Japonès (OADG 109A)"
#: ../rules/base.xml.in.h:414
-msgid "Left Shift"
-msgstr "Maj esquerra"
+msgid "Japanese (PC-98xx Series)"
+msgstr "Japonès (sèries PC-98xx)"
#: ../rules/base.xml.in.h:415
-msgid "Left Win"
-msgstr "Win esquerra"
+msgid "Japanese keyboard options"
+msgstr "Opcions del teclat japonès"
#: ../rules/base.xml.in.h:416
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Win esquerra (a la primera disposició), Win/Menú dreta (a la darrera disposició)"
+msgid "Kana Lock key is locking"
+msgstr "La tecla de bloqueig Kana està blocant"
#: ../rules/base.xml.in.h:417
-msgid "Left Win (while pressed)"
-msgstr "Win esquerra (mentre està premuda)"
+msgid "Kannada"
+msgstr "Kannada"
#: ../rules/base.xml.in.h:418
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Win esquerra selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
+msgid "Kazakh"
+msgstr "Kazakh"
#: ../rules/base.xml.in.h:419
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Win esquerra selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
+msgid "Kazakh (with Russian)"
+msgstr "Kazakh (amb rus)"
#: ../rules/base.xml.in.h:420
-msgid "Left hand"
-msgstr "Esquerrà"
+msgid "Key sequence to kill the X server"
+msgstr "Seqüència de tecles per a matar el servidor X"
#: ../rules/base.xml.in.h:421
-msgid "Left handed Dvorak"
-msgstr "Dvorak esquerrà"
+msgid "Key to choose 3rd level"
+msgstr "Tecla per a seleccionar el 3r nivell"
#: ../rules/base.xml.in.h:422
-msgid "Legacy"
-msgstr "Llegat"
+msgid "Key to choose 5th level"
+msgstr "Tecla per a seleccionar el 5è nivell"
#: ../rules/base.xml.in.h:423
-msgid "Legacy Wang 724"
-msgstr "Wang 724 llegat"
+msgid "Key(s) to change layout"
+msgstr "Tecla(es) per a canviar la disposició"
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:425
-msgid "Legacy key with comma"
-msgstr "Tecla llegada amb coma"
+msgid "Khmer (Cambodian)"
+msgstr "Khmer (Cambotja)"
#: ../rules/base.xml.in.h:426
-msgid "Legacy key with dot"
-msgstr "Tecla llegada amb punt"
+msgid "Kikuyu"
+msgstr "Kikuyu"
#: ../rules/base.xml.in.h:427
-msgid "Lithuania"
-msgstr "Lituània"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:428
-msgid "Lka"
-msgstr "Lka"
+msgid "Korean"
+msgstr "Coreà"
#: ../rules/base.xml.in.h:429
-msgid "Logitech Access Keyboard"
-msgstr "Teclat Logitech Access"
+msgid "Korean (101/104 key compatible)"
+msgstr "Coreà (compatible de 101/104 tecles)"
#: ../rules/base.xml.in.h:430
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Kurd (Iran, àrab-llatí)"
#: ../rules/base.xml.in.h:431
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (opció alternativa)"
+msgid "Kurdish (Iran, F)"
+msgstr "Kurd (Iran, F)"
#: ../rules/base.xml.in.h:432
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Kurd (Iran, llatí Q)"
#: ../rules/base.xml.in.h:433
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Kurd (Iran, llatí Alt-Q)"
#: ../rules/base.xml.in.h:434
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Kurd (Iraq, àrab-llatí)"
#: ../rules/base.xml.in.h:435
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
+msgid "Kurdish (Iraq, F)"
+msgstr "Kurd (Iraq, F)"
#: ../rules/base.xml.in.h:436
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (opció alternativa 2)"
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Kurd (Iraq, llatí Alt-Q)"
#: ../rules/base.xml.in.h:437
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Kurd (Iraq, llatí Q)"
#: ../rules/base.xml.in.h:438
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
+msgid "Kurdish (Syria, F)"
+msgstr "Kurd (Síria, F)"
#: ../rules/base.xml.in.h:439
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Logitech G15 amb tecles extres via G15daemon"
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Kurd (Síria, llatí Alt-Q)"
#: ../rules/base.xml.in.h:440
-msgid "Logitech Generic Keyboard"
-msgstr "Teclat Logitech genèric"
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Kurd (Síria, llatí Q)"
#: ../rules/base.xml.in.h:441
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Teclat Logitech Internet 350"
+msgid "Kurdish (Turkey, F)"
+msgstr "Kurd (Turquia, F)"
#: ../rules/base.xml.in.h:442
-msgid "Logitech Internet Keyboard"
-msgstr "Teclat Logitech Internet"
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Kurd (Turquia, llatí Alt-Q)"
#: ../rules/base.xml.in.h:443
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Teclat Logitech Internet Navigator"
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Kurd (Turquia, llatí Q)"
#: ../rules/base.xml.in.h:444
-msgid "Logitech Media Elite Keyboard"
-msgstr "Teclat Logitech Media Elite"
+msgid "Kutenai"
+msgstr "Kutenai"
#: ../rules/base.xml.in.h:445
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Teclat Logitech Ultra-X Cordless Media Desktop"
+msgid "Kyrgyz"
+msgstr "Kirguís"
#: ../rules/base.xml.in.h:446
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Teclat Logitech Ultra-X"
+msgid "Kyrgyz (phonetic)"
+msgstr "Kirguís (fonètic)"
#: ../rules/base.xml.in.h:447
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Teclat Logitech diNovo Edge"
+msgid "Lao"
+msgstr "Laosià"
#: ../rules/base.xml.in.h:448
-msgid "Logitech diNovo Keyboard"
-msgstr "Teclat Logitech diNovo"
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Laosià (disposició estàndard proposada per STEA)"
#: ../rules/base.xml.in.h:449
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Teclat de portàtil Compaq (p.ex. Armada)"
#: ../rules/base.xml.in.h:450
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Teclat Logitech iTouch Cordless (model Y-RB6)"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Teclat Internet de portàtil Compaq (p.ex. Presario)"
#: ../rules/base.xml.in.h:451
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Teclat Logitech iTouch Internet Navigator SE"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Portàtil eMachines m68xx"
#: ../rules/base.xml.in.h:452
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Teclat Logitech iTouch Internet Navigator SE (USB)"
+msgid "Latvian"
+msgstr "Letó"
#: ../rules/base.xml.in.h:453
-msgid "Lower Sorbian"
-msgstr "Baix sòrab"
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Letó (variant amb apòstrof ')"
#: ../rules/base.xml.in.h:454
-msgid "Lower Sorbian (qwertz)"
-msgstr "Baix sòrab (qwertz)"
+msgid "Latvian (F variant)"
+msgstr "Letó (variant F)"
#: ../rules/base.xml.in.h:455
-msgid "Ltu"
-msgstr "Ltu"
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Letó (variant titlla ~)"
#: ../rules/base.xml.in.h:456
-msgid "Lva"
-msgstr "Lva"
+msgid "Left Alt"
+msgstr "Alt esquerra"
#: ../rules/base.xml.in.h:457
-msgid "MESS"
-msgstr "MESS"
+msgid "Left Alt (while pressed)"
+msgstr "Alt esquerra (mentre està premuda)"
#: ../rules/base.xml.in.h:458
-msgid "MNE"
-msgstr "MNE"
+msgid "Left Alt is swapped with Left Win"
+msgstr "Alt esquerra està intercanviada amb la tecla Win esquerra"
#: ../rules/base.xml.in.h:459
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Left Ctrl"
+msgstr "Ctrl esquerra"
#: ../rules/base.xml.in.h:460
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Ctrl esquerra (a la primera disposició), Ctrl dreta (a la darrera disposició)"
#: ../rules/base.xml.in.h:461
-msgid "Macedonia"
-msgstr "Macedònia"
+msgid "Left Ctrl+Left Shift"
+msgstr "Ctrl esquerra + Maj esquerra"
#: ../rules/base.xml.in.h:462
-msgid "Macintosh"
-msgstr "Macintosh"
+msgid "Left Shift"
+msgstr "Maj esquerra"
#: ../rules/base.xml.in.h:463
-msgid "Macintosh (International)"
-msgstr "Macintosh (Internacional)"
+msgid "Left Win"
+msgstr "Win esquerra"
#: ../rules/base.xml.in.h:464
-msgid "Macintosh Old"
-msgstr "Macintosh antic"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Win esquerra (a la primera disposició), Win/Menú dreta (a la darrera disposició)"
#: ../rules/base.xml.in.h:465
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, tecles mortes de Sun"
+msgid "Left Win (while pressed)"
+msgstr "Win esquerra (mentre està premuda)"
#: ../rules/base.xml.in.h:466
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, sense tecles mortes"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Win esquerra selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
#: ../rules/base.xml.in.h:467
-msgid "Make Caps Lock an additional Backspace"
-msgstr "Converteix Bloq Maj en un Retrocés addicional"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Win esquerra selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
#: ../rules/base.xml.in.h:468
-msgid "Make Caps Lock an additional Ctrl"
-msgstr "Converteix Bloq Maj en un Ctrl addicional"
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Ctrl esquerra+Win esquerra (a la primera disposició), Ctrl dreta+Menú (a la segona disposició)"
#: ../rules/base.xml.in.h:469
-msgid "Make Caps Lock an additional ESC"
-msgstr "Converteix Bloq Maj en un Esc addicional"
+msgid "Legacy"
+msgstr "Antic"
#: ../rules/base.xml.in.h:470
-msgid "Make Caps Lock an additional Hyper"
-msgstr "Converteix Bloq Maj en un Hyper addicional"
-
-#: ../rules/base.xml.in.h:471
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "Converteix Bloq Maj en un Bloq Núm addicional"
+msgid "Legacy Wang 724"
+msgstr "Wang 724 antic"
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:472
-msgid "Make Caps Lock an additional Super"
-msgstr "Converteix Bloq Maj en un Super addicional"
+msgid "Legacy key with comma"
+msgstr "Tecla antiga amb coma"
#: ../rules/base.xml.in.h:473
-msgid "Malayalam"
-msgstr "Malaiàlam"
+msgid "Legacy key with dot"
+msgstr "Tecla antiga amb punt"
#: ../rules/base.xml.in.h:474
-msgid "Malayalam Lalitha"
-msgstr "Malaiàlam Lalitha"
+msgid "Lithuanian"
+msgstr "Lituà"
#: ../rules/base.xml.in.h:475
-msgid "Maldives"
-msgstr "Maldives"
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Lituà (IBM LST 1205-92)"
#: ../rules/base.xml.in.h:476
-msgid "Mali"
-msgstr "Mali"
+msgid "Lithuanian (LEKP)"
+msgstr "Lituà (LEKP)"
#: ../rules/base.xml.in.h:477
-msgid "Malta"
-msgstr "Malta"
+msgid "Lithuanian (LEKPa)"
+msgstr "Lituà (LEKPa)"
#: ../rules/base.xml.in.h:478
-msgid "Maltese keyboard with US layout"
-msgstr "Teclat maltès amb disposició US"
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Lituà (teclat US amb lletres lituanes)"
#: ../rules/base.xml.in.h:479
-msgid "Mao"
-msgstr "Mao"
+msgid "Lithuanian (standard)"
+msgstr "Lituà (estàndard)"
#: ../rules/base.xml.in.h:480
-msgid "Maori"
-msgstr "Maori"
+msgid "Logitech Access Keyboard"
+msgstr "Teclat Logitech Access"
#: ../rules/base.xml.in.h:481
-msgid "Mari"
-msgstr "Mari"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
#: ../rules/base.xml.in.h:482
-msgid "Mdv"
-msgstr "Mdv"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (opció alternativa)"
#: ../rules/base.xml.in.h:483
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
#: ../rules/base.xml.in.h:484
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Teclat Memorex MX2500 EZ-Access"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:485
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
#: ../rules/base.xml.in.h:486
-msgid "Menu"
-msgstr "Menú"
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
#: ../rules/base.xml.in.h:487
-msgid "Meta is mapped to Left Win"
-msgstr "Meta s'assigna a la tecla Win esquerra"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (opció alternativa 2)"
#: ../rules/base.xml.in.h:488
-msgid "Meta is mapped to Win keys"
-msgstr "Meta s'assigna a les tecles Win"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
#: ../rules/base.xml.in.h:489
-msgid "Meta on Left Ctrl"
-msgstr "Meta en el Ctrl esquerre"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
#: ../rules/base.xml.in.h:490
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15 amb tecles extres via G15daemon"
#: ../rules/base.xml.in.h:491
-msgid "Microsoft Internet Keyboard"
-msgstr "Teclat Microsoft Internet"
+msgid "Logitech Generic Keyboard"
+msgstr "Teclat Logitech genèric"
#: ../rules/base.xml.in.h:492
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, Suec"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Teclat Logitech Internet 350"
#: ../rules/base.xml.in.h:493
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+msgid "Logitech Internet Keyboard"
+msgstr "Teclat Logitech Internet"
#: ../rules/base.xml.in.h:494
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Teclat Microsoft Natural Elite"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Teclat Logitech Internet Navigator"
#: ../rules/base.xml.in.h:495
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Teclat Microsoft Natural Pro / Teclat Microsoft Internet Pro"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Teclat Logitech Media Elite"
#: ../rules/base.xml.in.h:496
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Teclat Microsoft Natural Pro OEM"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Teclat Logitech Ultra-X Cordless Media Desktop"
#: ../rules/base.xml.in.h:497
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Teclat Microsoft Natural Pro USB / Teclat Microsoft Internet Pro"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Teclat Logitech Ultra-X"
#: ../rules/base.xml.in.h:498
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Teclat Logitech diNovo Edge"
#: ../rules/base.xml.in.h:499
-msgid "Microsoft Office Keyboard"
-msgstr "Teclat Microsoft Office"
+msgid "Logitech diNovo Keyboard"
+msgstr "Teclat Logitech diNovo"
#: ../rules/base.xml.in.h:500
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Teclat Microsoft Wireless Multimedia 1.0A"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:501
-msgid "Miscellaneous compatibility options"
-msgstr "Opcions de compatibilitat diverses"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Teclat Logitech iTouch Cordless (model Y-RB6)"
#: ../rules/base.xml.in.h:502
-msgid "Mkd"
-msgstr "Mkd"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Teclat Logitech iTouch Internet Navigator SE"
#: ../rules/base.xml.in.h:503
-msgid "Mli"
-msgstr "Mli"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Teclat Logitech iTouch Internet Navigator SE (USB)"
#: ../rules/base.xml.in.h:504
-msgid "Mlt"
-msgstr "Mlt"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:505
-msgid "Mmr"
-msgstr "Mmr"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:506
-msgid "Mng"
-msgstr "Mng"
+msgid "Macedonian"
+msgstr "Macedoni"
#: ../rules/base.xml.in.h:507
-msgid "Mongolia"
-msgstr "Mongòlia"
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Macedoni (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:508
-msgid "Montenegro"
-msgstr "Montenegro"
+msgid "Macintosh"
+msgstr "Macintosh"
#: ../rules/base.xml.in.h:509
-msgid "Morocco"
-msgstr "Marroc"
+msgid "Macintosh Old"
+msgstr "Macintosh antic"
#: ../rules/base.xml.in.h:510
-msgid "Multilingual"
-msgstr "Multilingüe"
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Converteix Bloq Maj en un Retrocés addicional"
#: ../rules/base.xml.in.h:511
-msgid "Multilingual, first part"
-msgstr "Multilingüe, primera part"
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Converteix Bloq Maj en un Bloq Núm addicional però manté el «keysym» «Caps_Lock»"
#: ../rules/base.xml.in.h:512
-msgid "Multilingual, second part"
-msgstr "Multilingüe, segona part"
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Converteix Bloq Maj en un Ctrl addicional"
#: ../rules/base.xml.in.h:513
-msgid "Myanmar"
-msgstr "Myanmar"
+msgid "Make Caps Lock an additional ESC"
+msgstr "Converteix Bloq Maj en un Esc addicional"
#: ../rules/base.xml.in.h:514
-msgid "NICOLA-F style Backspace"
-msgstr "Retrocés estil NICOLA-F"
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Converteix Bloq Maj en un Hyper addicional"
#: ../rules/base.xml.in.h:515
-msgid "NLA"
-msgstr "NLA"
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Converteix Bloq Maj en un Bloq Núm addicional"
#: ../rules/base.xml.in.h:516
-msgid "Nativo"
-msgstr "Nativo"
+msgid "Make Caps Lock an additional Super"
+msgstr "Converteix Bloq Maj en un Super addicional"
#: ../rules/base.xml.in.h:517
-msgid "Nativo for Esperanto"
-msgstr "Nativo per a l'Esperanto"
+msgid "Malayalam"
+msgstr "Malaiàlam"
#: ../rules/base.xml.in.h:518
-msgid "Nativo for USA keyboards"
-msgstr "Nativo per als teclats EUA"
+msgid "Malayalam (Lalitha)"
+msgstr "Malaiàlam (Lalitha)"
#: ../rules/base.xml.in.h:519
-msgid "Neo 2"
-msgstr "Neo 2"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Malaiàlam (Inscript realçat, amb el signe de rupia)"
#: ../rules/base.xml.in.h:520
-msgid "Nepal"
-msgstr "Nepal"
+msgid "Maltese"
+msgstr "Maltès"
#: ../rules/base.xml.in.h:521
-msgid "Netherlands"
-msgstr "Països Baixos"
+msgid "Maltese (with US layout)"
+msgstr "Maltès (amb disposició US)"
#: ../rules/base.xml.in.h:522
-msgid "New phonetic"
-msgstr "Fonètic nou"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:523
-msgid "Nga"
-msgstr "Nga"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Teclat Memorex MX2500 EZ-Access"
#: ../rules/base.xml.in.h:524
-msgid "Nigeria"
-msgstr "Nigèria"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:525
-msgid "Nld"
-msgstr "Nld"
+msgid "Menu"
+msgstr "Menú"
#: ../rules/base.xml.in.h:526
-msgid "Non-breakable space character at fourth level"
-msgstr "Caràcter d'espai sense salt al nivell quart"
+msgid "Meta is mapped to Left Win"
+msgstr "Meta s'assigna a la tecla Win esquerra"
#: ../rules/base.xml.in.h:527
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Caràcter d'espai sense salt al nivell quart, i un caràcter d'espai fi sense salt al nivell sisè"
+msgid "Meta is mapped to Win keys"
+msgstr "Meta s'assigna a les tecles Win"
#: ../rules/base.xml.in.h:528
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Caràcter d'espai sense salt al nivell quart, un caràcter d'espai fi sense salt al nivell sisè (via Ctrl+Maj)"
+msgid "Meta on Left Ctrl"
+msgstr "Meta en el Ctrl esquerre"
#: ../rules/base.xml.in.h:529
-msgid "Non-breakable space character at second level"
-msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell segon"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
#: ../rules/base.xml.in.h:530
-msgid "Non-breakable space character at third level"
-msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer"
+msgid "Microsoft Internet Keyboard"
+msgstr "Teclat Microsoft Internet"
#: ../rules/base.xml.in.h:531
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer, i res al nivell quart"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, Suec"
#: ../rules/base.xml.in.h:532
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer, i un caràcter d'espai fi sense salt al nivell quart"
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:533
-msgid "Nor"
-msgstr "Nor"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Teclat Microsoft Natural Elite"
#: ../rules/base.xml.in.h:534
-msgid "Northern Saami"
-msgstr "Saami del nord"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Teclat Microsoft Natural Pro / Teclat Microsoft Internet Pro"
#: ../rules/base.xml.in.h:535
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Saami del nord, sense tecles mortes"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Teclat Microsoft Natural Pro OEM"
#: ../rules/base.xml.in.h:536
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Teclat Microsoft Natural Pro USB / Teclat Microsoft Internet Pro"
#: ../rules/base.xml.in.h:537
-msgid "Norway"
-msgstr "Noruega"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Teclat Microsoft Natural Wireless Ergonomic 4000"
#: ../rules/base.xml.in.h:538
-msgid "Npl"
-msgstr "Npl"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Teclat Microsoft Natural Wireless Ergonomic 7000"
#: ../rules/base.xml.in.h:539
-msgid "Num Lock"
-msgstr "Bloq Núm"
+msgid "Microsoft Office Keyboard"
+msgstr "Teclat Microsoft Office"
#: ../rules/base.xml.in.h:540
-msgid "Numeric keypad delete key behaviour"
-msgstr "Comportament de la tecla de supressió del teclat numèric"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Teclat Microsoft Wireless Multimedia 1.0A"
#: ../rules/base.xml.in.h:541
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Les tecles del teclat numèric funcionen com al Mac"
+msgid "Miscellaneous compatibility options"
+msgstr "Opcions de compatibilitat diverses"
#: ../rules/base.xml.in.h:542
-msgid "Numeric keypad layout selection"
-msgstr "Selecció de la disposició del teclat numèric"
+msgid "Mongolian"
+msgstr "Mongol"
#: ../rules/base.xml.in.h:543
-msgid "OADG 109A"
-msgstr "OADG 109A"
+msgid "Montenegrin"
+msgstr "Montenegrí"
#: ../rules/base.xml.in.h:544
-msgid "OLPC"
-msgstr "OLPC"
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Montenegrí (ciríl·lic amb cometes angulars)"
#: ../rules/base.xml.in.h:545
-msgid "OLPC Dari"
-msgstr "OLPC Dari"
+msgid "Montenegrin (Cyrillic)"
+msgstr "Montenegrí (ciríl·lic)"
#: ../rules/base.xml.in.h:546
-msgid "OLPC Pashto"
-msgstr "OLPC Paixtu"
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Montenegrí (ciríl·lic, Z i ZHE intercanviades)"
#: ../rules/base.xml.in.h:547
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC Uzbek del sud"
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Montenegrí (llatí qwerty)"
#: ../rules/base.xml.in.h:548
-msgid "Occitan"
-msgstr "Occità"
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Montenegrí (llatí unicode qwerty)"
#: ../rules/base.xml.in.h:549
-msgid "Ogham"
-msgstr "Ogham"
+msgid "Montenegrin (Latin unicode)"
+msgstr "Montenegrí (llatí unicode)"
#: ../rules/base.xml.in.h:550
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Montenegrí (llatí amb cometes angulars)"
#: ../rules/base.xml.in.h:551
-msgid "Oriya"
-msgstr "Oriya"
+msgid "Māori"
+msgstr "Maori"
#: ../rules/base.xml.in.h:552
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Teclat Ortek MCK-800 MM/Internet"
+msgid "NICOLA-F style Backspace"
+msgstr "Retrocés estil NICOLA-F"
#: ../rules/base.xml.in.h:553
-msgid "Ossetian"
-msgstr "Osset"
+msgid "Nepali"
+msgstr "Nepalès"
#: ../rules/base.xml.in.h:554
-msgid "Ossetian, Winkeys"
-msgstr "Osset, tecles Win"
+msgid "Non-breakable space character at fourth level"
+msgstr "Caràcter d'espai sense salt al nivell quart"
#: ../rules/base.xml.in.h:555
-msgid "Ossetian, legacy"
-msgstr "Osset, llegat"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Caràcter d'espai sense salt al nivell quart, i un caràcter d'espai fi sense salt al nivell sisè"
#: ../rules/base.xml.in.h:556
-msgid "PC-98xx Series"
-msgstr "Sèries PC-98xx"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Caràcter d'espai sense salt al nivell quart, un caràcter d'espai fi sense salt al nivell sisè (via Ctrl+Maj)"
#: ../rules/base.xml.in.h:557
-msgid "Pak"
-msgstr "Pak"
+msgid "Non-breakable space character at second level"
+msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell segon"
#: ../rules/base.xml.in.h:558
-msgid "Pakistan"
-msgstr "Pakistan"
+msgid "Non-breakable space character at third level"
+msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer"
#: ../rules/base.xml.in.h:559
-msgid "Pannonian Rusyn Homophonic"
-msgstr "Rutè Pannònic homofònic"
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer, i res al nivell quart"
#: ../rules/base.xml.in.h:560
-msgid "Pashto"
-msgstr "Paixtu"
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "La tecla d'espai produeix un caràcter d'espai sense salt al nivell tercer, i un caràcter d'espai fi sense salt al nivell quart"
#: ../rules/base.xml.in.h:561
-msgid "Pattachote"
-msgstr "Pattachote"
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:562
-msgid "Pause"
-msgstr "Pausa"
+msgid "Norwegian"
+msgstr "Noruec"
#: ../rules/base.xml.in.h:563
-msgid "Persian, with Persian Keypad"
-msgstr "Farsi, amb teclat farsi"
+msgid "Norwegian (Dvorak)"
+msgstr "Noruec (Dvorak)"
#: ../rules/base.xml.in.h:564
-msgid "Phi"
-msgstr "Phi"
+msgid "Norwegian (Mac)"
+msgstr "Noruec (Mac)"
#: ../rules/base.xml.in.h:565
-msgid "Philippines"
-msgstr "Filipines"
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Noruec (Mac, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:566
-msgid "Phonetic"
-msgstr "Fonètic"
+msgid "Norwegian (Northern Saami"
+msgstr "Noruec (Sami del nord)"
#: ../rules/base.xml.in.h:567
-msgid "Phonetic Winkeys"
-msgstr "Tecles Win fonètiques"
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Noruec (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:568
-msgid "Pol"
-msgstr "Pol"
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Noruec (Sami del nord, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:569
-msgid "Poland"
-msgstr "Polònia"
+msgid "Num Lock"
+msgstr "Bloq Núm"
#: ../rules/base.xml.in.h:570
-msgid "Polytonic"
-msgstr "Politònic"
+msgid "Numeric keypad delete key behaviour"
+msgstr "Comportament de la tecla de supressió del teclat numèric"
#: ../rules/base.xml.in.h:571
-msgid "Portugal"
-msgstr "Portugal"
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Les tecles del teclat numèric funcionen com al Mac"
#: ../rules/base.xml.in.h:572
-msgid "Probhat"
-msgstr "Probhat"
+msgid "Numeric keypad layout selection"
+msgstr "Selecció de la disposició del teclat numèric"
#: ../rules/base.xml.in.h:573
-msgid "Programmer Dvorak"
-msgstr "Dvorak de programador"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:574
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Oriya"
+msgstr "Oriya"
#: ../rules/base.xml.in.h:575
-msgid "Prt"
-msgstr "Prt"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Teclat Ortek MCK-800 MM/Internet"
#: ../rules/base.xml.in.h:576
-msgid "PrtSc"
-msgstr "ImprPant"
+msgid "PC-98xx Series"
+msgstr "Sèries PC-98xx"
#: ../rules/base.xml.in.h:577
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Pashto"
+msgstr "Paixtu"
#: ../rules/base.xml.in.h:578
-msgid "QWERTY (Baybayin)"
-msgstr "QWERTY (Baybayin)"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Paixtu (Afganistan, OLPC)"
#: ../rules/base.xml.in.h:579
-msgid "Right Alt"
-msgstr "Alt dreta"
+msgid "Pause"
+msgstr "Pausa"
#: ../rules/base.xml.in.h:580
-msgid "Right Alt (while pressed)"
-msgstr "Alt dreta (mentre està premuda)"
+msgid "Persian"
+msgstr "Persa"
#: ../rules/base.xml.in.h:581
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Alt dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Persa (Afganistan, Dari OLPC)"
#: ../rules/base.xml.in.h:582
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Alt dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
+msgid "Persian (with Persian Keypad)"
+msgstr "Persa (amb teclat persa)"
#: ../rules/base.xml.in.h:583
-msgid "Right Alt key never chooses 3rd level"
-msgstr "La tecla Alt dreta mai selecciona el 3r nivell"
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Filipines - Dvorak (Baybayin)"
#: ../rules/base.xml.in.h:584
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Alt dreta, Maj+Alt dreta és la Multi_Key"
+msgid "Polish"
+msgstr "Polonès"
#: ../rules/base.xml.in.h:585
-msgid "Right Ctrl"
-msgstr "Ctrl dreta"
+msgid "Polish (Dvorak)"
+msgstr "Polonès (Dvorak)"
#: ../rules/base.xml.in.h:586
-msgid "Right Ctrl (while pressed)"
-msgstr "Ctrl dreta (mentre està premuda)"
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Polonès (Dvorak, cometes poloneses a la tecla 1)"
#: ../rules/base.xml.in.h:587
-msgid "Right Ctrl as Right Alt"
-msgstr "Ctrl dreta com a Alt dreta"
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Polonès (Dvorak, cometes poloneses a la tecla cometes)"
#: ../rules/base.xml.in.h:588
-msgid "Right Ctrl+Right Shift"
-msgstr "Ctrl dreta+Maj dreta"
+msgid "Polish (Kashubian)"
+msgstr "Polonès (Caixubi)"
#: ../rules/base.xml.in.h:589
-msgid "Right Shift"
-msgstr "Maj dreta"
+msgid "Polish (programmer Dvorak)"
+msgstr "Polonès (Dvorak de programador)"
#: ../rules/base.xml.in.h:590
-msgid "Right Win"
-msgstr "Win dreta"
+msgid "Polish (qwertz)"
+msgstr "Polonès (qwertz)"
#: ../rules/base.xml.in.h:591
-msgid "Right Win (while pressed)"
-msgstr "Win dreta (mentre està premuda)"
+msgid "Portuguese"
+msgstr "Portuguès"
#: ../rules/base.xml.in.h:592
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Win dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
+msgid "Portuguese (Brazil)"
+msgstr "Portuguès (Brasil)"
#: ../rules/base.xml.in.h:593
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Win dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Portuguès (Brasil, Dvorak)"
#: ../rules/base.xml.in.h:594
-msgid "Right hand"
-msgstr "Dretà"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Portuguès (Brasil, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:595
-msgid "Right handed Dvorak"
-msgstr "Dvorak dretà"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Portuguès (Brasil, natiu per a l'esperanto)"
#: ../rules/base.xml.in.h:596
-msgid "Romania"
-msgstr "Romania"
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Portuguès (Brasil, natiu per als teclats EUA)"
#: ../rules/base.xml.in.h:597
-msgid "Romanian keyboard with German letters"
-msgstr "Teclat romanès amb lletres alemanyes"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Portuguès (Brasil, natiu)"
#: ../rules/base.xml.in.h:598
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Teclat romanès amb lletres alemanyes, sense tecles mortes"
+msgid "Portuguese (Mac)"
+msgstr "Portuguès (Mac)"
#: ../rules/base.xml.in.h:599
-msgid "Rou"
-msgstr "Rou"
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Portuguès (Mac, tecles mortes de Sun)"
#: ../rules/base.xml.in.h:600
-msgid "Rupee on 4"
-msgstr "Rupia en el 2"
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Portuguès (Mac, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:601
-msgid "Rus"
-msgstr "Rus"
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Portuguès (natiu per a l'esperanto)"
#: ../rules/base.xml.in.h:602
-msgid "Russia"
-msgstr "Rússia"
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Portuguès (natiu per als teclats EUA)"
#: ../rules/base.xml.in.h:603
-msgid "Russian"
-msgstr "Rus"
+msgid "Portuguese (Nativo)"
+msgstr "Portuguès (natiu)"
#: ../rules/base.xml.in.h:604
-msgid "Russian phonetic"
-msgstr "Rus fonètic"
+msgid "Portuguese (Sun dead keys)"
+msgstr "Portuguès (tecles mortes de Sun)"
#: ../rules/base.xml.in.h:605
-msgid "Russian phonetic Dvorak"
-msgstr "Rus fonètic Dvorak"
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Portuguès (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:606
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Rus fonètic, sense tecles mortes"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:607
-msgid "Russian with Kazakh"
-msgstr "Rus amb Kazakh"
+msgid "PrtSc"
+msgstr "ImprPant"
#: ../rules/base.xml.in.h:608
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "Teclat SILVERCREST Multimedia Wireless"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Panjabi (Gurmukhi Jhelum)"
#: ../rules/base.xml.in.h:609
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Punjabi (Gurmukhi)"
+msgstr "Panjabi (Gurmukhi)"
#: ../rules/base.xml.in.h:610
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:611
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Right Alt"
+msgstr "Alt dreta"
#: ../rules/base.xml.in.h:612
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Right Alt (while pressed)"
+msgstr "Alt dreta (mentre està premuda)"
-#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr "SRB"
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Alt dreta selecciona el nivell 5è i activa el bloqueig de nivell 5è en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
#: ../rules/base.xml.in.h:614
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Alt dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
#: ../rules/base.xml.in.h:615
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Alt dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
#: ../rules/base.xml.in.h:616
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "La tecla Alt dreta mai selecciona el 3r nivell"
#: ../rules/base.xml.in.h:617
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Alt dreta, Maj+Alt dreta és la Multi_Key"
#: ../rules/base.xml.in.h:618
-msgid "Scroll Lock"
-msgstr "Bloq Despl"
+msgid "Right Ctrl"
+msgstr "Ctrl dreta"
#: ../rules/base.xml.in.h:619
-msgid "Secwepemctsin"
-msgstr "Secwepemctsin"
+msgid "Right Ctrl (while pressed)"
+msgstr "Ctrl dreta (mentre està premuda)"
#: ../rules/base.xml.in.h:620
-msgid "Semi-colon on third level"
-msgstr "Punt i coma al tercer nivell"
+msgid "Right Ctrl as Right Alt"
+msgstr "Ctrl dreta com a Alt dreta"
#: ../rules/base.xml.in.h:621
-msgid "Sen"
-msgstr "Sen"
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Ctrl dreta s'assigna a Menú"
#: ../rules/base.xml.in.h:622
-msgid "Senegal"
-msgstr "Senegal"
+msgid "Right Ctrl+Right Shift"
+msgstr "Ctrl dreta+Maj dreta"
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr "Sèrbia"
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "Maj dreta"
#: ../rules/base.xml.in.h:624
-msgid "Serbian"
-msgstr "Serbi"
+msgid "Right Win"
+msgstr "Win dreta"
#: ../rules/base.xml.in.h:625
-msgid "Serbo-Croatian"
-msgstr "Serbocroat"
+msgid "Right Win (while pressed)"
+msgstr "Win dreta (mentre està premuda)"
#: ../rules/base.xml.in.h:626
-msgid "Shift cancels Caps Lock"
-msgstr "Maj cancel·la Bloq Maj"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Win dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è"
#: ../rules/base.xml.in.h:627
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Maj no cancel·la Bloq Núm, en el seu lloc selecciona el 3r nivell"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Win dreta selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è, una pulsació allibera el bloqueig"
#: ../rules/base.xml.in.h:628
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Maj amb el teclat numèric funciona com al MS Windows"
+msgid "Romanian"
+msgstr "Romanès"
#: ../rules/base.xml.in.h:629
-msgid "Shift+Caps Lock"
-msgstr "Maj+Bloq Maj"
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Romanès (Tàtar de Crimea Dobruca-1 Q)"
#: ../rules/base.xml.in.h:630
-msgid "Simple"
-msgstr "Senzill"
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Romanès (Tàtar de Crimea Dobruca-2 Q)"
#: ../rules/base.xml.in.h:631
-msgid "Sindhi"
-msgstr "Sindhi"
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Romanès (Tàtar de Crimea Turc Alt-Q)"
#: ../rules/base.xml.in.h:632
-msgid "Slovakia"
-msgstr "Eslovàquia"
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Romanès (Tàtar de Crimea Turc F)"
#: ../rules/base.xml.in.h:633
-msgid "Slovenia"
-msgstr "Eslovènia"
+msgid "Romanian (WinKeys)"
+msgstr "Romanès (tecles Win)"
#: ../rules/base.xml.in.h:634
-msgid "South Africa"
-msgstr "Sud-àfrica"
+msgid "Romanian (cedilla)"
+msgstr "Romanès (ce trencada)"
#: ../rules/base.xml.in.h:635
-msgid "Southern Uzbek"
-msgstr "Uzbek del sud"
+msgid "Romanian (standard cedilla)"
+msgstr "Romanès (ce trencada estàndard)"
#: ../rules/base.xml.in.h:636
-msgid "Spain"
-msgstr "Espanya"
+msgid "Romanian (standard)"
+msgstr "Romanès (estàndard)"
#: ../rules/base.xml.in.h:637
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Tecles especials (Ctrl+Alt+&lt;tecla&gt;) gestionades en un servidor"
+msgid "Rupee on 4"
+msgstr "Rupia en el 4"
#: ../rules/base.xml.in.h:638
-msgid "Sri Lanka"
-msgstr "Sri Lanka"
+msgid "Russian"
+msgstr "Rus"
#: ../rules/base.xml.in.h:639
-msgid "Standard"
-msgstr "Estàndard"
+msgid "Russian (Bashkirian)"
+msgstr "Rus (Baixkir)"
#: ../rules/base.xml.in.h:640
-msgid "Standard (Cedilla)"
-msgstr "Estàndard (ce trencada)"
+msgid "Russian (Chuvash Latin)"
+msgstr "Rus (Chuvash llatí)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr "Rus (Chuvash)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:642
-msgid "Standard RSTU"
-msgstr "Estàndard RSTU"
+msgid "Russian (DOS)"
+msgstr "Rus (DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr "Rus (Geòrgia)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:644
-msgid "Standard RSTU on Russian layout"
-msgstr "Estàndard RSTU en una disposició russa"
+msgid "Russian (Germany, phonetic)"
+msgstr "Rus (alemany, fonètic)"
#: ../rules/base.xml.in.h:645
-msgid "Sun Type 5/6"
-msgstr "Sun Type 5/6"
+msgid "Russian (Kalmyk)"
+msgstr "Rus (Calmuc)"
#: ../rules/base.xml.in.h:646
-msgid "Sun dead keys"
-msgstr "Tecles mortes de Sun"
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Rus (Kazakhstan amb Kazakh)"
#: ../rules/base.xml.in.h:647
-msgid "Super Power Multimedia Keyboard"
-msgstr "Teclat Super Power Multimedia"
+msgid "Russian (Komi)"
+msgstr "Rus (Komi)"
#: ../rules/base.xml.in.h:648
-msgid "Svdvorak"
-msgstr "Svdvorak"
+msgid "Russian (Mari)"
+msgstr "Rus (Mari)"
#: ../rules/base.xml.in.h:649
-msgid "Svk"
-msgstr "Svk"
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Rus (Osset, tecles Win)"
#: ../rules/base.xml.in.h:650
-msgid "Svn"
-msgstr "Svn"
+msgid "Russian (Ossetian, legacy)"
+msgstr "Rus (Osset, antic)"
#: ../rules/base.xml.in.h:651
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Intercanvia Ctrl i Bloq Maj"
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Rus (Polònia, fonètic Dvorak)"
#: ../rules/base.xml.in.h:652
-msgid "Swap ESC and Caps Lock"
-msgstr "Intercanvia Esc i Bloq Maj"
+msgid "Russian (Serbian)"
+msgstr "Rus (Sèrbia)"
#: ../rules/base.xml.in.h:653
-msgid "Swe"
-msgstr "Swe"
+msgid "Russian (Sweden, phonetic)"
+msgstr "Rus (Suècia, fonètic)"
#: ../rules/base.xml.in.h:654
-msgid "Sweden"
-msgstr "Suècia"
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Rus (Suècia, fonètic, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:655
-msgid "Switzerland"
-msgstr "Suïssa"
+msgid "Russian (Tatar)"
+msgstr "Rus (Tàtar)"
#: ../rules/base.xml.in.h:656
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (tablet PC)"
+msgid "Russian (US, phonetic)"
+msgstr "Rus (US, fonètic)"
#: ../rules/base.xml.in.h:657
-msgid "Syr"
-msgstr "Syr"
+msgid "Russian (Udmurt)"
+msgstr "Rus (Udmurt)"
#: ../rules/base.xml.in.h:658
-msgid "Syria"
-msgstr "Síria"
+msgid "Russian (Yakut)"
+msgstr "Rus (Iacut)"
#: ../rules/base.xml.in.h:659
-msgid "Syriac"
-msgstr "Siri"
+msgid "Russian (legacy)"
+msgstr "Rus (antic)"
#: ../rules/base.xml.in.h:660
-msgid "Syriac phonetic"
-msgstr "Siri fonètic"
+msgid "Russian (phonetic WinKeys)"
+msgstr "Rus (fonètic tecles Win)"
#: ../rules/base.xml.in.h:661
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
+msgid "Russian (phonetic)"
+msgstr "Rus (fonètic)"
#: ../rules/base.xml.in.h:662
-msgid "Tajikistan"
-msgstr "Tadjikistan"
+msgid "Russian (typewriter)"
+msgstr "Rus (màquina d'escriure)"
#: ../rules/base.xml.in.h:663
-msgid "Tamil"
-msgstr "Tàmil"
+msgid "Russian (typewriter, legacy)"
+msgstr "Rus (màquina d'escriure, antic)"
#: ../rules/base.xml.in.h:664
-msgid "Tamil Keyboard with Numerals"
-msgstr "Teclat Tàmil amb numerals"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "Teclat SILVERCREST Multimedia Wireless"
#: ../rules/base.xml.in.h:665
-msgid "Tamil TAB Typewriter"
-msgstr "Tàmil TAB Typewriter"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:666
-msgid "Tamil TSCII Typewriter"
-msgstr "Tàmil TSCII Typewriter"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:667
-msgid "Tamil Unicode"
-msgstr "Tàmil Unicode"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:668
-msgid "Tanzania"
-msgstr "Tanzània"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:669
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:670
-msgid "Tatar"
-msgstr "Tàtar"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:671
-msgid "Telugu"
-msgstr "Telugu"
+msgid "Saisiyat (Taiwan)"
+msgstr "Saisiyat (Taiwan)"
#: ../rules/base.xml.in.h:672
-msgid "Tha"
-msgstr "Tha"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:673
-msgid "Thailand"
-msgstr "Tailàndia"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:674
-msgid "Tibetan"
-msgstr "Tibetà"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
#: ../rules/base.xml.in.h:675
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Tibetà (amb nombres ASCII)"
+msgid "Scroll Lock"
+msgstr "Bloq Despl"
#: ../rules/base.xml.in.h:676
-msgid "Tifinagh"
-msgstr "Tifinagh"
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
#: ../rules/base.xml.in.h:677
-msgid "Tifinagh alternative"
-msgstr "Tifinagh alternativa"
+msgid "Semi-colon on third level"
+msgstr "Punt i coma al tercer nivell"
#: ../rules/base.xml.in.h:678
-msgid "Tifinagh alternative phonetic"
-msgstr "Tifinagh fonètic alternativa"
+msgid "Serbian"
+msgstr "Serbi"
#: ../rules/base.xml.in.h:679
-msgid "Tifinagh extended"
-msgstr "Tifinagh ampliada"
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Serbi (llatí Unicode qwerty)"
#: ../rules/base.xml.in.h:680
-msgid "Tifinagh extended phonetic"
-msgstr "Tifinagh fonètic ampliada"
+msgid "Serbian (Latin Unicode)"
+msgstr "Serbi (llatí Unicode)"
#: ../rules/base.xml.in.h:681
-msgid "Tifinagh phonetic"
-msgstr "Tifinagh fonètica"
+msgid "Serbian (Latin qwerty)"
+msgstr "Serbi (llatí qwerty)"
#: ../rules/base.xml.in.h:682
-msgid "Tilde (~) variant"
-msgstr "Variant titlla (~)"
+msgid "Serbian (Latin with guillemets)"
+msgstr "Serbi (llatí amb cometes angulars)"
#: ../rules/base.xml.in.h:683
-msgid "Tjk"
-msgstr "Tjk"
+msgid "Serbian (Latin)"
+msgstr "Serbi (llatí)"
#: ../rules/base.xml.in.h:684
-msgid "Tkm"
-msgstr "Tkm"
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Serbi (Rutè Pannònic homofònic"
#: ../rules/base.xml.in.h:685
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "A la tecla corresponent en un teclat Dvorak."
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Serbi (Z i ZHE intercanviades)"
#: ../rules/base.xml.in.h:686
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "A la tecla corresponent en un teclat Qwerty."
+msgid "Serbian (with guillemets)"
+msgstr "Serbi (llatí amb cometes angulars)"
#: ../rules/base.xml.in.h:687
-msgid "Toggle PointerKeys with Shift + NumLock."
-msgstr "Commuta les tecles de cursor amb Maj + BloqNum."
+msgid "Serbo-Croatian (US)"
+msgstr "Serbocroat (US)"
#: ../rules/base.xml.in.h:688
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
+msgid "Shift cancels Caps Lock"
+msgstr "Maj cancel·la Bloq Maj"
#: ../rules/base.xml.in.h:689
-msgid "Traditional phonetic"
-msgstr "Fonètic tradicional"
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Maj no cancel·la Bloq Núm, en el seu lloc selecciona el 3r nivell"
#: ../rules/base.xml.in.h:690
-msgid "Trust Direct Access Keyboard"
-msgstr "Teclat Trust Direct Access"
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Maj amb el teclat numèric funciona com al MS Windows"
#: ../rules/base.xml.in.h:691
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+msgid "Shift+Caps Lock"
+msgstr "Maj+Bloq Maj"
#: ../rules/base.xml.in.h:692
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Teclat Trust Wireless Classic"
+msgid "Sindhi"
+msgstr "Sindhi"
#: ../rules/base.xml.in.h:693
-msgid "Tur"
-msgstr "Tur"
+msgid "Sinhala"
+msgstr "Singalès"
#: ../rules/base.xml.in.h:694
-msgid "Turkey"
-msgstr "Turquia"
+msgid "Slovak"
+msgstr "Eslovac"
#: ../rules/base.xml.in.h:695
-msgid "Turkmenistan"
-msgstr "Turkmenistan"
+msgid "Slovak (extended Backslash)"
+msgstr "Eslovac (barra inversa ampliada)"
#: ../rules/base.xml.in.h:696
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
+msgid "Slovak (qwerty)"
+msgstr "Eslovac (qwerty)"
#: ../rules/base.xml.in.h:697
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Eslovac (qwerty, barra inversa ampliada)"
#: ../rules/base.xml.in.h:698
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
+msgid "Slovene"
+msgstr "Eslovè"
#: ../rules/base.xml.in.h:699
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (mode 102/105:EU)"
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Eslovè (teclat US amb lletres eslovenes)"
#: ../rules/base.xml.in.h:700
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (mode 106:JP)"
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Eslovè (usa cometes angulars per les cometes)"
#: ../rules/base.xml.in.h:701
-msgid "Typewriter"
-msgstr "Màquina d'escriure"
+msgid "Spanish"
+msgstr "Espanyol"
#: ../rules/base.xml.in.h:702
-msgid "Typewriter, legacy"
-msgstr "Màquina d'escriure, llegat"
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Espanyol (variant asturiana amb H punt baix i L amb punt)"
#: ../rules/base.xml.in.h:703
-msgid "Tza"
-msgstr "Tza"
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Espanyol (variant catalana amb L amb punt volat)"
#: ../rules/base.xml.in.h:704
-msgid "UCW layout (accented letters only)"
-msgstr "Disposició UCW (només lletres accentuades)"
+msgid "Spanish (Dvorak)"
+msgstr "Espanyol (Dvorak)"
#: ../rules/base.xml.in.h:705
-msgid "US Dvorak with CZ UCW support"
-msgstr "Dvorak EUA que permet CZ UCW"
+msgid "Spanish (Latin American)"
+msgstr "Espanyol (llatinoamericà)"
#: ../rules/base.xml.in.h:706
-msgid "US keyboard with Bosnian digraphs"
-msgstr "Teclat US amb dígrafs bosnians"
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Espanyol (llatinoamericà, elimina les tecles mortes)"
#: ../rules/base.xml.in.h:707
-msgid "US keyboard with Bosnian letters"
-msgstr "Teclat US amb lletres bosnianes"
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Espanyol (llatinoamericà, inclou la titlla morta)"
#: ../rules/base.xml.in.h:708
-msgid "US keyboard with Croatian digraphs"
-msgstr "Teclat US amb dígrafs croats"
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Espanyol (llatinoamericà, tecles mortes de Sun)"
#: ../rules/base.xml.in.h:709
-msgid "US keyboard with Croatian letters"
-msgstr "Teclat US amb lletres croates"
+msgid "Spanish (Mac)"
+msgstr "Espanyol (Mac)"
#: ../rules/base.xml.in.h:710
-msgid "US keyboard with Estonian letters"
-msgstr "Teclat US amb lletres estonianes"
+msgid "Spanish (Sun dead keys)"
+msgstr "Espanyol (tecles mortes de Sun)"
#: ../rules/base.xml.in.h:711
-msgid "US keyboard with Italian letters"
-msgstr "Teclat US amb lletres italianes"
+msgid "Spanish (eliminate dead keys)"
+msgstr "Espanyol (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:712
-msgid "US keyboard with Lithuanian letters"
-msgstr "Teclat US amb dígrafs lituans"
+msgid "Spanish (include dead tilde)"
+msgstr "Espanyol (inclou la titlla morta)"
#: ../rules/base.xml.in.h:713
-msgid "US keyboard with Slovenian letters"
-msgstr "Teclat US amb lletres eslovenes"
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Tecles especials (Ctrl+Alt+&lt;tecla&gt;) gestionades en un servidor"
-#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr "EUA"
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Type 5/6"
#: ../rules/base.xml.in.h:715
-msgid "Udmurt"
-msgstr "Udmurt"
+msgid "Super Power Multimedia Keyboard"
+msgstr "Teclat Super Power Multimedia"
#: ../rules/base.xml.in.h:716
-msgid "Ukr"
-msgstr "Ukr"
+msgid "Swahili (Kenya)"
+msgstr "Suahili (Kenya)"
#: ../rules/base.xml.in.h:717
-msgid "Ukraine"
-msgstr "Ucraïna"
+msgid "Swahili (Tanzania)"
+msgstr "Suahili (Tanzània)"
#: ../rules/base.xml.in.h:718
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Addicions Unicode (fletxes i operadors matemàtics)"
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Intercanvia Ctrl i Bloq Maj"
#: ../rules/base.xml.in.h:719
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Addicions Unicode (fletxes i operadors matemàtics). Els operadors matemàtics al nivell predeterminat"
+msgid "Swap ESC and Caps Lock"
+msgstr "Intercanvia Esc i Bloq Maj"
#: ../rules/base.xml.in.h:720
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+msgid "Swedish"
+msgstr "Suec"
#: ../rules/base.xml.in.h:721
-msgid "United Kingdom"
-msgstr "Regne Unit"
+msgid "Swedish (Dvorak)"
+msgstr "Suec (Dvorak)"
#: ../rules/base.xml.in.h:722
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+msgid "Swedish (Mac)"
+msgstr "Suec (Mac)"
#: ../rules/base.xml.in.h:723
-msgid "Urdu, Alternative phonetic"
-msgstr "Urdú, fonètic alternatiu"
+msgid "Swedish (Svdvorak)"
+msgstr "Suec (Svdvorak)"
#: ../rules/base.xml.in.h:724
-msgid "Urdu, Phonetic"
-msgstr "Urdú, fonètic"
+msgid "Swedish (eliminate dead keys)"
+msgstr "Suec (elimina les tecles mortes)"
#: ../rules/base.xml.in.h:725
-msgid "Urdu, Winkeys"
-msgstr "Urdú, tecles Win"
+msgid "Swedish (northern Saami)"
+msgstr "Suec (Sami del nord)"
#: ../rules/base.xml.in.h:726
-msgid "Use Bosnian digraphs"
-msgstr "Usa dígrafs bosnians"
+msgid "Swiss"
+msgstr "Suís"
#: ../rules/base.xml.in.h:727
-msgid "Use Croatian digraphs"
-msgstr "Usa dígrafs croats"
+msgid "Swiss (legacy)"
+msgstr "Suís (antic)"
#: ../rules/base.xml.in.h:728
-msgid "Use guillemets for quotes"
-msgstr "Usa cometes angulars per les cometes"
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet PC)"
#: ../rules/base.xml.in.h:729
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Usa el LED del teclat per a mostrar la disposició alternativa"
+msgid "Syriac"
+msgstr "Siri"
#: ../rules/base.xml.in.h:730
-msgid "Using space key to input non-breakable space character"
-msgstr "Usa la tecla d'espai per a introduir un caràcter d'espai sense salt"
+msgid "Syriac (phonetic)"
+msgstr "Siríac (fonètic)"
#: ../rules/base.xml.in.h:731
-msgid "Usual space at any level"
-msgstr "Espai normal en qualsevol nivell"
+msgid "Taiwanese"
+msgstr "Taiwanès"
#: ../rules/base.xml.in.h:732
-msgid "Uzb"
-msgstr "Uzb"
+msgid "Taiwanese (indigenous)"
+msgstr "Taiwanès (indígena)"
#: ../rules/base.xml.in.h:733
-msgid "Uzbekistan"
-msgstr "Uzbekistan"
+msgid "Tajik"
+msgstr "Tadjik"
#: ../rules/base.xml.in.h:734
-msgid "Vietnam"
-msgstr "Vietnam"
+msgid "Tajik (legacy)"
+msgstr "Tadjik (antic)"
#: ../rules/base.xml.in.h:735
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "Teclat ViewSonic KU-306 Internet"
+msgid "Tamil"
+msgstr "Tàmil"
#: ../rules/base.xml.in.h:736
-msgid "Vnm"
-msgstr "Vnm"
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Tàmil (Sri Lanka, tipus d'escriptura TAB)"
#: ../rules/base.xml.in.h:737
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Teclat numèric Wang 724 amb addicions Unicode (fletxes i operadors matemàtics)"
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Tàmil (Sri Lanka, Unicode)"
#: ../rules/base.xml.in.h:738
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Teclat numèric Wang 724 amb addicions Unicode (fletxes i operadors matemàtics). Els operadors matemàtics en el nivell per defecte"
+msgid "Tamil (TAB typewriter)"
+msgstr "Tàmil (tipus d'escriptura TAB)"
#: ../rules/base.xml.in.h:739
-msgid "Wang model 724 azerty"
-msgstr "Wang model 724 azerty"
+msgid "Tamil (TSCII typewriter)"
+msgstr "Tàmil (tipus d'escriptura TSCII)"
#: ../rules/base.xml.in.h:740
-msgid "Western"
-msgstr "Occidental"
+msgid "Tamil (Unicode)"
+msgstr "Tàmil (Unicode)"
#: ../rules/base.xml.in.h:741
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
+msgid "Tamil (keyboard with numerals)"
+msgstr "Tàmil (teclat amb nombres)"
#: ../rules/base.xml.in.h:742
-msgid "Winkeys"
-msgstr "Tecles Win"
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
#: ../rules/base.xml.in.h:743
-msgid "With &lt;\\|&gt; key"
-msgstr "Amb la tecla &lt;\\|&gt;"
+msgid "Telugu"
+msgstr "Telugu"
#: ../rules/base.xml.in.h:744
-msgid "With EuroSign on 5"
-msgstr "Amb el signe de l'euro al 5"
+msgid "Thai"
+msgstr "Tai"
#: ../rules/base.xml.in.h:745
-msgid "With guillemets"
-msgstr "Amb cometes angulars"
+msgid "Thai (Pattachote)"
+msgstr "Tai (Pattachote)"
#: ../rules/base.xml.in.h:746
-msgid "Yahoo! Internet Keyboard"
-msgstr "Teclat Yahoo! Internet"
+msgid "Thai (TIS-820.2538)"
+msgstr "Tai (TIS-820.2538)"
#: ../rules/base.xml.in.h:747
-msgid "Yakut"
-msgstr "Iacut"
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "A la tecla corresponent en un teclat Dvorak."
#: ../rules/base.xml.in.h:748
-msgid "Yoruba"
-msgstr "Ioruba"
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "A la tecla corresponent en un teclat Qwerty."
#: ../rules/base.xml.in.h:749
-msgid "Z and ZHE swapped"
-msgstr "Z i ZHE intercanviades"
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Commuta les tecles de cursor amb Maj + BloqNum."
#: ../rules/base.xml.in.h:750
-msgid "Zaf"
-msgstr "Zaf"
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
#: ../rules/base.xml.in.h:751
-msgid "Zero-width non-joiner character at second level"
-msgstr "Caràcter separador d'amplada zero al nivell segon"
+msgid "Trust Direct Access Keyboard"
+msgstr "Teclat Trust Direct Access"
#: ../rules/base.xml.in.h:752
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
-msgstr "Caràcter separador d'amplada zero al nivell segon, i un caràcter d'espai sense salt al nivell tercer"
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
#: ../rules/base.xml.in.h:753
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
-msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i res al nivell quart"
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Teclat Trust Wireless Classic"
#: ../rules/base.xml.in.h:754
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
-msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i un caràcter d'espai fi sense salt al nivell quart"
+msgid "Tswana"
+msgstr "Tswana"
#: ../rules/base.xml.in.h:755
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
-msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i un enllaç d'amplada zero al nivell quart"
+msgid "Turkish"
+msgstr "Turc"
#: ../rules/base.xml.in.h:756
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
-msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'enllaç d'amplada zero al nivell tercer"
+msgid "Turkish (Alt-Q)"
+msgstr "Turc (Alt-Q)"
#: ../rules/base.xml.in.h:757
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
-msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'enllaç d'amplada zero al nivell tercer, i un caràcter d'espai sense salt al nivell quart"
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Turc (Tàtar de Crimea Turc Alt-Q)"
#: ../rules/base.xml.in.h:758
-msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
-msgstr "Caràcter separador d'amplada zero al nivell tercer, un enllaç d'amplada zero al nivell quart"
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Turc (Tàtar de Crimea Turc F)"
#: ../rules/base.xml.in.h:759
-msgid "azerty"
-msgstr "azerty"
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Turc (Tàtar de Crimea Turc Q)"
#: ../rules/base.xml.in.h:760
-msgid "azerty/digits"
-msgstr "azerty/dígits"
+msgid "Turkish (F)"
+msgstr "Turc (F)"
#: ../rules/base.xml.in.h:761
-msgid "digits"
-msgstr "dígits"
+msgid "Turkish (Sun dead keys)"
+msgstr "Turc (tecles mortes de Sun)"
#: ../rules/base.xml.in.h:762
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "punt i coma i cometa desplaçats (obsolet)"
+msgid "Turkish (international with dead keys)"
+msgstr "Turc (internacional amb tecles mortes)"
#: ../rules/base.xml.in.h:763
-msgid "lyx"
-msgstr "lyx"
+msgid "Turkmen"
+msgstr "Turcman"
#: ../rules/base.xml.in.h:764
-msgid "qwerty"
-msgstr "qwerty"
+msgid "Turkmen (Alt-Q)"
+msgstr "Turcman (Alt-Q)"
#: ../rules/base.xml.in.h:765
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, barra inversa ampliada"
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
#: ../rules/base.xml.in.h:766
-msgid "qwerty/digits"
-msgstr "qwerty/dígits"
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
#: ../rules/base.xml.in.h:767
-msgid "qwertz"
-msgstr "qwertz"
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (mode 102/105:EU)"
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (mode 106:JP)"
+
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Ucraïnès"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Ucraïnès (Tàtar de Crimea Turc Alt-Q)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Ucraïnès (Tàtar de Crimea Turc F)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Ucraïnès (Tàtar de Crimea Turc Q)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Ucraïnès (tecles Win)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Ucraïnès (homofònic)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Ucraïnès (antic)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Ucraïnès (fonètic)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Ucraïnès (estàndard RSTU en una disposició russa)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Ucraïnès (estàndard RSTU)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Ucraïnès (màquina d'escriure)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Addicions Unicode (fletxes i operadors matemàtics)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Addicions Unicode (fletxes i operadors matemàtics). Els operadors matemàtics al nivell per defecte"
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Urdú (Pakistan)"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Urdú (Pakistan, CRULP)"
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Urdú (Pakistan, NLA)"
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Urdú (tecles Win)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Urdú (fonètic alternatiu)"
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Urdú (fonètic)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Usa el LED del teclat per a mostrar la disposició alternativa"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Usa la tecla d'espai per a introduir un caràcter d'espai sense salt"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Espai normal en qualsevol nivell"
+
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Uzbek"
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Uzbek (Afganistan)"
+
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Uzbek (Afganistan, OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Uzbek (Tàtar de Crimea Turc Alt-Q)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Uzbek (Tàtar de Crimea Turc F)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Uzbek (Tàtar de Crimea Turc Q)"
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Uzbek (llatí)"
+
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "Teclat ViewSonic KU-306 Internet"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Teclat numèric Wang 724 amb addicions Unicode (fletxes i operadors matemàtics)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Teclat numèric Wang 724 amb addicions Unicode (fletxes i operadors matemàtics). Els operadors matemàtics en el nivell per defecte"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Wolof"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Teclat Yahoo! Internet"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Ioruba"
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "Caràcter separador d'amplada zero al nivell segon"
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Caràcter separador d'amplada zero al nivell segon, i un caràcter d'espai sense salt al nivell tercer"
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i res al nivell quart"
+
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i un caràcter d'espai fi sense salt al nivell quart"
+
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'espai sense salt al nivell tercer, i un enllaç d'amplada zero al nivell quart"
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'enllaç d'amplada zero al nivell tercer"
+
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Caràcter separador d'amplada zero al nivell segon, un caràcter d'enllaç d'amplada zero al nivell tercer, i un caràcter d'espai sense salt al nivell quart"
+
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Caràcter separador d'amplada zero al nivell tercer, un enllaç d'amplada zero al nivell quart"
+
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
+
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
+
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
+
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
+
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
#: ../rules/base.extras.xml.in.h:1
msgid "APL"
msgstr "APL"
#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Atsina"
+msgid "Iran"
+msgstr "Iran"
#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr "Avestan"
+msgid "Iran - Avestan"
+msgstr "Iran - Avèstic"
#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr "Combinació d'accents en lloc de tecles mortes"
+msgid "Lithuania"
+msgstr "Lituània"
#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr "Couer D'alene Salish"
+msgid "Lithuania - Dvorak"
+msgstr "Lituània - Dvorak"
#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr "Internacional (combinació Unicode AltGr)"
+msgid "Ltu"
+msgstr "Ltu"
#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "Internacional (combinació Unicode AltGr, alternativa)"
+msgid "Romania"
+msgstr "Romania"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Romania - Ergonomic Touchtype"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rou"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Rússia"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Sèrbia"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Sèrbia - Combinació d'accents en lloc de tecles mortes"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "EUA"
+
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "EUA - Atsina"
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "EUA - Couer D'alene Salish"
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "EUA - Internacional (combinació Unicode AltGr)"
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "EUA - Internacional (combinació Unicode AltGr, alternativa)"
+
+#~ msgid "(F)"
+#~ msgstr "(F)"
+
+#~ msgid "Alb"
+#~ msgstr "Alb"
+
+#~ msgid "Alt-Q"
+#~ msgstr "Alt-Q"
+
+#~ msgid "Alternative"
+#~ msgstr "Alternativa"
+
+#~ msgid "Alternative Phonetic"
+#~ msgstr "Fonètic alternativa"
+
+#~ msgid "Alternative international"
+#~ msgstr "Internacional alternativa"
+
+#~ msgid "And"
+#~ msgstr "And"
+
+#~ msgid "Andorra"
+#~ msgstr "Andorra"
+
+#~ msgid "Ara"
+#~ msgstr "Ara"
+
+#~ msgid "Arm"
+#~ msgstr "Arm"
+
+#~ msgid "Aut"
+#~ msgstr "Aut"
+
+#~ msgid "Aze"
+#~ msgstr "Aze"
+
+#~ msgid "Bangladesh"
+#~ msgstr "Bangladesh"
+
+#~ msgid "Bel"
+#~ msgstr "Bel"
+
+#~ msgid "Bgd"
+#~ msgstr "Bgd"
+
+#~ msgid "Bhutan"
+#~ msgstr "Bhutan"
+
+#~ msgid "Bih"
+#~ msgstr "Bih"
+
+#~ msgid "Blr"
+#~ msgstr "Blr"
+
+#~ msgid "Bosnia and Herzegovina"
+#~ msgstr "Bòsnia i Hercegovina"
+
+#~ msgid "Bra"
+#~ msgstr "Bra"
+
+#~ msgid "Brazil"
+#~ msgstr "Brasil"
+
+#~ msgid "Breton"
+#~ msgstr "Bretó"
+
+#~ msgid "Bwa"
+#~ msgstr "Bwa"
+
+#~ msgid "COD"
+#~ msgstr "COD"
+
+#~ msgid "CRULP"
+#~ msgstr "CRULP"
+
+#~ msgid "Canada"
+#~ msgstr "Canadà"
+
+#~ msgid "Cedilla"
+#~ msgstr "Trencat"
+
+#~ msgid "Chn"
+#~ msgstr "Chn"
+
+#~ msgid "Chuvash"
+#~ msgstr "Chuvash"
+
+#~ msgid "Classic"
+#~ msgstr "Clàssic"
+
+#~ msgid "Colemak"
+#~ msgstr "Colemak"
+
+#~ msgid "Cyrillic"
+#~ msgstr "Ciríl·lic"
+
+#~ msgid "Cze"
+#~ msgstr "Cze"
+
+#~ msgid "DOS"
+#~ msgstr "DOS"
+
+#~ msgid "Dead acute"
+#~ msgstr "Accent mort"
+
+#~ msgid "Denmark"
+#~ msgstr "Dinamarca"
+
+#~ msgid "Deu"
+#~ msgstr "Deu"
+
+#~ msgid "Dnk"
+#~ msgstr "Dnk"
+
+#~ msgid "Dvorak"
+#~ msgstr "Dvorak"
+
+#~ msgid "Eastern"
+#~ msgstr "Oriental"
+
+#~ msgid "Epo"
+#~ msgstr "Epo"
+
+#~ msgid "Ergonomic"
+#~ msgstr "Ergonòmic"
+
+#~ msgid "Est"
+#~ msgstr "Est"
+
+#~ msgid "Ethiopia"
+#~ msgstr "Etiòpia"
+
+#~ msgid "Extended"
+#~ msgstr "Ampliat"
+
+#~ msgid "Finland"
+#~ msgstr "Finlàndia"
+
+#~ msgid "Fra"
+#~ msgstr "Fra"
+
+#~ msgid "France"
+#~ msgstr "França"
+
+#~ msgid "GILLBT"
+#~ msgstr "GILLBT"
+
+#~ msgid "Georgia"
+#~ msgstr "Geòrgia"
+
+#~ msgid "Ghana"
+#~ msgstr "Ghana"
+
+#~ msgid "Gin"
+#~ msgstr "Gin"
+
+#~ msgid "Grc"
+#~ msgstr "Grc"
+
+#~ msgid "Guinea"
+#~ msgstr "Guinea"
+
+#~ msgid "Homophonic"
+#~ msgstr "Homofònic"
+
+#~ msgid "Hrv"
+#~ msgstr "Hrv"
+
+#~ msgid "Hun"
+#~ msgstr "Hun"
+
+#~ msgid "Ind"
+#~ msgstr "Ind"
+
+#~ msgid "Ireland"
+#~ msgstr "Irlanda"
+
+#~ msgid "Irl"
+#~ msgstr "Irl"
+
+#~ msgid "Irn"
+#~ msgstr "Irn"
+
+#~ msgid "Israel"
+#~ msgstr "Israel"
+
+#~ msgid "Jpn"
+#~ msgstr "Jpn"
+
+#~ msgid "Kalmyk"
+#~ msgstr "Calmuc"
+
+#~ msgid "Kana"
+#~ msgstr "Kana"
+
+#~ msgid "Kana 86"
+#~ msgstr "Kana 86"
+
+#~ msgid "Kenya"
+#~ msgstr "Kenya"
+
+#~ msgid "Kgz"
+#~ msgstr "Kgz"
+
+#~ msgid "Khm"
+#~ msgstr "Khm"
+
+#~ msgid "Korea, Republic of"
+#~ msgstr "Corea, República de"
+
+#~ msgid "Ktunaxa"
+#~ msgstr "Kutenai (Ktunaxa)"
+
+#~ msgid "LEKP"
+#~ msgstr "LEKP"
+
+#~ msgid "LEKPa"
+#~ msgstr "LEKPa"
+
+#~ msgid "Laos"
+#~ msgstr "Laos"
+
+#~ msgid "Latin"
+#~ msgstr "Llatí"
+
+#~ msgid "Left hand"
+#~ msgstr "Esquerrà"
+
+#~ msgid "Lva"
+#~ msgstr "Lva"
+
+#~ msgid "MESS"
+#~ msgstr "MESS"
+
+#~ msgid "MNE"
+#~ msgstr "MNE"
+
+#~ msgid "Macintosh (International)"
+#~ msgstr "Macintosh (Internacional)"
+
+#~ msgid "Maldives"
+#~ msgstr "Maldives"
+
+#~ msgid "Mali"
+#~ msgstr "Mali"
+
+#~ msgid "Mao"
+#~ msgstr "Mao"
+
+#~ msgid "Maori"
+#~ msgstr "Maori"
+
+#~ msgid "Mkd"
+#~ msgstr "Mkd"
+
+#~ msgid "Mli"
+#~ msgstr "Mli"
+
+#~ msgid "Mmr"
+#~ msgstr "Mmr"
+
+#~ msgid "Mng"
+#~ msgstr "Mng"
+
+#~ msgid "Myanmar"
+#~ msgstr "Myanmar"
+
+#~ msgid "NLA"
+#~ msgstr "NLA"
+
+#~ msgid "Nativo"
+#~ msgstr "Nativo"
+
+#~ msgid "Neo 2"
+#~ msgstr "Neo 2"
+
+#~ msgid "Netherlands"
+#~ msgstr "Països Baixos"
+
+#~ msgid "Nigeria"
+#~ msgstr "Nigèria"
+
+#~ msgid "Nld"
+#~ msgstr "Nld"
+
+#~ msgid "Nor"
+#~ msgstr "Nor"
+
+#~ msgid "Norway"
+#~ msgstr "Noruega"
+
+#~ msgid "OLPC Dari"
+#~ msgstr "OLPC Dari"
+
+#~ msgid "OLPC Pashto"
+#~ msgstr "OLPC Paixtu"
+
+#~ msgid "OLPC Southern Uzbek"
+#~ msgstr "OLPC Uzbek del sud"
+
+#~ msgid "Occitan"
+#~ msgstr "Occità"
+
+#~ msgid "Ogham"
+#~ msgstr "Ogham"
+
+#~ msgid "Ossetian"
+#~ msgstr "Osset"
+
+#~ msgid "Phonetic"
+#~ msgstr "Fonètic"
+
+#~ msgid "Phonetic Winkeys"
+#~ msgstr "Tecles Win fonètiques"
+
+#~ msgid "Pol"
+#~ msgstr "Pol"
+
+#~ msgid "Poland"
+#~ msgstr "Polònia"
+
+#~ msgid "Probhat"
+#~ msgstr "Probhat"
+
+#~ msgid "Prt"
+#~ msgstr "Prt"
+
+#~ msgid "SRB"
+#~ msgstr "SRB"
+
+#~ msgid "Sen"
+#~ msgstr "Sen"
+
+#~ msgid "Senegal"
+#~ msgstr "Senegal"
+
+#~ msgid "Simple"
+#~ msgstr "Senzill"
+
+#~ msgid "Southern Uzbek"
+#~ msgstr "Uzbek del sud"
+
+#~ msgid "Spain"
+#~ msgstr "Espanya"
+
+#~ msgid "Sri Lanka"
+#~ msgstr "Sri Lanka"
+
+#~ msgid "Standard"
+#~ msgstr "Estàndard"
+
+#~ msgid "Svk"
+#~ msgstr "Svk"
+
+#~ msgid "Svn"
+#~ msgstr "Svn"
+
+#~ msgid "Swe"
+#~ msgstr "Swe"
+
+#~ msgid "Syria"
+#~ msgstr "Síria"
+
+#~ msgid "Tatar"
+#~ msgstr "Tàtar"
+
+#~ msgid "Tha"
+#~ msgstr "Tha"
+
+#~ msgid "Tibetan"
+#~ msgstr "Tibetà"
+
+#~ msgid "Tifinagh"
+#~ msgstr "Tifinagh"
+
+#~ msgid "Tjk"
+#~ msgstr "Tjk"
+
+#~ msgid "Typewriter"
+#~ msgstr "Màquina d'escriure"
+
+#~ msgid "Tza"
+#~ msgstr "Tza"
+
+#~ msgid "Udmurt"
+#~ msgstr "Udmurt"
+
+#~ msgid "Ukr"
+#~ msgstr "Ukr"
+
+#~ msgid "United Kingdom"
+#~ msgstr "Regne Unit"
+
+#~ msgid "Uzb"
+#~ msgstr "Uzb"
+
+#~ msgid "Vnm"
+#~ msgstr "Vnm"
+
+#~ msgid "Western"
+#~ msgstr "Occidental"
+
+#~ msgid "With EuroSign on 5"
+#~ msgstr "Amb el signe de l'euro al 5"
+
+#~ msgid "With guillemets"
+#~ msgstr "Amb cometes angulars"
+
+#~ msgid "Zaf"
+#~ msgstr "Zaf"
+
+#~ msgid "azerty"
+#~ msgstr "azerty"
+
+#~ msgid "digits"
+#~ msgstr "dígits"
+
+#~ msgid "lyx"
+#~ msgstr "lyx"
+
+#~ msgid "qwertz"
+#~ msgstr "qwertz"
#~ msgid "2"
#~ msgstr "2"
@@ -3123,9 +4201,6 @@ msgstr "Internacional (combinació Unicode AltGr, alternativa)"
#~ msgid "ACPI Standard"
#~ msgstr "ACPI estàndard"
-#~ msgid "Bhu"
-#~ msgstr "Bhu"
-
#~ msgid "DRC"
#~ msgstr "DRC"
diff --git a/xorg-server/xkeyboard-config/po/da.po b/xorg-server/xkeyboard-config/po/da.po
index b555b23ee..d4300acea 100644
--- a/xorg-server/xkeyboard-config/po/da.po
+++ b/xorg-server/xkeyboard-config/po/da.po
@@ -4,6 +4,7 @@
# Ole Laursen <olau@hardworking.dk>, 2003.
# Joe Hansen <joedalton2@yahoo.dk>, 2008, 2009, 2010, 2011.
# Korrekturlæsning "Lars Christian Jensen" <larschrjensen@gmail.com>, 2010.
+# Korrekturlæsning "Ask Hjorth Larsen" <asklarsen@gmail.com>, 2011.
#
# Backspace = rettelsestast
# caps lock = caps lock (kunne nok også være lås skift)
@@ -30,12 +31,13 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.1-pre1\n"
+"Project-Id-Version: xkeyboard-config-2.1.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2011-01-12 00:16+0000\n"
-"PO-Revision-Date: 2011-01-23 23:06+0100\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-04-01 23:06+0100\n"
"Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n"
"Language-Team: Danish <dansk@dansk-gruppen.dk>\n"
+"Language: da\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -45,3010 +47,3250 @@ msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Mindre end/Større end&gt;"
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Mindre end/Større end&gt; vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Mindre end/Større end&gt; (vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger)"
#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Mindre end/Større end&gt; vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Mindre end/Større end&gt; vælger femte niveau og aktiverer niveau 5-lås når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr "(F)"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Mindre end/Større end&gt; vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr "(Forældet) Alternativ"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Mindre end/Større end&gt; vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(Forældet) Alternativ, Sun døde taster"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(Forældet) Alternativ, slå døde taster fra"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr "101/104 tastkompatibel"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
+# ATM = hæveautomat, måske skal det oversættes.
#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/komma/Døde taster"
+msgid "ATM/phone-style"
+msgstr "ATM/telefonstil"
#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/komma/Slå døde taster fra"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/punktum/Døde taster"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/punktum/Slå døde taster fra"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/komma/Døde taster"
+msgid "Acer Laptop"
+msgstr "Acer bærbar"
#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwertz/komma/Slå døde taster fra"
+msgid "Add the standard behavior to Menu key"
+msgstr "Tilføj standardopførslen til menutasten"
#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/punktum/Døde taster"
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Tilføjelse af esperanto accent circonflexe (supersigno)"
#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/punktum/Slå døde taster fra"
+msgid "Adding currency signs to certain keys"
+msgstr "Tilføjelse af valutategn til bestemte taster"
#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/komma/Døde taster"
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/komma/Slå døde taster fra"
+msgid "Afg"
+msgstr "Afg"
#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/punktum/Døde taster"
+msgid "Afghani"
+msgstr "Afghansk"
#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/punktum/Slå døde taster fra"
+msgid "Akan"
+msgstr "Akan"
#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/komma/Døde taster"
+msgid "Albanian"
+msgstr "Albansk"
#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/komma/Slå døde taster fra"
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt og Meta er på Alt-tasterne"
#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/punktum/Døde taster"
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt ligger på den højre Win-tast og Super på Menu"
#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/punktum/Slå døde taster fra"
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
#: ../rules/base.xml.in.h:25
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
#: ../rules/base.xml.in.h:26
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Alt+Shift"
+msgstr "Alt+Skift"
#: ../rules/base.xml.in.h:27
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
+msgid "Alt+Space"
+msgstr "Alt+Mellemrum"
-# ATM = hæveautomat, måske skal det oversættes.
#: ../rules/base.xml.in.h:28
-msgid "ATM/phone-style"
-msgstr "ATM/telefonstil"
+msgid "Alt/Win key behavior"
+msgstr "Alt/Win-tasteopførsel"
+# http://da.wikipedia.org/wiki/Amharisk
#: ../rules/base.xml.in.h:29
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Amharic"
+msgstr "Amharisk"
#: ../rules/base.xml.in.h:30
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Any Alt key"
+msgstr "Enhver Alt-tast"
#: ../rules/base.xml.in.h:31
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Any Win key"
+msgstr "Enhver Win-tast"
#: ../rules/base.xml.in.h:32
-msgid "Acer Laptop"
-msgstr "Acer bærbar"
+msgid "Any Win key (while pressed)"
+msgstr "Enhver Win-tast (mens trykket ned)"
#: ../rules/base.xml.in.h:33
-msgid "Add the standard behavior to Menu key"
-msgstr "Tilføj standardopførslen til menutasten"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:34
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Tilføjelse af esperanto accent circonflexe (supersigno)"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Apples aluminiumstastatur (ANSI)"
#: ../rules/base.xml.in.h:35
-msgid "Adding currency signs to certain keys"
-msgstr "Tilføjelse af valutategn til bestemte taster"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Apples aluminiumstastatur (ISO)"
#: ../rules/base.xml.in.h:36
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Apples aluminiumstastatur (JIS)"
#: ../rules/base.xml.in.h:37
-msgid "Afg"
-msgstr "Afg"
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Apples aluminiumstastatur: Emuler PC-taster (Udskriv, Scroll Lock, Pause, NumLock)"
#: ../rules/base.xml.in.h:38
-msgid "Afghanistan"
-msgstr "Afghanistan"
+msgid "Apple Laptop"
+msgstr "Apple bærbar"
#: ../rules/base.xml.in.h:39
-msgid "Akan"
-msgstr "Akan"
+msgid "Arabic"
+msgstr "Arabisk"
#: ../rules/base.xml.in.h:40
-msgid "Alb"
-msgstr "Alb"
+msgid "Arabic (Buckwalter)"
+msgstr "Arabisk (Buckwalter)"
#: ../rules/base.xml.in.h:41
-msgid "Albania"
-msgstr "Albanien"
+msgid "Arabic (Morocco)"
+msgstr "Arabisk (Marokko)"
#: ../rules/base.xml.in.h:42
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt og Meta er på Alt-tasterne"
+msgid "Arabic (Pakistan)"
+msgstr "Arabisk (Pakistan)"
#: ../rules/base.xml.in.h:43
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt ligger på den højre Win-tast og Super på Menu"
+msgid "Arabic (Syria)"
+msgstr "Arabisk (Syrien)"
#: ../rules/base.xml.in.h:44
-msgid "Alt+Caps Lock"
-msgstr "Alt+Caps Lock"
+msgid "Arabic (azerty)"
+msgstr "Arabisk (azerty)"
#: ../rules/base.xml.in.h:45
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
+msgid "Arabic (azerty/digits)"
+msgstr "Arabisk (azerty/cifre)"
#: ../rules/base.xml.in.h:46
-msgid "Alt+Shift"
-msgstr "Alt+Skift"
+msgid "Arabic (digits)"
+msgstr "Arabisk (cifre)"
#: ../rules/base.xml.in.h:47
-msgid "Alt+Space"
-msgstr "Alt+Mellemrum"
+msgid "Arabic (qwerty)"
+msgstr "Arabisk (qwerty)"
#: ../rules/base.xml.in.h:48
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Arabic (qwerty/digits)"
+msgstr "Arabisk (qwerty/cifre)"
#: ../rules/base.xml.in.h:49
-msgid "Alt/Win key behavior"
-msgstr "Alt/Win-tasteopførsel"
+msgid "Armenian"
+msgstr "Armensk"
#: ../rules/base.xml.in.h:50
-msgid "Alternative"
-msgstr "Alternative"
+msgid "Armenian (alternative eastern)"
+msgstr "Armensk (alternativ østlig)"
#: ../rules/base.xml.in.h:51
-msgid "Alternative Eastern"
-msgstr "Alternativ østlig"
+msgid "Armenian (alternative phonetic)"
+msgstr "Armensk (alternativ fonetisk)"
#: ../rules/base.xml.in.h:52
-msgid "Alternative Phonetic"
-msgstr "Alternativ fonetisk"
+msgid "Armenian (eastern)"
+msgstr "Armensk (østlig)"
#: ../rules/base.xml.in.h:53
-msgid "Alternative international"
-msgstr "Alternativ international"
+msgid "Armenian (phonetic)"
+msgstr "Armensk (fonetisk)"
#: ../rules/base.xml.in.h:54
-msgid "Alternative, Sun dead keys"
-msgstr "Alternativ, Sun døde taster"
+msgid "Armenian (western)"
+msgstr "Armensk (vestlig)"
#: ../rules/base.xml.in.h:55
-msgid "Alternative, eliminate dead keys"
-msgstr "Alternativ, slå døde taster fra"
+msgid "Asus Laptop"
+msgstr "Asus bærbar"
#: ../rules/base.xml.in.h:56
-msgid "Alternative, latin-9 only"
-msgstr "Alternativ, kun latin-9"
+msgid "At bottom left"
+msgstr "Nederst til venstre"
#: ../rules/base.xml.in.h:57
-msgid "And"
-msgstr "And"
+msgid "At left of 'A'"
+msgstr "Til venstre for 'A'"
+# The Avatime are an Akan people who live in Volta region of Ghana. History has it
+# that they are Ahanta people who migrated to the Volta region.
#: ../rules/base.xml.in.h:58
-msgid "Andorra"
-msgstr "Andorra"
+msgid "Avatime"
+msgstr "Avatime"
#: ../rules/base.xml.in.h:59
-msgid "Any Alt key"
-msgstr "Enhver Alt-tast"
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Aserbajdsjansk (kyrillisk)"
#: ../rules/base.xml.in.h:60
-msgid "Any Win key"
-msgstr "Enhver Win-tast"
+msgid "Azerbaijani"
+msgstr "Aserbajdsjansk"
#: ../rules/base.xml.in.h:61
-msgid "Any Win key (while pressed)"
-msgstr "Enhver Win-tast (mens trykket ned)"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 wireless Internet Keyboard"
#: ../rules/base.xml.in.h:62
-msgid "Apostrophe (') variant"
-msgstr "Apostrof (') variant"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:63
-msgid "Apple"
-msgstr "Apple"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF-multimedie"
#: ../rules/base.xml.in.h:64
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Apples aluminiumstastatur (ANSI)"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:65
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Apples aluminiumstastatur (ISO)"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:66
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Apples aluminiumstastatur (JIS)"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Apples aluminiumstastatur: Emuler PC-taster (Udskriv, Scroll Lock, Pause, NumLock)"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:68
-msgid "Apple Laptop"
-msgstr "Apple bærbar"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:69
-msgid "Ara"
-msgstr "Ara"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:70
-msgid "Arabic"
-msgstr "Arabisk"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U minitrådløst internet og spil"
#: ../rules/base.xml.in.h:71
-msgid "Arm"
-msgstr "Arm"
+msgid "Backslash"
+msgstr "Omvendt skråstreg"
+# engelsk fejl )
#: ../rules/base.xml.in.h:72
-msgid "Armenia"
-msgstr "Armenien"
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Omvendt skråstreg vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger"
-# Asturian (Asturian: Asturianu or Bable) is a Romance
-# language of the West Iberian group, Astur-Leonese
-# Subgroup, spoken in the Spanish province of Asturias
-# by the Asturian people.
#: ../rules/base.xml.in.h:73
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Asturisk variant med bundpunktum H og bundpunktum L"
+msgid "Bambara"
+msgstr "Bambara"
#: ../rules/base.xml.in.h:74
-msgid "Asus Laptop"
-msgstr "Asus bærbar"
+msgid "Belarusian"
+msgstr "Hviderussisk"
#: ../rules/base.xml.in.h:75
-msgid "At bottom left"
-msgstr "Nederst til venstre"
+msgid "Belarusian (Latin)"
+msgstr "Hviderussisk (latin)"
#: ../rules/base.xml.in.h:76
-msgid "At left of 'A'"
-msgstr "Til venstre for 'A'"
+msgid "Belarusian (legacy)"
+msgstr "Hviderussisk (forældet)"
#: ../rules/base.xml.in.h:77
-msgid "Austria"
-msgstr "Østrig"
+msgid "Belgian"
+msgstr "Belgisk"
#: ../rules/base.xml.in.h:78
-msgid "Aut"
-msgstr "Øst"
+msgid "Belgian (ISO alternate)"
+msgstr "Belgisk (ISO-alternativ)"
-# The Avatime are an Akan people who live in Volta region of Ghana. History has it
-# that they are Ahanta people who migrated to the Volta region.
#: ../rules/base.xml.in.h:79
-msgid "Avatime"
-msgstr "Avatime"
+msgid "Belgian (Sun dead keys)"
+msgstr "Belgisk (Sun døde taster)"
#: ../rules/base.xml.in.h:80
-msgid "Aze"
-msgstr "Ase"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belgisk (Wang model 724 azerty)"
#: ../rules/base.xml.in.h:81
-msgid "Azerbaijan"
-msgstr "Aserbajdsjan"
+msgid "Belgian (alternative)"
+msgstr "Belgisk (alternativ)"
#: ../rules/base.xml.in.h:82
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 wireless Internet Keyboard"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belgisk (alternativ, Sun døde taster)"
#: ../rules/base.xml.in.h:83
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belgisk (alternativ, kun latin-9)"
#: ../rules/base.xml.in.h:84
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF-multimedie"
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belgisk (slå døde taster fra)"
#: ../rules/base.xml.in.h:85
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:86
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:87
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:88
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Bengali"
+msgstr "Bengali"
#: ../rules/base.xml.in.h:89
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Bengali (Probhat)"
+msgstr "Bengali (probhat)"
+# http://retskrivningsordbogen.dk/ro/ro.htm?q=berb
#: ../rules/base.xml.in.h:90
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Berbisk (Marokko, tifinagh alternativ fonetisk)"
#: ../rules/base.xml.in.h:91
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U minitrådløst internet og spil"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Berbisk (Marokko, Tifinagh alternativ)"
#: ../rules/base.xml.in.h:92
-msgid "Backslash"
-msgstr "Omvendt skråstreg"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Berbisk (Marokko, Tifinagh udvidet fonetisk)"
#: ../rules/base.xml.in.h:93
-msgid "Bangladesh"
-msgstr "Bangladesh"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Berbisk (Marokko, Tifinagh udvidet)"
#: ../rules/base.xml.in.h:94
-msgid "Bashkirian"
-msgstr "Bashkirian"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Berbisk (Marokko, Tifinagh fonetisk)"
#: ../rules/base.xml.in.h:95
-msgid "Bel"
-msgstr "Bel"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Berbisk (Marokko, Tifinagh)"
#: ../rules/base.xml.in.h:96
-msgid "Belarus"
-msgstr "Hviderusland"
+msgid "Bosnian"
+msgstr "Bosnisk"
#: ../rules/base.xml.in.h:97
-msgid "Belgium"
-msgstr "Belgien"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bosnisk (US-tastatur med bosniske digrafer)"
#: ../rules/base.xml.in.h:98
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bosnisk (US-tastatur med bosniske bogstaver)"
#: ../rules/base.xml.in.h:99
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bosnisk (anvend bosniske digrafer)"
#: ../rules/base.xml.in.h:100
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bosnisk (anvend »« som anførelsestegn)"
#: ../rules/base.xml.in.h:101
-msgid "Bengali"
-msgstr "Bengali"
+msgid "Both Alt keys together"
+msgstr "Begge Alt-taster sammen"
#: ../rules/base.xml.in.h:102
-msgid "Bengali Probhat"
-msgstr "Bengali probhat"
+msgid "Both Ctrl keys together"
+msgstr "Begge Ctrl-taster sammen"
#: ../rules/base.xml.in.h:103
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ergonomisk, Dvorakmåde"
+msgid "Both Shift keys together"
+msgstr "Begge skift-taster sammen"
#: ../rules/base.xml.in.h:104
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ergonomisk, Dvorakmåde, kun latin-9"
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Begge skift-taster sammen aktiverer Caps Lock, en Skift-tast deaktiverer"
#: ../rules/base.xml.in.h:105
-msgid "Bgd"
-msgstr "Bgd"
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Begge skift-taster sammen skifter Caps Lock"
#: ../rules/base.xml.in.h:106
-msgid "Bgr"
-msgstr "Bgr"
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Begge skift-taster sammen skifter SkiftLock"
#: ../rules/base.xml.in.h:107
-msgid "Bhutan"
-msgstr "Bhutan"
+msgid "Braille"
+msgstr "Blindeskrift"
#: ../rules/base.xml.in.h:108
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Bibelsk hebraisk (Tiro)"
+msgid "Braille (left hand)"
+msgstr "Blindeskrift (venstre hånd)"
#: ../rules/base.xml.in.h:109
-msgid "Bih"
-msgstr "Bih"
+msgid "Braille (right hand)"
+msgstr "Blindeskrift (højre hånd)"
#: ../rules/base.xml.in.h:110
-msgid "Blr"
-msgstr "Blr"
+msgid "Brother Internet Keyboard"
+msgstr "Brother Internet Keyboard"
#: ../rules/base.xml.in.h:111
-msgid "Bosnia and Herzegovina"
-msgstr "Bosnien-herzegovina"
+msgid "Bulgarian"
+msgstr "Bulgarsk"
#: ../rules/base.xml.in.h:112
-msgid "Both Alt keys together"
-msgstr "Begge Alt-taster sammen"
+msgid "Bulgarian (new phonetic)"
+msgstr "Bulgarsk (ny fonetisk)"
#: ../rules/base.xml.in.h:113
-msgid "Both Ctrl keys together"
-msgstr "Begge Ctrl-taster sammen"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Bulgarsk (traditionel fonetisk)"
#: ../rules/base.xml.in.h:114
-msgid "Both Shift keys together"
-msgstr "Begge skiftetaster sammen"
+msgid "Burmese"
+msgstr "Burmesisk"
#: ../rules/base.xml.in.h:115
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "Begge skiftetaster sammen skifter Caps Lock"
+msgid "Canadian Multilingual"
+msgstr "Canadisk flersproget"
#: ../rules/base.xml.in.h:116
-msgid "Botswana"
-msgstr "Botswana"
+msgid "Canadian Multilingual (first part)"
+msgstr "Canadisk flersproget (første del)"
#: ../rules/base.xml.in.h:117
-msgid "Bra"
-msgstr "Bra"
+msgid "Canadian Multilingual (second part)"
+msgstr "Canadisk flersproget (anden del)"
#: ../rules/base.xml.in.h:118
-msgid "Braille"
-msgstr "Blindskrift"
+msgid "Caps Lock"
+msgstr "Caps Lock"
#: ../rules/base.xml.in.h:119
-msgid "Brazil"
-msgstr "Brasilien"
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Caps Lock (vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger)"
#: ../rules/base.xml.in.h:120
-msgid "Breton"
-msgstr "Breton"
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Caps Lock (skifter til første layout), Skift+Caps Lock (skifter til sidste layout)"
#: ../rules/base.xml.in.h:121
-msgid "Brl"
-msgstr "Brl"
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Caps Lock (mens presset ned), Alt+Caps Lock udfører den oprindleige capslockhandling"
#: ../rules/base.xml.in.h:122
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internet Keyboard"
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock agerer som skiftetasten med lås. Skift »pauser« Caps Lock"
#: ../rules/base.xml.in.h:123
-msgid "Btn"
-msgstr "Btn"
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock agerer som skiftetasten med lås. Skift påvirker ikke Caps Lock"
#: ../rules/base.xml.in.h:124
-msgid "Buckwalter"
-msgstr "Buckwalter"
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock er slået fra"
#: ../rules/base.xml.in.h:125
-msgid "Bulgaria"
-msgstr "Bulgarien"
+msgid "Caps Lock key behavior"
+msgstr "Opførsel for Caps Lock-tast"
#: ../rules/base.xml.in.h:126
-msgid "Bwa"
-msgstr "Bwa"
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Caps Lock ændrer Skift så alle taster bliver påvirket"
#: ../rules/base.xml.in.h:127
-msgid "COD"
-msgstr "COD"
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Caps Lock slår små/store bogstaver til/fra"
#: ../rules/base.xml.in.h:128
-msgid "CRULP"
-msgstr "CRULP"
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock bruger intern forstørrelse af bogstaver. Skift sætter Caps Lock »på hold«"
#: ../rules/base.xml.in.h:129
-msgid "Cambodia"
-msgstr "Cambodia"
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock bruger intern forstørrelse af bogstaver. Skift påvirker ikke Caps Lock"
#: ../rules/base.xml.in.h:130
-msgid "Can"
-msgstr "Can"
+msgid "Catalan"
+msgstr "Katalansk"
#: ../rules/base.xml.in.h:131
-msgid "Canada"
-msgstr "Canada"
+msgid "Cherokee"
+msgstr "Cherokee"
#: ../rules/base.xml.in.h:132
-msgid "Capewell-Dvorak (Baybayin)"
-msgstr "Capewell-dvorak (baybayin)"
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UBEGRÆNSET"
#: ../rules/base.xml.in.h:133
-msgid "Capewell-Dvorak (Latin)"
-msgstr "Capewell-dvorak (latin)"
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
#: ../rules/base.xml.in.h:134
-msgid "Capewell-QWERF 2006 (Baybayin)"
-msgstr "Capewell-QWERF 2006 (baybayin)"
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (alternativ)"
#: ../rules/base.xml.in.h:135
-msgid "Capewell-QWERF 2006 (Latin)"
-msgstr "Capewell-QWERF 2006 (latin)"
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-hub"
#: ../rules/base.xml.in.h:136
-msgid "Caps Lock"
-msgstr "Caps Lock"
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
#: ../rules/base.xml.in.h:137
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "Caps Lock (skifter til første layout), Skift+Caps Lock (skifter til sidste layout)"
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:138
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "Caps Lock (mens presset ned), Alt+Caps Lock udfører den oprindleige capslockhandling"
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "Caps Lock agerer som skiftetasten med lås. Skift »pauser« Caps Lock"
+msgid "Chicony Internet Keyboard"
+msgstr "Chicony Internet Keyboard"
#: ../rules/base.xml.in.h:140
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "Caps Lock agerer som skiftetasten med lås. Skift påvirker ikke Caps Lock"
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
#: ../rules/base.xml.in.h:141
-msgid "Caps Lock is disabled"
-msgstr "Caps Lock er slået fra"
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
#: ../rules/base.xml.in.h:142
-msgid "Caps Lock key behavior"
-msgstr "Opførsel for Caps Lock-tast"
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "Caps Lock ændrer Skift så alle taster bliver påvirket"
+msgid "Chinese"
+msgstr "Kinesisk"
#: ../rules/base.xml.in.h:144
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr "Caps Lock slår små/store bogstaver til/fra"
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Kinesisk (tibetansk med ASCII-numre)"
#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr "Caps Lock bruger intern forstørrelse af bogstaver. Skift sætter Caps Lock »på hold«"
+msgid "Chinese (Tibetan)"
+msgstr "Kinesisk (tibetansk)"
#: ../rules/base.xml.in.h:146
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr "Caps Lock bruger intern forstørrelse af bogstaver. Skift påvirker ikke Caps Lock"
+msgid "Chinese (Uyghur)"
+msgstr "Kinesisk (uyghur)"
#: ../rules/base.xml.in.h:147
-msgid "Catalan variant with middle-dot L"
-msgstr "Katalansk variant med midterpunktum L"
+msgid "Classmate PC"
+msgstr "Classmate PC"
#: ../rules/base.xml.in.h:148
-msgid "Cedilla"
-msgstr "Cedille"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access Keyboard"
#: ../rules/base.xml.in.h:149
-msgid "Che"
-msgstr "Che"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internet Keyboard (13 taster)"
#: ../rules/base.xml.in.h:150
-msgid "Cherokee"
-msgstr "Cherokee"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internet Keyboard (18 taster)"
#: ../rules/base.xml.in.h:151
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UBEGRÆNSET"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internet Keyboard (7 taster)"
#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq Keyboard"
#: ../rules/base.xml.in.h:153
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (alternativ)"
+msgid "Compose key position"
+msgstr "Placering af Composetast"
+# Backspace kunne også være Slet tilbage
#: ../rules/base.xml.in.h:154
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-hub"
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Rettelsestast"
#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Kontrol ligger på Alt-tasterne, Alt ligger på Win-tasterne"
#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Kontrol ligger på Win-tasterne (og de normale Ctrl-taster)"
#: ../rules/base.xml.in.h:157
-msgid "Cherry CyMotion Master XPress"
-msgstr "Cherry CyMotion Master XPress"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
#: ../rules/base.xml.in.h:158
-msgid "Chicony Internet Keyboard"
-msgstr "Chicony Internet Keyboard"
+msgid "Croatian"
+msgstr "Kroatisk"
#: ../rules/base.xml.in.h:159
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Kroatisk (US-tastatur med kroatiske digrafer)"
#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Kroatisk (US-tastatur med kroatiske bogstaver)"
#: ../rules/base.xml.in.h:161
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Kroatisk (anvend kroatiske digrafer)"
#: ../rules/base.xml.in.h:162
-msgid "China"
-msgstr "Kina"
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Kroatisk (anvend »« som anførelsestegn)"
#: ../rules/base.xml.in.h:163
-msgid "Chn"
-msgstr "Chn"
+msgid "Ctrl key position"
+msgstr "Ctrl-tast placering"
#: ../rules/base.xml.in.h:164
-msgid "Chuvash"
-msgstr "Chusvash"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Skift"
#: ../rules/base.xml.in.h:165
-msgid "Chuvash Latin"
-msgstr "Chuvash latin"
+msgid "Czech"
+msgstr "Tjekkisk"
#: ../rules/base.xml.in.h:166
-msgid "Classic"
-msgstr "Klassisk"
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Tjekkisk (UCW-layout kun bogstaver med accent)"
#: ../rules/base.xml.in.h:167
-msgid "Classic Dvorak"
-msgstr "Klassisk Dvorak"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Tjekkisk (US Dvorak med CZ UCW-understøttelse)"
#: ../rules/base.xml.in.h:168
-msgid "Classic, eliminate dead keys"
-msgstr "Klassisk, slå døde taster fra"
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Tjekkisk (med &lt;\\|&gt;-tast)"
#: ../rules/base.xml.in.h:169
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Czech (qwerty)"
+msgstr "Tjekkisk (qwerty)"
#: ../rules/base.xml.in.h:170
-msgid "CloGaelach"
-msgstr "CloGaelach"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Tjekkisk (qwerty, udvidet omvendt skråstreg)"
#: ../rules/base.xml.in.h:171
-msgid "Colemak"
-msgstr "Colemak"
+msgid "DTK2000"
+msgstr "DTK2000"
-# http://en.wikipedia.org/wiki/Baybayin
#: ../rules/base.xml.in.h:172
-msgid "Colemak (Baybayin)"
-msgstr "Colemak (baybayin)"
+msgid "Danish"
+msgstr "Dansk"
#: ../rules/base.xml.in.h:173
-msgid "Colemak (Latin)"
-msgstr "Colemak (latin)"
+msgid "Danish (Dvorak)"
+msgstr "Dansk (dvorak)"
#: ../rules/base.xml.in.h:174
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access Keyboard"
+msgid "Danish (Mac)"
+msgstr "Dansk (Mac)"
#: ../rules/base.xml.in.h:175
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internet Keyboard (13 taster)"
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Dansk (Mac, slå døde taster fra)"
#: ../rules/base.xml.in.h:176
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internet Keyboard (18 taster)"
+msgid "Danish (eliminate dead keys)"
+msgstr "Dansk (slå døde taster fra)"
#: ../rules/base.xml.in.h:177
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internet Keyboard (7 taster)"
+msgid "Default numeric keypad keys"
+msgstr "Standard numerisk tastatur taster"
#: ../rules/base.xml.in.h:178
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq Keyboard"
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:179
-msgid "Compose key position"
-msgstr "Placering af Composetast"
+msgid "Dell 101-key PC"
+msgstr "Dell 101-taster PC"
#: ../rules/base.xml.in.h:180
-msgid "Congo, Democratic Republic of the"
-msgstr "Congo, Den Demokratiske Republik"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Dell bærbar/notebook Inspiron 6xxx/8xxx"
-# Backspace kunne også være Slet tilbage
#: ../rules/base.xml.in.h:181
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Rettelsestast"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Dell bærbar/notebook Precision M serie"
#: ../rules/base.xml.in.h:182
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Kontrol ligger på Alt-tasterne, Alt ligger på Win-tasterne"
+msgid "Dell Latitude series laptop"
+msgstr "Dell Latitude serie bærbar"
#: ../rules/base.xml.in.h:183
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Kontrol ligger på Win-tasterne (og de normale Ctrl-taster)"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:184
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
+msgid "Dell SK-8125"
+msgstr "Dell Sk-8125"
#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Krimsk tatar (Dobruca-1 Q)"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Krimsk tatar (Dobruca-2 Q)"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB Multimedia tastatur"
#: ../rules/base.xml.in.h:187
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Krimsk tatar (Tyrkisk Alt-Q)"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa Wireless Desktop Keyboard"
#: ../rules/base.xml.in.h:188
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Krimsk tatar (Tyrkisk F)"
+msgid "Dhivehi"
+msgstr "Dhivehi"
#: ../rules/base.xml.in.h:189
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Krimsk tatar (Tyrkisk Q)"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond 9801 / 9802-serie"
#: ../rules/base.xml.in.h:190
-msgid "Croatia"
-msgstr "Kroatien"
+msgid "Dutch"
+msgstr "Hollandsk"
#: ../rules/base.xml.in.h:191
-msgid "Ctrl key position"
-msgstr "Ctrl-tast placering"
+msgid "Dutch (Mac)"
+msgstr "Hollandsk (Mac)"
#: ../rules/base.xml.in.h:192
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Skift"
+msgid "Dutch (Sun dead keys)"
+msgstr "Hollandsk (Sun døde taster)"
#: ../rules/base.xml.in.h:193
-msgid "Cyrillic"
-msgstr "Kyrillisk"
+msgid "Dutch (standard)"
+msgstr "Hollandsk (standard)"
-# guillemets er dem her: »«
#: ../rules/base.xml.in.h:194
-msgid "Cyrillic with guillemets"
-msgstr "Kyrillisk med guillemeter"
+msgid "Dzongkha"
+msgstr "Dzongkha"
#: ../rules/base.xml.in.h:195
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Kyrillisk, Z og ZHE ombyttet"
+msgid "Enable extra typographic characters"
+msgstr "Slå ekstra typografiske karakterer til"
#: ../rules/base.xml.in.h:196
-msgid "Cze"
-msgstr "Tje"
+msgid "English (Canada)"
+msgstr "Engelsk (Canada)"
-# engelsk fejl her? Hedder det ikke Czech Republic
#: ../rules/base.xml.in.h:197
-msgid "Czechia"
-msgstr "Tjekkiet"
+msgid "English (Colemak)"
+msgstr "Engelsk (Colemak)"
#: ../rules/base.xml.in.h:198
-msgid "DOS"
-msgstr "DOS"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Engelsk (Dvorak alternativ international ingen døde taster)"
#: ../rules/base.xml.in.h:199
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "English (Dvorak international with dead keys)"
+msgstr "Engelsk (Dvorak international med døde taster)"
#: ../rules/base.xml.in.h:200
-msgid "Dead acute"
-msgstr "Død accent"
+msgid "English (Dvorak)"
+msgstr "Engelsk (Dvorak)"
#: ../rules/base.xml.in.h:201
-msgid "Dead grave acute"
-msgstr "Død accent grave"
+msgid "English (Ghana)"
+msgstr "Engelsk (Ghana)"
#: ../rules/base.xml.in.h:202
-msgid "Default numeric keypad keys"
-msgstr "Standard numerisk tastatur taster"
+msgid "English (Ghana, GILLBT)"
+msgstr "Engelsk (Ghana, GILLBT)"
#: ../rules/base.xml.in.h:203
-msgid "Dell"
-msgstr "Dell"
+msgid "English (Ghana, multilingual)"
+msgstr "Engelsk (Ghana, flersproget)"
#: ../rules/base.xml.in.h:204
-msgid "Dell 101-key PC"
-msgstr "Dell 101-taster PC"
+msgid "English (India, with RupeeSign)"
+msgstr "Engelsk (Indien, med rupeetegn)"
#: ../rules/base.xml.in.h:205
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Dell bærbar/notebook Inspiron 6xxx/8xxx"
+msgid "English (Macintosh)"
+msgstr "Engelsk (Macintosh)"
#: ../rules/base.xml.in.h:206
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Dell bærbar/notebook Precision M series"
+msgid "English (Mali, USA Mac)"
+msgstr "Engelsk (Mali, USA Mac)"
#: ../rules/base.xml.in.h:207
-msgid "Dell Latitude series laptop"
-msgstr "Dell Latitude series bærbar"
+msgid "English (Mali, USA international)"
+msgstr "Engelsk (Mali, USA international)"
#: ../rules/base.xml.in.h:208
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "English (Nigeria)"
+msgstr "Engelsk (Nigeria)"
#: ../rules/base.xml.in.h:209
-msgid "Dell SK-8125"
-msgstr "Dell Sk-8125"
+msgid "English (South Africa)"
+msgstr "Engelsk (Sydafrika)"
#: ../rules/base.xml.in.h:210
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "English (UK)"
+msgstr "Engelsk (UK)"
#: ../rules/base.xml.in.h:211
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell USB Multimedia tastatur"
+msgid "English (UK, Colemak)"
+msgstr "Engelsk (UK, Colemak)"
#: ../rules/base.xml.in.h:212
-msgid "Denmark"
-msgstr "Danmark"
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Engelsk (UK, Dvoraktegnsætning)"
#: ../rules/base.xml.in.h:213
-msgid "Deu"
-msgstr "Tys"
+msgid "English (UK, Dvorak)"
+msgstr "Engelsk (UK, Dvorak)"
#: ../rules/base.xml.in.h:214
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa Wireless Desktop Keyboard"
+msgid "English (UK, Mac international)"
+msgstr "Engelsk (UK, Mac international)"
#: ../rules/base.xml.in.h:215
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond 9801 / 9802-serien"
+msgid "English (UK, Mac)"
+msgstr "Engelsk (UK, Mac)"
#: ../rules/base.xml.in.h:216
-msgid "Dnk"
-msgstr "Dnk"
+msgid "English (UK, extended, WinKeys)"
+msgstr "Engelsk (UK, udvidet, Wintaster)"
#: ../rules/base.xml.in.h:217
-msgid "Dvorak"
-msgstr "Dvorak"
+msgid "English (UK, international with dead keys)"
+msgstr "Engelsk (UK, international med døde taster)"
#: ../rules/base.xml.in.h:218
-msgid "Dvorak (Baybayin)"
-msgstr "Dvorak (baybarin)"
+msgid "English (US)"
+msgstr "Engelsk (US)"
#: ../rules/base.xml.in.h:219
-msgid "Dvorak (Latin)"
-msgstr "Dvorak (latin)"
+msgid "English (US, alternative international)"
+msgstr "Engelsk (US, alternativ international)"
#: ../rules/base.xml.in.h:220
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvorak (UK tegnsætning)"
+msgid "English (US, international with dead keys)"
+msgstr "Engelsk (US, international med døde taster)"
#: ../rules/base.xml.in.h:221
-msgid "Dvorak alternative international (no dead keys)"
-msgstr "Dvorak alternativ international (ingen døde taster)"
+msgid "English (US, with euro on 5)"
+msgstr "Engelsk (US, med euro på 5)"
#: ../rules/base.xml.in.h:222
-msgid "Dvorak international (with dead keys)"
-msgstr "Dvorak international (med døde taster)"
+msgid "English (classic Dvorak)"
+msgstr "Engelsk (klassisk dvorak)"
#: ../rules/base.xml.in.h:223
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Dvorak, polske anførelsestegn på tast 1"
+msgid "English (international AltGr dead keys)"
+msgstr "Engelsk (international AltGr døde taster)"
#: ../rules/base.xml.in.h:224
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvorak, polske anførelsestegn på anførelsestast"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Engelsk (skift layout på gange-/divideretast)"
#: ../rules/base.xml.in.h:225
-msgid "Eastern"
-msgstr "Østlig"
+msgid "English (left handed Dvorak)"
+msgstr "Engelsk (venstrehåndet dvorak)"
#: ../rules/base.xml.in.h:226
-msgid "Eliminate dead keys"
-msgstr "Slå døde taster fra"
+msgid "English (programmer Dvorak)"
+msgstr "Engelsk (programmørdvorak)"
#: ../rules/base.xml.in.h:227
-msgid "Enable extra typographic characters"
-msgstr "Slå ekstra typografiske karakterer til"
+msgid "English (right handed Dvorak)"
+msgstr "Engelsk (højrehåndet dvorak)"
#: ../rules/base.xml.in.h:228
-msgid "English"
-msgstr "Engelsk"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:229
-msgid "English (USA International)"
-msgstr "Engelsk (USA international)"
+msgid "Enter on keypad"
+msgstr "Retur på numerisk tastatur"
#: ../rules/base.xml.in.h:230
-msgid "English (USA Macintosh)"
-msgstr "Engelsk (USA Macintosh)"
+msgid "Esperanto"
+msgstr "Esperanto"
#: ../rules/base.xml.in.h:231
-msgid "English with RupeeSign"
-msgstr "Engelsk med rupeetegn"
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Esperanto (forkert placeret semikolon og anførelsestegn, forældet)"
#: ../rules/base.xml.in.h:232
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
+msgid "Estonian"
+msgstr "Estisk"
#: ../rules/base.xml.in.h:233
-msgid "Enter on keypad"
-msgstr "Retur på numerisk tastatur"
+msgid "Estonian (Dvorak)"
+msgstr "Estisk (dvorak)"
#: ../rules/base.xml.in.h:234
-msgid "Epo"
-msgstr "Epo"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Estisk (US-tastatur med estiske bogstaver)"
#: ../rules/base.xml.in.h:235
-msgid "Ergonomic"
-msgstr "Ergonomisk"
+msgid "Estonian (eliminate dead keys)"
+msgstr "Estisk (slå døde taster fra)"
+# Euro på 2, 2 euro, Euro på tasten 2
+# Det handler om en tildeling af eurotegnet til tasten 2, og der er "Euro
+# på to" mere beskrivende, selv om strengen isoleret set stadig kan være
+# forvirrende. Når teksten står i en sammenhæng, er det nok ikke så
+# vigtigt om det er det ene eller det andet.
#: ../rules/base.xml.in.h:236
-msgid "Esp"
-msgstr "Esp"
+msgid "Euro on 2"
+msgstr "Euro på 2"
#: ../rules/base.xml.in.h:237
-msgid "Esperanto"
-msgstr "Esperanto"
+msgid "Euro on 4"
+msgstr "Euro på 4"
#: ../rules/base.xml.in.h:238
-msgid "Est"
-msgstr "Est"
+msgid "Euro on 5"
+msgstr "Euro på 5"
#: ../rules/base.xml.in.h:239
-msgid "Estonia"
-msgstr "Estland"
+msgid "Euro on E"
+msgstr "Euro på E"
#: ../rules/base.xml.in.h:240
-msgid "Eth"
-msgstr "Eti"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:241
-msgid "Ethiopia"
-msgstr "Etiopien"
+msgid "Ewe"
+msgstr "Ewe"
-# Euro på 2, 2 euro, Euro på tasten 2
-# Det handler om en tildeling af eurotegnet til tasten 2, og der er "Euro
-# på to" mere beskrivende, selv om strengen isoleret set stadig kan være
-# forvirrende. Når teksten står i en sammenhæng, er det nok ikke så
-# vigtigt om det er det ene eller det andet.
#: ../rules/base.xml.in.h:242
-msgid "Euro on 2"
-msgstr "Euro på 2"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:243
-msgid "Euro on 4"
-msgstr "Euro på 4"
+msgid "Faroese"
+msgstr "Færøsk"
#: ../rules/base.xml.in.h:244
-msgid "Euro on 5"
-msgstr "Euro på 5"
+msgid "Faroese (eliminate dead keys)"
+msgstr "Færøsk (slå døde taster fra)"
#: ../rules/base.xml.in.h:245
-msgid "Euro on E"
-msgstr "Euro på E"
+msgid "Filipino"
+msgstr "Filippinsk"
#: ../rules/base.xml.in.h:246
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Filippinsk (Capewell-dvorak baybayin)"
#: ../rules/base.xml.in.h:247
-msgid "Ewe"
-msgstr "Ewe"
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Filippinsk (Capewell-dvorak latin)"
#: ../rules/base.xml.in.h:248
-msgid "Extended"
-msgstr "Udvidet"
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Filippinsk (Capewell-QWERF 2006 baybayin)"
#: ../rules/base.xml.in.h:249
-msgid "Extended - Winkeys"
-msgstr "Udvidet - Wintaster"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Filippinsk (Capewell-QWERF 2006 latin)"
+# http://en.wikipedia.org/wiki/Baybayin
#: ../rules/base.xml.in.h:250
-msgid "Extended Backslash"
-msgstr "Udvidet omvendt skråstreg"
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Filippinsk (Colemak baybayin)"
#: ../rules/base.xml.in.h:251
-msgid "F-letter (F) variant"
-msgstr "F-bogstav (F) variant"
+msgid "Filipino (Colemak Latin)"
+msgstr "Filippinsk (Colemak latin)"
#: ../rules/base.xml.in.h:252
-msgid "FL90"
-msgstr "FL90"
+msgid "Filipino (Dvorak Latin)"
+msgstr "Filippinsk (Dvorak latin)"
#: ../rules/base.xml.in.h:253
-msgid "Faroe Islands"
-msgstr "Færøerne"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Filippinsk (QWERTY baybayin)"
#: ../rules/base.xml.in.h:254
-msgid "Fin"
-msgstr "Fin"
+msgid "Finnish"
+msgstr "Finsk"
#: ../rules/base.xml.in.h:255
-msgid "Finland"
-msgstr "Finland"
+msgid "Finnish (Mac)"
+msgstr "Finsk (Mac)"
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "Finsk (klassisk)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Finsk (klassisk, slå døde taster fra)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr "Finsk (nordligt samisk)"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:261
msgid "Four-level key with abstract separators"
msgstr "Niveau fire tast med abstrakt adskillelser"
-#: ../rules/base.xml.in.h:259
+#: ../rules/base.xml.in.h:262
msgid "Four-level key with comma"
msgstr "Niveau fire tast med komma"
-#: ../rules/base.xml.in.h:260
+#: ../rules/base.xml.in.h:263
msgid "Four-level key with dot"
msgstr "Niveau fire tast med punktum"
-#: ../rules/base.xml.in.h:261
+#: ../rules/base.xml.in.h:264
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Niveau fire tast med punktum, latin-9 begrænsning"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:265
msgid "Four-level key with momayyez"
msgstr "Niveau fire tast med momayyez"
-#: ../rules/base.xml.in.h:263
-msgid "Fra"
-msgstr "Fra"
-
-#: ../rules/base.xml.in.h:264
-msgid "France"
-msgstr "Frankrig"
-
-#: ../rules/base.xml.in.h:265
-msgid "Français (France Alternative)"
-msgstr "Français (Fransk alternativ)"
-
#: ../rules/base.xml.in.h:266
msgid "French"
msgstr "Fransk"
#: ../rules/base.xml.in.h:267
-msgid "French (Macintosh)"
-msgstr "Fransk (Macintosh)"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Fransk (Bepo, ergonomisk, dvorakmåde)"
#: ../rules/base.xml.in.h:268
-msgid "French (legacy)"
-msgstr "Fransk (forældet)"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Fransk (Bepo, ergonomisk, dvorakmåde, kun latin-9)"
#: ../rules/base.xml.in.h:269
-msgid "French Dvorak"
-msgstr "Fransk dvorak"
+msgid "French (Breton)"
+msgstr "Fransk (bretonsk)"
#: ../rules/base.xml.in.h:270
-msgid "French, Sun dead keys"
-msgstr "Fransk, Sun døde taster"
+msgid "French (Canada, Dvorak)"
+msgstr "Fransk (Canada, dvorak)"
#: ../rules/base.xml.in.h:271
-msgid "French, eliminate dead keys"
-msgstr "Fransk, slå døde taster fra"
+msgid "French (Canada, legacy)"
+msgstr "Fransk (Canada, forældet)"
#: ../rules/base.xml.in.h:272
-msgid "Fro"
-msgstr "Fro"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Fransk (Congo, Den Demokratiske Republik)"
#: ../rules/base.xml.in.h:273
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Fujitsu-Siemens Computers AMILO bærbar"
+msgid "French (Dvorak)"
+msgstr "Fransk (dvorak)"
#: ../rules/base.xml.in.h:274
-msgid "Fula"
-msgstr "Fula"
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Fransk (georgisk AZERTY Tskapo)"
#: ../rules/base.xml.in.h:275
-msgid "GBr"
-msgstr "GBr"
+msgid "French (Guinea)"
+msgstr "Fransk (Guinea)"
#: ../rules/base.xml.in.h:276
-msgid "GILLBT"
-msgstr "GILLBT"
+msgid "French (Mac)"
+msgstr "Fransk (Mac)"
#: ../rules/base.xml.in.h:277
-msgid "Ga"
-msgstr "Ga"
+msgid "French (Mali, alternative)"
+msgstr "Fransk (Mali, alternativ)"
#: ../rules/base.xml.in.h:278
-msgid "Generic 101-key PC"
-msgstr "Generisk 101-taster PC"
+msgid "French (Morocco)"
+msgstr "Fransk (Marokko)"
#: ../rules/base.xml.in.h:279
-msgid "Generic 102-key (Intl) PC"
-msgstr "Generisk 102-taster (Intl) PC"
+msgid "French (Occitan)"
+msgstr "Fransk (Occitansk)"
#: ../rules/base.xml.in.h:280
-msgid "Generic 104-key PC"
-msgstr "Generisk 104-taster PC"
+msgid "French (Sun dead keys)"
+msgstr "Fransk (Sun døde taster)"
#: ../rules/base.xml.in.h:281
-msgid "Generic 105-key (Intl) PC"
-msgstr "Generisk 105-taster (Intl) PC"
+msgid "French (Switzerland)"
+msgstr "Fransk (Schweiz)"
#: ../rules/base.xml.in.h:282
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "French (Switzerland, Mac)"
+msgstr "Fransk (Schweiz, Mac)"
#: ../rules/base.xml.in.h:283
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Fransk (Schweiz, Sun døde taster)"
#: ../rules/base.xml.in.h:284
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Fransk (Schweiz, slå døde taster fra)"
#: ../rules/base.xml.in.h:285
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
+msgid "French (alternative)"
+msgstr "Fransk (alternativ)"
#: ../rules/base.xml.in.h:286
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
+msgid "French (alternative, Sun dead keys)"
+msgstr "Fransk (alternativ, Sun døde taster)"
#: ../rules/base.xml.in.h:287
-msgid "Geo"
-msgstr "Geo"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Fransk (alternativ, slå døde taster fra)"
#: ../rules/base.xml.in.h:288
-msgid "Georgia"
-msgstr "Georgien"
+msgid "French (alternative, latin-9 only)"
+msgstr "Fransk (alternativ, kun latin-9)"
#: ../rules/base.xml.in.h:289
-msgid "Georgian"
-msgstr "Georgisk"
+msgid "French (eliminate dead keys)"
+msgstr "Fransk (slå døde taster fra)"
#: ../rules/base.xml.in.h:290
-msgid "Georgian AZERTY Tskapo"
-msgstr "Georgisk AZERTY Tskapo"
+msgid "French (legacy alternative)"
+msgstr "Fransk (forældet alternativ)"
#: ../rules/base.xml.in.h:291
-msgid "German (Macintosh)"
-msgstr "Tysk (Macintosh)"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Fransk (forældet, alternativ, Sun døde taster)"
#: ../rules/base.xml.in.h:292
-msgid "German, Sun dead keys"
-msgstr "Tysk, Sun døde taster"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Fransk (forældet, alternativ, slå døde taster fra)"
#: ../rules/base.xml.in.h:293
-msgid "German, eliminate dead keys"
-msgstr "Tysk, slå døde taster fra"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Fujitsu-Siemens Computers AMILO bærbar"
#: ../rules/base.xml.in.h:294
-msgid "Germany"
-msgstr "Tyskland"
+msgid "Fula"
+msgstr "Fula"
#: ../rules/base.xml.in.h:295
-msgid "Gha"
-msgstr "Gha"
+msgid "GBr"
+msgstr "GBr"
#: ../rules/base.xml.in.h:296
-msgid "Ghana"
-msgstr "Ghana"
+msgid "Ga"
+msgstr "Ga"
#: ../rules/base.xml.in.h:297
-msgid "Gin"
-msgstr "Gin"
+msgid "Generic 101-key PC"
+msgstr "Generisk 101-taster PC"
#: ../rules/base.xml.in.h:298
-msgid "Grc"
-msgstr "Grc"
+msgid "Generic 102-key (Intl) PC"
+msgstr "Generisk 102-taster (Intl) PC"
#: ../rules/base.xml.in.h:299
-msgid "Greece"
-msgstr "Grækenland"
+msgid "Generic 104-key PC"
+msgstr "Generisk 104-taster PC"
#: ../rules/base.xml.in.h:300
-msgid "Guinea"
-msgstr "Guinea"
+msgid "Generic 105-key (Intl) PC"
+msgstr "Generisk 105-taster (Intl) PC"
#: ../rules/base.xml.in.h:301
-msgid "Gujarati"
-msgstr "Gujarati"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:302
-msgid "Gurmukhi"
-msgstr "Gurmukhi"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
#: ../rules/base.xml.in.h:303
-msgid "Gurmukhi Jhelum"
-msgstr "Gurmukhi Jhelum"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:304
-msgid "Gyration"
-msgstr "Roteren"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
-# http://en.wikipedia.org/wiki/HTC_Dream
#: ../rules/base.xml.in.h:305
-msgid "HTC Dream"
-msgstr "HTC-Dream"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:306
-msgid "Happy Hacking Keyboard"
-msgstr "Glædelig hacking tastatur"
+msgid "Georgian"
+msgstr "Georgisk"
#: ../rules/base.xml.in.h:307
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Glædelig hacking tastatur til Mac"
+msgid "Georgian (MESS)"
+msgstr "Georgisk (MESS)"
#: ../rules/base.xml.in.h:308
-msgid "Hausa"
-msgstr "Hausa"
+msgid "Georgian (Ossetian)"
+msgstr "Georgisk (ossetisk)"
#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internet Keyboard"
+msgid "Georgian (ergonomic)"
+msgstr "Georgisk (ergonomisk)"
#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 Notebook"
+msgid "German"
+msgstr "Tysk"
#: ../rules/base.xml.in.h:311
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "German (Austria)"
+msgstr "Tysk (Østrig)"
#: ../rules/base.xml.in.h:312
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "German (Austria, Mac)"
+msgstr "Tysk (Østrig, Mac)"
#: ../rules/base.xml.in.h:313
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+msgid "German (Austria, Sun dead keys)"
+msgstr "Tysk (Østrig, Sun døde taster)"
#: ../rules/base.xml.in.h:314
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Tysk (Østrig, slå døde taster fra)"
#: ../rules/base.xml.in.h:315
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "German (Dvorak)"
+msgstr "Tysk (dvorak)"
#: ../rules/base.xml.in.h:316
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "German (Mac)"
+msgstr "Tysk (Mac)"
#: ../rules/base.xml.in.h:317
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Tysk (Mac, slå døde taster fra)"
#: ../rules/base.xml.in.h:318
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
+msgid "German (Neo 2)"
+msgstr "Tysk (Neo 2)"
#: ../rules/base.xml.in.h:319
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x Multimedia tastatur"
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Tysk (rumænsk tastatur med tyske bogstaver)"
#: ../rules/base.xml.in.h:320
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Tysk (rumænsk tastatur med tyske bogstaver, eliminer døde taster)"
#: ../rules/base.xml.in.h:321
-msgid "Hexadecimal"
-msgstr "Sekstentals"
+msgid "German (Sun dead keys)"
+msgstr "Tysk (Sun døde taster)"
#: ../rules/base.xml.in.h:322
-msgid "Hindi Bolnagri"
-msgstr "Hindi bolnagri"
+msgid "German (Switzerland, Mac)"
+msgstr "Tysk (Schweiz, Mac)"
#: ../rules/base.xml.in.h:323
-msgid "Hindi Wx"
-msgstr "Hindi Wx"
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Tysk (Schweiz, Sun døde taster)"
#: ../rules/base.xml.in.h:324
-msgid "Homophonic"
-msgstr "Homofonisk"
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Tysk (Schweiz, slå døde taster fra)"
#: ../rules/base.xml.in.h:325
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "German (dead acute)"
+msgstr "Tysk (død accent)"
#: ../rules/base.xml.in.h:326
-msgid "Hrv"
-msgstr "Hrv"
+msgid "German (dead grave acute)"
+msgstr "Tysk (død accent grave)"
#: ../rules/base.xml.in.h:327
-msgid "Htc Dream phone"
-msgstr "Htc Dream-telefon"
+msgid "German (eliminate dead keys)"
+msgstr "Tysk (slå døde taster fra)"
+# nedersorbisk, tror jeg
+# (el. nedre Lausitz)
#: ../rules/base.xml.in.h:328
-msgid "Hun"
-msgstr "Ung"
+msgid "German (lower Sorbian qwertz)"
+msgstr "Tysk (nedersorbisk qwertz)"
#: ../rules/base.xml.in.h:329
-msgid "Hungary"
-msgstr "Ungarn"
+msgid "German (lower Sorbian)"
+msgstr "Tysk (nedersorbisk)"
#: ../rules/base.xml.in.h:330
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper ligger på Win-tasterne"
+msgid "German (qwerty)"
+msgstr "Tysk (qwerty)"
#: ../rules/base.xml.in.h:331
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
+msgid "Greek"
+msgstr "Græsk"
#: ../rules/base.xml.in.h:332
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "Greek (eliminate dead keys)"
+msgstr "Græsk (slå døde taster fra)"
#: ../rules/base.xml.in.h:333
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Greek (extended)"
+msgstr "Græsk (udvidet)"
#: ../rules/base.xml.in.h:334
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "Greek (polytonic)"
+msgstr "Græsk (polytonisk)"
#: ../rules/base.xml.in.h:335
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "Greek (simple)"
+msgstr "Græsk (simpel)"
#: ../rules/base.xml.in.h:336
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
+msgid "Gujarati"
+msgstr "Gujarati"
#: ../rules/base.xml.in.h:337
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "Gyration"
+msgstr "Roteren"
+# http://en.wikipedia.org/wiki/HTC_Dream
#: ../rules/base.xml.in.h:338
-msgid "ISO Alternate"
-msgstr "ISO-alternativ"
+msgid "HTC Dream"
+msgstr "HTC-Dream"
#: ../rules/base.xml.in.h:339
-msgid "Iceland"
-msgstr "Island"
+msgid "Happy Hacking Keyboard"
+msgstr "Glædelig hacking tastatur"
#: ../rules/base.xml.in.h:340
-msgid "Igbo"
-msgstr "Igbo"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Glædelig hacking tastatur til Mac"
#: ../rules/base.xml.in.h:341
-msgid "Include dead tilde"
-msgstr "Inkludere død tilde"
+msgid "Hausa"
+msgstr "Hausa"
#: ../rules/base.xml.in.h:342
-msgid "Ind"
-msgstr "Ind"
+msgid "Hebrew"
+msgstr "Hebraisk"
#: ../rules/base.xml.in.h:343
-msgid "India"
-msgstr "Indien"
+msgid "Hebrew (Phonetic)"
+msgstr "Hebraisk (fonetisk)"
#: ../rules/base.xml.in.h:344
-msgid "International (AltGr dead keys)"
-msgstr "International (AltGr døde taster)"
+msgid "Hebrew (Tiro)"
+msgstr "Hebraisk (Tiro)"
#: ../rules/base.xml.in.h:345
-msgid "International (with dead keys)"
-msgstr "International (med døde taster)"
+msgid "Hebrew (lyx)"
+msgstr "Hebraisk (lyx)"
#: ../rules/base.xml.in.h:346
-msgid "Inuktitut"
-msgstr "Inuktitut"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internet Keyboard"
-#: ../rules/base.xml.in.h:347 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr "Iran"
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
#: ../rules/base.xml.in.h:348
-msgid "Iraq"
-msgstr "Irak"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:349
-msgid "Ireland"
-msgstr "Irland"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:350
-msgid "Irl"
-msgstr "Irl"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:351
-msgid "Irn"
-msgstr "Irn"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:352
-msgid "Irq"
-msgstr "Irk"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:353
-msgid "Isl"
-msgstr "Isl"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:354
-msgid "Isr"
-msgstr "Isr"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:355
-msgid "Israel"
-msgstr "Israel"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:356
-msgid "Ita"
-msgstr "Ita"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x Multimedia tastatur"
#: ../rules/base.xml.in.h:357
-msgid "Italy"
-msgstr "Italien"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:358
-msgid "Japan"
-msgstr "Japan"
+msgid "Hexadecimal"
+msgstr "Sekstentals"
#: ../rules/base.xml.in.h:359
-msgid "Japan (PC-98xx Series)"
-msgstr "Japan (PC-98xx serier)"
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi (bolnagri)"
#: ../rules/base.xml.in.h:360
-msgid "Japanese keyboard options"
-msgstr "Japanske tastaturvalg"
+msgid "Hindi (Wx)"
+msgstr "Hindi (wx)"
#: ../rules/base.xml.in.h:361
-msgid "Jpn"
-msgstr "Jpn"
-
-# The Kalmyk language (Хальмг келн; also known as Kalmuck,
-# Calmouk, Qalmaq, Kalmytskii Jazyk, Khal:mag, Volga Oirat,
-# Weilate, Western Mongol) is the language spoken by the
-# Kalmyks, that is, the Oirats of Kalmykia (Russian Federation).
-# Kalmyk belongs to the Oirat subgroup of the Mongolic language family.
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
+
#: ../rules/base.xml.in.h:362
-msgid "Kalmyk"
-msgstr "Kalmyk"
+msgid "Htc Dream phone"
+msgstr "Htc Dream-telefon"
#: ../rules/base.xml.in.h:363
-msgid "Kana"
-msgstr "Kana"
+msgid "Hungarian"
+msgstr "Ungarsk"
#: ../rules/base.xml.in.h:364
-msgid "Kana 86"
-msgstr "Kana 86"
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Ungarsk (101/qwerty/komma/døde taster)"
#: ../rules/base.xml.in.h:365
-msgid "Kana Lock key is locking"
-msgstr "Kana låsetast låser"
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Ungarsk (101/qwerty/komma/slå døde taster fra)"
#: ../rules/base.xml.in.h:366
-msgid "Kannada"
-msgstr "Kannada"
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Ungarsk (101/qwerty/punktum/døde taster)"
#: ../rules/base.xml.in.h:367
-msgid "Kashubian"
-msgstr "Kashubian"
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Ungarsk (101/qwerty/punktum/slå døde taster fra)"
#: ../rules/base.xml.in.h:368
-msgid "Kaz"
-msgstr "Kaz"
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Ungarsk (101/qwertz/komma/døde taster)"
#: ../rules/base.xml.in.h:369
-msgid "Kazakh with Russian"
-msgstr "Kazakh med russisk"
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Ungarsk (101/qwertz/komma/slå døde taster fra)"
#: ../rules/base.xml.in.h:370
-msgid "Kazakhstan"
-msgstr "Kazakstan"
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Ungarsk (101/qwertz/punktum/døde taster)"
#: ../rules/base.xml.in.h:371
-msgid "Ken"
-msgstr "Ken"
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Ungarsk (101/qwertz/punktum/slå døde taster fra)"
#: ../rules/base.xml.in.h:372
-msgid "Kenya"
-msgstr "Kenya"
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Ungarsk (102/qwerty/komma/døde taster)"
#: ../rules/base.xml.in.h:373
-msgid "Key sequence to kill the X server"
-msgstr "Tastsekvens for at slå X-serveren ned"
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Ungarsk (102/qwerty/komma/slå døde taster fra)"
#: ../rules/base.xml.in.h:374
-msgid "Key to choose 3rd level"
-msgstr "Tast for at vælge tredje niveau"
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Ungarsk (102/qwerty/punktum/døde taster)"
#: ../rules/base.xml.in.h:375
-msgid "Key to choose 5th level"
-msgstr "Tast for at vælge femte niveau"
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Ungarsk (102/qwerty/punktum/slå døde taster fra)"
#: ../rules/base.xml.in.h:376
-msgid "Key(s) to change layout"
-msgstr "Tast(er) for at skifte layout"
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Ungarsk (102/qwertz/komma/døde taster)"
#: ../rules/base.xml.in.h:377
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Ungarsk (102/qwertz/komma/slå døde taster fra)"
#: ../rules/base.xml.in.h:378
-msgid "Kgz"
-msgstr "Kgz"
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Ungarsk (102/qwertz/punktum/døde taster)"
#: ../rules/base.xml.in.h:379
-msgid "Khm"
-msgstr "Khm"
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Ungarsk (102/qwertz/punktum/slå døde taster fra)"
#: ../rules/base.xml.in.h:380
-msgid "Kikuyu"
-msgstr "Kikuyu"
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Ungarsk (slå døde taster fra)"
#: ../rules/base.xml.in.h:381
-msgid "Kinesis"
-msgstr "Kinesis"
+msgid "Hungarian (qwerty)"
+msgstr "Ungarsk (qwerty)"
#: ../rules/base.xml.in.h:382
-msgid "Komi"
-msgstr "Komi"
+msgid "Hungarian (standard)"
+msgstr "Ungarsk (standard)"
#: ../rules/base.xml.in.h:383
-msgid "Kor"
-msgstr "Kor"
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper ligger på Win-tasterne"
#: ../rules/base.xml.in.h:384
-msgid "Korea, Republic of"
-msgstr "Republikken Korea"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:385
-msgid "Ktunaxa"
-msgstr "Ktunaxa"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:386
-msgid "Kurdish, (F)"
-msgstr "Kurdisk, (F)"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:387
-msgid "Kurdish, Arabic-Latin"
-msgstr "Kurdisk, arabisk-latin"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:388
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Kurdisk, latin Alt-Q"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
#: ../rules/base.xml.in.h:389
-msgid "Kurdish, Latin Q"
-msgstr "Kurdisk, latin Q"
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
#: ../rules/base.xml.in.h:390
-msgid "Kyrgyzstan"
-msgstr "Kyrgyzstan"
+msgid "Icelandic"
+msgstr "Islandsk"
#: ../rules/base.xml.in.h:391
-msgid "LEKP"
-msgstr "LEKP"
+msgid "Icelandic (Dvorak)"
+msgstr "Islandsk (Dvorak)"
#: ../rules/base.xml.in.h:392
-msgid "LEKPa"
-msgstr "LEKPa"
+msgid "Icelandic (Mac)"
+msgstr "Islandsk (Mac)"
#: ../rules/base.xml.in.h:393
-msgid "Lao"
-msgstr "Lao"
+msgid "Icelandic (Sun dead keys)"
+msgstr "Islandsk (Sun døde taster)"
#: ../rules/base.xml.in.h:394
-msgid "Laos"
-msgstr "Laos"
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Islandsk (slå døde taster fra)"
#: ../rules/base.xml.in.h:395
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Bærbar Compaq (fx Armada) Laptop Keyboard"
+msgid "Igbo"
+msgstr "Igbo"
#: ../rules/base.xml.in.h:396
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Bærbar/notebook Compaq (fx Presario) Internet Keyboard"
+msgid "Indian"
+msgstr "Indisk"
#: ../rules/base.xml.in.h:397
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Bærbar/notebook eMachines m68xx"
+msgid "Inuktitut"
+msgstr "Inuktitut"
#: ../rules/base.xml.in.h:398
-msgid "Latin"
-msgstr "Latin"
+msgid "Iraqi"
+msgstr "Irakisk"
#: ../rules/base.xml.in.h:399
-msgid "Latin American"
-msgstr "Latinamerika"
+msgid "Irish"
+msgstr "Irsk"
#: ../rules/base.xml.in.h:400
-msgid "Latin Unicode"
-msgstr "Latin unicode"
+msgid "Irish (CloGaelach)"
+msgstr "Irsk (CloGaelach)"
#: ../rules/base.xml.in.h:401
-msgid "Latin Unicode qwerty"
-msgstr "Latin unicode qwerty"
+msgid "Irish (Ogham IS434)"
+msgstr "Irsk (Ogham IS434)"
#: ../rules/base.xml.in.h:402
-msgid "Latin qwerty"
-msgstr "Latin qwerty"
+msgid "Irish (Ogham)"
+msgstr "Irsk (Ogham)"
#: ../rules/base.xml.in.h:403
-msgid "Latin unicode"
-msgstr "Latin unicode"
+msgid "Irish (UnicodeExpert)"
+msgstr "Irsk (UnicodeExpert)"
#: ../rules/base.xml.in.h:404
-msgid "Latin unicode qwerty"
-msgstr "Latin unicode qwerty"
+msgid "Italian"
+msgstr "Italiensk"
-# guillemets er dem her: »«
#: ../rules/base.xml.in.h:405
-msgid "Latin with guillemets"
-msgstr "Latin med gullemeter"
+msgid "Italian (Georgian)"
+msgstr "Italiensk (georgisk)"
#: ../rules/base.xml.in.h:406
-msgid "Latvia"
-msgstr "Letland"
+msgid "Italian (Mac)"
+msgstr "Italiensk (Mac)"
#: ../rules/base.xml.in.h:407
-msgid "Layout toggle on multiply/divide key"
-msgstr "Layout ændring på gange-/divideretast"
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Italiensk (US-tastatur med italienske bogstaver)"
#: ../rules/base.xml.in.h:408
-msgid "Left Alt"
-msgstr "Venstre Alt"
+msgid "Italian (eliminate dead keys)"
+msgstr "Italiensk (slå døde taster fra)"
#: ../rules/base.xml.in.h:409
-msgid "Left Alt (while pressed)"
-msgstr "Venstre Alt (mens trykket ned)"
+msgid "Japanese"
+msgstr "Japansk"
#: ../rules/base.xml.in.h:410
-msgid "Left Alt is swapped with Left Win"
-msgstr "Venstre Alt ombyttes med venstre Win-tast"
+msgid "Japanese (Kana 86)"
+msgstr "Japansk (Kana 86)"
#: ../rules/base.xml.in.h:411
-msgid "Left Ctrl"
-msgstr "Venstre Ctrl"
+msgid "Japanese (Kana)"
+msgstr "Japansk (Kana)"
#: ../rules/base.xml.in.h:412
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Venstre Ctrl (skifter til første layout), Højre Ctrl (skifter til sidste layout)"
+msgid "Japanese (Mac)"
+msgstr "Japansk (Mac)"
#: ../rules/base.xml.in.h:413
-msgid "Left Ctrl+Left Shift"
-msgstr "Venstre Ctrl+Venstre Skift"
+msgid "Japanese (OADG 109A)"
+msgstr "Japansk (OADG 109A)"
#: ../rules/base.xml.in.h:414
-msgid "Left Shift"
-msgstr "Venstre Skift"
+msgid "Japanese (PC-98xx Series)"
+msgstr "Japansk (pc-98xx-serie)"
#: ../rules/base.xml.in.h:415
-msgid "Left Win"
-msgstr "Venstre Win"
+msgid "Japanese keyboard options"
+msgstr "Japanske tastaturvalg"
#: ../rules/base.xml.in.h:416
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Venstre Win (skifter til første layout), Højre Win/Menu (skifter til sidste layout)"
+msgid "Kana Lock key is locking"
+msgstr "Kana låsetast låser"
#: ../rules/base.xml.in.h:417
-msgid "Left Win (while pressed)"
-msgstr "Venstre Win-tast (mens trykket ned)"
+msgid "Kannada"
+msgstr "Kannada"
#: ../rules/base.xml.in.h:418
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Venstre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
+msgid "Kazakh"
+msgstr "Kasakhisk"
#: ../rules/base.xml.in.h:419
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Venstre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
+msgid "Kazakh (with Russian)"
+msgstr "Kasakhisk (med russisk)"
#: ../rules/base.xml.in.h:420
-msgid "Left hand"
-msgstr "Venstre hånd"
+msgid "Key sequence to kill the X server"
+msgstr "Tastsekvens for at slå X-serveren ned"
#: ../rules/base.xml.in.h:421
-msgid "Left handed Dvorak"
-msgstr "Venstrehåndet dvorak"
+msgid "Key to choose 3rd level"
+msgstr "Tast for at vælge tredje niveau"
#: ../rules/base.xml.in.h:422
-msgid "Legacy"
-msgstr "Forældet"
+msgid "Key to choose 5th level"
+msgstr "Tast for at vælge femte niveau"
#: ../rules/base.xml.in.h:423
-msgid "Legacy Wang 724"
-msgstr "Forældet Wang 724"
+msgid "Key(s) to change layout"
+msgstr "Tast(er) for at skifte layout"
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:425
-msgid "Legacy key with comma"
-msgstr "Forældet tast med komma"
+msgid "Khmer (Cambodian)"
+msgstr "Khmerisk (cambodiansk)"
#: ../rules/base.xml.in.h:426
-msgid "Legacy key with dot"
-msgstr "Forældet tast med punktum"
+msgid "Kikuyu"
+msgstr "Kikuyu"
#: ../rules/base.xml.in.h:427
-msgid "Lithuania"
-msgstr "Litauen"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:428
-msgid "Lka"
-msgstr "Lka"
+msgid "Korean"
+msgstr "Koreansk"
#: ../rules/base.xml.in.h:429
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access Keyboard"
+msgid "Korean (101/104 key compatible)"
+msgstr "Koreansk (101/104 tastkompatibel)"
#: ../rules/base.xml.in.h:430
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Kurdisk (Iran, arabisk-latin)"
#: ../rules/base.xml.in.h:431
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (alternativ valg)"
+msgid "Kurdish (Iran, F)"
+msgstr "Kurdisk (Iran, F)"
#: ../rules/base.xml.in.h:432
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Kurdisk (Iran, latin Q)"
#: ../rules/base.xml.in.h:433
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Kurdisk (Iran, latin Alt-Q)"
#: ../rules/base.xml.in.h:434
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Kurdisk (Irak, arabisk-latin)"
#: ../rules/base.xml.in.h:435
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
+msgid "Kurdish (Iraq, F)"
+msgstr "Kurdisk (Irak, F)"
#: ../rules/base.xml.in.h:436
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (alternativ tilvalg 2)"
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Kurdisk (Irak, latin Alt-Q)"
#: ../rules/base.xml.in.h:437
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Kurdisk (Irak, latin Q)"
#: ../rules/base.xml.in.h:438
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
+msgid "Kurdish (Syria, F)"
+msgstr "Kurdisk (Syrien, F)"
#: ../rules/base.xml.in.h:439
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Logitech G15 ekstra taster via G15daemon"
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Kurdisk (Syrien, latin Alt-Q)"
#: ../rules/base.xml.in.h:440
-msgid "Logitech Generic Keyboard"
-msgstr "Logitech Generic Keyboard"
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Kurdisk (Syrien, latin Q)"
#: ../rules/base.xml.in.h:441
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech Internet 350 Keyboard"
+msgid "Kurdish (Turkey, F)"
+msgstr "Kurdisk (Tyrkiet, F)"
#: ../rules/base.xml.in.h:442
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech Internet Keyboard"
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Kurdisk (Tyrkiet, latin Alt-Q)"
#: ../rules/base.xml.in.h:443
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech Internet Navigator Keyboard"
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Kurdisk (Tyrkiet, latin Q)"
#: ../rules/base.xml.in.h:444
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite Keyboard"
+msgid "Kutenai"
+msgstr "Kutenai"
#: ../rules/base.xml.in.h:445
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgid "Kyrgyz"
+msgstr "Kirgisisk"
#: ../rules/base.xml.in.h:446
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X Keyboard"
+msgid "Kyrgyz (phonetic)"
+msgstr "Kirgisisk (fonetisk)"
#: ../rules/base.xml.in.h:447
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
+msgid "Lao"
+msgstr "Lao"
#: ../rules/base.xml.in.h:448
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo Keyboard"
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Lao (STEA-foreslået standardlayout)"
#: ../rules/base.xml.in.h:449
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Bærbar Compaq (fx Armada) Laptop Keyboard"
#: ../rules/base.xml.in.h:450
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Bærbar/notebook Compaq (fx Presario) Internet Keyboard"
#: ../rules/base.xml.in.h:451
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Bærbar/notebook eMachines m68xx"
#: ../rules/base.xml.in.h:452
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgid "Latvian"
+msgstr "Lettisk"
#: ../rules/base.xml.in.h:453
-msgid "Lower Sorbian"
-msgstr "Nedre Sorbian"
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Lettisk (apostrofvariant ')"
#: ../rules/base.xml.in.h:454
-msgid "Lower Sorbian (qwertz)"
-msgstr "Nedre Sorbian (qwertz)"
+msgid "Latvian (F variant)"
+msgstr "Lettisk (F-variant)"
#: ../rules/base.xml.in.h:455
-msgid "Ltu"
-msgstr "Lit"
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Lettisk (tildevariant ~)"
#: ../rules/base.xml.in.h:456
-msgid "Lva"
-msgstr "Lva"
+msgid "Left Alt"
+msgstr "Venstre Alt"
#: ../rules/base.xml.in.h:457
-msgid "MESS"
-msgstr "MESS"
+msgid "Left Alt (while pressed)"
+msgstr "Venstre Alt (mens trykket ned)"
#: ../rules/base.xml.in.h:458
-msgid "MNE"
-msgstr "MNE"
+msgid "Left Alt is swapped with Left Win"
+msgstr "Venstre Alt ombyttes med venstre Win-tast"
#: ../rules/base.xml.in.h:459
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Left Ctrl"
+msgstr "Venstre Ctrl"
#: ../rules/base.xml.in.h:460
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Venstre Ctrl (skifter til første layout), Højre Ctrl (skifter til sidste layout)"
#: ../rules/base.xml.in.h:461
-msgid "Macedonia"
-msgstr "Makedonien"
+msgid "Left Ctrl+Left Shift"
+msgstr "Venstre Ctrl+Venstre Skift"
#: ../rules/base.xml.in.h:462
-msgid "Macintosh"
-msgstr "Macintosh"
+msgid "Left Shift"
+msgstr "Venstre Skift"
#: ../rules/base.xml.in.h:463
-msgid "Macintosh (International)"
-msgstr "Macintosh (internationalt)"
+msgid "Left Win"
+msgstr "Venstre Win"
#: ../rules/base.xml.in.h:464
-msgid "Macintosh Old"
-msgstr "Macintosh gammel"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Venstre Win (skifter til første layout), Højre Win/Menu (skifter til sidste layout)"
#: ../rules/base.xml.in.h:465
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, sun døde taster"
+msgid "Left Win (while pressed)"
+msgstr "Venstre Win-tast (mens trykket ned)"
#: ../rules/base.xml.in.h:466
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, slå døde taster fra"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Venstre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
#: ../rules/base.xml.in.h:467
-msgid "Make Caps Lock an additional Backspace"
-msgstr "Gør Caps Lock til en ekstra rettelsestast"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Venstre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
#: ../rules/base.xml.in.h:468
-msgid "Make Caps Lock an additional Ctrl"
-msgstr "Gør Caps Lock til en ekstra Ctrl"
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Venstre Ctrl+Venstre Win (til første layout), Højre Ctrl+Menu (til andet layout)"
#: ../rules/base.xml.in.h:469
-msgid "Make Caps Lock an additional ESC"
-msgstr "Gør Caps Lock til en ekstra Esc"
+msgid "Legacy"
+msgstr "Forældet"
#: ../rules/base.xml.in.h:470
-msgid "Make Caps Lock an additional Hyper"
-msgstr "Gør Caps Lock til en ekstra Hyper"
-
-#: ../rules/base.xml.in.h:471
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "Gør Caps Lock til en ekstra NumLock"
+msgid "Legacy Wang 724"
+msgstr "Forældet Wang 724"
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:472
-msgid "Make Caps Lock an additional Super"
-msgstr "Gør Caps Lock til en ekstra Super"
+msgid "Legacy key with comma"
+msgstr "Forældet tast med komma"
#: ../rules/base.xml.in.h:473
-msgid "Malayalam"
-msgstr "Malayalam"
+msgid "Legacy key with dot"
+msgstr "Forældet tast med punktum"
#: ../rules/base.xml.in.h:474
-msgid "Malayalam Lalitha"
-msgstr "Malayalam Lalitha"
+msgid "Lithuanian"
+msgstr "Litauisk"
#: ../rules/base.xml.in.h:475
-msgid "Maldives"
-msgstr "Maldiverne"
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Litauisk (IBM LST 1205-92)"
#: ../rules/base.xml.in.h:476
-msgid "Mali"
-msgstr "Mali"
+msgid "Lithuanian (LEKP)"
+msgstr "Litauisk (LEKP)"
#: ../rules/base.xml.in.h:477
-msgid "Malta"
-msgstr "Malta"
+msgid "Lithuanian (LEKPa)"
+msgstr "Litauisk (LEKPa)"
#: ../rules/base.xml.in.h:478
-msgid "Maltese keyboard with US layout"
-msgstr "Maltesisk tastatur med US-layout"
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Litauisk (US-tastatur med litauiske bogstaver)"
#: ../rules/base.xml.in.h:479
-msgid "Mao"
-msgstr "Mao"
+msgid "Lithuanian (standard)"
+msgstr "Litauisk (standard)"
#: ../rules/base.xml.in.h:480
-msgid "Maori"
-msgstr "Maori"
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
#: ../rules/base.xml.in.h:481
-msgid "Mari"
-msgstr "Mari"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
#: ../rules/base.xml.in.h:482
-msgid "Mdv"
-msgstr "Mdv"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (alternativ valg)"
#: ../rules/base.xml.in.h:483
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
#: ../rules/base.xml.in.h:484
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access Keyboard"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:485
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
#: ../rules/base.xml.in.h:486
-msgid "Menu"
-msgstr "Menu"
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
#: ../rules/base.xml.in.h:487
-msgid "Meta is mapped to Left Win"
-msgstr "Meta ligger på venstre Win-tast"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (alternativ tilvalg 2)"
#: ../rules/base.xml.in.h:488
-msgid "Meta is mapped to Win keys"
-msgstr "Meta ligger på Win-tasterne"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
#: ../rules/base.xml.in.h:489
-msgid "Meta on Left Ctrl"
-msgstr "Meta på venstre Ctrl"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
#: ../rules/base.xml.in.h:490
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15 ekstra taster via G15daemon"
#: ../rules/base.xml.in.h:491
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft Internet Keyboard"
+msgid "Logitech Generic Keyboard"
+msgstr "Logitech Generic Keyboard"
#: ../rules/base.xml.in.h:492
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, svensk"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech Internet 350 Keyboard"
#: ../rules/base.xml.in.h:493
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internet Keyboard"
#: ../rules/base.xml.in.h:494
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural Keyboard Elite"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator Keyboard"
#: ../rules/base.xml.in.h:495
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite Keyboard"
#: ../rules/base.xml.in.h:496
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural Keyboard Pro OEM"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
#: ../rules/base.xml.in.h:497
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
#: ../rules/base.xml.in.h:498
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge Keyboard"
#: ../rules/base.xml.in.h:499
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft Office Keyboard"
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo Keyboard"
#: ../rules/base.xml.in.h:500
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:501
-msgid "Miscellaneous compatibility options"
-msgstr "Diverse kompatibilitetsvalg"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)"
#: ../rules/base.xml.in.h:502
-msgid "Mkd"
-msgstr "Mkd"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
#: ../rules/base.xml.in.h:503
-msgid "Mli"
-msgstr "Mli"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
#: ../rules/base.xml.in.h:504
-msgid "Mlt"
-msgstr "Mlt"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:505
-msgid "Mmr"
-msgstr "Mmr"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:506
-msgid "Mng"
-msgstr "Mng"
+msgid "Macedonian"
+msgstr "Makedonsk"
#: ../rules/base.xml.in.h:507
-msgid "Mongolia"
-msgstr "Mongoliet"
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Makedonsk (slå døde taster fra)"
#: ../rules/base.xml.in.h:508
-msgid "Montenegro"
-msgstr "Montenegro"
+msgid "Macintosh"
+msgstr "Macintosh"
#: ../rules/base.xml.in.h:509
-msgid "Morocco"
-msgstr "Marokko"
+msgid "Macintosh Old"
+msgstr "Macintosh gammel"
#: ../rules/base.xml.in.h:510
-msgid "Multilingual"
-msgstr "Flersproget"
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Gør Caps Lock til en ekstra rettelsestast"
#: ../rules/base.xml.in.h:511
-msgid "Multilingual, first part"
-msgstr "Flersproget, første del"
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Gør Caps Lock til en ekstra Control men behold Caps_Lock keysym"
#: ../rules/base.xml.in.h:512
-msgid "Multilingual, second part"
-msgstr "Flersproget, anden del"
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Gør Caps Lock til en ekstra Ctrl"
#: ../rules/base.xml.in.h:513
-msgid "Myanmar"
-msgstr "Burma"
+msgid "Make Caps Lock an additional ESC"
+msgstr "Gør Caps Lock til en ekstra Esc"
#: ../rules/base.xml.in.h:514
-msgid "NICOLA-F style Backspace"
-msgstr "NICOLA-F-stil rettelsestast"
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Gør Caps Lock til en ekstra Hyper"
#: ../rules/base.xml.in.h:515
-msgid "NLA"
-msgstr "NLA"
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Gør Caps Lock til en ekstra NumLock"
#: ../rules/base.xml.in.h:516
-msgid "Nativo"
-msgstr "Nativo"
+msgid "Make Caps Lock an additional Super"
+msgstr "Gør Caps Lock til en ekstra Super"
#: ../rules/base.xml.in.h:517
-msgid "Nativo for Esperanto"
-msgstr "Nativo for esperanto"
+msgid "Malayalam"
+msgstr "Malayalam"
#: ../rules/base.xml.in.h:518
-msgid "Nativo for USA keyboards"
-msgstr "Nativo for USA-tastaturer"
+msgid "Malayalam (Lalitha)"
+msgstr "Malayalamsk (Lalitha)"
#: ../rules/base.xml.in.h:519
-msgid "Neo 2"
-msgstr "Neo 2"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Malayalamsk (udvidet inscript med Rupeetegn)"
#: ../rules/base.xml.in.h:520
-msgid "Nepal"
-msgstr "Nepal"
+msgid "Maltese"
+msgstr "Maltesisk"
#: ../rules/base.xml.in.h:521
-msgid "Netherlands"
-msgstr "Holland"
+msgid "Maltese (with US layout)"
+msgstr "Maltesisk (med US-layout)"
#: ../rules/base.xml.in.h:522
-msgid "New phonetic"
-msgstr "Ny fonetisk"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:523
-msgid "Nga"
-msgstr "Nga"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access Keyboard"
#: ../rules/base.xml.in.h:524
-msgid "Nigeria"
-msgstr "Nigeria"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:525
-msgid "Nld"
-msgstr "Hollandsk"
+msgid "Menu"
+msgstr "Menu"
#: ../rules/base.xml.in.h:526
-msgid "Non-breakable space character at fourth level"
-msgstr "Ubrydelig mellemrumskarakter på fjerde niveau"
+msgid "Meta is mapped to Left Win"
+msgstr "Meta ligger på venstre Win-tast"
#: ../rules/base.xml.in.h:527
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemrumskarakter på sjette niveau"
+msgid "Meta is mapped to Win keys"
+msgstr "Meta ligger på Win-tasterne"
#: ../rules/base.xml.in.h:528
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemrumskarakter på sjette niveau (via Ctrl+Skift)"
+msgid "Meta on Left Ctrl"
+msgstr "Meta på venstre Ctrl"
#: ../rules/base.xml.in.h:529
-msgid "Non-breakable space character at second level"
-msgstr "Ubrydelig mellemrumskarakter på andet niveau"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
#: ../rules/base.xml.in.h:530
-msgid "Non-breakable space character at third level"
-msgstr "Ubrydelig mellemrumskarakter på tredje niveau"
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
#: ../rules/base.xml.in.h:531
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Ubrydelig mellemrumskarakter på tredje niveau, intet på fjerde niveau"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, svensk"
#: ../rules/base.xml.in.h:532
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Ubrydelig mellemrumskarakter på tredje niveau, tynd ubrydelig mellemrumskarakter på fjerde niveau"
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:533
-msgid "Nor"
-msgstr "Nor"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
#: ../rules/base.xml.in.h:534
-msgid "Northern Saami"
-msgstr "Nordligt saami"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:535
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Nordligt saami, slå døde taster fra"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural Keyboard Pro OEM"
#: ../rules/base.xml.in.h:536
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:537
-msgid "Norway"
-msgstr "Norge"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
#: ../rules/base.xml.in.h:538
-msgid "Npl"
-msgstr "Npl"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
#: ../rules/base.xml.in.h:539
-msgid "Num Lock"
-msgstr "Num Lock"
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft Office Keyboard"
#: ../rules/base.xml.in.h:540
-msgid "Numeric keypad delete key behaviour"
-msgstr "Numerisk tastatur slettetast opførsel"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
#: ../rules/base.xml.in.h:541
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Numerisk tastatur taster fungerer som med Mac"
+msgid "Miscellaneous compatibility options"
+msgstr "Diverse kompatibilitetsvalg"
#: ../rules/base.xml.in.h:542
-msgid "Numeric keypad layout selection"
-msgstr "Numerisk tastatur layout udvælgelse"
+msgid "Mongolian"
+msgstr "Mongolsk"
#: ../rules/base.xml.in.h:543
-msgid "OADG 109A"
-msgstr "OADG 109A"
+msgid "Montenegrin"
+msgstr "Montenegrinsk"
+# guillemets er dem her: »«
#: ../rules/base.xml.in.h:544
-msgid "OLPC"
-msgstr "OLPC"
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Montenegrinsk (kyrillisk med anførelsestegnene »«)"
#: ../rules/base.xml.in.h:545
-msgid "OLPC Dari"
-msgstr "OLPC Dari"
+msgid "Montenegrin (Cyrillic)"
+msgstr "Montenegrinsk (kyrillisk)"
#: ../rules/base.xml.in.h:546
-msgid "OLPC Pashto"
-msgstr "OLPC Pashto"
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Montenegrinsk (kyrillisk, Z og ZHE ombyttet)"
#: ../rules/base.xml.in.h:547
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC sydlig uzbek"
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Montenegrinsk (latin qwerty)"
#: ../rules/base.xml.in.h:548
-msgid "Occitan"
-msgstr "Occitansk"
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Montenegrinsk (latin unicode qwerty)"
#: ../rules/base.xml.in.h:549
-msgid "Ogham"
-msgstr "Ogham"
+msgid "Montenegrin (Latin unicode)"
+msgstr "Montenegrinsk (latin unicode)"
+# guillemets er dem her: »«
#: ../rules/base.xml.in.h:550
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Montenegrinsk (latin med anførelsestegnene »«)"
#: ../rules/base.xml.in.h:551
-msgid "Oriya"
-msgstr "Oriya"
+msgid "Māori"
+msgstr "Māori"
#: ../rules/base.xml.in.h:552
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/Internet keyboard"
+msgid "NICOLA-F style Backspace"
+msgstr "NICOLA-F-stil rettelsestast"
#: ../rules/base.xml.in.h:553
-msgid "Ossetian"
-msgstr "Ossetisk"
+msgid "Nepali"
+msgstr "Nepalesisk"
#: ../rules/base.xml.in.h:554
-msgid "Ossetian, Winkeys"
-msgstr "Ossetisk, Winkeys"
+msgid "Non-breakable space character at fourth level"
+msgstr "Ubrydelig mellemrumskarakter på fjerde niveau"
#: ../rules/base.xml.in.h:555
-msgid "Ossetian, legacy"
-msgstr "Ossetisk, forældet"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemrumskarakter på sjette niveau"
#: ../rules/base.xml.in.h:556
-msgid "PC-98xx Series"
-msgstr "PC-98xx-serien"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemrumskarakter på sjette niveau (via Ctrl+Skift)"
#: ../rules/base.xml.in.h:557
-msgid "Pak"
-msgstr "Pak"
+msgid "Non-breakable space character at second level"
+msgstr "Ubrydelig mellemrumskarakter på andet niveau"
#: ../rules/base.xml.in.h:558
-msgid "Pakistan"
-msgstr "Pakistan"
+msgid "Non-breakable space character at third level"
+msgstr "Ubrydelig mellemrumskarakter på tredje niveau"
-# Pannonian Rusyn or simply Rusyn (Ruthenian) is a Slavic language or dialect spoken
-# in north-western Serbia and eastern Croatia
#: ../rules/base.xml.in.h:559
-msgid "Pannonian Rusyn Homophonic"
-msgstr "Pannonian Rusyn homofoni"
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Ubrydelig mellemrumskarakter på tredje niveau, intet på fjerde niveau"
#: ../rules/base.xml.in.h:560
-msgid "Pashto"
-msgstr "Pashto"
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Ubrydelig mellemrumskarakter på tredje niveau, tynd ubrydelig mellemrumskarakter på fjerde niveau"
#: ../rules/base.xml.in.h:561
-msgid "Pattachote"
-msgstr "Pattachote"
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:562
-msgid "Pause"
-msgstr "Pause"
+msgid "Norwegian"
+msgstr "Norsk"
#: ../rules/base.xml.in.h:563
-msgid "Persian, with Persian Keypad"
-msgstr "Persisk, med persisk numerisk tastatur"
+msgid "Norwegian (Dvorak)"
+msgstr "Norsk (dvorak)"
#: ../rules/base.xml.in.h:564
-msgid "Phi"
-msgstr "Fil"
+msgid "Norwegian (Mac)"
+msgstr "Norsk (Mac)"
#: ../rules/base.xml.in.h:565
-msgid "Philippines"
-msgstr "Filippinerne"
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Norsk (Mac, slå døde taster fra)"
+# engelsk fejl
#: ../rules/base.xml.in.h:566
-msgid "Phonetic"
-msgstr "Fonetisk"
+msgid "Norwegian (Northern Saami"
+msgstr "Norsk (nordligt samisk)"
#: ../rules/base.xml.in.h:567
-msgid "Phonetic Winkeys"
-msgstr "Fonetiske Wintaster"
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Norsk (slå døde taster fra)"
#: ../rules/base.xml.in.h:568
-msgid "Pol"
-msgstr "Pol"
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Norsk (nordligt samisk, slå døde taster fra)"
#: ../rules/base.xml.in.h:569
-msgid "Poland"
-msgstr "Polen"
+msgid "Num Lock"
+msgstr "Num Lock"
#: ../rules/base.xml.in.h:570
-msgid "Polytonic"
-msgstr "Polytonisk"
+msgid "Numeric keypad delete key behaviour"
+msgstr "Numerisk tastatur slettetast opførsel"
#: ../rules/base.xml.in.h:571
-msgid "Portugal"
-msgstr "Portugal"
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Numerisk tastatur taster fungerer som med Mac"
#: ../rules/base.xml.in.h:572
-msgid "Probhat"
-msgstr "Probhat"
+msgid "Numeric keypad layout selection"
+msgstr "Numerisk tastatur layout udvælgelse"
#: ../rules/base.xml.in.h:573
-msgid "Programmer Dvorak"
-msgstr "Programmørdvorak"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:574
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Oriya"
+msgstr "Oriya"
#: ../rules/base.xml.in.h:575
-msgid "Prt"
-msgstr "Prt"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/Internet keyboard"
#: ../rules/base.xml.in.h:576
-msgid "PrtSc"
-msgstr "Prtsc"
+msgid "PC-98xx Series"
+msgstr "PC-98xx-serie"
#: ../rules/base.xml.in.h:577
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Pashto"
+msgstr "Pashto"
#: ../rules/base.xml.in.h:578
-msgid "QWERTY (Baybayin)"
-msgstr "QWERTY (baybayin)"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Pashto (Afghanistan, OLPC)"
#: ../rules/base.xml.in.h:579
-msgid "Right Alt"
-msgstr "Højre Alt"
+msgid "Pause"
+msgstr "Pause"
#: ../rules/base.xml.in.h:580
-msgid "Right Alt (while pressed)"
-msgstr "Højre Alt (mens trykket ned)"
+msgid "Persian"
+msgstr "Persisk"
#: ../rules/base.xml.in.h:581
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Højre Alt vælge femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Persisk (Afghanistan, Dari OLPC)"
#: ../rules/base.xml.in.h:582
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Højre Alt vælge femte niveau, låser når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
+msgid "Persian (with Persian Keypad)"
+msgstr "Persisk (med persisk numerisk tastatur)"
#: ../rules/base.xml.in.h:583
-msgid "Right Alt key never chooses 3rd level"
-msgstr "Højre Alt-tast vælger aldrig tredje niveau"
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Filippinsk - dvorak (baybarin)"
#: ../rules/base.xml.in.h:584
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Højre Alt-tast, Skift+højre Alt-tast er fler_tast"
+msgid "Polish"
+msgstr "Polsk"
#: ../rules/base.xml.in.h:585
-msgid "Right Ctrl"
-msgstr "Højre Ctrl"
+msgid "Polish (Dvorak)"
+msgstr "Polsk (dvorak)"
#: ../rules/base.xml.in.h:586
-msgid "Right Ctrl (while pressed)"
-msgstr "Højre Ctrl-tast (mens trykket ned)"
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Polsk (dvorak, polske anførelsestegn på tast 1)"
#: ../rules/base.xml.in.h:587
-msgid "Right Ctrl as Right Alt"
-msgstr "Højre Ctrl-tast virker som højre Alt"
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Polsk (dvorak, polske anførelsestegn på anførelsestast)"
#: ../rules/base.xml.in.h:588
-msgid "Right Ctrl+Right Shift"
-msgstr "Højre Ctrl+Højre Skift"
+msgid "Polish (Kashubian)"
+msgstr "Polsk (kashubian)"
#: ../rules/base.xml.in.h:589
-msgid "Right Shift"
-msgstr "Højre Skift"
+msgid "Polish (programmer Dvorak)"
+msgstr "Polsk (programmørdvorak)"
#: ../rules/base.xml.in.h:590
-msgid "Right Win"
-msgstr "Højre Win"
+msgid "Polish (qwertz)"
+msgstr "Polsk (qwertz)"
#: ../rules/base.xml.in.h:591
-msgid "Right Win (while pressed)"
-msgstr "Højre Win-tast (mens trykket ned)"
+msgid "Portuguese"
+msgstr "Portugisisk"
#: ../rules/base.xml.in.h:592
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Højre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
+msgid "Portuguese (Brazil)"
+msgstr "Portugisisk (brasiliansk)"
#: ../rules/base.xml.in.h:593
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Højre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Portugisisk (brasiliansk, dvorak)"
#: ../rules/base.xml.in.h:594
-msgid "Right hand"
-msgstr "Højre hånd"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Portugisisk (brasiliansk, slå døde taster fra)"
#: ../rules/base.xml.in.h:595
-msgid "Right handed Dvorak"
-msgstr "Højre hånd dvorak"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Portugisisk (brasiliansk, nativo for esperanto)"
#: ../rules/base.xml.in.h:596
-msgid "Romania"
-msgstr "Rumænien"
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Portugisisk (brasiliansk, nativo for USA-tastaturer)"
#: ../rules/base.xml.in.h:597
-msgid "Romanian keyboard with German letters"
-msgstr "Rumænsk tastatur med tyske bogstaver"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Portugisisk (brasiliansk, nativo)"
#: ../rules/base.xml.in.h:598
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Rumænsk tastatur med tyske bogstaver, eliminer døde taster"
+msgid "Portuguese (Mac)"
+msgstr "Portugisisk (Mac)"
#: ../rules/base.xml.in.h:599
-msgid "Rou"
-msgstr "Rum"
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Portugisisk (Mac, Sun døde taster)"
#: ../rules/base.xml.in.h:600
-msgid "Rupee on 4"
-msgstr "4 rupee"
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Portugisisk (Mac, slå døde taster fra)"
#: ../rules/base.xml.in.h:601
-msgid "Rus"
-msgstr "Rus"
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Portugisisk (nativo for esperanto)"
#: ../rules/base.xml.in.h:602
-msgid "Russia"
-msgstr "Rusland"
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Portugisisk (nativo for USA-tastaturer)"
#: ../rules/base.xml.in.h:603
-msgid "Russian"
-msgstr "Russisk"
+msgid "Portuguese (Nativo)"
+msgstr "Portugisisk (nativo)"
#: ../rules/base.xml.in.h:604
-msgid "Russian phonetic"
-msgstr "Russisk fonetisk"
+msgid "Portuguese (Sun dead keys)"
+msgstr "Portugisisk (Sun døde taster)"
#: ../rules/base.xml.in.h:605
-msgid "Russian phonetic Dvorak"
-msgstr "Russisk fonetisk dvorak"
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Portugisisk (slå døde taster fra)"
#: ../rules/base.xml.in.h:606
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Russisk fonetisk, slå døde taster fra"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:607
-msgid "Russian with Kazakh"
-msgstr "Russisk med kazakh"
+msgid "PrtSc"
+msgstr "Prtsc"
#: ../rules/base.xml.in.h:608
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless Keyboard"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Punjabi (Gurmukhi Jhelum)"
#: ../rules/base.xml.in.h:609
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Punjabi (Gurmukhi)"
+msgstr "Punjabi (Gurmukhi)"
#: ../rules/base.xml.in.h:610
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:611
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Right Alt"
+msgstr "Højre Alt"
#: ../rules/base.xml.in.h:612
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Right Alt (while pressed)"
+msgstr "Højre Alt (mens trykket ned)"
-#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr "SRB"
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Højre Alt vælger femte niveau og låser niveau 5-lås når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
#: ../rules/base.xml.in.h:614
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Højre Alt vælge femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
#: ../rules/base.xml.in.h:615
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Højre Alt vælge femte niveau, låser når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
#: ../rules/base.xml.in.h:616
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "Højre Alt-tast vælger aldrig tredje niveau"
#: ../rules/base.xml.in.h:617
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Højre Alt-tast, Skift+højre Alt-tast er fler_tast"
#: ../rules/base.xml.in.h:618
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+msgid "Right Ctrl"
+msgstr "Højre Ctrl"
#: ../rules/base.xml.in.h:619
-msgid "Secwepemctsin"
-msgstr "Secwepemctsin"
+msgid "Right Ctrl (while pressed)"
+msgstr "Højre Ctrl-tast (mens trykket ned)"
#: ../rules/base.xml.in.h:620
-msgid "Semi-colon on third level"
-msgstr "Semikolon på tredje niveau"
+msgid "Right Ctrl as Right Alt"
+msgstr "Højre Ctrl-tast virker som højre Alt"
#: ../rules/base.xml.in.h:621
-msgid "Sen"
-msgstr "Sen"
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Højre Ctrl ligger på Menu"
#: ../rules/base.xml.in.h:622
-msgid "Senegal"
-msgstr "Senegal"
+msgid "Right Ctrl+Right Shift"
+msgstr "Højre Ctrl+Højre Skift"
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr "Serbien"
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "Højre Skift"
#: ../rules/base.xml.in.h:624
-msgid "Serbian"
-msgstr "Serbisk"
+msgid "Right Win"
+msgstr "Højre Win"
#: ../rules/base.xml.in.h:625
-msgid "Serbo-Croatian"
-msgstr "Serbisk-kroatisk"
+msgid "Right Win (while pressed)"
+msgstr "Højre Win-tast (mens trykket ned)"
#: ../rules/base.xml.in.h:626
-msgid "Shift cancels Caps Lock"
-msgstr "Skift afbryder Caps Lock"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Højre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger"
#: ../rules/base.xml.in.h:627
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Skift afbryder ikke Num Lock, vælger tredje niveau i steden for"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Højre Win-tast vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger, et tryk frigiver låsen"
#: ../rules/base.xml.in.h:628
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Skift med numeriske taster virker som i MS Windows"
+msgid "Romanian"
+msgstr "Rumænsk"
#: ../rules/base.xml.in.h:629
-msgid "Shift+Caps Lock"
-msgstr "Skift+Caps Lock"
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Rumænsk (krimtatarsk Dobruca-1 Q)"
#: ../rules/base.xml.in.h:630
-msgid "Simple"
-msgstr "Simpel"
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Rumænsk (krimtatarsk Dobruca-2 Q)"
#: ../rules/base.xml.in.h:631
-msgid "Sindhi"
-msgstr "Sindhi"
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Rumænsk (krimtatarsk tyrkisk Alt-Q)"
#: ../rules/base.xml.in.h:632
-msgid "Slovakia"
-msgstr "Slovakiet"
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Rumænsk (krimtatarsk tyrkisk F)"
#: ../rules/base.xml.in.h:633
-msgid "Slovenia"
-msgstr "Slovenien"
+msgid "Romanian (WinKeys)"
+msgstr "Rumænsk (Wintaster)"
+# http://da.wikipedia.org/wiki/%C3%87
#: ../rules/base.xml.in.h:634
-msgid "South Africa"
-msgstr "Sydafrika"
+msgid "Romanian (cedilla)"
+msgstr "Rumænsk (cedille)"
#: ../rules/base.xml.in.h:635
-msgid "Southern Uzbek"
-msgstr "Sydlig uzbek"
+msgid "Romanian (standard cedilla)"
+msgstr "Rumænsk (standardcedille)"
#: ../rules/base.xml.in.h:636
-msgid "Spain"
-msgstr "Spanien"
+msgid "Romanian (standard)"
+msgstr "Rumænsk (standard)"
#: ../rules/base.xml.in.h:637
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Specialtaster (Ctrl+Alt+&lt;key&gt;) håndteret i en server"
+msgid "Rupee on 4"
+msgstr "Rupee på 4"
#: ../rules/base.xml.in.h:638
-msgid "Sri Lanka"
-msgstr "Sri Lanka"
+msgid "Russian"
+msgstr "Russisk"
#: ../rules/base.xml.in.h:639
-msgid "Standard"
-msgstr "Standard"
+msgid "Russian (Bashkirian)"
+msgstr "Russisk (bashkirisk)"
#: ../rules/base.xml.in.h:640
-msgid "Standard (Cedilla)"
-msgstr "Standard (Cedilla)"
+msgid "Russian (Chuvash Latin)"
+msgstr "Russisk (chuvash latin)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr "Russisk (chuvash)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:642
-msgid "Standard RSTU"
-msgstr "Standard RSTU"
+msgid "Russian (DOS)"
+msgstr "Russisk (DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr "Russisk (georgisk)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:644
-msgid "Standard RSTU on Russian layout"
-msgstr "Standard-RSTU på russisk layout"
+msgid "Russian (Germany, phonetic)"
+msgstr "Russisk (Tyskland, fonetisk)"
#: ../rules/base.xml.in.h:645
-msgid "Sun Type 5/6"
-msgstr "Sun type 5/6"
+msgid "Russian (Kalmyk)"
+msgstr "Russisk (kalmykisk)"
#: ../rules/base.xml.in.h:646
-msgid "Sun dead keys"
-msgstr "Sun døde taster"
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Russisk (Kasakhstan, med kazakhisk)"
#: ../rules/base.xml.in.h:647
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power Multimedia Keyboard"
+msgid "Russian (Komi)"
+msgstr "Russisk (komi)"
#: ../rules/base.xml.in.h:648
-msgid "Svdvorak"
-msgstr "Svdvorak"
+msgid "Russian (Mari)"
+msgstr "Russisk (mari)"
#: ../rules/base.xml.in.h:649
-msgid "Svk"
-msgstr "Svk"
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Russisk (ossetisk, Wintaster)"
#: ../rules/base.xml.in.h:650
-msgid "Svn"
-msgstr "Svn"
+msgid "Russian (Ossetian, legacy)"
+msgstr "Russisk (ossetisk, forældet)"
#: ../rules/base.xml.in.h:651
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Ombyt Ctrl og Caps Lock"
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Russisk (Polen, fonetisk dvorak)"
#: ../rules/base.xml.in.h:652
-msgid "Swap ESC and Caps Lock"
-msgstr "Ombyt ESC og Caps Lock"
+msgid "Russian (Serbian)"
+msgstr "Russisk (Serbisk)"
#: ../rules/base.xml.in.h:653
-msgid "Swe"
-msgstr "Sve"
+msgid "Russian (Sweden, phonetic)"
+msgstr "Russisk (Sverige, fonetisk)"
#: ../rules/base.xml.in.h:654
-msgid "Sweden"
-msgstr "Sverige"
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Russisk (Sverige, fonetisk, slå døde taster fra)"
#: ../rules/base.xml.in.h:655
-msgid "Switzerland"
-msgstr "Schweiz"
+msgid "Russian (Tatar)"
+msgstr "Russisk (tatarsk)"
#: ../rules/base.xml.in.h:656
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (tablet-pc)"
+msgid "Russian (US, phonetic)"
+msgstr "Russisk (US, fonetisk)"
#: ../rules/base.xml.in.h:657
-msgid "Syr"
-msgstr "Syr"
+msgid "Russian (Udmurt)"
+msgstr "Russisk (udmurt)"
#: ../rules/base.xml.in.h:658
-msgid "Syria"
-msgstr "Syrien"
+msgid "Russian (Yakut)"
+msgstr "Russisk (yakut)"
#: ../rules/base.xml.in.h:659
-msgid "Syriac"
-msgstr "Syrisk"
+msgid "Russian (legacy)"
+msgstr "Russisk (forældet)"
#: ../rules/base.xml.in.h:660
-msgid "Syriac phonetic"
-msgstr "Syrisk fonetisk"
+msgid "Russian (phonetic WinKeys)"
+msgstr "Russisk (fonetisk Wintaster)"
#: ../rules/base.xml.in.h:661
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
+msgid "Russian (phonetic)"
+msgstr "Russisk (fonetisk)"
#: ../rules/base.xml.in.h:662
-msgid "Tajikistan"
-msgstr "Tadjikistan"
+msgid "Russian (typewriter)"
+msgstr "Russisk (skrivemaskine)"
#: ../rules/base.xml.in.h:663
-msgid "Tamil"
-msgstr "Tamil"
+msgid "Russian (typewriter, legacy)"
+msgstr "Russisk (skrivemaskine, forældet)"
#: ../rules/base.xml.in.h:664
-msgid "Tamil Keyboard with Numerals"
-msgstr "Tamilsk tastatur med numre"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless Keyboard"
#: ../rules/base.xml.in.h:665
-msgid "Tamil TAB Typewriter"
-msgstr "Tamil TAB-skrivemaskine"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:666
-msgid "Tamil TSCII Typewriter"
-msgstr "Tamil TSCII-skrivemaskine"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:667
-msgid "Tamil Unicode"
-msgstr "Tamil unicode"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:668
-msgid "Tanzania"
-msgstr "Tanzania"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:669
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:670
-msgid "Tatar"
-msgstr "Tatar"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:671
-msgid "Telugu"
-msgstr "Telugu"
+msgid "Saisiyat (Taiwan)"
+msgstr "Saisiyat (Taiwan)"
#: ../rules/base.xml.in.h:672
-msgid "Tha"
-msgstr "Tha"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:673
-msgid "Thailand"
-msgstr "Thailand"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:674
-msgid "Tibetan"
-msgstr "Tibetansk"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
#: ../rules/base.xml.in.h:675
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Tibetansk (med ASCII-numre)"
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
#: ../rules/base.xml.in.h:676
-msgid "Tifinagh"
-msgstr "Tifinagh"
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
#: ../rules/base.xml.in.h:677
-msgid "Tifinagh alternative"
-msgstr "Tifinagh alternativ"
+msgid "Semi-colon on third level"
+msgstr "Semikolon på tredje niveau"
#: ../rules/base.xml.in.h:678
-msgid "Tifinagh alternative phonetic"
-msgstr "Tifinagh alternativ fonetisk"
+msgid "Serbian"
+msgstr "Serbisk"
#: ../rules/base.xml.in.h:679
-msgid "Tifinagh extended"
-msgstr "Tifinagh udvidet"
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Serbisk (latin unicode qwerty)"
#: ../rules/base.xml.in.h:680
-msgid "Tifinagh extended phonetic"
-msgstr "Tifinagh udvidet fonetisk"
+msgid "Serbian (Latin Unicode)"
+msgstr "Serbisk (latin unicode)"
#: ../rules/base.xml.in.h:681
-msgid "Tifinagh phonetic"
-msgstr "Tifinagh fonetisk"
+msgid "Serbian (Latin qwerty)"
+msgstr "Serbisk (latin qwerty)"
+# guillemets er dem her: »«
#: ../rules/base.xml.in.h:682
-msgid "Tilde (~) variant"
-msgstr "Tilde (~) variant"
+msgid "Serbian (Latin with guillemets)"
+msgstr "Serbisk (latin med anførelsestegnene »«)"
#: ../rules/base.xml.in.h:683
-msgid "Tjk"
-msgstr "Tjk"
+msgid "Serbian (Latin)"
+msgstr "Serbisk (latin)"
+# Pannonian Rusyn or simply Rusyn (Ruthenian) is a Slavic language or dialect spoken
+# in north-western Serbia and eastern Croatia
#: ../rules/base.xml.in.h:684
-msgid "Tkm"
-msgstr "Tkm"
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Serbisk (pannonisk rusyn homofonisk)"
#: ../rules/base.xml.in.h:685
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "Til den tilsvarende tast i et Dvoraktastatur."
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Serbisk (Z og ZHE ombyttet)"
+# guillemets er dem her: »«
#: ../rules/base.xml.in.h:686
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "Til den tilsvarende tast på et Qwertytastatur."
+msgid "Serbian (with guillemets)"
+msgstr "Serbisk (med anførelsestegnene »«)"
#: ../rules/base.xml.in.h:687
-msgid "Toggle PointerKeys with Shift + NumLock."
-msgstr "Skift pegetaster med Skift + NumLock."
+msgid "Serbo-Croatian (US)"
+msgstr "Serbisk-kroatisk (US)"
#: ../rules/base.xml.in.h:688
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
+msgid "Shift cancels Caps Lock"
+msgstr "Skift afbryder Caps Lock"
#: ../rules/base.xml.in.h:689
-msgid "Traditional phonetic"
-msgstr "Traditionel fonetisk"
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Skift afbryder ikke Num Lock, vælger tredje niveau i steden for"
#: ../rules/base.xml.in.h:690
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access Keyboard"
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Skift med numeriske taster virker som i MS Windows"
#: ../rules/base.xml.in.h:691
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+msgid "Shift+Caps Lock"
+msgstr "Skift+Caps Lock"
#: ../rules/base.xml.in.h:692
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
+msgid "Sindhi"
+msgstr "Sindhi"
#: ../rules/base.xml.in.h:693
-msgid "Tur"
-msgstr "Tyr"
+msgid "Sinhala"
+msgstr "Sinhala"
#: ../rules/base.xml.in.h:694
-msgid "Turkey"
-msgstr "Tyrkiet"
+msgid "Slovak"
+msgstr "Slovakisk"
#: ../rules/base.xml.in.h:695
-msgid "Turkmenistan"
-msgstr "Turkmenistan"
+msgid "Slovak (extended Backslash)"
+msgstr "Slovakisk (udvidet omvendt skråstreg)"
#: ../rules/base.xml.in.h:696
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
+msgid "Slovak (qwerty)"
+msgstr "Slovakisk (qwerty)"
#: ../rules/base.xml.in.h:697
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Slovakisk (qwerty, udvidet omvendt skråstreg)"
#: ../rules/base.xml.in.h:698
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
+msgid "Slovene"
+msgstr "Slovensk"
#: ../rules/base.xml.in.h:699
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU-tilstand)"
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Slovensk (US-tastatur med slovenske bogstaver)"
#: ../rules/base.xml.in.h:700
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP-tilstand)"
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Slovensk (anvend »« som anførelsestegn)"
#: ../rules/base.xml.in.h:701
-msgid "Typewriter"
-msgstr "Skrivemaskine"
+msgid "Spanish"
+msgstr "Spansk"
+# Asturian (Asturian: Asturianu or Bable) is a Romance
+# language of the West Iberian group, Astur-Leonese
+# Subgroup, spoken in the Spanish province of Asturias
+# by the Asturian people.
#: ../rules/base.xml.in.h:702
-msgid "Typewriter, legacy"
-msgstr "Skrivemaskine, forældet"
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Spansk (asturisk variant med bundpunktum H og bundpunktum L)"
#: ../rules/base.xml.in.h:703
-msgid "Tza"
-msgstr "Tza"
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Spansk (katalansk variant med midterpunktum L)"
#: ../rules/base.xml.in.h:704
-msgid "UCW layout (accented letters only)"
-msgstr "UCW-layout (kun bogstaver med accent)"
+msgid "Spanish (Dvorak)"
+msgstr "Spansk (dvorak)"
#: ../rules/base.xml.in.h:705
-msgid "US Dvorak with CZ UCW support"
-msgstr "US Dvorak med CZ UCW-understøttelse"
+msgid "Spanish (Latin American)"
+msgstr "Spansk (latinamerikansk)"
#: ../rules/base.xml.in.h:706
-msgid "US keyboard with Bosnian digraphs"
-msgstr "US-tastatur med bosniske digrafer"
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Spansk (latinamerikansk, slå døde taster fra)"
#: ../rules/base.xml.in.h:707
-msgid "US keyboard with Bosnian letters"
-msgstr "US-tastatur med bosniske bogstaver"
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Spansk (latinamerikansk, inkluder død tilde)"
#: ../rules/base.xml.in.h:708
-msgid "US keyboard with Croatian digraphs"
-msgstr "US-tastatur med kroatiske digrafer"
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Spansk (latinamerikansk, sun døde taster)"
#: ../rules/base.xml.in.h:709
-msgid "US keyboard with Croatian letters"
-msgstr "US-tastatur med kroatiske bogstaver"
+msgid "Spanish (Mac)"
+msgstr "Spansk (Mac)"
#: ../rules/base.xml.in.h:710
-msgid "US keyboard with Estonian letters"
-msgstr "US-tastatur med esttiske bogstaver"
+msgid "Spanish (Sun dead keys)"
+msgstr "Spansk (Sun døde taster)"
#: ../rules/base.xml.in.h:711
-msgid "US keyboard with Italian letters"
-msgstr "US-tastatur med italienske bogstaver"
+msgid "Spanish (eliminate dead keys)"
+msgstr "Spansk (slå døde taster fra)"
#: ../rules/base.xml.in.h:712
-msgid "US keyboard with Lithuanian letters"
-msgstr "US-tastatur med litauiske bogstaver"
+msgid "Spanish (include dead tilde)"
+msgstr "Spansk (inkluder død tilde)"
#: ../rules/base.xml.in.h:713
-msgid "US keyboard with Slovenian letters"
-msgstr "US-tastatur med slovenske bogstaver"
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Specialtaster (Ctrl+Alt+&lt;key&gt;) håndteret i en server"
-#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr "USA"
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun type 5/6"
#: ../rules/base.xml.in.h:715
-msgid "Udmurt"
-msgstr "Udmurt"
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power Multimedia Keyboard"
#: ../rules/base.xml.in.h:716
-msgid "Ukr"
-msgstr "Ukr"
+msgid "Swahili (Kenya)"
+msgstr "Swahili (Kenya)"
#: ../rules/base.xml.in.h:717
-msgid "Ukraine"
-msgstr "Ukraine"
+msgid "Swahili (Tanzania)"
+msgstr "Swahili (Tanzania)"
#: ../rules/base.xml.in.h:718
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Unicode tilføjelser (pile og matematiske tegn)"
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Ombyt Ctrl og Caps Lock"
#: ../rules/base.xml.in.h:719
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Unicode tilføjelser (pile og matematiske tegn). Matematiske tegn på standardniveau"
+msgid "Swap ESC and Caps Lock"
+msgstr "Ombyt ESC og Caps Lock"
#: ../rules/base.xml.in.h:720
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+msgid "Swedish"
+msgstr "Svensk"
#: ../rules/base.xml.in.h:721
-msgid "United Kingdom"
-msgstr "United Kingdom"
+msgid "Swedish (Dvorak)"
+msgstr "Svensk (dvorak)"
#: ../rules/base.xml.in.h:722
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+msgid "Swedish (Mac)"
+msgstr "Svensk (Mac)"
#: ../rules/base.xml.in.h:723
-msgid "Urdu, Alternative phonetic"
-msgstr "Urdu, alternativ fonetisk"
+msgid "Swedish (Svdvorak)"
+msgstr "Svensk (svdvorak)"
#: ../rules/base.xml.in.h:724
-msgid "Urdu, Phonetic"
-msgstr "Urdu, fonetisk"
+msgid "Swedish (eliminate dead keys)"
+msgstr "Svensk (slå døde taster fra)"
#: ../rules/base.xml.in.h:725
-msgid "Urdu, Winkeys"
-msgstr "Urdu, Win-taster"
+msgid "Swedish (northern Saami)"
+msgstr "Svensk (nordligt samisk)"
+# der er da ikke noget sprog der hedder det her!!!
#: ../rules/base.xml.in.h:726
-msgid "Use Bosnian digraphs"
-msgstr "Anvend bosniske digrafer"
+msgid "Swiss"
+msgstr "Schweiz"
#: ../rules/base.xml.in.h:727
-msgid "Use Croatian digraphs"
-msgstr "Anvend kroatiske digrafer"
+msgid "Swiss (legacy)"
+msgstr "Schweiz (forældet)"
#: ../rules/base.xml.in.h:728
-msgid "Use guillemets for quotes"
-msgstr "Anvend guillemeter som anførelsestegn"
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet-pc)"
#: ../rules/base.xml.in.h:729
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Brug tastatur-LED til at vise alternativ layout"
+msgid "Syriac"
+msgstr "Syrisk"
#: ../rules/base.xml.in.h:730
-msgid "Using space key to input non-breakable space character"
-msgstr "Brug mellemrum for at indtaste ubrydelig mellemrumskarakter"
+msgid "Syriac (phonetic)"
+msgstr "Syrisk (fonetisk)"
#: ../rules/base.xml.in.h:731
-msgid "Usual space at any level"
-msgstr "Normal mellemrum på alle niveauer"
+msgid "Taiwanese"
+msgstr "Taiwanesisk"
#: ../rules/base.xml.in.h:732
-msgid "Uzb"
-msgstr "Uzb"
+msgid "Taiwanese (indigenous)"
+msgstr "Taiwanesisk (indfødte)"
#: ../rules/base.xml.in.h:733
-msgid "Uzbekistan"
-msgstr "Usbekistan"
+msgid "Tajik"
+msgstr "Tadsjikisk"
#: ../rules/base.xml.in.h:734
-msgid "Vietnam"
-msgstr "Vietnam"
+msgid "Tajik (legacy)"
+msgstr "Tadsjikisk (forældet)"
#: ../rules/base.xml.in.h:735
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "ViewSonic KU-306 Internet Keyboard"
+msgid "Tamil"
+msgstr "Tamilsk"
#: ../rules/base.xml.in.h:736
-msgid "Vnm"
-msgstr "Vnm"
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Tamilsk (Sri Lanka, TAB-skrivemaskine)"
#: ../rules/base.xml.in.h:737
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Wang 724 numerisk tastatur med unicode tilføjelser (pile og matematiske tegn)"
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Tamilsk (Sri Lanka, unicode)"
#: ../rules/base.xml.in.h:738
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Wang 724 numerisk tastatur med unicode tilføjelser (pile og matematiske tegn). Matematiske tegn på standardniveau"
+msgid "Tamil (TAB typewriter)"
+msgstr "Tamilsk (TAB-skrivemaskine)"
#: ../rules/base.xml.in.h:739
-msgid "Wang model 724 azerty"
-msgstr "Wang model 724 azerty"
+msgid "Tamil (TSCII typewriter)"
+msgstr "Tamilsk (TSCII-skrivemaskine)"
#: ../rules/base.xml.in.h:740
-msgid "Western"
-msgstr "Vestlig"
+msgid "Tamil (Unicode)"
+msgstr "Tamilsk (unicode)"
#: ../rules/base.xml.in.h:741
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
+msgid "Tamil (keyboard with numerals)"
+msgstr "Tamilsk (tastatur med numre)"
#: ../rules/base.xml.in.h:742
-msgid "Winkeys"
-msgstr "Win-taster"
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
#: ../rules/base.xml.in.h:743
-msgid "With &lt;\\|&gt; key"
-msgstr "Med &lt;\\|&gt; tast"
+msgid "Telugu"
+msgstr "Telugu"
#: ../rules/base.xml.in.h:744
-msgid "With EuroSign on 5"
-msgstr "Med eurotegn på 5"
+msgid "Thai"
+msgstr "Thai"
#: ../rules/base.xml.in.h:745
-msgid "With guillemets"
-msgstr "Med guillemeter"
+msgid "Thai (Pattachote)"
+msgstr "Thai (pattachote)"
#: ../rules/base.xml.in.h:746
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! Internet Keyboard"
+msgid "Thai (TIS-820.2538)"
+msgstr "Thai (TIS-820.2538)"
#: ../rules/base.xml.in.h:747
-msgid "Yakut"
-msgstr "Yakut"
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "Til den tilsvarende tast i et Dvoraktastatur."
#: ../rules/base.xml.in.h:748
-msgid "Yoruba"
-msgstr "Yoruba"
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "Til den tilsvarende tast på et Qwertytastatur."
#: ../rules/base.xml.in.h:749
-msgid "Z and ZHE swapped"
-msgstr "Z og ZHE ombyttet"
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Skift pegetaster med Skift + NumLock."
#: ../rules/base.xml.in.h:750
-msgid "Zaf"
-msgstr "Zaf"
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
+
+#: ../rules/base.xml.in.h:751
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access Keyboard"
+
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
+
+#: ../rules/base.xml.in.h:753
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
+
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr "Tswana"
+
+#: ../rules/base.xml.in.h:755
+msgid "Turkish"
+msgstr "Tyrkisk"
+
+#: ../rules/base.xml.in.h:756
+msgid "Turkish (Alt-Q)"
+msgstr "Tyrkisk (Alt-Q)"
+
+#: ../rules/base.xml.in.h:757
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Tyrkisk (krimtatarsk tyrkisk Alt-Q)"
+
+#: ../rules/base.xml.in.h:758
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Tyrkisk (krimtatarsk tyrkisk F)"
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Tyrkisk (krimtatarsk tyrkisk Q)"
+
+#: ../rules/base.xml.in.h:760
+msgid "Turkish (F)"
+msgstr "Tyrkisk (F)"
+
+#: ../rules/base.xml.in.h:761
+msgid "Turkish (Sun dead keys)"
+msgstr "Tyrkisk (Sun døde taster)"
+
+#: ../rules/base.xml.in.h:762
+msgid "Turkish (international with dead keys)"
+msgstr "Tyrkisk (international med døde taster)"
+
+#: ../rules/base.xml.in.h:763
+msgid "Turkmen"
+msgstr "Turkmensk"
+
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr "Turkmensk (Alt-Q)"
+
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
+
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
+
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU-tilstand)"
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP-tilstand)"
+
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Ukrainsk"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Ukrainsk (krimtatarsk tyrkisk Alt-Q)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Ukrainsk (krimtatarsk tyrkisk F)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Ukrainsk (krimtatarsk tyrkisk Q)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Ukrainsk (Wintaster)"
+
+# Pannonian Rusyn or simply Rusyn (Ruthenian) is a Slavic language or dialect spoken
+# in north-western Serbia and eastern Croatia
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Ukrainsk (homofonisk)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Ukrainsk (forældet)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Ukrainsk (fonetisk)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Ukrainsk (standard-RSTU på russisk layout)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Ukrainsk (standard RSTU)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Ukrainsk (skrivemaskine)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Unicode tilføjelser (pile og matematiske tegn)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Unicode tilføjelser (pile og matematiske tegn). Matematiske tegn på standardniveau"
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Urdu (Pakistan)"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Urdu (Pakistan, CRULP)"
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Urdu (Pakistan, NLA)"
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Urdu (Win-taster)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Urdu (alternativ fonetisk)"
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Urdu (fonetisk)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Brug tastatur-LED til at vise alternativ layout"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Brug mellemrum for at indtaste ubrydelig mellemrumskarakter"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Normal mellemrum på alle niveauer"
+
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Usbekisk"
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Usbekisk (Afghanistan)"
+
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Usbekisk (Afghanistan, OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Usbekisk (krimtatarsk tyrkisk Alt-Q)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Usbekisk (krimtatarsk tyrkisk F)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Usbekisk (krimtatarsk tyrkisk Q)"
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Usbekisk (latin)"
+
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "Vietnamesisk"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 Internet Keyboard"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Wang 724 numerisk tastatur med unicode tilføjelser (pile og matematiske tegn)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Wang 724 numerisk tastatur med unicode tilføjelser (pile og matematiske tegn). Matematiske tegn på standardniveau"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Wolof"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! Internet Keyboard"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Yoruba"
# The zero-width non-joiner (ZWNJ) is a non-printing character used in the computerized
# typesetting of some cursive scripts, or other scripts which make use of ligatures,
@@ -3058,100 +3300,521 @@ msgstr "Zaf"
# is desirable to keep the words closer together. The ZWNJ is represented in Unicode
# is U+200C, and can be represented in HTML as &#x200C;, &#8204; or &zwnj;. Kilde eng.
# wikipedia 12. maj 2010
-#: ../rules/base.xml.in.h:751
+#: ../rules/base.xml.in.h:808
msgid "Zero-width non-joiner character at second level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau"
-#: ../rules/base.xml.in.h:752
+#: ../rules/base.xml.in.h:809
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:753
+#: ../rules/base.xml.in.h:810
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt på mellemrum på tredje niveau"
-#: ../rules/base.xml.in.h:754
+#: ../rules/base.xml.in.h:811
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:755
+#: ../rules/base.xml.in.h:812
msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ubrydeligt mellemrumstegn på tredje niveau, ubrydeligt mellemrumstegn (ZWNJ) på fjerde niveau"
-#: ../rules/base.xml.in.h:756
+#: ../rules/base.xml.in.h:813
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ombrydeligt mellemrumstegn på tredje niveau"
-#: ../rules/base.xml.in.h:757
+#: ../rules/base.xml.in.h:814
msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau, ombrydeligt mellemrumstegn på tredje niveau, ubrydeligt mellemrumsteng på fjerde niveau"
-#: ../rules/base.xml.in.h:758
+#: ../rules/base.xml.in.h:815
msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på tredje niveau, ombrydeligt mellemrumstegn på fjerde niveau"
-#: ../rules/base.xml.in.h:759
-msgid "azerty"
-msgstr "azerty"
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
-#: ../rules/base.xml.in.h:760
-msgid "azerty/digits"
-msgstr "azerty/cifre"
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
-#: ../rules/base.xml.in.h:761
-msgid "digits"
-msgstr "cifre"
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
-#: ../rules/base.xml.in.h:762
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "forkert placeret semikolon og anførelsestegn (forældet)"
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
-#: ../rules/base.xml.in.h:763
-msgid "lyx"
-msgstr "lyx"
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
-#: ../rules/base.xml.in.h:764
-msgid "qwerty"
-msgstr "qwerty"
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
-#: ../rules/base.xml.in.h:765
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, udvidet omvendt skråstreg"
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
-#: ../rules/base.xml.in.h:766
-msgid "qwerty/digits"
-msgstr "qwerty/cifre"
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
-#: ../rules/base.xml.in.h:767
-msgid "qwertz"
-msgstr "qwertz"
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
+
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
+
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
#: ../rules/base.extras.xml.in.h:1
msgid "APL"
msgstr "APL"
#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Atsina"
+msgid "Iran"
+msgstr "Iran"
# Avestisk er et uddødt iransk sprog
#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr "Avestisk"
+msgid "Iran - Avestan"
+msgstr "Iran - avestisk"
#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr "Sammensætte accenter fremfor døde taster"
+msgid "Lithuania"
+msgstr "Litauen"
-# http://en.wikipedia.org/wiki/Interior_Salish_languages
#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr "Couer D'alene Salish"
+msgid "Lithuania - Dvorak"
+msgstr "Litauisk - dvorak"
#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr "International (AltGr Unicode sammensætning)"
+msgid "Ltu"
+msgstr "Lit"
#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "International (AltGr Unicode sammensætning, alternativ)"
+msgid "Romania"
+msgstr "Rumænien"
+
+# touchtype = blindskrift (altså at skrive uden at kigge)
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Rumænien - ergonomisk maskinskrivning"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rum"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Rusland"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Serbien"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Serbien - sammensætte accenter frem for døde taster"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "USA"
+
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "USA - Atsina"
+
+# http://en.wikipedia.org/wiki/Interior_Salish_languages
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "USA - Couer D'alene Salish"
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "USA - International (AltGr Unicode sammensætning)"
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "USA - International (AltGr Unicode sammensætning, alternativ)"
diff --git a/xorg-server/xkeyboard-config/po/de.po b/xorg-server/xkeyboard-config/po/de.po
index 50a43f3cd..2d36d3416 100644
--- a/xorg-server/xkeyboard-config/po/de.po
+++ b/xorg-server/xkeyboard-config/po/de.po
@@ -5,12 +5,13 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.1-pre1\n"
+"Project-Id-Version: xkeyboard-config-2.1.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2011-01-12 00:16+0000\n"
-"PO-Revision-Date: 2011-01-12 19:11+0100\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-03-26 20:56+0100\n"
"Last-Translator: Mario Blättermann <mariobl@gnome.org>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\n"
+"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -22,3301 +23,3733 @@ msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Kleiner als/größer als&gt;"
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Kleiner als/Größer als&gt; wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Kleiner als/Größer als&gt; wählt die dritte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Kleiner als/Größer als&gt; wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Kleiner als/Größer als&gt; wählt die fünfte Ebene, aktiviert die Sperrung der fünften Ebene wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr "(F)"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Kleiner als/Größer als&gt; wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr "Alternative (veraltet)"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Kleiner als/Größer als&gt; wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "Alternative (veraltet), Sun-Akzenttasten"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "Alternative (veraltet), ohne Akzenttasten"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr "101/104-Tasten kompatibel"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/Komma/Akzenttasten"
+msgid "ATM/phone-style"
+msgstr "ATM/Telefonstil"
#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/Komma/ohne Akzenttasten"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/Punkt/Akzenttasten"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/Punkt/ohne Akzenttasten"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/Komma/Akzenttasten"
+msgid "Acer Laptop"
+msgstr "Acer Laptop"
#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwertz/Komma/ohne Akzenttasten"
+msgid "Add the standard behavior to Menu key"
+msgstr "Standardverhalten zur Menütaste hinzufügen"
#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/Punkt/Akzenttasten"
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Esperanto-Circumflex (^) hinzufügen (supersigno)"
#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/Punkt/ohne Akzenttasten"
+msgid "Adding currency signs to certain keys"
+msgstr "Währungssymbole zu verschiedenen Tasten hinzufügen"
#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/Komma/Akzenttasten"
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/Komma/ohne Akzenttasten"
+msgid "Afg"
+msgstr "Afg"
#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/Punkt/Akzenttasten"
+msgid "Afghani"
+msgstr "Afghani"
#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/Punkt/ohne Akzenttasten"
+msgid "Akan"
+msgstr "Akan"
#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/Komma/Akzenttasten"
+msgid "Albanian"
+msgstr "Albanisch"
#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/Komma/ohne Akzenttasten"
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt und Meta befinden sich auf den Alt-Tasten."
#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/Punkt/Akzenttasten"
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt ist der rechten Win-Taste zugeordnet und Super der Menü-Taste."
#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/Punkt/ohne Akzenttasten"
+msgid "Alt+Caps Lock"
+msgstr "Alt+Feststelltaste"
#: ../rules/base.xml.in.h:25
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Alt+Ctrl"
+msgstr "Alt+Strg"
#: ../rules/base.xml.in.h:26
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Alt+Shift"
+msgstr "Alt+Umschalttaste"
#: ../rules/base.xml.in.h:27
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
+msgid "Alt+Space"
+msgstr "Alt+Leertaste"
#: ../rules/base.xml.in.h:28
-msgid "ATM/phone-style"
-msgstr "ATM/Telefonstil"
+msgid "Alt/Win key behavior"
+msgstr "Verhalten der Alt/Windows-Tasten"
#: ../rules/base.xml.in.h:29
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Amharic"
+msgstr "Amharisch"
#: ../rules/base.xml.in.h:30
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Any Alt key"
+msgstr "Beliebige Alt-Taste"
#: ../rules/base.xml.in.h:31
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Any Win key"
+msgstr "Beliebige Windows-Taste"
#: ../rules/base.xml.in.h:32
-msgid "Acer Laptop"
-msgstr "Acer Laptop"
+msgid "Any Win key (while pressed)"
+msgstr "Beliebige Windows-Taste (gedrückt halten)"
#: ../rules/base.xml.in.h:33
-msgid "Add the standard behavior to Menu key"
-msgstr "Standardverhalten zur Menütaste hinzufügen"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:34
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Esperanto-Circumflex (^) hinzufügen (supersigno)"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Apple Aluminium Keyboard (ANSI)"
#: ../rules/base.xml.in.h:35
-msgid "Adding currency signs to certain keys"
-msgstr "Währungssymbole zu verschiedenen Tasten hinzufügen"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Apple Aluminium Keyboard (ISO)"
#: ../rules/base.xml.in.h:36
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Apple Aluminium Keyboard (JIS)"
#: ../rules/base.xml.in.h:37
-msgid "Afg"
-msgstr "Afg"
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Apple Aluminium Keyboard: PC-Tasten emulieren (Druck, Scroll_Lock, Pause, NumLock)"
#: ../rules/base.xml.in.h:38
-msgid "Afghanistan"
-msgstr "Afghanistan"
+msgid "Apple Laptop"
+msgstr "Apple-Laptop"
#: ../rules/base.xml.in.h:39
-msgid "Akan"
-msgstr "Akan"
+msgid "Arabic"
+msgstr "Arabisch"
#: ../rules/base.xml.in.h:40
-msgid "Alb"
-msgstr "Alb"
+msgid "Arabic (Buckwalter)"
+msgstr "Arabisch (Buckwalter)"
#: ../rules/base.xml.in.h:41
-msgid "Albania"
-msgstr "Albanien"
+msgid "Arabic (Morocco)"
+msgstr "Arabisch (Marokko)"
#: ../rules/base.xml.in.h:42
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt und Meta befinden sich auf den Alt-Tasten."
+msgid "Arabic (Pakistan)"
+msgstr "Arabisch (Pakistan)"
#: ../rules/base.xml.in.h:43
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt ist der rechten Win-Taste zugeordnet und Super der Menü-Taste."
+msgid "Arabic (Syria)"
+msgstr "Arabisch (Syrien)"
#: ../rules/base.xml.in.h:44
-msgid "Alt+Caps Lock"
-msgstr "Alt+Feststelltaste"
+msgid "Arabic (azerty)"
+msgstr "Arabisch (azerty)"
#: ../rules/base.xml.in.h:45
-msgid "Alt+Ctrl"
-msgstr "Alt+Strg"
+msgid "Arabic (azerty/digits)"
+msgstr "Arabisch (azerty/Ziffern)"
#: ../rules/base.xml.in.h:46
-msgid "Alt+Shift"
-msgstr "Alt+Umschalttaste"
+msgid "Arabic (digits)"
+msgstr "Arabisch (Ziffern)"
#: ../rules/base.xml.in.h:47
-msgid "Alt+Space"
-msgstr "Alt+Leertaste"
+msgid "Arabic (qwerty)"
+msgstr "Arabisch (qwerty)"
#: ../rules/base.xml.in.h:48
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Arabic (qwerty/digits)"
+msgstr "Arabisch (qwerty/Ziffern)"
#: ../rules/base.xml.in.h:49
-msgid "Alt/Win key behavior"
-msgstr "Verhalten der Alt/Windows-Tasten"
+msgid "Armenian"
+msgstr "Armenisch"
#: ../rules/base.xml.in.h:50
-msgid "Alternative"
-msgstr "Alternative"
+msgid "Armenian (alternative eastern)"
+msgstr "Armenisch (Alternative, östlich)"
#: ../rules/base.xml.in.h:51
-msgid "Alternative Eastern"
-msgstr "Alternative, östlich"
+msgid "Armenian (alternative phonetic)"
+msgstr "Armenisch (alternativ, phonetisch)"
#: ../rules/base.xml.in.h:52
-msgid "Alternative Phonetic"
-msgstr "Alternative, phonetisch"
+msgid "Armenian (eastern)"
+msgstr "Armenisch (östlich)"
#: ../rules/base.xml.in.h:53
-msgid "Alternative international"
-msgstr "Alternative international"
+msgid "Armenian (phonetic)"
+msgstr "Armenisch (phonetisch)"
#: ../rules/base.xml.in.h:54
-msgid "Alternative, Sun dead keys"
-msgstr "Alternative, Sun-Akzenttasten"
+msgid "Armenian (western)"
+msgstr "Armenisch (westlich)"
#: ../rules/base.xml.in.h:55
-msgid "Alternative, eliminate dead keys"
-msgstr "Alternative, ohne Akzenttasten"
+msgid "Asus Laptop"
+msgstr "Asus-Laptop"
#: ../rules/base.xml.in.h:56
-msgid "Alternative, latin-9 only"
-msgstr "Alternative, nur latin-9"
+msgid "At bottom left"
+msgstr "Unten links"
#: ../rules/base.xml.in.h:57
-msgid "And"
-msgstr "And"
+msgid "At left of 'A'"
+msgstr "Links von »A«"
#: ../rules/base.xml.in.h:58
-msgid "Andorra"
-msgstr "Andorra"
+msgid "Avatime"
+msgstr "Avatime"
#: ../rules/base.xml.in.h:59
-msgid "Any Alt key"
-msgstr "Beliebige Alt-Taste"
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Aserbaidschanisch (kyrillisch)"
#: ../rules/base.xml.in.h:60
-msgid "Any Win key"
-msgstr "Beliebige Windows-Taste"
+msgid "Azerbaijani"
+msgstr "Aserbaidschanisch"
#: ../rules/base.xml.in.h:61
-msgid "Any Win key (while pressed)"
-msgstr "Beliebige Windows-Taste (gedrückt halten)"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 wireless Internet Keyboard"
#: ../rules/base.xml.in.h:62
-msgid "Apostrophe (') variant"
-msgstr "Apostroph-Variante (')"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:63
-msgid "Apple"
-msgstr "Apple"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimedia"
#: ../rules/base.xml.in.h:64
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Apple Aluminium Keyboard (ANSI)"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:65
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Apple Aluminium Keyboard (ISO)"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:66
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Apple Aluminium Keyboard (JIS)"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Apple Aluminium Keyboard: PC-Tasten emulieren (Druck, Scroll_Lock, Pause, NumLock)"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:68
-msgid "Apple Laptop"
-msgstr "Apple-Laptop"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:69
-msgid "Ara"
-msgstr "Ara"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:70
-msgid "Arabic"
-msgstr "Arabisch"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
#: ../rules/base.xml.in.h:71
-msgid "Arm"
-msgstr "Arm"
+msgid "Backslash"
+msgstr "Backslash"
#: ../rules/base.xml.in.h:72
-msgid "Armenia"
-msgstr "Armenien"
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Backslash wählt die dritte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
#: ../rules/base.xml.in.h:73
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Asturische Variante mit unterpunktetem L und H"
+msgid "Bambara"
+msgstr "Bambara"
#: ../rules/base.xml.in.h:74
-msgid "Asus Laptop"
-msgstr "Asus-Laptop"
+msgid "Belarusian"
+msgstr "Weißrussisch"
#: ../rules/base.xml.in.h:75
-msgid "At bottom left"
-msgstr "Unten links"
+msgid "Belarusian (Latin)"
+msgstr "Weißrussisch (Lateinisch)"
#: ../rules/base.xml.in.h:76
-msgid "At left of 'A'"
-msgstr "Links von »A«"
+msgid "Belarusian (legacy)"
+msgstr "Weißrussisch (veraltet)"
#: ../rules/base.xml.in.h:77
-msgid "Austria"
-msgstr "Österreich"
+msgid "Belgian"
+msgstr "Belgisch"
#: ../rules/base.xml.in.h:78
-msgid "Aut"
-msgstr "Aut"
+msgid "Belgian (ISO alternate)"
+msgstr "Belgisch (ISO-Alternative)"
#: ../rules/base.xml.in.h:79
-msgid "Avatime"
-msgstr "Avatime"
+msgid "Belgian (Sun dead keys)"
+msgstr "Belgisch (Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:80
-msgid "Aze"
-msgstr "Aze"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belgisch (Wang Modell 724, azerty)"
#: ../rules/base.xml.in.h:81
-msgid "Azerbaijan"
-msgstr "Aserbaidschan"
+msgid "Belgian (alternative)"
+msgstr "Belgisch (Alternative)"
#: ../rules/base.xml.in.h:82
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 wireless Internet Keyboard"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belgisch (Alternative, Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:83
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belgisch (Alternative, nur latin-9)"
#: ../rules/base.xml.in.h:84
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF Multimedia"
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belgisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:85
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:86
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:87
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:88
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Bengali"
+msgstr "Bengalisch"
#: ../rules/base.xml.in.h:89
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Bengali (Probhat)"
+msgstr "Bengalisch (Probhat)"
#: ../rules/base.xml.in.h:90
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Berber (Marokko, Tifinagh alternativ, phonetisch)"
#: ../rules/base.xml.in.h:91
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "TBerber (Marokko, Tifinagh alternativ)"
#: ../rules/base.xml.in.h:92
-msgid "Backslash"
-msgstr "Backslash"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Berber (Marokko, Tifinagh erweitert, phonetisch)"
#: ../rules/base.xml.in.h:93
-msgid "Bangladesh"
-msgstr "Bangladesch"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Berber (Marokko, Tifinagh erweitert)"
#: ../rules/base.xml.in.h:94
-msgid "Bashkirian"
-msgstr "Baschkirisch"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Berber (Marokko, Tifinagh phonetisch)"
#: ../rules/base.xml.in.h:95
-msgid "Bel"
-msgstr "Bel"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Berber (Marokko, Tifinagh)"
#: ../rules/base.xml.in.h:96
-msgid "Belarus"
-msgstr "Weißrussland"
+msgid "Bosnian"
+msgstr "Bosnisch"
#: ../rules/base.xml.in.h:97
-msgid "Belgium"
-msgstr "Belgien"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bosnisch (US-Tastatur mit bosnischen Digraphen)"
#: ../rules/base.xml.in.h:98
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bosnisch (US-Tastatur mit bosnischen Buchstaben)"
#: ../rules/base.xml.in.h:99
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bosnisch (Bosnische Digraphen verwenden)"
#: ../rules/base.xml.in.h:100
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bosnisch (Anführungszeichen für Zitate verwenden)"
#: ../rules/base.xml.in.h:101
-msgid "Bengali"
-msgstr "Bengalisch"
+msgid "Both Alt keys together"
+msgstr "Beide Alt-Tasten gleichzeitig"
#: ../rules/base.xml.in.h:102
-msgid "Bengali Probhat"
-msgstr "Bengali Probhat"
+msgid "Both Ctrl keys together"
+msgstr "Beide Steuerungstasten gleichzeitig"
#: ../rules/base.xml.in.h:103
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ergonomisch, Dvorak-ähnlich"
+msgid "Both Shift keys together"
+msgstr "Beide Umschalttasten gleichzeitig"
#: ../rules/base.xml.in.h:104
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ergonomisch, Dvorak-ähnlich, nur latin-9"
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein und aus, eine Umschalttaste deaktiviert"
#: ../rules/base.xml.in.h:105
-msgid "Bgd"
-msgstr "Bgd"
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein und aus"
#: ../rules/base.xml.in.h:106
-msgid "Bgr"
-msgstr "Bgr"
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Beide Umschalttasten gleichzeitig schalten ShiftLock ein und aus"
#: ../rules/base.xml.in.h:107
-msgid "Bhutan"
-msgstr "Bhutan"
+msgid "Braille"
+msgstr "Braille"
#: ../rules/base.xml.in.h:108
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Althebräisch (Tiro)"
+msgid "Braille (left hand)"
+msgstr "Braille (linkshändig)"
#: ../rules/base.xml.in.h:109
-msgid "Bih"
-msgstr "Bih"
+msgid "Braille (right hand)"
+msgstr "Braille (rechtshändig)"
#: ../rules/base.xml.in.h:110
-msgid "Blr"
-msgstr "Blr"
+msgid "Brother Internet Keyboard"
+msgstr "Brother Internet Keyboard"
#: ../rules/base.xml.in.h:111
-msgid "Bosnia and Herzegovina"
-msgstr "Bosnien-Herzegowina"
+msgid "Bulgarian"
+msgstr "Bulgarisch"
#: ../rules/base.xml.in.h:112
-msgid "Both Alt keys together"
-msgstr "Beide Alt-Tasten gleichzeitig"
+msgid "Bulgarian (new phonetic)"
+msgstr "Bulgarisch (neu phonetisch)"
#: ../rules/base.xml.in.h:113
-msgid "Both Ctrl keys together"
-msgstr "Beide Steuerungstasten gleichzeitig"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Bulgarisch (traditionell phonetisch)"
#: ../rules/base.xml.in.h:114
-msgid "Both Shift keys together"
-msgstr "Beide Umschalttasten gleichzeitig"
+msgid "Burmese"
+msgstr "Burmesisch"
#: ../rules/base.xml.in.h:115
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein und aus"
+msgid "Canadian Multilingual"
+msgstr "Kanadisch, mehrsprachig"
#: ../rules/base.xml.in.h:116
-msgid "Botswana"
-msgstr "Botswana"
+msgid "Canadian Multilingual (first part)"
+msgstr "Kanadisch, mehrsprachig (erster Teil)"
#: ../rules/base.xml.in.h:117
-msgid "Bra"
-msgstr "Bra"
+msgid "Canadian Multilingual (second part)"
+msgstr "Kanadisch, mehrsprachig (zweiter Teil)"
#: ../rules/base.xml.in.h:118
-msgid "Braille"
-msgstr "Braille"
+msgid "Caps Lock"
+msgstr "Feststelltaste"
#: ../rules/base.xml.in.h:119
-msgid "Brazil"
-msgstr "Brasilien"
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Feststelltaste wählt die dritte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene"
#: ../rules/base.xml.in.h:120
-msgid "Breton"
-msgstr "Bretonisch"
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Feststelltaste (zur ersten Belegung), Umschalttaste+Feststelltaste (zur letzten Belegung)"
#: ../rules/base.xml.in.h:121
-msgid "Brl"
-msgstr "Brl"
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Feststelltaste (gedrückt halten), Alt+Feststelltaste führen die normale Feststelltasten-Aktion aus"
#: ../rules/base.xml.in.h:122
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internet Keyboard"
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Feststelltaste arbeitet als Umschalttaste mit Sperrung. Umschalttaste »unterbricht« Feststelltaste"
#: ../rules/base.xml.in.h:123
-msgid "Btn"
-msgstr "Btn"
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Feststelltaste arbeitet als Umschalttaste mit Sperrung. Umschalttaste beeinflusst Feststelltaste nicht"
#: ../rules/base.xml.in.h:124
-msgid "Buckwalter"
-msgstr "Buckwalter"
+msgid "Caps Lock is disabled"
+msgstr "Feststelltaste ist deaktiviert"
#: ../rules/base.xml.in.h:125
-msgid "Bulgaria"
-msgstr "Bulgarien"
+msgid "Caps Lock key behavior"
+msgstr "Verhalten der Feststelltaste"
#: ../rules/base.xml.in.h:126
-msgid "Bwa"
-msgstr "Bwa"
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Feststelltaste kehrt Umschalttaste um, so dass alle Tasten beeinflusst werden"
#: ../rules/base.xml.in.h:127
-msgid "COD"
-msgstr "COD"
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Feststelltaste kehrt die normale Großschreibung alphabetischer Zeichen um"
#: ../rules/base.xml.in.h:128
-msgid "CRULP"
-msgstr "CRULP"
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste »unterbricht« Feststelltaste"
#: ../rules/base.xml.in.h:129
-msgid "Cambodia"
-msgstr "Kambodscha"
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste beeinflusst Feststelltaste nicht"
#: ../rules/base.xml.in.h:130
-msgid "Can"
-msgstr "Can"
+msgid "Catalan"
+msgstr "Katalanisch"
#: ../rules/base.xml.in.h:131
-msgid "Canada"
-msgstr "Kanada"
+msgid "Cherokee"
+msgstr "Cherokee"
#: ../rules/base.xml.in.h:132
-msgid "Capewell-Dvorak (Baybayin)"
-msgstr "Capewell-Dvorak (Baybayin)"
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
#: ../rules/base.xml.in.h:133
-msgid "Capewell-Dvorak (Latin)"
-msgstr "Capewell-Dvorak (Lateinisch)"
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
#: ../rules/base.xml.in.h:134
-msgid "Capewell-QWERF 2006 (Baybayin)"
-msgstr "Capewell-QWERF 2006 (Baybayin)"
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (alternative Option)"
#: ../rules/base.xml.in.h:135
-msgid "Capewell-QWERF 2006 (Latin)"
-msgstr "Capewell-QWERF 2006 (Lateinisch)"
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
#: ../rules/base.xml.in.h:136
-msgid "Caps Lock"
-msgstr "Feststelltaste"
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
#: ../rules/base.xml.in.h:137
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "Feststelltaste (zur ersten Belegung), Umschalttaste+Feststelltaste (zur letzten Belegung)"
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:138
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "Feststelltaste (gedrückt halten), Alt+Feststelltaste führen die normale Feststelltasten-Aktion aus"
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "Feststelltaste arbeitet als Umschalttaste mit Sperrung. Umschalttaste »unterbricht« Feststelltaste"
+msgid "Chicony Internet Keyboard"
+msgstr "Chicony Internet Keyboard"
#: ../rules/base.xml.in.h:140
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "Feststelltaste arbeitet als Umschalttaste mit Sperrung. Umschalttaste beeinflusst Feststelltaste nicht"
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
#: ../rules/base.xml.in.h:141
-msgid "Caps Lock is disabled"
-msgstr "Feststelltaste ist deaktiviert"
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
#: ../rules/base.xml.in.h:142
-msgid "Caps Lock key behavior"
-msgstr "Verhalten der Feststelltaste"
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "Feststelltaste kehrt Umschalttaste um, so dass alle Tasten beeinflusst werden"
+msgid "Chinese"
+msgstr "Chinesisch"
#: ../rules/base.xml.in.h:144
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr "Feststelltaste kehrt die normale Großschreibung alphabetischer Zeichen um"
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Chinesisch (Tibetanisch, mit ASCII-Ziffern)"
#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste »unterbricht« Feststelltaste"
+msgid "Chinese (Tibetan)"
+msgstr "Chinesisch (Tibetanisch)"
#: ../rules/base.xml.in.h:146
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste beeinflusst Feststelltaste nicht"
+msgid "Chinese (Uyghur)"
+msgstr "Chinesisch (Uigurisch)"
#: ../rules/base.xml.in.h:147
-msgid "Catalan variant with middle-dot L"
-msgstr "Katalanische Variante mit mittelpunktiertem L"
+msgid "Classmate PC"
+msgstr "Classmate PC"
#: ../rules/base.xml.in.h:148
-msgid "Cedilla"
-msgstr "Cedilla"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access Keyboard"
#: ../rules/base.xml.in.h:149
-msgid "Che"
-msgstr "Che"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internet Keyboard (13 Tasten)"
#: ../rules/base.xml.in.h:150
-msgid "Cherokee"
-msgstr "Cherokee"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internet Keyboard (18 Tasten)"
#: ../rules/base.xml.in.h:151
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UNLIMITED"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internet Keyboard (7 Tasten)"
#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq Keyboard"
#: ../rules/base.xml.in.h:153
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (alternative Option)"
+msgid "Compose key position"
+msgstr "Position der Compose-Taste"
#: ../rules/base.xml.in.h:154
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
+msgid "Control + Alt + Backspace"
+msgstr "Strg + Alt + Löschtaste"
#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Strg ist den Alt-Tasten zugeordnet, Alt ist den Windows-Tasten zugeordnet"
#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Strg ist den Win-Tasten zugeordnet (und den üblichen Strg-Tasten)"
#: ../rules/base.xml.in.h:157
-msgid "Cherry CyMotion Master XPress"
-msgstr "Cherry CyMotion Master XPress"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
#: ../rules/base.xml.in.h:158
-msgid "Chicony Internet Keyboard"
-msgstr "Chicony Internet Keyboard"
+msgid "Croatian"
+msgstr "Kroatisch"
#: ../rules/base.xml.in.h:159
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Kroatisch (US-Tastatur mit kroatischen Digraphen)"
#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Kroatisch (US-Tastatur mit kroatischen Buchstaben)"
#: ../rules/base.xml.in.h:161
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Kroatisch (Kroatische Digraphen verwenden)"
#: ../rules/base.xml.in.h:162
-msgid "China"
-msgstr "China"
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Kroatisch (Anführungszeichen für Zitate verwenden)"
#: ../rules/base.xml.in.h:163
-msgid "Chn"
-msgstr "Chn"
+msgid "Ctrl key position"
+msgstr "Position der Strg-Taste"
#: ../rules/base.xml.in.h:164
-msgid "Chuvash"
-msgstr "Tschuwaschisch"
+msgid "Ctrl+Shift"
+msgstr "Strg+Umschalttaste"
#: ../rules/base.xml.in.h:165
-msgid "Chuvash Latin"
-msgstr "Tschuwaschisch (lateinische Schrift)"
+msgid "Czech"
+msgstr "Tschechisch"
#: ../rules/base.xml.in.h:166
-msgid "Classic"
-msgstr "Klassisch"
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Tschechisch (UCW-Belegung, nur akzentuierte Buchstaben)"
#: ../rules/base.xml.in.h:167
-msgid "Classic Dvorak"
-msgstr "Dvorak (klassisch)"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Tschechisch (US Dvorak mit CZ-UCW-Unterstützung)"
#: ../rules/base.xml.in.h:168
-msgid "Classic, eliminate dead keys"
-msgstr "Klassisch, ohne Akzenttasten"
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Tschechisch (mit &lt;\\|&gt;-Taste)"
#: ../rules/base.xml.in.h:169
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Czech (qwerty)"
+msgstr "Tschechisch (qwerty)"
#: ../rules/base.xml.in.h:170
-msgid "CloGaelach"
-msgstr "CloGaelach"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Tschechisch (qwerty, erweiterter Backslash)"
#: ../rules/base.xml.in.h:171
-msgid "Colemak"
-msgstr "Colemak"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:172
-msgid "Colemak (Baybayin)"
-msgstr "Colemak (Baybayin)"
+msgid "Danish"
+msgstr "Dänisch"
#: ../rules/base.xml.in.h:173
-msgid "Colemak (Latin)"
-msgstr "Colemak (Lateinisch)"
+msgid "Danish (Dvorak)"
+msgstr "Dänisch (Dvorak)"
#: ../rules/base.xml.in.h:174
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access Keyboard"
+msgid "Danish (Mac)"
+msgstr "Dänisch (Macintosh)"
#: ../rules/base.xml.in.h:175
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internet Keyboard (13 Tasten)"
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Dänisch (Macintosh, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:176
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internet Keyboard (18 Tasten)"
+msgid "Danish (eliminate dead keys)"
+msgstr "Dänisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:177
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internet Keyboard (7 Tasten)"
+msgid "Default numeric keypad keys"
+msgstr "Vorgegebene Nummernblocktasten"
#: ../rules/base.xml.in.h:178
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq Keyboard"
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:179
-msgid "Compose key position"
-msgstr "Position der Compose-Taste"
+msgid "Dell 101-key PC"
+msgstr "Dell PC-Tastatur mit 101 Tasten"
#: ../rules/base.xml.in.h:180
-msgid "Congo, Democratic Republic of the"
-msgstr "Demokratische Republik Kongo"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Dell Laptop/Notebook Inspiron 6xxx/8xxx"
#: ../rules/base.xml.in.h:181
-msgid "Control + Alt + Backspace"
-msgstr "Strg + Alt + Löschtaste"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Dell Laptop/Notebook Precision-M-Serie"
#: ../rules/base.xml.in.h:182
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Strg ist den Alt-Tasten zugeordnet, Alt ist den Windows-Tasten zugeordnet"
+msgid "Dell Latitude series laptop"
+msgstr "Dell Latitude-Laptop"
#: ../rules/base.xml.in.h:183
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Strg ist den Win-Tasten zugeordnet (und den üblichen Strg-Tasten)"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:184
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Krimtatarisch (Dobruca-1 Q)"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Krimtatarisch (Dobruca-2 Q)"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB Multimedia Keybard"
#: ../rules/base.xml.in.h:187
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Krimtatarisch (Türkisch Alt-Q)"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa Wireless Desktop Keyboard"
#: ../rules/base.xml.in.h:188
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Krimtatarisch (Türkisch F)"
+msgid "Dhivehi"
+msgstr "Dhivehi"
#: ../rules/base.xml.in.h:189
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Krimtatarisch (Türkisch Q)"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond 9801 / 9802-Serie"
#: ../rules/base.xml.in.h:190
-msgid "Croatia"
-msgstr "Kroatien"
+msgid "Dutch"
+msgstr "Niederländisch"
#: ../rules/base.xml.in.h:191
-msgid "Ctrl key position"
-msgstr "Position der Strg-Taste"
+msgid "Dutch (Mac)"
+msgstr "Niederländisch (Mac)"
#: ../rules/base.xml.in.h:192
-msgid "Ctrl+Shift"
-msgstr "Strg+Umschalttaste"
+msgid "Dutch (Sun dead keys)"
+msgstr "Niederländisch (Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:193
-msgid "Cyrillic"
-msgstr "Kyrillisch"
+msgid "Dutch (standard)"
+msgstr "Niederländisch (Standard)"
#: ../rules/base.xml.in.h:194
-msgid "Cyrillic with guillemets"
-msgstr "Kyrillisch mit Anführungszeichen"
+msgid "Dzongkha"
+msgstr "Dzongkha"
#: ../rules/base.xml.in.h:195
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Kyrillisch, »З« und »Ж« vertauscht"
+msgid "Enable extra typographic characters"
+msgstr "Typographische Sonderzeichen aktivieren"
#: ../rules/base.xml.in.h:196
-msgid "Cze"
-msgstr "Cze"
+msgid "English (Canada)"
+msgstr "Englisch (Kanada)"
#: ../rules/base.xml.in.h:197
-msgid "Czechia"
-msgstr "Tschechien"
+msgid "English (Colemak)"
+msgstr "Englisch (Colemak)"
#: ../rules/base.xml.in.h:198
-msgid "DOS"
-msgstr "DOS"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Englisch (Dvorak Alternative international, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:199
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "English (Dvorak international with dead keys)"
+msgstr "Englisch (Dvorak International, mit Akzenttasten)"
#: ../rules/base.xml.in.h:200
-msgid "Dead acute"
-msgstr "Ohne Acute-(')Akzentzeichen"
+msgid "English (Dvorak)"
+msgstr "Englisch (Dvorak)"
#: ../rules/base.xml.in.h:201
-msgid "Dead grave acute"
-msgstr "Ohne Grave-(`) und Acute-(')Akzentzeichen"
+msgid "English (Ghana)"
+msgstr "Englisch (Ghana)"
#: ../rules/base.xml.in.h:202
-msgid "Default numeric keypad keys"
-msgstr "Vorgegebene Nummernblocktasten"
+msgid "English (Ghana, GILLBT)"
+msgstr "Englisch (Ghana, GILLBT)"
#: ../rules/base.xml.in.h:203
-msgid "Dell"
-msgstr "Dell"
+msgid "English (Ghana, multilingual)"
+msgstr "Englisch (Ghana, mehrsprachig)"
#: ../rules/base.xml.in.h:204
-msgid "Dell 101-key PC"
-msgstr "Dell PC-Tastatur mit 101 Tasten"
+msgid "English (India, with RupeeSign)"
+msgstr "Englisch (Indien, mit Rupie-Symbol)"
#: ../rules/base.xml.in.h:205
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Dell Laptop/Notebook Inspiron 6xxx/8xxx"
+msgid "English (Macintosh)"
+msgstr "Englisch (Macintosh)"
#: ../rules/base.xml.in.h:206
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Dell Laptop/Notebook Precision-M-Serie"
+msgid "English (Mali, USA Mac)"
+msgstr "Englisch (Mali, USA Macintosh)"
#: ../rules/base.xml.in.h:207
-msgid "Dell Latitude series laptop"
-msgstr "Dell Latitude-Laptop"
+msgid "English (Mali, USA international)"
+msgstr "Englisch (Mali, USA International)"
#: ../rules/base.xml.in.h:208
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "English (Nigeria)"
+msgstr "Englisch (Nigeria)"
#: ../rules/base.xml.in.h:209
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
+msgid "English (South Africa)"
+msgstr "Englisch (Südafrika)"
#: ../rules/base.xml.in.h:210
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "English (UK)"
+msgstr "Englisch (Britisch)"
#: ../rules/base.xml.in.h:211
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell USB Multimedia Keybard"
+msgid "English (UK, Colemak)"
+msgstr "English (Britisch, Colemak)"
#: ../rules/base.xml.in.h:212
-msgid "Denmark"
-msgstr "Dänemark"
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Englisch (britische Dvorak-Punktierung)"
#: ../rules/base.xml.in.h:213
-msgid "Deu"
-msgstr "Deu"
+msgid "English (UK, Dvorak)"
+msgstr "Englisch (Britisch, Dvorak)"
#: ../rules/base.xml.in.h:214
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa Wireless Desktop Keyboard"
+msgid "English (UK, Mac international)"
+msgstr "Englisch (Britisch, Macintosh international)"
#: ../rules/base.xml.in.h:215
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond 9801 / 9802-Serie"
+msgid "English (UK, Mac)"
+msgstr "Englisch (Britisch, Macintosh)"
#: ../rules/base.xml.in.h:216
-msgid "Dnk"
-msgstr "Dnk"
+msgid "English (UK, extended, WinKeys)"
+msgstr "Englisch (Britisch erweitert, Windows-Tasten)"
#: ../rules/base.xml.in.h:217
-msgid "Dvorak"
-msgstr "Dvorak"
+msgid "English (UK, international with dead keys)"
+msgstr "Englisch (Britisch international, mit Akzenttasten)"
#: ../rules/base.xml.in.h:218
-msgid "Dvorak (Baybayin)"
-msgstr "Dvorak (Baybayin)"
+msgid "English (US)"
+msgstr "English (USA)"
#: ../rules/base.xml.in.h:219
-msgid "Dvorak (Latin)"
-msgstr "Dvorak (Lateinisch)"
+msgid "English (US, alternative international)"
+msgstr "Englisch (USA, international alternativ)"
#: ../rules/base.xml.in.h:220
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvorak (britische Punktierung)"
+msgid "English (US, international with dead keys)"
+msgstr "Englisch (USA International, mit Akzenttasten)"
#: ../rules/base.xml.in.h:221
-msgid "Dvorak alternative international (no dead keys)"
-msgstr "Dvorak Alternative international (ohne Akzenttasten)"
+msgid "English (US, with euro on 5)"
+msgstr "Englisch (USA, mit Euro-Symbol auf 5)"
#: ../rules/base.xml.in.h:222
-msgid "Dvorak international (with dead keys)"
-msgstr "Dvorak International (mit Akzenttasten)"
+msgid "English (classic Dvorak)"
+msgstr "Englisch (Dvorak, klassisch)"
#: ../rules/base.xml.in.h:223
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Dvorak, polnische Anführungszeichen auf Taste 1"
+msgid "English (international AltGr dead keys)"
+msgstr "Englisch (international, AltGr-Akzenttasten)"
#: ../rules/base.xml.in.h:224
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvorak, polnische Anführungszeichen auf Taste mit Zitatzeichen"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Englisch (Belegungsumschalter auf der Multiplikations-/Divisionstaste)"
#: ../rules/base.xml.in.h:225
-msgid "Eastern"
-msgstr "Östlich"
+msgid "English (left handed Dvorak)"
+msgstr "Englisch (Dvorak, linkshändig)"
#: ../rules/base.xml.in.h:226
-msgid "Eliminate dead keys"
-msgstr "Akzenttasten deaktivieren"
+msgid "English (programmer Dvorak)"
+msgstr "Englisch (Dvorak für Programmierer)"
#: ../rules/base.xml.in.h:227
-msgid "Enable extra typographic characters"
-msgstr "Typographische Sonderzeichen aktivieren"
+msgid "English (right handed Dvorak)"
+msgstr "Englisch (Dvorak, rechtshändig)"
#: ../rules/base.xml.in.h:228
-msgid "English"
-msgstr "Englisch"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:229
-msgid "English (USA International)"
-msgstr "Englisch (USA International)"
+msgid "Enter on keypad"
+msgstr "Eingabetaste im Nummernblock"
#: ../rules/base.xml.in.h:230
-msgid "English (USA Macintosh)"
-msgstr "Englisch (USA Macintosh)"
+msgid "Esperanto"
+msgstr "Esperanto"
#: ../rules/base.xml.in.h:231
-msgid "English with RupeeSign"
-msgstr "Englisch mit Rupie-Symbol"
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Esperanto (falsch platziertes Semikolon und Anführungszeichen, veraltet)"
#: ../rules/base.xml.in.h:232
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
+msgid "Estonian"
+msgstr "Estnisch"
#: ../rules/base.xml.in.h:233
-msgid "Enter on keypad"
-msgstr "Eingabetaste im Nummernblock"
+msgid "Estonian (Dvorak)"
+msgstr "Estnisch (Dvorak)"
#: ../rules/base.xml.in.h:234
-msgid "Epo"
-msgstr "Epo"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Estnisch (US-Tastatur mit estnischen Buchstaben)"
#: ../rules/base.xml.in.h:235
-msgid "Ergonomic"
-msgstr "Ergonomic"
+msgid "Estonian (eliminate dead keys)"
+msgstr "Estnisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:236
-msgid "Esp"
-msgstr "Esp"
+msgid "Euro on 2"
+msgstr "Euro auf 2"
#: ../rules/base.xml.in.h:237
-msgid "Esperanto"
-msgstr "Esperanto"
+msgid "Euro on 4"
+msgstr "Euro auf 4"
#: ../rules/base.xml.in.h:238
-msgid "Est"
-msgstr "Est"
+msgid "Euro on 5"
+msgstr "Euro auf 5"
#: ../rules/base.xml.in.h:239
-msgid "Estonia"
-msgstr "Estland"
+msgid "Euro on E"
+msgstr "Euro auf E"
#: ../rules/base.xml.in.h:240
-msgid "Eth"
-msgstr "Eth"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:241
-msgid "Ethiopia"
-msgstr "Äthiopien"
+msgid "Ewe"
+msgstr "Ewe"
#: ../rules/base.xml.in.h:242
-msgid "Euro on 2"
-msgstr "Euro auf 2"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:243
-msgid "Euro on 4"
-msgstr "Euro auf 4"
+msgid "Faroese"
+msgstr "Färöisch"
#: ../rules/base.xml.in.h:244
-msgid "Euro on 5"
-msgstr "Euro auf 5"
+msgid "Faroese (eliminate dead keys)"
+msgstr "Färöisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:245
-msgid "Euro on E"
-msgstr "Euro auf E"
+msgid "Filipino"
+msgstr "Philippinisch"
#: ../rules/base.xml.in.h:246
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Philippinisch (Capewell-Dvorak, Baybayin)"
#: ../rules/base.xml.in.h:247
-msgid "Ewe"
-msgstr "Ewe"
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Philippinisch (Capewell-Dvorak, Lateinisch)"
#: ../rules/base.xml.in.h:248
-msgid "Extended"
-msgstr "Erweitert"
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Philippinisch (Capewell-QWERF 2006, Baybayin)"
#: ../rules/base.xml.in.h:249
-msgid "Extended - Winkeys"
-msgstr "Erweitert - Windows-Tasten"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Philippinisch (Capewell-QWERF 2006, lateinisch)"
#: ../rules/base.xml.in.h:250
-msgid "Extended Backslash"
-msgstr "Erweiterter Backslash"
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Philippinisch (Colemak, Baybayin)"
#: ../rules/base.xml.in.h:251
-msgid "F-letter (F) variant"
-msgstr "F-Variante"
+msgid "Filipino (Colemak Latin)"
+msgstr "Philippinisch (Colemak, lateinisch)"
#: ../rules/base.xml.in.h:252
-msgid "FL90"
-msgstr "FL90"
+msgid "Filipino (Dvorak Latin)"
+msgstr "Philippinisch (Dvorak, lateinisch)"
#: ../rules/base.xml.in.h:253
-msgid "Faroe Islands"
-msgstr "Färöer-Inseln"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Philippinisch (QWERTY, Baybayin)"
#: ../rules/base.xml.in.h:254
-msgid "Fin"
-msgstr "Fin"
+msgid "Finnish"
+msgstr "Finnisch"
#: ../rules/base.xml.in.h:255
-msgid "Finland"
-msgstr "Finnland"
+msgid "Finnish (Mac)"
+msgstr "Finnisch (Macintosh)"
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "Finnisch (klassisch)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Finnisch (klassisch, ohne Akzenttasten)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr "Finnisch (ördliches Saami)"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:261
msgid "Four-level key with abstract separators"
msgstr "Taste der vierten Ebene mit abstrakten Trennern"
-#: ../rules/base.xml.in.h:259
+#: ../rules/base.xml.in.h:262
msgid "Four-level key with comma"
msgstr "Taste der vierten Ebene mit Komma"
-#: ../rules/base.xml.in.h:260
+#: ../rules/base.xml.in.h:263
msgid "Four-level key with dot"
msgstr "Taste der vierten Ebene mit Punkt"
-#: ../rules/base.xml.in.h:261
+#: ../rules/base.xml.in.h:264
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Taste der vierten Ebene mit Punkt, latin-9-Einschränkung"
# momayyez? Was ist das?
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:265
msgid "Four-level key with momayyez"
msgstr "Taste der vierten Ebene mit »momayyez«"
-#: ../rules/base.xml.in.h:263
-msgid "Fra"
-msgstr "Fra"
-
-#: ../rules/base.xml.in.h:264
-msgid "France"
-msgstr "Frankreich"
-
-#: ../rules/base.xml.in.h:265
-msgid "Français (France Alternative)"
-msgstr "Französisch (Französisch Alternative)"
-
#: ../rules/base.xml.in.h:266
msgid "French"
msgstr "Französisch"
#: ../rules/base.xml.in.h:267
-msgid "French (Macintosh)"
-msgstr "Französisch (Macintosh)"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Französich (Bepo, ergonomisch, Dvorak-ähnlich)"
#: ../rules/base.xml.in.h:268
-msgid "French (legacy)"
-msgstr "Französisch (veraltet)"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Französisch (Bepo, ergonomisch, Dvorak-ähnlich, nur latin-9)"
#: ../rules/base.xml.in.h:269
-msgid "French Dvorak"
-msgstr "Französisch (Dvorak)"
+msgid "French (Breton)"
+msgstr "Französisch (Bretonisch)"
#: ../rules/base.xml.in.h:270
-msgid "French, Sun dead keys"
-msgstr "Französisch, Sun-Akzenttasten"
+msgid "French (Canada, Dvorak)"
+msgstr "Französisch (Kanada, Dvorak)"
#: ../rules/base.xml.in.h:271
-msgid "French, eliminate dead keys"
-msgstr "Französisch, ohne Akzenttasten"
+msgid "French (Canada, legacy)"
+msgstr "Französisch (Kanada, veraltet)"
#: ../rules/base.xml.in.h:272
-msgid "Fro"
-msgstr "Fro"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Französisch (Demokratische Republik Kongo)"
#: ../rules/base.xml.in.h:273
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Fujitsu-Siemens Computers AMILO Laptop"
+msgid "French (Dvorak)"
+msgstr "Französisch (Dvorak)"
#: ../rules/base.xml.in.h:274
-msgid "Fula"
-msgstr "Fula"
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Französich (Georgisch, AZERTY Tskapo)"
#: ../rules/base.xml.in.h:275
-msgid "GBr"
-msgstr "GBr"
+msgid "French (Guinea)"
+msgstr "Französisch (Guinea)"
#: ../rules/base.xml.in.h:276
-msgid "GILLBT"
-msgstr "GILLBT"
+msgid "French (Mac)"
+msgstr "Französisch (Macintosh)"
#: ../rules/base.xml.in.h:277
-msgid "Ga"
-msgstr "Ga"
+msgid "French (Mali, alternative)"
+msgstr "Französisch (Mali, Alternative)"
#: ../rules/base.xml.in.h:278
-msgid "Generic 101-key PC"
-msgstr "Generische PC-Tastatur mit 101 Tasten"
+msgid "French (Morocco)"
+msgstr "Französisch (Marokko)"
#: ../rules/base.xml.in.h:279
-msgid "Generic 102-key (Intl) PC"
-msgstr "Generische PC-Tastatur mit 102 Tasten (Intl)"
+msgid "French (Occitan)"
+msgstr "Französisch (Okzitanisch)"
#: ../rules/base.xml.in.h:280
-msgid "Generic 104-key PC"
-msgstr "Generische PC-Tastatur mit 104 Tasten"
+msgid "French (Sun dead keys)"
+msgstr "Französisch (Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:281
-msgid "Generic 105-key (Intl) PC"
-msgstr "Generische PC-Tastatur mit 105 Tasten (Intl)"
+msgid "French (Switzerland)"
+msgstr "Französisch (Schweiz)"
#: ../rules/base.xml.in.h:282
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "French (Switzerland, Mac)"
+msgstr "Französisch (Schweiz, Macintosh)"
#: ../rules/base.xml.in.h:283
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Französisch (Schweiz, Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:284
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Französisch (Schweiz, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:285
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
+msgid "French (alternative)"
+msgstr "Französisch (alternativ)"
#: ../rules/base.xml.in.h:286
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
+msgid "French (alternative, Sun dead keys)"
+msgstr "Französisch (Alternative, Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:287
-msgid "Geo"
-msgstr "Geo"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Französisch (Alternative, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:288
-msgid "Georgia"
-msgstr "Georgien"
+msgid "French (alternative, latin-9 only)"
+msgstr "Französisch (Alternative, nur latin-9)"
#: ../rules/base.xml.in.h:289
-msgid "Georgian"
-msgstr "Georgisch"
+msgid "French (eliminate dead keys)"
+msgstr "Französisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:290
-msgid "Georgian AZERTY Tskapo"
-msgstr "Georgisch, AZERTY Tskapo"
+msgid "French (legacy alternative)"
+msgstr "Französisch (Alternative, veraltet)"
#: ../rules/base.xml.in.h:291
-msgid "German (Macintosh)"
-msgstr "Deutsch (Macintosh)"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Französisch (Alternative, veraltet, Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:292
-msgid "German, Sun dead keys"
-msgstr "Deutsch, Sun-Akzenttasten"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Französisch (Alternative, veraltet, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:293
-msgid "German, eliminate dead keys"
-msgstr "Deutsch, ohne Akzenttasten"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Fujitsu-Siemens Computers AMILO Laptop"
#: ../rules/base.xml.in.h:294
-msgid "Germany"
-msgstr "Deutschland"
+msgid "Fula"
+msgstr "Fula"
#: ../rules/base.xml.in.h:295
-msgid "Gha"
-msgstr "Gha"
+msgid "GBr"
+msgstr "GBr"
#: ../rules/base.xml.in.h:296
-msgid "Ghana"
-msgstr "Ghana"
+msgid "Ga"
+msgstr "Ga"
#: ../rules/base.xml.in.h:297
-msgid "Gin"
-msgstr "Gin"
+msgid "Generic 101-key PC"
+msgstr "Generische PC-Tastatur mit 101 Tasten"
#: ../rules/base.xml.in.h:298
-msgid "Grc"
-msgstr "Grc"
+msgid "Generic 102-key (Intl) PC"
+msgstr "Generische PC-Tastatur mit 102 Tasten (Intl)"
#: ../rules/base.xml.in.h:299
-msgid "Greece"
-msgstr "Griechenland"
+msgid "Generic 104-key PC"
+msgstr "Generische PC-Tastatur mit 104 Tasten"
#: ../rules/base.xml.in.h:300
-msgid "Guinea"
-msgstr "Guinea"
+msgid "Generic 105-key (Intl) PC"
+msgstr "Generische PC-Tastatur mit 105 Tasten (Intl)"
#: ../rules/base.xml.in.h:301
-msgid "Gujarati"
-msgstr "Gujarati"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:302
-msgid "Gurmukhi"
-msgstr "Gurmukhi"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
#: ../rules/base.xml.in.h:303
-msgid "Gurmukhi Jhelum"
-msgstr "Gurmukhi Jhelum"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:304
-msgid "Gyration"
-msgstr "Gyration"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
#: ../rules/base.xml.in.h:305
-msgid "HTC Dream"
-msgstr "HTC Dream"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:306
-msgid "Happy Hacking Keyboard"
-msgstr "Happy Hacking Keyboard"
+msgid "Georgian"
+msgstr "Georgisch"
#: ../rules/base.xml.in.h:307
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "»Happy Hacking Keyboard« für Mac"
+msgid "Georgian (MESS)"
+msgstr "Georgisch (MESS)"
#: ../rules/base.xml.in.h:308
-msgid "Hausa"
-msgstr "Haussa"
+msgid "Georgian (Ossetian)"
+msgstr "Georgisch (Ossetisch)"
#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internet Keyboard"
+msgid "Georgian (ergonomic)"
+msgstr "Georgisch (ergonomisch)"
#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 Notebook"
+msgid "German"
+msgstr "Deutsch"
#: ../rules/base.xml.in.h:311
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "German (Austria)"
+msgstr "Deutsch (Österreich)"
#: ../rules/base.xml.in.h:312
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "German (Austria, Mac)"
+msgstr "DDeutsch (Österreich, Macintosh)"
#: ../rules/base.xml.in.h:313
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+msgid "German (Austria, Sun dead keys)"
+msgstr "Deutsch (Österreich, Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:314
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Deutsch (Österreich, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:315
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "German (Dvorak)"
+msgstr "Deutsch (Dvorak)"
#: ../rules/base.xml.in.h:316
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "German (Mac)"
+msgstr "Deutsch (Macintosh)"
#: ../rules/base.xml.in.h:317
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Deutsch (Macintosh, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:318
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
+msgid "German (Neo 2)"
+msgstr "Deutsch (Neo 2)"
#: ../rules/base.xml.in.h:319
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Deutsch (Rumänische Tastatur mit deutschen Buchstaben)"
#: ../rules/base.xml.in.h:320
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Deutsch (Rumänische Tastatur mit deutschen Buchstaben, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:321
-msgid "Hexadecimal"
-msgstr "Hexadezimal"
+msgid "German (Sun dead keys)"
+msgstr "Deutsch (Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:322
-msgid "Hindi Bolnagri"
-msgstr "Hindi Bolnagri"
+msgid "German (Switzerland, Mac)"
+msgstr "Deutsch (Schweiz, Macintosh)"
#: ../rules/base.xml.in.h:323
-msgid "Hindi Wx"
-msgstr "Hindi Wx"
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Deutsch (Schweiz, Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:324
-msgid "Homophonic"
-msgstr "Homophonic"
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Deutsch (Schweiz, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:325
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "German (dead acute)"
+msgstr "Deutsch (Ohne Acute-(')Akzentzeichen)"
#: ../rules/base.xml.in.h:326
-msgid "Hrv"
-msgstr "Hrv"
+msgid "German (dead grave acute)"
+msgstr "Deutsch (Ohne Grave-(`) und Acute-(')Akzentzeichen)"
#: ../rules/base.xml.in.h:327
-msgid "Htc Dream phone"
-msgstr "HTC Dream Mobiltelefon"
+msgid "German (eliminate dead keys)"
+msgstr "Deutsch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:328
-msgid "Hun"
-msgstr "Hun"
+msgid "German (lower Sorbian qwertz)"
+msgstr "Deutsch (Niedersorbisch, qwertz)"
#: ../rules/base.xml.in.h:329
-msgid "Hungary"
-msgstr "Ungarn"
+msgid "German (lower Sorbian)"
+msgstr "Deutsch (Niedersorbisch)"
#: ../rules/base.xml.in.h:330
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper ist den Win-Tasten zugeordnet"
+msgid "German (qwerty)"
+msgstr "Deutsch (qwerty)"
#: ../rules/base.xml.in.h:331
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
+msgid "Greek"
+msgstr "Griechisch"
#: ../rules/base.xml.in.h:332
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "Greek (eliminate dead keys)"
+msgstr "Griechisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:333
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Greek (extended)"
+msgstr "Griechisch (erweitert)"
#: ../rules/base.xml.in.h:334
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "Greek (polytonic)"
+msgstr "Griechisch (polytonisch)"
#: ../rules/base.xml.in.h:335
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "Greek (simple)"
+msgstr "Griechisch (vereinfacht)"
#: ../rules/base.xml.in.h:336
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
+msgid "Gujarati"
+msgstr "Gujarati"
#: ../rules/base.xml.in.h:337
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "Gyration"
+msgstr "Gyration"
#: ../rules/base.xml.in.h:338
-msgid "ISO Alternate"
-msgstr "ISO-Alternative"
+msgid "HTC Dream"
+msgstr "HTC Dream"
#: ../rules/base.xml.in.h:339
-msgid "Iceland"
-msgstr "Island"
+msgid "Happy Hacking Keyboard"
+msgstr "Happy Hacking Keyboard"
#: ../rules/base.xml.in.h:340
-msgid "Igbo"
-msgstr "Igbo"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "»Happy Hacking Keyboard« für Mac"
#: ../rules/base.xml.in.h:341
-msgid "Include dead tilde"
-msgstr "Akzent-Tilde einschließen"
+msgid "Hausa"
+msgstr "Haussa"
#: ../rules/base.xml.in.h:342
-msgid "Ind"
-msgstr "Ind"
+msgid "Hebrew"
+msgstr "Hebräisch"
#: ../rules/base.xml.in.h:343
-msgid "India"
-msgstr "Indien"
+msgid "Hebrew (Phonetic)"
+msgstr "Hebräisch (phonetisch)"
#: ../rules/base.xml.in.h:344
-msgid "International (AltGr dead keys)"
-msgstr "International (AltGr-Akzenttasten)"
+msgid "Hebrew (Tiro)"
+msgstr "Hebräisch (Tiro)"
#: ../rules/base.xml.in.h:345
-msgid "International (with dead keys)"
-msgstr "International (mit Akzenttasten)"
+msgid "Hebrew (lyx)"
+msgstr "Hebräisch (lyx)"
#: ../rules/base.xml.in.h:346
-msgid "Inuktitut"
-msgstr "Inuktitut"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internet Keyboard"
-#: ../rules/base.xml.in.h:347 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr "Iran"
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
#: ../rules/base.xml.in.h:348
-msgid "Iraq"
-msgstr "Irak"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:349
-msgid "Ireland"
-msgstr "Irland"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:350
-msgid "Irl"
-msgstr "Irl"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:351
-msgid "Irn"
-msgstr "Irn"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:352
-msgid "Irq"
-msgstr "Irq"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:353
-msgid "Isl"
-msgstr "Isl"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:354
-msgid "Isr"
-msgstr "Isr"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:355
-msgid "Israel"
-msgstr "Israel"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:356
-msgid "Ita"
-msgstr "Ita"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
#: ../rules/base.xml.in.h:357
-msgid "Italy"
-msgstr "Italien"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:358
-msgid "Japan"
-msgstr "Japan"
+msgid "Hexadecimal"
+msgstr "Hexadezimal"
#: ../rules/base.xml.in.h:359
-msgid "Japan (PC-98xx Series)"
-msgstr "Japan (PC-98xx-Serie)"
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi (Bolnagri)"
#: ../rules/base.xml.in.h:360
-msgid "Japanese keyboard options"
-msgstr "Japanische Tastaturoptionen"
+msgid "Hindi (Wx)"
+msgstr "Hindi (Wx)"
#: ../rules/base.xml.in.h:361
-msgid "Jpn"
-msgstr "Jpn"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
#: ../rules/base.xml.in.h:362
-msgid "Kalmyk"
-msgstr "Kalmückisch"
+msgid "Htc Dream phone"
+msgstr "HTC Dream Mobiltelefon"
#: ../rules/base.xml.in.h:363
-msgid "Kana"
-msgstr "Kana"
+msgid "Hungarian"
+msgstr "Ungarisch"
#: ../rules/base.xml.in.h:364
-msgid "Kana 86"
-msgstr "Kana 86"
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Ungarisch (101/qwerty/Komma/Akzenttasten)"
#: ../rules/base.xml.in.h:365
-msgid "Kana Lock key is locking"
-msgstr "Kana-Sperrtaste ist gesperrt"
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Ungarisch (101/qwerty/Komma/ohne Akzenttasten)"
#: ../rules/base.xml.in.h:366
-msgid "Kannada"
-msgstr "Kannada"
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Ungarisch (101/qwerty/Punkt/Akzenttasten)"
#: ../rules/base.xml.in.h:367
-msgid "Kashubian"
-msgstr "Kaschubisch"
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Ungarisch (101/qwerty/Punkt/ohne Akzenttasten)"
#: ../rules/base.xml.in.h:368
-msgid "Kaz"
-msgstr "Kaz"
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Ungarisch (101/qwertz/Komma/Akzenttasten)"
#: ../rules/base.xml.in.h:369
-msgid "Kazakh with Russian"
-msgstr "Kasachisch mit russischer Belegung"
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Ungarisch (101/qwertz/Komma/ohne Akzenttasten)"
#: ../rules/base.xml.in.h:370
-msgid "Kazakhstan"
-msgstr "Kasachstan"
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Ungarisch (101/qwertz/Punkt/Akzenttasten)"
#: ../rules/base.xml.in.h:371
-msgid "Ken"
-msgstr "Ken"
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Ungarisch (101/qwertz/Punkt/ohne Akzenttasten)"
#: ../rules/base.xml.in.h:372
-msgid "Kenya"
-msgstr "Kenia"
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Ungarisch (102/qwerty/Komma/Akzenttasten)"
#: ../rules/base.xml.in.h:373
-msgid "Key sequence to kill the X server"
-msgstr "Tastenkombination zum erzwungenen Beenden des X-Servers"
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Ungarisch (102/qwerty/Komma/ohne Akzenttasten)"
#: ../rules/base.xml.in.h:374
-msgid "Key to choose 3rd level"
-msgstr "Taste zum Wechsel in die dritte Tastaturebene"
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Ungarisch (102/qwerty/Punkt/Akzenttasten)"
#: ../rules/base.xml.in.h:375
-msgid "Key to choose 5th level"
-msgstr "Taste zum Wechsel in die fünfte Tastaturebene"
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Ungarisch (102/qwerty/Punkt/ohne Akzenttasten)"
#: ../rules/base.xml.in.h:376
-msgid "Key(s) to change layout"
-msgstr "Taste(n) zum Wechseln der Belegung"
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Ungarisch (102/qwertz/Komma/Akzenttasten)"
#: ../rules/base.xml.in.h:377
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Ungarisch (102/qwertz/Komma/ohne Akzenttasten)"
#: ../rules/base.xml.in.h:378
-msgid "Kgz"
-msgstr "Kgz"
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Ungarisch (102/qwertz/Punkt/Akzenttasten)"
#: ../rules/base.xml.in.h:379
-msgid "Khm"
-msgstr "Khm"
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Ungarisch (102/qwertz/Punkt/ohne Akzenttasten)"
#: ../rules/base.xml.in.h:380
-msgid "Kikuyu"
-msgstr "Kikuyu"
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Ungarisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:381
-msgid "Kinesis"
-msgstr "Kinesis"
+msgid "Hungarian (qwerty)"
+msgstr "Ungarisch (qwerty)"
#: ../rules/base.xml.in.h:382
-msgid "Komi"
-msgstr "Komi"
+msgid "Hungarian (standard)"
+msgstr "Ungarisch (Standard)"
#: ../rules/base.xml.in.h:383
-msgid "Kor"
-msgstr "Kor"
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper ist den Win-Tasten zugeordnet"
#: ../rules/base.xml.in.h:384
-msgid "Korea, Republic of"
-msgstr "Korea, Republik"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:385
-msgid "Ktunaxa"
-msgstr "Ktunaxa"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:386
-msgid "Kurdish, (F)"
-msgstr "Kurdisch, (F)"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:387
-msgid "Kurdish, Arabic-Latin"
-msgstr "Kurdisch, Arabisch-Lateinisch"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:388
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Kurdisch, Lateinisches Alt-Q"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
#: ../rules/base.xml.in.h:389
-msgid "Kurdish, Latin Q"
-msgstr "Kurdisch, Lateinisches Q"
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
#: ../rules/base.xml.in.h:390
-msgid "Kyrgyzstan"
-msgstr "Kirgisistan"
+msgid "Icelandic"
+msgstr "Isländisch"
#: ../rules/base.xml.in.h:391
-msgid "LEKP"
-msgstr "LEKP"
+msgid "Icelandic (Dvorak)"
+msgstr "Isländisch (Dvorak)"
#: ../rules/base.xml.in.h:392
-msgid "LEKPa"
-msgstr "LEKPa"
+msgid "Icelandic (Mac)"
+msgstr "Isländisch (Macintosh)"
#: ../rules/base.xml.in.h:393
-msgid "Lao"
-msgstr "Lao"
+msgid "Icelandic (Sun dead keys)"
+msgstr "Isländisch (Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:394
-msgid "Laos"
-msgstr "Laos"
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Isländisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:395
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Compaq Laptop/Notebook-Tastatur (z.B. Armada) Laptop-Tastatur"
+msgid "Igbo"
+msgstr "Igbo"
#: ../rules/base.xml.in.h:396
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Compaq Laptop/Notebook-Tastatur (z.B. Presario) Laptop-Tastatur"
+msgid "Indian"
+msgstr "Indisch"
#: ../rules/base.xml.in.h:397
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Laptop/notebook eMachines m68xx"
+msgid "Inuktitut"
+msgstr "Inuktitut"
#: ../rules/base.xml.in.h:398
-msgid "Latin"
-msgstr "Latein"
+msgid "Iraqi"
+msgstr "Irakisch"
#: ../rules/base.xml.in.h:399
-msgid "Latin American"
-msgstr "Lateinamerikanisch"
+msgid "Irish"
+msgstr "Irisch"
#: ../rules/base.xml.in.h:400
-msgid "Latin Unicode"
-msgstr "Latein (Unicode)"
+msgid "Irish (CloGaelach)"
+msgstr "Irisch (CloGaelach)"
#: ../rules/base.xml.in.h:401
-msgid "Latin Unicode qwerty"
-msgstr "Lateinische qwerty-Tastatur (Unicode)"
+msgid "Irish (Ogham IS434)"
+msgstr "Irisch (Ogham IS434)"
#: ../rules/base.xml.in.h:402
-msgid "Latin qwerty"
-msgstr "Lateinische qwerty-Tastatur"
+msgid "Irish (Ogham)"
+msgstr "Irisch (Ogham)"
#: ../rules/base.xml.in.h:403
-msgid "Latin unicode"
-msgstr "Latein (Unicode)"
+msgid "Irish (UnicodeExpert)"
+msgstr "Irisch (UnicodeExpert)"
#: ../rules/base.xml.in.h:404
-msgid "Latin unicode qwerty"
-msgstr "Lateinische qwerty-Tastatur (Unicode)"
+msgid "Italian"
+msgstr "Italienisch"
#: ../rules/base.xml.in.h:405
-msgid "Latin with guillemets"
-msgstr "Lateinisch mit Anführungszeichen"
+msgid "Italian (Georgian)"
+msgstr "Italienisch (Georgisch)"
#: ../rules/base.xml.in.h:406
-msgid "Latvia"
-msgstr "Lettland"
+msgid "Italian (Mac)"
+msgstr "Italienisch (Macintosh)"
#: ../rules/base.xml.in.h:407
-msgid "Layout toggle on multiply/divide key"
-msgstr "Belegungsumschalter auf der Multiplikations-/Divisionstaste"
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Italienisch (US-Tastatur mit italienischen Buchstaben)"
#: ../rules/base.xml.in.h:408
-msgid "Left Alt"
-msgstr "Linke Alt-Taste"
+msgid "Italian (eliminate dead keys)"
+msgstr "Italienisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:409
-msgid "Left Alt (while pressed)"
-msgstr "Linke Alt-Taste (gedrückt halten)"
+msgid "Japanese"
+msgstr "Japanisch"
#: ../rules/base.xml.in.h:410
-msgid "Left Alt is swapped with Left Win"
-msgstr "Linke Alt-Taste ist gegen linke Windows-Taste vertauscht"
+msgid "Japanese (Kana 86)"
+msgstr "Japanisch (Kana 86)"
#: ../rules/base.xml.in.h:411
-msgid "Left Ctrl"
-msgstr "Linke Strg-Taste"
+msgid "Japanese (Kana)"
+msgstr "Japanisch (Kana)"
#: ../rules/base.xml.in.h:412
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Linke Strg-Taste (zur ersten Belegung), rechte Strg-Taste (zur letzten Belegung)"
+msgid "Japanese (Mac)"
+msgstr "Japanisch (Macintosh)"
#: ../rules/base.xml.in.h:413
-msgid "Left Ctrl+Left Shift"
-msgstr "Linke Strg-Taste+Linke Umschalttaste"
+msgid "Japanese (OADG 109A)"
+msgstr "Japanisch (OADG 109A)"
#: ../rules/base.xml.in.h:414
-msgid "Left Shift"
-msgstr "Linke Umschalttaste"
+msgid "Japanese (PC-98xx Series)"
+msgstr "Japanisch (PC-98xx-Serie)"
#: ../rules/base.xml.in.h:415
-msgid "Left Win"
-msgstr "Linke Windows-Taste"
+msgid "Japanese keyboard options"
+msgstr "Japanische Tastaturoptionen"
#: ../rules/base.xml.in.h:416
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Linke Windows-Taste (zur ersten Belegung), rechte Windows/Menütaste (zur letzten Belegung)"
+msgid "Kana Lock key is locking"
+msgstr "Kana-Sperrtaste ist gesperrt"
#: ../rules/base.xml.in.h:417
-msgid "Left Win (while pressed)"
-msgstr "Linke Windows-Taste (gedrückt halten)"
+msgid "Kannada"
+msgstr "Kannada"
#: ../rules/base.xml.in.h:418
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Linke Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
+msgid "Kazakh"
+msgstr "Kasachisch"
#: ../rules/base.xml.in.h:419
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Linke Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
+msgid "Kazakh (with Russian)"
+msgstr "Kasachisch (mit russischer Belegung)"
#: ../rules/base.xml.in.h:420
-msgid "Left hand"
-msgstr "Linkshändig"
+msgid "Key sequence to kill the X server"
+msgstr "Tastenkombination zum erzwungenen Beenden des X-Servers"
#: ../rules/base.xml.in.h:421
-msgid "Left handed Dvorak"
-msgstr "Dvorak (linkshändig)"
+msgid "Key to choose 3rd level"
+msgstr "Taste zum Wechsel in die dritte Tastaturebene"
#: ../rules/base.xml.in.h:422
-msgid "Legacy"
-msgstr "Veraltet"
+msgid "Key to choose 5th level"
+msgstr "Taste zum Wechsel in die fünfte Tastaturebene"
#: ../rules/base.xml.in.h:423
-msgid "Legacy Wang 724"
-msgstr "Wang 724 (veraltet)"
+msgid "Key(s) to change layout"
+msgstr "Taste(n) zum Wechseln der Belegung"
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:425
-msgid "Legacy key with comma"
-msgstr "Veraltete Taste mit Komma"
+msgid "Khmer (Cambodian)"
+msgstr "Khmer (Kambodschanisch)"
#: ../rules/base.xml.in.h:426
-msgid "Legacy key with dot"
-msgstr "Veraltete Taste mit Punkt"
+msgid "Kikuyu"
+msgstr "Kikuyu"
#: ../rules/base.xml.in.h:427
-msgid "Lithuania"
-msgstr "Litauen"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:428
-msgid "Lka"
-msgstr "Lka"
+msgid "Korean"
+msgstr "Koreanisch"
#: ../rules/base.xml.in.h:429
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access Keyboard"
+msgid "Korean (101/104 key compatible)"
+msgstr "Koreanisch (101/104-Tasten kompatibel)"
#: ../rules/base.xml.in.h:430
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Kurdisch (Iran, Arabisch-Lateinisch)"
#: ../rules/base.xml.in.h:431
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (alternative Option)"
+msgid "Kurdish (Iran, F)"
+msgstr "Kurdisch (Iran, F)"
#: ../rules/base.xml.in.h:432
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Kurdisch (Iran, Lateinisches Q)"
#: ../rules/base.xml.in.h:433
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Kurdisch (Iran, Lateinisches Alt-Q)"
#: ../rules/base.xml.in.h:434
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Kurdisch (Irak, Arabisch-Lateinisch)"
#: ../rules/base.xml.in.h:435
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
+msgid "Kurdish (Iraq, F)"
+msgstr "Kurdisch (Irak, F)"
#: ../rules/base.xml.in.h:436
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (alternative Option 2)"
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Kurdisch (Irak, Lateinisches Alt-Q)"
#: ../rules/base.xml.in.h:437
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Kurdisch (Irak, lateinisches Q)"
#: ../rules/base.xml.in.h:438
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
+msgid "Kurdish (Syria, F)"
+msgstr "Kurdisch (Syrien, F)"
#: ../rules/base.xml.in.h:439
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Logitech G15-Sondertasten über den G1-Daemon"
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Kurdisch (Syrien, lateinisches Alt-Q)"
#: ../rules/base.xml.in.h:440
-msgid "Logitech Generic Keyboard"
-msgstr "Generische Logitech-Tastatur"
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Kurdisch (Syrien, lateinisches Q)"
#: ../rules/base.xml.in.h:441
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech Internet 350 Keyboard"
+msgid "Kurdish (Turkey, F)"
+msgstr "Kurdisch (Türkei, F)"
#: ../rules/base.xml.in.h:442
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech Internet Keyboard"
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Kurdisch (Türkei, lateinisches Alt-Q)"
#: ../rules/base.xml.in.h:443
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech Internet Navigator Keyboard"
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Kurdisch (Türkei, lateinisches Q)"
#: ../rules/base.xml.in.h:444
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite Keyboard"
+msgid "Kutenai"
+msgstr "Kutenai"
#: ../rules/base.xml.in.h:445
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgid "Kyrgyz"
+msgstr "Kirgisisch"
#: ../rules/base.xml.in.h:446
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X Keyboard"
+msgid "Kyrgyz (phonetic)"
+msgstr "Kirgisisch (phonetisch)"
#: ../rules/base.xml.in.h:447
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
+msgid "Lao"
+msgstr "Lao"
#: ../rules/base.xml.in.h:448
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo Keyboard"
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Laotisch (durch STEA vorgeschlagene Standardbelegung)"
#: ../rules/base.xml.in.h:449
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Compaq Laptop/Notebook-Tastatur (z.B. Armada) Laptop-Tastatur"
#: ../rules/base.xml.in.h:450
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless Keyboard (Modell Y-RB6)"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Compaq Laptop/Notebook-Tastatur (z.B. Presario) Laptop-Tastatur"
#: ../rules/base.xml.in.h:451
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Laptop/notebook eMachines m68xx"
#: ../rules/base.xml.in.h:452
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgid "Latvian"
+msgstr "Lettisch"
#: ../rules/base.xml.in.h:453
-msgid "Lower Sorbian"
-msgstr "Niedersorbisch"
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Lettisch, (Apostroph-Variante ('))"
#: ../rules/base.xml.in.h:454
-msgid "Lower Sorbian (qwertz)"
-msgstr "Niedersorbisch (qwertz)"
+msgid "Latvian (F variant)"
+msgstr "Lettisch (F-Variante)"
#: ../rules/base.xml.in.h:455
-msgid "Ltu"
-msgstr "Ltu"
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Lettisch (Tilde-Variante (~))"
#: ../rules/base.xml.in.h:456
-msgid "Lva"
-msgstr "Lva"
+msgid "Left Alt"
+msgstr "Linke Alt-Taste"
#: ../rules/base.xml.in.h:457
-msgid "MESS"
-msgstr "MESS"
+msgid "Left Alt (while pressed)"
+msgstr "Linke Alt-Taste (gedrückt halten)"
#: ../rules/base.xml.in.h:458
-msgid "MNE"
-msgstr "MNE"
+msgid "Left Alt is swapped with Left Win"
+msgstr "Linke Alt-Taste ist gegen linke Windows-Taste vertauscht"
#: ../rules/base.xml.in.h:459
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Left Ctrl"
+msgstr "Linke Strg-Taste"
#: ../rules/base.xml.in.h:460
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Linke Strg-Taste (zur ersten Belegung), rechte Strg-Taste (zur letzten Belegung)"
#: ../rules/base.xml.in.h:461
-msgid "Macedonia"
-msgstr "Mazedonien"
+msgid "Left Ctrl+Left Shift"
+msgstr "Linke Strg-Taste+Linke Umschalttaste"
#: ../rules/base.xml.in.h:462
-msgid "Macintosh"
-msgstr "Macintosh"
+msgid "Left Shift"
+msgstr "Linke Umschalttaste"
#: ../rules/base.xml.in.h:463
-msgid "Macintosh (International)"
-msgstr "Macintosh (International)"
+msgid "Left Win"
+msgstr "Linke Windows-Taste"
#: ../rules/base.xml.in.h:464
-msgid "Macintosh Old"
-msgstr "Macintosh (Alt)"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Linke Windows-Taste (zur ersten Belegung), rechte Windows/Menütaste (zur letzten Belegung)"
#: ../rules/base.xml.in.h:465
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, Sun-Akzenttasten"
+msgid "Left Win (while pressed)"
+msgstr "Linke Windows-Taste (gedrückt halten)"
#: ../rules/base.xml.in.h:466
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh (ohne Akzenttasten)"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Linke Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
#: ../rules/base.xml.in.h:467
-msgid "Make Caps Lock an additional Backspace"
-msgstr "Feststelltaste als zusätzliche Löschtaste verwenden"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Linke Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
#: ../rules/base.xml.in.h:468
-msgid "Make Caps Lock an additional Ctrl"
-msgstr "Feststelltaste als zusätzliche Strg-Taste verwenden"
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Linke Strg-Taste und linke Win-Taste (zur ersten Belegung), rechte Strg-Taste und Menütaste (zur zweiten Belegung)"
#: ../rules/base.xml.in.h:469
-msgid "Make Caps Lock an additional ESC"
-msgstr "Feststelltaste als zusätzliche Esc-Taste verwenden"
+msgid "Legacy"
+msgstr "Veraltet"
#: ../rules/base.xml.in.h:470
-msgid "Make Caps Lock an additional Hyper"
-msgstr "Feststelltaste als zusätzliche Hyper-Taste verwenden"
-
-#: ../rules/base.xml.in.h:471
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "Feststelltaste als zusätzliche NumLock-Taste verwenden"
+msgid "Legacy Wang 724"
+msgstr "Wang 724 (veraltet)"
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:472
-msgid "Make Caps Lock an additional Super"
-msgstr "Feststelltaste als zusätzliche Super-Taste verwenden"
+msgid "Legacy key with comma"
+msgstr "Veraltete Taste mit Komma"
#: ../rules/base.xml.in.h:473
-msgid "Malayalam"
-msgstr "Malayalam"
+msgid "Legacy key with dot"
+msgstr "Veraltete Taste mit Punkt"
#: ../rules/base.xml.in.h:474
-msgid "Malayalam Lalitha"
-msgstr "Malayalam Lalitha"
+msgid "Lithuanian"
+msgstr "Litauisch"
#: ../rules/base.xml.in.h:475
-msgid "Maldives"
-msgstr "Malediven"
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Litauisch (IBM LST 1205-92)"
#: ../rules/base.xml.in.h:476
-msgid "Mali"
-msgstr "Mali"
+msgid "Lithuanian (LEKP)"
+msgstr "Litauisch (LEKP)"
#: ../rules/base.xml.in.h:477
-msgid "Malta"
-msgstr "Malta"
+msgid "Lithuanian (LEKPa)"
+msgstr "Litauisch (LEKPa)"
#: ../rules/base.xml.in.h:478
-msgid "Maltese keyboard with US layout"
-msgstr "Maltesische Tastatur mit US-Belegung"
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Litauisch (US-Tastatur mit litauischen Buchstaben)"
#: ../rules/base.xml.in.h:479
-msgid "Mao"
-msgstr "Mao"
+msgid "Lithuanian (standard)"
+msgstr "Litauisch (Standard)"
#: ../rules/base.xml.in.h:480
-msgid "Maori"
-msgstr "Maori"
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
#: ../rules/base.xml.in.h:481
-msgid "Mari"
-msgstr "Mari"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
#: ../rules/base.xml.in.h:482
-msgid "Mdv"
-msgstr "Mdv"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (alternative Option)"
#: ../rules/base.xml.in.h:483
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
#: ../rules/base.xml.in.h:484
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access Keyboard"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:485
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
#: ../rules/base.xml.in.h:486
-msgid "Menu"
-msgstr "Menü"
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
#: ../rules/base.xml.in.h:487
-msgid "Meta is mapped to Left Win"
-msgstr "Meta ist der linken Windows-Taste zugeordnet"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (alternative Option 2)"
#: ../rules/base.xml.in.h:488
-msgid "Meta is mapped to Win keys"
-msgstr "Meta ist den Windows-Tasten zugeordnet"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
#: ../rules/base.xml.in.h:489
-msgid "Meta on Left Ctrl"
-msgstr "Meta auf linker Strg-Taste"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
#: ../rules/base.xml.in.h:490
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15-Sondertasten über den G1-Daemon"
#: ../rules/base.xml.in.h:491
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft Internet Keyboard"
+msgid "Logitech Generic Keyboard"
+msgstr "Generische Logitech-Tastatur"
#: ../rules/base.xml.in.h:492
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, Schwedisch"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech Internet 350 Keyboard"
#: ../rules/base.xml.in.h:493
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internet Keyboard"
#: ../rules/base.xml.in.h:494
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural Keyboard Elite"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator Keyboard"
#: ../rules/base.xml.in.h:495
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite Keyboard"
#: ../rules/base.xml.in.h:496
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural Keyboard Pro OEM"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
#: ../rules/base.xml.in.h:497
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
#: ../rules/base.xml.in.h:498
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge Keyboard"
#: ../rules/base.xml.in.h:499
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft Office Keyboard"
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo Keyboard"
#: ../rules/base.xml.in.h:500
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:501
-msgid "Miscellaneous compatibility options"
-msgstr "Verschiedene Optionen zur Kompatibilität"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (Modell Y-RB6)"
#: ../rules/base.xml.in.h:502
-msgid "Mkd"
-msgstr "Mkd"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
#: ../rules/base.xml.in.h:503
-msgid "Mli"
-msgstr "Mli"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
#: ../rules/base.xml.in.h:504
-msgid "Mlt"
-msgstr "Mlt"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:505
-msgid "Mmr"
-msgstr "Mmr"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:506
-msgid "Mng"
-msgstr "Mng"
+msgid "Macedonian"
+msgstr "Mazedonisch"
#: ../rules/base.xml.in.h:507
-msgid "Mongolia"
-msgstr "Mongolei"
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Mazedonisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:508
-msgid "Montenegro"
-msgstr "Montenegro"
+msgid "Macintosh"
+msgstr "Macintosh"
#: ../rules/base.xml.in.h:509
-msgid "Morocco"
-msgstr "Marokko"
+msgid "Macintosh Old"
+msgstr "Macintosh (Alt)"
#: ../rules/base.xml.in.h:510
-msgid "Multilingual"
-msgstr "Mehrsprachig"
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Feststelltaste als zusätzliche Löschtaste verwenden"
#: ../rules/base.xml.in.h:511
-msgid "Multilingual, first part"
-msgstr "Mehrsprachig, erster Teil"
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Feststelltaste als zusätzliche Strg-Taste verwenden, aber Caps_Lock als Schnellzugriff erhalten"
#: ../rules/base.xml.in.h:512
-msgid "Multilingual, second part"
-msgstr "Mehrsprachig, zweiter Teil"
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Feststelltaste als zusätzliche Strg-Taste verwenden"
#: ../rules/base.xml.in.h:513
-msgid "Myanmar"
-msgstr "Myanmar"
+msgid "Make Caps Lock an additional ESC"
+msgstr "Feststelltaste als zusätzliche Esc-Taste verwenden"
#: ../rules/base.xml.in.h:514
-msgid "NICOLA-F style Backspace"
-msgstr "Löschtaste wie NICOLA-F"
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Feststelltaste als zusätzliche Hyper-Taste verwenden"
#: ../rules/base.xml.in.h:515
-msgid "NLA"
-msgstr "NLA"
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Feststelltaste als zusätzliche NumLock-Taste verwenden"
#: ../rules/base.xml.in.h:516
-msgid "Nativo"
-msgstr "Nativo"
+msgid "Make Caps Lock an additional Super"
+msgstr "Feststelltaste als zusätzliche Super-Taste verwenden"
#: ../rules/base.xml.in.h:517
-msgid "Nativo for Esperanto"
-msgstr "Nativo für Esperanto"
+msgid "Malayalam"
+msgstr "Malayalam"
#: ../rules/base.xml.in.h:518
-msgid "Nativo for USA keyboards"
-msgstr "Nativo für US-Tastaturen"
+msgid "Malayalam (Lalitha)"
+msgstr "Malayalam (Lalitha)"
#: ../rules/base.xml.in.h:519
-msgid "Neo 2"
-msgstr "Neo 2"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Malayalam (verbessertes Inscript mit Rupie-Symbol)"
#: ../rules/base.xml.in.h:520
-msgid "Nepal"
-msgstr "Nepal"
+msgid "Maltese"
+msgstr "Maltesisch"
#: ../rules/base.xml.in.h:521
-msgid "Netherlands"
-msgstr "Niederlande"
+msgid "Maltese (with US layout)"
+msgstr "Maltesisch (mit US-Belegung)"
#: ../rules/base.xml.in.h:522
-msgid "New phonetic"
-msgstr "Phonetisch, neu"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:523
-msgid "Nga"
-msgstr "Nga"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access Keyboard"
#: ../rules/base.xml.in.h:524
-msgid "Nigeria"
-msgstr "Nigeria"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:525
-msgid "Nld"
-msgstr "Nld"
+msgid "Menu"
+msgstr "Menü"
#: ../rules/base.xml.in.h:526
-msgid "Non-breakable space character at fourth level"
-msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene"
+msgid "Meta is mapped to Left Win"
+msgstr "Meta ist der linken Windows-Taste zugeordnet"
#: ../rules/base.xml.in.h:527
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der sechsten Ebene"
+msgid "Meta is mapped to Win keys"
+msgstr "Meta ist den Windows-Tasten zugeordnet"
#: ../rules/base.xml.in.h:528
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der sechsten Ebene (mit Strg + Umschalttaste)"
+msgid "Meta on Left Ctrl"
+msgstr "Meta auf linker Strg-Taste"
#: ../rules/base.xml.in.h:529
-msgid "Non-breakable space character at second level"
-msgstr "Nicht umbrechbares Leerzeichen in der zweiten Tastaturebene"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
#: ../rules/base.xml.in.h:530
-msgid "Non-breakable space character at third level"
-msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene"
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
#: ../rules/base.xml.in.h:531
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene, nichts in der vierten Ebene"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, Schwedisch"
#: ../rules/base.xml.in.h:532
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der vierten Ebene"
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:533
-msgid "Nor"
-msgstr "Nor"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
#: ../rules/base.xml.in.h:534
-msgid "Northern Saami"
-msgstr "Nördliches Saami"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:535
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Nördliches Saami, ohne Akzenttasten"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural Keyboard Pro OEM"
#: ../rules/base.xml.in.h:536
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:537
-msgid "Norway"
-msgstr "Norwegen"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
#: ../rules/base.xml.in.h:538
-msgid "Npl"
-msgstr "Npl"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
#: ../rules/base.xml.in.h:539
-msgid "Num Lock"
-msgstr "NumLock"
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft Office Keyboard"
#: ../rules/base.xml.in.h:540
-msgid "Numeric keypad delete key behaviour"
-msgstr "Verhalten der Löschtaste des Nummernblocks"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
#: ../rules/base.xml.in.h:541
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Tasten des Nummernblocks arbeiten wie bei Mac"
+msgid "Miscellaneous compatibility options"
+msgstr "Verschiedene Optionen zur Kompatibilität"
#: ../rules/base.xml.in.h:542
-msgid "Numeric keypad layout selection"
-msgstr "Belegungsauswahl des Nummernblocks"
+msgid "Mongolian"
+msgstr "Mongolisch"
#: ../rules/base.xml.in.h:543
-msgid "OADG 109A"
-msgstr "OADG 109A"
+msgid "Montenegrin"
+msgstr "Montenegrinisch"
#: ../rules/base.xml.in.h:544
-msgid "OLPC"
-msgstr "OLPC"
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Montenegrinisch (Kyrillisch mit Anführungszeichen)"
#: ../rules/base.xml.in.h:545
-msgid "OLPC Dari"
-msgstr "OLPC Dari"
+msgid "Montenegrin (Cyrillic)"
+msgstr "Montenegrinisch (kyrillisch)"
#: ../rules/base.xml.in.h:546
-msgid "OLPC Pashto"
-msgstr "OLPC Paschtunisch"
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Montenegrinisch, (Kyrillisch, »З« und »Ж« vertauscht)"
#: ../rules/base.xml.in.h:547
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC Süd-Usbekisch"
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Montenegrinisch (lateinische qwerty-Tastatur)"
#: ../rules/base.xml.in.h:548
-msgid "Occitan"
-msgstr "Okzitanisch"
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Montenegrinisch (lateinische qwerty-Tastatur, Unicode)"
#: ../rules/base.xml.in.h:549
-msgid "Ogham"
-msgstr "Ogham"
+msgid "Montenegrin (Latin unicode)"
+msgstr "Montenegrinisch (lateinisch, Unicode)"
#: ../rules/base.xml.in.h:550
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Montenegrinisch (lateinisch mit Anführungszeichen)"
#: ../rules/base.xml.in.h:551
-msgid "Oriya"
-msgstr "Oriya"
+msgid "Māori"
+msgstr "Māori"
#: ../rules/base.xml.in.h:552
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/Internettastatur"
+msgid "NICOLA-F style Backspace"
+msgstr "Löschtaste wie NICOLA-F"
#: ../rules/base.xml.in.h:553
-msgid "Ossetian"
-msgstr "Ossetisch"
+msgid "Nepali"
+msgstr "Nepalesisch"
#: ../rules/base.xml.in.h:554
-msgid "Ossetian, Winkeys"
-msgstr "Ossetisch, Windows-Tasten"
+msgid "Non-breakable space character at fourth level"
+msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene"
#: ../rules/base.xml.in.h:555
-msgid "Ossetian, legacy"
-msgstr "Ossetisch, veraltet"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der sechsten Ebene"
#: ../rules/base.xml.in.h:556
-msgid "PC-98xx Series"
-msgstr "PC-98xx-Serie"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der sechsten Ebene (mit Strg + Umschalttaste)"
#: ../rules/base.xml.in.h:557
-msgid "Pak"
-msgstr "Pak"
+msgid "Non-breakable space character at second level"
+msgstr "Nicht umbrechbares Leerzeichen in der zweiten Tastaturebene"
#: ../rules/base.xml.in.h:558
-msgid "Pakistan"
-msgstr "Pakistan"
+msgid "Non-breakable space character at third level"
+msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene"
#: ../rules/base.xml.in.h:559
-msgid "Pannonian Rusyn Homophonic"
-msgstr "Pannonian Rusyn Homophonic"
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene, nichts in der vierten Ebene"
#: ../rules/base.xml.in.h:560
-msgid "Pashto"
-msgstr "Paschtunisch"
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der vierten Ebene"
#: ../rules/base.xml.in.h:561
-msgid "Pattachote"
-msgstr "Pattachote"
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:562
-msgid "Pause"
-msgstr "Pause"
+msgid "Norwegian"
+msgstr "Norwegisch"
#: ../rules/base.xml.in.h:563
-msgid "Persian, with Persian Keypad"
-msgstr "Persisch. mit persischem Nummernblock"
+msgid "Norwegian (Dvorak)"
+msgstr "Norwegisch (Dvorak)"
#: ../rules/base.xml.in.h:564
-msgid "Phi"
-msgstr "Phi"
+msgid "Norwegian (Mac)"
+msgstr "Norwegisch (Macintosh)"
#: ../rules/base.xml.in.h:565
-msgid "Philippines"
-msgstr "Philippinen"
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Norwegisch (Macintosh, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:566
-msgid "Phonetic"
-msgstr "Phonetisch"
+msgid "Norwegian (Northern Saami"
+msgstr "Norwegisch (Nördliches Saami)"
#: ../rules/base.xml.in.h:567
-msgid "Phonetic Winkeys"
-msgstr "Phonetisch, Windows-Tasten"
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Norwegisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:568
-msgid "Pol"
-msgstr "Pol"
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Norwegisch (Nördliches Saami, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:569
-msgid "Poland"
-msgstr "Polen"
+msgid "Num Lock"
+msgstr "NumLock"
#: ../rules/base.xml.in.h:570
-msgid "Polytonic"
-msgstr "Polytonic"
+msgid "Numeric keypad delete key behaviour"
+msgstr "Verhalten der Löschtaste des Nummernblocks"
#: ../rules/base.xml.in.h:571
-msgid "Portugal"
-msgstr "Portugal"
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Tasten des Nummernblocks arbeiten wie bei Mac"
#: ../rules/base.xml.in.h:572
-msgid "Probhat"
-msgstr "Probhat"
+msgid "Numeric keypad layout selection"
+msgstr "Belegungsauswahl des Nummernblocks"
#: ../rules/base.xml.in.h:573
-msgid "Programmer Dvorak"
-msgstr "Dvorak für Programmierer"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:574
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Oriya"
+msgstr "Oriya"
#: ../rules/base.xml.in.h:575
-msgid "Prt"
-msgstr "Prt"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/Internettastatur"
#: ../rules/base.xml.in.h:576
-msgid "PrtSc"
-msgstr "Druck"
+msgid "PC-98xx Series"
+msgstr "PC-98xx-Serie"
#: ../rules/base.xml.in.h:577
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Pashto"
+msgstr "Paschtunisch"
#: ../rules/base.xml.in.h:578
-msgid "QWERTY (Baybayin)"
-msgstr "QWERTY (Baybayin)"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Paschtunisch (Afghanistan, OLPC)"
#: ../rules/base.xml.in.h:579
-msgid "Right Alt"
-msgstr "Rechte Alt-Taste"
+msgid "Pause"
+msgstr "Pause"
#: ../rules/base.xml.in.h:580
-msgid "Right Alt (while pressed)"
-msgstr "Rechte Alt-Taste (gedrückt halten)"
+msgid "Persian"
+msgstr "Persisch"
#: ../rules/base.xml.in.h:581
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Rechte Alt-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Persisch (Afghanistan, Dari-OLPC)"
#: ../rules/base.xml.in.h:582
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Rechte Alt-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
+msgid "Persian (with Persian Keypad)"
+msgstr "Persisch (mit persischem Nummernblock)"
#: ../rules/base.xml.in.h:583
-msgid "Right Alt key never chooses 3rd level"
-msgstr "Rechte Alt-Taste wählt niemals die dritte Tastaturebene."
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Philippinen - Dvorak (Baybayin)"
#: ../rules/base.xml.in.h:584
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Rechte Alt-Taste, Umschalttaste+rechte Alt-Taste ist Multi-Taste"
+msgid "Polish"
+msgstr "Polnisch"
#: ../rules/base.xml.in.h:585
-msgid "Right Ctrl"
-msgstr "Rechte Strg-Taste"
+msgid "Polish (Dvorak)"
+msgstr "Polnisch (Dvorak)"
#: ../rules/base.xml.in.h:586
-msgid "Right Ctrl (while pressed)"
-msgstr "Rechte Strg-Taste (gedrückt halten)"
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste 1)"
#: ../rules/base.xml.in.h:587
-msgid "Right Ctrl as Right Alt"
-msgstr "Rechte Strg-Taste wie rechte Alt-Taste"
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste mit Zitatzeichen)"
#: ../rules/base.xml.in.h:588
-msgid "Right Ctrl+Right Shift"
-msgstr "Rechte Strg-Taste und rechte Umschalttaste"
+msgid "Polish (Kashubian)"
+msgstr "Polnisch (Kaschubisch)"
#: ../rules/base.xml.in.h:589
-msgid "Right Shift"
-msgstr "Rechte Umschalttaste"
+msgid "Polish (programmer Dvorak)"
+msgstr "Polnisch (Dvorak für Programmierer)"
#: ../rules/base.xml.in.h:590
-msgid "Right Win"
-msgstr "Rechte Windows-Taste"
+msgid "Polish (qwertz)"
+msgstr "Polnisch (qwertz)"
#: ../rules/base.xml.in.h:591
-msgid "Right Win (while pressed)"
-msgstr "Rechte Windows-Taste (gedrückt halten)"
+msgid "Portuguese"
+msgstr "Portugiesisch"
#: ../rules/base.xml.in.h:592
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Rechte Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
+msgid "Portuguese (Brazil)"
+msgstr "Portugiesisch (Brasilien)"
#: ../rules/base.xml.in.h:593
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Rechte Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Portugiesisch (Brasilien, Dvorak)"
#: ../rules/base.xml.in.h:594
-msgid "Right hand"
-msgstr "Rechtshändig"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Portugiesisch (Brasilien, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:595
-msgid "Right handed Dvorak"
-msgstr "Dvorak (rechtshändig)"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Portugiesisch (Brasilien, Nativo für Esperanto)"
#: ../rules/base.xml.in.h:596
-msgid "Romania"
-msgstr "Rumänien"
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Portugiesisch (Brasilien, Nativo für US-Tastaturen)"
#: ../rules/base.xml.in.h:597
-msgid "Romanian keyboard with German letters"
-msgstr "Rumänische Tastatur mit deutschen Buchstaben"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Portugiesisch (Brasilien, nativo)"
#: ../rules/base.xml.in.h:598
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Rumänische Tastatur mit deutschen Buchstaben, ohne Akzenttasten"
+msgid "Portuguese (Mac)"
+msgstr "Portugiesisch (Macintosh)"
#: ../rules/base.xml.in.h:599
-msgid "Rou"
-msgstr "Rou"
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Portugiesisch (Macintosh, Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:600
-msgid "Rupee on 4"
-msgstr "Rupie-Symbol auf 4"
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Portugiesisch (Macintosh, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:601
-msgid "Rus"
-msgstr "Rus"
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Portugiesisch (Nativo für Esperanto)"
#: ../rules/base.xml.in.h:602
-msgid "Russia"
-msgstr "Russland"
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Portugiesisch (Nativo für US-Tastaturen)"
#: ../rules/base.xml.in.h:603
-msgid "Russian"
-msgstr "Russisch"
+msgid "Portuguese (Nativo)"
+msgstr "Portugiesisch (Nativo)"
#: ../rules/base.xml.in.h:604
-msgid "Russian phonetic"
-msgstr "Russisch (phonetisch)"
+msgid "Portuguese (Sun dead keys)"
+msgstr "Portugiesisch (Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:605
-msgid "Russian phonetic Dvorak"
-msgstr "Russisch (phonetisch, Dvorak)"
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Portugiesisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:606
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Russisch (phonetisch), ohne Akzenttasten"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:607
-msgid "Russian with Kazakh"
-msgstr "Russisch mit kasachischer Belegung"
+msgid "PrtSc"
+msgstr "Druck"
#: ../rules/base.xml.in.h:608
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless Keyboard"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Punjabi (Gurmukhi Jhelum)"
#: ../rules/base.xml.in.h:609
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Punjabi (Gurmukhi)"
+msgstr "Punjabi (Gurmukhi)"
#: ../rules/base.xml.in.h:610
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:611
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Right Alt"
+msgstr "Rechte Alt-Taste"
#: ../rules/base.xml.in.h:612
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Right Alt (while pressed)"
+msgstr "Rechte Alt-Taste (gedrückt halten)"
-#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr "SRB"
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Rechte Alt-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
#: ../rules/base.xml.in.h:614
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Rechte Alt-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
#: ../rules/base.xml.in.h:615
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Rechte Alt-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
#: ../rules/base.xml.in.h:616
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "Rechte Alt-Taste wählt niemals die dritte Tastaturebene."
#: ../rules/base.xml.in.h:617
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Rechte Alt-Taste, Umschalttaste+rechte Alt-Taste ist Multi-Taste"
#: ../rules/base.xml.in.h:618
-msgid "Scroll Lock"
-msgstr "Rollen"
+msgid "Right Ctrl"
+msgstr "Rechte Strg-Taste"
#: ../rules/base.xml.in.h:619
-msgid "Secwepemctsin"
-msgstr "Secwepemctsin"
+msgid "Right Ctrl (while pressed)"
+msgstr "Rechte Strg-Taste (gedrückt halten)"
#: ../rules/base.xml.in.h:620
-msgid "Semi-colon on third level"
-msgstr "Semikolon in der dritten Tastaturebene"
+msgid "Right Ctrl as Right Alt"
+msgstr "Rechte Strg-Taste wie rechte Alt-Taste"
#: ../rules/base.xml.in.h:621
-msgid "Sen"
-msgstr "Sen"
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Rechte Strg-Taste ist dem Menü zugeordnet"
#: ../rules/base.xml.in.h:622
-msgid "Senegal"
-msgstr "Senegal"
+msgid "Right Ctrl+Right Shift"
+msgstr "Rechte Strg-Taste und rechte Umschalttaste"
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr "Serbien"
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "Rechte Umschalttaste"
#: ../rules/base.xml.in.h:624
-msgid "Serbian"
-msgstr "Serbisch"
+msgid "Right Win"
+msgstr "Rechte Windows-Taste"
#: ../rules/base.xml.in.h:625
-msgid "Serbo-Croatian"
-msgstr "Serbokroatisch"
+msgid "Right Win (while pressed)"
+msgstr "Rechte Windows-Taste (gedrückt halten)"
#: ../rules/base.xml.in.h:626
-msgid "Shift cancels Caps Lock"
-msgstr "Umschalttaste deaktiviert Feststelltaste"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Rechte Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene"
#: ../rules/base.xml.in.h:627
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Umschalttaste deaktiviert NumLock nicht, wechselt stattdessen in die dritte Tastaturebene"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Rechte Win-Taste wählt die fünfte Ebene, sperrt wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der fünften Ebene. Einmaliges Drücken löst die Sperrung."
#: ../rules/base.xml.in.h:628
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Umschalttaste funktioniert mit den Tasten des Nummernblocks wie in MS Windows"
+msgid "Romanian"
+msgstr "Rumänisch"
#: ../rules/base.xml.in.h:629
-msgid "Shift+Caps Lock"
-msgstr "Umschalt-+Feststelltaste"
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Rumänisch (Krimtatarisch, Dobruca-1 Q)"
#: ../rules/base.xml.in.h:630
-msgid "Simple"
-msgstr "Einfach"
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Rumänisch (Krimtatarisch, Dobruca-2 Q)"
#: ../rules/base.xml.in.h:631
-msgid "Sindhi"
-msgstr "Sindhi"
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Rumänisch (Krimtatarisch, Türkisch Alt-Q)"
#: ../rules/base.xml.in.h:632
-msgid "Slovakia"
-msgstr "Slowakei"
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Rumänisch (Krimtatarisch, Türkisch F)"
#: ../rules/base.xml.in.h:633
-msgid "Slovenia"
-msgstr "Slowenien"
+msgid "Romanian (WinKeys)"
+msgstr "Rumänisch (Windows-Tasten)"
#: ../rules/base.xml.in.h:634
-msgid "South Africa"
-msgstr "Südafrika"
+msgid "Romanian (cedilla)"
+msgstr "Rumänisch (Cedilla)"
#: ../rules/base.xml.in.h:635
-msgid "Southern Uzbek"
-msgstr "Süd-Usbekisch"
+msgid "Romanian (standard cedilla)"
+msgstr "Rumänisch (Standard Cedilla)"
#: ../rules/base.xml.in.h:636
-msgid "Spain"
-msgstr "Spanien"
+msgid "Romanian (standard)"
+msgstr "Rumänisch (Standard)"
#: ../rules/base.xml.in.h:637
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Spezialtasten für Server (Strg+Alt+&lt;Taste&gt;)"
+msgid "Rupee on 4"
+msgstr "Rupie-Symbol auf 4"
#: ../rules/base.xml.in.h:638
-msgid "Sri Lanka"
-msgstr "Sri Lanka"
+msgid "Russian"
+msgstr "Russisch"
#: ../rules/base.xml.in.h:639
-msgid "Standard"
-msgstr "Standard"
+msgid "Russian (Bashkirian)"
+msgstr "Russisch (Baschkirisch)"
#: ../rules/base.xml.in.h:640
-msgid "Standard (Cedilla)"
-msgstr "Standard (Cedilla)"
+msgid "Russian (Chuvash Latin)"
+msgstr "Russisch (Tschuwaschisch, lateinische Schrift)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr "Russisch (Tschuwaschisch)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:642
-msgid "Standard RSTU"
-msgstr "Standard RSTU"
+msgid "Russian (DOS)"
+msgstr "Russisch (DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr "Russisch (Georgien)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:644
-msgid "Standard RSTU on Russian layout"
-msgstr "Standard-RSTU mit russischer Belegung"
+msgid "Russian (Germany, phonetic)"
+msgstr "Russisch (Deutschland, phonetisch)"
#: ../rules/base.xml.in.h:645
-msgid "Sun Type 5/6"
-msgstr "Sun Typ 5/6"
+msgid "Russian (Kalmyk)"
+msgstr "Russisch (Kalmykisch)"
#: ../rules/base.xml.in.h:646
-msgid "Sun dead keys"
-msgstr "Sun-Akzenttasten"
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Russisch (Kasachstan, mit Kasachisch)"
#: ../rules/base.xml.in.h:647
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power Multimedia Keyboard"
+msgid "Russian (Komi)"
+msgstr "Russisch (Komi)"
#: ../rules/base.xml.in.h:648
-msgid "Svdvorak"
-msgstr "Svdvorak"
+msgid "Russian (Mari)"
+msgstr "Russisch (Mari)"
#: ../rules/base.xml.in.h:649
-msgid "Svk"
-msgstr "Svk"
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Russisch (Ossetisch, Windows-Tasten)"
#: ../rules/base.xml.in.h:650
-msgid "Svn"
-msgstr "Svn"
+msgid "Russian (Ossetian, legacy)"
+msgstr "Russisch (Ossetisch, veraltet)"
#: ../rules/base.xml.in.h:651
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Strg-Taste und Feststelltaste vertauschen"
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Russisch (Polen, phonetisch, Dvorak)"
#: ../rules/base.xml.in.h:652
-msgid "Swap ESC and Caps Lock"
-msgstr "Esc und Feststelltaste vertauschen"
+msgid "Russian (Serbian)"
+msgstr "Russisch (Serbisch)"
#: ../rules/base.xml.in.h:653
-msgid "Swe"
-msgstr "Swe"
+msgid "Russian (Sweden, phonetic)"
+msgstr "Russisch (Schweden, phonetisch)"
#: ../rules/base.xml.in.h:654
-msgid "Sweden"
-msgstr "Schweden"
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Russisch (Schweden, phonetisch, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:655
-msgid "Switzerland"
-msgstr "Schweiz"
+msgid "Russian (Tatar)"
+msgstr "Russisch (Tatarisch)"
#: ../rules/base.xml.in.h:656
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (tablet PC)"
+msgid "Russian (US, phonetic)"
+msgstr "Russisch (USA, phonetisch)"
#: ../rules/base.xml.in.h:657
-msgid "Syr"
-msgstr "Syr"
+msgid "Russian (Udmurt)"
+msgstr "Russisch (Udmurtisch)"
#: ../rules/base.xml.in.h:658
-msgid "Syria"
-msgstr "Syrien"
+msgid "Russian (Yakut)"
+msgstr "Russisch (Jakutisch)"
#: ../rules/base.xml.in.h:659
-msgid "Syriac"
-msgstr "Syrisch"
+msgid "Russian (legacy)"
+msgstr "Russisch (veraltet)"
#: ../rules/base.xml.in.h:660
-msgid "Syriac phonetic"
-msgstr "Syrisch (phonetisch)"
+msgid "Russian (phonetic WinKeys)"
+msgstr "Russisch (phonetisch mit Win-Tasten)"
#: ../rules/base.xml.in.h:661
-msgid "TIS-820.2538"
-msgstr "Thai (TIS-620)"
+msgid "Russian (phonetic)"
+msgstr "Russisch (phonetisch)"
#: ../rules/base.xml.in.h:662
-msgid "Tajikistan"
-msgstr "Tadschikistan"
+msgid "Russian (typewriter)"
+msgstr "Russisch (Schreibmaschine)"
#: ../rules/base.xml.in.h:663
-msgid "Tamil"
-msgstr "Tamilisch"
+msgid "Russian (typewriter, legacy)"
+msgstr "Russisch (Schreibmaschine, veraltet)"
#: ../rules/base.xml.in.h:664
-msgid "Tamil Keyboard with Numerals"
-msgstr "Tamilische Tastatur mit Ziffern"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless Keyboard"
#: ../rules/base.xml.in.h:665
-msgid "Tamil TAB Typewriter"
-msgstr "Tamilisch (TAB Schreibmaschine)"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:666
-msgid "Tamil TSCII Typewriter"
-msgstr "Tamilisch (TSCII Schreibmaschine)"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:667
-msgid "Tamil Unicode"
-msgstr "Tamilisch (Unicode)"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:668
-msgid "Tanzania"
-msgstr "Tansania"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:669
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:670
-msgid "Tatar"
-msgstr "Tatarisch"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:671
-msgid "Telugu"
-msgstr "Telugu"
+msgid "Saisiyat (Taiwan)"
+msgstr "Saisiyat (Taiwan)"
#: ../rules/base.xml.in.h:672
-msgid "Tha"
-msgstr "Tha"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:673
-msgid "Thailand"
-msgstr "Thailand"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:674
-msgid "Tibetan"
-msgstr "Tibetisch"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
#: ../rules/base.xml.in.h:675
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Tibetanisch (mit ASCII-Ziffern)"
+msgid "Scroll Lock"
+msgstr "Rollen"
#: ../rules/base.xml.in.h:676
-msgid "Tifinagh"
-msgstr "Tifinagh"
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
#: ../rules/base.xml.in.h:677
-msgid "Tifinagh alternative"
-msgstr "Tifinagh (alternativ)"
+msgid "Semi-colon on third level"
+msgstr "Semikolon in der dritten Tastaturebene"
#: ../rules/base.xml.in.h:678
-msgid "Tifinagh alternative phonetic"
-msgstr "Tifinagh (alternativ, phonetisch)"
+msgid "Serbian"
+msgstr "Serbisch"
#: ../rules/base.xml.in.h:679
-msgid "Tifinagh extended"
-msgstr "Tifinagh (erweitert)"
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Serbisch (lateinische qwerty-Tastatur, Unicode)"
#: ../rules/base.xml.in.h:680
-msgid "Tifinagh extended phonetic"
-msgstr "Tifinagh (erweitert, phonetisch)"
+msgid "Serbian (Latin Unicode)"
+msgstr "Serbisch (Lateinisch Unicode)"
#: ../rules/base.xml.in.h:681
-msgid "Tifinagh phonetic"
-msgstr "Tifinagh (phonetisch)"
+msgid "Serbian (Latin qwerty)"
+msgstr "Serbisch (Lateinische qwerty-Tastatur)"
#: ../rules/base.xml.in.h:682
-msgid "Tilde (~) variant"
-msgstr "Tilde-Variante (~)"
+msgid "Serbian (Latin with guillemets)"
+msgstr "Serbisch (Lateinisch mit Anführungszeichen)"
#: ../rules/base.xml.in.h:683
-msgid "Tjk"
-msgstr "Tjk"
+msgid "Serbian (Latin)"
+msgstr "Serbisch (Lateinisch)"
#: ../rules/base.xml.in.h:684
-msgid "Tkm"
-msgstr "Tkm"
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Serbisch (Pannonian Rusyn Homophonic)"
#: ../rules/base.xml.in.h:685
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "Zur entsprechenden Taste einer Dvorak-Tastatur."
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Serbisch (»З« und »Ж« sind vertauscht)"
#: ../rules/base.xml.in.h:686
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "Zur entsprechenden Taste einer Qwerty-Tastatur."
+msgid "Serbian (with guillemets)"
+msgstr "Serbisch (mit Anführungszeichen)"
#: ../rules/base.xml.in.h:687
-msgid "Toggle PointerKeys with Shift + NumLock."
-msgstr "Zeigertasten mit Umschalttaste + NumLock umschalten"
+msgid "Serbo-Croatian (US)"
+msgstr "Serbokroatisch (US)"
#: ../rules/base.xml.in.h:688
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
+msgid "Shift cancels Caps Lock"
+msgstr "Umschalttaste deaktiviert Feststelltaste"
#: ../rules/base.xml.in.h:689
-msgid "Traditional phonetic"
-msgstr "Traditionell (phonetisch)"
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Umschalttaste deaktiviert NumLock nicht, wechselt stattdessen in die dritte Tastaturebene"
#: ../rules/base.xml.in.h:690
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access Keyboard"
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Umschalttaste funktioniert mit den Tasten des Nummernblocks wie in MS Windows"
#: ../rules/base.xml.in.h:691
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+msgid "Shift+Caps Lock"
+msgstr "Umschalt-+Feststelltaste"
#: ../rules/base.xml.in.h:692
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
+msgid "Sindhi"
+msgstr "Sindhi"
#: ../rules/base.xml.in.h:693
-msgid "Tur"
-msgstr "Tur"
+msgid "Sinhala"
+msgstr "Singhalesisch"
#: ../rules/base.xml.in.h:694
-msgid "Turkey"
-msgstr "Türkei"
+msgid "Slovak"
+msgstr "Slowakisch"
#: ../rules/base.xml.in.h:695
-msgid "Turkmenistan"
-msgstr "Turkmenien"
+msgid "Slovak (extended Backslash)"
+msgstr "Slowakisch (erweiterter Backslash)"
#: ../rules/base.xml.in.h:696
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
+msgid "Slovak (qwerty)"
+msgstr "Slowakisch (qwerty)"
#: ../rules/base.xml.in.h:697
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Slowakisch (qwerty, erweiterter Backslash)"
#: ../rules/base.xml.in.h:698
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
+msgid "Slovene"
+msgstr "Slowenisch"
#: ../rules/base.xml.in.h:699
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU-Modus)"
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Slowenisch (US-Tastatur mit slowenischen Buchstaben)"
#: ../rules/base.xml.in.h:700
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP-Modus)"
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Slowenisch (Anführungszeichen für Zitate verwenden)"
#: ../rules/base.xml.in.h:701
-msgid "Typewriter"
-msgstr "Schreibmaschine"
+msgid "Spanish"
+msgstr "Spanisch"
#: ../rules/base.xml.in.h:702
-msgid "Typewriter, legacy"
-msgstr "Schreibmaschine, veraltet"
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Spanisch (Asturische Variante mit unterpunktetem L und H)"
#: ../rules/base.xml.in.h:703
-msgid "Tza"
-msgstr "Tza"
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Spanisch (Katalanische Variante mit mittelpunktiertem L)"
#: ../rules/base.xml.in.h:704
-msgid "UCW layout (accented letters only)"
-msgstr "UCW-Belegung (nur akzentuierte Buchstaben)"
+msgid "Spanish (Dvorak)"
+msgstr "Spanisch (Dvorak)"
#: ../rules/base.xml.in.h:705
-msgid "US Dvorak with CZ UCW support"
-msgstr "US Dvorak mit CZ-UCW-Unterstützung"
+msgid "Spanish (Latin American)"
+msgstr "Spabisch (Lateinamerikanisch)"
#: ../rules/base.xml.in.h:706
-msgid "US keyboard with Bosnian digraphs"
-msgstr "US-Tastatur mit bosnischen Digraphen"
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Spanisch (Lateinamerikanisch, ohne Akzenttasten)"
#: ../rules/base.xml.in.h:707
-msgid "US keyboard with Bosnian letters"
-msgstr "US-Tastatur mit bosnischen Buchstaben"
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Spanisch (Lateinamerikanisch, Akzent-Tilde einschließen)"
#: ../rules/base.xml.in.h:708
-msgid "US keyboard with Croatian digraphs"
-msgstr "US-Tastatur mit kroatischen Digraphen"
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Spanisch (Lateinamerikanisch, Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:709
-msgid "US keyboard with Croatian letters"
-msgstr "US-Tastatur mit kroatischen Buchstaben"
+msgid "Spanish (Mac)"
+msgstr "Spanisch (Macintosh)"
#: ../rules/base.xml.in.h:710
-msgid "US keyboard with Estonian letters"
-msgstr "US-Tastatur mit estnischen Buchstaben"
+msgid "Spanish (Sun dead keys)"
+msgstr "Spanisch (Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:711
-msgid "US keyboard with Italian letters"
-msgstr "US-Tastatur mit italienischen Buchstaben"
+msgid "Spanish (eliminate dead keys)"
+msgstr "Spanisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:712
-msgid "US keyboard with Lithuanian letters"
-msgstr "US-Tastatur mit litauischen Buchstaben"
+msgid "Spanish (include dead tilde)"
+msgstr "Spanisch (Akzent-Tilde einschließen)"
#: ../rules/base.xml.in.h:713
-msgid "US keyboard with Slovenian letters"
-msgstr "US-Tastatur mit slowenischen Buchstaben"
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Spezialtasten für Server (Strg+Alt+&lt;Taste&gt;)"
-#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr "USA"
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Typ 5/6"
#: ../rules/base.xml.in.h:715
-msgid "Udmurt"
-msgstr "Udmurtisch"
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power Multimedia Keyboard"
#: ../rules/base.xml.in.h:716
-msgid "Ukr"
-msgstr "Ukr"
+msgid "Swahili (Kenya)"
+msgstr "Swahili (Kenia)"
#: ../rules/base.xml.in.h:717
-msgid "Ukraine"
-msgstr "Ukraine"
+msgid "Swahili (Tanzania)"
+msgstr "Swahili (Tansania)"
#: ../rules/base.xml.in.h:718
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren)"
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Strg-Taste und Feststelltaste vertauschen"
#: ../rules/base.xml.in.h:719
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren). Mathematische Operatoren befinden sich in der Standardebene."
+msgid "Swap ESC and Caps Lock"
+msgstr "Esc und Feststelltaste vertauschen"
#: ../rules/base.xml.in.h:720
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+msgid "Swedish"
+msgstr "Schwedisch"
#: ../rules/base.xml.in.h:721
-msgid "United Kingdom"
-msgstr "Vereinigtes Königreich"
+msgid "Swedish (Dvorak)"
+msgstr "Schwedisch (Dvorak)"
#: ../rules/base.xml.in.h:722
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+msgid "Swedish (Mac)"
+msgstr "Schwedisch (Macintosh)"
#: ../rules/base.xml.in.h:723
-msgid "Urdu, Alternative phonetic"
-msgstr "Urdu, Alternative (phonetisch)"
+msgid "Swedish (Svdvorak)"
+msgstr "Schwedisch (Svdvorak)"
#: ../rules/base.xml.in.h:724
-msgid "Urdu, Phonetic"
-msgstr "Urdu, phonetisch"
+msgid "Swedish (eliminate dead keys)"
+msgstr "Schwedisch (ohne Akzenttasten)"
#: ../rules/base.xml.in.h:725
-msgid "Urdu, Winkeys"
-msgstr "Urdu, Windows-Tasten"
+msgid "Swedish (northern Saami)"
+msgstr "Schwedisch (Nördliches Saami)"
#: ../rules/base.xml.in.h:726
-msgid "Use Bosnian digraphs"
-msgstr "Bosnische Digraphen verwenden"
+msgid "Swiss"
+msgstr "Schweizerdeutsch"
#: ../rules/base.xml.in.h:727
-msgid "Use Croatian digraphs"
-msgstr "Kroatische Digraphen verwenden"
+msgid "Swiss (legacy)"
+msgstr "Schweiz (veraltet)"
#: ../rules/base.xml.in.h:728
-msgid "Use guillemets for quotes"
-msgstr "Anführungszeichen für Zitate verwenden"
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet PC)"
#: ../rules/base.xml.in.h:729
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Tastatur-LED zur Anzeige der alternativen Belegung verwenden"
+msgid "Syriac"
+msgstr "Syrisch"
#: ../rules/base.xml.in.h:730
-msgid "Using space key to input non-breakable space character"
-msgstr "Leertaste zur Eingabe nicht umbrechbarer Zeichen verwenden"
+msgid "Syriac (phonetic)"
+msgstr "Syrisch (phonetisch)"
#: ../rules/base.xml.in.h:731
-msgid "Usual space at any level"
-msgstr "Leertaste gibt in jeder Ebene stets Leerzeichen aus"
+msgid "Taiwanese"
+msgstr "Taiwanesisch"
#: ../rules/base.xml.in.h:732
-msgid "Uzb"
-msgstr "Uzb"
+msgid "Taiwanese (indigenous)"
+msgstr "Taiwanesisch (indigen)"
#: ../rules/base.xml.in.h:733
-msgid "Uzbekistan"
-msgstr "Usbekistan"
+msgid "Tajik"
+msgstr "Tadschikisch"
#: ../rules/base.xml.in.h:734
-msgid "Vietnam"
-msgstr "Vietnam"
+msgid "Tajik (legacy)"
+msgstr "Tadschikisch (veraltet)"
#: ../rules/base.xml.in.h:735
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "ViewSonic KU-306 Internet Keyboard"
+msgid "Tamil"
+msgstr "Tamilisch"
#: ../rules/base.xml.in.h:736
-msgid "Vnm"
-msgstr "Vnm"
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Tamilisch (Sri Lanka, TAB Schreibmaschine)"
#: ../rules/base.xml.in.h:737
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren)"
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Tamilisch (Sri Lanka, Unicode)"
#: ../rules/base.xml.in.h:738
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren). Mathematische Operatoren in der Standardebene"
+msgid "Tamil (TAB typewriter)"
+msgstr "Tamilisch (TAB Schreibmaschine)"
#: ../rules/base.xml.in.h:739
-msgid "Wang model 724 azerty"
-msgstr "Wang Modell 724 (azerty)"
+msgid "Tamil (TSCII typewriter)"
+msgstr "Tamilisch (TSCII Schreibmaschine)"
#: ../rules/base.xml.in.h:740
-msgid "Western"
-msgstr "Westlich"
+msgid "Tamil (Unicode)"
+msgstr "Tamilisch (Unicode)"
#: ../rules/base.xml.in.h:741
-msgid "Winbook Model XP5"
-msgstr "Winbook Modell XP5"
+msgid "Tamil (keyboard with numerals)"
+msgstr "Tamilisch (Tastatur mit Ziffern)"
#: ../rules/base.xml.in.h:742
-msgid "Winkeys"
-msgstr "Win-Tasten"
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
#: ../rules/base.xml.in.h:743
-msgid "With &lt;\\|&gt; key"
-msgstr "Mit &lt;\\|&gt;-Taste"
+msgid "Telugu"
+msgstr "Telugu"
#: ../rules/base.xml.in.h:744
-msgid "With EuroSign on 5"
-msgstr "mit Euro-Symbol auf »5«"
+msgid "Thai"
+msgstr "Thailändisch"
#: ../rules/base.xml.in.h:745
-msgid "With guillemets"
-msgstr "Mit Anführungszeichen"
+msgid "Thai (Pattachote)"
+msgstr "Thailändisch (Pattachote)"
#: ../rules/base.xml.in.h:746
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! Internet Keyboard"
+msgid "Thai (TIS-820.2538)"
+msgstr "Thailändisch (TIS-820.2538)"
#: ../rules/base.xml.in.h:747
-msgid "Yakut"
-msgstr "Jakutisch"
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "Zur entsprechenden Taste einer Dvorak-Tastatur."
#: ../rules/base.xml.in.h:748
-msgid "Yoruba"
-msgstr "Joruba"
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "Zur entsprechenden Taste einer Qwerty-Tastatur."
#: ../rules/base.xml.in.h:749
-msgid "Z and ZHE swapped"
-msgstr "»З« und »Ж« sind vertauscht"
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Zeigertasten mit Umschalttaste + NumLock umschalten"
#: ../rules/base.xml.in.h:750
-msgid "Zaf"
-msgstr "Zaf"
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
#: ../rules/base.xml.in.h:751
-msgid "Zero-width non-joiner character at second level"
-msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene"
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access Keyboard"
#: ../rules/base.xml.in.h:752
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
-msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Ebene"
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
#: ../rules/base.xml.in.h:753
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
-msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, nichts in der vierten Ebene"
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
#: ../rules/base.xml.in.h:754
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
-msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der vierten Ebene"
+msgid "Tswana"
+msgstr "Tswana"
#: ../rules/base.xml.in.h:755
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
-msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, verbindendes Zeichen der Breite Null in der vierten Ebene"
+msgid "Turkish"
+msgstr "Türkisch"
#: ../rules/base.xml.in.h:756
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
-msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, verbindendes Zeichen der Breite Null in der dritten Ebene"
+msgid "Turkish (Alt-Q)"
+msgstr "Türkisch (Alt-Q)"
#: ../rules/base.xml.in.h:757
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
-msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, verbindendes Zeichen der Breite Null in der dritten Ebene, nicht umbrechbares Leerzeichen in der vierten Tastaturebene"
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Türkisch (Krimtatarisch, türkisches Alt-Q)"
#: ../rules/base.xml.in.h:758
-msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
-msgstr "Nicht verbindendes Zeichen der Breite Null in der dritten Ebene, verbindendes Zeichen der Breite Null in der vierten Ebene"
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Türkisch (Krimtatarisch, türkisches F)"
#: ../rules/base.xml.in.h:759
-msgid "azerty"
-msgstr "azerty"
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "KTürkisch (Krimtatarisch, türkisches Q)"
#: ../rules/base.xml.in.h:760
-msgid "azerty/digits"
-msgstr "azerty/Ziffern"
+msgid "Turkish (F)"
+msgstr "Türkisch, (F)"
#: ../rules/base.xml.in.h:761
-msgid "digits"
-msgstr "Ziffern"
+msgid "Turkish (Sun dead keys)"
+msgstr "Türkisch (Sun-Akzenttasten)"
#: ../rules/base.xml.in.h:762
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "Falsch platziertes Semikolon und Anführungszeichen (veraltet)"
+msgid "Turkish (international with dead keys)"
+msgstr "Türkisch (International, mit Akzenttasten)"
#: ../rules/base.xml.in.h:763
-msgid "lyx"
-msgstr "LyX"
+msgid "Turkmen"
+msgstr "Turkmenisch"
#: ../rules/base.xml.in.h:764
-msgid "qwerty"
-msgstr "qwerty"
+msgid "Turkmen (Alt-Q)"
+msgstr "Turkmenisch (Alt-Q)"
#: ../rules/base.xml.in.h:765
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, erweiterter Backslash"
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
#: ../rules/base.xml.in.h:766
-msgid "qwerty/digits"
-msgstr "qwerty/Ziffern"
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
#: ../rules/base.xml.in.h:767
-msgid "qwertz"
-msgstr "qwertz"
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL"
-msgstr "APL"
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU-Modus)"
-#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Atsina"
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP-Modus)"
-#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr "Avestisch"
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Ukrainisch"
-#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr "Akzente kombinieren, anstelle von Akzenttasten"
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Ukrainisch (Krimtatarisch, Türkisch Alt-Q)"
-#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr "Couer D'alene Salish"
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Ukrainisch (Krimtatarisch, Türkisch F)"
-#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr "International (AltGr-Unicode-Kombination)"
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Ukrainisch (Krimtatarisch, Türkisch Q)"
-#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "International (AltGr-Unicode-Kombination, alternativ)"
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Ukrainisch (Windows-Tasten)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Ukrainisch (homophon)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Ukrainisch (veraltet)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Ukrainisch (phonetisch)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Ukrainisch (Standard-RSTU mit russischer Belegung)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Ukrainisch (Standard-RSTU)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Ukrainisch (Schreibmaschine)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren). Mathematische Operatoren befinden sich in der Standardebene."
-#~ msgid "2"
-#~ msgstr "2"
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
-#~ msgid "4"
-#~ msgstr "4"
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Urdu (Pakistan)"
-#~ msgid "5"
-#~ msgstr "5"
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Urdu (Pakistan, CRULP)"
-#~ msgid "E"
-#~ msgstr "E"
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Urdu (Pakistan, NLA)"
-#~ msgid "LAm"
-#~ msgstr "LAm"
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Urdu (Windows-Tasten)"
-#~ msgid "CapsLock"
-#~ msgstr "Feststelltaste"
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Urdu (Alternative, phonetisch)"
-#~ msgid "ScrollLock"
-#~ msgstr "Rollen"
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Urdu (phonetisch)"
-#~ msgid "ACPI Standard"
-#~ msgstr "ACPI-Standard"
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Tastatur-LED zur Anzeige der alternativen Belegung verwenden"
-#~ msgid "Bhu"
-#~ msgstr "Bhu"
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Leertaste zur Eingabe nicht umbrechbarer Zeichen verwenden"
-#~ msgid "DRC"
-#~ msgstr "DRC"
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Leertaste gibt in jeder Ebene stets Leerzeichen aus"
-#~ msgid "Dvorak international"
-#~ msgstr "Dvorak international"
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Usbekisch"
-#~ msgid "Evdev-managed keyboard"
-#~ msgstr "Evdev-verwaltete Tastatur"
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Usbekisch (Afghanistan)"
-#~ msgid "Gre"
-#~ msgstr "Gre"
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Usbekisch (Afghanistan, OLPC)"
-#~ msgid "Gui"
-#~ msgstr "Gui"
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Usbekisch (Krimtatarisch, Türkisch Alt-Q)"
-#~ msgid "Lav"
-#~ msgstr "Lav"
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Usbekisch (Krimtatarisch, Türkisch F)"
-#~ msgid "Nep"
-#~ msgstr "Nep"
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Usbekisch (Krimtatarisch, Türkisch Q)"
-#~ msgid "SrL"
-#~ msgstr "SrL"
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Usbekisch (lateinische Schrift)"
-#~ msgid "Baltic+"
-#~ msgstr "Baltisch+"
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "Vietnamesisch"
-#~ msgid "IBM ThinkPad 560Z/600/600E/A22E, Intl"
-#~ msgstr "IBM ThinkPad 560Z/600/600E/A22E, Intl"
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 Internet Keyboard"
-#~ msgid "Pro"
-#~ msgstr "Pro"
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren)"
-#~ msgid "Pro Keypad"
-#~ msgstr "Pro Keypad"
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren). Mathematische Operatoren in der Standardebene"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Modell XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Wolof"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! Internet Keyboard"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Joruba"
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene"
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Ebene"
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, nichts in der vierten Ebene"
+
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, schmales nicht umbrechbares Leerzeichen in der vierten Ebene"
+
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, nicht umbrechbares Leerzeichen in der dritten Tastaturebene, verbindendes Zeichen der Breite Null in der vierten Ebene"
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, verbindendes Zeichen der Breite Null in der dritten Ebene"
+
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Nicht verbindendes Zeichen der Breite Null in der zweiten Ebene, verbindendes Zeichen der Breite Null in der dritten Ebene, nicht umbrechbares Leerzeichen in der vierten Tastaturebene"
+
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Nicht verbindendes Zeichen der Breite Null in der dritten Ebene, verbindendes Zeichen der Breite Null in der vierten Ebene"
-#~ msgid "Standard Phonetic"
-#~ msgstr "Standard, phonetisch"
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
-#~ msgid "Brazilian ABNT2"
-#~ msgstr "ABNT2 (Brasilianisch)"
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
-#~ msgid "Japanese 106-key"
-#~ msgstr "Japanisch (106 Tasten)"
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
-#~ msgid "Kir"
-#~ msgstr "Kir"
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
-#~ msgid "Korean 106-key"
-#~ msgstr "Koreanisch (106 Tasten)"
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
-#~ msgid "Super is mapped to Win keys"
-#~ msgstr "Super ist den Win-Tasten zugeordnet"
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
-#~ msgid "US keyboard with Slovenian digraphs"
-#~ msgstr "US-Tastatur mit slowenischen Digraphen"
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
-#~ msgid "Unicode"
-#~ msgstr "Unicode"
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
-#~ msgid "Use Slovenian digraphs"
-#~ msgstr "Slowenische Digraphen verwenden"
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
-#~ msgid "Add the EuroSign to the 2 key."
-#~ msgstr "Euro-Symbol zur Taste »2« hinzufügen."
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
-#~ msgid "Add the EuroSign to the 4 key."
-#~ msgstr "Euro-Symbol zur Taste »4« hinzufügen."
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
-#~ msgid "Add the EuroSign to the 5 key."
-#~ msgstr "Euro-Symbol zur Taste »5« hinzufügen."
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
-#~ msgid "Add the EuroSign to the E key."
-#~ msgstr "Euro-Symbol zur Taste »E« hinzufügen."
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
-#~ msgid "Alt+Ctrl change layout."
-#~ msgstr "Alt+Strg ändern die Belegung."
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
-#~ msgid "Alt+Shift change layout."
-#~ msgstr "Alt-+Umschalttaste wechselt die Belegung."
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
-#~ msgid "CapsLock LED shows alternative layout."
-#~ msgstr "Feststelltasten-LED zeigt alternative Belegung an."
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
-#~ msgid "CapsLock key changes layout."
-#~ msgstr "Die Feststelltaste ändert die Belegung."
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
-#~ msgid "Ctrl+Shift change layout."
-#~ msgstr "Strg+Umschalttaste ändert die Belegung."
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
-#~ msgid "Hewlett-Packard Internet Keyboard 5181"
-#~ msgstr "Hewlett-Packard Internet Keyboard 5181"
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
-#~ msgid "Hewlett-Packard Internet Keyboard 5185"
-#~ msgstr "Hewlett-Packard Internet Keyboard 5185"
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
-#~ msgid "Hewlett-Packard SK-2505 Internet Keyboard"
-#~ msgstr "Hewlett-Packard SK-2505 Internet Keyboard"
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
-#~ msgid "IBM Rapid Access II (alternate option)"
-#~ msgstr "IBM Rapid Access II (alternative Option)"
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
-#, fuzzy
-#~ msgid "LCtrl+LShift change layout."
-#~ msgstr "Beide Alt-Tasten gleichzeitig ändern die Belegung."
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
-#~ msgid "Layout switching"
-#~ msgstr "Umschalten der Belegung"
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
-#~ msgid "Left Alt key changes layout."
-#~ msgstr "Linke Alt-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
-#~ msgid "Left Ctrl key changes layout."
-#~ msgstr "Linke Strg-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
-#~ msgid "Left Shift key changes layout."
-#~ msgstr "Linke Umschalt-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
-#~ msgid "Left Win-key changes layout."
-#~ msgstr "Linke Windows-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
-#, fuzzy
-#~ msgid "Left Win-key is Compose."
-#~ msgstr "Linke Windows-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
-#, fuzzy
-#~ msgid "Legacy keypad"
-#~ msgstr "Altes Multi-Threading unterstützen"
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
-#, fuzzy
-#~ msgid "Menu is Compose."
-#~ msgstr "Der Menübaum ist leer"
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
-#~ msgid "Neostyle"
-#~ msgstr "Neostyle"
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
-#~ msgid "NumLock LED shows alternative layout."
-#~ msgstr "NumLock-LED zeigt alternative Belegung an."
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
-#~ msgid "Press Left Alt key to choose 3rd level."
-#~ msgstr "Linke Alt-Taste drücken, um in die dritte Tastaturebene zu gelangen."
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
-#~ msgid "Press Left Win-key to choose 3rd level."
-#~ msgstr "Linke Win-Taste drücken, um in die dritte Tastaturebene zu gelangen."
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
-#~ msgid "Press Right Alt key to choose 3rd level."
-#~ msgstr "Rechte Alt-Taste drücken, um in die dritte Tastaturebene zu gelangen."
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
-#~ msgid "Press Right Ctrl to choose 3rd level."
-#~ msgstr "Rechte Strg-Taste drücken, um in die dritte Tastaturebene zu gelangen."
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
-#~ msgid "Press Right Win-key to choose 3rd level."
-#~ msgstr "Rechte Win-Taste drücken, um in die dritte Tastaturebene zu gelangen."
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
-#~ msgid "Press any of Alt keys to choose 3rd level."
-#~ msgstr "Eine beliebige Alt-Taste drücken, um in die dritte Tastaturebene zu gelangen."
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
-#~ msgid "Press any of Win-keys to choose 3rd level."
-#~ msgstr "Eine beliebige Win-Taste drücken, um in die dritte Tastaturebene zu gelangen."
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
-#, fuzzy
-#~ msgid "Right Alt is Compose."
-#~ msgstr "rechter Rotationszähler ist negativ"
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
-#~ msgid "Right Alt key changes layout."
-#~ msgstr "Rechte Alt-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
-#~ msgid "Right Ctrl key changes layout."
-#~ msgstr "Rechte Ctrl-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
-#~ msgid "Right Shift key changes layout."
-#~ msgstr "Rechte Umschalt-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
-#~ msgid "Right Win-key changes layout."
-#~ msgstr "Rechte Windows-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
-#, fuzzy
-#~ msgid "Right Win-key is Compose."
-#~ msgstr "Rechte Windows-Taste wechselt die Belegung."
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
-#~ msgid "ScrollLock LED shows alternative layout."
-#~ msgstr "ScrollLock-LED zeigt alternative Belegung an."
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "APL"
+msgstr "APL"
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "Iran"
+msgstr "Iran"
+
+#: ../rules/base.extras.xml.in.h:3
+msgid "Iran - Avestan"
+msgstr "Iran - Avestisch"
+
+#: ../rules/base.extras.xml.in.h:4
+msgid "Lithuania"
+msgstr "Litauen"
+
+#: ../rules/base.extras.xml.in.h:5
+msgid "Lithuania - Dvorak"
+msgstr "Litauen - Dvorak"
+
+#: ../rules/base.extras.xml.in.h:6
+msgid "Ltu"
+msgstr "Ltu"
+
+#: ../rules/base.extras.xml.in.h:7
+msgid "Romania"
+msgstr "Rumänien"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Rumänisch - Ergonomische Bedienung"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rou"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Russland"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Serbien"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Serbisch - Akzente kombinieren, anstelle von Akzenttasten"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "USA"
-#~ msgid "Shift+CapsLock changes layout."
-#~ msgstr "Umschalt-+Feststelltaste wechselt die Belegung."
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "USA - Atsina"
-#~ msgid "Swap keycodes of two keys when Mac keyboards are misdetected by kernel."
-#~ msgstr "Tastencodes zweier Tasten vertauschen, wenn Mac-Tastaturen nicht korrekt vom Kernel erkannt werden."
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "USA - Couer D'alene Salish"
-#~ msgid "Third level choosers"
-#~ msgstr "Auswahltasten der dritten Ebene"
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "USA - International (AltGr-Unicode-Kombination)"
-#~ msgid "Urdu"
-#~ msgstr "Urdu"
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "USA - International (AltGr-Unicode-Kombination, alternativ)"
diff --git a/xorg-server/xkeyboard-config/po/es.po b/xorg-server/xkeyboard-config/po/es.po
index 44bcfc252..816aef68d 100644
--- a/xorg-server/xkeyboard-config/po/es.po
+++ b/xorg-server/xkeyboard-config/po/es.po
@@ -1,17 +1,18 @@
-# translation of xkeyboard-config-2.0.po to Spanish
+# translation of xkeyboard-config-2.1.99.po to Spanish
# This file is distributed under the same license as the xkeyboard-config package.
# Copyright (C) 2006 The free software foundation
# Francisco Javier F. Serrador <serrador@cvs.gnome.org>, 2006.
-# Jorge González González <aloriel@gmail.com>, 2009, 2010.
+# Jorge González González <aloriel@gmail.com>, 2009, 2010, 2011.
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-2.0\n"
+"Project-Id-Version: xkeyboard-config-2.1.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2010-09-15 21:57+0100\n"
-"PO-Revision-Date: 2010-10-08 17:21+0200\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-03-31 09:33+0200\n"
"Last-Translator: Jorge González González <aloriel@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\n"
+"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -23,3005 +24,4173 @@ msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Menor que/Mayor que&gt;"
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Menor que/Mayor que&gt; elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Menor que/Mayor que&gt; (elige el 3º nivel, bloquea al pulsarse junto con otro selector de 3º nivel)"
#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Menor que/Mayor que&gt; elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Menor que/Mayor que&gt; elige el 5º nivel y activa el bloqueo de 5º nivel al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr "(F)"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Menor que/Mayor que&gt; elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr "(Heredado) Alternativa"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Menor que/Mayor que&gt; elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(Heredado) Alternativa, teclas muertas de Sun"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(Heredado) Alternativa, eliminar teclas muertas"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr "101/104 teclas compatible"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/coma/Teclas muertas"
+msgid "ATM/phone-style"
+msgstr "Cajero automático/estilo teléfono"
#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/coma/Eliminar teclas muertas"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/punto/Teclas muertas"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/punto/Eliminar teclas muertas"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/coma/Teclas muertas"
+msgid "Acer Laptop"
+msgstr "Portátil Acer"
#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwertz/coma/Eliminar teclas muertas"
+msgid "Add the standard behavior to Menu key"
+msgstr "Añadir el comportamiento estándar a la tecla Menú."
#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/punto/Teclas muertas"
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Añadir las tildes circunflejas del esperanto (supersigno)"
#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/punto/Eliminar teclas muertas"
+msgid "Adding currency signs to certain keys"
+msgstr "Añadir símbolo de divisa a algunas teclas"
#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/coma/Teclas muertas"
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/coma/Eliminar teclas muertas"
+msgid "Afg"
+msgstr "Afg"
#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/punto/Teclas muertas"
+msgid "Afghani"
+msgstr "Afgano"
#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/punto/Eliminar teclas muertas"
+msgid "Akan"
+msgstr "Akan"
#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/coma/Teclas muertas"
+msgid "Albanian"
+msgstr "Albanés"
#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/coma/Eliminar teclas muertas"
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt y Meta están en las teclas Alt"
#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/punto/Teclas muertas"
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt está mapeada a la tecla Windows derecha y Super a la tecla Menú"
#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/punto/Eliminar teclas muertas"
+msgid "Alt+Caps Lock"
+msgstr "Alt+Bloq Mayús"
#: ../rules/base.xml.in.h:25
-msgid "2"
-msgstr "2"
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
#: ../rules/base.xml.in.h:26
-msgid "4"
-msgstr "4"
+msgid "Alt+Shift"
+msgstr "Alt+Mayús"
#: ../rules/base.xml.in.h:27
-msgid "5"
-msgstr "5"
+msgid "Alt+Space"
+msgstr "Alt+Espacio"
#: ../rules/base.xml.in.h:28
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Alt/Win key behavior"
+msgstr "Comportamiento de la tecla Alt/Windows"
#: ../rules/base.xml.in.h:29
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Amharic"
+msgstr "Amharico"
#: ../rules/base.xml.in.h:30
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
+msgid "Any Alt key"
+msgstr "Cualquier tecla Alt"
#: ../rules/base.xml.in.h:31
-msgid "ATM/phone-style"
-msgstr "Cajero automático/estilo teléfono"
+msgid "Any Win key"
+msgstr "Cualquier tecla Windows"
#: ../rules/base.xml.in.h:32
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Any Win key (while pressed)"
+msgstr "Cualquier tecla Windows (al pulsarla)"
#: ../rules/base.xml.in.h:33
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:34
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Teclado de aluminio de Apple (ANSI)"
#: ../rules/base.xml.in.h:35
-msgid "Acer Laptop"
-msgstr "Portátil Acer"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Teclado de aluminio de Apple (ISO)"
#: ../rules/base.xml.in.h:36
-msgid "Add the standard behavior to Menu key"
-msgstr "Añadir el comportamiento estándar a la tecla Menú."
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Teclado de aluminio de Apple (JIS)"
#: ../rules/base.xml.in.h:37
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Añadir las tildes circunflejas del esperanto (supersigno)"
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Teclado de aluminio de Apple: emular teclas PC (Imprimir, Bloq Despl, Pausa, Bloq Num)"
#: ../rules/base.xml.in.h:38
-msgid "Adding EuroSign to certain keys"
-msgstr "Añadir el símbolo del Euro a ciertas teclas"
+msgid "Apple Laptop"
+msgstr "Portátil Apple"
#: ../rules/base.xml.in.h:39
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Arabic"
+msgstr "Árabe"
#: ../rules/base.xml.in.h:40
-msgid "Afg"
-msgstr "Afg"
+msgid "Arabic (Buckwalter)"
+msgstr "Árabe (Buckwalter)"
#: ../rules/base.xml.in.h:41
-msgid "Afghanistan"
-msgstr "Afganistán"
+msgid "Arabic (Morocco)"
+msgstr "Árabbe (Marruecos)"
#: ../rules/base.xml.in.h:42
-msgid "Akan"
-msgstr "Akan"
+msgid "Arabic (Pakistan)"
+msgstr "Árabe (Pakistán)"
#: ../rules/base.xml.in.h:43
-msgid "Alb"
-msgstr "Alb"
+msgid "Arabic (Syria)"
+msgstr "Árabe (Siria)"
#: ../rules/base.xml.in.h:44
-msgid "Albania"
-msgstr "Albania"
+msgid "Arabic (azerty)"
+msgstr "Árabe (azerty)"
#: ../rules/base.xml.in.h:45
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt y Meta están en las teclas Alt"
+msgid "Arabic (azerty/digits)"
+msgstr "Árabe (azerty/dígitos)"
#: ../rules/base.xml.in.h:46
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt está mapeada a la tecla Windows derecha y Super a la tecla Menú"
+msgid "Arabic (digits)"
+msgstr "Árabe (dígitos)"
#: ../rules/base.xml.in.h:47
-msgid "Alt+Caps Lock"
-msgstr "Alt+Bloq Mayús"
+msgid "Arabic (qwerty)"
+msgstr "Árabe (qwery)"
#: ../rules/base.xml.in.h:48
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
+msgid "Arabic (qwerty/digits)"
+msgstr "Árabe (qwerty/dígitos)"
#: ../rules/base.xml.in.h:49
-msgid "Alt+Shift"
-msgstr "Alt+Mayús"
+msgid "Armenian"
+msgstr "Armenio"
#: ../rules/base.xml.in.h:50
-msgid "Alt+Space"
-msgstr "Alt+Espacio"
+msgid "Armenian (alternative eastern)"
+msgstr "Armenio (alternativa oriental)"
#: ../rules/base.xml.in.h:51
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Armenian (alternative phonetic)"
+msgstr "Armenio (alternativa fonética)"
#: ../rules/base.xml.in.h:52
-msgid "Alt/Win key behavior"
-msgstr "Comportamiento de la tecla Alt/Windows"
+msgid "Armenian (eastern)"
+msgstr "Armenio (oriental)"
#: ../rules/base.xml.in.h:53
-msgid "Alternative"
-msgstr "Alternativa"
+msgid "Armenian (phonetic)"
+msgstr "Armenio (fonético)"
#: ../rules/base.xml.in.h:54
-msgid "Alternative Eastern"
-msgstr "Alternativa oriental"
+msgid "Armenian (western)"
+msgstr "Armenio (occidental)"
#: ../rules/base.xml.in.h:55
-msgid "Alternative Phonetic"
-msgstr "Alternativa fonética"
+msgid "Asus Laptop"
+msgstr "Portátil Asus"
#: ../rules/base.xml.in.h:56
-msgid "Alternative international"
-msgstr "Alternativa internacional"
+msgid "At bottom left"
+msgstr "En la parte inferior izquierda"
#: ../rules/base.xml.in.h:57
-msgid "Alternative, Sun dead keys"
-msgstr "Alternativa, teclas muertas de Sun"
+msgid "At left of 'A'"
+msgstr "A la izquierda de la «A»"
#: ../rules/base.xml.in.h:58
-msgid "Alternative, eliminate dead keys"
-msgstr "Alternativa, eliminar teclas muertas"
+msgid "Avatime"
+msgstr "Avatime"
#: ../rules/base.xml.in.h:59
-msgid "Alternative, latin-9 only"
-msgstr "Alternativa, sólo latin-9"
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Azerbaiján (cirílico)"
#: ../rules/base.xml.in.h:60
-msgid "And"
-msgstr "And"
+msgid "Azerbaijani"
+msgstr "Azerbaijaní"
#: ../rules/base.xml.in.h:61
-msgid "Andorra"
-msgstr "Andorra"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 wireless Internet Keyboard"
#: ../rules/base.xml.in.h:62
-msgid "Any Alt key"
-msgstr "Cualquier tecla Alt"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:63
-msgid "Any Win key"
-msgstr "Cualquier tecla Windows"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimedia"
#: ../rules/base.xml.in.h:64
-msgid "Any Win key (while pressed)"
-msgstr "Cualquier tecla Windows (al pulsarla)"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:65
-msgid "Apostrophe (') variant"
-msgstr "Variante apóstrofo (')"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:66
-msgid "Apple"
-msgstr "Apple"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Teclado de aluminio de Apple (ANSI)"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:68
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Teclado de aluminio de Apple (ISO)"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:69
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Teclado de aluminio de Apple (JIS)"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:70
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Teclado de aluminio de Apple: emular teclas PC (Imprimir, Bloq Despl, Pausa, Bloq Num)"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
#: ../rules/base.xml.in.h:71
-msgid "Apple Laptop"
-msgstr "Portátil Apple"
+msgid "Backslash"
+msgstr "Contrabarra"
#: ../rules/base.xml.in.h:72
-msgid "Ara"
-msgstr "Ara"
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Contrabarra elige el 3º nivel, bloquea al pulsarse junto con otro selector de 3º nivel"
#: ../rules/base.xml.in.h:73
-msgid "Arabic"
-msgstr "Árabe"
+msgid "Bambara"
+msgstr "Bambara"
#: ../rules/base.xml.in.h:74
-msgid "Arm"
-msgstr "Arm"
+msgid "Belarusian"
+msgstr "Bielorruso"
#: ../rules/base.xml.in.h:75
-msgid "Armenia"
-msgstr "Armenia"
+msgid "Belarusian (Latin)"
+msgstr "Bielorruso (latino)"
#: ../rules/base.xml.in.h:76
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Variante asturiana con H de medio punto y L de medio punto"
+msgid "Belarusian (legacy)"
+msgstr "Bielorruso (heredado)"
#: ../rules/base.xml.in.h:77
-msgid "Asus Laptop"
-msgstr "Portátil Asus"
+msgid "Belgian"
+msgstr "Belga"
#: ../rules/base.xml.in.h:78
-msgid "At bottom left"
-msgstr "En la parte inferior izquierda"
+msgid "Belgian (ISO alternate)"
+msgstr "Belga (alternativa ISO)"
#: ../rules/base.xml.in.h:79
-msgid "At left of 'A'"
-msgstr "A la izquierda de la «A»"
+msgid "Belgian (Sun dead keys)"
+msgstr "Belga (teclas muertas de Sun)"
#: ../rules/base.xml.in.h:80
-msgid "Austria"
-msgstr "Austria"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belga (modelo azerty 724 de Wang)"
#: ../rules/base.xml.in.h:81
-msgid "Aut"
-msgstr "Aut"
+msgid "Belgian (alternative)"
+msgstr "Belga (alternativa)"
#: ../rules/base.xml.in.h:82
-msgid "Avatime"
-msgstr "Avatime"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belga (alternativa, teclas muertas de Sun)"
#: ../rules/base.xml.in.h:83
-msgid "Aze"
-msgstr "Aze"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belga (alternativa, sólo latin-9)"
#: ../rules/base.xml.in.h:84
-msgid "Azerbaijan"
-msgstr "Azerbaiján"
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belga (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:85
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 wireless Internet Keyboard"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:86
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:87
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF Multimedia"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:88
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "Bengali"
+msgstr "Bengalí"
#: ../rules/base.xml.in.h:89
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "Bengali (Probhat)"
+msgstr "Bengalí (Probhat)"
#: ../rules/base.xml.in.h:90
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Bereber (Marruecos, alternativa fonética tifinagh)"
#: ../rules/base.xml.in.h:91
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Bereber (Marruecos, alternativa tifinagh)"
#: ../rules/base.xml.in.h:92
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Bereber (Marruecos, tifinagh fonético extendido)"
#: ../rules/base.xml.in.h:93
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Bereber (Marruecos, tifinagh extendido)"
#: ../rules/base.xml.in.h:94
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Bereber (Marruecos, tifinagh fonético)"
#: ../rules/base.xml.in.h:95
-msgid "Backslash"
-msgstr "Contrabarra"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Bereber (Marruecos, Tifinagh)"
#: ../rules/base.xml.in.h:96
-msgid "Bangladesh"
-msgstr "Bangladesh"
+msgid "Bosnian"
+msgstr "Bosnio"
#: ../rules/base.xml.in.h:97
-msgid "Bashkirian"
-msgstr "Bashkiriano"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bosnio (teclado de EE. UU. con digrafos bosnios)"
#: ../rules/base.xml.in.h:98
-msgid "Bel"
-msgstr "Bel"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bosnio (teclado de EE. UU. con letras bosnias)"
#: ../rules/base.xml.in.h:99
-msgid "Belarus"
-msgstr "Bielorusia"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bosnio (usar digrafos bosnios)"
#: ../rules/base.xml.in.h:100
-msgid "Belgium"
-msgstr "Bélgica"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bosnio (usar guillemots para comillas)"
#: ../rules/base.xml.in.h:101
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "Both Alt keys together"
+msgstr "Ambas teclas Alt juntas"
#: ../rules/base.xml.in.h:102
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "Both Ctrl keys together"
+msgstr "Ambas teclas Ctrl juntas"
#: ../rules/base.xml.in.h:103
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Both Shift keys together"
+msgstr "Ambas teclas Mayús juntas"
#: ../rules/base.xml.in.h:104
-msgid "Bengali"
-msgstr "Bengalí"
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús, una tecla Mayús lo desactiva"
#: ../rules/base.xml.in.h:105
-msgid "Bengali Probhat"
-msgstr "Probhat Bengalí"
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús"
#: ../rules/base.xml.in.h:106
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ergonómico, forma Dvorak"
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Ambas teclas Mayús juntas conmutan Bloq Despl"
#: ../rules/base.xml.in.h:107
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ergonómico, forma Dvorak, sólo latin-9"
+msgid "Braille"
+msgstr "Braille"
#: ../rules/base.xml.in.h:108
-msgid "Bgd"
-msgstr "Bgd"
+msgid "Braille (left hand)"
+msgstr "Braille (zurdo)"
#: ../rules/base.xml.in.h:109
-msgid "Bgr"
-msgstr "Bgr"
+msgid "Braille (right hand)"
+msgstr "Braille (diestro)"
#: ../rules/base.xml.in.h:110
-msgid "Bhutan"
-msgstr "Bhután"
+msgid "Brother Internet Keyboard"
+msgstr "Brother Internet Keyboard"
#: ../rules/base.xml.in.h:111
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Hebreo bíblico (Tiro)"
+msgid "Bulgarian"
+msgstr "Búlgaro"
#: ../rules/base.xml.in.h:112
-msgid "Bih"
-msgstr "Bih"
+msgid "Bulgarian (new phonetic)"
+msgstr "Búlgaro (fonética nueva)"
#: ../rules/base.xml.in.h:113
-msgid "Blr"
-msgstr "Blr"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Búlgaro (fonética tradicional)"
#: ../rules/base.xml.in.h:114
-msgid "Bosnia and Herzegovina"
-msgstr "Bosnia y Herzegovina"
+msgid "Burmese"
+msgstr "Burmese"
#: ../rules/base.xml.in.h:115
-msgid "Both Alt keys together"
-msgstr "Ambas teclas Alt juntas"
+msgid "Canadian Multilingual"
+msgstr "Canadiense multilingüe"
#: ../rules/base.xml.in.h:116
-msgid "Both Ctrl keys together"
-msgstr "Ambas teclas Ctrl juntas"
+msgid "Canadian Multilingual (first part)"
+msgstr "Canadiense multilingüe (primera parte)"
#: ../rules/base.xml.in.h:117
-msgid "Both Shift keys together"
-msgstr "Ambas teclas Mayús juntas"
+msgid "Canadian Multilingual (second part)"
+msgstr "Canadiense multilingüe (segunda parte)"
#: ../rules/base.xml.in.h:118
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús"
+msgid "Caps Lock"
+msgstr "Bloqueo de mayúsculas"
#: ../rules/base.xml.in.h:119
-msgid "Botswana"
-msgstr "Botswana"
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Bloq Mayús (elige el 3º nivel, bloquea al pulsarse junto con otro selector de 3º nivel)"
#: ../rules/base.xml.in.h:120
-msgid "Bra"
-msgstr "Bra"
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Bloq Mayús (a la primera distribución), Mayús+Bloq Mayús (a la última distribución)"
#: ../rules/base.xml.in.h:121
-msgid "Braille"
-msgstr "Braille"
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Bloq Mayús (al pulsarse), Alt+Bloq Mayús realiza la acción original de bloqueo de mayúsculas"
#: ../rules/base.xml.in.h:122
-msgid "Brazil"
-msgstr "Brasil"
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Bloq Mayús actúa como Mayús con bloqueo; Mayús «pausa» Bloq Mayús"
#: ../rules/base.xml.in.h:123
-msgid "Breton"
-msgstr "Bretón"
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Bloq Mayús actúa como Mayús con bloqueo; Mayús no afecta a Bloq Mayús"
#: ../rules/base.xml.in.h:124
-msgid "Brl"
-msgstr "Brl"
+msgid "Caps Lock is disabled"
+msgstr "Bloq Mayús está desactivado"
#: ../rules/base.xml.in.h:125
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internet Keyboard"
+msgid "Caps Lock key behavior"
+msgstr "Comportamiento de Bloq Mayús"
#: ../rules/base.xml.in.h:126
-msgid "Btn"
-msgstr "Btn"
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Bloq Mayús cambia Mayús de forma que todas las teclas están afectadas"
#: ../rules/base.xml.in.h:127
-msgid "Buckwalter"
-msgstr "Buckwalter"
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Bloq Mayús cambia la capitalización normal de los caracteres alfabéticos"
#: ../rules/base.xml.in.h:128
-msgid "Bulgaria"
-msgstr "Bulgaria"
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Bloq Mayús usa la capitalización interna; Mayús «pausa» el Bloq Mayús"
#: ../rules/base.xml.in.h:129
-msgid "Bwa"
-msgstr "Bwa"
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Bloq Mayús usa la capitalización interna; Mayús no afecta a Bloq Mayús"
#: ../rules/base.xml.in.h:130
-msgid "COD"
-msgstr "COD"
+msgid "Catalan"
+msgstr "Catalán"
#: ../rules/base.xml.in.h:131
-msgid "CRULP"
-msgstr "CRULP"
+msgid "Cherokee"
+msgstr "Cherokee"
#: ../rules/base.xml.in.h:132
-msgid "Cambodia"
-msgstr "Camboya"
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
#: ../rules/base.xml.in.h:133
-msgid "Can"
-msgstr "Can"
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
#: ../rules/base.xml.in.h:134
-msgid "Canada"
-msgstr "Canadá"
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (opción alternativa)"
#: ../rules/base.xml.in.h:135
-msgid "Caps Lock"
-msgstr "Bloqueo de mayúsculas"
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
#: ../rules/base.xml.in.h:136
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "Bloq Mayús (a la primera distribución), Mayús+Bloq Mayús (a la última distribución)"
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
#: ../rules/base.xml.in.h:137
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "Bloq Mayús (al pulsarse), Alt+Bloq Mayús realiza la acción original de bloqueo de mayúsculas"
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:138
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "Bloq Mayús actúa como Mayús con bloqueo; Mayús «pausa» Bloq Mayús"
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "Bloq Mayús actúa como Mayús con bloqueo; Mayús no afecta a Bloq Mayús"
+msgid "Chicony Internet Keyboard"
+msgstr "Chicony Internet Keyboard"
#: ../rules/base.xml.in.h:140
-msgid "Caps Lock is disabled"
-msgstr "Bloq Mayús está desactivado"
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
#: ../rules/base.xml.in.h:141
-msgid "Caps Lock key behavior"
-msgstr "Comportamiento de Bloq Mayús"
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
#: ../rules/base.xml.in.h:142
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "Bloq Mayús cambia Mayús de forma que todas las teclas están afectadas"
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr "Bloq Mayús cambia la capitalización normal de los caracteres alfabéticos"
+msgid "Chinese"
+msgstr "Chino"
#: ../rules/base.xml.in.h:144
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr "Bloq Mayús usa la capitalización interna; Mayús «pausa» el Bloq Mayús"
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Chino (tibetano con numerales ASCII)"
#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr "Bloq Mayús usa la capitalización interna; Mayús no afecta a Bloq Mayús"
+msgid "Chinese (Tibetan)"
+msgstr "Chino (tibetano)"
#: ../rules/base.xml.in.h:146
-msgid "Catalan variant with middle-dot L"
-msgstr "Variante catalana con L de medio punto"
+msgid "Chinese (Uyghur)"
+msgstr "Chino (uyghur)"
#: ../rules/base.xml.in.h:147
-msgid "Cedilla"
-msgstr "Cedilla"
+msgid "Classmate PC"
+msgstr "Classmate PC"
#: ../rules/base.xml.in.h:148
-msgid "Che"
-msgstr "Che"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access Keyboard"
#: ../rules/base.xml.in.h:149
-msgid "Cherokee"
-msgstr "Cherokee"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internet Keyboard (13 teclas)"
#: ../rules/base.xml.in.h:150
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UNLIMITED"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internet Keyboard (18 teclas)"
#: ../rules/base.xml.in.h:151
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internet Keyboard (7 teclas)"
#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (opción alternativa)"
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq Keyboard"
#: ../rules/base.xml.in.h:153
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
+msgid "Compose key position"
+msgstr "Posición de la tecla Componer"
#: ../rules/base.xml.in.h:154
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Retroceso"
#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control está mapeada a las teclas Alt, Alt está mapeado a las teclas Windows"
#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master XPress"
-msgstr "Cherry CyMotion Master XPress"
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control está mapeada a las teclas Windows (y las teclas Ctrl usuales)"
#: ../rules/base.xml.in.h:157
-msgid "Chicony Internet Keyboard"
-msgstr "Chicony Internet Keyboard"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
#: ../rules/base.xml.in.h:158
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
+msgid "Croatian"
+msgstr "Croata"
#: ../rules/base.xml.in.h:159
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Croata (teclado de EE. UU. con digrafos croatas)"
#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Croata (teclado de EE. UU. con letras croatas)"
#: ../rules/base.xml.in.h:161
-msgid "China"
-msgstr "China"
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Croata (usar digrafos croatas)"
#: ../rules/base.xml.in.h:162
-msgid "Chn"
-msgstr "Chn"
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Croata (usar guillemots para comillas)"
#: ../rules/base.xml.in.h:163
-msgid "Chuvash"
-msgstr "Chuvash"
+msgid "Ctrl key position"
+msgstr "Posición de la tecla Ctrl"
#: ../rules/base.xml.in.h:164
-msgid "Chuvash Latin"
-msgstr "Chuvash latino"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Mayús"
#: ../rules/base.xml.in.h:165
-msgid "Classic"
-msgstr "Clásico"
+msgid "Czech"
+msgstr "Checo"
#: ../rules/base.xml.in.h:166
-msgid "Classic Dvorak"
-msgstr "Dvorak clásico"
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Checo (distribución UCW sólo teclas con tilde)"
#: ../rules/base.xml.in.h:167
-msgid "Classic, eliminate dead keys"
-msgstr "Clásico, eliminar teclas muertas"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Checo (teclado Dvorak EE. UU. con soporte para UCW checo)"
#: ../rules/base.xml.in.h:168
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Checo (con tecla «\\|»)"
#: ../rules/base.xml.in.h:169
-msgid "CloGaelach"
-msgstr "CloGaelach"
+msgid "Czech (qwerty)"
+msgstr "Checo (qwery)"
#: ../rules/base.xml.in.h:170
-msgid "Colemak"
-msgstr "Colemak"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Checo (qwerty, contrabarra extendida)"
#: ../rules/base.xml.in.h:171
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access Keyboard"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:172
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internet Keyboard (13 teclas)"
+msgid "Danish"
+msgstr "Danés"
#: ../rules/base.xml.in.h:173
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internet Keyboard (18 teclas)"
+msgid "Danish (Dvorak)"
+msgstr "Danés (Dvorak)"
#: ../rules/base.xml.in.h:174
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internet Keyboard (7 teclas)"
+msgid "Danish (Mac)"
+msgstr "Danés (Mac)"
#: ../rules/base.xml.in.h:175
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq Keyboard"
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Danés (Mac, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:176
-msgid "Compose key position"
-msgstr "Posición de la tecla Componer"
+msgid "Danish (eliminate dead keys)"
+msgstr "Danés (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:177
-msgid "Congo, Democratic Republic of the"
-msgstr "Congo, República Democrática del"
+msgid "Default numeric keypad keys"
+msgstr "Teclas del teclado numérico predeterminado"
#: ../rules/base.xml.in.h:178
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Retroceso"
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:179
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Control está mapeada a las teclas Alt, Alt está mapeado a las teclas Windows"
+msgid "Dell 101-key PC"
+msgstr "Dell PC 101 teclas"
#: ../rules/base.xml.in.h:180
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control está mapeada a las teclas Windows (y las teclas Ctrl usuales)"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx"
#: ../rules/base.xml.in.h:181
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Dell Laptop/notebook Precision M series"
#: ../rules/base.xml.in.h:182
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Tártaro de Crimea (Dobruca-1 Q)"
+msgid "Dell Latitude series laptop"
+msgstr "Portátil Dell Latitude"
#: ../rules/base.xml.in.h:183
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Tártaro de Crimea (Dobruca-2 Q)"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:184
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Tártaro de Crimea (turco Alt-Q)"
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Tártaro de Crimea (turco F)"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Tártaro de Crimea (turco Q)"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB Multimedia Keyboard"
#: ../rules/base.xml.in.h:187
-msgid "Croatia"
-msgstr "Croacia"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa Wireless Desktop Keyboard"
#: ../rules/base.xml.in.h:188
-msgid "Ctrl key position"
-msgstr "Posición de la tecla Ctrl"
+msgid "Dhivehi"
+msgstr "Dhivehi"
#: ../rules/base.xml.in.h:189
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Mayús"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond 9801 / 9802 series"
#: ../rules/base.xml.in.h:190
-msgid "Cyrillic"
-msgstr "Cirílico"
+msgid "Dutch"
+msgstr "Holandés"
#: ../rules/base.xml.in.h:191
-msgid "Cyrillic with guillemets"
-msgstr "Cirílico con guillemots"
+msgid "Dutch (Mac)"
+msgstr "Holandés (Mac)"
#: ../rules/base.xml.in.h:192
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Cirílico, Z y ZHE intercambiados"
+msgid "Dutch (Sun dead keys)"
+msgstr "Holandés (teclas muertas de Sun)"
#: ../rules/base.xml.in.h:193
-msgid "Cze"
-msgstr "Che"
+msgid "Dutch (standard)"
+msgstr "Holandés (estándar)"
#: ../rules/base.xml.in.h:194
-msgid "Czechia"
-msgstr "Chequia"
+msgid "Dzongkha"
+msgstr "Dzongkha"
#: ../rules/base.xml.in.h:195
-msgid "DOS"
-msgstr "DOS"
+msgid "Enable extra typographic characters"
+msgstr "Activar caracteres tipográficos adicionales"
#: ../rules/base.xml.in.h:196
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "English (Canada)"
+msgstr "Inglés (Canadá)"
#: ../rules/base.xml.in.h:197
-msgid "Dead acute"
-msgstr "Acento muerto"
+msgid "English (Colemak)"
+msgstr "Inglés (Colemark)"
#: ../rules/base.xml.in.h:198
-msgid "Dead grave acute"
-msgstr "Acento grave muerto"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Inglés (alternativa Dvorak internacional sin teclas muertas)"
#: ../rules/base.xml.in.h:199
-msgid "Default numeric keypad keys"
-msgstr "Teclas del teclado numérico predeterminado"
+msgid "English (Dvorak international with dead keys)"
+msgstr "Inglés (Dvorak internacional con teclas muertas)"
#: ../rules/base.xml.in.h:200
-msgid "Dell"
-msgstr "Dell"
+msgid "English (Dvorak)"
+msgstr "Inglés (Dvorak)"
#: ../rules/base.xml.in.h:201
-msgid "Dell 101-key PC"
-msgstr "Dell PC 101 teclas"
+msgid "English (Ghana)"
+msgstr "Inglés (Ghana)"
#: ../rules/base.xml.in.h:202
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgid "English (Ghana, GILLBT)"
+msgstr "Inglés (Ghana, GILLBT)"
#: ../rules/base.xml.in.h:203
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Dell Laptop/notebook Precision M series"
+msgid "English (Ghana, multilingual)"
+msgstr "Inglés (Ghana, multilingue)"
#: ../rules/base.xml.in.h:204
-msgid "Dell Latitude series laptop"
-msgstr "Portátil Dell Latitude"
+msgid "English (India, with RupeeSign)"
+msgstr "Inglés (India, con signo de rupia)"
#: ../rules/base.xml.in.h:205
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "English (Macintosh)"
+msgstr "Inglés (Macintosh)"
#: ../rules/base.xml.in.h:206
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
+msgid "English (Mali, USA Mac)"
+msgstr "Inglés (Malí, Mac de EE. UU.)"
#: ../rules/base.xml.in.h:207
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "English (Mali, USA international)"
+msgstr "Inglés (Malí, EE. UU. internacional)"
#: ../rules/base.xml.in.h:208
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell USB Multimedia Keyboard"
+msgid "English (Nigeria)"
+msgstr "Inglés (Nigeria)"
#: ../rules/base.xml.in.h:209
-msgid "Denmark"
-msgstr "Dinamarca"
+msgid "English (South Africa)"
+msgstr "Inglés (Sudáfrica)"
#: ../rules/base.xml.in.h:210
-msgid "Deu"
-msgstr "Deu"
+msgid "English (UK)"
+msgstr "Inglés (RU)"
#: ../rules/base.xml.in.h:211
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa Wireless Desktop Keyboard"
+msgid "English (UK, Colemak)"
+msgstr "Inglés (RU, Colemark)"
#: ../rules/base.xml.in.h:212
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond 9801 / 9802 series"
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Dvorak (RU, puntuación Dvorak para RU)"
#: ../rules/base.xml.in.h:213
-msgid "Dnk"
-msgstr "Dnk"
+msgid "English (UK, Dvorak)"
+msgstr "Inglés (RU, Dvorak)"
#: ../rules/base.xml.in.h:214
-msgid "Dvorak"
-msgstr "Dvorak"
+msgid "English (UK, Mac international)"
+msgstr "Inglés (RU, Mac internacional)"
#: ../rules/base.xml.in.h:215
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvorak (puntuación de RU)"
+msgid "English (UK, Mac)"
+msgstr "Inglés (RU, Mac)"
#: ../rules/base.xml.in.h:216
-msgid "Dvorak alternative international (no dead keys)"
-msgstr "Alternativa dvorak internacional (sin teclas muertas)"
+msgid "English (UK, extended, WinKeys)"
+msgstr "Inglés (RU, extendido, con teclas Windows)"
#: ../rules/base.xml.in.h:217
-msgid "Dvorak international (with dead keys)"
-msgstr "Dvorak internacional (con teclas muertas)"
+msgid "English (UK, international with dead keys)"
+msgstr "Inglés (RU, internacional con teclas muertas)"
#: ../rules/base.xml.in.h:218
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Dvorak, comillas polacas en la tecla 1"
+msgid "English (US)"
+msgstr "Inglés (EE. UU.)"
#: ../rules/base.xml.in.h:219
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvorak, comillas polacas en la tecla de comillas"
+msgid "English (US, alternative international)"
+msgstr "Inglés (EE. UU. alternativa internacional)"
#: ../rules/base.xml.in.h:220
-msgid "E"
-msgstr "E"
+msgid "English (US, international with dead keys)"
+msgstr "Inglés (EE. UU. internacional con teclas muertas)"
#: ../rules/base.xml.in.h:221
-msgid "Eastern"
-msgstr "Oriental"
+msgid "English (US, with euro on 5)"
+msgstr "Inglés (EE. UU. con euro en el 5)"
#: ../rules/base.xml.in.h:222
-msgid "Eliminate dead keys"
-msgstr "Eliminar teclas muertas"
+msgid "English (classic Dvorak)"
+msgstr "Inglés (Dvorak clásico)"
#: ../rules/base.xml.in.h:223
-msgid "Enable extra typographic characters"
-msgstr "Activar caracteres tipográficos adicionales"
+msgid "English (international AltGr dead keys)"
+msgstr "Inglés (internacional con teclas muertas Alt Gr)"
#: ../rules/base.xml.in.h:224
-msgid "English"
-msgstr "Inglés"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Inglés (cambio de distribución en la tecla multiplicar/dividir)"
#: ../rules/base.xml.in.h:225
-msgid "English (USA International)"
-msgstr "Inglés (EE. UU. internacional)"
+msgid "English (left handed Dvorak)"
+msgstr "Inglés (Dvorak para zurdos)"
#: ../rules/base.xml.in.h:226
-msgid "English (USA Macintosh)"
-msgstr "Inglés (EE. UU. Macintosh)"
+msgid "English (programmer Dvorak)"
+msgstr "Inglés (Dvorak de programador)"
#: ../rules/base.xml.in.h:227
+msgid "English (right handed Dvorak)"
+msgstr "Inglés (Dvorak para diestros)"
+
+#: ../rules/base.xml.in.h:228
msgid "Ennyah DKB-1008"
msgstr "Ennyah DKB-1008"
-#: ../rules/base.xml.in.h:228
+#: ../rules/base.xml.in.h:229
msgid "Enter on keypad"
msgstr "Intro en el teclado numérico"
-#: ../rules/base.xml.in.h:229
-msgid "Epo"
-msgstr "Epo"
-
#: ../rules/base.xml.in.h:230
-msgid "Ergonomic"
-msgstr "Ergonómico"
+msgid "Esperanto"
+msgstr "Esperanto"
#: ../rules/base.xml.in.h:231
-msgid "Esp"
-msgstr "Esp"
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Estonio (punto y coma y comilla desplazadas, obsoleto)"
#: ../rules/base.xml.in.h:232
-msgid "Esperanto"
-msgstr "Esperanto"
+msgid "Estonian"
+msgstr "Estonio"
#: ../rules/base.xml.in.h:233
-msgid "Est"
-msgstr "Est"
+msgid "Estonian (Dvorak)"
+msgstr "Estonio (Dvorak)"
#: ../rules/base.xml.in.h:234
-msgid "Estonia"
-msgstr "Estonia"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Estonio (teclado EE. UU. con letras estonias)"
#: ../rules/base.xml.in.h:235
-msgid "Eth"
-msgstr "Eth"
+msgid "Estonian (eliminate dead keys)"
+msgstr "Estonio (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:236
-msgid "Ethiopia"
-msgstr "Etiopía"
+msgid "Euro on 2"
+msgstr "Euro en el 2"
#: ../rules/base.xml.in.h:237
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "Euro on 4"
+msgstr "Euro en el 4"
#: ../rules/base.xml.in.h:238
-msgid "Ewe"
-msgstr "Ewe"
+msgid "Euro on 5"
+msgstr "Euro en el 5"
#: ../rules/base.xml.in.h:239
-msgid "Extended"
-msgstr "Extendido"
+msgid "Euro on E"
+msgstr "Euro en la E"
#: ../rules/base.xml.in.h:240
-msgid "Extended - Winkeys"
-msgstr "Extendido - teclas Windows"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:241
-msgid "Extended Backslash"
-msgstr "Contrabarra extendida"
+msgid "Ewe"
+msgstr "Ewe"
#: ../rules/base.xml.in.h:242
-msgid "F-letter (F) variant"
-msgstr "Variante de letra F (F)"
-
-#: ../rules/base.xml.in.h:243
msgid "FL90"
msgstr "FL90"
+#: ../rules/base.xml.in.h:243
+msgid "Faroese"
+msgstr "Faroés"
+
#: ../rules/base.xml.in.h:244
-msgid "Faroe Islands"
-msgstr "Islas Feroe"
+msgid "Faroese (eliminate dead keys)"
+msgstr "Faroés (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:245
-msgid "Fin"
-msgstr "Fin"
+msgid "Filipino"
+msgstr "Filipino"
#: ../rules/base.xml.in.h:246
-msgid "Finland"
-msgstr "Finlandia"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Filipino (Capewell-Dvorak baybayin)"
+
+#: ../rules/base.xml.in.h:247
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Filipino (Capewell-Dvorak latino)"
+
+#: ../rules/base.xml.in.h:248
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Filipino (Capewell-QWERF 2006 baybayin)"
-#. This assumes the KP_ abstract symbols are actually useful for some apps
-#. The description needs to be rewritten
#: ../rules/base.xml.in.h:249
-msgid "Four-level key with abstract separators"
-msgstr "Tecla de cuarto nivel con separadores abstractos"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Filipino (Capewell-QWERF 2006 latino)"
#: ../rules/base.xml.in.h:250
-msgid "Four-level key with comma"
-msgstr "Tecla de cuarto nivel con coma"
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Filipino (Colemak baybayin)"
#: ../rules/base.xml.in.h:251
-msgid "Four-level key with dot"
-msgstr "Tecla de cuarto nivel con punto"
+msgid "Filipino (Colemak Latin)"
+msgstr "Filipino (Colemak latino)"
#: ../rules/base.xml.in.h:252
-msgid "Four-level key with dot, latin-9 restriction"
-msgstr "Tecla de cuarto nivel con punto, restricción latin-9"
+msgid "Filipino (Dvorak Latin)"
+msgstr "Filipino (Dvorak latino)"
#: ../rules/base.xml.in.h:253
-msgid "Four-level key with momayyez"
-msgstr "Tecla de cuarto nivel con momayyez"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Filipino (QWERTY baybayin)"
#: ../rules/base.xml.in.h:254
-msgid "Fra"
-msgstr "Fra"
+msgid "Finnish"
+msgstr "Finlandés"
#: ../rules/base.xml.in.h:255
-msgid "France"
-msgstr "Francia"
+msgid "Finnish (Mac)"
+msgstr "Croata (Mac_Croatian)"
#: ../rules/base.xml.in.h:256
-msgid "Français (France Alternative)"
-msgstr "Francés (alternativa francesa)"
+msgid "Finnish (classic)"
+msgstr "Finlandés (clásico)"
#: ../rules/base.xml.in.h:257
-msgid "French"
-msgstr "Francés"
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Finlandés (clásico, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:258
-msgid "French (Macintosh)"
-msgstr "Francés (Macintosh)"
-
-#: ../rules/base.xml.in.h:259
-msgid "French (legacy)"
-msgstr "Francés (heredado)"
-
-#: ../rules/base.xml.in.h:260
-msgid "French Dvorak"
-msgstr "Francés Dvorak"
+msgid "Finnish (northern Saami)"
+msgstr "Finlandés (saami del norte)"
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
#: ../rules/base.xml.in.h:261
-msgid "French, Sun dead keys"
-msgstr "Francés, teclas muertas Sun"
+msgid "Four-level key with abstract separators"
+msgstr "Tecla de cuarto nivel con separadores abstractos"
#: ../rules/base.xml.in.h:262
-msgid "French, eliminate dead keys"
-msgstr "Francés, eliminar teclas muertas"
+msgid "Four-level key with comma"
+msgstr "Tecla de cuarto nivel con coma"
#: ../rules/base.xml.in.h:263
-msgid "Fro"
-msgstr "Fro"
+msgid "Four-level key with dot"
+msgstr "Tecla de cuarto nivel con punto"
#: ../rules/base.xml.in.h:264
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Portátil Fujitsu-Siemens Computers AMILO"
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr "Tecla de cuarto nivel con punto, restricción latin-9"
#: ../rules/base.xml.in.h:265
-msgid "Fula"
-msgstr "Fula"
+msgid "Four-level key with momayyez"
+msgstr "Tecla de cuarto nivel con momayyez"
#: ../rules/base.xml.in.h:266
-msgid "GBr"
-msgstr "GBr"
+msgid "French"
+msgstr "Francés"
#: ../rules/base.xml.in.h:267
-msgid "GILLBT"
-msgstr "GILLBT"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Francés (bepo, ergonómico, forma Dvorak)"
#: ../rules/base.xml.in.h:268
-msgid "Ga"
-msgstr "Ga"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Francés (bepo, ergonómico, forma Dvorak, sólo latin-9)"
#: ../rules/base.xml.in.h:269
-msgid "Generic 101-key PC"
-msgstr "PC genérico 101 teclas"
+msgid "French (Breton)"
+msgstr "Francés (bretón)"
#: ../rules/base.xml.in.h:270
-msgid "Generic 102-key (Intl) PC"
-msgstr "PC genérico 102 teclas (intl)"
+msgid "French (Canada, Dvorak)"
+msgstr "Francés (Canadá, Dvorak)"
#: ../rules/base.xml.in.h:271
-msgid "Generic 104-key PC"
-msgstr "PC genérico 104 teclas"
+msgid "French (Canada, legacy)"
+msgstr "Francés (Canadá, heredado)"
#: ../rules/base.xml.in.h:272
-msgid "Generic 105-key (Intl) PC"
-msgstr "PC genérico 105 teclas (intl)"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Francés (República Democrática del Congo)"
#: ../rules/base.xml.in.h:273
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "French (Dvorak)"
+msgstr "Francés (Dvorak)"
#: ../rules/base.xml.in.h:274
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Francés (AZERTY tskapo georgiano)"
#: ../rules/base.xml.in.h:275
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+msgid "French (Guinea)"
+msgstr "Francés (Guinea)"
#: ../rules/base.xml.in.h:276
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
+msgid "French (Mac)"
+msgstr "Francés (Mac)"
#: ../rules/base.xml.in.h:277
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
+msgid "French (Mali, alternative)"
+msgstr "Francés (Malí, alternativa)"
#: ../rules/base.xml.in.h:278
-msgid "Geo"
-msgstr "Geo"
+msgid "French (Morocco)"
+msgstr "Francés (Marruecos)"
#: ../rules/base.xml.in.h:279
-msgid "Georgia"
-msgstr "Georgia"
+msgid "French (Occitan)"
+msgstr "Francés (occitano)"
#: ../rules/base.xml.in.h:280
-msgid "Georgian"
-msgstr "Georgiano"
+msgid "French (Sun dead keys)"
+msgstr "Francés (teclas muertas de Sun)"
#: ../rules/base.xml.in.h:281
-msgid "Georgian AZERTY Tskapo"
-msgstr "AZERTY Tskapo georgiano"
+msgid "French (Switzerland)"
+msgstr "Francés (Suiza)"
#: ../rules/base.xml.in.h:282
-msgid "German (Macintosh)"
-msgstr "Alemán (Macintosh)"
+msgid "French (Switzerland, Mac)"
+msgstr "Francés (Suiza, Mac)"
#: ../rules/base.xml.in.h:283
-msgid "German, Sun dead keys"
-msgstr "Alemán, teclas muertas Sun"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Francés (Suiza, teclas muertas de Sun)"
#: ../rules/base.xml.in.h:284
-msgid "German, eliminate dead keys"
-msgstr "Alemán, eliminar teclas muertas"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Francés (Suiza, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:285
-msgid "Germany"
-msgstr "Alemania"
+msgid "French (alternative)"
+msgstr "Francés (alternativa)"
#: ../rules/base.xml.in.h:286
-msgid "Gha"
-msgstr "Gha"
+msgid "French (alternative, Sun dead keys)"
+msgstr "Francés (alternativa, teclas muertas de Sun)"
#: ../rules/base.xml.in.h:287
-msgid "Ghana"
-msgstr "Ghana"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Francés (alternativa, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:288
-msgid "Gin"
-msgstr "Gin"
+msgid "French (alternative, latin-9 only)"
+msgstr "Francés (alternativa, sólo latin-9)"
#: ../rules/base.xml.in.h:289
-msgid "Grc"
-msgstr "Grc"
+msgid "French (eliminate dead keys)"
+msgstr "Francés (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:290
-msgid "Greece"
-msgstr "Grecia"
+msgid "French (legacy alternative)"
+msgstr "Francés (heredado, alternativa)"
#: ../rules/base.xml.in.h:291
-msgid "Guinea"
-msgstr "Guinea"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Francés (heredado, alternativa, teclas muertas de Sun)"
#: ../rules/base.xml.in.h:292
-msgid "Gujarati"
-msgstr "Gujarati"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Francés (heredado, alternativa, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:293
-msgid "Gurmukhi"
-msgstr "Gurmukhi"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Portátil Fujitsu-Siemens Computers AMILO"
#: ../rules/base.xml.in.h:294
-msgid "Gurmukhi Jhelum"
-msgstr "Gurmukhi Jhelum"
+msgid "Fula"
+msgstr "Fula"
#: ../rules/base.xml.in.h:295
-msgid "Gyration"
-msgstr "Gyration"
+msgid "GBr"
+msgstr "GBr"
#: ../rules/base.xml.in.h:296
-msgid "Happy Hacking Keyboard"
-msgstr "Happy Hacking Keyboard"
+msgid "Ga"
+msgstr "Ga"
#: ../rules/base.xml.in.h:297
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Happy Hacking Keyboard para Mac"
+msgid "Generic 101-key PC"
+msgstr "PC genérico 101 teclas"
#: ../rules/base.xml.in.h:298
-msgid "Hausa"
-msgstr "Hausa"
+msgid "Generic 102-key (Intl) PC"
+msgstr "PC genérico 102 teclas (intl)"
#: ../rules/base.xml.in.h:299
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internet Keyboard"
+msgid "Generic 104-key PC"
+msgstr "PC genérico 104 teclas"
#: ../rules/base.xml.in.h:300
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 Notebook"
+msgid "Generic 105-key (Intl) PC"
+msgstr "PC genérico 105 teclas (intl)"
#: ../rules/base.xml.in.h:301
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:302
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
#: ../rules/base.xml.in.h:303
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:304
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
#: ../rules/base.xml.in.h:305
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:306
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "Georgian"
+msgstr "Georgiano"
#: ../rules/base.xml.in.h:307
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "Georgian (MESS)"
+msgstr "Georgiano (MESS)"
#: ../rules/base.xml.in.h:308
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
+msgid "Georgian (Ossetian)"
+msgstr "Georgiano (osetio)"
#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgid "Georgian (ergonomic)"
+msgstr "Georgiano (ergonómico)"
#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "German"
+msgstr "Alemán"
#: ../rules/base.xml.in.h:311
-msgid "Hexadecimal"
-msgstr "Hexadecimal"
+msgid "German (Austria)"
+msgstr "Alemán (Austria)"
#: ../rules/base.xml.in.h:312
-msgid "Hindi Bolnagri"
-msgstr "Hindi Bolnagri"
+msgid "German (Austria, Mac)"
+msgstr "Alemán (Austria, Mac)"
#: ../rules/base.xml.in.h:313
-msgid "Hindi Wx"
-msgstr "Hindi Wx"
+msgid "German (Austria, Sun dead keys)"
+msgstr "Alemán (Austria, teclas muertas de Sun)"
#: ../rules/base.xml.in.h:314
-msgid "Homophonic"
-msgstr "Homofónico"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Alemán (Austria, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:315
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "German (Dvorak)"
+msgstr "Alemán (Dvorak)"
#: ../rules/base.xml.in.h:316
-msgid "Hrv"
-msgstr "Hrv"
+msgid "German (Mac)"
+msgstr "Alemán (Mac)"
#: ../rules/base.xml.in.h:317
-msgid "Hun"
-msgstr "Hun"
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Alemán (Mac, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:318
-msgid "Hungary"
-msgstr "Hungría"
+msgid "German (Neo 2)"
+msgstr "Alemán (Neo 2)"
#: ../rules/base.xml.in.h:319
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper está mapeada a las teclas Windows"
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Alemán (teclado rumano con letras alemanas)"
#: ../rules/base.xml.in.h:320
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Alemán (teclado rumano con teclas alemanas, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:321
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "German (Sun dead keys)"
+msgstr "Alemán (teclas muertas de Sun)"
#: ../rules/base.xml.in.h:322
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "German (Switzerland, Mac)"
+msgstr "Alemán (Suiza, Mac)"
#: ../rules/base.xml.in.h:323
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Alemán (Suiza, teclas muertas de Sun)"
#: ../rules/base.xml.in.h:324
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Alemán (Suiza, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:325
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
+msgid "German (dead acute)"
+msgstr "Alemán (acento muerto)"
#: ../rules/base.xml.in.h:326
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "German (dead grave acute)"
+msgstr "Alemán (acento grave muerto)"
#: ../rules/base.xml.in.h:327
-msgid "ISO Alternate"
-msgstr "Alternativa ISO"
+msgid "German (eliminate dead keys)"
+msgstr "Alemán (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:328
-msgid "Iceland"
-msgstr "Islandia"
+msgid "German (lower Sorbian qwertz)"
+msgstr "Alemán (bajo sorbio qwertz)"
#: ../rules/base.xml.in.h:329
-msgid "Igbo"
-msgstr "Igbo"
+msgid "German (lower Sorbian)"
+msgstr "Alemán (bajo sorbio)"
#: ../rules/base.xml.in.h:330
-msgid "Include dead tilde"
-msgstr "Incluir tilde muerta"
+msgid "German (qwerty)"
+msgstr "Alemán (qwerty)"
#: ../rules/base.xml.in.h:331
-msgid "Ind"
-msgstr "Ind"
+msgid "Greek"
+msgstr "Griego"
#: ../rules/base.xml.in.h:332
-msgid "India"
-msgstr "India"
+msgid "Greek (eliminate dead keys)"
+msgstr "Griego (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:333
-msgid "International (AltGr dead keys)"
-msgstr "Internacional (con teclas muertas AltGr)"
+msgid "Greek (extended)"
+msgstr "Griego (extendido)"
#: ../rules/base.xml.in.h:334
-msgid "International (with dead keys)"
-msgstr "Internacional (con teclas muertas)"
+msgid "Greek (polytonic)"
+msgstr "Griego (politónico)"
#: ../rules/base.xml.in.h:335
-msgid "Inuktitut"
-msgstr "Inuktitut"
+msgid "Greek (simple)"
+msgstr "Griego (simple)"
-#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr "Irán"
+#: ../rules/base.xml.in.h:336
+msgid "Gujarati"
+msgstr "Gujarati"
#: ../rules/base.xml.in.h:337
-msgid "Iraq"
-msgstr "Iraq"
+msgid "Gyration"
+msgstr "Gyration"
#: ../rules/base.xml.in.h:338
-msgid "Ireland"
-msgstr "Irlanda"
+msgid "HTC Dream"
+msgstr "HTC Dream"
#: ../rules/base.xml.in.h:339
-msgid "Irl"
-msgstr "Irl"
+msgid "Happy Hacking Keyboard"
+msgstr "Happy Hacking Keyboard"
#: ../rules/base.xml.in.h:340
-msgid "Irn"
-msgstr "Irn"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Happy Hacking Keyboard para Mac"
#: ../rules/base.xml.in.h:341
-msgid "Irq"
-msgstr "Irq"
+msgid "Hausa"
+msgstr "Hausa"
#: ../rules/base.xml.in.h:342
-msgid "Isl"
-msgstr "Isl"
+msgid "Hebrew"
+msgstr "Hebreo"
#: ../rules/base.xml.in.h:343
-msgid "Isr"
-msgstr "Isr"
+msgid "Hebrew (Phonetic)"
+msgstr "Hebreo (fonético)"
#: ../rules/base.xml.in.h:344
-msgid "Israel"
-msgstr "Israel"
+msgid "Hebrew (Tiro)"
+msgstr "Hebreo (tiro)"
#: ../rules/base.xml.in.h:345
-msgid "Ita"
-msgstr "Ita"
+msgid "Hebrew (lyx)"
+msgstr "Hebreo (lyx)"
#: ../rules/base.xml.in.h:346
-msgid "Italy"
-msgstr "Italia"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internet Keyboard"
#: ../rules/base.xml.in.h:347
-msgid "Japan"
-msgstr "Japón"
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
#: ../rules/base.xml.in.h:348
-msgid "Japan (PC-98xx Series)"
-msgstr "Japón (Series PC-98xx)"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:349
-msgid "Japanese keyboard options"
-msgstr "Opciones de teclado japonés"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:350
-msgid "Jpn"
-msgstr "Jpn"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:351
-msgid "Kalmyk"
-msgstr "Calmuco"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:352
-msgid "Kana"
-msgstr "Kana"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:353
-msgid "Kana Lock key is locking"
-msgstr "La tecla Bloq Kana está bloqueando"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:354
-msgid "Kannada"
-msgstr "Kannada"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:355
-msgid "Kashubian"
-msgstr "Casubio"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:356
-msgid "Kaz"
-msgstr "Kaz"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
#: ../rules/base.xml.in.h:357
-msgid "Kazakh with Russian"
-msgstr "Kazajo con ruso"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:358
-msgid "Kazakhstan"
-msgstr "Kazajstán"
+msgid "Hexadecimal"
+msgstr "Hexadecimal"
#: ../rules/base.xml.in.h:359
-msgid "Ken"
-msgstr "Ken"
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi (bolnagri)"
#: ../rules/base.xml.in.h:360
-msgid "Kenya"
-msgstr "Kenia"
+msgid "Hindi (Wx)"
+msgstr "Hindi (Wx)"
#: ../rules/base.xml.in.h:361
-msgid "Key sequence to kill the X server"
-msgstr "Secuencia de teclas para matar el servidor X"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
#: ../rules/base.xml.in.h:362
-msgid "Key to choose 3rd level"
-msgstr "Tecla para seleccionar el 3er nivel"
+msgid "Htc Dream phone"
+msgstr "Teléfono HTC Dream"
#: ../rules/base.xml.in.h:363
-msgid "Key to choose 5th level"
-msgstr "Tecla para seleccionar el 5o nivel"
+msgid "Hungarian"
+msgstr "Húngaro"
#: ../rules/base.xml.in.h:364
-msgid "Key(s) to change layout"
-msgstr "Tecla(s) para cambiar la distribución"
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Húngaro (101/qwerty/coma/teclas muertas)"
#: ../rules/base.xml.in.h:365
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Húngaro (101/qwerty/coma/eliminar teclas muertas)"
#: ../rules/base.xml.in.h:366
-msgid "Kgz"
-msgstr "Kgz"
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Húngaro (101/qwerty/punto/teclas muertas)"
#: ../rules/base.xml.in.h:367
-msgid "Khm"
-msgstr "Khm"
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Húngaro (101/qwerty/punto/eliminar teclas muertas)"
#: ../rules/base.xml.in.h:368
-msgid "Kikuyu"
-msgstr "kikuyu"
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Húngaro (101/qwertz/coma/teclas muertas)"
#: ../rules/base.xml.in.h:369
-msgid "Kinesis"
-msgstr "Kinesis"
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Húngaro (101/qwertz/coma/eliminar teclas muertas)"
#: ../rules/base.xml.in.h:370
-msgid "Komi"
-msgstr "Komi"
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Húngaro (101/qwertz/punto/teclas muertas)"
#: ../rules/base.xml.in.h:371
-msgid "Kor"
-msgstr "Kor"
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Húngaro (101/qwertz/punto/eliminar teclas muertas)"
#: ../rules/base.xml.in.h:372
-msgid "Korea, Republic of"
-msgstr "Corea, República de"
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Húngaro (102/qwerty/coma/teclas muertas)"
#: ../rules/base.xml.in.h:373
-msgid "Ktunaxa"
-msgstr "Kutenai"
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Húngaro (102/qwerty/coma/eliminar teclas muertas)"
#: ../rules/base.xml.in.h:374
-msgid "Kurdish, (F)"
-msgstr "Kurdo, (F)"
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Húngaro (102/qwerty/punto/teclas muertas)"
#: ../rules/base.xml.in.h:375
-msgid "Kurdish, Arabic-Latin"
-msgstr "Kurdo, arábigolatino"
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Húngaro (102/qwerty/punto/eliminar teclas muertas)"
#: ../rules/base.xml.in.h:376
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Kurdo, Latino Alt-Q"
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Húngaro (102/qwertz/coma/teclas muertas)"
#: ../rules/base.xml.in.h:377
-msgid "Kurdish, Latin Q"
-msgstr "Kurdo, Latino Q"
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Húngaro (102/qwertz/coma/eliminar teclas muertas)"
#: ../rules/base.xml.in.h:378
-msgid "Kyrgyzstan"
-msgstr "Kirgizstán"
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Húngaro (102/qwertz/punto/teclas muertas)"
#: ../rules/base.xml.in.h:379
-msgid "LAm"
-msgstr "LAm"
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Húngaro (102/qwertz/punto/eliminar teclas muertas)"
#: ../rules/base.xml.in.h:380
-msgid "LEKP"
-msgstr "LEKP"
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Húngaro (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:381
-msgid "LEKPa"
-msgstr "LEKPa"
+msgid "Hungarian (qwerty)"
+msgstr "Húngaro (qwerty)"
#: ../rules/base.xml.in.h:382
-msgid "Lao"
-msgstr "Lao"
+msgid "Hungarian (standard)"
+msgstr "Húngaro (estándar)"
#: ../rules/base.xml.in.h:383
-msgid "Laos"
-msgstr "Laos"
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper está mapeada a las teclas Windows"
#: ../rules/base.xml.in.h:384
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:385
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:386
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Laptop/notebook eMachines m68xx"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:387
-msgid "Latin"
-msgstr "Latino"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:388
-msgid "Latin American"
-msgstr "Latino américa"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
#: ../rules/base.xml.in.h:389
-msgid "Latin Unicode"
-msgstr "Latino Unicode"
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
#: ../rules/base.xml.in.h:390
-msgid "Latin Unicode qwerty"
-msgstr "Latino Unicode qwerty"
+msgid "Icelandic"
+msgstr "Islandés"
#: ../rules/base.xml.in.h:391
-msgid "Latin qwerty"
-msgstr "Latino qwerty"
+msgid "Icelandic (Dvorak)"
+msgstr "Islandés (Dvorak)"
#: ../rules/base.xml.in.h:392
-msgid "Latin unicode"
-msgstr "Latino unicode"
+msgid "Icelandic (Mac)"
+msgstr "Islandés (Mac)"
#: ../rules/base.xml.in.h:393
-msgid "Latin unicode qwerty"
-msgstr "Latino unicode qwerty"
+msgid "Icelandic (Sun dead keys)"
+msgstr "Islandés (teclas muertas de Sun)"
#: ../rules/base.xml.in.h:394
-msgid "Latin with guillemets"
-msgstr "Latino con guillemots"
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Islandés (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:395
-msgid "Latvia"
-msgstr "Letonia"
+msgid "Igbo"
+msgstr "Igbo"
#: ../rules/base.xml.in.h:396
-msgid "Layout toggle on multiply/divide key"
-msgstr "Cambio de distribución en la tecla multiplicar/dividir"
+msgid "Indian"
+msgstr "Indio"
#: ../rules/base.xml.in.h:397
-msgid "Left Alt"
-msgstr "Alt izquierda"
+msgid "Inuktitut"
+msgstr "Inuktitut"
#: ../rules/base.xml.in.h:398
-msgid "Left Alt (while pressed)"
-msgstr "Alt izquierda (mientras está pulsado)"
+msgid "Iraqi"
+msgstr "Iraquí"
#: ../rules/base.xml.in.h:399
-msgid "Left Alt is swapped with Left Win"
-msgstr "Alt izquierda está cambiado con Windows izquierda"
+msgid "Irish"
+msgstr "Irlandés"
#: ../rules/base.xml.in.h:400
-msgid "Left Ctrl"
-msgstr "Ctrl izquierda"
+msgid "Irish (CloGaelach)"
+msgstr "Irlandés (clogaelach)"
#: ../rules/base.xml.in.h:401
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Ctrl izquierda (a la primera distribución), Ctrl derecha (a la última distribución)"
+msgid "Irish (Ogham IS434)"
+msgstr "Irlandés (ogham IS434)"
#: ../rules/base.xml.in.h:402
-msgid "Left Ctrl+Left Shift"
-msgstr "Ctrl izquierda + Mayús izquierda"
+msgid "Irish (Ogham)"
+msgstr "Irlandés (ogham)"
#: ../rules/base.xml.in.h:403
-msgid "Left Shift"
-msgstr "Mayús izquierda"
+msgid "Irish (UnicodeExpert)"
+msgstr "Irlandés (UnicodeExperto)"
#: ../rules/base.xml.in.h:404
-msgid "Left Win"
-msgstr "Win izquierda"
+msgid "Italian"
+msgstr "Italiano"
#: ../rules/base.xml.in.h:405
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Win izquierda (a la primera distribución), Win/Menu derecha (a la última distribución)"
+msgid "Italian (Georgian)"
+msgstr "Italiano (georgiano)"
#: ../rules/base.xml.in.h:406
-msgid "Left Win (while pressed)"
-msgstr "Tecla Windows izquierda (al pulsarla)"
+msgid "Italian (Mac)"
+msgstr "Italiano (Mac)"
#: ../rules/base.xml.in.h:407
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Win izquierda elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Italiano (teclado EE. UU. con letras italianas)"
#: ../rules/base.xml.in.h:408
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Win izquierda elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
+msgid "Italian (eliminate dead keys)"
+msgstr "Italiano (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:409
-msgid "Left hand"
-msgstr "Zurdo"
+msgid "Japanese"
+msgstr "Japones"
#: ../rules/base.xml.in.h:410
-msgid "Left handed Dvorak"
-msgstr "Dvorak para zurdos"
+msgid "Japanese (Kana 86)"
+msgstr "Japonés (kana 86)"
#: ../rules/base.xml.in.h:411
-msgid "Legacy"
-msgstr "Heredado"
+msgid "Japanese (Kana)"
+msgstr "Japonés (kana)"
#: ../rules/base.xml.in.h:412
-msgid "Legacy Wang 724"
-msgstr "Wang 724 heredado"
+msgid "Japanese (Mac)"
+msgstr "Japonés (Mac)"
+
+#: ../rules/base.xml.in.h:413
+msgid "Japanese (OADG 109A)"
+msgstr "Japonés (OADG 109A)"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:414
-msgid "Legacy key with comma"
-msgstr "Tecla heredada con coma"
+msgid "Japanese (PC-98xx Series)"
+msgstr "Japonés (series PC-98xx)"
#: ../rules/base.xml.in.h:415
-msgid "Legacy key with dot"
-msgstr "Tecla heredada con punto"
+msgid "Japanese keyboard options"
+msgstr "Opciones de teclado japonés"
#: ../rules/base.xml.in.h:416
-msgid "Lithuania"
-msgstr "Lituania"
+msgid "Kana Lock key is locking"
+msgstr "La tecla Bloq Kana está bloqueando"
#: ../rules/base.xml.in.h:417
-msgid "Lka"
-msgstr "Lka"
+msgid "Kannada"
+msgstr "Kannada"
#: ../rules/base.xml.in.h:418
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access Keyboard"
+msgid "Kazakh"
+msgstr "Kazajo"
#: ../rules/base.xml.in.h:419
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
+msgid "Kazakh (with Russian)"
+msgstr "Kazajo (con ruso)"
#: ../rules/base.xml.in.h:420
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop Pro (opción alternativa)"
+msgid "Key sequence to kill the X server"
+msgstr "Secuencia de teclas para matar el servidor X"
#: ../rules/base.xml.in.h:421
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
+msgid "Key to choose 3rd level"
+msgstr "Tecla para seleccionar el 3er nivel"
#: ../rules/base.xml.in.h:422
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
+msgid "Key to choose 5th level"
+msgstr "Tecla para seleccionar el 5o nivel"
#: ../rules/base.xml.in.h:423
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
+msgid "Key(s) to change layout"
+msgstr "Tecla(s) para cambiar la distribución"
#: ../rules/base.xml.in.h:424
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
#: ../rules/base.xml.in.h:425
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (opción alternativa 2)"
+msgid "Khmer (Cambodian)"
+msgstr "Khmer (camboyano)"
#: ../rules/base.xml.in.h:426
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
+msgid "Kikuyu"
+msgstr "kikuyu"
#: ../rules/base.xml.in.h:427
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:428
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Logitech G15 extra keys via G15daemon"
+msgid "Korean"
+msgstr "Coreano"
#: ../rules/base.xml.in.h:429
-msgid "Logitech Generic Keyboard"
-msgstr "Logitech, teclado genérico"
+msgid "Korean (101/104 key compatible)"
+msgstr "Coreano (101/104 teclas compatible)"
#: ../rules/base.xml.in.h:430
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech Internet 350 Keyboard"
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Kurdo (Irán, arábigolatino)"
#: ../rules/base.xml.in.h:431
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech Internet Keyboard"
+msgid "Kurdish (Iran, F)"
+msgstr "Kurdo (Irán, F)"
#: ../rules/base.xml.in.h:432
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech Internet Navigator Keyboard"
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Kurdo (Irán latino Q)"
#: ../rules/base.xml.in.h:433
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite Keyboard"
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Kurdo (latino Alt-Q)"
#: ../rules/base.xml.in.h:434
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Kurdo (Irak, arábigolatino)"
#: ../rules/base.xml.in.h:435
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X Keyboard"
+msgid "Kurdish (Iraq, F)"
+msgstr "Kurdo (Irak, F)"
#: ../rules/base.xml.in.h:436
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Kurdo (Irak, latino Alt-Q)"
#: ../rules/base.xml.in.h:437
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo Keyboard"
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Kurdo (Irak, latino Q)"
#: ../rules/base.xml.in.h:438
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+msgid "Kurdish (Syria, F)"
+msgstr "Kurdo (Siria, F)"
#: ../rules/base.xml.in.h:439
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless Keyboard (modelo Y-RB6)"
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Kurdo (Siria, latino Alt-Q)"
#: ../rules/base.xml.in.h:440
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Kurdo (Siria, latino Q)"
#: ../rules/base.xml.in.h:441
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgid "Kurdish (Turkey, F)"
+msgstr "Kurdo (Turquía, F)"
#: ../rules/base.xml.in.h:442
-msgid "Lower Sorbian"
-msgstr "Bajo sorbio"
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Kurdo (Turquía, latino Alt-Q)"
#: ../rules/base.xml.in.h:443
-msgid "Lower Sorbian (qwertz)"
-msgstr "Bajo sorbio (qwertz)"
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Kurdo (Turquía, latino Q)"
#: ../rules/base.xml.in.h:444
-msgid "Ltu"
-msgstr "Ltu"
+msgid "Kutenai"
+msgstr "Kutenai"
#: ../rules/base.xml.in.h:445
-msgid "Lva"
-msgstr "Lva"
+msgid "Kyrgyz"
+msgstr "Kirguí"
#: ../rules/base.xml.in.h:446
-msgid "MESS"
-msgstr "MESS"
+msgid "Kyrgyz (phonetic)"
+msgstr "Kirguí (fonético)"
#: ../rules/base.xml.in.h:447
-msgid "MNE"
-msgstr "MNE"
+msgid "Lao"
+msgstr "Lao"
#: ../rules/base.xml.in.h:448
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Lao (distribución propuesta STEA estándar)"
#: ../rules/base.xml.in.h:449
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
#: ../rules/base.xml.in.h:450
-msgid "Macedonia"
-msgstr "Macedonia"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
#: ../rules/base.xml.in.h:451
-msgid "Macintosh"
-msgstr "Macintosh"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Laptop/notebook eMachines m68xx"
#: ../rules/base.xml.in.h:452
-msgid "Macintosh (International)"
-msgstr "Macintosh (internacional)"
+msgid "Latvian"
+msgstr "Letón"
#: ../rules/base.xml.in.h:453
-msgid "Macintosh Old"
-msgstr "Macintosh antiguo"
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Letón (variante con apóstrofo «'»)"
#: ../rules/base.xml.in.h:454
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, teclas muertas Sun"
+msgid "Latvian (F variant)"
+msgstr "Letón (variante de letra F)"
#: ../rules/base.xml.in.h:455
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, eliminar teclas muertas"
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Letón (variante virgulilla «~»)"
#: ../rules/base.xml.in.h:456
-msgid "Make Caps Lock an additional Backspace"
-msgstr "Hacer de Bloq Mayús un Retroceso adicional"
+msgid "Left Alt"
+msgstr "Alt izquierda"
#: ../rules/base.xml.in.h:457
-msgid "Make Caps Lock an additional Ctrl"
-msgstr "Hacer de Bloq Mayús un Ctrl adicional"
+msgid "Left Alt (while pressed)"
+msgstr "Alt izquierda (mientras está pulsado)"
#: ../rules/base.xml.in.h:458
-msgid "Make Caps Lock an additional ESC"
-msgstr "Hacer de Bloq Mayús un Esc adicional"
+msgid "Left Alt is swapped with Left Win"
+msgstr "Alt izquierda está cambiado con Windows izquierda"
#: ../rules/base.xml.in.h:459
-msgid "Make Caps Lock an additional Hyper"
-msgstr "Hacer de Bloq Mayús un Hyper adicional"
+msgid "Left Ctrl"
+msgstr "Ctrl izquierda"
#: ../rules/base.xml.in.h:460
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "Hacer de Bloq Mayús un Bloq Num adicional"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Ctrl izquierda (a la primera distribución), Ctrl derecha (a la última distribución)"
#: ../rules/base.xml.in.h:461
-msgid "Make Caps Lock an additional Super"
-msgstr "Hacer de Bloq Mayús un Super adicional"
+msgid "Left Ctrl+Left Shift"
+msgstr "Ctrl izquierda + Mayús izquierda"
#: ../rules/base.xml.in.h:462
-msgid "Malayalam"
-msgstr "Malayalam"
+msgid "Left Shift"
+msgstr "Mayús izquierda"
#: ../rules/base.xml.in.h:463
-msgid "Malayalam Lalitha"
-msgstr "Malayalam Lalitha"
+msgid "Left Win"
+msgstr "Win izquierda"
#: ../rules/base.xml.in.h:464
-msgid "Maldives"
-msgstr "Maldivas"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Win izquierda (a la primera distribución), Win/Menu derecha (a la última distribución)"
#: ../rules/base.xml.in.h:465
-msgid "Mali"
-msgstr "Malí"
+msgid "Left Win (while pressed)"
+msgstr "Tecla Windows izquierda (al pulsarla)"
#: ../rules/base.xml.in.h:466
-msgid "Malta"
-msgstr "Malta"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Win izquierda elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
#: ../rules/base.xml.in.h:467
-msgid "Maltese keyboard with US layout"
-msgstr "Teclado maltés con distribución EE. UU."
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Win izquierda elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
#: ../rules/base.xml.in.h:468
-msgid "Mao"
-msgstr "Mao"
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Ctrl izquierda + Ctrl derecha (a la primera distribución), Ctrl derecha + Menú (a la segunda distribución)"
#: ../rules/base.xml.in.h:469
-msgid "Maori"
-msgstr "Maorí"
+msgid "Legacy"
+msgstr "Heredado"
#: ../rules/base.xml.in.h:470
-msgid "Mdv"
-msgstr "Mdv"
-
-#: ../rules/base.xml.in.h:471
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "Legacy Wang 724"
+msgstr "Wang 724 heredado"
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:472
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access Keyboard"
+msgid "Legacy key with comma"
+msgstr "Tecla heredada con coma"
#: ../rules/base.xml.in.h:473
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+msgid "Legacy key with dot"
+msgstr "Tecla heredada con punto"
#: ../rules/base.xml.in.h:474
-msgid "Menu"
-msgstr "Menu"
+msgid "Lithuanian"
+msgstr "Lituano"
#: ../rules/base.xml.in.h:475
-msgid "Meta is mapped to Left Win"
-msgstr "Meta está mapeada a la tecla Windows izquierda"
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Lituano (IBM LST 1205-92)"
#: ../rules/base.xml.in.h:476
-msgid "Meta is mapped to Win keys"
-msgstr "Meta está mapeada a las teclas Windows"
+msgid "Lithuanian (LEKP)"
+msgstr "Lituano (LEKP)"
#: ../rules/base.xml.in.h:477
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
+msgid "Lithuanian (LEKPa)"
+msgstr "Lituano (LEKPa)"
#: ../rules/base.xml.in.h:478
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft Internet Keyboard"
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Lituano (teclado de EE. UU. con letras lituanas)"
#: ../rules/base.xml.in.h:479
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, sueco"
+msgid "Lithuanian (standard)"
+msgstr "Lituano (estándar)"
#: ../rules/base.xml.in.h:480
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
#: ../rules/base.xml.in.h:481
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural Keyboard Elite"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
#: ../rules/base.xml.in.h:482
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop Pro (opción alternativa)"
#: ../rules/base.xml.in.h:483
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural Keyboard Pro OEM"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
#: ../rules/base.xml.in.h:484
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:485
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
#: ../rules/base.xml.in.h:486
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft Office Keyboard"
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
#: ../rules/base.xml.in.h:487
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (opción alternativa 2)"
#: ../rules/base.xml.in.h:488
-msgid "Miscellaneous compatibility options"
-msgstr "Opciones misceláneas de compatiblidad"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
#: ../rules/base.xml.in.h:489
-msgid "Mkd"
-msgstr "Mkd"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
#: ../rules/base.xml.in.h:490
-msgid "Mli"
-msgstr "Mli"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15 extra keys via G15daemon"
#: ../rules/base.xml.in.h:491
-msgid "Mlt"
-msgstr "Mlt"
+msgid "Logitech Generic Keyboard"
+msgstr "Logitech, teclado genérico"
#: ../rules/base.xml.in.h:492
-msgid "Mmr"
-msgstr "Mmr"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech Internet 350 Keyboard"
#: ../rules/base.xml.in.h:493
-msgid "Mng"
-msgstr "Mng"
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internet Keyboard"
#: ../rules/base.xml.in.h:494
-msgid "Mongolia"
-msgstr "Mongolia"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator Keyboard"
#: ../rules/base.xml.in.h:495
-msgid "Montenegro"
-msgstr "Montenegro"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite Keyboard"
#: ../rules/base.xml.in.h:496
-msgid "Morocco"
-msgstr "Marruecos"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
#: ../rules/base.xml.in.h:497
-msgid "Multilingual"
-msgstr "Multilingüe"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
#: ../rules/base.xml.in.h:498
-msgid "Multilingual, first part"
-msgstr "Multilingüe, primera parte"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge Keyboard"
#: ../rules/base.xml.in.h:499
-msgid "Multilingual, second part"
-msgstr "Multilingüe, segunda parte"
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo Keyboard"
#: ../rules/base.xml.in.h:500
-msgid "Myanmar"
-msgstr "Myanmar"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:501
-msgid "NICOLA-F style Backspace"
-msgstr "Retroceso estilo NICOLA-F"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (modelo Y-RB6)"
#: ../rules/base.xml.in.h:502
-msgid "NLA"
-msgstr "NLA"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
#: ../rules/base.xml.in.h:503
-msgid "Nativo"
-msgstr "Nativo"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
#: ../rules/base.xml.in.h:504
-msgid "Nativo for Esperanto"
-msgstr "Nativo para esperanto"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:505
-msgid "Nativo for USA keyboards"
-msgstr "Nativo para teclados de EE. UU."
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:506
-msgid "Neo 2"
-msgstr "Neo 2"
+msgid "Macedonian"
+msgstr "Macedonio"
#: ../rules/base.xml.in.h:507
-msgid "Nepal"
-msgstr "Nepal"
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Macedonio (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:508
-msgid "Netherlands"
-msgstr "Holanda"
+msgid "Macintosh"
+msgstr "Macintosh"
#: ../rules/base.xml.in.h:509
-msgid "New phonetic"
-msgstr "Fonético nuevo"
+msgid "Macintosh Old"
+msgstr "Macintosh antiguo"
#: ../rules/base.xml.in.h:510
-msgid "Nga"
-msgstr "Nga"
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Hacer de Bloq Mayús un Retroceso adicional"
#: ../rules/base.xml.in.h:511
-msgid "Nigeria"
-msgstr "Nigeria"
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Hacer de Bloq Mayús un Control adicional pero mantener el símbolo de tecla Caps_Lock"
#: ../rules/base.xml.in.h:512
-msgid "Nld"
-msgstr "Hol"
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Hacer de Bloq Mayús un Ctrl adicional"
#: ../rules/base.xml.in.h:513
-msgid "Non-breakable space character at fourth level"
-msgstr "Carácter de espacio no separable en el cuarto nivel"
+msgid "Make Caps Lock an additional ESC"
+msgstr "Hacer de Bloq Mayús un Esc adicional"
#: ../rules/base.xml.in.h:514
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel"
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Hacer de Bloq Mayús un Hyper adicional"
#: ../rules/base.xml.in.h:515
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel (a través de Ctrl+Mayús)"
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Hacer de Bloq Mayús un Bloq Num adicional"
#: ../rules/base.xml.in.h:516
-msgid "Non-breakable space character at second level"
-msgstr "Carácter de espacio no separable en el segundo nivel"
+msgid "Make Caps Lock an additional Super"
+msgstr "Hacer de Bloq Mayús un Super adicional"
#: ../rules/base.xml.in.h:517
-msgid "Non-breakable space character at third level"
-msgstr "Carácter de espacio no separable en el tercer nivel"
+msgid "Malayalam"
+msgstr "Malayalam"
#: ../rules/base.xml.in.h:518
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel"
+msgid "Malayalam (Lalitha)"
+msgstr "Malayalam (lalitha)"
#: ../rules/base.xml.in.h:519
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Carácter de espacio no separable en el tercer nivel, carácter de espacio estrecho no separable en el cuarto nivel"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Malayam (InScript mejorado con signo de rupia)"
#: ../rules/base.xml.in.h:520
-msgid "Nor"
-msgstr "Nor"
+msgid "Maltese"
+msgstr "Maltés"
#: ../rules/base.xml.in.h:521
-msgid "Northern Saami"
-msgstr "Saami del norte"
+msgid "Maltese (with US layout)"
+msgstr "Maltés (con distribución para EE. UU.)"
#: ../rules/base.xml.in.h:522
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Saami del norte, eliminar teclas muertas"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:523
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access Keyboard"
#: ../rules/base.xml.in.h:524
-msgid "Norway"
-msgstr "Noruega"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:525
-msgid "Npl"
-msgstr "Npl"
+msgid "Menu"
+msgstr "Menu"
#: ../rules/base.xml.in.h:526
-msgid "Num Lock"
-msgstr "Bloq Num"
+msgid "Meta is mapped to Left Win"
+msgstr "Meta está mapeada a la tecla Windows izquierda"
#: ../rules/base.xml.in.h:527
-msgid "Numeric keypad delete key behaviour"
-msgstr "Comportamiento de la tecla Supr del teclado numérico"
+msgid "Meta is mapped to Win keys"
+msgstr "Meta está mapeada a las teclas Windows"
#: ../rules/base.xml.in.h:528
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Las teclas del teclado numérico funcionan como en un Mac"
+msgid "Meta on Left Ctrl"
+msgstr "Meta en Ctrl izquierda"
#: ../rules/base.xml.in.h:529
-msgid "Numeric keypad layout selection"
-msgstr "Selección de distribución de teclado numérico"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
#: ../rules/base.xml.in.h:530
-msgid "OADG 109A"
-msgstr "OADG 109A"
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
#: ../rules/base.xml.in.h:531
-msgid "OLPC"
-msgstr "OLPC"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, sueco"
#: ../rules/base.xml.in.h:532
-msgid "OLPC Dari"
-msgstr "OLPC dari"
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:533
-msgid "OLPC Pashto"
-msgstr "OLPC pashto"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
#: ../rules/base.xml.in.h:534
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC uzbeco del sur"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:535
-msgid "Occitan"
-msgstr "Occitano"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural Keyboard Pro OEM"
#: ../rules/base.xml.in.h:536
-msgid "Ogham"
-msgstr "Ogham"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:537
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
#: ../rules/base.xml.in.h:538
-msgid "Oriya"
-msgstr "Oriya"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
#: ../rules/base.xml.in.h:539
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Teclado Oretec MCK-800 MM/Internet"
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft Office Keyboard"
#: ../rules/base.xml.in.h:540
-msgid "Ossetian"
-msgstr "Osetio"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
#: ../rules/base.xml.in.h:541
-msgid "Ossetian, Winkeys"
-msgstr "Osetio, teclas Windows"
+msgid "Miscellaneous compatibility options"
+msgstr "Opciones misceláneas de compatiblidad"
#: ../rules/base.xml.in.h:542
-msgid "Ossetian, legacy"
-msgstr "Osetio, heredado"
+msgid "Mongolian"
+msgstr "Mongol"
#: ../rules/base.xml.in.h:543
-msgid "PC-98xx Series"
-msgstr "PC-98xx Series"
+msgid "Montenegrin"
+msgstr "Montenegrino"
#: ../rules/base.xml.in.h:544
-msgid "Pak"
-msgstr "Pak"
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Montenegrino (cirílico con guillemots)"
#: ../rules/base.xml.in.h:545
-msgid "Pakistan"
-msgstr "Pakistán"
+msgid "Montenegrin (Cyrillic)"
+msgstr "Montenegrino (cirílico)"
#: ../rules/base.xml.in.h:546
-msgid "Pannonian Rusyn Homophonic"
-msgstr "Rusino de Panonia homofónico"
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Montenegrino (cirílico, Z y ZHE intercambiados)"
#: ../rules/base.xml.in.h:547
-msgid "Pashto"
-msgstr "Pashto"
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Montenegrino (latino qwerty)"
#: ../rules/base.xml.in.h:548
-msgid "Pattachote"
-msgstr "Pattachote"
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Montenegrino (latino Unicode qwerty)"
#: ../rules/base.xml.in.h:549
-msgid "Pause"
-msgstr "Pausa"
+msgid "Montenegrin (Latin unicode)"
+msgstr "Montenegrino (latino Unicode)"
#: ../rules/base.xml.in.h:550
-msgid "Persian, with Persian Keypad"
-msgstr "Persa con teclado numérico persa"
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Montenegrino (latino con guillemots)"
#: ../rules/base.xml.in.h:551
-msgid "Phonetic"
-msgstr "Fonético"
+msgid "Māori"
+msgstr "Maorí"
#: ../rules/base.xml.in.h:552
-msgid "Phonetic Winkeys"
-msgstr "Teclas Windows fonéticas"
+msgid "NICOLA-F style Backspace"
+msgstr "Retroceso estilo NICOLA-F"
#: ../rules/base.xml.in.h:553
-msgid "Pol"
-msgstr "Pol"
+msgid "Nepali"
+msgstr "Nepalí"
#: ../rules/base.xml.in.h:554
-msgid "Poland"
-msgstr "Polonia"
+msgid "Non-breakable space character at fourth level"
+msgstr "Carácter de espacio no separable en el cuarto nivel"
#: ../rules/base.xml.in.h:555
-msgid "Polytonic"
-msgstr "Politónico"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel"
#: ../rules/base.xml.in.h:556
-msgid "Portugal"
-msgstr "Portugal"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Carácter de espacio no separable en el cuarto nivel, carácter de espacio estrecho no separable en el sexto nivel (a través de Ctrl+Mayús)"
#: ../rules/base.xml.in.h:557
-msgid "Probhat"
-msgstr "Probhat"
+msgid "Non-breakable space character at second level"
+msgstr "Carácter de espacio no separable en el segundo nivel"
#: ../rules/base.xml.in.h:558
-msgid "Programmer Dvorak"
-msgstr "Dvorak de programador"
+msgid "Non-breakable space character at third level"
+msgstr "Carácter de espacio no separable en el tercer nivel"
#: ../rules/base.xml.in.h:559
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel"
#: ../rules/base.xml.in.h:560
-msgid "Prt"
-msgstr "Prt"
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Carácter de espacio no separable en el tercer nivel, carácter de espacio estrecho no separable en el cuarto nivel"
#: ../rules/base.xml.in.h:561
-msgid "PrtSc"
-msgstr "PrtSc"
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:562
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Norwegian"
+msgstr "Noruego"
#: ../rules/base.xml.in.h:563
-msgid "Right Alt"
-msgstr "Alt derecho"
+msgid "Norwegian (Dvorak)"
+msgstr "Noruego (Dvorak)"
#: ../rules/base.xml.in.h:564
-msgid "Right Alt (while pressed)"
-msgstr "Alt derecho (mientras está pulsado)"
+msgid "Norwegian (Mac)"
+msgstr "Noruego (Mac)"
#: ../rules/base.xml.in.h:565
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Alt derecha elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Noruego (Mac, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:566
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Alt derecha elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
+msgid "Norwegian (Northern Saami"
+msgstr "Noruego (saami del norte)"
#: ../rules/base.xml.in.h:567
-msgid "Right Alt key never chooses 3rd level"
-msgstr "La tecla Alt derecha nunca elige el 3er nivel"
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Noruego (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:568
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "La tecla Alt derecha, Mayús+Alt derecha es tecla Multi"
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Noruego (saami del norte, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:569
-msgid "Right Ctrl"
-msgstr "Ctrl derecho"
+msgid "Num Lock"
+msgstr "Bloq Num"
#: ../rules/base.xml.in.h:570
-msgid "Right Ctrl (while pressed)"
-msgstr "Ctrl derecho (mientras está pulsado)"
+msgid "Numeric keypad delete key behaviour"
+msgstr "Comportamiento de la tecla Supr del teclado numérico"
#: ../rules/base.xml.in.h:571
-msgid "Right Ctrl as Right Alt"
-msgstr "Ctrl derecho como Alt derecho"
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Las teclas del teclado numérico funcionan como en un Mac"
#: ../rules/base.xml.in.h:572
-msgid "Right Ctrl+Right Shift"
-msgstr "Ctrl derecho + Mayús derecho"
+msgid "Numeric keypad layout selection"
+msgstr "Selección de distribución de teclado numérico"
#: ../rules/base.xml.in.h:573
-msgid "Right Shift"
-msgstr "Mayús derecho"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:574
-msgid "Right Win"
-msgstr "Windows derecho"
+msgid "Oriya"
+msgstr "Oriya"
#: ../rules/base.xml.in.h:575
-msgid "Right Win (while pressed)"
-msgstr "La tecla Windows (mientras está pulsada)"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Teclado Oretec MCK-800 MM/Internet"
#: ../rules/base.xml.in.h:576
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Win derecha elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
+msgid "PC-98xx Series"
+msgstr "PC-98xx Series"
#: ../rules/base.xml.in.h:577
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Win derecha elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
+msgid "Pashto"
+msgstr "Pashto"
#: ../rules/base.xml.in.h:578
-msgid "Right hand"
-msgstr "Diestro"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Pashto (Afganistán, OLPC)"
#: ../rules/base.xml.in.h:579
-msgid "Right handed Dvorak"
-msgstr "Dvorak diestro"
+msgid "Pause"
+msgstr "Pausa"
#: ../rules/base.xml.in.h:580
-msgid "Romania"
-msgstr "Rumanía"
+msgid "Persian"
+msgstr "Persa"
#: ../rules/base.xml.in.h:581
-msgid "Romanian keyboard with German letters"
-msgstr "Teclado rumano con letras alemanas"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Persa (Afganistán, OLPC dari)"
#: ../rules/base.xml.in.h:582
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Teclado rumano con teclas alemanas, eliminar teclas muertas"
+msgid "Persian (with Persian Keypad)"
+msgstr "Persa (con teclado persa)"
#: ../rules/base.xml.in.h:583
-msgid "Rou"
-msgstr "Rou"
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Filipinas: Dvorak (baybayin)"
#: ../rules/base.xml.in.h:584
-msgid "Rus"
-msgstr "Rus"
+msgid "Polish"
+msgstr "Polaco"
#: ../rules/base.xml.in.h:585
-msgid "Russia"
-msgstr "Rusia"
+msgid "Polish (Dvorak)"
+msgstr "Polaco (Dvorak)"
#: ../rules/base.xml.in.h:586
-msgid "Russian"
-msgstr "Ruso"
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Polaco (Dvorak, comillas polacas en la tecla 1)"
#: ../rules/base.xml.in.h:587
-msgid "Russian phonetic"
-msgstr "Ruso fonético"
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Polaco (Dvorak, comillas polacas en la tecla de comillas)"
#: ../rules/base.xml.in.h:588
-msgid "Russian phonetic Dvorak"
-msgstr "Dvorak ruso fonético "
+msgid "Polish (Kashubian)"
+msgstr "Polaco (casubio)"
#: ../rules/base.xml.in.h:589
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Ruso fonético, eliminar teclas muertas"
+msgid "Polish (programmer Dvorak)"
+msgstr "Polaco (Dvorak de programador)"
#: ../rules/base.xml.in.h:590
-msgid "Russian with Kazakh"
-msgstr "Ruso con kazajo"
+msgid "Polish (qwertz)"
+msgstr "Polaco (qwertz)"
#: ../rules/base.xml.in.h:591
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless Keyboard"
+msgid "Portuguese"
+msgstr "Portugués"
#: ../rules/base.xml.in.h:592
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Portuguese (Brazil)"
+msgstr "Portugués (Brasil)"
#: ../rules/base.xml.in.h:593
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Portugués (Brasil, Dvorak)"
#: ../rules/base.xml.in.h:594
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Portugués (Brasil, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:595
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Portugués (Brasil, nativo para esperanto)"
-#: ../rules/base.xml.in.h:596 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr "SRB"
+#: ../rules/base.xml.in.h:596
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Portugués (Brasil, nativo para teclados de EE. UU.)"
#: ../rules/base.xml.in.h:597
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Portugués (Brasil, nativo)"
#: ../rules/base.xml.in.h:598
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+msgid "Portuguese (Mac)"
+msgstr "Portugués (Mac)"
#: ../rules/base.xml.in.h:599
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Portugués (Mac, teclas muertas de Sun)"
#: ../rules/base.xml.in.h:600
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Portugués (Mac, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:601
-msgid "Scroll Lock"
-msgstr "Bloq Despl"
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Portugués (nativo para esperanto)"
#: ../rules/base.xml.in.h:602
-msgid "Secwepemctsin"
-msgstr "Shuswap"
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Portugués (nativo para teclados de EE. UU.)"
#: ../rules/base.xml.in.h:603
-msgid "Semi-colon on third level"
-msgstr "Punto y coma en tercer nivel"
+msgid "Portuguese (Nativo)"
+msgstr "Portugués (nativo)"
#: ../rules/base.xml.in.h:604
-msgid "Sen"
-msgstr "Sen"
+msgid "Portuguese (Sun dead keys)"
+msgstr "Portugués (teclas muertas de Sun)"
#: ../rules/base.xml.in.h:605
-msgid "Senegal"
-msgstr "Senegal"
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Portugués (eliminar teclas muertas)"
-#: ../rules/base.xml.in.h:606 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr "Serbia"
+#: ../rules/base.xml.in.h:606
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:607
-msgid "Serbian"
-msgstr "Serbio"
+msgid "PrtSc"
+msgstr "PrtSc"
#: ../rules/base.xml.in.h:608
-msgid "Shift cancels Caps Lock"
-msgstr "Mayús cancela Bloq Mayús"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Panyabí (gurmukhi jhelum)"
#: ../rules/base.xml.in.h:609
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Mayús no cancela Bloq Num, en su lugar elije el 3er nivel"
+msgid "Punjabi (Gurmukhi)"
+msgstr "Panyabí (gurmukhi)"
#: ../rules/base.xml.in.h:610
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Mayús con las teclas del teclado numérico funcionan como en MS Windows"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:611
-msgid "Shift+Caps Lock"
-msgstr "Mayús+Bloq Mayús"
+msgid "Right Alt"
+msgstr "Alt derecho"
#: ../rules/base.xml.in.h:612
-msgid "Simple"
-msgstr "Simple"
+msgid "Right Alt (while pressed)"
+msgstr "Alt derecho (mientras está pulsado)"
#: ../rules/base.xml.in.h:613
-msgid "Sindhi"
-msgstr "Sindhi"
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Alt derecho elige el 5º nivel y activa el bloqueo de 5º nivel al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
#: ../rules/base.xml.in.h:614
-msgid "Slovakia"
-msgstr "Eslovaquia"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Alt derecha elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
#: ../rules/base.xml.in.h:615
-msgid "Slovenia"
-msgstr "Eslovenia"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Alt derecha elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
#: ../rules/base.xml.in.h:616
-msgid "South Africa"
-msgstr "Sudáfrica"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "La tecla Alt derecha nunca elige el 3er nivel"
#: ../rules/base.xml.in.h:617
-msgid "Southern Uzbek"
-msgstr "Uzbequia del sur"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "La tecla Alt derecha, Mayús+Alt derecha es tecla Multi"
#: ../rules/base.xml.in.h:618
-msgid "Spain"
-msgstr "España"
+msgid "Right Ctrl"
+msgstr "Ctrl derecho"
#: ../rules/base.xml.in.h:619
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Teclas especiales (Ctrl+Alt+«tecla») manipuladas en un servidor"
+msgid "Right Ctrl (while pressed)"
+msgstr "Ctrl derecho (mientras está pulsado)"
#: ../rules/base.xml.in.h:620
-msgid "Sri Lanka"
-msgstr "Sri Lanka"
+msgid "Right Ctrl as Right Alt"
+msgstr "Ctrl derecho como Alt derecho"
#: ../rules/base.xml.in.h:621
-msgid "Standard"
-msgstr "Estándar"
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Ctrl derecho está mapeada a la tecla Menú"
#: ../rules/base.xml.in.h:622
-msgid "Standard (Cedilla)"
-msgstr "Estándar (cedilla)"
+msgid "Right Ctrl+Right Shift"
+msgstr "Ctrl derecho + Mayús derecho"
+
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "Mayús derecho"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:624
-msgid "Standard RSTU"
-msgstr "Standard RSTU"
+msgid "Right Win"
+msgstr "Windows derecho"
+
+#: ../rules/base.xml.in.h:625
+msgid "Right Win (while pressed)"
+msgstr "La tecla Windows (mientras está pulsada)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:626
-msgid "Standard RSTU on Russian layout"
-msgstr "Standard RSTU con distribución rusa"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Win derecha elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel"
#: ../rules/base.xml.in.h:627
-msgid "Sun Type 5/6"
-msgstr "Sun tipo 5/6"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Win derecha elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo"
#: ../rules/base.xml.in.h:628
-msgid "Sun dead keys"
-msgstr "Teclas muertas de Sun"
+msgid "Romanian"
+msgstr "Rumano"
#: ../rules/base.xml.in.h:629
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power Multimedia Keyboard"
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Rumano (Dobruca-1 Q del tártaro de Crimea)"
#: ../rules/base.xml.in.h:630
-msgid "Svdvorak"
-msgstr "Svdvorak"
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Rumano (Dobruca-2 Q del tártaro de Crimea)"
#: ../rules/base.xml.in.h:631
-msgid "Svk"
-msgstr "Svk"
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Rumano (Alt-Q turca del tártaro de Crimea)"
#: ../rules/base.xml.in.h:632
-msgid "Svn"
-msgstr "Svn"
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Rumano (F turca del tártaro de Crimea)"
#: ../rules/base.xml.in.h:633
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Intercambiar Ctrl y Bloq Mayús"
+msgid "Romanian (WinKeys)"
+msgstr "Rumano (teclas Windows)"
#: ../rules/base.xml.in.h:634
-msgid "Swap ESC and Caps Lock"
-msgstr "Intercambiar ESC y Bloq Mayús"
+msgid "Romanian (cedilla)"
+msgstr "Rumano (cedilla)"
#: ../rules/base.xml.in.h:635
-msgid "Swe"
-msgstr "Swe"
+msgid "Romanian (standard cedilla)"
+msgstr "Rumano (cedilla estándar)"
#: ../rules/base.xml.in.h:636
-msgid "Sweden"
-msgstr "Suecia"
+msgid "Romanian (standard)"
+msgstr "Rumano (estándar)"
#: ../rules/base.xml.in.h:637
-msgid "Switzerland"
-msgstr "Suiza"
+msgid "Rupee on 4"
+msgstr "Rupia en el 4"
#: ../rules/base.xml.in.h:638
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (tablet PC)"
+msgid "Russian"
+msgstr "Ruso"
#: ../rules/base.xml.in.h:639
-msgid "Syr"
-msgstr "Syr"
+msgid "Russian (Bashkirian)"
+msgstr "Ruso (bashkiriano)"
#: ../rules/base.xml.in.h:640
-msgid "Syria"
-msgstr "Siria"
+msgid "Russian (Chuvash Latin)"
+msgstr "Ruso (chuvash latino)"
#: ../rules/base.xml.in.h:641
-msgid "Syriac"
-msgstr "Sirio"
+msgid "Russian (Chuvash)"
+msgstr "Ruso (chuvash)"
#: ../rules/base.xml.in.h:642
-msgid "Syriac phonetic"
-msgstr "Sirio fonético"
+msgid "Russian (DOS)"
+msgstr "Ruso (DOS)"
#: ../rules/base.xml.in.h:643
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
+msgid "Russian (Georgia)"
+msgstr "Ruso (Georgia)"
#: ../rules/base.xml.in.h:644
-msgid "Tajikistan"
-msgstr "Tajikistán"
+msgid "Russian (Germany, phonetic)"
+msgstr "Ruso (Alemania, fonético)"
#: ../rules/base.xml.in.h:645
-msgid "Tamil"
-msgstr "Tamil"
+msgid "Russian (Kalmyk)"
+msgstr "Ruso (calmuco)"
#: ../rules/base.xml.in.h:646
-msgid "Tamil Keyboard with Numerals"
-msgstr "Teclado tamil con letras números"
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Ruso (Kazajstán, con kazajo)"
#: ../rules/base.xml.in.h:647
-msgid "Tamil TAB Typewriter"
-msgstr "Tamil TAB Typewriter"
+msgid "Russian (Komi)"
+msgstr "Ruso (komi)"
#: ../rules/base.xml.in.h:648
-msgid "Tamil TSCII Typewriter"
-msgstr "Tamil TSCII Typewriter"
+msgid "Russian (Mari)"
+msgstr "Ruso (mari)"
#: ../rules/base.xml.in.h:649
-msgid "Tamil Unicode"
-msgstr "Tamil Unicode"
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Ruso (osetio, teclas Windows)"
#: ../rules/base.xml.in.h:650
-msgid "Tanzania"
-msgstr "Tanzania"
+msgid "Russian (Ossetian, legacy)"
+msgstr "Ruso (osetio, heredado)"
#: ../rules/base.xml.in.h:651
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Ruso (Polonia, Dvorak fonético)"
#: ../rules/base.xml.in.h:652
-msgid "Tatar"
-msgstr "Tatar"
+msgid "Russian (Serbian)"
+msgstr "Ruso (serbio)"
#: ../rules/base.xml.in.h:653
-msgid "Telugu"
-msgstr "Telugu"
+msgid "Russian (Sweden, phonetic)"
+msgstr "Ruso (sueco, fonético)"
#: ../rules/base.xml.in.h:654
-msgid "Tha"
-msgstr "Tha"
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Ruso (sueco, fonético, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:655
-msgid "Thailand"
-msgstr "Tailandia"
+msgid "Russian (Tatar)"
+msgstr "Ruso (tártaro)"
#: ../rules/base.xml.in.h:656
-msgid "Tibetan"
-msgstr "Tibetano"
+msgid "Russian (US, phonetic)"
+msgstr "Ruso (EE. UU., fonético)"
#: ../rules/base.xml.in.h:657
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Tibetano (con numerales ASCII)"
+msgid "Russian (Udmurt)"
+msgstr "Ruso (urdmurto)"
#: ../rules/base.xml.in.h:658
-msgid "Tifinagh"
-msgstr "Tifinagh"
+msgid "Russian (Yakut)"
+msgstr "Ruso (yakuto)"
#: ../rules/base.xml.in.h:659
-msgid "Tifinagh alternative"
-msgstr "Alternativa tifinagh"
+msgid "Russian (legacy)"
+msgstr "Ruso (heredado)"
#: ../rules/base.xml.in.h:660
-msgid "Tifinagh alternative phonetic"
-msgstr "Alternativa fonética tifinagh"
+msgid "Russian (phonetic WinKeys)"
+msgstr "Ruso (fonético con teclas Windows)"
#: ../rules/base.xml.in.h:661
-msgid "Tifinagh extended"
-msgstr "Extendido tifinagh"
+msgid "Russian (phonetic)"
+msgstr "Ruso (fonético)"
#: ../rules/base.xml.in.h:662
-msgid "Tifinagh extended phonetic"
-msgstr "Tifinagh fonético extendido"
+msgid "Russian (typewriter)"
+msgstr "Ruso (máquina de escribir)"
#: ../rules/base.xml.in.h:663
-msgid "Tifinagh phonetic"
-msgstr "Tifinagh fonético"
+msgid "Russian (typewriter, legacy)"
+msgstr "Ruso (máquina de escribir, heredado)"
#: ../rules/base.xml.in.h:664
-msgid "Tilde (~) variant"
-msgstr "Variante virgulilla (~)"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless Keyboard"
#: ../rules/base.xml.in.h:665
-msgid "Tjk"
-msgstr "Tjk"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:666
-msgid "Tkm"
-msgstr "Tkm"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:667
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "A la tecla correspondiente en un teclado Dvorak."
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:668
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "A la tecla correspondiente en un teclado Qwerty."
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:669
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:670
-msgid "Traditional phonetic"
-msgstr "Tradicional fonético"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:671
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access Keyboard"
+msgid "Saisiyat (Taiwan)"
+msgstr "Saisiyat (Taiwán)"
#: ../rules/base.xml.in.h:672
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:673
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:674
-msgid "Tur"
-msgstr "Tur"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
#: ../rules/base.xml.in.h:675
-msgid "Turkey"
-msgstr "Turquía"
+msgid "Scroll Lock"
+msgstr "Bloq Despl"
#: ../rules/base.xml.in.h:676
-msgid "Turkmenistan"
-msgstr "Turkmenistán"
+msgid "Secwepemctsin"
+msgstr "Shuswap"
#: ../rules/base.xml.in.h:677
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
+msgid "Semi-colon on third level"
+msgstr "Punto y coma en tercer nivel"
#: ../rules/base.xml.in.h:678
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
+msgid "Serbian"
+msgstr "Serbio"
#: ../rules/base.xml.in.h:679
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Serbio (latino Unicode qwerty)"
#: ../rules/base.xml.in.h:680
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:modo EU)"
+msgid "Serbian (Latin Unicode)"
+msgstr "Serbio (latino Unicode)"
#: ../rules/base.xml.in.h:681
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (106:modo JP)"
+msgid "Serbian (Latin qwerty)"
+msgstr "Serbio (latino qwerty)"
#: ../rules/base.xml.in.h:682
-msgid "Typewriter"
-msgstr "Máquina de escribir"
+msgid "Serbian (Latin with guillemets)"
+msgstr "Serbio (latino con guillemots)"
#: ../rules/base.xml.in.h:683
-msgid "Typewriter, legacy"
-msgstr "Máquina de escribir, heredado"
+msgid "Serbian (Latin)"
+msgstr "Serbio (latino)"
#: ../rules/base.xml.in.h:684
-msgid "Tza"
-msgstr "Tza"
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Serbio (rusino de Panonia homofónico)"
#: ../rules/base.xml.in.h:685
-msgid "UCW layout (accented letters only)"
-msgstr "Distribución UCW (sólo teclas con tilde)"
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Serbio (Z y ZHE intercambiados)"
#: ../rules/base.xml.in.h:686
-msgid "US Dvorak with CZ UCW support"
-msgstr "Teclado EE. UU. con soporte para UCW checo"
+msgid "Serbian (with guillemets)"
+msgstr "Serbio (con guillemots)"
#: ../rules/base.xml.in.h:687
-msgid "US keyboard with Bosnian digraphs"
-msgstr "Teclado EE. UU. con digrafos bosnios"
+msgid "Serbo-Croatian (US)"
+msgstr "Serbocroata (EE. UU.)"
#: ../rules/base.xml.in.h:688
-msgid "US keyboard with Bosnian letters"
-msgstr "Teclado EE. UU. con letras bosnias"
+msgid "Shift cancels Caps Lock"
+msgstr "Mayús cancela Bloq Mayús"
#: ../rules/base.xml.in.h:689
-msgid "US keyboard with Croatian digraphs"
-msgstr "Teclado EE. UU. con digrafos croatas"
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Mayús no cancela Bloq Num, en su lugar elije el 3er nivel"
#: ../rules/base.xml.in.h:690
-msgid "US keyboard with Croatian letters"
-msgstr "Teclado EE. UU. con letras croatas"
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Mayús con las teclas del teclado numérico funcionan como en MS Windows"
#: ../rules/base.xml.in.h:691
-msgid "US keyboard with Estonian letters"
-msgstr "Teclado EE. UU. con letras estonias"
+msgid "Shift+Caps Lock"
+msgstr "Mayús+Bloq Mayús"
#: ../rules/base.xml.in.h:692
-msgid "US keyboard with Italian letters"
-msgstr "Teclado EE. UU. con letras italianas"
+msgid "Sindhi"
+msgstr "Sindhi"
#: ../rules/base.xml.in.h:693
-msgid "US keyboard with Lithuanian letters"
-msgstr "Teclado EE. UU. con letras lituanas"
+msgid "Sinhala"
+msgstr "Sinhala"
#: ../rules/base.xml.in.h:694
-msgid "US keyboard with Slovenian letters"
-msgstr "Teclado EE. UU. con letras eslovenas"
+msgid "Slovak"
+msgstr "Eslovaco"
-#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr "EE. UU."
+#: ../rules/base.xml.in.h:695
+msgid "Slovak (extended Backslash)"
+msgstr "Eslovaco (contrabarra extendida)"
#: ../rules/base.xml.in.h:696
-msgid "Udmurt"
-msgstr "Udmurto"
+msgid "Slovak (qwerty)"
+msgstr "Eslovaco (qwerty)"
#: ../rules/base.xml.in.h:697
-msgid "Ukr"
-msgstr "Ucr"
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Eslovaco (qwerty, contrabarra extendida)"
#: ../rules/base.xml.in.h:698
-msgid "Ukraine"
-msgstr "Ucrania"
+msgid "Slovene"
+msgstr "Esloveno"
#: ../rules/base.xml.in.h:699
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Adiciones unicode (flechas y operadores matemáticos)"
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Esloveno (teclado EE. UU. con letras eslovenas)"
#: ../rules/base.xml.in.h:700
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Adiciones unicode (flechas y operadores matemáticos); operadores matemáticos en el nivel predeterminado"
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Esloveno (usar guillemots para comillas)"
#: ../rules/base.xml.in.h:701
-msgid "UnicodeExpert"
-msgstr "UnicodeExperto"
+msgid "Spanish"
+msgstr "Español"
#: ../rules/base.xml.in.h:702
-msgid "United Kingdom"
-msgstr "Reino Unido"
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Español (variante asturiana con H de medio punto y L de medio punto)"
#: ../rules/base.xml.in.h:703
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Español (variante catalana con L de medio punto)"
#: ../rules/base.xml.in.h:704
-msgid "Urdu, Alternative phonetic"
-msgstr "Urdu fonético alternativo"
+msgid "Spanish (Dvorak)"
+msgstr "Español (Dvorak)"
#: ../rules/base.xml.in.h:705
-msgid "Urdu, Phonetic"
-msgstr "Urdu fonético"
+msgid "Spanish (Latin American)"
+msgstr "Español (latinoamericano)"
#: ../rules/base.xml.in.h:706
-msgid "Urdu, Winkeys"
-msgstr "Urdu, teclas Windows"
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Español (latinoamericano, eliminar teclas muertas)"
#: ../rules/base.xml.in.h:707
-msgid "Use Bosnian digraphs"
-msgstr "Usar digrafos bosnios"
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Español (latinoamericano, incluir tilde muerta)"
#: ../rules/base.xml.in.h:708
-msgid "Use Croatian digraphs"
-msgstr "Usar digrafos croatas"
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Español (latinoamericano, teclas muertas de Sun)"
#: ../rules/base.xml.in.h:709
-msgid "Use guillemets for quotes"
-msgstr "Usar guillemots para comillas"
+msgid "Spanish (Mac)"
+msgstr "Español (Mac)"
#: ../rules/base.xml.in.h:710
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Usar LED del teclado para mostrar la distribución alternativa"
+msgid "Spanish (Sun dead keys)"
+msgstr "Español (teclas muertas de Sun)"
#: ../rules/base.xml.in.h:711
-msgid "Using space key to input non-breakable space character"
-msgstr "Usando la tecla espacio para introducir un carácter de espacio no separable"
+msgid "Spanish (eliminate dead keys)"
+msgstr "Español (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:712
-msgid "Usual space at any level"
-msgstr "Espacio usual en cualquier nivel"
+msgid "Spanish (include dead tilde)"
+msgstr "Español (incluir tilde muerta)"
#: ../rules/base.xml.in.h:713
-msgid "Uzb"
-msgstr "Uzb"
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Teclas especiales (Ctrl+Alt+«tecla») manipuladas en un servidor"
#: ../rules/base.xml.in.h:714
-msgid "Uzbekistan"
-msgstr "Uzbekistán"
+msgid "Sun Type 5/6"
+msgstr "Sun tipo 5/6"
#: ../rules/base.xml.in.h:715
-msgid "Vietnam"
-msgstr "Vietnam"
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power Multimedia Keyboard"
#: ../rules/base.xml.in.h:716
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "Teclado para internet ViewSonic KU-306"
+msgid "Swahili (Kenya)"
+msgstr "Swahili (Kenia)"
#: ../rules/base.xml.in.h:717
-msgid "Vnm"
-msgstr "Vnm"
+msgid "Swahili (Tanzania)"
+msgstr "Swahili (Tanzania)"
#: ../rules/base.xml.in.h:718
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos)"
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Intercambiar Ctrl y Bloq Mayús"
#: ../rules/base.xml.in.h:719
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos); operadores matemáticos en el nivel predeterminado"
+msgid "Swap ESC and Caps Lock"
+msgstr "Intercambiar ESC y Bloq Mayús"
#: ../rules/base.xml.in.h:720
-msgid "Wang model 724 azerty"
-msgstr "Wang modelo 724 azerty"
+msgid "Swedish"
+msgstr "Sueco"
#: ../rules/base.xml.in.h:721
-msgid "Western"
-msgstr "Occidental"
+msgid "Swedish (Dvorak)"
+msgstr "Sueco (Dvorak)"
#: ../rules/base.xml.in.h:722
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
+msgid "Swedish (Mac)"
+msgstr "Sueco (Mac)"
#: ../rules/base.xml.in.h:723
-msgid "Winkeys"
-msgstr "Teclas Windows"
+msgid "Swedish (Svdvorak)"
+msgstr "Sueco (Svdvorak)"
#: ../rules/base.xml.in.h:724
-msgid "With &lt;\\|&gt; key"
-msgstr "With tecla «\\|»"
+msgid "Swedish (eliminate dead keys)"
+msgstr "Sueco (eliminar teclas muertas)"
#: ../rules/base.xml.in.h:725
-msgid "With EuroSign on 5"
-msgstr "Con símbolo del Euro a la tecla 5"
+msgid "Swedish (northern Saami)"
+msgstr "Sueco (Saami del norte)"
#: ../rules/base.xml.in.h:726
-msgid "With guillemets"
-msgstr "Con guillemots"
+msgid "Swiss"
+msgstr "Suizo"
#: ../rules/base.xml.in.h:727
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! Internet Keyboard"
+msgid "Swiss (legacy)"
+msgstr "Suizo (heredado)"
#: ../rules/base.xml.in.h:728
-msgid "Yakut"
-msgstr "Yakuto"
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet PC)"
#: ../rules/base.xml.in.h:729
-msgid "Yoruba"
-msgstr "Yoruba"
+msgid "Syriac"
+msgstr "Sirio"
#: ../rules/base.xml.in.h:730
-msgid "Z and ZHE swapped"
-msgstr "Z y ZHE intercambiados"
+msgid "Syriac (phonetic)"
+msgstr "Sirio (fonético)"
#: ../rules/base.xml.in.h:731
-msgid "Zaf"
-msgstr "Zaf"
+msgid "Taiwanese"
+msgstr "Taiwanés"
#: ../rules/base.xml.in.h:732
-msgid "Zero-width non-joiner character at second level"
-msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel"
+msgid "Taiwanese (indigenous)"
+msgstr "Taiwanés (autóctono)"
#: ../rules/base.xml.in.h:733
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
-msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel"
+msgid "Tajik"
+msgstr "Tajico"
#: ../rules/base.xml.in.h:734
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
-msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel"
+msgid "Tajik (legacy)"
+msgstr "Tajico (heredado)"
#: ../rules/base.xml.in.h:735
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
-msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio estrecho no separable en el cuarto nivel"
+msgid "Tamil"
+msgstr "Tamil"
#: ../rules/base.xml.in.h:736
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
-msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio de anchura cero rompible («ZWJ») en el cuarto nivel"
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Tamil (Sri Lanka, máquina de escribir TAB)"
#: ../rules/base.xml.in.h:737
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
-msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel"
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Tamil (Sri Lanka, Unicode)"
#: ../rules/base.xml.in.h:738
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
-msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel, caracter de espacio no separable en el cuarto nivel"
+msgid "Tamil (TAB typewriter)"
+msgstr "Tamil (máquina de escribir TAB)"
#: ../rules/base.xml.in.h:739
-msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
-msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el tercer nivel, carácter de anchura cero rompible («ZWJ») en el cuarto nivel"
+msgid "Tamil (TSCII typewriter)"
+msgstr "Tamil (máquina de escribir TSCII)"
#: ../rules/base.xml.in.h:740
-msgid "azerty"
-msgstr "azerty"
+msgid "Tamil (Unicode)"
+msgstr "Tamil (Unicode)"
#: ../rules/base.xml.in.h:741
-msgid "azerty/digits"
-msgstr "azerty/dígitos"
+msgid "Tamil (keyboard with numerals)"
+msgstr "Tamil (teclado con números)"
#: ../rules/base.xml.in.h:742
-msgid "digits"
-msgstr "dígitos"
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
#: ../rules/base.xml.in.h:743
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "punto y coma y comilla desplazadas (obsoleto)"
+msgid "Telugu"
+msgstr "Telugu"
#: ../rules/base.xml.in.h:744
-msgid "lyx"
-msgstr "lyx"
+msgid "Thai"
+msgstr "Tailandés"
#: ../rules/base.xml.in.h:745
-msgid "qwerty"
-msgstr "qwerty"
+msgid "Thai (Pattachote)"
+msgstr "Tailandés (Pattachote)"
#: ../rules/base.xml.in.h:746
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, contrabarra extendida"
+msgid "Thai (TIS-820.2538)"
+msgstr "Tailandés (TIS-820.2538)"
#: ../rules/base.xml.in.h:747
-msgid "qwerty/digits"
-msgstr "qwerty/dígitos"
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "A la tecla correspondiente en un teclado Dvorak."
#: ../rules/base.xml.in.h:748
-msgid "qwertz"
-msgstr "qwertz"
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "A la tecla correspondiente en un teclado Qwerty."
+
+#: ../rules/base.xml.in.h:749
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Cambiar las teclas de flechas con Mayús + Bloq Num"
+
+#: ../rules/base.xml.in.h:750
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
+
+#: ../rules/base.xml.in.h:751
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access Keyboard"
+
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
+
+#: ../rules/base.xml.in.h:753
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
+
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr "Tswana"
+
+#: ../rules/base.xml.in.h:755
+msgid "Turkish"
+msgstr "Turco"
+
+#: ../rules/base.xml.in.h:756
+msgid "Turkish (Alt-Q)"
+msgstr "Turco (Alt-Q)"
+
+#: ../rules/base.xml.in.h:757
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Turco (Alt-Q turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:758
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Turco (F turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Turco (Q turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:760
+msgid "Turkish (F)"
+msgstr "Turco (F)"
+
+#: ../rules/base.xml.in.h:761
+msgid "Turkish (Sun dead keys)"
+msgstr "Turco (teclas muertas de Sun)"
+
+#: ../rules/base.xml.in.h:762
+msgid "Turkish (international with dead keys)"
+msgstr "Turco (internacional con teclas muertas)"
+
+#: ../rules/base.xml.in.h:763
+msgid "Turkmen"
+msgstr "Turkmenistano"
+
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr "Turkmenistano (Alt-Q)"
+
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
+
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
+
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:modo EU)"
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:modo JP)"
+
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Ucraniano"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Ucraniano (Alt-Q turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Ucraniano (F turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Ucraniano (Q turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Ucraniano (teclas Windows)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Ucraniano (homofónico)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Ucraniano (heredado)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Ucraniano (fonético)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Ucraniano (estándar RSTU con distribución rusa)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Ucraniano (estándar RSTU)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Ucraniano (máquina de escribir)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Adiciones Unicode (flechas y operadores matemáticos)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Adiciones Unicode (flechas y operadores matemáticos); operadores matemáticos en el nivel predeterminado"
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Urdu (Pakistán)"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Urdu (Pakistán, CRULP)"
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Urdu (Pakistán, NLA)"
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Urdu (teclas Windows)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Urdu (fonético alternativo)"
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Urdu (fonético)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Usar LED del teclado para mostrar la distribución alternativa"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Usando la tecla espacio para introducir un carácter de espacio no separable"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Espacio usual en cualquier nivel"
+
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Uzbeco"
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Uzbeco (Afganistán)"
+
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Uzbeco (Afganistán, OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Uzbeco (Alt-Q turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Uzbeco (F turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Uzbeco (Q turca del tártaro de Crimea)"
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Uzbeco (latino)"
+
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "Vietnamita"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "Teclado para internet ViewSonic KU-306"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Teclado numérico Wang 724 con adiciones Unicode (flechas y operadores matemáticos); operadores matemáticos en el nivel predeterminado"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Wolof"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! Internet Keyboard"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Yoruba"
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel"
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel"
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, nada en el cuarto nivel"
+
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio estrecho no separable en el cuarto nivel"
+
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio no separable en el tercer nivel, espacio de anchura cero rompible («ZWJ») en el cuarto nivel"
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel"
+
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el segundo nivel, carácter de espacio de anchura cero rompible («ZWJ») en el tercer nivel, caracter de espacio no separable en el cuarto nivel"
+
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Carácer de espacio irrompible de anchura cero («ZWNJ») en el tercer nivel, carácter de anchura cero rompible («ZWJ») en el cuarto nivel"
+
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
+
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
+
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
+
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
+
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
#: ../rules/base.extras.xml.in.h:1
msgid "APL"
msgstr "APL"
#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Atsina"
+msgid "Iran"
+msgstr "Irán"
#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr "Avéstico"
+msgid "Iran - Avestan"
+msgstr "Irán: avéstico"
#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr "Combinar tildes en lugar de teclas muertas"
+msgid "Lithuania"
+msgstr "Lituania"
#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr "Coeur d’Alene salish"
+msgid "Lithuania - Dvorak"
+msgstr "Lituania: Dvorak"
#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr "Internacional (combinando AltGr Unicode)"
+msgid "Ltu"
+msgstr "Ltu"
#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "Internacional (combinando AltGr Unicode, alternativa)"
+msgid "Romania"
+msgstr "Rumanía"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Rumanía: tipo de pulsación ergonómica"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rou"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Rusia"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Serbia"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Serbia: combinar tildes en lugar de teclas muertas"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "EE. UU."
+
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "EE. UU.: Atsina"
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "EE. UU.: Coeur d’Alene salish"
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "EE. UU.: internacional (combinando AltGr Unicode)"
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "EE. UU.: internacional (combinando AltGr Unicode, alternativa)"
+
+#~ msgid "(F)"
+#~ msgstr "(F)"
+
+#~ msgid "Alb"
+#~ msgstr "Alb"
+
+#~ msgid "Alt-Q"
+#~ msgstr "Alt-Q"
+
+#~ msgid "Alternative"
+#~ msgstr "Alternativa"
+
+#~ msgid "Alternative Phonetic"
+#~ msgstr "Alternativa fonética"
+
+#~ msgid "Alternative international"
+#~ msgstr "Alternativa internacional"
+
+#~ msgid "And"
+#~ msgstr "And"
+
+#~ msgid "Andorra"
+#~ msgstr "Andorra"
+
+#~ msgid "Ara"
+#~ msgstr "Ara"
+
+#~ msgid "Arm"
+#~ msgstr "Arm"
+
+#~ msgid "Aut"
+#~ msgstr "Aut"
+
+#~ msgid "Aze"
+#~ msgstr "Aze"
+
+#~ msgid "Bangladesh"
+#~ msgstr "Bangladesh"
+
+#~ msgid "Bel"
+#~ msgstr "Bel"
+
+#~ msgid "Bgd"
+#~ msgstr "Bgd"
+
+#~ msgid "Bhutan"
+#~ msgstr "Bhután"
+
+#~ msgid "Bih"
+#~ msgstr "Bih"
+
+#~ msgid "Blr"
+#~ msgstr "Blr"
+
+#~ msgid "Bosnia and Herzegovina"
+#~ msgstr "Bosnia y Herzegovina"
+
+#~ msgid "Bra"
+#~ msgstr "Bra"
+
+#~ msgid "Brazil"
+#~ msgstr "Brasil"
+
+#~ msgid "Breton"
+#~ msgstr "Bretón"
+
+#~ msgid "Bwa"
+#~ msgstr "Bwa"
+
+#~ msgid "COD"
+#~ msgstr "COD"
+
+#~ msgid "CRULP"
+#~ msgstr "CRULP"
+
+#~ msgid "Canada"
+#~ msgstr "Canadá"
+
+#~ msgid "Cedilla"
+#~ msgstr "Cedilla"
+
+#~ msgid "Chn"
+#~ msgstr "Chn"
+
+#~ msgid "Chuvash"
+#~ msgstr "Chuvash"
+
+#~ msgid "Classic"
+#~ msgstr "Clásico"
+
+#~ msgid "Colemak"
+#~ msgstr "Colemak"
+
+#~ msgid "Cyrillic"
+#~ msgstr "Cirílico"
+
+#~ msgid "Cze"
+#~ msgstr "Che"
+
+#~ msgid "DOS"
+#~ msgstr "DOS"
+
+#~ msgid "Dead acute"
+#~ msgstr "Acento muerto"
+
+#~ msgid "Denmark"
+#~ msgstr "Dinamarca"
+
+#~ msgid "Deu"
+#~ msgstr "Deu"
+
+#~ msgid "Dnk"
+#~ msgstr "Dnk"
+
+#~ msgid "Dvorak"
+#~ msgstr "Dvorak"
+
+#~ msgid "Eastern"
+#~ msgstr "Oriental"
+
+#~ msgid "Epo"
+#~ msgstr "Epo"
+
+#~ msgid "Ergonomic"
+#~ msgstr "Ergonómico"
+
+#~ msgid "Est"
+#~ msgstr "Est"
+
+#~ msgid "Ethiopia"
+#~ msgstr "Etiopía"
+
+#~ msgid "Extended"
+#~ msgstr "Extendido"
+
+#~ msgid "Finland"
+#~ msgstr "Finlandia"
+
+#~ msgid "Fra"
+#~ msgstr "Fra"
+
+#~ msgid "France"
+#~ msgstr "Francia"
+
+#~ msgid "GILLBT"
+#~ msgstr "GILLBT"
+
+#~ msgid "Georgia"
+#~ msgstr "Georgia"
+
+#~ msgid "Ghana"
+#~ msgstr "Ghana"
+
+#~ msgid "Gin"
+#~ msgstr "Gin"
+
+#~ msgid "Grc"
+#~ msgstr "Grc"
+
+#~ msgid "Guinea"
+#~ msgstr "Guinea"
+
+#~ msgid "Homophonic"
+#~ msgstr "Homofónico"
+
+#~ msgid "Hrv"
+#~ msgstr "Hrv"
+
+#~ msgid "Hun"
+#~ msgstr "Hun"
+
+#~ msgid "Ind"
+#~ msgstr "Ind"
+
+#~ msgid "Ireland"
+#~ msgstr "Irlanda"
+
+#~ msgid "Irl"
+#~ msgstr "Irl"
+
+#~ msgid "Irn"
+#~ msgstr "Irn"
+
+#~ msgid "Israel"
+#~ msgstr "Israel"
+
+#~ msgid "Jpn"
+#~ msgstr "Jpn"
+
+#~ msgid "Kalmyk"
+#~ msgstr "Calmuco"
+
+#~ msgid "Kana"
+#~ msgstr "Kana"
+
+#~ msgid "Kana 86"
+#~ msgstr "Kana 86"
+
+#~ msgid "Kenya"
+#~ msgstr "Kenia"
+
+#~ msgid "Kgz"
+#~ msgstr "Kgz"
+
+#~ msgid "Khm"
+#~ msgstr "Khm"
+
+#~ msgid "Korea, Republic of"
+#~ msgstr "Corea, República de"
+
+#~ msgid "Ktunaxa"
+#~ msgstr "Kutenai"
+
+#~ msgid "LEKP"
+#~ msgstr "LEKP"
+
+#~ msgid "LEKPa"
+#~ msgstr "LEKPa"
+
+#~ msgid "Laos"
+#~ msgstr "Laos"
+
+#~ msgid "Latin"
+#~ msgstr "Latino"
+
+#~ msgid "Left hand"
+#~ msgstr "Zurdo"
+
+#~ msgid "Lva"
+#~ msgstr "Lva"
+
+#~ msgid "MESS"
+#~ msgstr "MESS"
+
+#~ msgid "MNE"
+#~ msgstr "MNE"
+
+#~ msgid "Macintosh (International)"
+#~ msgstr "Macintosh (internacional)"
+
+#~ msgid "Maldives"
+#~ msgstr "Maldivas"
+
+#~ msgid "Mali"
+#~ msgstr "Malí"
+
+#~ msgid "Mao"
+#~ msgstr "Mao"
+
+#~ msgid "Maori"
+#~ msgstr "Maorí"
+
+#~ msgid "Mkd"
+#~ msgstr "Mkd"
+
+#~ msgid "Mli"
+#~ msgstr "Mli"
+
+#~ msgid "Mmr"
+#~ msgstr "Mmr"
+
+#~ msgid "Mng"
+#~ msgstr "Mng"
+
+#~ msgid "Myanmar"
+#~ msgstr "Myanmar"
+
+#~ msgid "NLA"
+#~ msgstr "NLA"
+
+#~ msgid "Nativo"
+#~ msgstr "Nativo"
+
+#~ msgid "Neo 2"
+#~ msgstr "Neo 2"
+
+#~ msgid "Netherlands"
+#~ msgstr "Holanda"
+
+#~ msgid "Nigeria"
+#~ msgstr "Nigeria"
+
+#~ msgid "Nld"
+#~ msgstr "Hol"
+
+#~ msgid "Nor"
+#~ msgstr "Nor"
+
+#~ msgid "Norway"
+#~ msgstr "Noruega"
+
+#~ msgid "OLPC Dari"
+#~ msgstr "OLPC dari"
+
+#~ msgid "OLPC Pashto"
+#~ msgstr "OLPC pashto"
+
+#~ msgid "OLPC Southern Uzbek"
+#~ msgstr "OLPC uzbeco del sur"
+
+#~ msgid "Occitan"
+#~ msgstr "Occitano"
+
+#~ msgid "Ogham"
+#~ msgstr "Ogham"
+
+#~ msgid "Ossetian"
+#~ msgstr "Osetio"
+
+#~ msgid "Phonetic"
+#~ msgstr "Fonético"
+
+#~ msgid "Phonetic Winkeys"
+#~ msgstr "Teclas Windows fonéticas"
+
+#~ msgid "Pol"
+#~ msgstr "Pol"
+
+#~ msgid "Poland"
+#~ msgstr "Polonia"
+
+#~ msgid "Probhat"
+#~ msgstr "Probhat"
+
+#~ msgid "Prt"
+#~ msgstr "Prt"
+
+#~ msgid "SRB"
+#~ msgstr "SRB"
+
+#~ msgid "Sen"
+#~ msgstr "Sen"
+
+#~ msgid "Senegal"
+#~ msgstr "Senegal"
+
+#~ msgid "Simple"
+#~ msgstr "Simple"
+
+#~ msgid "Southern Uzbek"
+#~ msgstr "Uzbequia del sur"
+
+#~ msgid "Spain"
+#~ msgstr "España"
+
+#~ msgid "Sri Lanka"
+#~ msgstr "Sri Lanka"
+
+#~ msgid "Standard"
+#~ msgstr "Estándar"
+
+#~ msgid "Svk"
+#~ msgstr "Svk"
+
+#~ msgid "Svn"
+#~ msgstr "Svn"
+
+#~ msgid "Swe"
+#~ msgstr "Swe"
+
+#~ msgid "Syria"
+#~ msgstr "Siria"
+
+#~ msgid "Tatar"
+#~ msgstr "Tatar"
+
+#~ msgid "Tha"
+#~ msgstr "Tha"
+
+#~ msgid "Tibetan"
+#~ msgstr "Tibetano"
+
+#~ msgid "Tifinagh"
+#~ msgstr "Tifinagh"
+
+#~ msgid "Tjk"
+#~ msgstr "Tjk"
+
+#~ msgid "Typewriter"
+#~ msgstr "Máquina de escribir"
+
+#~ msgid "Tza"
+#~ msgstr "Tza"
+
+#~ msgid "Udmurt"
+#~ msgstr "Udmurto"
+
+#~ msgid "Ukr"
+#~ msgstr "Ucr"
+
+#~ msgid "United Kingdom"
+#~ msgstr "Reino Unido"
+
+#~ msgid "Uzb"
+#~ msgstr "Uzb"
+
+#~ msgid "Vnm"
+#~ msgstr "Vnm"
+
+#~ msgid "Western"
+#~ msgstr "Occidental"
+
+#~ msgid "With EuroSign on 5"
+#~ msgstr "Con símbolo del Euro a la tecla 5"
+
+#~ msgid "With guillemets"
+#~ msgstr "Con guillemots"
+
+#~ msgid "Zaf"
+#~ msgstr "Zaf"
+
+#~ msgid "azerty"
+#~ msgstr "azerty"
+
+#~ msgid "digits"
+#~ msgstr "dígitos"
+
+#~ msgid "lyx"
+#~ msgstr "lyx"
+
+#~ msgid "qwertz"
+#~ msgstr "qwertz"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "E"
+#~ msgstr "E"
+
+#~ msgid "LAm"
+#~ msgstr "LAm"
#~ msgid "CapsLock"
#~ msgstr "Bloq Mayús"
@@ -3029,9 +4198,6 @@ msgstr "Internacional (combinando AltGr Unicode, alternativa)"
#~ msgid "ACPI Standard"
#~ msgstr "ACPI Estándard"
-#~ msgid "Bhu"
-#~ msgstr "Bhu"
-
#~ msgid "DRC"
#~ msgstr "DRC"
@@ -3096,12 +4262,6 @@ msgstr "Internacional (combinando AltGr Unicode, alternativa)"
#~ msgid "IBM Rapid Access II (alternate option)"
#~ msgstr "IBM Rapid Access II (opción alternativa)"
-#~ msgid "Japanese 106-key"
-#~ msgstr "Japonés 106 teclas"
-
-#~ msgid "Korean 106-key"
-#~ msgstr "Coreano 106 teclas"
-
#~ msgid "Kotoistus"
#~ msgstr "Kotoistus"
diff --git a/xorg-server/xkeyboard-config/po/fr.po b/xorg-server/xkeyboard-config/po/fr.po
index 42929600a..8fd2c6c17 100644
--- a/xorg-server/xkeyboard-config/po/fr.po
+++ b/xorg-server/xkeyboard-config/po/fr.po
@@ -4,2804 +4,4486 @@
# Michel Robitaille <robitail@IRO.UMontreal.CA>, traducteur depuis/since 1996.
# 2005, 2006 Denis Barbier <barbier@linuxfr.org>
# 2008 Marc Veillet <scouigne@gmail.com>
+# Marc Veillet <scouigne@gmail.com>, 2011.
+# Jean-Philippe Guérard <jean-philippe.guerard@corbeaunoir.org>, 2011.
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 1.8\n"
+"Project-Id-Version: xkeyboard-config 2.1.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2010-01-16 18:08+0000\n"
-"PO-Revision-Date: 2010-01-18 09:46-0500\n"
-"Last-Translator: Marc Veillet <scouigne@gmail.com>\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-04-02 00:44+0200\n"
+"Last-Translator: Jean-Philippe Guérard <jean-philippe.guerard@corbeaunoir.org>\n"
"Language-Team: French <traduc@traduc.org>\n"
+"Language: fr\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Poedit-Language: French\n"
-"X-Poedit-Country: CANADA\n"
#: ../rules/base.xml.in.h:1
-msgid "(F)"
-msgstr "(F)"
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;Plus petit/Plus grand&gt;"
#: ../rules/base.xml.in.h:2
-msgid "(Legacy) Alternative"
-msgstr "(Obsolète) Autre"
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le 3e niveau ; enclenche le 3e niveau par un appui simultané avec un autre sélecteur de 3e niveau"
#: ../rules/base.xml.in.h:3
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(Obsolète) Autre, touches mortes Sun"
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le 5e niveau ; verrouille le 5e niveau par un appui simultané avec un autre sélecteur de 5e niveau ; un appui libère le verrou"
#: ../rules/base.xml.in.h:4
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(Obsolète) Autre, sans touches mortes"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le 5e niveau ; verrouille le 5e niveau par un appui simultané avec un autre sélecteur de 5e niveau"
#: ../rules/base.xml.in.h:5
-msgid "101/104 key Compatible"
-msgstr "Compatible 101/104 touches"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Plus petit/Plus grand&gt; sélectionne le 5e niveau ; se verrouille par un appui simultané avec un autre sélecteur de 5e niveau ; un appui libère le verrou"
#: ../rules/base.xml.in.h:6
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/virgule/touches mortes"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:7
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/virgule/sans touches mortes"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:8
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/point/touches mortes"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/point/sans touches mortes"
+msgid "ATM/phone-style"
+msgstr "Clavier de type téléphonique"
#: ../rules/base.xml.in.h:10
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/virgule/touches mortes"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
#: ../rules/base.xml.in.h:11
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwertz/virgule/sans touches mortes"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:12
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/point/touches mortes"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/point/sans touches mortes"
+msgid "Acer Laptop"
+msgstr "Acer : Portable"
#: ../rules/base.xml.in.h:14
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/virgule/touches mortes"
+msgid "Add the standard behavior to Menu key"
+msgstr "Ajouter du comportement standard à la touche Menu"
#: ../rules/base.xml.in.h:15
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/virgule/sans touches mortes"
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Ajout de l'accent circonflexe espéranto (supersigno)"
#: ../rules/base.xml.in.h:16
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/point/touches mortes"
+msgid "Adding currency signs to certain keys"
+msgstr "Ajout des signes monétaires sur certaines touches"
#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/point/sans touches mortes"
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:18
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/virgule/touches mortes"
+msgid "Afg"
+msgstr "Afg"
#: ../rules/base.xml.in.h:19
-#, fuzzy
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/virgule/sans touches mortes"
+msgid "Afghani"
+msgstr "Afghan"
#: ../rules/base.xml.in.h:20
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/point/touches mortes"
+msgid "Akan"
+msgstr "Akan"
#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/point/sans touches mortes"
+msgid "Albanian"
+msgstr "Albanais"
#: ../rules/base.xml.in.h:22
-msgid "2"
-msgstr "2"
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt et Meta sont sur les touches Alt."
#: ../rules/base.xml.in.h:23
-msgid "4"
-msgstr "4"
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt sur la touche Windows de droite, Super sur Menu"
#: ../rules/base.xml.in.h:24
-msgid "5"
-msgstr "5"
+msgid "Alt+Caps Lock"
+msgstr "Alt+Verr. maj."
#: ../rules/base.xml.in.h:25
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Alt+Ctrl"
+msgstr "Alt.+Ctrl"
#: ../rules/base.xml.in.h:26
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Alt+Shift"
+msgstr "Alt+Maj."
#: ../rules/base.xml.in.h:27
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Desktop RFKB-23 sans fil"
+msgid "Alt+Space"
+msgstr "Alt+Espace"
#: ../rules/base.xml.in.h:28
-msgid "ACPI Standard"
-msgstr "ACPI standard"
+msgid "Alt/Win key behavior"
+msgstr "Comportement des touches Alt et Windows"
#: ../rules/base.xml.in.h:29
-msgid "ATM/phone-style"
-msgstr "ATM/clavier de style téléphonique"
+msgid "Amharic"
+msgstr "Amharique"
#: ../rules/base.xml.in.h:30
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Any Alt key"
+msgstr "N'importe quelle touche Alt"
#: ../rules/base.xml.in.h:31
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Any Win key"
+msgstr "N'importe quelle touche Windows"
#: ../rules/base.xml.in.h:32
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Any Win key (while pressed)"
+msgstr "N'importe quelle touche Windows (enfoncée)"
#: ../rules/base.xml.in.h:33
-msgid "Acer Laptop"
-msgstr "Portable Acer"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:34
-msgid "Add the standard behavior to Menu key"
-msgstr "Ajouter le comportement standard sur la touche Menu"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Clavier aluminium Apple (ANSI)"
#: ../rules/base.xml.in.h:35
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Ajout du circonflexe de l'espéranto (supersigno)"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Clavier aluminium Apple (ISO)"
#: ../rules/base.xml.in.h:36
-msgid "Adding EuroSign to certain keys"
-msgstr "Ajout du signe Euro sur certaines touches"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Clavier aluminium Apple (JIS)"
#: ../rules/base.xml.in.h:37
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Clavier aluminium Apple : émulation des touches PC (Impr. écr. ; défil. ; pause ; verr. num.)"
#: ../rules/base.xml.in.h:38
-msgid "Afg"
-msgstr "Afg"
+msgid "Apple Laptop"
+msgstr "Apple : Portable"
#: ../rules/base.xml.in.h:39
-msgid "Afghanistan"
-msgstr "Afghanistan"
+msgid "Arabic"
+msgstr "Arabe"
#: ../rules/base.xml.in.h:40
-msgid "Akan"
-msgstr "Akan"
+msgid "Arabic (Buckwalter)"
+msgstr "Arabe (Buckwalter)"
#: ../rules/base.xml.in.h:41
-msgid "Alb"
-msgstr "Alb"
+msgid "Arabic (Morocco)"
+msgstr "Arabe (Maroc)"
#: ../rules/base.xml.in.h:42
-msgid "Albania"
-msgstr "Albanie"
+msgid "Arabic (Pakistan)"
+msgstr "Arabe (Pakistan)"
#: ../rules/base.xml.in.h:43
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt et Meta sont sur les touches Alt."
+msgid "Arabic (Syria)"
+msgstr "Arabe (Syrie)"
#: ../rules/base.xml.in.h:44
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt est obtenu avec la touche Logo de droite, et Super avec Menu"
+msgid "Arabic (azerty)"
+msgstr "Arabe (azerty)"
#: ../rules/base.xml.in.h:45
-msgid "Alt+CapsLock"
-msgstr "Alt.+Verr. maj."
+msgid "Arabic (azerty/digits)"
+msgstr "Arabe (azerty/chiffres)"
#: ../rules/base.xml.in.h:46
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
+msgid "Arabic (digits)"
+msgstr "Arabe (chiffres)"
#: ../rules/base.xml.in.h:47
-msgid "Alt+Shift"
-msgstr "Alt+Maj."
+msgid "Arabic (qwerty)"
+msgstr "Arabe (qwerty)"
#: ../rules/base.xml.in.h:48
-msgid "Alt+Space"
-msgstr "Alt+Espace"
+msgid "Arabic (qwerty/digits)"
+msgstr "Arabe (qwerty/chiffres)"
#: ../rules/base.xml.in.h:49
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Armenian"
+msgstr "Arménien"
#: ../rules/base.xml.in.h:50
-msgid "Alt/Win key behavior"
-msgstr "Comportement des touches Alt/Logo"
+msgid "Armenian (alternative eastern)"
+msgstr "Arménien (variante, orientale)"
#: ../rules/base.xml.in.h:51
-msgid "Alternative"
-msgstr "Autre"
+msgid "Armenian (alternative phonetic)"
+msgstr "Arménien (variante, phonétique)"
#: ../rules/base.xml.in.h:52
-msgid "Alternative Eastern"
-msgstr "Orientale, variante"
+msgid "Armenian (eastern)"
+msgstr "Arménien (orientale)"
#: ../rules/base.xml.in.h:53
-msgid "Alternative Phonetic"
-msgstr "Autre, phonétique"
+msgid "Armenian (phonetic)"
+msgstr "Arménien (phonétique)"
#: ../rules/base.xml.in.h:54
-msgid "Alternative international (former us_intl)"
-msgstr "International (auparavant us_intl)"
+msgid "Armenian (western)"
+msgstr "Arménien (occidentale)"
#: ../rules/base.xml.in.h:55
-msgid "Alternative, Sun dead keys"
-msgstr "Autre, touches mortes Sun"
+msgid "Asus Laptop"
+msgstr "Asus : portable"
#: ../rules/base.xml.in.h:56
-msgid "Alternative, eliminate dead keys"
-msgstr "Autre, sans touches mortes"
+msgid "At bottom left"
+msgstr "En bas à gauche"
#: ../rules/base.xml.in.h:57
-msgid "Alternative, latin-9 only"
-msgstr "Autre, latin-9 seulement"
+msgid "At left of 'A'"
+msgstr "À gauche du « A »"
#: ../rules/base.xml.in.h:58
-msgid "And"
-msgstr "And"
+msgid "Avatime"
+msgstr "Avatime"
#: ../rules/base.xml.in.h:59
-msgid "Andorra"
-msgstr "Andorre"
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Azéri (cyrillique)"
#: ../rules/base.xml.in.h:60
-msgid "Any Alt key"
-msgstr "N'importe quelle touche Alt"
+msgid "Azerbaijani"
+msgstr "Azéri"
#: ../rules/base.xml.in.h:61
-msgid "Any Win key"
-msgstr "N'importe quelle touche Logo"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 clavier internet sans fil"
#: ../rules/base.xml.in.h:62
-msgid "Any Win key (while pressed)"
-msgstr "N'importe quelle touche Logo (lorsque pressées)"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:63
-msgid "Apostrophe (') variant"
-msgstr "Variante apostrophe"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF multimédia"
#: ../rules/base.xml.in.h:64
-msgid "Apple"
-msgstr "Apple"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:65
-msgid "Apple Laptop"
-msgstr "Portable Apple"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:66
-msgid "Ara"
-msgstr "Ara"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:67
-msgid "Arabic"
-msgstr "Arabe"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:68
-msgid "Arm"
-msgstr "Arm"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:69
-msgid "Armenia"
-msgstr "Arménie"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:70
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Variante asturienne avec H point bas et L point bas"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
#: ../rules/base.xml.in.h:71
-msgid "Asus Laptop"
-msgstr "Portable Asus"
+msgid "Backslash"
+msgstr "Barre oblique inverse"
#: ../rules/base.xml.in.h:72
-msgid "At bottom left"
-msgstr "En bas à gauche"
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "La barre oblique inverse sélectionne le 3e niveau ; enclenche le 3e niveau par un appui simultané avec un autre sélecteur de 3e niveau"
#: ../rules/base.xml.in.h:73
-msgid "At left of 'A'"
-msgstr "Touche à la gauche du « A »"
+msgid "Bambara"
+msgstr "Bambara"
#: ../rules/base.xml.in.h:74
-msgid "Aze"
-msgstr "Aze"
+msgid "Belarusian"
+msgstr "Biélorusse"
#: ../rules/base.xml.in.h:75
-msgid "Azerbaijan"
-msgstr "Azerbaïdjan"
+msgid "Belarusian (Latin)"
+msgstr "Biélorusse (Latin)"
#: ../rules/base.xml.in.h:76
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 Internet sans fil"
+msgid "Belarusian (legacy)"
+msgstr "Biélorusse (obsolète)"
#: ../rules/base.xml.in.h:77
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Belgian"
+msgstr "Belge"
#: ../rules/base.xml.in.h:78
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF Multimedia"
+msgid "Belgian (ISO alternate)"
+msgstr "Belge (variante ISO)"
#: ../rules/base.xml.in.h:79
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "Belgian (Sun dead keys)"
+msgstr "Belge (touches mortes Sun)"
#: ../rules/base.xml.in.h:80
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belge (Wang modèle 724 azerty)"
#: ../rules/base.xml.in.h:81
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "Belgian (alternative)"
+msgstr "Belge (variante)"
#: ../rules/base.xml.in.h:82
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belge (variante, touches mortes Sun)"
#: ../rules/base.xml.in.h:83
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belge (variante, latin-9 uniquement)"
#: ../rules/base.xml.in.h:84
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belge (sans touches mortes)"
#: ../rules/base.xml.in.h:85
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Internet et Jeu sans fil"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:86
-msgid "Ban"
-msgstr "Ban"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:87
-msgid "Bangladesh"
-msgstr "Bangladesh"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:88
-msgid "Bashkirian"
-msgstr "Bashkirien"
+msgid "Bengali"
+msgstr "Bengali"
#: ../rules/base.xml.in.h:89
-msgid "Bel"
-msgstr "Bel"
+msgid "Bengali (Probhat)"
+msgstr "Bengali (Probhat)"
#: ../rules/base.xml.in.h:90
-msgid "Belarus"
-msgstr "Bélarus"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Berbère (Maroc, variante Tifinagh phonétique)"
#: ../rules/base.xml.in.h:91
-msgid "Belgium"
-msgstr "Belgique"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Berbère (Maroc, variante Tifinagh)"
#: ../rules/base.xml.in.h:92
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Berbère (Maroc, Tifinagh étendu phonétique)"
#: ../rules/base.xml.in.h:93
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Berbère (Maroc, Tifinagh étendu)"
#: ../rules/base.xml.in.h:94
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Berbère (Maroc, Tifinagh phonétique)"
#: ../rules/base.xml.in.h:95
-msgid "Bengali"
-msgstr "Bengali"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Berbère (Maroc, Tifinagh)"
#: ../rules/base.xml.in.h:96
-msgid "Bengali Probhat"
-msgstr "Bengali Probhat"
+msgid "Bosnian"
+msgstr "Bosniaque"
#: ../rules/base.xml.in.h:97
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bépo, ergonomique, façon Dvorak"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bosniaque (clavier US avec digraphes bosniaques)"
#: ../rules/base.xml.in.h:98
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bépo, ergonomique, façon Dvorak, latin-9 seulement"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bosniaque (clavier US avec lettres bosniaques)"
#: ../rules/base.xml.in.h:99
-msgid "Bgr"
-msgstr "Bgr"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bosniaque (utilise les digraphes bosniaques)"
#: ../rules/base.xml.in.h:100
-msgid "Bhu"
-msgstr "Bhu"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bosniaque (utilise des guillemets typographiques à la place des guillemets simples)"
#: ../rules/base.xml.in.h:101
-msgid "Bhutan"
-msgstr "Bhoutan"
+msgid "Both Alt keys together"
+msgstr "Les deux Alt ensemble"
#: ../rules/base.xml.in.h:102
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Hébreu biblique (Tiro)"
+msgid "Both Ctrl keys together"
+msgstr "Les deux Ctrl ensemble"
#: ../rules/base.xml.in.h:103
-msgid "Bih"
-msgstr "Bih"
+msgid "Both Shift keys together"
+msgstr "Les deux Maj. ensemble"
#: ../rules/base.xml.in.h:104
-msgid "Blr"
-msgstr "Blr"
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Les deux touches majuscule activent le verrouillage majuscule, une le désactive"
#: ../rules/base.xml.in.h:105
-msgid "Bosnia and Herzegovina"
-msgstr "Bosnie-Herzégovine"
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Les deux touches majuscule font basculer le verrouillage majuscule"
#: ../rules/base.xml.in.h:106
-msgid "Both Alt keys together"
-msgstr "Les touches Alt ensemble"
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Les deux touches majuscule font basculer le blocage majuscule"
#: ../rules/base.xml.in.h:107
-msgid "Both Ctrl keys together"
-msgstr "Les touches Ctrl ensemble"
+msgid "Braille"
+msgstr "Braille"
#: ../rules/base.xml.in.h:108
-msgid "Both Shift keys together"
-msgstr "Les touches Maj. ensemble"
+msgid "Braille (left hand)"
+msgstr "Braille (main gauche)"
#: ../rules/base.xml.in.h:109
-msgid "Bra"
-msgstr "Bra"
+msgid "Braille (right hand)"
+msgstr "Braille (main droite)"
#: ../rules/base.xml.in.h:110
-msgid "Braille"
-msgstr "Braille"
+msgid "Brother Internet Keyboard"
+msgstr "Brother : Clavier internet"
#: ../rules/base.xml.in.h:111
-msgid "Brazil"
-msgstr "Brésil"
+msgid "Bulgarian"
+msgstr "Bulgare"
#: ../rules/base.xml.in.h:112
-msgid "Breton"
-msgstr "Breton"
+msgid "Bulgarian (new phonetic)"
+msgstr "Bulgare (phonétique, nouveau)"
#: ../rules/base.xml.in.h:113
-msgid "Brl"
-msgstr "Brl"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Bulgare (phonétique, traditionnel)"
#: ../rules/base.xml.in.h:114
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internet"
+msgid "Burmese"
+msgstr "Birman"
#: ../rules/base.xml.in.h:115
-msgid "Buckwalter"
-msgstr "Buckwalter"
+msgid "Canadian Multilingual"
+msgstr "Canadien multilingue"
#: ../rules/base.xml.in.h:116
-msgid "Bulgaria"
-msgstr "Bulgarie"
+msgid "Canadian Multilingual (first part)"
+msgstr "Canadien multilingue (première partie)"
#: ../rules/base.xml.in.h:117
-msgid "CRULP"
-msgstr "CRULP"
+msgid "Canadian Multilingual (second part)"
+msgstr "Canadien multilingue (seconde partie)"
#: ../rules/base.xml.in.h:118
-msgid "Cambodia"
-msgstr "Cambodge"
+msgid "Caps Lock"
+msgstr "Verr. maj."
#: ../rules/base.xml.in.h:119
-msgid "Can"
-msgstr "Can"
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Verr. maj. (sélectionne le 3e niveau ; s'enclenche par un appui simultané avec un autre sélecteur de 3e niveau)"
#: ../rules/base.xml.in.h:120
-msgid "Canada"
-msgstr "Canada"
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Verr. maj. (vers la première disposition), Maj.+verr. maj. (vers la dernière disposition)"
#: ../rules/base.xml.in.h:121
-msgid "Caps Lock"
-msgstr "Verr. maj."
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Verr. maj. (si enfoncé), Alt+verr. maj. joue le rôle original de verr. maj."
#: ../rules/base.xml.in.h:122
-msgid "CapsLock"
-msgstr "Verr. Maj."
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Verr. maj. agit comme un verrouillage de maj. Maj. l'annule temporairement"
#: ../rules/base.xml.in.h:123
-msgid "CapsLock (to first layout), Shift+CapsLock (to last layout)"
-msgstr "Verr. Maj. change vers la première disposition, Maj.+Verr. Maj. change vers la dernière disposition"
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Verr. maj. agit comme maj. quand il est verrouillé. Maj. n'a pas d'effet sur verr. Maj."
#: ../rules/base.xml.in.h:124
-msgid "CapsLock (while pressed), Alt+CapsLock does the original capslock action"
-msgstr "Verr. Maj. (lorsque pressée), Alt+Verr. Maj. provoque le même résultat"
+msgid "Caps Lock is disabled"
+msgstr "Verr. maj. est désactivé"
#: ../rules/base.xml.in.h:125
-msgid "CapsLock acts as Shift with locking. Shift \"pauses\" CapsLock"
-msgstr "Verr. maj. agit comme Maj. verrouillé. Maj. \"l'annule temporairement\""
+msgid "Caps Lock key behavior"
+msgstr "Comportement de la touche verr. maj."
#: ../rules/base.xml.in.h:126
-msgid "CapsLock acts as Shift with locking. Shift doesn't affect CapsLock"
-msgstr "Verr. maj. agit comme Maj. verrouillé. Maj. n'a pas d'effet sur Verr. Maj."
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Verr. maj. bascule maj., ce qui affecte toutes les touches"
#: ../rules/base.xml.in.h:127
-msgid "CapsLock is disabled"
-msgstr "Verr. Maj. est désactivé."
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Verr. maj. bascule la mise en majuscule usuelle des caractères alphabétiques"
#: ../rules/base.xml.in.h:128
-msgid "CapsLock key behavior"
-msgstr "Comportement de la touche Verrouillage majuscule"
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Verr. maj. utilise la mise en majuscule interne. Maj. annule temporairement verr. maj."
#: ../rules/base.xml.in.h:129
-msgid "CapsLock toggles Shift so all keys are affected"
-msgstr "Verr. maj. inverse Maj., ce qui affecte toutes les touches"
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Verr. maj. utilise la mise en majuscule interne. Maj. n'a pas d'effet sur verr. maj."
#: ../rules/base.xml.in.h:130
-msgid "CapsLock toggles normal capitalization of alphabetic characters"
-msgstr "Verr. maj. inverse la mise en majuscule usuelle des caractères alphabétiques"
+msgid "Catalan"
+msgstr "Catalan"
#: ../rules/base.xml.in.h:131
-msgid "CapsLock uses internal capitalization. Shift \"pauses\" CapsLock"
-msgstr "Verr. maj. permet la mise en majuscule interne. Maj. \"annule\" le verrouillage des majuscules"
-
-#: ../rules/base.xml.in.h:132
-msgid "CapsLock uses internal capitalization. Shift doesn't affect CapsLock"
-msgstr "Verr. maj. permet la mise en majuscule interne. Maj. n'a pas d'effet sur cette commande"
-
-#: ../rules/base.xml.in.h:133
-msgid "Catalan variant with middle-dot L"
-msgstr "Catalan avec L point médian"
-
-#: ../rules/base.xml.in.h:134
-msgid "Cedilla"
-msgstr "Cédille"
-
-#: ../rules/base.xml.in.h:135
-msgid "Che"
-msgstr "Che"
-
-#: ../rules/base.xml.in.h:136
msgid "Cherokee"
msgstr "Cherokee"
-#: ../rules/base.xml.in.h:137
+#: ../rules/base.xml.in.h:132
msgid "Cherry B.UNLIMITED"
msgstr "Cherry B.UNLIMITED"
-#: ../rules/base.xml.in.h:138
+#: ../rules/base.xml.in.h:133
msgid "Cherry Blue Line CyBo@rd"
msgstr "Cherry Blue Line CyBo@rd"
-#: ../rules/base.xml.in.h:139
+#: ../rules/base.xml.in.h:134
msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (autre option)"
+msgstr "Cherry Blue Line CyBo@rd (variante)"
-#: ../rules/base.xml.in.h:140
+#: ../rules/base.xml.in.h:135
msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd concentrateur USB"
-#: ../rules/base.xml.in.h:141
+#: ../rules/base.xml.in.h:136
msgid "Cherry CyMotion Expert"
msgstr "Cherry CyMotion Expert"
-#: ../rules/base.xml.in.h:142
+#: ../rules/base.xml.in.h:137
msgid "Cherry CyMotion Master Linux"
msgstr "Cherry CyMotion Master Linux"
-#: ../rules/base.xml.in.h:143
+#: ../rules/base.xml.in.h:138
msgid "Cherry CyMotion Master XPress"
msgstr "Cherry CyMotion Master XPress"
-#: ../rules/base.xml.in.h:144
+#: ../rules/base.xml.in.h:139
msgid "Chicony Internet Keyboard"
-msgstr "Chicony Internet"
+msgstr "Chicony clavier internet"
-#: ../rules/base.xml.in.h:145
+#: ../rules/base.xml.in.h:140
msgid "Chicony KB-9885"
msgstr "Chicony KB-9885"
-#: ../rules/base.xml.in.h:146
+#: ../rules/base.xml.in.h:141
msgid "Chicony KU-0108"
msgstr "Chicony KU-0108"
-#: ../rules/base.xml.in.h:147
+#: ../rules/base.xml.in.h:142
msgid "Chicony KU-0420"
msgstr "Chicony KU-0108"
+#: ../rules/base.xml.in.h:143
+msgid "Chinese"
+msgstr "Chinois"
+
+#: ../rules/base.xml.in.h:144
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Chinois (Tibétain avec nombres ASCII)"
+
+#: ../rules/base.xml.in.h:145
+msgid "Chinese (Tibetan)"
+msgstr "Chinois (Tibétain)"
+
+#: ../rules/base.xml.in.h:146
+msgid "Chinese (Uyghur)"
+msgstr "Chinois (Ouïghour)"
+
+#: ../rules/base.xml.in.h:147
+msgid "Classmate PC"
+msgstr "Classmate PC"
+
#: ../rules/base.xml.in.h:148
-msgid "China"
-msgstr "Chine"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access"
#: ../rules/base.xml.in.h:149
-msgid "Chuvash"
-msgstr "Chuvash"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internet (13 touches)"
#: ../rules/base.xml.in.h:150
-msgid "Chuvash Latin"
-msgstr "Latin Chuvash"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internet (18 touches)"
#: ../rules/base.xml.in.h:151
-msgid "Classic"
-msgstr "Classique"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internet (7 touches)"
#: ../rules/base.xml.in.h:152
-msgid "Classic Dvorak"
-msgstr "Dvorak classique"
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq"
#: ../rules/base.xml.in.h:153
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Compose key position"
+msgstr "Position de la touche Compose"
#: ../rules/base.xml.in.h:154
-msgid "CloGaelach"
-msgstr "CloGaelach"
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Eff. arrière"
#: ../rules/base.xml.in.h:155
-msgid "Colemak"
-msgstr "Colemak"
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Ctrl s'obtient avec Alt, Alt s'obtient les touches Windows"
#: ../rules/base.xml.in.h:156
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access"
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Ctrl s'obtient avec les touches Windows (et les touches Ctrl habituelles)"
#: ../rules/base.xml.in.h:157
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internet (13 touches)"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
#: ../rules/base.xml.in.h:158
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internet (18 touches)"
+msgid "Croatian"
+msgstr "Croate"
#: ../rules/base.xml.in.h:159
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internet (7 touches)"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Croate (clavier US avec digraphes croates)"
#: ../rules/base.xml.in.h:160
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Croate (clavier US avec lettres croates)"
#: ../rules/base.xml.in.h:161
-msgid "Compose key position"
-msgstr "Position de la touche Compose"
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Croate (utilise les digraphes croates)"
#: ../rules/base.xml.in.h:162
-msgid "Congo, Democratic Republic of the"
-msgstr "République démocratique du Congo"
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Croate (utilise des guillemets typographiques à la place des guillemets simples)"
#: ../rules/base.xml.in.h:163
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Eff. arrière"
+msgid "Ctrl key position"
+msgstr "Position de la touche Ctrl"
#: ../rules/base.xml.in.h:164
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "La touche Ctrl est obtenue avec la touche Alt, Alt est obtenue avec les touches Logo"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Maj."
#: ../rules/base.xml.in.h:165
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "La touche Ctrl est obtenue avec la touche Logo (et les touches Ctrl habituelles)"
+msgid "Czech"
+msgstr "Tchèque"
+# http://repo.or.cz/w/ucwcs-xkb.git/blob_plain/HEAD:/README
+# http://www.ucw.cz/
#: ../rules/base.xml.in.h:166
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Tchèque (disposition UCW, lettres accentuées seulement)"
+# http://repo.or.cz/w/ucwcs-xkb.git/blob_plain/HEAD:/README
+# http://www.ucw.cz/
#: ../rules/base.xml.in.h:167
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Tatar de Crimée (Q Dobruca-1)"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Tchèque (Dvorak US avec support UCW CZ)"
#: ../rules/base.xml.in.h:168
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Tatar de Crimée (Q Dobruca-2)"
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Tchèque (avec la touche &lt;\\|&gt;)"
#: ../rules/base.xml.in.h:169
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Tatar de Crimée (Alt-Q turc)"
+msgid "Czech (qwerty)"
+msgstr "Tchèque (qwerty)"
#: ../rules/base.xml.in.h:170
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Tatar de Crimée (F turc)"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Tchèque (qwerty, barre oblique inverse étendue)"
#: ../rules/base.xml.in.h:171
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Tatar de Crimée (Q turc)"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:172
-msgid "Croatia"
-msgstr "Croatie"
+msgid "Danish"
+msgstr "Danois"
#: ../rules/base.xml.in.h:173
-msgid "Ctrl key position"
-msgstr "Position de la touche Ctrl"
+msgid "Danish (Dvorak)"
+msgstr "Danois (Dvorak)"
#: ../rules/base.xml.in.h:174
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Maj."
+msgid "Danish (Mac)"
+msgstr "Danois (Mac)"
#: ../rules/base.xml.in.h:175
-msgid "Cyrillic"
-msgstr "Cyrillique"
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Danois (Mac, sans touche morte)"
#: ../rules/base.xml.in.h:176
-msgid "Cyrillic with guillemets"
-msgstr "Cyrillique avec guillemets"
+msgid "Danish (eliminate dead keys)"
+msgstr "Danois (sans touche morte)"
#: ../rules/base.xml.in.h:177
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Cyrillique, Z et ZHE permutés"
+msgid "Default numeric keypad keys"
+msgstr "Touches du pavé numérique par défaut"
#: ../rules/base.xml.in.h:178
-msgid "Cze"
-msgstr "Cze"
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:179
-msgid "Czechia"
-msgstr "République tchèque"
+msgid "Dell 101-key PC"
+msgstr "Dell PC 101 touches"
#: ../rules/base.xml.in.h:180
-msgid "DOS"
-msgstr "DOS"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Dell portable Inspiron 6xxx/8xxx"
#: ../rules/base.xml.in.h:181
-msgid "DRC"
-msgstr "RDC"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Dell portable Precision série M"
#: ../rules/base.xml.in.h:182
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "Dell Latitude series laptop"
+msgstr "Dell portable de la série Latitude"
#: ../rules/base.xml.in.h:183
-msgid "Dan"
-msgstr "Dan"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:184
-msgid "Dead acute"
-msgstr "Touche morte d'accent aigu"
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
#: ../rules/base.xml.in.h:185
-msgid "Dead grave acute"
-msgstr "Touche morte d'accent grave"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:186
-msgid "Default numeric keypad keys"
-msgstr "Touches du pavé numérique par défaut"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell clavier multimédia USB"
#: ../rules/base.xml.in.h:187
-msgid "Dell"
-msgstr "Dell"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa clavier sans fil"
#: ../rules/base.xml.in.h:188
-msgid "Dell 101-key PC"
-msgstr "Dell PC 101 touches"
+msgid "Dhivehi"
+msgstr "Divehi"
#: ../rules/base.xml.in.h:189
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Portable Dell Inspiron 6xxx/8xxx"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond séries 9801 / 9802"
#: ../rules/base.xml.in.h:190
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Portable Dell Precision série M"
+msgid "Dutch"
+msgstr "Néerlandais"
#: ../rules/base.xml.in.h:191
-msgid "Dell Latitude series laptop"
-msgstr "Portable Latitude Dell"
+msgid "Dutch (Mac)"
+msgstr "Néerlandais (Mac)"
#: ../rules/base.xml.in.h:192
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "Dutch (Sun dead keys)"
+msgstr "Néerlandais (touches mortes Sun)"
#: ../rules/base.xml.in.h:193
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
+msgid "Dutch (standard)"
+msgstr "Néerlandais (standard)"
#: ../rules/base.xml.in.h:194
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "Dzongkha"
+msgstr "Dzongkha"
#: ../rules/base.xml.in.h:195
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Clavier multimédia USB Dell"
+msgid "Enable extra typographic characters"
+msgstr "Active des caractères typographiques supplémentaires"
#: ../rules/base.xml.in.h:196
-msgid "Denmark"
-msgstr "Danemark"
+msgid "English (Canada)"
+msgstr "Anglais (Canada)"
+# http://colemak.com/
#: ../rules/base.xml.in.h:197
-msgid "Deu"
-msgstr "Deu"
+msgid "English (Colemak)"
+msgstr "Anglais (Colemak)"
+# https://secure.wikimedia.org/wikipedia/en/wiki/Dvorak_Simplified_Keyboard
#: ../rules/base.xml.in.h:198
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa Desktop sans fil"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Anglais (Dvorak, variante internationale, sans touche morte)"
+# https://secure.wikimedia.org/wikipedia/en/wiki/Dvorak_Simplified_Keyboard
#: ../rules/base.xml.in.h:199
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond 9801 / 9802 series"
+msgid "English (Dvorak international with dead keys)"
+msgstr "Anglais (Dvorak, international avec touche morte)"
+# https://secure.wikimedia.org/wikipedia/en/wiki/Dvorak_Simplified_Keyboard
#: ../rules/base.xml.in.h:200
-msgid "Dvorak"
-msgstr "Dvorak"
+msgid "English (Dvorak)"
+msgstr "Anglais (Dvorak)"
#: ../rules/base.xml.in.h:201
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvorak (ponctuation britannique)"
+msgid "English (Ghana)"
+msgstr "Anglais (Ghana)"
+# http://www.gillbt.org/
#: ../rules/base.xml.in.h:202
-msgid "Dvorak international"
-msgstr "Dvorak international"
+msgid "English (Ghana, GILLBT)"
+msgstr "Anglais (Ghana, GILLBT)"
#: ../rules/base.xml.in.h:203
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Dvorak, guillemets polonais sur la touche « 1 »"
+msgid "English (Ghana, multilingual)"
+msgstr "Anglais (Ghana, multilingue)"
#: ../rules/base.xml.in.h:204
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvorak, guillemets polonais sur la touche des guillemets"
+msgid "English (India, with RupeeSign)"
+msgstr "Anglais (Inde, avec le symbole Roupie)"
#: ../rules/base.xml.in.h:205
-msgid "E"
-msgstr "E"
+msgid "English (Macintosh)"
+msgstr "Anglais (Macintosh)"
#: ../rules/base.xml.in.h:206
-msgid "Eastern"
-msgstr "Orientale"
+msgid "English (Mali, USA Mac)"
+msgstr "Anglais (Mali, Mac USA)"
#: ../rules/base.xml.in.h:207
-msgid "Eliminate dead keys"
-msgstr "Éliminer les touches mortes"
+msgid "English (Mali, USA international)"
+msgstr "Anglais (Mali, USA international)"
#: ../rules/base.xml.in.h:208
-msgid "Enable extra typographic characters"
-msgstr "Active des caractères typographiques supplémentaires"
+msgid "English (Nigeria)"
+msgstr "Anglais (Nigeria)"
#: ../rules/base.xml.in.h:209
-msgid "English"
-msgstr "Anglais"
+msgid "English (South Africa)"
+msgstr "Anglais (Afrique du Sud)"
#: ../rules/base.xml.in.h:210
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
+msgid "English (UK)"
+msgstr "Anglais (Royaume-Uni)"
+# http://colemak.com/
#: ../rules/base.xml.in.h:211
-msgid "Enter on keypad"
-msgstr "Retour sur clavier numérique"
+msgid "English (UK, Colemak)"
+msgstr "Anglais (Royaume-Uni, Colemak)"
#: ../rules/base.xml.in.h:212
-msgid "Epo"
-msgstr "Epo"
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Anglais (Royaume-Uni, Dvorak, ponctuation britannique)"
#: ../rules/base.xml.in.h:213
-msgid "Ergonomic"
-msgstr "Ergonomique"
+msgid "English (UK, Dvorak)"
+msgstr "Anglais (Royaume-Uni, Dvorak)"
#: ../rules/base.xml.in.h:214
-msgid "Esp"
-msgstr "Esp"
+msgid "English (UK, Mac international)"
+msgstr "Anglais (Royaume-Uni, Mac international)"
#: ../rules/base.xml.in.h:215
-msgid "Esperanto"
-msgstr "Esperanto"
+msgid "English (UK, Mac)"
+msgstr "Anglais (Royaume-Uni, Mac)"
#: ../rules/base.xml.in.h:216
-msgid "Est"
-msgstr "Est"
+msgid "English (UK, extended, WinKeys)"
+msgstr "Anglais (Royaume-Uni, étendu, touche Windows)"
#: ../rules/base.xml.in.h:217
-msgid "Estonia"
-msgstr "Estonie"
+msgid "English (UK, international with dead keys)"
+msgstr "Anglais (Royaume-Uni, international, avec touches mortes)"
#: ../rules/base.xml.in.h:218
-msgid "Eth"
-msgstr "Eth"
+msgid "English (US)"
+msgstr "Anglais (USA)"
#: ../rules/base.xml.in.h:219
-msgid "Ethiopia"
-msgstr "Éthiopie"
+msgid "English (US, alternative international)"
+msgstr "Anglais (USA, variante internationale)"
#: ../rules/base.xml.in.h:220
-msgid "Evdev-managed keyboard"
-msgstr "Clavier piloté par evdev"
+msgid "English (US, international with dead keys)"
+msgstr "Anglais (USA, variante internationale, avec touches mortes)"
#: ../rules/base.xml.in.h:221
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "English (US, with euro on 5)"
+msgstr "Anglais (USA, avec l'Euro sur le 5)"
#: ../rules/base.xml.in.h:222
-msgid "Ewe"
-msgstr "Ewe"
+msgid "English (classic Dvorak)"
+msgstr "Anglais (Dvorak classique)"
#: ../rules/base.xml.in.h:223
-msgid "Extended"
-msgstr "Étendue"
+msgid "English (international AltGr dead keys)"
+msgstr "Anglais (international, AltGr, touches mortes)"
#: ../rules/base.xml.in.h:224
-msgid "Extended - Winkeys"
-msgstr "Étendue - Touches Logo"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Anglais (la touche multiplier/diviser bascule la disposition)"
#: ../rules/base.xml.in.h:225
-msgid "Extended Backslash"
-msgstr "Barre contre-oblique étendue"
+msgid "English (left handed Dvorak)"
+msgstr "Anglais (Dvorak pour gaucher)"
#: ../rules/base.xml.in.h:226
-msgid "F-letter (F) variant"
-msgstr "Variante (F)"
+msgid "English (programmer Dvorak)"
+msgstr "Anglais (Dvorak pour programmeur)"
#: ../rules/base.xml.in.h:227
-msgid "FL90"
-msgstr "FL90"
+msgid "English (right handed Dvorak)"
+msgstr "Anglais (Dvorak pour droitier)"
#: ../rules/base.xml.in.h:228
-msgid "Fao"
-msgstr "Fao"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:229
-msgid "Faroe Islands"
-msgstr "Féroé, Îles"
+msgid "Enter on keypad"
+msgstr "Entrée sur le pavé numérique"
#: ../rules/base.xml.in.h:230
-msgid "Fin"
-msgstr "Fin"
+msgid "Esperanto"
+msgstr "Esperanto"
#: ../rules/base.xml.in.h:231
-msgid "Finland"
-msgstr "Finlande"
+#, fuzzy
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "(Obsolète) Point-virgule et guillemets droits déplacés"
+
+#: ../rules/base.xml.in.h:232
+#, fuzzy
+msgid "Estonian"
+msgstr "Estonie"
+
+#: ../rules/base.xml.in.h:233
+msgid "Estonian (Dvorak)"
+msgstr ""
-#. This assumes the KP_ abstract symbols are actually useful for some apps
-#. The description needs to be rewritten
#: ../rules/base.xml.in.h:234
-msgid "Four-level key with abstract separators"
-msgstr "Touches à quatre niveaux avec séparateurs abstraits"
+#, fuzzy
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Clavier US avec lettres estoniennes"
#: ../rules/base.xml.in.h:235
-msgid "Four-level key with comma"
-msgstr "Touches à quatre niveaux avec virgule"
+#, fuzzy
+msgid "Estonian (eliminate dead keys)"
+msgstr "Éliminer les touches mortes"
#: ../rules/base.xml.in.h:236
-msgid "Four-level key with dot"
-msgstr "Touches à quatre niveaux avec point"
+msgid "Euro on 2"
+msgstr "Euro sur le 2"
#: ../rules/base.xml.in.h:237
-msgid "Four-level key with dot, latin-9 restriction"
-msgstr "Touches à quatre niveaux avec point, avec restrinction Latin-9"
+msgid "Euro on 4"
+msgstr "Euro sur le 4"
#: ../rules/base.xml.in.h:238
-msgid "Four-level key with momayyez"
-msgstr "Touches à quatre niveaux avec momayyez"
+msgid "Euro on 5"
+msgstr "Euro sur le 5"
#: ../rules/base.xml.in.h:239
-msgid "Fra"
-msgstr "Fra"
+msgid "Euro on E"
+msgstr "Euro sur le E"
#: ../rules/base.xml.in.h:240
-msgid "France"
-msgstr "France"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:241
-msgid "French"
-msgstr "Français"
+msgid "Ewe"
+msgstr "Ewe"
#: ../rules/base.xml.in.h:242
-msgid "French (Macintosh)"
-msgstr "Français (Apple-Macintosh)"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:243
-msgid "French (legacy)"
-msgstr "Français (obsolète)"
+#, fuzzy
+msgid "Faroese"
+msgstr "Féroé, Îles"
#: ../rules/base.xml.in.h:244
-msgid "French Dvorak"
-msgstr "Dvorak français"
+#, fuzzy
+msgid "Faroese (eliminate dead keys)"
+msgstr "Français, sans touches mortes"
#: ../rules/base.xml.in.h:245
-msgid "French, Sun dead keys"
-msgstr "Français, touches mortes Sun"
+msgid "Filipino"
+msgstr ""
#: ../rules/base.xml.in.h:246
-msgid "French, eliminate dead keys"
-msgstr "Français, sans touches mortes"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr ""
#: ../rules/base.xml.in.h:247
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Portable Fujitsu-Siemens Computers AMILO"
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr ""
#: ../rules/base.xml.in.h:248
-msgid "Fula"
-msgstr "Peul"
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr ""
#: ../rules/base.xml.in.h:249
-msgid "GBr"
-msgstr "GBr"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr ""
#: ../rules/base.xml.in.h:250
-msgid "Ga"
-msgstr "Ga"
+msgid "Filipino (Colemak Baybayin)"
+msgstr ""
#: ../rules/base.xml.in.h:251
-msgid "Generic 101-key PC"
-msgstr "PC générique 101 touches"
+msgid "Filipino (Colemak Latin)"
+msgstr ""
#: ../rules/base.xml.in.h:252
-msgid "Generic 102-key (Intl) PC"
-msgstr "PC générique 102 touches (intl)"
+msgid "Filipino (Dvorak Latin)"
+msgstr ""
#: ../rules/base.xml.in.h:253
-msgid "Generic 104-key PC"
-msgstr "PC générique 104 touches"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr ""
#: ../rules/base.xml.in.h:254
-msgid "Generic 105-key (Intl) PC"
-msgstr "PC générique 105 touches (intl)"
+msgid "Finnish"
+msgstr ""
#: ../rules/base.xml.in.h:255
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "Finnish (Mac)"
+msgstr ""
#: ../rules/base.xml.in.h:256
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM KWD-910"
+msgid "Finnish (classic)"
+msgstr ""
#: ../rules/base.xml.in.h:257
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+#, fuzzy
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Français, sans touches mortes"
#: ../rules/base.xml.in.h:258
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
-
-#: ../rules/base.xml.in.h:259
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
-
-#: ../rules/base.xml.in.h:260
-msgid "Geo"
-msgstr "Geo"
+#, fuzzy
+msgid "Finnish (northern Saami)"
+msgstr "Sami du Nord"
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
#: ../rules/base.xml.in.h:261
-msgid "Georgia"
-msgstr "Géorgie"
+msgid "Four-level key with abstract separators"
+msgstr "Touches à quatre niveaux avec séparateurs abstraits"
#: ../rules/base.xml.in.h:262
-msgid "Georgian"
-msgstr "Géorgien"
+msgid "Four-level key with comma"
+msgstr "Touches à quatre niveaux avec virgule"
#: ../rules/base.xml.in.h:263
-msgid "Georgian AZERTY Tskapo"
-msgstr "AZERTY géorgien Tskapo"
+msgid "Four-level key with dot"
+msgstr "Touches à quatre niveaux avec point"
#: ../rules/base.xml.in.h:264
-msgid "German (Macintosh)"
-msgstr "Allemand (Apple-Macintosh)"
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr "Touches à quatre niveaux avec point, avec restrinction Latin-9"
#: ../rules/base.xml.in.h:265
-msgid "German, Sun dead keys"
-msgstr "Allemand, touches mortes Sun"
+msgid "Four-level key with momayyez"
+msgstr "Touches à quatre niveaux avec momayyez"
#: ../rules/base.xml.in.h:266
-msgid "German, eliminate dead keys"
-msgstr "Allemand, sans touches mortes"
+msgid "French"
+msgstr "Français"
+# http://bepo.fr
#: ../rules/base.xml.in.h:267
-msgid "Germany"
-msgstr "Allemagne"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Français (Bépo, ergonomique, façon Dvorak)"
+# http://bepo.fr
#: ../rules/base.xml.in.h:268
-msgid "Gha"
-msgstr "Gha"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Français (Bépo, ergonomique, façon Dvorak, latin-9 uniquement)"
#: ../rules/base.xml.in.h:269
-msgid "Ghana"
-msgstr "Ghana"
+msgid "French (Breton)"
+msgstr "Français (Breton)"
#: ../rules/base.xml.in.h:270
-msgid "Gre"
-msgstr "Gre"
+msgid "French (Canada, Dvorak)"
+msgstr "Français (Canada, Dvorak)"
#: ../rules/base.xml.in.h:271
-msgid "Greece"
-msgstr "Grèce"
+msgid "French (Canada, legacy)"
+msgstr "Français (Canada, obsolète)"
#: ../rules/base.xml.in.h:272
-msgid "Group toggle on multiply/divide key"
-msgstr "Les touches Multiplier/Diviser basculent d'un groupe à l'autre"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Français (République démocratique du Congo)"
#: ../rules/base.xml.in.h:273
-msgid "Gui"
-msgstr "Gui"
+msgid "French (Dvorak)"
+msgstr "Français (Dvorak)"
#: ../rules/base.xml.in.h:274
-msgid "Guinea"
-msgstr "Guinée"
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Français (azerty géorgien Tskapo)"
#: ../rules/base.xml.in.h:275
-msgid "Gujarati"
-msgstr "Gujarati"
+msgid "French (Guinea)"
+msgstr "Français (Guinée)"
#: ../rules/base.xml.in.h:276
-msgid "Gurmukhi"
-msgstr "Gurmukhi"
+msgid "French (Mac)"
+msgstr "Français (Mac)"
#: ../rules/base.xml.in.h:277
-msgid "Gurmukhi Jhelum"
-msgstr "Gurmukhi Jhelum"
+msgid "French (Mali, alternative)"
+msgstr "Français (Mali, variante)"
#: ../rules/base.xml.in.h:278
-msgid "Gyration"
-msgstr "Gyration"
+msgid "French (Morocco)"
+msgstr "Français (Maroc)"
#: ../rules/base.xml.in.h:279
-msgid "Happy Hacking Keyboard"
-msgstr "Clavier Happy Hacking"
+msgid "French (Occitan)"
+msgstr "Français (Occitan)"
#: ../rules/base.xml.in.h:280
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Clavier Happy Hacking pour Mac"
+msgid "French (Sun dead keys)"
+msgstr "Français (touches mortes Sun)"
#: ../rules/base.xml.in.h:281
-msgid "Hausa"
-msgstr "Haoussa"
+msgid "French (Switzerland)"
+msgstr "Français (Suisse)"
#: ../rules/base.xml.in.h:282
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internet"
+msgid "French (Switzerland, Mac)"
+msgstr "Français (Suisse, Mac)"
#: ../rules/base.xml.in.h:283
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 Notebook"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Français (Suisse, touches mortes Sun)"
#: ../rules/base.xml.in.h:284
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Français (Suisse, sans touche morte)"
#: ../rules/base.xml.in.h:285
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "French (alternative)"
+msgstr "Français (variante)"
#: ../rules/base.xml.in.h:286
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+msgid "French (alternative, Sun dead keys)"
+msgstr "Français (variante, touches mortes Sun)"
#: ../rules/base.xml.in.h:287
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Français (variante, sans touches mortes)"
#: ../rules/base.xml.in.h:288
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "French (alternative, latin-9 only)"
+msgstr "Français (variante, latin-9 uniquement)"
#: ../rules/base.xml.in.h:289
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "French (eliminate dead keys)"
+msgstr "Français (sans touche morte)"
#: ../rules/base.xml.in.h:290
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "French (legacy alternative)"
+msgstr "Français (variante obsolète)"
#: ../rules/base.xml.in.h:291
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Français (variante obsolète, touches mortes Sun)"
#: ../rules/base.xml.in.h:292
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x, clavier multimedia"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Français (variante obsolète, sans touche morte)"
#: ../rules/base.xml.in.h:293
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Portable Fujitsu-Siemens Computers AMILO"
#: ../rules/base.xml.in.h:294
-msgid "Hexadecimal"
-msgstr "Hexadécimal"
+msgid "Fula"
+msgstr "Peul"
#: ../rules/base.xml.in.h:295
-msgid "Hindi Bolnagri"
-msgstr "Hindi Bolnagri"
+msgid "GBr"
+msgstr "GBr"
#: ../rules/base.xml.in.h:296
-msgid "Hindi Wx"
-msgstr "Hindi Wx"
+msgid "Ga"
+msgstr "Ga"
#: ../rules/base.xml.in.h:297
-msgid "Homophonic"
-msgstr "Homophone"
+msgid "Generic 101-key PC"
+msgstr "PC générique 101 touches"
#: ../rules/base.xml.in.h:298
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "Generic 102-key (Intl) PC"
+msgstr "PC générique 102 touches (intl)"
#: ../rules/base.xml.in.h:299
-msgid "Hrv"
-msgstr "Hrv"
+msgid "Generic 104-key PC"
+msgstr "PC générique 104 touches"
#: ../rules/base.xml.in.h:300
-msgid "Hun"
-msgstr "Hun"
+msgid "Generic 105-key (Intl) PC"
+msgstr "PC générique 105 touches (intl)"
#: ../rules/base.xml.in.h:301
-msgid "Hungary"
-msgstr "Hongrie"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:302
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper est obtenu avec n'importe quelle touche Logo"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM KWD-910"
#: ../rules/base.xml.in.h:303
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:304
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
#: ../rules/base.xml.in.h:305
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:306
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "Georgian"
+msgstr "Géorgien"
#: ../rules/base.xml.in.h:307
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+#, fuzzy
+msgid "Georgian (MESS)"
+msgstr "Géorgien"
#: ../rules/base.xml.in.h:308
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
+msgid "Georgian (Ossetian)"
+msgstr ""
#: ../rules/base.xml.in.h:309
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "Georgian (ergonomic)"
+msgstr ""
#: ../rules/base.xml.in.h:310
-msgid "ISO Alternate"
-msgstr "Autre ISO"
+#, fuzzy
+msgid "German"
+msgstr "Allemagne"
#: ../rules/base.xml.in.h:311
-msgid "Iceland"
-msgstr "Islande"
+msgid "German (Austria)"
+msgstr ""
#: ../rules/base.xml.in.h:312
-msgid "Igbo"
-msgstr "Igbo"
+#, fuzzy
+msgid "German (Austria, Mac)"
+msgstr "Allemand (Apple-Macintosh)"
#: ../rules/base.xml.in.h:313
-msgid "Include dead tilde"
-msgstr "Inclut le tilde"
+#, fuzzy
+msgid "German (Austria, Sun dead keys)"
+msgstr "Allemand, touches mortes Sun"
#: ../rules/base.xml.in.h:314
-msgid "Ind"
-msgstr "Ind"
+#, fuzzy
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Allemand, sans touches mortes"
#: ../rules/base.xml.in.h:315
-msgid "India"
-msgstr "Inde"
+#, fuzzy
+msgid "German (Dvorak)"
+msgstr "Dvorak français"
#: ../rules/base.xml.in.h:316
-msgid "International (AltGr dead keys)"
-msgstr "International (AltCar et touches mortes)"
+#, fuzzy
+msgid "German (Mac)"
+msgstr "Allemand (Apple-Macintosh)"
#: ../rules/base.xml.in.h:317
-msgid "International (with dead keys)"
-msgstr "International (avec touches mortes)"
+#, fuzzy
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Allemand, sans touches mortes"
#: ../rules/base.xml.in.h:318
-msgid "Inuktitut"
-msgstr "Inuktitut"
+#, fuzzy
+msgid "German (Neo 2)"
+msgstr "Allemand (Apple-Macintosh)"
#: ../rules/base.xml.in.h:319
-msgid "Iran"
-msgstr "Iran"
+#, fuzzy
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Clavier roumain avec lettres allemandes"
#: ../rules/base.xml.in.h:320
-msgid "Iraq"
-msgstr "Irak"
+#, fuzzy
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Clavier roumain avec lettres allemandes, sans touches mortes"
#: ../rules/base.xml.in.h:321
-msgid "Ireland"
-msgstr "Irlande"
+#, fuzzy
+msgid "German (Sun dead keys)"
+msgstr "Allemand, touches mortes Sun"
#: ../rules/base.xml.in.h:322
-msgid "Irl"
-msgstr "Irl"
+#, fuzzy
+msgid "German (Switzerland, Mac)"
+msgstr "Suisse"
#: ../rules/base.xml.in.h:323
-msgid "Irn"
-msgstr "Irn"
+#, fuzzy
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Allemand, touches mortes Sun"
#: ../rules/base.xml.in.h:324
-msgid "Irq"
-msgstr "Irq"
+#, fuzzy
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Allemand, sans touches mortes"
#: ../rules/base.xml.in.h:325
-msgid "Isl"
-msgstr "Isl"
+#, fuzzy
+msgid "German (dead acute)"
+msgstr "Allemand, touches mortes Sun"
#: ../rules/base.xml.in.h:326
-msgid "Isr"
-msgstr "Isr"
+#, fuzzy
+msgid "German (dead grave acute)"
+msgstr "Touche morte d'accent grave"
#: ../rules/base.xml.in.h:327
-msgid "Israel"
-msgstr "Israël"
+#, fuzzy
+msgid "German (eliminate dead keys)"
+msgstr "Allemand, sans touches mortes"
#: ../rules/base.xml.in.h:328
-msgid "Ita"
-msgstr "Ita"
+#, fuzzy
+msgid "German (lower Sorbian qwertz)"
+msgstr "Serbe minuscule (qwertz)"
#: ../rules/base.xml.in.h:329
-msgid "Italy"
-msgstr "Italie"
+#, fuzzy
+msgid "German (lower Sorbian)"
+msgstr "Serbe minuscule"
#: ../rules/base.xml.in.h:330
-msgid "Japan"
-msgstr "Japon"
+#, fuzzy
+msgid "German (qwerty)"
+msgstr "Latin qwerty"
#: ../rules/base.xml.in.h:331
-msgid "Japan (PC-98xx Series)"
-msgstr "PC-98xx japonais"
+#, fuzzy
+msgid "Greek"
+msgstr "Grèce"
#: ../rules/base.xml.in.h:332
-msgid "Japanese keyboard options"
-msgstr "Options de clavier japonais"
+#, fuzzy
+msgid "Greek (eliminate dead keys)"
+msgstr "Français, sans touches mortes"
#: ../rules/base.xml.in.h:333
-msgid "Jpn"
-msgstr "Jpn"
+msgid "Greek (extended)"
+msgstr ""
#: ../rules/base.xml.in.h:334
-msgid "Kalmyk"
-msgstr "Kalmyk"
+#, fuzzy
+msgid "Greek (polytonic)"
+msgstr "Polytonique"
#: ../rules/base.xml.in.h:335
-msgid "Kana"
-msgstr "Kana"
+msgid "Greek (simple)"
+msgstr ""
#: ../rules/base.xml.in.h:336
-msgid "Kana Lock key is locking"
-msgstr "La touche de verrouillage Kana agit comme touche de verrouillage"
+msgid "Gujarati"
+msgstr "Gujarati"
#: ../rules/base.xml.in.h:337
-msgid "Kannada"
-msgstr "Kannada"
+msgid "Gyration"
+msgstr "Gyration"
#: ../rules/base.xml.in.h:338
-msgid "Kashubian"
-msgstr "Kachoube"
+msgid "HTC Dream"
+msgstr "HTC Dream"
#: ../rules/base.xml.in.h:339
-msgid "Kaz"
-msgstr "Kaz"
+msgid "Happy Hacking Keyboard"
+msgstr "Clavier Happy Hacking"
#: ../rules/base.xml.in.h:340
-msgid "Kazakh with Russian"
-msgstr "Kazakh avec russe"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Clavier Happy Hacking pour Mac"
#: ../rules/base.xml.in.h:341
-msgid "Kazakhstan"
-msgstr "Kazakhstan"
+msgid "Hausa"
+msgstr "Haoussa"
#: ../rules/base.xml.in.h:342
-msgid "Key sequence to kill the X server"
-msgstr "Séquence de touches pour fermer le serveur X"
+msgid "Hebrew"
+msgstr ""
#: ../rules/base.xml.in.h:343
-msgid "Key to choose 3rd level"
-msgstr "Touche sélectionnant le 3e niveau"
+#, fuzzy
+msgid "Hebrew (Phonetic)"
+msgstr "Nouveau phonétique"
#: ../rules/base.xml.in.h:344
-msgid "Key(s) to change layout"
-msgstr "Touche(s) changeant de disposition."
+#, fuzzy
+msgid "Hebrew (Tiro)"
+msgstr "Hébreu biblique (Tiro)"
#: ../rules/base.xml.in.h:345
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "Hebrew (lyx)"
+msgstr ""
#: ../rules/base.xml.in.h:346
-msgid "Kgz"
-msgstr "Kgz"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internet"
#: ../rules/base.xml.in.h:347
-msgid "Khm"
-msgstr "Khm"
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
#: ../rules/base.xml.in.h:348
-msgid "Komi"
-msgstr "Komi"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:349
-msgid "Kor"
-msgstr "Kor"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:350
-msgid "Korea, Republic of"
-msgstr "Corée, République de"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:351
-msgid "Ktunaxa"
-msgstr "Ktunaxa"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:352
-msgid "Kurdish, (F)"
-msgstr "Kurde, (F)"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:353
-msgid "Kurdish, Arabic-Latin"
-msgstr "Kurde, Arabe-latin"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:354
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Kurde, Latin Alt-Q"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:355
-msgid "Kurdish, Latin Q"
-msgstr "Kurde, Latin Q"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:356
-msgid "Kyrgyzstan"
-msgstr "Kirghizistan"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x, clavier multimedia"
#: ../rules/base.xml.in.h:357
-msgid "LAm"
-msgstr "LAm"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:358
-msgid "LEKP"
-msgstr "LEKP"
+msgid "Hexadecimal"
+msgstr "Hexadécimal"
#: ../rules/base.xml.in.h:359
-msgid "LEKPa"
-msgstr "LEKPa"
+#, fuzzy
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi Bolnagri"
#: ../rules/base.xml.in.h:360
-msgid "Lao"
-msgstr "Lao"
+#, fuzzy
+msgid "Hindi (Wx)"
+msgstr "Hindi Wx"
#: ../rules/base.xml.in.h:361
-msgid "Laos"
-msgstr "Laos"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
#: ../rules/base.xml.in.h:362
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Compaq portable (p.e. Armada)"
+msgid "Htc Dream phone"
+msgstr "Htc Dream"
#: ../rules/base.xml.in.h:363
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Compaq portable Internet (p.e. Presario)"
+#, fuzzy
+msgid "Hungarian"
+msgstr "Hongrie"
#: ../rules/base.xml.in.h:364
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "eMachines m68xx"
+#, fuzzy
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "101/qwerty/virgule/touches mortes"
#: ../rules/base.xml.in.h:365
-msgid "Latin"
-msgstr "Latin"
+#, fuzzy
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "101/qwerty/virgule/sans touches mortes"
#: ../rules/base.xml.in.h:366
-msgid "Latin American"
-msgstr "Amérique latine"
+#, fuzzy
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "101/qwerty/point/touches mortes"
#: ../rules/base.xml.in.h:367
-msgid "Latin Unicode"
-msgstr "Latin Unicode"
+#, fuzzy
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "101/qwerty/point/sans touches mortes"
#: ../rules/base.xml.in.h:368
-msgid "Latin Unicode qwerty"
-msgstr "Latin Unicode qwerty"
+#, fuzzy
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "101/qwertz/virgule/touches mortes"
#: ../rules/base.xml.in.h:369
-msgid "Latin qwerty"
-msgstr "Latin qwerty"
+#, fuzzy
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "101/qwertz/virgule/sans touches mortes"
#: ../rules/base.xml.in.h:370
-msgid "Latin unicode"
-msgstr "Unicode Latin"
+#, fuzzy
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "101/qwertz/point/touches mortes"
#: ../rules/base.xml.in.h:371
-msgid "Latin unicode qwerty"
-msgstr "Unicode Latin QWERTY"
+#, fuzzy
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "101/qwertz/point/sans touches mortes"
#: ../rules/base.xml.in.h:372
-msgid "Latin with guillemets"
-msgstr "Latin avec guillemets"
+#, fuzzy
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "102/qwerty/virgule/touches mortes"
#: ../rules/base.xml.in.h:373
-msgid "Latvia"
-msgstr "Lettonie"
+#, fuzzy
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "102/qwerty/virgule/sans touches mortes"
#: ../rules/base.xml.in.h:374
-msgid "Lav"
-msgstr "Lav"
+#, fuzzy
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "102/qwerty/point/touches mortes"
#: ../rules/base.xml.in.h:375
-msgid "Left Alt"
-msgstr "Alt gauche"
+#, fuzzy
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "102/qwerty/point/sans touches mortes"
#: ../rules/base.xml.in.h:376
-msgid "Left Alt (while pressed)"
-msgstr "Alt de gauche (lorsque pressée)"
+#, fuzzy
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "102/qwertz/virgule/touches mortes"
#: ../rules/base.xml.in.h:377
-msgid "Left Alt is swapped with Left Win"
-msgstr "La touche Alt de gauche est échangée avec la touche Logo de gauche"
+#, fuzzy
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "102/qwertz/virgule/sans touches mortes"
#: ../rules/base.xml.in.h:378
-msgid "Left Ctrl"
-msgstr "Ctrl gauche"
+#, fuzzy
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "102/qwertz/point/touches mortes"
#: ../rules/base.xml.in.h:379
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Ctrl gauche (première disposition), Ctrl droi (dernière disposition)"
+#, fuzzy
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "102/qwertz/point/sans touches mortes"
#: ../rules/base.xml.in.h:380
-msgid "Left Ctrl+Left Shift"
-msgstr "Ctrl gauche+Maj. gauche"
+#, fuzzy
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Allemand, sans touches mortes"
#: ../rules/base.xml.in.h:381
-msgid "Left Shift"
-msgstr "Maj. gauche"
+#, fuzzy
+msgid "Hungarian (qwerty)"
+msgstr "Latin qwerty"
#: ../rules/base.xml.in.h:382
-msgid "Left Win"
-msgstr "Touche Logo gauche"
+msgid "Hungarian (standard)"
+msgstr ""
#: ../rules/base.xml.in.h:383
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Touche Logo de gauche (première disposition), touche Logo de droite (dernière disposition)"
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper est obtenu avec n'importe quelle touche Logo"
#: ../rules/base.xml.in.h:384
-msgid "Left Win (while pressed)"
-msgstr "Logo de gauche (lorsque pressée)"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:385
-msgid "Left hand"
-msgstr "Main gauche"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:386
-msgid "Left handed Dvorak"
-msgstr "Dvorak pour gaucher"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:387
-msgid "Legacy"
-msgstr "Obsolète"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:388
-msgid "Legacy Wang 724"
-msgstr "Clavier Wang 724 obsolète"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
+
+#: ../rules/base.xml.in.h:389
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:390
-msgid "Legacy key with comma"
-msgstr "Touche obsolète avec virgule"
+#, fuzzy
+msgid "Icelandic"
+msgstr "Islande"
#: ../rules/base.xml.in.h:391
-msgid "Legacy key with dot"
-msgstr "Touche obsolète avec point"
+#, fuzzy
+msgid "Icelandic (Dvorak)"
+msgstr "Dvorak classique"
#: ../rules/base.xml.in.h:392
-msgid "Less-than/Greater-than"
-msgstr "Plus petit que/Plus grand que"
+#, fuzzy
+msgid "Icelandic (Mac)"
+msgstr "Islande"
#: ../rules/base.xml.in.h:393
-msgid "Lithuania"
-msgstr "Lituanie"
+#, fuzzy
+msgid "Icelandic (Sun dead keys)"
+msgstr "Français, touches mortes Sun"
#: ../rules/base.xml.in.h:394
-msgid "Logitech Access Keyboard"
-msgstr "Clavier Logitech Access"
+#, fuzzy
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Français, sans touches mortes"
#: ../rules/base.xml.in.h:395
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
+msgid "Igbo"
+msgstr "Igbo"
#: ../rules/base.xml.in.h:396
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (autre option)"
+#, fuzzy
+msgid "Indian"
+msgstr "Inde"
#: ../rules/base.xml.in.h:397
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
+msgid "Inuktitut"
+msgstr "Inuktitut"
#: ../rules/base.xml.in.h:398
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
+#, fuzzy
+msgid "Iraqi"
+msgstr "Irak"
#: ../rules/base.xml.in.h:399
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
+msgid "Irish"
+msgstr ""
#: ../rules/base.xml.in.h:400
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
+#, fuzzy
+msgid "Irish (CloGaelach)"
+msgstr "CloGaelach"
#: ../rules/base.xml.in.h:401
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (option alt 2)"
+#, fuzzy
+msgid "Irish (Ogham IS434)"
+msgstr "Ogham IS434"
#: ../rules/base.xml.in.h:402
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
+msgid "Irish (Ogham)"
+msgstr ""
#: ../rules/base.xml.in.h:403
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
+#, fuzzy
+msgid "Irish (UnicodeExpert)"
+msgstr "UnicodeExpert"
#: ../rules/base.xml.in.h:404
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Touches supplémentaires pour Logitech G15 via le démon G15"
+#, fuzzy
+msgid "Italian"
+msgstr "Italie"
#: ../rules/base.xml.in.h:405
-msgid "Logitech Generic Keyboard"
-msgstr "Clavier Logitech générique"
+#, fuzzy
+msgid "Italian (Georgian)"
+msgstr "Géorgien"
#: ../rules/base.xml.in.h:406
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Clavier Logitech Internet 350"
+msgid "Italian (Mac)"
+msgstr ""
#: ../rules/base.xml.in.h:407
-msgid "Logitech Internet Keyboard"
-msgstr "Clavier Logitech Internet"
+#, fuzzy
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Clavier US avec lettres italiennes"
#: ../rules/base.xml.in.h:408
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Clavier Logitech Internet Navigator"
+#, fuzzy
+msgid "Italian (eliminate dead keys)"
+msgstr "Allemand, sans touches mortes"
#: ../rules/base.xml.in.h:409
-msgid "Logitech Media Elite Keyboard"
-msgstr "Clavier Logitech Media Elite"
+#, fuzzy
+msgid "Japanese"
+msgstr "Japon"
#: ../rules/base.xml.in.h:410
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Clavier Logitech sans-fil Ultra-X Media"
+msgid "Japanese (Kana 86)"
+msgstr ""
#: ../rules/base.xml.in.h:411
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Clavier Logitech Ultra-X"
+msgid "Japanese (Kana)"
+msgstr ""
#: ../rules/base.xml.in.h:412
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Clavier Logitech diNovo Edge"
+#, fuzzy
+msgid "Japanese (Mac)"
+msgstr "Japonais 106 touches"
#: ../rules/base.xml.in.h:413
-msgid "Logitech diNovo Keyboard"
-msgstr "Clavier Logitech diNovo"
+#, fuzzy
+msgid "Japanese (OADG 109A)"
+msgstr "OADG 109A"
#: ../rules/base.xml.in.h:414
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+#, fuzzy
+msgid "Japanese (PC-98xx Series)"
+msgstr "PC-98xx japonais"
#: ../rules/base.xml.in.h:415
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless (modèle Y-RB6)"
+msgid "Japanese keyboard options"
+msgstr "Options de clavier japonais"
#: ../rules/base.xml.in.h:416
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech Internet Navigator iTouch SE"
+msgid "Kana Lock key is locking"
+msgstr "La touche de verrouillage Kana agit comme touche de verrouillage"
#: ../rules/base.xml.in.h:417
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech Internet Navigator iTouch SE (USB)"
+msgid "Kannada"
+msgstr "Kannada"
#: ../rules/base.xml.in.h:418
-msgid "Lower Sorbian"
-msgstr "Serbe minuscule"
+#, fuzzy
+msgid "Kazakh"
+msgstr "Kazakhstan"
#: ../rules/base.xml.in.h:419
-msgid "Lower Sorbian (qwertz)"
-msgstr "Serbe minuscule (qwertz)"
+#, fuzzy
+msgid "Kazakh (with Russian)"
+msgstr "Kazakh avec russe"
#: ../rules/base.xml.in.h:420
-msgid "Ltu"
-msgstr "Ltu"
+msgid "Key sequence to kill the X server"
+msgstr "Séquence de touches pour fermer le serveur X"
#: ../rules/base.xml.in.h:421
-msgid "MESS"
-msgstr "MESS"
+msgid "Key to choose 3rd level"
+msgstr "Touche sélectionnant le 3e niveau"
#: ../rules/base.xml.in.h:422
-msgid "MNE"
-msgstr "MNE"
+#, fuzzy
+msgid "Key to choose 5th level"
+msgstr "Touche sélectionnant le 3e niveau"
#: ../rules/base.xml.in.h:423
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Key(s) to change layout"
+msgstr "Touche(s) changeant de disposition."
#: ../rules/base.xml.in.h:424
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
#: ../rules/base.xml.in.h:425
-msgid "Macedonia"
-msgstr "Macédoine"
+#, fuzzy
+msgid "Khmer (Cambodian)"
+msgstr "Cambodge"
#: ../rules/base.xml.in.h:426
-msgid "Macintosh"
-msgstr "Apple-Macintosh"
+msgid "Kikuyu"
+msgstr ""
#: ../rules/base.xml.in.h:427
-msgid "Macintosh Old"
-msgstr "Apple-Macintosh ancien"
+msgid "Kinesis"
+msgstr ""
#: ../rules/base.xml.in.h:428
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, touches mortes Sun"
+#, fuzzy
+msgid "Korean"
+msgstr "Coréen 106 touches"
#: ../rules/base.xml.in.h:429
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, sans touches mortes"
+#, fuzzy
+msgid "Korean (101/104 key compatible)"
+msgstr "Compatible 101/104 touches"
#: ../rules/base.xml.in.h:430
-msgid "Make CapsLock an additional Backspace"
-msgstr "Faire de la touche Verr. maj. une touche Ret. arr. supplémentaire."
+#, fuzzy
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Kurde, Arabe-latin"
#: ../rules/base.xml.in.h:431
-msgid "Make CapsLock an additional Ctrl"
-msgstr "Faire de la touche Verr. maj. une touche Ctrl supplémentaire"
+#, fuzzy
+msgid "Kurdish (Iran, F)"
+msgstr "Kurde, (F)"
#: ../rules/base.xml.in.h:432
-msgid "Make CapsLock an additional ESC"
-msgstr "Faire de la touche Verr. maj. une touche Esc. supplémentaire."
+#, fuzzy
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Kurde, Latin Q"
#: ../rules/base.xml.in.h:433
-msgid "Make CapsLock an additional Hyper"
-msgstr "Faire de la touche Verr. maj. une touche Hyper supplémentaire"
+#, fuzzy
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Kurde, Latin Alt-Q"
#: ../rules/base.xml.in.h:434
-msgid "Make CapsLock an additional NumLock"
-msgstr "Faire de la touche Verr. maj. une touche Verr. num. supplémentaire"
+#, fuzzy
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Kurde, Arabe-latin"
#: ../rules/base.xml.in.h:435
-msgid "Make CapsLock an additional Super"
-msgstr "Faire de la touche Verr. maj. une touche Super supplémentaire."
+#, fuzzy
+msgid "Kurdish (Iraq, F)"
+msgstr "Kurde, (F)"
#: ../rules/base.xml.in.h:436
-msgid "Mal"
-msgstr "Mal"
+#, fuzzy
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Kurde, Latin Alt-Q"
#: ../rules/base.xml.in.h:437
-msgid "Malayalam"
-msgstr "Malayalam"
+#, fuzzy
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Kurde, Latin Q"
#: ../rules/base.xml.in.h:438
-msgid "Malayalam Lalitha"
-msgstr "Malayalam Lalitha"
+#, fuzzy
+msgid "Kurdish (Syria, F)"
+msgstr "Kurde, (F)"
#: ../rules/base.xml.in.h:439
-msgid "Maldives"
-msgstr "Maldives"
+#, fuzzy
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Kurde, Latin Alt-Q"
#: ../rules/base.xml.in.h:440
-msgid "Malta"
-msgstr "Malte"
+#, fuzzy
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Kurde, Latin Q"
#: ../rules/base.xml.in.h:441
-msgid "Maltese keyboard with US layout"
-msgstr "Clavier maltais avec disposition US"
+#, fuzzy
+msgid "Kurdish (Turkey, F)"
+msgstr "Kurde, (F)"
#: ../rules/base.xml.in.h:442
-msgid "Mao"
-msgstr "Mao"
+#, fuzzy
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Kurde, Latin Alt-Q"
#: ../rules/base.xml.in.h:443
-msgid "Maori"
-msgstr "Maori"
+#, fuzzy
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Kurde, Latin Q"
#: ../rules/base.xml.in.h:444
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "Kutenai"
+msgstr ""
#: ../rules/base.xml.in.h:445
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access"
+#, fuzzy
+msgid "Kyrgyz"
+msgstr "Kirghizistan"
#: ../rules/base.xml.in.h:446
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+#, fuzzy
+msgid "Kyrgyz (phonetic)"
+msgstr "Phonétique syriaque"
#: ../rules/base.xml.in.h:447
-msgid "Menu"
-msgstr "Menu"
+msgid "Lao"
+msgstr "Lao"
#: ../rules/base.xml.in.h:448
-msgid "Meta is mapped to Left Win"
-msgstr "Méta est obtenu avec la touche Logo de gauche"
+msgid "Lao (STEA proposed standard layout)"
+msgstr ""
#: ../rules/base.xml.in.h:449
-msgid "Meta is mapped to Win keys"
-msgstr "Méta est obtenu avec n'importe quelle touche Logo"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Compaq portable (p.e. Armada)"
#: ../rules/base.xml.in.h:450
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Clavier Microsoft Comfort Curve 2000"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Compaq portable Internet (p.e. Presario)"
#: ../rules/base.xml.in.h:451
-msgid "Microsoft Internet Keyboard"
-msgstr "Clavier Microsoft Internet"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "eMachines m68xx"
#: ../rules/base.xml.in.h:452
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Clavier Microsoft Internet Pro, suédois"
+#, fuzzy
+msgid "Latvian"
+msgstr "Lettonie"
#: ../rules/base.xml.in.h:453
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+#, fuzzy
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Variante apostrophe"
#: ../rules/base.xml.in.h:454
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Clavier Microsoft Natural Elite"
+#, fuzzy
+msgid "Latvian (F variant)"
+msgstr "Variante (F)"
#: ../rules/base.xml.in.h:455
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Clavier Microsoft Natural Pro / Clavier Microsoft Internet Pro"
+#, fuzzy
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Variante avec tilde"
#: ../rules/base.xml.in.h:456
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Clavier Microsoft Natural Pro OEM"
+msgid "Left Alt"
+msgstr "Alt gauche"
#: ../rules/base.xml.in.h:457
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Clavier Microsoft Natural Pro USB / Clavier Microsoft Internet Pro"
+msgid "Left Alt (while pressed)"
+msgstr "Alt de gauche (lorsque pressée)"
#: ../rules/base.xml.in.h:458
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Clavier Microsoft ergonomique naturel sans fil 7000"
+msgid "Left Alt is swapped with Left Win"
+msgstr "La touche Alt de gauche est échangée avec la touche Logo de gauche"
#: ../rules/base.xml.in.h:459
-msgid "Microsoft Office Keyboard"
-msgstr "Clavier Microsoft Office"
+msgid "Left Ctrl"
+msgstr "Ctrl gauche"
#: ../rules/base.xml.in.h:460
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Clavier Microsoft Multimedia sans fil 1.0A"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Ctrl gauche (première disposition), Ctrl droi (dernière disposition)"
#: ../rules/base.xml.in.h:461
-msgid "Miscellaneous compatibility options"
-msgstr "Diverses options de compatibilité"
+msgid "Left Ctrl+Left Shift"
+msgstr "Ctrl gauche+Maj. gauche"
#: ../rules/base.xml.in.h:462
-msgid "Mkd"
-msgstr "Mkd"
+msgid "Left Shift"
+msgstr "Maj. gauche"
#: ../rules/base.xml.in.h:463
-msgid "Mlt"
-msgstr "Mlt"
+msgid "Left Win"
+msgstr "Touche Logo gauche"
#: ../rules/base.xml.in.h:464
-msgid "Mmr"
-msgstr "Mmr"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Touche Logo de gauche (première disposition), touche Logo de droite (dernière disposition)"
#: ../rules/base.xml.in.h:465
-msgid "Mng"
-msgstr "Mng"
+msgid "Left Win (while pressed)"
+msgstr "Logo de gauche (lorsque pressée)"
#: ../rules/base.xml.in.h:466
-msgid "Mongolia"
-msgstr "Mongolie"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr ""
#: ../rules/base.xml.in.h:467
-msgid "Montenegro"
-msgstr "Monténégro"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
#: ../rules/base.xml.in.h:468
-msgid "Morocco"
-msgstr "Maroc"
+#, fuzzy
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Ctrl gauche (première disposition), Ctrl droi (dernière disposition)"
#: ../rules/base.xml.in.h:469
-msgid "Multilingual"
-msgstr "Multilingue"
+msgid "Legacy"
+msgstr "Obsolète"
#: ../rules/base.xml.in.h:470
-msgid "Multilingual, first part"
-msgstr "Multilingue, partie 1"
-
-#: ../rules/base.xml.in.h:471
-msgid "Multilingual, second part"
-msgstr "Multilingue, partie 2"
+msgid "Legacy Wang 724"
+msgstr "Clavier Wang 724 obsolète"
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:472
-msgid "Myanmar"
-msgstr "Myanmar"
+msgid "Legacy key with comma"
+msgstr "Touche obsolète avec virgule"
#: ../rules/base.xml.in.h:473
-msgid "NICOLA-F style Backspace"
-msgstr "Ret. Arr. de style NICOLA-F"
+msgid "Legacy key with dot"
+msgstr "Touche obsolète avec point"
#: ../rules/base.xml.in.h:474
-msgid "NLA"
-msgstr "NLA"
+#, fuzzy
+msgid "Lithuanian"
+msgstr "Lituanie"
#: ../rules/base.xml.in.h:475
-msgid "Nativo"
-msgstr "Nativo"
+#, fuzzy
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "IBM (LST 1205-92)"
#: ../rules/base.xml.in.h:476
-msgid "Nativo for Esperanto"
-msgstr "Native pour Espéranto"
+#, fuzzy
+msgid "Lithuanian (LEKP)"
+msgstr "Lituanie"
#: ../rules/base.xml.in.h:477
-msgid "Nativo for USA keyboards"
-msgstr "Nativo pour claviers américains"
+#, fuzzy
+msgid "Lithuanian (LEKPa)"
+msgstr "Lituanie"
#: ../rules/base.xml.in.h:478
-msgid "Neo 2"
-msgstr "Neo 2"
+#, fuzzy
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Clavier US avec lettres lituaniennes"
#: ../rules/base.xml.in.h:479
-msgid "Nep"
-msgstr "Nep"
+#, fuzzy
+msgid "Lithuanian (standard)"
+msgstr "Lituanie"
#: ../rules/base.xml.in.h:480
-msgid "Nepal"
-msgstr "Népal"
+msgid "Logitech Access Keyboard"
+msgstr "Clavier Logitech Access"
#: ../rules/base.xml.in.h:481
-msgid "Netherlands"
-msgstr "Pays-Bas"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
#: ../rules/base.xml.in.h:482
-msgid "New phonetic"
-msgstr "Nouveau phonétique"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (autre option)"
#: ../rules/base.xml.in.h:483
-msgid "Nig"
-msgstr "Nig"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
#: ../rules/base.xml.in.h:484
-msgid "Nigeria"
-msgstr "Nigeria"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:485
-msgid "Nld"
-msgstr "Nld"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
#: ../rules/base.xml.in.h:486
-msgid "Non-breakable space character at fourth level"
-msgstr "Espace insécable au 4e niveau."
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
#: ../rules/base.xml.in.h:487
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Espace insécable au 4e niveau et une espace fine insécable au 6e niveau"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (option alt 2)"
#: ../rules/base.xml.in.h:488
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Espace insécable au 4e niveau et une espace fine insécable au 6e niveau (par les touches Ctrl+Maj.)"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
#: ../rules/base.xml.in.h:489
-msgid "Non-breakable space character at second level"
-msgstr "Espace insécable au 2e niveau"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
#: ../rules/base.xml.in.h:490
-msgid "Non-breakable space character at third level"
-msgstr "Espace insécable au 3e niveau"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Touches supplémentaires pour Logitech G15 via le démon G15"
#: ../rules/base.xml.in.h:491
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Espace insécable au 3e niveau et rien au 4e niveau"
+msgid "Logitech Generic Keyboard"
+msgstr "Clavier Logitech générique"
#: ../rules/base.xml.in.h:492
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Espace insécable au 3e niveau et une espace fine insécable au 4e niveau"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Clavier Logitech Internet 350"
#: ../rules/base.xml.in.h:493
-msgid "Nor"
-msgstr "Nor"
+msgid "Logitech Internet Keyboard"
+msgstr "Clavier Logitech Internet"
#: ../rules/base.xml.in.h:494
-msgid "Northern Saami"
-msgstr "Sami du Nord"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Clavier Logitech Internet Navigator"
#: ../rules/base.xml.in.h:495
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Sami du Nord, sans touches mortes"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Clavier Logitech Media Elite"
#: ../rules/base.xml.in.h:496
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Clavier Logitech sans-fil Ultra-X Media"
#: ../rules/base.xml.in.h:497
-msgid "Norway"
-msgstr "Norvège"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Clavier Logitech Ultra-X"
#: ../rules/base.xml.in.h:498
-msgid "NumLock"
-msgstr "Verr. Num."
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Clavier Logitech diNovo Edge"
#: ../rules/base.xml.in.h:499
-msgid "Numeric keypad delete key behaviour"
-msgstr "Comportement de la touche de suppression du clavier numérique"
+msgid "Logitech diNovo Keyboard"
+msgstr "Clavier Logitech diNovo"
#: ../rules/base.xml.in.h:500
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Les touches du pavé numérique se comportent comme sur MacIntosh"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:501
-msgid "Numeric keypad layout selection"
-msgstr "Sélection de groupe du clavier numérique"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless (modèle Y-RB6)"
#: ../rules/base.xml.in.h:502
-msgid "OADG 109A"
-msgstr "OADG 109A"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech Internet Navigator iTouch SE"
#: ../rules/base.xml.in.h:503
-msgid "OLPC"
-msgstr "OLPC"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech Internet Navigator iTouch SE (USB)"
#: ../rules/base.xml.in.h:504
-msgid "OLPC Dari"
-msgstr "OLPC Dari"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:505
-msgid "OLPC Pashto"
-msgstr "OLPC Pashto"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:506
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC Ouzbek du Sud"
+#, fuzzy
+msgid "Macedonian"
+msgstr "Macédoine"
#: ../rules/base.xml.in.h:507
-msgid "Occitan"
-msgstr "Occitan"
+#, fuzzy
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Macintosh, sans touches mortes"
#: ../rules/base.xml.in.h:508
-msgid "Ogham"
-msgstr "Ogham"
+msgid "Macintosh"
+msgstr "Apple-Macintosh"
#: ../rules/base.xml.in.h:509
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
+msgid "Macintosh Old"
+msgstr "Apple-Macintosh ancien"
#: ../rules/base.xml.in.h:510
-msgid "Oriya"
-msgstr "Oriya"
+#, fuzzy
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Faire de la touche Verr. maj. une touche Ret. arr. supplémentaire."
#: ../rules/base.xml.in.h:511
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Clavier Internet Ortek MCK-800 MM"
+#, fuzzy
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Faire de la touche Verr. maj. une touche Verr. num. supplémentaire"
#: ../rules/base.xml.in.h:512
-msgid "Ossetian"
-msgstr "Ossétie"
+#, fuzzy
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Faire de la touche Verr. maj. une touche Ctrl supplémentaire"
#: ../rules/base.xml.in.h:513
-msgid "Ossetian, Winkeys"
-msgstr "Ossétie avec touches Logo"
+#, fuzzy
+msgid "Make Caps Lock an additional ESC"
+msgstr "Faire de la touche Verr. maj. une touche Esc. supplémentaire."
#: ../rules/base.xml.in.h:514
-msgid "Ossetian, legacy"
-msgstr "(Obsolète) Ossétie"
+#, fuzzy
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Faire de la touche Verr. maj. une touche Hyper supplémentaire"
#: ../rules/base.xml.in.h:515
-msgid "PC-98xx Series"
-msgstr "PC-98xx Series"
+#, fuzzy
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Faire de la touche Verr. maj. une touche Verr. num. supplémentaire"
#: ../rules/base.xml.in.h:516
-msgid "Pak"
-msgstr "Pak"
+#, fuzzy
+msgid "Make Caps Lock an additional Super"
+msgstr "Faire de la touche Verr. maj. une touche Super supplémentaire."
#: ../rules/base.xml.in.h:517
-msgid "Pakistan"
-msgstr "Pakistan"
+msgid "Malayalam"
+msgstr "Malayalam"
#: ../rules/base.xml.in.h:518
-msgid "Pashto"
-msgstr "Pashto"
+#, fuzzy
+msgid "Malayalam (Lalitha)"
+msgstr "Malayalam Lalitha"
#: ../rules/base.xml.in.h:519
-msgid "Pattachote"
-msgstr "Pattachote"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr ""
#: ../rules/base.xml.in.h:520
-msgid "Persian, with Persian Keypad"
-msgstr "Perse, avec clavier numérique perse"
+#, fuzzy
+msgid "Maltese"
+msgstr "Malte"
#: ../rules/base.xml.in.h:521
-msgid "Phonetic"
-msgstr "Phonétique"
+#, fuzzy
+msgid "Maltese (with US layout)"
+msgstr "Clavier maltais avec disposition US"
#: ../rules/base.xml.in.h:522
-msgid "Phonetic Winkeys"
-msgstr "Touches Logo phonétiques"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:523
-msgid "Pol"
-msgstr "Pol"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access"
#: ../rules/base.xml.in.h:524
-msgid "Poland"
-msgstr "Pologne"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:525
-msgid "Polytonic"
-msgstr "Polytonique"
+msgid "Menu"
+msgstr "Menu"
#: ../rules/base.xml.in.h:526
-msgid "Portugal"
-msgstr "Portugal"
+msgid "Meta is mapped to Left Win"
+msgstr "Méta est obtenu avec la touche Logo de gauche"
#: ../rules/base.xml.in.h:527
-msgid "Probhat"
-msgstr "Probhat"
+msgid "Meta is mapped to Win keys"
+msgstr "Méta est obtenu avec n'importe quelle touche Logo"
#: ../rules/base.xml.in.h:528
-msgid "Programmer Dvorak"
-msgstr "Programmeur Dvorak"
+#, fuzzy
+msgid "Meta on Left Ctrl"
+msgstr "Ctrl gauche"
#: ../rules/base.xml.in.h:529
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Clavier Microsoft Comfort Curve 2000"
#: ../rules/base.xml.in.h:530
-msgid "Prt"
-msgstr "Prt"
+msgid "Microsoft Internet Keyboard"
+msgstr "Clavier Microsoft Internet"
#: ../rules/base.xml.in.h:531
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Clavier Microsoft Internet Pro, suédois"
#: ../rules/base.xml.in.h:532
-msgid "Right Alt"
-msgstr "Alt. droite"
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:533
-msgid "Right Alt (while pressed)"
-msgstr "Alt de droite (lorsque pressée)"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Clavier Microsoft Natural Elite"
#: ../rules/base.xml.in.h:534
-msgid "Right Alt key never chooses 3rd level"
-msgstr "Alt de droite ne sélectionne jamais le 3e niveau"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Clavier Microsoft Natural Pro / Clavier Microsoft Internet Pro"
#: ../rules/base.xml.in.h:535
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Alt de droite, Maj.+Alt de droite est une touche multiple"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Clavier Microsoft Natural Pro OEM"
#: ../rules/base.xml.in.h:536
-msgid "Right Ctrl"
-msgstr "Crtl de droite"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Clavier Microsoft Natural Pro USB / Clavier Microsoft Internet Pro"
#: ../rules/base.xml.in.h:537
-msgid "Right Ctrl (while pressed)"
-msgstr "Ctrl de droite (lorsque pressée)"
+#, fuzzy
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Clavier Microsoft ergonomique naturel sans fil 7000"
#: ../rules/base.xml.in.h:538
-msgid "Right Ctrl as Right Alt"
-msgstr "Ctrl de droite comme Alt de droite"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Clavier Microsoft ergonomique naturel sans fil 7000"
#: ../rules/base.xml.in.h:539
-msgid "Right Ctrl+Right Shift"
-msgstr "Ctrl de droite + Majuscule de droite"
+msgid "Microsoft Office Keyboard"
+msgstr "Clavier Microsoft Office"
#: ../rules/base.xml.in.h:540
-msgid "Right Shift"
-msgstr "Maj. droite"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Clavier Microsoft Multimedia sans fil 1.0A"
#: ../rules/base.xml.in.h:541
-msgid "Right Win"
-msgstr "Touche Logo droite"
+msgid "Miscellaneous compatibility options"
+msgstr "Diverses options de compatibilité"
#: ../rules/base.xml.in.h:542
-msgid "Right Win (while pressed)"
-msgstr "Touche Logo de (lorsque pressée)"
+#, fuzzy
+msgid "Mongolian"
+msgstr "Mongolie"
#: ../rules/base.xml.in.h:543
-msgid "Right hand"
-msgstr "Main droite"
+#, fuzzy
+msgid "Montenegrin"
+msgstr "Monténégro"
#: ../rules/base.xml.in.h:544
-msgid "Right handed Dvorak"
-msgstr "Dvorak pour droitier"
+#, fuzzy
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Cyrillique avec guillemets"
#: ../rules/base.xml.in.h:545
-msgid "Romania"
-msgstr "Roumanie"
+msgid "Montenegrin (Cyrillic)"
+msgstr ""
#: ../rules/base.xml.in.h:546
-msgid "Romanian keyboard with German letters"
-msgstr "Clavier roumain avec lettres allemandes"
+#, fuzzy
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Cyrillique, Z et ZHE permutés"
#: ../rules/base.xml.in.h:547
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Clavier roumain avec lettres allemandes, sans touches mortes"
+#, fuzzy
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Latin qwerty"
#: ../rules/base.xml.in.h:548
-msgid "Rou"
-msgstr "Rou"
+#, fuzzy
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Unicode Latin QWERTY"
#: ../rules/base.xml.in.h:549
-msgid "Rus"
-msgstr "Rus"
+#, fuzzy
+msgid "Montenegrin (Latin unicode)"
+msgstr "Unicode Latin"
#: ../rules/base.xml.in.h:550
-msgid "Russia"
-msgstr "Russie"
+#, fuzzy
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Latin avec guillemets"
#: ../rules/base.xml.in.h:551
-msgid "Russian"
-msgstr "Russe"
+msgid "Māori"
+msgstr ""
#: ../rules/base.xml.in.h:552
-msgid "Russian phonetic"
-msgstr "Phonétique russe"
+msgid "NICOLA-F style Backspace"
+msgstr "Ret. Arr. de style NICOLA-F"
#: ../rules/base.xml.in.h:553
-msgid "Russian phonetic Dvorak"
-msgstr "Dvorak phonétique russe"
+#, fuzzy
+msgid "Nepali"
+msgstr "Népal"
#: ../rules/base.xml.in.h:554
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Phonétique russe, sans lettres mortes"
+msgid "Non-breakable space character at fourth level"
+msgstr "Espace insécable au 4e niveau."
#: ../rules/base.xml.in.h:555
-msgid "Russian with Kazakh"
-msgstr "Russe avec kazakh"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Espace insécable au 4e niveau et une espace fine insécable au 6e niveau"
#: ../rules/base.xml.in.h:556
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia sans fil"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Espace insécable au 4e niveau et une espace fine insécable au 6e niveau (par les touches Ctrl+Maj.)"
#: ../rules/base.xml.in.h:557
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Non-breakable space character at second level"
+msgstr "Espace insécable au 2e niveau"
#: ../rules/base.xml.in.h:558
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "Non-breakable space character at third level"
+msgstr "Espace insécable au 3e niveau"
#: ../rules/base.xml.in.h:559
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Espace insécable au 3e niveau et rien au 4e niveau"
#: ../rules/base.xml.in.h:560
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Espace insécable au 3e niveau et une espace fine insécable au 4e niveau"
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:7
-msgid "SRB"
-msgstr "SRB"
+#: ../rules/base.xml.in.h:561
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:562
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Norwegian"
+msgstr "Norvégien"
#: ../rules/base.xml.in.h:563
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+msgid "Norwegian (Dvorak)"
+msgstr "Norvégien (Dvorak)"
#: ../rules/base.xml.in.h:564
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Norwegian (Mac)"
+msgstr "Norvégien (Mac)"
#: ../rules/base.xml.in.h:565
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Norvégien (Mac, sans touche morte)"
#: ../rules/base.xml.in.h:566
-msgid "Scroll Lock"
-msgstr "Arrêt défilement"
+msgid "Norwegian (Northern Saami"
+msgstr "Norvégien (Sami du Nord)"
#: ../rules/base.xml.in.h:567
-msgid "ScrollLock"
-msgstr "Arrêt défil."
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Norvégien (sans touche morte)"
#: ../rules/base.xml.in.h:568
-msgid "Secwepemctsin"
-msgstr "Secwepemctsin"
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Norvégien (Sami du Nord, sans touche morte)"
#: ../rules/base.xml.in.h:569
-msgid "Semi-colon on third level"
-msgstr "Point virgule au 3e niveau"
+msgid "Num Lock"
+msgstr "Verr. Num."
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:8
-msgid "Serbia"
-msgstr "Serbie"
+#: ../rules/base.xml.in.h:570
+msgid "Numeric keypad delete key behaviour"
+msgstr "Comportement de la touche de suppression du clavier numérique"
#: ../rules/base.xml.in.h:571
-msgid "Shift cancels CapsLock"
-msgstr "Maj. annule le verrouillage majuscule"
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Les touches du pavé numérique se comportent comme sur MacIntosh"
#: ../rules/base.xml.in.h:572
-msgid "Shift does not cancel NumLock, chooses 3d level instead"
-msgstr "Maj. n'annule pas le verrouillage numérique; choisir le 3e niveau"
+msgid "Numeric keypad layout selection"
+msgstr "Sélection de groupe du clavier numérique"
#: ../rules/base.xml.in.h:573
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "La touche Maj. avec le pavé numérique se comporte comme dans MS Windows"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:574
-msgid "Shift+CapsLock"
-msgstr "Maj.+ Verr. maj."
+msgid "Oriya"
+msgstr "Oriya"
#: ../rules/base.xml.in.h:575
-msgid "Simple"
-msgstr "Simple"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Clavier Internet Ortek MCK-800 MM"
#: ../rules/base.xml.in.h:576
-msgid "Slovakia"
-msgstr "Slovaquie"
+msgid "PC-98xx Series"
+msgstr "PC-98xx Series"
#: ../rules/base.xml.in.h:577
-msgid "Slovenia"
-msgstr "Slovénie"
+msgid "Pashto"
+msgstr "Pashto"
#: ../rules/base.xml.in.h:578
-msgid "South Africa"
-msgstr "Afrique du Sud"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr ""
#: ../rules/base.xml.in.h:579
-msgid "Southern Uzbek"
-msgstr "Ouzbek du Sud"
+msgid "Pause"
+msgstr "Pause"
#: ../rules/base.xml.in.h:580
-msgid "Spain"
-msgstr "Espagne"
+msgid "Persian"
+msgstr ""
#: ../rules/base.xml.in.h:581
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Les combinaisons spéciales (Ctrl+Alt+&lt;touche&gt;) sont traitées par un serveur"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr ""
#: ../rules/base.xml.in.h:582
-msgid "SrL"
-msgstr "SrL"
+#, fuzzy
+msgid "Persian (with Persian Keypad)"
+msgstr "Perse, avec clavier numérique perse"
#: ../rules/base.xml.in.h:583
-msgid "Sri Lanka"
-msgstr "Sri Lanka"
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr ""
#: ../rules/base.xml.in.h:584
-msgid "Standard"
-msgstr "Standard"
+#, fuzzy
+msgid "Polish"
+msgstr "Anglais"
#: ../rules/base.xml.in.h:585
-msgid "Standard (Cedilla)"
-msgstr "Standard (cédille)"
+#, fuzzy
+msgid "Polish (Dvorak)"
+msgstr "Dvorak classique"
+
+#: ../rules/base.xml.in.h:586
+#, fuzzy
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Dvorak, guillemets polonais sur la touche « 1 »"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:587
-msgid "Standard RSTU"
-msgstr "Standard RSTU"
+#, fuzzy
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Dvorak, guillemets polonais sur la touche des guillemets"
+
+#: ../rules/base.xml.in.h:588
+#, fuzzy
+msgid "Polish (Kashubian)"
+msgstr "Kachoube"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:589
-msgid "Standard RSTU on Russian layout"
-msgstr "Standard RSTU avec une disposition russe"
+#, fuzzy
+msgid "Polish (programmer Dvorak)"
+msgstr "Programmeur Dvorak"
#: ../rules/base.xml.in.h:590
-msgid "Sun Type 5/6"
-msgstr "Sun Type 5/6"
+msgid "Polish (qwertz)"
+msgstr ""
#: ../rules/base.xml.in.h:591
-msgid "Sun dead keys"
-msgstr "Touches mortes Sun"
+#, fuzzy
+msgid "Portuguese"
+msgstr "Portugal"
#: ../rules/base.xml.in.h:592
-msgid "Super Power Multimedia Keyboard"
-msgstr "Multimedia Super Power"
+msgid "Portuguese (Brazil)"
+msgstr ""
#: ../rules/base.xml.in.h:593
-msgid "Svdvorak"
-msgstr "Svdvorak"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr ""
#: ../rules/base.xml.in.h:594
-msgid "Svk"
-msgstr "Svk"
+#, fuzzy
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Sami du Nord, sans touches mortes"
#: ../rules/base.xml.in.h:595
-msgid "Svn"
-msgstr "Svn"
+#, fuzzy
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Native pour Espéranto"
#: ../rules/base.xml.in.h:596
-msgid "Swap Ctrl and CapsLock"
-msgstr "Permuter Ctrl et Verr. maj."
+#, fuzzy
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Nativo pour claviers américains"
#: ../rules/base.xml.in.h:597
-msgid "Swap ESC and CapsLock"
-msgstr "Permuter ESC et Verr. maj."
+msgid "Portuguese (Brazil, nativo)"
+msgstr ""
#: ../rules/base.xml.in.h:598
-msgid "Swe"
-msgstr "Sué"
+msgid "Portuguese (Mac)"
+msgstr ""
#: ../rules/base.xml.in.h:599
-msgid "Sweden"
-msgstr "Suède"
+#, fuzzy
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Français, touches mortes Sun"
#: ../rules/base.xml.in.h:600
-msgid "Switzerland"
-msgstr "Suisse"
+#, fuzzy
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Français, sans touches mortes"
#: ../rules/base.xml.in.h:601
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (tablet PC)"
+#, fuzzy
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Native pour Espéranto"
#: ../rules/base.xml.in.h:602
-msgid "Syr"
-msgstr "Syr"
+#, fuzzy
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Nativo pour claviers américains"
#: ../rules/base.xml.in.h:603
-msgid "Syria"
-msgstr "Syrie"
+msgid "Portuguese (Nativo)"
+msgstr ""
#: ../rules/base.xml.in.h:604
-msgid "Syriac"
-msgstr "Syriaque"
+#, fuzzy
+msgid "Portuguese (Sun dead keys)"
+msgstr "Français, touches mortes Sun"
#: ../rules/base.xml.in.h:605
-msgid "Syriac phonetic"
-msgstr "Phonétique syriaque"
+#, fuzzy
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Français, sans touches mortes"
#: ../rules/base.xml.in.h:606
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:607
-msgid "Tajikistan"
-msgstr "Tadjikistan"
+msgid "PrtSc"
+msgstr ""
#: ../rules/base.xml.in.h:608
-msgid "Tamil"
-msgstr "Tamoul"
+#, fuzzy
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Gurmukhi Jhelum"
#: ../rules/base.xml.in.h:609
-msgid "Tamil TAB Typewriter"
-msgstr "Machine à écrire tamoule TAB"
+#, fuzzy
+msgid "Punjabi (Gurmukhi)"
+msgstr "Gurmukhi"
#: ../rules/base.xml.in.h:610
-msgid "Tamil TSCII Typewriter"
-msgstr "Machine à écrire tamoule TSCII"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:611
-msgid "Tamil Unicode"
-msgstr "Unicode tamoul"
+msgid "Right Alt"
+msgstr "Alt. droite"
#: ../rules/base.xml.in.h:612
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "Right Alt (while pressed)"
+msgstr "Alt de droite (lorsque pressée)"
#: ../rules/base.xml.in.h:613
-msgid "Tatar"
-msgstr "Tatar"
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
#: ../rules/base.xml.in.h:614
-msgid "Telugu"
-msgstr "Telugu"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr ""
#: ../rules/base.xml.in.h:615
-msgid "Tha"
-msgstr "Tha"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
#: ../rules/base.xml.in.h:616
-msgid "Thailand"
-msgstr "Thaïlande"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "Alt de droite ne sélectionne jamais le 3e niveau"
#: ../rules/base.xml.in.h:617
-msgid "Tibetan"
-msgstr "Tibétain"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Alt de droite, Maj.+Alt de droite est une touche multiple"
#: ../rules/base.xml.in.h:618
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Tibétain (avec touches numériques ASCII)"
+msgid "Right Ctrl"
+msgstr "Crtl de droite"
#: ../rules/base.xml.in.h:619
-msgid "Tifinagh"
-msgstr "Tifinagh"
+msgid "Right Ctrl (while pressed)"
+msgstr "Ctrl de droite (lorsque pressée)"
#: ../rules/base.xml.in.h:620
-msgid "Tifinagh Alternative"
-msgstr "Tifinagh alternatif"
+msgid "Right Ctrl as Right Alt"
+msgstr "Ctrl de droite comme Alt de droite"
#: ../rules/base.xml.in.h:621
-msgid "Tifinagh Alternative Phonetic"
-msgstr "Tifinagh avec phonétique alternative"
+#, fuzzy
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Méta est obtenu avec la touche Logo de gauche"
#: ../rules/base.xml.in.h:622
-msgid "Tifinagh Extended"
-msgstr "Tifinagh étendu"
+msgid "Right Ctrl+Right Shift"
+msgstr "Ctrl de droite + Majuscule de droite"
#: ../rules/base.xml.in.h:623
-msgid "Tifinagh Extended Phonetic"
-msgstr "Tifinagh avec phonétique étendue"
+msgid "Right Shift"
+msgstr "Maj. droite"
#: ../rules/base.xml.in.h:624
-msgid "Tifinagh Phonetic"
-msgstr "Tifinagh phonétique"
+msgid "Right Win"
+msgstr "Touche Logo droite"
#: ../rules/base.xml.in.h:625
-msgid "Tilde (~) variant"
-msgstr "Variante avec tilde"
+msgid "Right Win (while pressed)"
+msgstr "Touche Logo de (lorsque pressée)"
#: ../rules/base.xml.in.h:626
-msgid "Tjk"
-msgstr "Tjk"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr ""
#: ../rules/base.xml.in.h:627
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "Mène à la touche correspondante sur un clavier Dvorak."
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
#: ../rules/base.xml.in.h:628
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "Mène à la touche correspondante sur un clavier Qwerty."
+#, fuzzy
+msgid "Romanian"
+msgstr "Roumanie"
#: ../rules/base.xml.in.h:629
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
+#, fuzzy
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Tatar de Crimée (Q Dobruca-1)"
#: ../rules/base.xml.in.h:630
-msgid "Traditional phonetic"
-msgstr "Phonétique traditionnel"
+#, fuzzy
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Tatar de Crimée (Q Dobruca-2)"
#: ../rules/base.xml.in.h:631
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access"
+#, fuzzy
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Tatar de Crimée (Alt-Q turc)"
#: ../rules/base.xml.in.h:632
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+#, fuzzy
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Tatar de Crimée (F turc)"
#: ../rules/base.xml.in.h:633
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Classic"
+msgid "Romanian (WinKeys)"
+msgstr ""
#: ../rules/base.xml.in.h:634
-msgid "Tur"
-msgstr "Tur"
+#, fuzzy
+msgid "Romanian (cedilla)"
+msgstr "Standard (cédille)"
#: ../rules/base.xml.in.h:635
-msgid "Turkey"
-msgstr "Turquie"
+#, fuzzy
+msgid "Romanian (standard cedilla)"
+msgstr "Standard (cédille)"
#: ../rules/base.xml.in.h:636
-msgid "Turkmenistan"
-msgstr "Turkmenistan"
+msgid "Romanian (standard)"
+msgstr ""
#: ../rules/base.xml.in.h:637
-msgid "Typewriter"
-msgstr "Machine à écrire"
+msgid "Rupee on 4"
+msgstr ""
#: ../rules/base.xml.in.h:638
-msgid "Typewriter, legacy"
-msgstr "Machine à écrire"
+msgid "Russian"
+msgstr "Russe"
#: ../rules/base.xml.in.h:639
-msgid "UCW layout (accented letters only)"
-msgstr "Disposition UCW (lettres accentuées seulement)"
+#, fuzzy
+msgid "Russian (Bashkirian)"
+msgstr "Bashkirien"
#: ../rules/base.xml.in.h:640
-msgid "US keyboard with Bosnian digraphs"
-msgstr "Clavier US avec digraphes bosniaques"
+#, fuzzy
+msgid "Russian (Chuvash Latin)"
+msgstr "Latin Chuvash"
#: ../rules/base.xml.in.h:641
-msgid "US keyboard with Bosnian letters"
-msgstr "Clavier US avec lettres bosniaques"
+#, fuzzy
+msgid "Russian (Chuvash)"
+msgstr "Russe avec kazakh"
#: ../rules/base.xml.in.h:642
-msgid "US keyboard with Croatian digraphs"
-msgstr "Clavier US avec digraphes croates"
+#, fuzzy
+msgid "Russian (DOS)"
+msgstr "Russe"
#: ../rules/base.xml.in.h:643
-msgid "US keyboard with Croatian letters"
-msgstr "Clavier US avec lettres croates"
+#, fuzzy
+msgid "Russian (Georgia)"
+msgstr "Phonétique russe"
#: ../rules/base.xml.in.h:644
-msgid "US keyboard with Estonian letters"
-msgstr "Clavier US avec lettres estoniennes"
+#, fuzzy
+msgid "Russian (Germany, phonetic)"
+msgstr "Phonétique russe"
#: ../rules/base.xml.in.h:645
-msgid "US keyboard with Italian letters"
-msgstr "Clavier US avec lettres italiennes"
+#, fuzzy
+msgid "Russian (Kalmyk)"
+msgstr "Russe avec kazakh"
#: ../rules/base.xml.in.h:646
-msgid "US keyboard with Lithuanian letters"
-msgstr "Clavier US avec lettres lituaniennes"
+#, fuzzy
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Russe avec kazakh"
#: ../rules/base.xml.in.h:647
-msgid "US keyboard with Slovenian letters"
-msgstr "Clavier US avec lettres slovènes"
+#, fuzzy
+msgid "Russian (Komi)"
+msgstr "Phonétique russe"
-#: ../rules/base.xml.in.h:648 ../rules/base.extras.xml.in.h:9
-msgid "USA"
-msgstr "USA"
+#: ../rules/base.xml.in.h:648
+#, fuzzy
+msgid "Russian (Mari)"
+msgstr "Russe"
#: ../rules/base.xml.in.h:649
-msgid "Udmurt"
-msgstr "Oudmourte"
+#, fuzzy
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Ossétie avec touches Logo"
#: ../rules/base.xml.in.h:650
-msgid "Ukr"
-msgstr "Ukr"
+#, fuzzy
+msgid "Russian (Ossetian, legacy)"
+msgstr "(Obsolète) Ossétie"
#: ../rules/base.xml.in.h:651
-msgid "Ukraine"
-msgstr "Ukraine"
+#, fuzzy
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Dvorak phonétique russe"
#: ../rules/base.xml.in.h:652
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Ajouts Unicode (touches fléchées et opérateurs mathématiques)"
+#, fuzzy
+msgid "Russian (Serbian)"
+msgstr "Phonétique russe"
#: ../rules/base.xml.in.h:653
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Ajouts Unicode (touches fléchées et opérateurs mathématiques). Les opérateurs mathématiques se trouvent sur le niveau par défaut"
+#, fuzzy
+msgid "Russian (Sweden, phonetic)"
+msgstr "Phonétique russe"
#: ../rules/base.xml.in.h:654
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+#, fuzzy
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Phonétique russe, sans lettres mortes"
#: ../rules/base.xml.in.h:655
-msgid "United Kingdom"
-msgstr "Royaume-Uni"
+#, fuzzy
+msgid "Russian (Tatar)"
+msgstr "Russe"
#: ../rules/base.xml.in.h:656
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+#, fuzzy
+msgid "Russian (US, phonetic)"
+msgstr "Phonétique russe"
#: ../rules/base.xml.in.h:657
-msgid "Urdu, Alternative phonetic"
-msgstr "Ourdou, phonétique alternatif"
+#, fuzzy
+msgid "Russian (Udmurt)"
+msgstr "Russe"
#: ../rules/base.xml.in.h:658
-msgid "Urdu, Phonetic"
-msgstr "Ourdou, phonétique"
+#, fuzzy
+msgid "Russian (Yakut)"
+msgstr "Russe"
#: ../rules/base.xml.in.h:659
-msgid "Urdu, Winkeys"
-msgstr "Ourdou, touches Logo"
+#, fuzzy
+msgid "Russian (legacy)"
+msgstr "(Obsolète) Ossétie"
#: ../rules/base.xml.in.h:660
-msgid "Use Bosnian digraphs"
-msgstr "Avec digraphes bosniaques"
+#, fuzzy
+msgid "Russian (phonetic WinKeys)"
+msgstr "Phonétique russe"
#: ../rules/base.xml.in.h:661
-msgid "Use Croatian digraphs"
-msgstr "Avec digraphes croates"
+#, fuzzy
+msgid "Russian (phonetic)"
+msgstr "Phonétique russe"
#: ../rules/base.xml.in.h:662
-msgid "Use guillemets for quotes"
-msgstr "Remplacer les guillemets droits avec les guillements français"
+#, fuzzy
+msgid "Russian (typewriter)"
+msgstr "Phonétique russe"
#: ../rules/base.xml.in.h:663
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Utiliser les voyants lumineux du clavier pour afficher une disposition alternative"
+#, fuzzy
+msgid "Russian (typewriter, legacy)"
+msgstr "Machine à écrire"
#: ../rules/base.xml.in.h:664
-msgid "Using space key to input non-breakable space character"
-msgstr "Utiliser la barre d'espacement pour insérer un espace insécable"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia sans fil"
#: ../rules/base.xml.in.h:665
-msgid "Usual space at any level"
-msgstr "La barre d'espacement renvoie une espace ordinaire à tous les niveaux"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:666
-msgid "Uzb"
-msgstr "Uzb"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:667
-msgid "Uzbekistan"
-msgstr "Ouzbékistan"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:668
-msgid "Vietnam"
-msgstr "Viêt Nam"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:669
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "Clavier Internet ViewSonic KU-306"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:670
-msgid "Vnm"
-msgstr "Vnm"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:671
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Clavier Wang 724 avec ajouts Unicode (touches fléchées et opérateurs mathématiques)"
+msgid "Saisiyat (Taiwan)"
+msgstr ""
#: ../rules/base.xml.in.h:672
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Clavier Wang 724 avec ajouts Unicode (touches fléchées et opérateurs mathématiques). Les opérateurs mathématiques se trouvent sur le niveau par défaut"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:673
-msgid "Wang model 724 azerty"
-msgstr "Modèle Wang 724 azerty"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:674
-msgid "Western"
-msgstr "Occidentale"
+msgid "Sanwa Supply SKB-KG3"
+msgstr ""
#: ../rules/base.xml.in.h:675
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
+msgid "Scroll Lock"
+msgstr "Arrêt défilement"
#: ../rules/base.xml.in.h:676
-msgid "Winkeys"
-msgstr "Touches Logo"
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
#: ../rules/base.xml.in.h:677
-msgid "With &lt;\\|&gt; key"
-msgstr "Avec la touche &lt;\\|&gt;"
+msgid "Semi-colon on third level"
+msgstr "Point virgule au 3e niveau"
#: ../rules/base.xml.in.h:678
-msgid "With EuroSign on 5"
-msgstr "Avec le signe Euro sur la touche 5."
+#, fuzzy
+msgid "Serbian"
+msgstr "Serbie"
#: ../rules/base.xml.in.h:679
-msgid "With guillemets"
-msgstr "Avec guillemets"
+#, fuzzy
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Latin Unicode qwerty"
#: ../rules/base.xml.in.h:680
-msgid "Yahoo! Internet Keyboard"
-msgstr "Clavier Yahoo! Internet"
+#, fuzzy
+msgid "Serbian (Latin Unicode)"
+msgstr "Latin Unicode"
#: ../rules/base.xml.in.h:681
-msgid "Yakut"
-msgstr "Yacoute"
+#, fuzzy
+msgid "Serbian (Latin qwerty)"
+msgstr "Latin qwerty"
#: ../rules/base.xml.in.h:682
-msgid "Yoruba"
-msgstr "Yoruba"
+#, fuzzy
+msgid "Serbian (Latin with guillemets)"
+msgstr "Latin avec guillemets"
#: ../rules/base.xml.in.h:683
-msgid "Z and ZHE swapped"
-msgstr "Z et ZHE permutés"
+#, fuzzy
+msgid "Serbian (Latin)"
+msgstr "Allemand (Apple-Macintosh)"
#: ../rules/base.xml.in.h:684
-msgid "Zar"
-msgstr "Zar"
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr ""
#: ../rules/base.xml.in.h:685
-msgid "azerty"
-msgstr "azerty"
+#, fuzzy
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Z et ZHE permutés"
#: ../rules/base.xml.in.h:686
-msgid "azerty/digits"
-msgstr "azerty/chiffres"
+#, fuzzy
+msgid "Serbian (with guillemets)"
+msgstr "Latin avec guillemets"
#: ../rules/base.xml.in.h:687
-msgid "digits"
-msgstr "chiffres"
+msgid "Serbo-Croatian (US)"
+msgstr ""
#: ../rules/base.xml.in.h:688
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "(Obsolète) Point-virgule et guillemets droits déplacés"
+#, fuzzy
+msgid "Shift cancels Caps Lock"
+msgstr "Maj. annule le verrouillage majuscule"
#: ../rules/base.xml.in.h:689
-msgid "lyx"
-msgstr "lyx"
+#, fuzzy
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Maj. n'annule pas le verrouillage numérique; choisir le 3e niveau"
#: ../rules/base.xml.in.h:690
-msgid "qwerty"
-msgstr "qwerty"
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "La touche Maj. avec le pavé numérique se comporte comme dans MS Windows"
#: ../rules/base.xml.in.h:691
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, contre-oblique étendue"
+#, fuzzy
+msgid "Shift+Caps Lock"
+msgstr "Maj.+ Verr. maj."
#: ../rules/base.xml.in.h:692
-msgid "qwerty/digits"
-msgstr "qwerty/chiffres"
+msgid "Sindhi"
+msgstr ""
#: ../rules/base.xml.in.h:693
-msgid "qwertz"
-msgstr "qwertz"
+msgid "Sinhala"
+msgstr ""
+
+#: ../rules/base.xml.in.h:694
+#, fuzzy
+msgid "Slovak"
+msgstr "Slovaquie"
+
+#: ../rules/base.xml.in.h:695
+#, fuzzy
+msgid "Slovak (extended Backslash)"
+msgstr "Barre contre-oblique étendue"
+
+#: ../rules/base.xml.in.h:696
+msgid "Slovak (qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:697
+#, fuzzy
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "qwerty, contre-oblique étendue"
+
+#: ../rules/base.xml.in.h:698
+#, fuzzy
+msgid "Slovene"
+msgstr "Slovénie"
+
+#: ../rules/base.xml.in.h:699
+#, fuzzy
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Clavier US avec lettres slovènes"
+
+#: ../rules/base.xml.in.h:700
+#, fuzzy
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Remplacer les guillemets droits avec les guillements français"
+
+#: ../rules/base.xml.in.h:701
+msgid "Spanish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:702
+#, fuzzy
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Variante asturienne avec H point bas et L point bas"
+
+#: ../rules/base.xml.in.h:703
+#, fuzzy
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Catalan avec L point médian"
+
+#: ../rules/base.xml.in.h:704
+#, fuzzy
+msgid "Spanish (Dvorak)"
+msgstr "Dvorak français"
+
+#: ../rules/base.xml.in.h:705
+#, fuzzy
+msgid "Spanish (Latin American)"
+msgstr "Amérique latine"
+
+#: ../rules/base.xml.in.h:706
+#, fuzzy
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Allemand, sans touches mortes"
+
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:708
+#, fuzzy
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Allemand, touches mortes Sun"
+
+#: ../rules/base.xml.in.h:709
+msgid "Spanish (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:710
+#, fuzzy
+msgid "Spanish (Sun dead keys)"
+msgstr "Macintosh, touches mortes Sun"
+
+#: ../rules/base.xml.in.h:711
+#, fuzzy
+msgid "Spanish (eliminate dead keys)"
+msgstr "Macintosh, sans touches mortes"
+
+#: ../rules/base.xml.in.h:712
+#, fuzzy
+msgid "Spanish (include dead tilde)"
+msgstr "Inclut le tilde"
+
+#: ../rules/base.xml.in.h:713
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Les combinaisons spéciales (Ctrl+Alt+&lt;touche&gt;) sont traitées par un serveur"
+
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Type 5/6"
+
+#: ../rules/base.xml.in.h:715
+msgid "Super Power Multimedia Keyboard"
+msgstr "Multimedia Super Power"
+
+#: ../rules/base.xml.in.h:716
+msgid "Swahili (Kenya)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:717
+msgid "Swahili (Tanzania)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:718
+#, fuzzy
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Permuter Ctrl et Verr. maj."
+
+#: ../rules/base.xml.in.h:719
+#, fuzzy
+msgid "Swap ESC and Caps Lock"
+msgstr "Permuter ESC et Verr. maj."
+
+#: ../rules/base.xml.in.h:720
+#, fuzzy
+msgid "Swedish"
+msgstr "Suède"
+
+#: ../rules/base.xml.in.h:721
+#, fuzzy
+msgid "Swedish (Dvorak)"
+msgstr "Dvorak français"
+
+#: ../rules/base.xml.in.h:722
+msgid "Swedish (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:723
+#, fuzzy
+msgid "Swedish (Svdvorak)"
+msgstr "Svdvorak"
+
+#: ../rules/base.xml.in.h:724
+#, fuzzy
+msgid "Swedish (eliminate dead keys)"
+msgstr "Français, sans touches mortes"
+
+#: ../rules/base.xml.in.h:725
+#, fuzzy
+msgid "Swedish (northern Saami)"
+msgstr "Sami du Nord"
+
+#: ../rules/base.xml.in.h:726
+msgid "Swiss"
+msgstr ""
+
+#: ../rules/base.xml.in.h:727
+#, fuzzy
+msgid "Swiss (legacy)"
+msgstr "Français (obsolète)"
+
+#: ../rules/base.xml.in.h:728
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet PC)"
+
+#: ../rules/base.xml.in.h:729
+msgid "Syriac"
+msgstr "Syriaque"
+
+#: ../rules/base.xml.in.h:730
+#, fuzzy
+msgid "Syriac (phonetic)"
+msgstr "Phonétique syriaque"
+
+#: ../rules/base.xml.in.h:731
+msgid "Taiwanese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:732
+msgid "Taiwanese (indigenous)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:733
+#, fuzzy
+msgid "Tajik"
+msgstr "Tadjikistan"
+
+#: ../rules/base.xml.in.h:734
+#, fuzzy
+msgid "Tajik (legacy)"
+msgstr "Français (obsolète)"
+
+#: ../rules/base.xml.in.h:735
+msgid "Tamil"
+msgstr "Tamoul"
+
+#: ../rules/base.xml.in.h:736
+#, fuzzy
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Machine à écrire tamoule TAB"
+
+#: ../rules/base.xml.in.h:737
+#, fuzzy
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Unicode tamoul"
+
+#: ../rules/base.xml.in.h:738
+#, fuzzy
+msgid "Tamil (TAB typewriter)"
+msgstr "Machine à écrire tamoule TAB"
+
+#: ../rules/base.xml.in.h:739
+#, fuzzy
+msgid "Tamil (TSCII typewriter)"
+msgstr "Machine à écrire tamoule TSCII"
+
+#: ../rules/base.xml.in.h:740
+#, fuzzy
+msgid "Tamil (Unicode)"
+msgstr "Unicode tamoul"
+
+#: ../rules/base.xml.in.h:741
+#, fuzzy
+msgid "Tamil (keyboard with numerals)"
+msgstr "Clavier roumain avec lettres allemandes"
+
+#: ../rules/base.xml.in.h:742
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
+
+#: ../rules/base.xml.in.h:743
+msgid "Telugu"
+msgstr "Telugu"
+
+#: ../rules/base.xml.in.h:744
+#, fuzzy
+msgid "Thai"
+msgstr "Thaïlande"
+
+#: ../rules/base.xml.in.h:745
+#, fuzzy
+msgid "Thai (Pattachote)"
+msgstr "Pattachote"
+
+#: ../rules/base.xml.in.h:746
+#, fuzzy
+msgid "Thai (TIS-820.2538)"
+msgstr "TIS-820.2538"
+
+#: ../rules/base.xml.in.h:747
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "Mène à la touche correspondante sur un clavier Dvorak."
+
+#: ../rules/base.xml.in.h:748
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "Mène à la touche correspondante sur un clavier Qwerty."
+
+#: ../rules/base.xml.in.h:749
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr ""
+
+#: ../rules/base.xml.in.h:750
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
+
+#: ../rules/base.xml.in.h:751
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access"
+
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
+
+#: ../rules/base.xml.in.h:753
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Classic"
+
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr ""
+
+#: ../rules/base.xml.in.h:755
+#, fuzzy
+msgid "Turkish"
+msgstr "Turkmenistan"
+
+#: ../rules/base.xml.in.h:756
+#, fuzzy
+msgid "Turkish (Alt-Q)"
+msgstr "Tatar de Crimée (Alt-Q turc)"
+
+#: ../rules/base.xml.in.h:757
+#, fuzzy
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Tatar de Crimée (Alt-Q turc)"
+
+#: ../rules/base.xml.in.h:758
+#, fuzzy
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Tatar de Crimée (F turc)"
+
+#: ../rules/base.xml.in.h:759
+#, fuzzy
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Tatar de Crimée (Q turc)"
+
+#: ../rules/base.xml.in.h:760
+#, fuzzy
+msgid "Turkish (F)"
+msgstr "Kurde, (F)"
+
+#: ../rules/base.xml.in.h:761
+#, fuzzy
+msgid "Turkish (Sun dead keys)"
+msgstr "Français, touches mortes Sun"
+
+#: ../rules/base.xml.in.h:762
+#, fuzzy
+msgid "Turkish (international with dead keys)"
+msgstr "International (avec touches mortes)"
+
+#: ../rules/base.xml.in.h:763
+#, fuzzy
+msgid "Turkmen"
+msgstr "Turquie"
+
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr ""
+
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr ""
+
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr ""
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:770
+#, fuzzy
+msgid "Ukrainian"
+msgstr "Ukraine"
+
+#: ../rules/base.xml.in.h:771
+#, fuzzy
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Tatar de Crimée (Alt-Q turc)"
+
+#: ../rules/base.xml.in.h:772
+#, fuzzy
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Tatar de Crimée (F turc)"
+
+#: ../rules/base.xml.in.h:773
+#, fuzzy
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Tatar de Crimée (Q turc)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:776
+#, fuzzy
+msgid "Ukrainian (legacy)"
+msgstr "Français (obsolète)"
+
+#: ../rules/base.xml.in.h:777
+#, fuzzy
+msgid "Ukrainian (phonetic)"
+msgstr "Phonétique traditionnel"
+
+#: ../rules/base.xml.in.h:778
+#, fuzzy
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Standard RSTU avec une disposition russe"
+
+#: ../rules/base.xml.in.h:779
+#, fuzzy
+msgid "Ukrainian (standard RSTU)"
+msgstr "Standard RSTU"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Ajouts Unicode (touches fléchées et opérateurs mathématiques)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Ajouts Unicode (touches fléchées et opérateurs mathématiques). Les opérateurs mathématiques se trouvent sur le niveau par défaut"
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+#: ../rules/base.xml.in.h:784
+#, fuzzy
+msgid "Urdu (Pakistan)"
+msgstr "Pakistan"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:787
+#, fuzzy
+msgid "Urdu (WinKeys)"
+msgstr "Ourdou, touches Logo"
+
+#: ../rules/base.xml.in.h:788
+#, fuzzy
+msgid "Urdu (alternative phonetic)"
+msgstr "Ourdou, phonétique alternatif"
+
+#: ../rules/base.xml.in.h:789
+#, fuzzy
+msgid "Urdu (phonetic)"
+msgstr "Ourdou, phonétique"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Utiliser les voyants lumineux du clavier pour afficher une disposition alternative"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Utiliser la barre d'espacement pour insérer un espace insécable"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "La barre d'espacement renvoie une espace ordinaire à tous les niveaux"
+
+#: ../rules/base.xml.in.h:793
+#, fuzzy
+msgid "Uzbek"
+msgstr "Ouzbékistan"
+
+#: ../rules/base.xml.in.h:794
+#, fuzzy
+msgid "Uzbek (Afghanistan)"
+msgstr "Afghanistan"
+
+#: ../rules/base.xml.in.h:795
+#, fuzzy
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Afghanistan"
+
+#: ../rules/base.xml.in.h:796
+#, fuzzy
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Tatar de Crimée (Alt-Q turc)"
+
+#: ../rules/base.xml.in.h:797
+#, fuzzy
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Tatar de Crimée (F turc)"
+
+#: ../rules/base.xml.in.h:798
+#, fuzzy
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Tatar de Crimée (Q turc)"
+
+#: ../rules/base.xml.in.h:799
+#, fuzzy
+msgid "Uzbek (Latin)"
+msgstr "Ouzbékistan"
+
+#: ../rules/base.xml.in.h:800
+#, fuzzy
+msgid "Vietnamese"
+msgstr "Viêt Nam"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "Clavier Internet ViewSonic KU-306"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Clavier Wang 724 avec ajouts Unicode (touches fléchées et opérateurs mathématiques)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Clavier Wang 724 avec ajouts Unicode (touches fléchées et opérateurs mathématiques). Les opérateurs mathématiques se trouvent sur le niveau par défaut"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr ""
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Clavier Yahoo! Internet"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Yoruba"
+
+#: ../rules/base.xml.in.h:808
+#, fuzzy
+msgid "Zero-width non-joiner character at second level"
+msgstr "Espace insécable au 2e niveau"
+
+#: ../rules/base.xml.in.h:809
+#, fuzzy
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Espace insécable au 3e niveau et une espace fine insécable au 4e niveau"
+
+#: ../rules/base.xml.in.h:810
+#, fuzzy
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Espace insécable au 3e niveau et rien au 4e niveau"
+
+#: ../rules/base.xml.in.h:811
+#, fuzzy
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Espace insécable au 3e niveau et une espace fine insécable au 4e niveau"
+
+#: ../rules/base.xml.in.h:812
+#, fuzzy
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Espace insécable au 3e niveau et rien au 4e niveau"
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:814
+#, fuzzy
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Espace insécable au 3e niveau et une espace fine insécable au 4e niveau"
+
+#: ../rules/base.xml.in.h:815
+#, fuzzy
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Espace insécable au 3e niveau et rien au 4e niveau"
+
+#: ../rules/base.xml.in.h:816
+#, fuzzy
+msgid "ak"
+msgstr "Pak"
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr ""
+
+#: ../rules/base.xml.in.h:818
+#, fuzzy
+msgid "ar"
+msgstr "Zar"
+
+#: ../rules/base.xml.in.h:819
+#, fuzzy
+msgid "avn"
+msgstr "Ban"
+
+#: ../rules/base.xml.in.h:820
+#, fuzzy
+msgid "az"
+msgstr "Kaz"
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr ""
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr ""
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr ""
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr ""
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:826
+#, fuzzy
+msgid "brl"
+msgstr "Brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr ""
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr ""
+
+#: ../rules/base.xml.in.h:829
+#, fuzzy
+msgid "che"
+msgstr "Che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr ""
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr ""
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr ""
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr ""
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr ""
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr ""
+
+#: ../rules/base.xml.in.h:837
+#, fuzzy
+msgid "en"
+msgstr "Menu"
+
+#: ../rules/base.xml.in.h:838
+#, fuzzy
+msgid "eo"
+msgstr "Geo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr ""
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr ""
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr ""
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr ""
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr ""
+
+#: ../rules/base.xml.in.h:847
+#, fuzzy
+msgid "gr"
+msgstr "Bgr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:849
+#, fuzzy
+msgid "ha"
+msgstr "Gha"
+
+#: ../rules/base.xml.in.h:850
+#, fuzzy
+msgid "he"
+msgstr "Che"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:853
+#, fuzzy
+msgid "hu"
+msgstr "Bhu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr ""
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr ""
+
+#: ../rules/base.xml.in.h:856
+#, fuzzy
+msgid "ig"
+msgstr "Nig"
+
+#: ../rules/base.xml.in.h:857
+#, fuzzy
+msgid "ike"
+msgstr "Touches Logo"
+
+#: ../rules/base.xml.in.h:858
+#, fuzzy
+msgid "in"
+msgstr "Fin"
+
+#: ../rules/base.xml.in.h:859
+#, fuzzy
+msgid "irq"
+msgstr "Irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr ""
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr ""
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr ""
+
+#: ../rules/base.xml.in.h:863
+#, fuzzy
+msgid "ka"
+msgstr "Akan"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr ""
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr ""
+
+#: ../rules/base.xml.in.h:867
+#, fuzzy
+msgid "kn"
+msgstr "Akan"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr ""
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr ""
+
+#: ../rules/base.xml.in.h:870
+#, fuzzy
+msgid "kut"
+msgstr "Yacoute"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:872
+#, fuzzy
+msgid "lt"
+msgstr "Mlt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr ""
+
+#: ../rules/base.xml.in.h:874
+#, fuzzy
+msgid "mi"
+msgstr "Komi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr ""
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr ""
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr ""
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr ""
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr ""
+
+#: ../rules/base.xml.in.h:883
+#, fuzzy
+msgid "or"
+msgstr "Kor"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr ""
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr ""
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr ""
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr ""
+
+#: ../rules/base.xml.in.h:889
+#, fuzzy
+msgid "ro"
+msgstr "Pro"
+
+#: ../rules/base.xml.in.h:890
+#, fuzzy
+msgid "ru"
+msgstr "Ourdou"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr ""
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr ""
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr ""
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:895
+#, fuzzy
+msgid "sl"
+msgstr "Isl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr ""
+
+#: ../rules/base.xml.in.h:897
+#, fuzzy
+msgid "sr"
+msgstr "Isr"
+
+#: ../rules/base.xml.in.h:898
+#, fuzzy
+msgid "srp"
+msgstr "Esp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr ""
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr ""
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr ""
+
+#: ../rules/base.xml.in.h:902
+#, fuzzy
+msgid "ta"
+msgstr "Ita"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr ""
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr ""
+
+#: ../rules/base.xml.in.h:905
+#, fuzzy
+msgid "th"
+msgstr "Eth"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:911
+#, fuzzy
+msgid "ur"
+msgstr "Tur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr ""
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr ""
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr ""
#: ../rules/base.extras.xml.in.h:1
msgid "APL"
msgstr "APL"
#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Atsina"
+msgid "Iran"
+msgstr "Iran"
#: ../rules/base.extras.xml.in.h:3
-msgid "Combining accents instead of dead keys"
-msgstr "Combining accents instead of dead keys"
+msgid "Iran - Avestan"
+msgstr ""
#: ../rules/base.extras.xml.in.h:4
-msgid "Couer D'alene Salish"
-msgstr "Coeur d'Alene Salish"
+msgid "Lithuania"
+msgstr "Lituanie"
#: ../rules/base.extras.xml.in.h:5
-msgid "International (AltGr Unicode combining)"
-msgstr "International (AltCar et Unicode)"
+#, fuzzy
+msgid "Lithuania - Dvorak"
+msgstr "Lituanie"
#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining, alternative)"
+msgid "Ltu"
+msgstr "Ltu"
+
+#: ../rules/base.extras.xml.in.h:7
+msgid "Romania"
+msgstr "Roumanie"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rou"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Russie"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Serbie"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Serbie - Touches mortes remplacées par des accents combinatoires"
+
+#: ../rules/base.extras.xml.in.h:14
+#, fuzzy
+msgid "Srb"
+msgstr "SrL"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "USA"
+
+#: ../rules/base.extras.xml.in.h:16
+#, fuzzy
+msgid "USA - Atsina"
+msgstr "Atsina"
+
+#: ../rules/base.extras.xml.in.h:17
+#, fuzzy
+msgid "USA - Couer D'alene Salish"
+msgstr "Coeur d'Alene Salish"
+
+#: ../rules/base.extras.xml.in.h:18
+#, fuzzy
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "International (AltCar et Unicode)"
+
+#: ../rules/base.extras.xml.in.h:19
+#, fuzzy
+msgid "USA - International (AltGr Unicode combining, alternative)"
msgstr "International (AltCar et Unicode, alternatif))"
+#~ msgid "(F)"
+#~ msgstr "(F)"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "ACPI Standard"
+#~ msgstr "ACPI standard"
+
+#~ msgid "Alb"
+#~ msgstr "Alb"
+
+#~ msgid "Alt-Q"
+#~ msgstr "Alt-Q"
+
+#~ msgid "Alternative"
+#~ msgstr "Autre"
+
+#~ msgid "And"
+#~ msgstr "And"
+
+#~ msgid "Andorra"
+#~ msgstr "Andorre"
+
+#~ msgid "Ara"
+#~ msgstr "Ara"
+
+#~ msgid "Arm"
+#~ msgstr "Arm"
+
+#~ msgid "Aze"
+#~ msgstr "Aze"
+
+#~ msgid "Bangladesh"
+#~ msgstr "Bangladesh"
+
+#~ msgid "Bel"
+#~ msgstr "Bel"
+
+#~ msgid "Bhutan"
+#~ msgstr "Bhoutan"
+
+#~ msgid "Bih"
+#~ msgstr "Bih"
+
+#~ msgid "Blr"
+#~ msgstr "Blr"
+
+#~ msgid "Bosnia and Herzegovina"
+#~ msgstr "Bosnie-Herzégovine"
+
+#~ msgid "Bra"
+#~ msgstr "Bra"
+
+#~ msgid "Brazil"
+#~ msgstr "Brésil"
+
+#~ msgid "Breton"
+#~ msgstr "Breton"
+
+#~ msgid "CRULP"
+#~ msgstr "CRULP"
+
+#~ msgid "Can"
+#~ msgstr "Can"
+
+#~ msgid "Canada"
+#~ msgstr "Canada"
+
+#~ msgid "CapsLock"
+#~ msgstr "Verr. Maj."
+
+#~ msgid "Cedilla"
+#~ msgstr "Cédille"
+
+#~ msgid "Chuvash"
+#~ msgstr "Chuvash"
+
+#~ msgid "Classic"
+#~ msgstr "Classique"
+
+#~ msgid "Colemak"
+#~ msgstr "Colemak"
+
+#~ msgid "Cyrillic"
+#~ msgstr "Cyrillique"
+
+#~ msgid "Cze"
+#~ msgstr "Cze"
+
+#~ msgid "DOS"
+#~ msgstr "DOS"
+
+#~ msgid "DRC"
+#~ msgstr "RDC"
+
+#~ msgid "Dan"
+#~ msgstr "Dan"
+
+#~ msgid "Dead acute"
+#~ msgstr "Touche morte d'accent aigu"
+
+#~ msgid "Denmark"
+#~ msgstr "Danemark"
+
+#~ msgid "Deu"
+#~ msgstr "Deu"
+
+#~ msgid "Dvorak"
+#~ msgstr "Dvorak"
+
+#~ msgid "Dvorak international"
+#~ msgstr "Dvorak international"
+
+#~ msgid "E"
+#~ msgstr "E"
+
+#~ msgid "Eastern"
+#~ msgstr "Orientale"
+
+#~ msgid "Epo"
+#~ msgstr "Epo"
+
+#~ msgid "Ergonomic"
+#~ msgstr "Ergonomique"
+
+#~ msgid "Est"
+#~ msgstr "Est"
+
+#~ msgid "Ethiopia"
+#~ msgstr "Éthiopie"
+
+#~ msgid "Evdev-managed keyboard"
+#~ msgstr "Clavier piloté par evdev"
+
+#~ msgid "Extended"
+#~ msgstr "Étendue"
+
+#~ msgid "Fao"
+#~ msgstr "Fao"
+
+#~ msgid "Finland"
+#~ msgstr "Finlande"
+
+#~ msgid "Fra"
+#~ msgstr "Fra"
+
+#~ msgid "France"
+#~ msgstr "France"
+
+#~ msgid "Georgia"
+#~ msgstr "Géorgie"
+
+#~ msgid "Ghana"
+#~ msgstr "Ghana"
+
+#~ msgid "Gre"
+#~ msgstr "Gre"
+
+#~ msgid "Gui"
+#~ msgstr "Gui"
+
+#~ msgid "Guinea"
+#~ msgstr "Guinée"
+
+#~ msgid "Homophonic"
+#~ msgstr "Homophone"
+
+#~ msgid "Hrv"
+#~ msgstr "Hrv"
+
+#~ msgid "Hun"
+#~ msgstr "Hun"
+
+#~ msgid "Ind"
+#~ msgstr "Ind"
+
+#~ msgid "Ireland"
+#~ msgstr "Irlande"
+
+#~ msgid "Irl"
+#~ msgstr "Irl"
+
+#~ msgid "Irn"
+#~ msgstr "Irn"
+
+#~ msgid "Israel"
+#~ msgstr "Israël"
+
+#~ msgid "Jpn"
+#~ msgstr "Jpn"
+
+#~ msgid "Kalmyk"
+#~ msgstr "Kalmyk"
+
+#~ msgid "Kana"
+#~ msgstr "Kana"
+
+#~ msgid "Kgz"
+#~ msgstr "Kgz"
+
+#~ msgid "Khm"
+#~ msgstr "Khm"
+
+#~ msgid "Korea, Republic of"
+#~ msgstr "Corée, République de"
+
+#~ msgid "Ktunaxa"
+#~ msgstr "Ktunaxa"
+
+#~ msgid "LAm"
+#~ msgstr "LAm"
+
+#~ msgid "LEKP"
+#~ msgstr "LEKP"
+
+#~ msgid "LEKPa"
+#~ msgstr "LEKPa"
+
+#~ msgid "Laos"
+#~ msgstr "Laos"
+
+#~ msgid "Latin"
+#~ msgstr "Latin"
+
+#~ msgid "Lav"
+#~ msgstr "Lav"
+
+#~ msgid "Left hand"
+#~ msgstr "Main gauche"
+
+#~ msgid "MESS"
+#~ msgstr "MESS"
+
+#~ msgid "MNE"
+#~ msgstr "MNE"
+
+#~ msgid "Mal"
+#~ msgstr "Mal"
+
+#~ msgid "Maldives"
+#~ msgstr "Maldives"
+
+#~ msgid "Mao"
+#~ msgstr "Mao"
+
+#~ msgid "Maori"
+#~ msgstr "Maori"
+
+#~ msgid "Mkd"
+#~ msgstr "Mkd"
+
+#~ msgid "Mmr"
+#~ msgstr "Mmr"
+
+#~ msgid "Mng"
+#~ msgstr "Mng"
+
+#~ msgid "Myanmar"
+#~ msgstr "Myanmar"
+
+#~ msgid "NLA"
+#~ msgstr "NLA"
+
+#~ msgid "Nativo"
+#~ msgstr "Nativo"
+
+#~ msgid "Neo 2"
+#~ msgstr "Neo 2"
+
+#~ msgid "Nep"
+#~ msgstr "Nep"
+
+#~ msgid "Netherlands"
+#~ msgstr "Pays-Bas"
+
+#~ msgid "Nigeria"
+#~ msgstr "Nigeria"
+
+#~ msgid "Nld"
+#~ msgstr "Nld"
+
+#~ msgid "Nor"
+#~ msgstr "Nor"
+
+#~ msgid "Norway"
+#~ msgstr "Norvège"
+
+#~ msgid "OLPC Dari"
+#~ msgstr "OLPC Dari"
+
+#~ msgid "OLPC Pashto"
+#~ msgstr "OLPC Pashto"
+
+#~ msgid "OLPC Southern Uzbek"
+#~ msgstr "OLPC Ouzbek du Sud"
+
+#~ msgid "Occitan"
+#~ msgstr "Occitan"
+
+#~ msgid "Ogham"
+#~ msgstr "Ogham"
+
+#~ msgid "Ossetian"
+#~ msgstr "Ossétie"
+
+#~ msgid "Phonetic"
+#~ msgstr "Phonétique"
+
+#~ msgid "Phonetic Winkeys"
+#~ msgstr "Touches Logo phonétiques"
+
+#~ msgid "Pol"
+#~ msgstr "Pol"
+
+#~ msgid "Poland"
+#~ msgstr "Pologne"
+
+#~ msgid "Probhat"
+#~ msgstr "Probhat"
+
+#~ msgid "Prt"
+#~ msgstr "Prt"
+
+#~ msgid "SRB"
+#~ msgstr "SRB"
+
+#~ msgid "ScrollLock"
+#~ msgstr "Arrêt défil."
+
+#~ msgid "Simple"
+#~ msgstr "Simple"
+
+#~ msgid "Southern Uzbek"
+#~ msgstr "Ouzbek du Sud"
+
+#~ msgid "Spain"
+#~ msgstr "Espagne"
+
+#~ msgid "Sri Lanka"
+#~ msgstr "Sri Lanka"
+
+#~ msgid "Standard"
+#~ msgstr "Standard"
+
+#~ msgid "Svk"
+#~ msgstr "Svk"
+
+#~ msgid "Svn"
+#~ msgstr "Svn"
+
+#~ msgid "Swe"
+#~ msgstr "Sué"
+
+#~ msgid "Syr"
+#~ msgstr "Syr"
+
+#~ msgid "Syria"
+#~ msgstr "Syrie"
+
+#~ msgid "Tatar"
+#~ msgstr "Tatar"
+
+#~ msgid "Tha"
+#~ msgstr "Tha"
+
+#~ msgid "Tibetan"
+#~ msgstr "Tibétain"
+
+#~ msgid "Tifinagh"
+#~ msgstr "Tifinagh"
+
+#~ msgid "Tjk"
+#~ msgstr "Tjk"
+
+#~ msgid "Typewriter"
+#~ msgstr "Machine à écrire"
+
+#~ msgid "Udmurt"
+#~ msgstr "Oudmourte"
+
+#~ msgid "Ukr"
+#~ msgstr "Ukr"
+
+#~ msgid "United Kingdom"
+#~ msgstr "Royaume-Uni"
+
+#~ msgid "Uzb"
+#~ msgstr "Uzb"
+
+#~ msgid "Vnm"
+#~ msgstr "Vnm"
+
+#~ msgid "Western"
+#~ msgstr "Occidentale"
+
+#~ msgid "With guillemets"
+#~ msgstr "Avec guillemets"
+
+#~ msgid "azerty"
+#~ msgstr "azerty"
+
+#~ msgid "digits"
+#~ msgstr "chiffres"
+
+#~ msgid "lyx"
+#~ msgstr "lyx"
+
+#~ msgid "qwertz"
+#~ msgstr "qwertz"
+
#~ msgid "Baltic+"
#~ msgstr "Baltic+"
@@ -2811,9 +4493,6 @@ msgstr "International (AltCar et Unicode, alternatif))"
#~ msgid "Keypad"
#~ msgstr "Pavé numérique"
-#~ msgid "Pro"
-#~ msgstr "Pro"
-
#~ msgid "Pro Keypad"
#~ msgstr "Pavé Pro"
@@ -2823,15 +4502,9 @@ msgstr "International (AltCar et Unicode, alternatif))"
#~ msgid "Brazilian ABNT2"
#~ msgstr "ABNT2 brésilien"
-#~ msgid "Japanese 106-key"
-#~ msgstr "Japonais 106 touches"
-
#~ msgid "Kir"
#~ msgstr "Kir"
-#~ msgid "Korean 106-key"
-#~ msgstr "Coréen 106 touches"
-
#~ msgid "Super is mapped to Win keys"
#~ msgstr "Super est obtenu avec n'importe quelle touche Logo"
@@ -2970,9 +4643,6 @@ msgstr "International (AltCar et Unicode, alternatif))"
#~ msgid "Third level choosers"
#~ msgstr "Sélecteur du 3e niveau"
-#~ msgid "Urdu"
-#~ msgstr "Ourdou"
-
#~ msgid "(Legacy) Dvorak"
#~ msgstr "(Obsolète) Dvorak"
diff --git a/xorg-server/xkeyboard-config/po/it.po b/xorg-server/xkeyboard-config/po/it.po
index 7250b1033..d336ccc3d 100644
--- a/xorg-server/xkeyboard-config/po/it.po
+++ b/xorg-server/xkeyboard-config/po/it.po
@@ -1,3341 +1,4546 @@
-# Italian translation for xkeyboard-config
-# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
-# This file is distributed under the same license as the xkeyboard-config package.
-#
-# Il file rules.xml è composto da tre parti
-# <modelList> - elenca i modelli di tastiera riconosciuti
-# <layoutList> - elenca le disposizioni di tastiera applicabili
-# e le loro varianti
-# <optionList> - elenca le opzioni selezionabili per le disposizioni
-# (opzioni visibili per esempio nel sottodialogo "Altre opzioni"
-# dello strumento di preferenze Tastiera di GNOME)
-#
-#
-# Per i modelli in genere non serve usare particolari traduzioni, visto che
-# è il nome proprio con cui il vendor commercializza il prodotto
-#
-# Le disposizioni spesso sono i nomi della lingua, ma sono presenti anche casi
-# in cui la variante è descritta nel modo in cui "appare" la tastiera
-#
-# Le opzioni sarebbero facili, se non fosse che mentre nel file XML originale
-# sono disposte in maniera gerarchica, qui nel PO vengono spalmate qua e là
-# per colpa dell'ordinamento alfabetico. Per questo ho riportato i vari gruppi
-# come appaiono, basta cercare optionList
-#
-# ## Glossario ##
-#
-# legacy --> vecchia maniera
-# dead keys --> tasti muti
-# eliminate dead keys --> tasti muti esclusi
-# to map --> applicare
-# non-breakable --> non interrompibile ??
-#
-# Luca Ferretti <elle.uca@infinito.it>, 2005, 2006, 2007, 2008, 2009, 2010.
-msgid ""
-msgstr ""
-"Project-Id-Version: xkeyboard-config 2.0\n"
-"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2010-09-15 21:57+0100\n"
-"PO-Revision-Date: 2010-09-16 13:22+0200\n"
-"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
-"Language-Team: Italian <tp@lists.linux.it>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-# tasto per scegliere il terzo livello: |...|
-# posizione tasto compose: |...|
-#: ../rules/base.xml.in.h:1
-msgid "&lt;Less/Greater&gt;"
-msgstr "&lt;Minore/Maggiore&gt;"
-
-# tasto per scegliere il quinto livello: |...|
-#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Minore/Maggiore&gt; sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello"
-
-# tasto per scegliere il quinto livello: |...|
-#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Minore/Maggiore&gt; sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
-
-# variante turca
-#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr "(F)"
-
-#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr "Alternativa (vecchia maniera)"
-
-#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "Alternativa, tasti muti Sun (vecchia maniera)"
-
-#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "Alternativa, tasti muti rimossi (vecchia maniera)"
-
-#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr "Compatibile 101/104 tasti"
-
-#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/virgola/tasti muti"
-
-#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/virgola/tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/punto/tasti muti"
-
-#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/punto/tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/virgola/tasti muti"
-
-#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwertz/virgola/tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/punto/tasti muti"
-
-#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/punto/tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/virgola/tasti muti"
-
-#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/virgola/tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/punto/tasti muti"
-
-#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/punto/tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/virgola/tasti muti"
-
-#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/virgola/tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/punto/tasti muti"
-
-#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/punto/tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:25
-msgid "2"
-msgstr "2"
-
-#: ../rules/base.xml.in.h:26
-msgid "4"
-msgstr "4"
-
-#: ../rules/base.xml.in.h:27
-msgid "5"
-msgstr "5"
-
-#: ../rules/base.xml.in.h:28
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
-
-#: ../rules/base.xml.in.h:29
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
-
-#: ../rules/base.xml.in.h:30
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
-
-#: ../rules/base.xml.in.h:31
-msgid "ATM/phone-style"
-msgstr "ATM/tipo telefono"
-
-#: ../rules/base.xml.in.h:32
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
-
-#: ../rules/base.xml.in.h:33
-msgid "Acer C300"
-msgstr "Acer C300"
-
-#: ../rules/base.xml.in.h:34
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
-
-#: ../rules/base.xml.in.h:35
-msgid "Acer Laptop"
-msgstr "Portatile Acer"
-
-#: ../rules/base.xml.in.h:36
-msgid "Add the standard behavior to Menu key"
-msgstr "Aggiungere il comportamento standard al tasto Menu"
-
-# optionList: esperanto
-#: ../rules/base.xml.in.h:37
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Aggiunta dei circonflessi Esperanto (supersigno)"
-
-# optionList: eurosign
-# descrizione: Special shortcuts for the Euro character
-#: ../rules/base.xml.in.h:38
-msgid "Adding EuroSign to certain keys"
-msgstr "Aggiunta del simbolo € a determinati tasti"
-
-#: ../rules/base.xml.in.h:39
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
-
-#: ../rules/base.xml.in.h:40
-msgid "Afg"
-msgstr "AFG"
-
-# UE
-#: ../rules/base.xml.in.h:41
-msgid "Afghanistan"
-msgstr "Afghanistan"
-
-# variante per Ghana
-#: ../rules/base.xml.in.h:42
-msgid "Akan"
-msgstr "Akan"
-
-#: ../rules/base.xml.in.h:43
-msgid "Alb"
-msgstr "ALB"
-
-# UE
-#: ../rules/base.xml.in.h:44
-msgid "Albania"
-msgstr "Albania"
-
-#: ../rules/base.xml.in.h:45
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt e Meta sono sui tasti Alt"
-
-# to map, pare che in termini matematici voglia dire applicare
-#: ../rules/base.xml.in.h:46
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt è applicato al tasto Win destro, Super al tasto Menu"
-
-#: ../rules/base.xml.in.h:47
-msgid "Alt+Caps Lock"
-msgstr "Alt+BlocMaiusc"
-
-#: ../rules/base.xml.in.h:48
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
-
-#: ../rules/base.xml.in.h:49
-msgid "Alt+Shift"
-msgstr "Alt+Maiusc"
-
-#: ../rules/base.xml.in.h:50
-msgid "Alt+Space"
-msgstr "Alt+Spazio"
-
-#: ../rules/base.xml.in.h:51
-msgid "Alt-Q"
-msgstr "Alt-Q"
-
-# optionList: altwin
-# descrizione: Using special PC keys (Win, Menu) to work as standard X keys
-# (Super, Hyper, etc.)
-#: ../rules/base.xml.in.h:52
-msgid "Alt/Win key behavior"
-msgstr "Comportamento tasto Alt/Win"
-
-#: ../rules/base.xml.in.h:53
-msgid "Alternative"
-msgstr "Alternativa"
-
-#: ../rules/base.xml.in.h:54
-msgid "Alternative Eastern"
-msgstr "Alternativa orientale"
-
-#: ../rules/base.xml.in.h:55
-msgid "Alternative Phonetic"
-msgstr "Alternativa fonetica"
-
-#: ../rules/base.xml.in.h:56
-msgid "Alternative international"
-msgstr "Internazionale alternativa"
-
-#: ../rules/base.xml.in.h:57
-msgid "Alternative, Sun dead keys"
-msgstr "Alternativa, tasti muti Sun"
-
-#: ../rules/base.xml.in.h:58
-msgid "Alternative, eliminate dead keys"
-msgstr "Alternativa, tasti muti rimossi"
-
-#: ../rules/base.xml.in.h:59
-msgid "Alternative, latin-9 only"
-msgstr "Alternativa, solo latin-9"
-
-# Andorra
-#: ../rules/base.xml.in.h:60
-msgid "And"
-msgstr "AND"
-
-#: ../rules/base.xml.in.h:61
-msgid "Andorra"
-msgstr "Andorra"
-
-#: ../rules/base.xml.in.h:62
-msgid "Any Alt key"
-msgstr "Ogni tasto Alt"
-
-#: ../rules/base.xml.in.h:63
-msgid "Any Win key"
-msgstr "Ogni tasto Win"
-
-#: ../rules/base.xml.in.h:64
-msgid "Any Win key (while pressed)"
-msgstr "Ogni tasto Win (mentre è premuto)"
-
-#: ../rules/base.xml.in.h:65
-msgid "Apostrophe (') variant"
-msgstr "Variante apostrofo (')"
-
-#: ../rules/base.xml.in.h:66
-msgid "Apple"
-msgstr "Apple"
-
-#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Apple Keyboard alluminio (ANSI)"
-
-#: ../rules/base.xml.in.h:68
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Apple Keyboard alluminio (ISO)"
-
-#: ../rules/base.xml.in.h:69
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Apple Keyboard alluminio (JIS)"
-
-#: ../rules/base.xml.in.h:70
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Apple Keyboard alluminio: emula tasti PC (Stamp, BlocScorr, Pausa, BlocNum)"
-
-#: ../rules/base.xml.in.h:71
-msgid "Apple Laptop"
-msgstr "Portatile Apple"
-
-#: ../rules/base.xml.in.h:72
-msgid "Ara"
-msgstr "Ara"
-
-# nel senso di layout/disposizione e usato nell'elenco di nazioni.
-#: ../rules/base.xml.in.h:73
-msgid "Arabic"
-msgstr "Araba"
-
-#: ../rules/base.xml.in.h:74
-msgid "Arm"
-msgstr "ARM"
-
-# UE
-#: ../rules/base.xml.in.h:75
-msgid "Armenia"
-msgstr "Armenia"
-
-# punto sottoscritto stando a http://it.wikipedia.org/wiki/Diacritico
-# Grazie a Daniele Forsi
-#
-#: ../rules/base.xml.in.h:76
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Variante asturiana con H punto sottoscritto e L punto sottoscritto"
-
-#: ../rules/base.xml.in.h:77
-msgid "Asus Laptop"
-msgstr "Portatile Asus"
-
-#: ../rules/base.xml.in.h:78
-msgid "At bottom left"
-msgstr "In basso a sinistra"
-
-#: ../rules/base.xml.in.h:79
-msgid "At left of 'A'"
-msgstr "A sinistra di \"A\""
-
-# UE
-#: ../rules/base.xml.in.h:80
-msgid "Austria"
-msgstr "Austria"
-
-# ISO per austria
-#: ../rules/base.xml.in.h:81
-msgid "Aut"
-msgstr "AUT"
-
-# variante per tastiera ghana
-#: ../rules/base.xml.in.h:82
-msgid "Avatime"
-msgstr "Avatime"
-
-#: ../rules/base.xml.in.h:83
-msgid "Aze"
-msgstr "AZE"
-
-# UE
-#: ../rules/base.xml.in.h:84
-msgid "Azerbaijan"
-msgstr "Azerbaigian"
-
-#: ../rules/base.xml.in.h:85
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 wireless Internet Keyboard"
-
-#: ../rules/base.xml.in.h:86
-msgid "BTC 5090"
-msgstr "BTC 5090"
-
-#: ../rules/base.xml.in.h:87
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF Multimedia"
-
-#: ../rules/base.xml.in.h:88
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
-
-#: ../rules/base.xml.in.h:89
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
-
-#: ../rules/base.xml.in.h:90
-msgid "BTC 9000"
-msgstr "BTC 9000"
-
-#: ../rules/base.xml.in.h:91
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
-
-#: ../rules/base.xml.in.h:92
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
-
-#: ../rules/base.xml.in.h:93
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
-
-#: ../rules/base.xml.in.h:94
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Wireless Internet and Gaming"
-
-#: ../rules/base.xml.in.h:95
-msgid "Backslash"
-msgstr "Backslash"
-
-# UE
-#: ../rules/base.xml.in.h:96
-msgid "Bangladesh"
-msgstr "Bangladesh"
-
-# Variante russa http://it.wikipedia.org/wiki/Baschiri
-#: ../rules/base.xml.in.h:97
-msgid "Bashkirian"
-msgstr "Baschira"
-
-# codice tre lettere per belgio
-#: ../rules/base.xml.in.h:98
-msgid "Bel"
-msgstr "BEL"
-
-# UE
-#: ../rules/base.xml.in.h:99
-msgid "Belarus"
-msgstr "Bielorussia"
-
-# UE
-#: ../rules/base.xml.in.h:100
-msgid "Belgium"
-msgstr "Belgio"
-
-#: ../rules/base.xml.in.h:101
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
-
-#: ../rules/base.xml.in.h:102
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
-
-#: ../rules/base.xml.in.h:103
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
-
-# variante per india
-#: ../rules/base.xml.in.h:104
-msgid "Bengali"
-msgstr "Bengali"
-
-# variante per bengali, credo sia fonetico (crf www.bengalinux.org)
-#: ../rules/base.xml.in.h:105
-msgid "Bengali Probhat"
-msgstr "Bengali probhat"
-
-# variante francese
-#: ../rules/base.xml.in.h:106
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ergonomica, tipo Dvorak"
-
-# variante francese
-#: ../rules/base.xml.in.h:107
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ergonomica, tipo Dvorak, solo latin-9"
-
-# codice tre lettere per bangladesh
-#: ../rules/base.xml.in.h:108
-msgid "Bgd"
-msgstr "BGD"
-
-# codice tre lettere per bulgaria
-#: ../rules/base.xml.in.h:109
-msgid "Bgr"
-msgstr "BGR"
-
-# UE
-#: ../rules/base.xml.in.h:110
-msgid "Bhutan"
-msgstr "Bhutan"
-
-#: ../rules/base.xml.in.h:111
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Ebreo biblico (Tiro)"
-
-# codice tre lettere per bosnia-erz
-#: ../rules/base.xml.in.h:112
-msgid "Bih"
-msgstr "BIH"
-
-# codice tre lettere per bielorussia
-#: ../rules/base.xml.in.h:113
-msgid "Blr"
-msgstr "BLR"
-
-# UE
-#: ../rules/base.xml.in.h:114
-msgid "Bosnia and Herzegovina"
-msgstr "Bosnia-Erzegovina"
-
-#: ../rules/base.xml.in.h:115
-msgid "Both Alt keys together"
-msgstr "Entrambi i tasti Alt insieme"
-
-#: ../rules/base.xml.in.h:116
-msgid "Both Ctrl keys together"
-msgstr "Entrambi i tasti Ctrl insieme"
-
-#: ../rules/base.xml.in.h:117
-msgid "Both Shift keys together"
-msgstr "Entrambi i tasti Maiusc insieme"
-
-#: ../rules/base.xml.in.h:118
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "Entrambi i tasti Maiusc insieme commutano BloccaMaiusc"
-
-# UE
-#: ../rules/base.xml.in.h:119
-msgid "Botswana"
-msgstr "Botswana"
-
-#: ../rules/base.xml.in.h:120
-msgid "Bra"
-msgstr "BRA"
-
-#: ../rules/base.xml.in.h:121
-msgid "Braille"
-msgstr "Braille"
-
-# UE
-#: ../rules/base.xml.in.h:122
-msgid "Brazil"
-msgstr "Brasile"
-
-# bre in iso639
-#: ../rules/base.xml.in.h:123
-msgid "Breton"
-msgstr "Bretone"
-
-# Braille, shortDesc
-#: ../rules/base.xml.in.h:124
-msgid "Brl"
-msgstr "Brl"
-
-#: ../rules/base.xml.in.h:125
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internet Keyboard"
-
-# codice 3 lettere per bhutan
-#: ../rules/base.xml.in.h:126
-msgid "Btn"
-msgstr "BTN"
-
-# variante araba
-#: ../rules/base.xml.in.h:127
-msgid "Buckwalter"
-msgstr "Buckwalter"
-
-# UE
-#: ../rules/base.xml.in.h:128
-msgid "Bulgaria"
-msgstr "Bulgaria"
-
-# codice 3 lettere per botswana
-#: ../rules/base.xml.in.h:129
-msgid "Bwa"
-msgstr "BWA"
-
-# codice tre lettere per congo
-#: ../rules/base.xml.in.h:130
-msgid "COD"
-msgstr "COD"
-
-# variante pakistana
-#: ../rules/base.xml.in.h:131
-msgid "CRULP"
-msgstr "CRULP"
-
-#: ../rules/base.xml.in.h:132
-msgid "Cambodia"
-msgstr "Cambogia"
-
-#: ../rules/base.xml.in.h:133
-msgid "Can"
-msgstr "CAN"
-
-# UE
-#: ../rules/base.xml.in.h:134
-msgid "Canada"
-msgstr "Canada"
-
-#: ../rules/base.xml.in.h:135
-msgid "Caps Lock"
-msgstr "BlocMaiusc"
-
-# per come appare, tradurre il "to" è superfluo
-#: ../rules/base.xml.in.h:136
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "BlocMaiusc (prima disposizione), Maiusc+BlocMaiusc (ultima disposizione)"
-
-#: ../rules/base.xml.in.h:137
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "BlocMaiusc (mentre è premuto), Alt+BlocMaiusc esegue l'azione blocca maiuscole originale"
-
-#: ../rules/base.xml.in.h:138
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "BlocMaiusc agisce come Maiusc con il blocco. Maiusc \"mette in pausa\" BlocMaiusc"
-
-#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "BlocMaiusc agisce come Maiusc con il blocco. Maiusc non ha effetto su BlocMaiusc"
-
-#: ../rules/base.xml.in.h:140
-msgid "Caps Lock is disabled"
-msgstr "BlocMaiusc è disabilitato"
-
-# optionList: caps
-# descrizione: CapsLock tweaks. "Internal" capitalization means capitalization
-# using some internal tables. Otherwise "as Shift" - means using next group
-#: ../rules/base.xml.in.h:141
-msgid "Caps Lock key behavior"
-msgstr "Comportamento tasto BlocMaiusc"
-
-#: ../rules/base.xml.in.h:142
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "BlocMaiusc commuta Maiusc così da avere effetto su tutti i tasti"
-
-#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr "BlocMaiusc commuta l'uso normale delle lettere maiuscole dei caratteri alfabetici"
-
-# "Internal" capitalization means capitalization using some internal tables.
-# Otherwise "as Shift" - means using next group.
-#: ../rules/base.xml.in.h:144
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr "BlocMaiusc fa uso interno delle lettere maiuscole. Maiusc \"mette in pausa\" BlocMaiusc"
-
-#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr "BlocMaiusc fa uso interno delle lettere maiuscole. Maiusc non ha effetto su BlocMaiusc"
-
-# FIXME... trovare traduzione middle-dot
-#: ../rules/base.xml.in.h:146
-msgid "Catalan variant with middle-dot L"
-msgstr "Variante catalano con L middle-dot"
-
-# variante romena (wikipedia mette la gl)
-#: ../rules/base.xml.in.h:147
-msgid "Cedilla"
-msgstr "Cediglia"
-
-# codice tre lettere per la svizzera
-#: ../rules/base.xml.in.h:148
-msgid "Che"
-msgstr "CHE"
-
-# variante USA
-#: ../rules/base.xml.in.h:149
-msgid "Cherokee"
-msgstr "Cherokee"
-
-#: ../rules/base.xml.in.h:150
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UNLIMITED"
-
-#: ../rules/base.xml.in.h:151
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
-
-#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (opzione alternativa)"
-
-#: ../rules/base.xml.in.h:153
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
-
-#: ../rules/base.xml.in.h:154
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
-
-#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
-
-#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master XPress"
-msgstr "Cherry CyMotion Master XPress"
-
-#: ../rules/base.xml.in.h:157
-msgid "Chicony Internet Keyboard"
-msgstr "Chicony Internet Keyboard"
-
-#: ../rules/base.xml.in.h:158
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
-
-#: ../rules/base.xml.in.h:159
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
-
-#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
-
-# UE
-#: ../rules/base.xml.in.h:161
-msgid "China"
-msgstr "Cina"
-
-# codice tre lettere per cina
-#: ../rules/base.xml.in.h:162
-msgid "Chn"
-msgstr "CHN"
-
-# variante russa
-#: ../rules/base.xml.in.h:163
-msgid "Chuvash"
-msgstr "Chuvash"
-
-# variante russa
-#: ../rules/base.xml.in.h:164
-msgid "Chuvash Latin"
-msgstr "Chuvash latin"
-
-#: ../rules/base.xml.in.h:165
-msgid "Classic"
-msgstr "Classica"
-
-#: ../rules/base.xml.in.h:166
-msgid "Classic Dvorak"
-msgstr "Dvorak classica"
-
-#: ../rules/base.xml.in.h:167
-msgid "Classic, eliminate dead keys"
-msgstr "Classica, tasti muti rimossi"
-
-#: ../rules/base.xml.in.h:168
-msgid "Classmate PC"
-msgstr "Classmate PC"
-
-#: ../rules/base.xml.in.h:169
-msgid "CloGaelach"
-msgstr "CloGaelach"
-
-# variante USA
-#: ../rules/base.xml.in.h:170
-msgid "Colemak"
-msgstr "Colemak"
-
-#: ../rules/base.xml.in.h:171
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq tastiera Easy Access"
-
-#: ../rules/base.xml.in.h:172
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internet Keyboard (13 tasti)"
-
-#: ../rules/base.xml.in.h:173
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internet Keyboard (18 tasti)"
-
-#: ../rules/base.xml.in.h:174
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internet Keyboard (7 tasti)"
-
-#: ../rules/base.xml.in.h:175
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq tastiera iPaq"
-
-# optionList: compose
-# descrizione: Tweaking the position of the "Compose" key: mapping to
-# existing PC keys
-#: ../rules/base.xml.in.h:176
-msgid "Compose key position"
-msgstr "Posizione tasto Compose"
-
-#: ../rules/base.xml.in.h:177
-msgid "Congo, Democratic Republic of the"
-msgstr "Congo, Repubblica Democratica del"
-
-#: ../rules/base.xml.in.h:178
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Backspace"
-
-#: ../rules/base.xml.in.h:179
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Control è applicato ai tasti Alt, Alt è applicato ai tasti Win"
-
-#: ../rules/base.xml.in.h:180
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control è applicato ai tasti Win (e ai soliti tasti Ctrl)"
-
-#: ../rules/base.xml.in.h:181
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
-
-# variante rumena
-#: ../rules/base.xml.in.h:182
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Tatar crimea (Dobruca-1 Q)"
-
-#: ../rules/base.xml.in.h:183
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Tatar crimea (Dobruca-2 Q)"
-
-#: ../rules/base.xml.in.h:184
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Tatar crimea (turca Alt-Q)"
-
-#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Tatar crimea (turca F)"
-
-#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Tatar crimea (turca Q)"
-
-# UE
-#: ../rules/base.xml.in.h:187
-msgid "Croatia"
-msgstr "Croazia"
-
-# optionList: ctrl
-# descrizione: Tweaking the position of the "Ctrl" key
-#: ../rules/base.xml.in.h:188
-msgid "Ctrl key position"
-msgstr "Posizione tasto Ctrl"
-
-#: ../rules/base.xml.in.h:189
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Maiusc"
-
-# UE
-#: ../rules/base.xml.in.h:190
-msgid "Cyrillic"
-msgstr "Cirillico"
-
-#: ../rules/base.xml.in.h:191
-msgid "Cyrillic with guillemets"
-msgstr "Cirillico con caporali («»)"
-
-#: ../rules/base.xml.in.h:192
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Cirillico, Z e ZHE scambiati"
-
-#: ../rules/base.xml.in.h:193
-msgid "Cze"
-msgstr "CZE"
-
-# UE
-#: ../rules/base.xml.in.h:194
-msgid "Czechia"
-msgstr "Repubblica Ceca"
-
-# variante per lingua Kalmyk
-#: ../rules/base.xml.in.h:195
-msgid "DOS"
-msgstr "DOS"
-
-#: ../rules/base.xml.in.h:196
-msgid "DTK2000"
-msgstr "DTK2000"
-
-# variante tedesca...
-#
-# rispetto alla tedesca normale cambiano due caratteri, ` e ^
-# ah, le tastiere tedesche non hanno le lettere accentate, per cui
-# probabilemente 'sta cosa è importate per il Compose
-#: ../rules/base.xml.in.h:197
-msgid "Dead acute"
-msgstr "Acuto muto"
-
-# variante tedesca...
-#
-# rispetto alla tedesca normale cambia un carattere, ^
-# ah, le tastiere tedesche non hanno le lettere accentate, per cui
-# probabilemente 'sta cosa è importate per il Compose
-#: ../rules/base.xml.in.h:198
-msgid "Dead grave acute"
-msgstr "Acuto grave muto"
-
-#: ../rules/base.xml.in.h:199
-msgid "Default numeric keypad keys"
-msgstr "Tasti predefiniti nel tastierino numerico"
-
-#: ../rules/base.xml.in.h:200
-msgid "Dell"
-msgstr "Dell"
-
-#: ../rules/base.xml.in.h:201
-msgid "Dell 101-key PC"
-msgstr "Dell 101 tasti PC"
-
-#: ../rules/base.xml.in.h:202
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Dell portatile Inspiron 6xxx/8xxx"
-
-#: ../rules/base.xml.in.h:203
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Dell portatile serie Precision M"
-
-#: ../rules/base.xml.in.h:204
-msgid "Dell Latitude series laptop"
-msgstr "Dell portatile serie Latitude"
-
-#: ../rules/base.xml.in.h:205
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
-
-#: ../rules/base.xml.in.h:206
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
-
-#: ../rules/base.xml.in.h:207
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
-
-#: ../rules/base.xml.in.h:208
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell tastiera USB multimediale"
-
-# UE
-#: ../rules/base.xml.in.h:209
-msgid "Denmark"
-msgstr "Danimarca"
-
-# codice tre lettere per germania<
-#: ../rules/base.xml.in.h:210
-msgid "Deu"
-msgstr "DEU"
-
-#: ../rules/base.xml.in.h:211
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa tastiera Wireless Desktop"
-
-#: ../rules/base.xml.in.h:212
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond serie 9801/9802"
-
-# codice tre lettere per Danimarca
-#: ../rules/base.xml.in.h:213
-msgid "Dnk"
-msgstr "DNK"
-
-#: ../rules/base.xml.in.h:214
-msgid "Dvorak"
-msgstr "Dvorak"
-
-#: ../rules/base.xml.in.h:215
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvorak (punteggiatura UK)"
-
-#: ../rules/base.xml.in.h:216
-msgid "Dvorak alternative international (no dead keys)"
-msgstr "Dvorak internazionale alternativa (senza tasti muti)"
-
-#: ../rules/base.xml.in.h:217
-msgid "Dvorak international (with dead keys)"
-msgstr "Dvorak internazionale (con tasti muti)"
-
-# variante polacca
-#: ../rules/base.xml.in.h:218
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Dvorak, virgolette polacche sul tasto 1"
-
-# da controllare..
-#: ../rules/base.xml.in.h:219
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvorak, virgolette polacche sul tasto quotemark"
-
-#: ../rules/base.xml.in.h:220
-msgid "E"
-msgstr "E"
-
-#: ../rules/base.xml.in.h:221
-msgid "Eastern"
-msgstr "Orientale"
-
-#: ../rules/base.xml.in.h:222
-msgid "Eliminate dead keys"
-msgstr "Tasti muti esclusi"
-
-#: ../rules/base.xml.in.h:223
-msgid "Enable extra typographic characters"
-msgstr "Abilitare caratteri tipografici aggiuntivi"
-
-# variante canadese
-#: ../rules/base.xml.in.h:224
-msgid "English"
-msgstr "Inglese"
-
-#: ../rules/base.xml.in.h:225
-msgid "English (USA International)"
-msgstr "Inglese (internazionale USA)"
-
-#: ../rules/base.xml.in.h:226
-msgid "English (USA Macintosh)"
-msgstr "Inglese (Macintosh USA)"
-
-#: ../rules/base.xml.in.h:227
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
-
-# lasciato enter, come nome di segnale
-# sono due uno è enter, l'altro return
-#: ../rules/base.xml.in.h:228
-msgid "Enter on keypad"
-msgstr "Enter sul tastierino numerico"
-
-# descrizione breve per Esperanto, usato codice iso639 tre lettere
-#: ../rules/base.xml.in.h:229
-msgid "Epo"
-msgstr "EPO"
-
-#: ../rules/base.xml.in.h:230
-msgid "Ergonomic"
-msgstr "Ergonomica"
-
-# codice tre lettere per spagna
-#: ../rules/base.xml.in.h:231
-msgid "Esp"
-msgstr "ESP"
-
-#: ../rules/base.xml.in.h:232
-msgid "Esperanto"
-msgstr "Esperanto"
-
-# codice tre lettere per estonia
-#: ../rules/base.xml.in.h:233
-msgid "Est"
-msgstr "EST"
-
-# UE
-#: ../rules/base.xml.in.h:234
-msgid "Estonia"
-msgstr "Estonia"
-
-# codice tre lettere per etiopia
-#: ../rules/base.xml.in.h:235
-msgid "Eth"
-msgstr "ETH"
-
-# UE
-#: ../rules/base.xml.in.h:236
-msgid "Ethiopia"
-msgstr "Etiopia"
-
-#: ../rules/base.xml.in.h:237
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
-
-# Ewe: variante del Ghana
-#: ../rules/base.xml.in.h:238
-msgid "Ewe"
-msgstr "Ewe"
-
-#: ../rules/base.xml.in.h:239
-msgid "Extended"
-msgstr "Estesa"
-
-#: ../rules/base.xml.in.h:240
-msgid "Extended - Winkeys"
-msgstr "Estesa - tasti Win"
-
-#: ../rules/base.xml.in.h:241
-msgid "Extended Backslash"
-msgstr "Backslash esteso"
-
-#: ../rules/base.xml.in.h:242
-msgid "F-letter (F) variant"
-msgstr "Variante lettera-F (F)"
-
-#: ../rules/base.xml.in.h:243
-msgid "FL90"
-msgstr "FL90"
-
-#: ../rules/base.xml.in.h:244
-msgid "Faroe Islands"
-msgstr "Isole Fær Øer"
-
-#: ../rules/base.xml.in.h:245
-msgid "Fin"
-msgstr "FIN"
-
-# UE
-#: ../rules/base.xml.in.h:246
-msgid "Finland"
-msgstr "Finlandia"
-
-#. This assumes the KP_ abstract symbols are actually useful for some apps
-#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:249
-msgid "Four-level key with abstract separators"
-msgstr "Tasto di quarto livello con separatori astratti"
-
-#: ../rules/base.xml.in.h:250
-msgid "Four-level key with comma"
-msgstr "Tasto di quarto livello con virgola"
-
-#: ../rules/base.xml.in.h:251
-msgid "Four-level key with dot"
-msgstr "Tasto di quarto livello con punto"
-
-#: ../rules/base.xml.in.h:252
-msgid "Four-level key with dot, latin-9 restriction"
-msgstr "Tasto di quarto livello con punto, restrizione latin-9"
-
-# http://en.wikipedia.org/wiki/Momayyez
-#: ../rules/base.xml.in.h:253
-msgid "Four-level key with momayyez"
-msgstr "Tasto di quarto livello con momayyez"
-
-#: ../rules/base.xml.in.h:254
-msgid "Fra"
-msgstr "FRA"
-
-# UE
-#: ../rules/base.xml.in.h:255
-msgid "France"
-msgstr "Francia"
-
-# lasciata la forma francese, magari ha un senso particolare
-# variante del mali
-#: ../rules/base.xml.in.h:256
-msgid "Français (France Alternative)"
-msgstr "Français (alternativa Francia)"
-
-#: ../rules/base.xml.in.h:257
-msgid "French"
-msgstr "Francese"
-
-#: ../rules/base.xml.in.h:258
-msgid "French (Macintosh)"
-msgstr "Francese (Macintosh)"
-
-#: ../rules/base.xml.in.h:259
-msgid "French (legacy)"
-msgstr "Francese (vecchia maniera)"
-
-#: ../rules/base.xml.in.h:260
-msgid "French Dvorak"
-msgstr "Francese Dvorak"
-
-#: ../rules/base.xml.in.h:261
-msgid "French, Sun dead keys"
-msgstr "Francese, tasti muti Sun"
-
-#: ../rules/base.xml.in.h:262
-msgid "French, eliminate dead keys"
-msgstr "Francese, tasti muti rimossi"
-
-# codice tre lettere per Isole Fær Øer
-#: ../rules/base.xml.in.h:263
-msgid "Fro"
-msgstr "FRO"
-
-#: ../rules/base.xml.in.h:264
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Portatile AMILO Fujitsu-Siemens Computers"
-
-# Fula: variante del Ghana
-#: ../rules/base.xml.in.h:265
-msgid "Fula"
-msgstr "Fula"
-
-# Codice tre lettere per U.K.
-#: ../rules/base.xml.in.h:266
-msgid "GBr"
-msgstr "GBR"
-
-# variante per tastiera ghana
-#: ../rules/base.xml.in.h:267
-msgid "GILLBT"
-msgstr "GILLBT"
-
-# Ga: variante del ghana
-#: ../rules/base.xml.in.h:268
-msgid "Ga"
-msgstr "Ga"
-
-#: ../rules/base.xml.in.h:269
-msgid "Generic 101-key PC"
-msgstr "Generica 101 tasti PC"
-
-#: ../rules/base.xml.in.h:270
-msgid "Generic 102-key (Intl) PC"
-msgstr "Generica 102 tasti (Intl) PC"
-
-#: ../rules/base.xml.in.h:271
-msgid "Generic 104-key PC"
-msgstr "Generica 104 tasti PC"
-
-#: ../rules/base.xml.in.h:272
-msgid "Generic 105-key (Intl) PC"
-msgstr "Generica 105 tasti (Intl) PC"
-
-#: ../rules/base.xml.in.h:273
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
-
-#: ../rules/base.xml.in.h:274
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-
-#: ../rules/base.xml.in.h:275
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
-
-#: ../rules/base.xml.in.h:276
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
-
-#: ../rules/base.xml.in.h:277
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
-
-#: ../rules/base.xml.in.h:278
-msgid "Geo"
-msgstr "GEO"
-
-# UE
-#: ../rules/base.xml.in.h:279
-msgid "Georgia"
-msgstr "Georgia"
-
-# Curiosamente è una variante delle tastiere italiane...
-#: ../rules/base.xml.in.h:280
-msgid "Georgian"
-msgstr "Georgiana"
-
-# Questa invece variante delle tastiere francesi
-#: ../rules/base.xml.in.h:281
-msgid "Georgian AZERTY Tskapo"
-msgstr "Georgiana AZERTY Tskapo"
-
-#: ../rules/base.xml.in.h:282
-msgid "German (Macintosh)"
-msgstr "Tedesca (Macintosh)"
-
-#: ../rules/base.xml.in.h:283
-msgid "German, Sun dead keys"
-msgstr "Tedesca, tasti muti Sun"
-
-#: ../rules/base.xml.in.h:284
-msgid "German, eliminate dead keys"
-msgstr "Tedesca, tasti muti rimossi"
-
-# UE
-#: ../rules/base.xml.in.h:285
-msgid "Germany"
-msgstr "Germania"
-
-# shortDesc per Ghana, usato codice ISO
-#: ../rules/base.xml.in.h:286
-msgid "Gha"
-msgstr "GHA"
-
-#: ../rules/base.xml.in.h:287
-msgid "Ghana"
-msgstr "Ghana"
-
-# codice tre lettere per guinea
-#: ../rules/base.xml.in.h:288
-msgid "Gin"
-msgstr "GIN"
-
-# codice tre lettere per grecia
-#: ../rules/base.xml.in.h:289
-msgid "Grc"
-msgstr "GRC"
-
-# UE
-#: ../rules/base.xml.in.h:290
-msgid "Greece"
-msgstr "Grecia"
-
-#: ../rules/base.xml.in.h:291
-msgid "Guinea"
-msgstr "Guinea"
-
-# Gujarati: variante india
-#: ../rules/base.xml.in.h:292
-msgid "Gujarati"
-msgstr "Gujarati"
-
-# Gurmukhi: variante india
-#: ../rules/base.xml.in.h:293
-msgid "Gurmukhi"
-msgstr "Gurmukhi"
-
-# Gurmukhi: variante india
-#: ../rules/base.xml.in.h:294
-msgid "Gurmukhi Jhelum"
-msgstr "Gurmukhi Jhelum"
-
-#: ../rules/base.xml.in.h:295
-msgid "Gyration"
-msgstr "Gyration"
-
-#: ../rules/base.xml.in.h:296
-msgid "Happy Hacking Keyboard"
-msgstr "Happy Hacking Keyboard"
-
-#: ../rules/base.xml.in.h:297
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Happy Hacking Keyboard per Mac"
-
-# Hausa: variante Ghana
-#: ../rules/base.xml.in.h:298
-msgid "Hausa"
-msgstr "Hausa"
-
-#: ../rules/base.xml.in.h:299
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internet Keyboard"
-
-# omesso Notebook
-#: ../rules/base.xml.in.h:300
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110"
-
-#: ../rules/base.xml.in.h:301
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
-
-#: ../rules/base.xml.in.h:302
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
-
-#: ../rules/base.xml.in.h:303
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
-
-#: ../rules/base.xml.in.h:304
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
-
-#: ../rules/base.xml.in.h:305
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
-
-#: ../rules/base.xml.in.h:306
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
-
-#: ../rules/base.xml.in.h:307
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavillion ZT11xx"
-
-#: ../rules/base.xml.in.h:308
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavillion dv5"
-
-#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard Multimedia Keyboard SK-250x"
-
-#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
-
-#: ../rules/base.xml.in.h:311
-msgid "Hexadecimal"
-msgstr "Esadecimale"
-
-# Hindi Bolnagri: variante India
-#: ../rules/base.xml.in.h:312
-msgid "Hindi Bolnagri"
-msgstr "Hindi Bolnagri"
-
-# variante indiana
-#: ../rules/base.xml.in.h:313
-msgid "Hindi Wx"
-msgstr "Hindi Wx"
-
-# variante ukraina
-#: ../rules/base.xml.in.h:314
-msgid "Homophonic"
-msgstr "Omofonica"
-
-#: ../rules/base.xml.in.h:315
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
-
-# codice tre lettere per croazia
-#: ../rules/base.xml.in.h:316
-msgid "Hrv"
-msgstr "HRV"
-
-#: ../rules/base.xml.in.h:317
-msgid "Hun"
-msgstr "HUN"
-
-# UE
-#: ../rules/base.xml.in.h:318
-msgid "Hungary"
-msgstr "Ungheria"
-
-#: ../rules/base.xml.in.h:319
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper è applicato ai tasti Win"
-
-#: ../rules/base.xml.in.h:320
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
-
-#: ../rules/base.xml.in.h:321
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
-
-#: ../rules/base.xml.in.h:322
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
-
-#: ../rules/base.xml.in.h:323
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
-
-#: ../rules/base.xml.in.h:324
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
-
-#: ../rules/base.xml.in.h:325
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
-
-#: ../rules/base.xml.in.h:326
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-
-#: ../rules/base.xml.in.h:327
-msgid "ISO Alternate"
-msgstr "ISO alternativa"
-
-# UE
-#: ../rules/base.xml.in.h:328
-msgid "Iceland"
-msgstr "Islanda"
-
-# Igbo: variante Nigeria
-#: ../rules/base.xml.in.h:329
-msgid "Igbo"
-msgstr "Igbo"
-
-# variante LatAm
-#: ../rules/base.xml.in.h:330
-msgid "Include dead tilde"
-msgstr "Tilde muta inclusa"
-
-#: ../rules/base.xml.in.h:331
-msgid "Ind"
-msgstr "IND"
-
-# UE
-#: ../rules/base.xml.in.h:332
-msgid "India"
-msgstr "India"
-
-#: ../rules/base.xml.in.h:333
-msgid "International (AltGr dead keys)"
-msgstr "Internazionale (tasti muti AltGr)"
-
-#: ../rules/base.xml.in.h:334
-msgid "International (with dead keys)"
-msgstr "Internazionale (con tasti muti)"
-
-# Inuktitut: variante canadese
-#: ../rules/base.xml.in.h:335
-msgid "Inuktitut"
-msgstr "Inuktitut"
-
-# UE
-#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr "Iran"
-
-# UE
-#: ../rules/base.xml.in.h:337
-msgid "Iraq"
-msgstr "Iraq"
-
-# UE
-#: ../rules/base.xml.in.h:338
-msgid "Ireland"
-msgstr "Irlanda"
-
-# codice tre lettere per irlanda
-#: ../rules/base.xml.in.h:339
-msgid "Irl"
-msgstr "IRL"
-
-# codice tre lettere per Iran
-#: ../rules/base.xml.in.h:340
-msgid "Irn"
-msgstr "IRN"
-
-# codice tre lettere per iraq
-#: ../rules/base.xml.in.h:341
-msgid "Irq"
-msgstr "IRQ"
-
-# Codice tre lettere per islanda<
-#: ../rules/base.xml.in.h:342
-msgid "Isl"
-msgstr "ISL"
-
-# codice tre lettere per israele<
-#: ../rules/base.xml.in.h:343
-msgid "Isr"
-msgstr "ISR"
-
-# UE
-#: ../rules/base.xml.in.h:344
-msgid "Israel"
-msgstr "Israele"
-
-#: ../rules/base.xml.in.h:345
-msgid "Ita"
-msgstr "ITA"
-
-# UE
-#: ../rules/base.xml.in.h:346
-msgid "Italy"
-msgstr "Italia"
-
-# UE
-#: ../rules/base.xml.in.h:347
-msgid "Japan"
-msgstr "Giappone"
-
-#: ../rules/base.xml.in.h:348
-msgid "Japan (PC-98xx Series)"
-msgstr "Giappone (Serie PC-98xx)"
-
-# optionList: japan
-# descrizione:
-#
-# <b>Japanese keyboard options</b>
-# [*] Kana Lock key is locking
-# [ ] NICOLA-F style Backspace
-#: ../rules/base.xml.in.h:349
-msgid "Japanese keyboard options"
-msgstr "Opzioni tastiera giapponese"
-
-#: ../rules/base.xml.in.h:350
-msgid "Jpn"
-msgstr "JPN"
-
-# variante russa, in iso639 è XAL
-#: ../rules/base.xml.in.h:351
-msgid "Kalmyk"
-msgstr "Kalmyk"
-
-# Kana: variante giappone
-#: ../rules/base.xml.in.h:352
-msgid "Kana"
-msgstr "Kana"
-
-#: ../rules/base.xml.in.h:353
-msgid "Kana Lock key is locking"
-msgstr "Il tasto Kana Lock sta bloccando"
-
-# variante india
-#: ../rules/base.xml.in.h:354
-msgid "Kannada"
-msgstr "Kannada"
-
-# Kashubian: variante polonia
-#: ../rules/base.xml.in.h:355
-msgid "Kashubian"
-msgstr "Kashubian"
-
-# shortDesc per Kazakistan
-#: ../rules/base.xml.in.h:356
-msgid "Kaz"
-msgstr "KAZ"
-
-#: ../rules/base.xml.in.h:357
-msgid "Kazakh with Russian"
-msgstr "Kazaka con russo"
-
-#: ../rules/base.xml.in.h:358
-msgid "Kazakhstan"
-msgstr "Kazakistan"
-
-# codice tre lettere per Kenia
-#: ../rules/base.xml.in.h:359
-msgid "Ken"
-msgstr "KEN"
-
-#: ../rules/base.xml.in.h:360
-msgid "Kenya"
-msgstr "Kenya"
-
-#: ../rules/base.xml.in.h:361
-msgid "Key sequence to kill the X server"
-msgstr "Sequenza di tasti per terminare il server X"
-
-# optionList: lv3
-# descrizione: The key combination used to choose the 3rd (and 4th, together
-# with Shift) level of symbols
-#: ../rules/base.xml.in.h:362
-msgid "Key to choose 3rd level"
-msgstr "Tasto per scegliere il terzo livello"
-
-#: ../rules/base.xml.in.h:363
-msgid "Key to choose 5th level"
-msgstr "Tasto per scegliere il quinto livello"
-
-# optionList: grp
-# descrizione: The key combination used to switch between groups
-#: ../rules/base.xml.in.h:364
-msgid "Key(s) to change layout"
-msgstr "Tasto o tasti per cambiare disposizione"
-
-#: ../rules/base.xml.in.h:365
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
-
-# shortDesc per Kyrgyzstan
-#: ../rules/base.xml.in.h:366
-msgid "Kgz"
-msgstr "KGZ"
-
-# shortDesc per Cambogia, usato codide ISO
-#: ../rules/base.xml.in.h:367
-msgid "Khm"
-msgstr "KHM"
-
-# variante tastiera kenya
-#: ../rules/base.xml.in.h:368
-msgid "Kikuyu"
-msgstr "Kikuyu"
-
-# nome di modello
-#: ../rules/base.xml.in.h:369
-msgid "Kinesis"
-msgstr "Kinesis"
-
-# Komi: variante russa
-#: ../rules/base.xml.in.h:370
-msgid "Komi"
-msgstr "Komi"
-
-# shortDesc per corea del sud, usato codice iso
-#: ../rules/base.xml.in.h:371
-msgid "Kor"
-msgstr "KOR"
-
-#: ../rules/base.xml.in.h:372
-msgid "Korea, Republic of"
-msgstr "Corea, Repubblica di"
-
-# variante canadese
-#: ../rules/base.xml.in.h:373
-msgid "Ktunaxa"
-msgstr "Ktunaxa"
-
-#: ../rules/base.xml.in.h:374
-msgid "Kurdish, (F)"
-msgstr "Curda, (F)"
-
-#: ../rules/base.xml.in.h:375
-msgid "Kurdish, Arabic-Latin"
-msgstr "Curda, arabo-latina"
-
-#: ../rules/base.xml.in.h:376
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Curda, latina Alt-Q"
-
-#: ../rules/base.xml.in.h:377
-msgid "Kurdish, Latin Q"
-msgstr "Curda, latina Q"
-
-# UE
-#: ../rules/base.xml.in.h:378
-msgid "Kyrgyzstan"
-msgstr "Kirghizistan"
-
-# Short description per Latin American
-# include una lunga serie di nazioni: AR, Bo, CL, CO, CR, CU, DO...
-#
-#: ../rules/base.xml.in.h:379
-msgid "LAm"
-msgstr "LAm"
-
-# variante lituana
-#: ../rules/base.xml.in.h:380
-msgid "LEKP"
-msgstr "LEKP"
-
-# variante lituana
-#: ../rules/base.xml.in.h:381
-msgid "LEKPa"
-msgstr "LEKPa"
-
-#: ../rules/base.xml.in.h:382
-msgid "Lao"
-msgstr "LAO"
-
-# UE
-#: ../rules/base.xml.in.h:383
-msgid "Laos"
-msgstr "Laos"
-
-#: ../rules/base.xml.in.h:384
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Compaq Laptop tastiera per portatile (es. Armada)"
-
-#: ../rules/base.xml.in.h:385
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Compaq Internet Keyboard per portatile (es. Presario)"
-
-#: ../rules/base.xml.in.h:386
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Portatile eMachines m68xx"
-
-#: ../rules/base.xml.in.h:387
-msgid "Latin"
-msgstr "Latino"
-
-#: ../rules/base.xml.in.h:388
-msgid "Latin American"
-msgstr "Latino americano"
-
-#: ../rules/base.xml.in.h:389
-msgid "Latin Unicode"
-msgstr "Latino Unicode"
-
-#: ../rules/base.xml.in.h:390
-msgid "Latin Unicode qwerty"
-msgstr "Latino Unicode qwerty"
-
-#: ../rules/base.xml.in.h:391
-msgid "Latin qwerty"
-msgstr "Latino qwerty"
-
-#: ../rules/base.xml.in.h:392
-msgid "Latin unicode"
-msgstr "Latino unicode"
-
-#: ../rules/base.xml.in.h:393
-msgid "Latin unicode qwerty"
-msgstr "Latino unicode qwerty"
-
-#: ../rules/base.xml.in.h:394
-msgid "Latin with guillemets"
-msgstr "Latino con caporali («»)"
-
-# UE
-#: ../rules/base.xml.in.h:395
-msgid "Latvia"
-msgstr "Lettonia"
-
-#: ../rules/base.xml.in.h:396
-msgid "Layout toggle on multiply/divide key"
-msgstr "Commuta disposizione sul tasto moltiplica/dividi"
-
-#: ../rules/base.xml.in.h:397
-msgid "Left Alt"
-msgstr "Alt sinistro"
-
-#: ../rules/base.xml.in.h:398
-msgid "Left Alt (while pressed)"
-msgstr "Alt sinistro (mentre è premuto)"
-
-#: ../rules/base.xml.in.h:399
-msgid "Left Alt is swapped with Left Win"
-msgstr "Alt sinistro è scambiato con Win sinistro"
-
-#: ../rules/base.xml.in.h:400
-msgid "Left Ctrl"
-msgstr "Ctrl sinistro"
-
-#: ../rules/base.xml.in.h:401
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Ctrl sinistro (per prima disposizione), Ctrl destro (per ultima disposizione)"
-
-#: ../rules/base.xml.in.h:402
-msgid "Left Ctrl+Left Shift"
-msgstr "Ctrl sinistro+Maiusc sinistro"
-
-#: ../rules/base.xml.in.h:403
-msgid "Left Shift"
-msgstr "Maiusc sinistro"
-
-#: ../rules/base.xml.in.h:404
-msgid "Left Win"
-msgstr "Win sinistro"
-
-#: ../rules/base.xml.in.h:405
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Win sinistro (prima disposizione), Win/Menu destro (ultima disposizione)"
-
-#: ../rules/base.xml.in.h:406
-msgid "Left Win (while pressed)"
-msgstr "Win sinistro (mentre è premuto)"
-
-# tasto per scegliere il quinto livello: |...|
-#: ../rules/base.xml.in.h:407
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Win sinistro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello"
-
-# tasto per scegliere il quinto livello: |...|
-#: ../rules/base.xml.in.h:408
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Win sinistro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
-
-#: ../rules/base.xml.in.h:409
-msgid "Left hand"
-msgstr "Mano sinistra"
-
-#: ../rules/base.xml.in.h:410
-msgid "Left handed Dvorak"
-msgstr "Dvorak mancina"
-
-#: ../rules/base.xml.in.h:411
-msgid "Legacy"
-msgstr "Vecchia maniera"
-
-#: ../rules/base.xml.in.h:412
-msgid "Legacy Wang 724"
-msgstr "Wang 724 vecchia maniera"
-
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:414
-msgid "Legacy key with comma"
-msgstr "Tasto vecchia maniera con virgola"
-
-#: ../rules/base.xml.in.h:415
-msgid "Legacy key with dot"
-msgstr "Tasto vecchia maniera con punto"
-
-# UE
-#: ../rules/base.xml.in.h:416
-msgid "Lithuania"
-msgstr "Lituania"
-
-# codice tre lettere per sri lanka
-#: ../rules/base.xml.in.h:417
-msgid "Lka"
-msgstr "LKA"
-
-#: ../rules/base.xml.in.h:418
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access Keyboard"
-
-#: ../rules/base.xml.in.h:419
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
-
-#: ../rules/base.xml.in.h:420
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (opzione alternativa)"
-
-#: ../rules/base.xml.in.h:421
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
-
-#: ../rules/base.xml.in.h:422
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
-
-#: ../rules/base.xml.in.h:423
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
-
-#: ../rules/base.xml.in.h:424
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
-
-#: ../rules/base.xml.in.h:425
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (opzione alternativa 2)"
-
-#: ../rules/base.xml.in.h:426
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
-
-#: ../rules/base.xml.in.h:427
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
-
-#: ../rules/base.xml.in.h:428
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Tasti aggiuntivi Logitech attraverso G15daemon"
-
-#: ../rules/base.xml.in.h:429
-msgid "Logitech Generic Keyboard"
-msgstr "Logitech tastiera generica"
-
-#: ../rules/base.xml.in.h:430
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech Internet 350 Keyboard"
-
-#: ../rules/base.xml.in.h:431
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech Internet Keyboard"
-
-#: ../rules/base.xml.in.h:432
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech Internet Navigator Keyboard"
-
-#: ../rules/base.xml.in.h:433
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite Keyboard"
-
-#: ../rules/base.xml.in.h:434
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
-
-#: ../rules/base.xml.in.h:435
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X Keyboard"
-
-#: ../rules/base.xml.in.h:436
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
-
-#: ../rules/base.xml.in.h:437
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo Keyboard"
-
-#: ../rules/base.xml.in.h:438
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
-
-#: ../rules/base.xml.in.h:439
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless Keyboard (modello Y-RB6)"
-
-#: ../rules/base.xml.in.h:440
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE"
-
-#: ../rules/base.xml.in.h:441
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-
-# codice iso639: dsb
-# FIXME tradotto come in iso-codes, ma inferiore nun se po' vede...
-#: ../rules/base.xml.in.h:442
-msgid "Lower Sorbian"
-msgstr "Sorabo inferiore"
-
-# FIXME tradotto come in iso-codes, ma inferiore nun se po' vede...
-#: ../rules/base.xml.in.h:443
-msgid "Lower Sorbian (qwertz)"
-msgstr "Sorabo inferiore (qwertz)"
-
-# codice tre lettere per lituania
-#: ../rules/base.xml.in.h:444
-msgid "Ltu"
-msgstr "LTU"
-
-# codice tre lettere per lettonia
-#: ../rules/base.xml.in.h:445
-msgid "Lva"
-msgstr "LVA"
-
-# variante della Georgia
-#: ../rules/base.xml.in.h:446
-msgid "MESS"
-msgstr "MESS"
-
-# shortDesc per Montenegro, usato ISO
-#: ../rules/base.xml.in.h:447
-msgid "MNE"
-msgstr "MNE"
-
-#: ../rules/base.xml.in.h:448
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
-
-#: ../rules/base.xml.in.h:449
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
-
-#: ../rules/base.xml.in.h:450
-msgid "Macedonia"
-msgstr "Macedonia"
-
-#: ../rules/base.xml.in.h:451
-msgid "Macintosh"
-msgstr "Macintosh"
-
-#: ../rules/base.xml.in.h:452
-msgid "Macintosh (International)"
-msgstr "Macintosh (internazionale)"
-
-#: ../rules/base.xml.in.h:453
-msgid "Macintosh Old"
-msgstr "Macintosh Old"
-
-#: ../rules/base.xml.in.h:454
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, tasti muti Sun"
-
-#: ../rules/base.xml.in.h:455
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, tasti muti rimossi"
-
-#: ../rules/base.xml.in.h:456
-msgid "Make Caps Lock an additional Backspace"
-msgstr "Rendere BlocMaiusc un Backspace aggiuntivo"
-
-#: ../rules/base.xml.in.h:457
-msgid "Make Caps Lock an additional Ctrl"
-msgstr "Rendere BlocMaiusc un Ctrl aggiuntivo"
-
-#: ../rules/base.xml.in.h:458
-msgid "Make Caps Lock an additional ESC"
-msgstr "Rendere BlocMaiusc un ESC aggiuntivo"
-
-#: ../rules/base.xml.in.h:459
-msgid "Make Caps Lock an additional Hyper"
-msgstr "Rendere BlocMaiusc un Hyper aggiuntivo"
-
-#: ../rules/base.xml.in.h:460
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "Rendere BlocMaiusc un BlocNum aggiuntivo"
-
-#: ../rules/base.xml.in.h:461
-msgid "Make Caps Lock an additional Super"
-msgstr "Rendere BlocMaiusc un Super aggiuntivo"
-
-#: ../rules/base.xml.in.h:462
-msgid "Malayalam"
-msgstr "Malayalam"
-
-#: ../rules/base.xml.in.h:463
-msgid "Malayalam Lalitha"
-msgstr "Malayalam Lalitha"
-
-# UE
-#: ../rules/base.xml.in.h:464
-msgid "Maldives"
-msgstr "Maldive"
-
-#: ../rules/base.xml.in.h:465
-msgid "Mali"
-msgstr "Mali"
-
-# UE
-#: ../rules/base.xml.in.h:466
-msgid "Malta"
-msgstr "Malta"
-
-#: ../rules/base.xml.in.h:467
-msgid "Maltese keyboard with US layout"
-msgstr "Tastiera maltese con disposizione US"
-
-#: ../rules/base.xml.in.h:468
-msgid "Mao"
-msgstr "Mao"
-
-#: ../rules/base.xml.in.h:469
-msgid "Maori"
-msgstr "Maori"
-
-# codice tre lettere per maldive
-#: ../rules/base.xml.in.h:470
-msgid "Mdv"
-msgstr "MKV"
-
-#: ../rules/base.xml.in.h:471
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
-
-#: ../rules/base.xml.in.h:472
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access Keyboard"
-
-#: ../rules/base.xml.in.h:473
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
-
-# il tasto Menu
-#: ../rules/base.xml.in.h:474
-msgid "Menu"
-msgstr "Menu"
-
-#: ../rules/base.xml.in.h:475
-msgid "Meta is mapped to Left Win"
-msgstr "Meta è applicato al tasto Win sinistro"
-
-#: ../rules/base.xml.in.h:476
-msgid "Meta is mapped to Win keys"
-msgstr "Meta è applicato ai tasti Win"
-
-#: ../rules/base.xml.in.h:477
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
-
-#: ../rules/base.xml.in.h:478
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft Internet Keyboard"
-
-#: ../rules/base.xml.in.h:479
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, svedese"
-
-#: ../rules/base.xml.in.h:480
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
-
-#: ../rules/base.xml.in.h:481
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural Keyboard Elite"
-
-#: ../rules/base.xml.in.h:482
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-
-#: ../rules/base.xml.in.h:483
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural Keyboard Pro OEM"
-
-#: ../rules/base.xml.in.h:484
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-
-#: ../rules/base.xml.in.h:485
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-
-#: ../rules/base.xml.in.h:486
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft Office Keyboard"
-
-#: ../rules/base.xml.in.h:487
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
-
-# optionList: (vari)
-# descrizione: (nessuna)
-#: ../rules/base.xml.in.h:488
-msgid "Miscellaneous compatibility options"
-msgstr "Opzioni varie di compatibilità"
-
-# codice tre lettere per macedonia
-#: ../rules/base.xml.in.h:489
-msgid "Mkd"
-msgstr "MKD"
-
-#: ../rules/base.xml.in.h:490
-msgid "Mli"
-msgstr "MLI"
-
-# codice tre lettere per malta
-#: ../rules/base.xml.in.h:491
-msgid "Mlt"
-msgstr "MLT"
-
-# codice tre lettere per birmania
-#: ../rules/base.xml.in.h:492
-msgid "Mmr"
-msgstr "MMR"
-
-# codice tre lettere per mongolia
-#: ../rules/base.xml.in.h:493
-msgid "Mng"
-msgstr "MNG"
-
-#: ../rules/base.xml.in.h:494
-msgid "Mongolia"
-msgstr "Mongolia"
-
-#: ../rules/base.xml.in.h:495
-msgid "Montenegro"
-msgstr "Montenegro"
-
-#: ../rules/base.xml.in.h:496
-msgid "Morocco"
-msgstr "Marocco"
-
-#: ../rules/base.xml.in.h:497
-msgid "Multilingual"
-msgstr "Multilingue"
-
-#: ../rules/base.xml.in.h:498
-msgid "Multilingual, first part"
-msgstr "Multilingue, prima parte"
-
-#: ../rules/base.xml.in.h:499
-msgid "Multilingual, second part"
-msgstr "Multilingue, seconda parte"
-
-# UE
-#: ../rules/base.xml.in.h:500
-msgid "Myanmar"
-msgstr "Birmania"
-
-#: ../rules/base.xml.in.h:501
-msgid "NICOLA-F style Backspace"
-msgstr "Backspace stile NICOLA-F"
-
-# variante pakistana
-#: ../rules/base.xml.in.h:502
-msgid "NLA"
-msgstr "NLA"
-
-# variante brasiliana
-#: ../rules/base.xml.in.h:503
-msgid "Nativo"
-msgstr "Nativo"
-
-# variante brasiliana
-#: ../rules/base.xml.in.h:504
-msgid "Nativo for Esperanto"
-msgstr "Nativo per Esperanto"
-
-# variante brasiliana
-#: ../rules/base.xml.in.h:505
-msgid "Nativo for USA keyboards"
-msgstr "Nativo per tastiere USA"
-
-# variante tetheska.... ehm tedesca
-#: ../rules/base.xml.in.h:506
-msgid "Neo 2"
-msgstr "Neo 2"
-
-#: ../rules/base.xml.in.h:507
-msgid "Nepal"
-msgstr "Nepal"
-
-# UE
-#: ../rules/base.xml.in.h:508
-msgid "Netherlands"
-msgstr "Paesi Bassi"
-
-# variante bulgare
-#: ../rules/base.xml.in.h:509
-msgid "New phonetic"
-msgstr "Fonetica nuova"
-
-# codice tre lettere per Nigeria
-#: ../rules/base.xml.in.h:510
-msgid "Nga"
-msgstr "NGA"
-
-#: ../rules/base.xml.in.h:511
-msgid "Nigeria"
-msgstr "Nigeria"
-
-# codice tre lettere per paesi bassi
-#: ../rules/base.xml.in.h:512
-msgid "Nld"
-msgstr "NLD"
-
-#: ../rules/base.xml.in.h:513
-msgid "Non-breakable space character at fourth level"
-msgstr "Carattere Spazio non-interrompibile al quarto livello"
-
-#: ../rules/base.xml.in.h:514
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Carattere Spazio non-interrompibile al quarto livello, carattere Spazio sottile non-interrompibile al sesto livello"
-
-#: ../rules/base.xml.in.h:515
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Carattere Spazio non-interrompibile al quarto livello, carattere Spazio sottile non-interrompibile al sesto livello (attraverso Ctrl+Maiusc)"
-
-#: ../rules/base.xml.in.h:516
-msgid "Non-breakable space character at second level"
-msgstr "Carattere Spazio non-interrompibile al secondo livello"
-
-#: ../rules/base.xml.in.h:517
-msgid "Non-breakable space character at third level"
-msgstr "Carattere Spazio non-interrompibile al terzo livello"
-
-#: ../rules/base.xml.in.h:518
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Carattere Spazio non-interrompibile al terzo livello, niente al quarto livello"
-
-#: ../rules/base.xml.in.h:519
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Carattere Spazio non-interrompibile al terzo livello, carattere Spazio sottile non-interrompibile al quarto livello"
-
-# codice tre lettere per norvegia
-#: ../rules/base.xml.in.h:520
-msgid "Nor"
-msgstr "NOR"
-
-#: ../rules/base.xml.in.h:521
-msgid "Northern Saami"
-msgstr "Saami settentrinale"
-
-#: ../rules/base.xml.in.h:522
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Saami settentrionale, tasti muti rimossi"
-
-#: ../rules/base.xml.in.h:523
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
-
-# UE
-#: ../rules/base.xml.in.h:524
-msgid "Norway"
-msgstr "Norvegia"
-
-# codice tre lettere per nepal
-#: ../rules/base.xml.in.h:525
-msgid "Npl"
-msgstr "NPL"
-
-#: ../rules/base.xml.in.h:526
-msgid "Num Lock"
-msgstr "BlocNum"
-
-# optionList: kpdl
-# descrizione: Select a keypad KPDL key variant
-#: ../rules/base.xml.in.h:527
-msgid "Numeric keypad delete key behaviour"
-msgstr "Comportamento tasto Canc su tastierino numerico"
-
-#: ../rules/base.xml.in.h:528
-msgid "Numeric keypad keys work as with Mac"
-msgstr "I tasti del tastierino numerico operano come nei Mac"
-
-# optionList: keypad
-# descrizione: Select a keypad type
-#: ../rules/base.xml.in.h:529
-msgid "Numeric keypad layout selection"
-msgstr "Selezione disposizione tastierino numerico"
-
-#: ../rules/base.xml.in.h:530
-msgid "OADG 109A"
-msgstr "OADG 109A"
-
-#: ../rules/base.xml.in.h:531
-msgid "OLPC"
-msgstr "OLPC"
-
-#: ../rules/base.xml.in.h:532
-msgid "OLPC Dari"
-msgstr "OLPC Dari"
-
-#: ../rules/base.xml.in.h:533
-msgid "OLPC Pashto"
-msgstr "OLPC Pashto"
-
-#: ../rules/base.xml.in.h:534
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC Uzbeco meridionale"
-
-# variante francese
-#: ../rules/base.xml.in.h:535
-msgid "Occitan"
-msgstr "Occitana"
-
-# Variante irlandese
-#: ../rules/base.xml.in.h:536
-msgid "Ogham"
-msgstr "Ogham"
-
-#: ../rules/base.xml.in.h:537
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
-
-# variante bangladesh
-#: ../rules/base.xml.in.h:538
-msgid "Oriya"
-msgstr "Oriya"
-
-#: ../rules/base.xml.in.h:539
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/Internet keyboard"
-
-#: ../rules/base.xml.in.h:540
-msgid "Ossetian"
-msgstr "Osseta"
-
-#: ../rules/base.xml.in.h:541
-msgid "Ossetian, Winkeys"
-msgstr "Osseta, Winkeys"
-
-#: ../rules/base.xml.in.h:542
-msgid "Ossetian, legacy"
-msgstr "Osseta, vecchia maniera"
-
-#: ../rules/base.xml.in.h:543
-msgid "PC-98xx Series"
-msgstr "Serie PC-98xx"
-
-#: ../rules/base.xml.in.h:544
-msgid "Pak"
-msgstr "PAK"
-
-# UE
-#: ../rules/base.xml.in.h:545
-msgid "Pakistan"
-msgstr "Pakistan"
-
-# http://it.wikipedia.org/wiki/Lingua_rutena
-#: ../rules/base.xml.in.h:546
-msgid "Pannonian Rusyn Homophonic"
-msgstr "Rutena pannonica omofonica"
-
-#: ../rules/base.xml.in.h:547
-msgid "Pashto"
-msgstr "Pashto"
-
-# Variante tailandese
-#: ../rules/base.xml.in.h:548
-msgid "Pattachote"
-msgstr "Pattachote"
-
-# posizione del tasto compose: |...|Pause
-#: ../rules/base.xml.in.h:549
-msgid "Pause"
-msgstr "Pausa"
-
-#: ../rules/base.xml.in.h:550
-msgid "Persian, with Persian Keypad"
-msgstr "Persiana, con tastierino numerico persiano"
-
-#: ../rules/base.xml.in.h:551
-msgid "Phonetic"
-msgstr "Fonetico"
-
-# variante russa
-#: ../rules/base.xml.in.h:552
-msgid "Phonetic Winkeys"
-msgstr "Fonetica tasti Win"
-
-# codice tre lettere per Polonia
-#: ../rules/base.xml.in.h:553
-msgid "Pol"
-msgstr "POL"
-
-# UE
-#: ../rules/base.xml.in.h:554
-msgid "Poland"
-msgstr "Polonia"
-
-# Variante greca
-#: ../rules/base.xml.in.h:555
-msgid "Polytonic"
-msgstr "Politonica"
-
-# UE
-#: ../rules/base.xml.in.h:556
-msgid "Portugal"
-msgstr "Portogallo"
-
-#: ../rules/base.xml.in.h:557
-msgid "Probhat"
-msgstr "Probhat"
-
-#: ../rules/base.xml.in.h:558
-msgid "Programmer Dvorak"
-msgstr "Dvorak per programmatori"
-
-#: ../rules/base.xml.in.h:559
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
-
-# codice tre lettere per portogallo
-#: ../rules/base.xml.in.h:560
-msgid "Prt"
-msgstr "PRT"
-
-# Posizione del tasto compose: |...|
-# nelle tastiere italiane è Stamp
-#: ../rules/base.xml.in.h:561
-msgid "PrtSc"
-msgstr "Stamp"
-
-#: ../rules/base.xml.in.h:562
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
-
-#: ../rules/base.xml.in.h:563
-msgid "Right Alt"
-msgstr "Alt destro"
-
-#: ../rules/base.xml.in.h:564
-msgid "Right Alt (while pressed)"
-msgstr "Alt destro (mentre è premuto)"
-
-# tasto per scegliere il quinto livello: |...|
-#: ../rules/base.xml.in.h:565
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Alt destro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello"
-
-# tasto per scegliere il quinto livello: |...|
-#: ../rules/base.xml.in.h:566
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Alt destro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
-
-#: ../rules/base.xml.in.h:567
-msgid "Right Alt key never chooses 3rd level"
-msgstr "Il tasto Alt destro non sceglie mai il terzo livello"
-
-#: ../rules/base.xml.in.h:568
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Alt destro, il tasto Maiusc+Alt destro è Multi_Key"
-
-#: ../rules/base.xml.in.h:569
-msgid "Right Ctrl"
-msgstr "Ctrl destro"
-
-#: ../rules/base.xml.in.h:570
-msgid "Right Ctrl (while pressed)"
-msgstr "Ctrl destro (mentre è premuto)"
-
-#: ../rules/base.xml.in.h:571
-msgid "Right Ctrl as Right Alt"
-msgstr "Ctrl destro come Alt destro"
-
-#: ../rules/base.xml.in.h:572
-msgid "Right Ctrl+Right Shift"
-msgstr "Ctrl destro + Maiusc destro"
-
-#: ../rules/base.xml.in.h:573
-msgid "Right Shift"
-msgstr "Maiusc destro"
-
-#: ../rules/base.xml.in.h:574
-msgid "Right Win"
-msgstr "Win destro"
-
-#: ../rules/base.xml.in.h:575
-msgid "Right Win (while pressed)"
-msgstr "Win destro (mentre è premuto)"
-
-# tasto per scegliere il quinto livello: |...|<
-#: ../rules/base.xml.in.h:576
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Win destro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello"
-
-# tasto per scegliere il quinto livello: |...|
-#: ../rules/base.xml.in.h:577
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Win destro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
-
-#: ../rules/base.xml.in.h:578
-msgid "Right hand"
-msgstr "Mano destra"
-
-#: ../rules/base.xml.in.h:579
-msgid "Right handed Dvorak"
-msgstr "Dvorak destrorsa"
-
-# UE
-#: ../rules/base.xml.in.h:580
-msgid "Romania"
-msgstr "Romania"
-
-#: ../rules/base.xml.in.h:581
-msgid "Romanian keyboard with German letters"
-msgstr "Tastiera rumena con lettere tedesche"
-
-#: ../rules/base.xml.in.h:582
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Tastiera rumena con lettere tedesche, tasti muti rimossi"
-
-# codice tre lettere per romania
-#: ../rules/base.xml.in.h:583
-msgid "Rou"
-msgstr "ROU"
-
-# codice tre lettere per russia
-#: ../rules/base.xml.in.h:584
-msgid "Rus"
-msgstr "RUS"
-
-# UE
-#: ../rules/base.xml.in.h:585
-msgid "Russia"
-msgstr "Russia"
-
-#: ../rules/base.xml.in.h:586
-msgid "Russian"
-msgstr "Russa"
-
-#: ../rules/base.xml.in.h:587
-msgid "Russian phonetic"
-msgstr "Fonetica russa"
-
-#: ../rules/base.xml.in.h:588
-msgid "Russian phonetic Dvorak"
-msgstr "Dvorak fonetica russa"
-
-#: ../rules/base.xml.in.h:589
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Fonetica russa, tasti muti rimossi"
-
-#: ../rules/base.xml.in.h:590
-msgid "Russian with Kazakh"
-msgstr "Russa con kazaca"
-
-#: ../rules/base.xml.in.h:591
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless Keyboard"
-
-#: ../rules/base.xml.in.h:592
-msgid "SK-1300"
-msgstr "SK-1300"
-
-#: ../rules/base.xml.in.h:593
-msgid "SK-2500"
-msgstr "SK-2500"
-
-#: ../rules/base.xml.in.h:594
-msgid "SK-6200"
-msgstr "SK-6200"
-
-#: ../rules/base.xml.in.h:595
-msgid "SK-7100"
-msgstr "SK-7100"
-
-# codice per serbia
-#: ../rules/base.xml.in.h:596 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr "SRB"
-
-#: ../rules/base.xml.in.h:597
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
-
-#: ../rules/base.xml.in.h:598
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
-
-#: ../rules/base.xml.in.h:599
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
-
-#: ../rules/base.xml.in.h:600
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
-
-#: ../rules/base.xml.in.h:601
-msgid "Scroll Lock"
-msgstr "BlocScorr"
-
-# variante canadese
-# No ISO code in ISO639-2, only draft ISO693-3
-#: ../rules/base.xml.in.h:602
-msgid "Secwepemctsin"
-msgstr "Secwepemctsin"
-
-# parte di Numeric keypad delete key behaviour
-# vedi descrizione compelta in altro commento
-#: ../rules/base.xml.in.h:603
-msgid "Semi-colon on third level"
-msgstr "Punto e virgola sul terzo livello"
-
-#: ../rules/base.xml.in.h:604
-msgid "Sen"
-msgstr "SEN"
-
-#: ../rules/base.xml.in.h:605
-msgid "Senegal"
-msgstr "Senegal"
-
-#: ../rules/base.xml.in.h:606 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr "Serbia"
-
-#: ../rules/base.xml.in.h:607
-msgid "Serbian"
-msgstr "Serba"
-
-#: ../rules/base.xml.in.h:608
-msgid "Shift cancels Caps Lock"
-msgstr "Maiusc annulla BlocMaiusc"
-
-#: ../rules/base.xml.in.h:609
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Maiusc non annulla BlocNum, invece sceglie il terzo livello"
-
-#: ../rules/base.xml.in.h:610
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Maiusc con i tasti del tastierino numerico opera come in MS Windows"
-
-#: ../rules/base.xml.in.h:611
-msgid "Shift+Caps Lock"
-msgstr "Maiusc+BlocMaiusc"
-
-# variante greca
-#: ../rules/base.xml.in.h:612
-msgid "Simple"
-msgstr "Semplice"
-
-# variante pakistana
-#: ../rules/base.xml.in.h:613
-msgid "Sindhi"
-msgstr "Sindhi"
-
-# UE
-#: ../rules/base.xml.in.h:614
-msgid "Slovakia"
-msgstr "Slovacchia"
-
-# UE
-#: ../rules/base.xml.in.h:615
-msgid "Slovenia"
-msgstr "Slovenia"
-
-#: ../rules/base.xml.in.h:616
-msgid "South Africa"
-msgstr "Sud Africa"
-
-#: ../rules/base.xml.in.h:617
-msgid "Southern Uzbek"
-msgstr "Uzbeko meridionale"
-
-# UE
-#: ../rules/base.xml.in.h:618
-msgid "Spain"
-msgstr "Spagna"
-
-#: ../rules/base.xml.in.h:619
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Tasti speciali (Ctrl+Alt+&lt;tasto&gt;) gestiti in un server"
-
-#: ../rules/base.xml.in.h:620
-msgid "Sri Lanka"
-msgstr "Sri Lanka"
-
-#: ../rules/base.xml.in.h:621
-msgid "Standard"
-msgstr "Standard"
-
-#: ../rules/base.xml.in.h:622
-msgid "Standard (Cedilla)"
-msgstr "Standard (cediglia)"
-
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:624
-msgid "Standard RSTU"
-msgstr "RSTU standard"
-
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:626
-msgid "Standard RSTU on Russian layout"
-msgstr "RSTU standard su disposizione russa"
-
-#: ../rules/base.xml.in.h:627
-msgid "Sun Type 5/6"
-msgstr "Sun Type 5/6"
-
-#: ../rules/base.xml.in.h:628
-msgid "Sun dead keys"
-msgstr "Tasti muti Sun"
-
-#: ../rules/base.xml.in.h:629
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power Multimedia Keyboard"
-
-#: ../rules/base.xml.in.h:630
-msgid "Svdvorak"
-msgstr "Svdvorak"
-
-# codice tre lettere per repubblica slovacca
-#: ../rules/base.xml.in.h:631
-msgid "Svk"
-msgstr "SVK"
-
-# codice tre lettere per slovenia
-#: ../rules/base.xml.in.h:632
-msgid "Svn"
-msgstr "SVN"
-
-#: ../rules/base.xml.in.h:633
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Scambiare Ctrl e BlocMaiusc"
-
-#: ../rules/base.xml.in.h:634
-msgid "Swap ESC and Caps Lock"
-msgstr "Scambiare ESC e BlocMaiusc"
-
-#: ../rules/base.xml.in.h:635
-msgid "Swe"
-msgstr "SWE"
-
-# UE
-#: ../rules/base.xml.in.h:636
-msgid "Sweden"
-msgstr "Svezia"
-
-# UE
-#: ../rules/base.xml.in.h:637
-msgid "Switzerland"
-msgstr "Svizzera"
-
-#: ../rules/base.xml.in.h:638
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (tablet PC)"
-
-#: ../rules/base.xml.in.h:639
-msgid "Syr"
-msgstr "SYR"
-
-# UE
-#: ../rules/base.xml.in.h:640
-msgid "Syria"
-msgstr "Siria"
-
-# L'aggettivo per Siria in iglese EU sarebbe Syrian
-#
-#: ../rules/base.xml.in.h:641
-msgid "Syriac"
-msgstr "Siriano"
-
-#: ../rules/base.xml.in.h:642
-msgid "Syriac phonetic"
-msgstr "Siriano fonetico"
-
-#: ../rules/base.xml.in.h:643
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
-
-# UE
-#: ../rules/base.xml.in.h:644
-msgid "Tajikistan"
-msgstr "Tagikistan"
-
-#: ../rules/base.xml.in.h:645
-msgid "Tamil"
-msgstr "Tamil"
-
-#: ../rules/base.xml.in.h:646
-msgid "Tamil Keyboard with Numerals"
-msgstr "Tastiera tamil con numeri"
-
-#: ../rules/base.xml.in.h:647
-msgid "Tamil TAB Typewriter"
-msgstr "Tamil TAB macchina per scrivere"
-
-#: ../rules/base.xml.in.h:648
-msgid "Tamil TSCII Typewriter"
-msgstr "Tamil TSCII macchina per scrivere"
-
-#: ../rules/base.xml.in.h:649
-msgid "Tamil Unicode"
-msgstr "Tamil Unicode"
-
-#: ../rules/base.xml.in.h:650
-msgid "Tanzania"
-msgstr "Tanzania"
-
-#: ../rules/base.xml.in.h:651
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
-
-# variante russa, come lingua stado a iso639 sarebbe tatarico
-#: ../rules/base.xml.in.h:652
-msgid "Tatar"
-msgstr "Tatar"
-
-#: ../rules/base.xml.in.h:653
-msgid "Telugu"
-msgstr "Telegu"
-
-#: ../rules/base.xml.in.h:654
-msgid "Tha"
-msgstr "THA"
-
-# UE
-#: ../rules/base.xml.in.h:655
-msgid "Thailand"
-msgstr "Thailandia"
-
-#: ../rules/base.xml.in.h:656
-msgid "Tibetan"
-msgstr "Tibetana"
-
-#: ../rules/base.xml.in.h:657
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Tibetana (con numeri ASCII)"
-
-# variante marocchina, corrispondente al codice iso639 BER (berbero)
-#: ../rules/base.xml.in.h:658
-msgid "Tifinagh"
-msgstr "Tifinagh"
-
-# variante marocchina
-#: ../rules/base.xml.in.h:659
-msgid "Tifinagh alternative"
-msgstr "Tifinagh alternativa"
-
-# variante marocchina
-#: ../rules/base.xml.in.h:660
-msgid "Tifinagh alternative phonetic"
-msgstr "Tifinagh alternativa fonetica"
-
-# variante marocchina
-#: ../rules/base.xml.in.h:661
-msgid "Tifinagh extended"
-msgstr "Tifinagh estesa"
-
-# variante marocchina
-#: ../rules/base.xml.in.h:662
-msgid "Tifinagh extended phonetic"
-msgstr "Tifinagh estesa fonetica"
-
-# variante marocchina
-#: ../rules/base.xml.in.h:663
-msgid "Tifinagh phonetic"
-msgstr "Tifinagh fonetica"
-
-#: ../rules/base.xml.in.h:664
-msgid "Tilde (~) variant"
-msgstr "Variante tilde (~)"
-
-# codice tre lettere per tajikistan
-#: ../rules/base.xml.in.h:665
-msgid "Tjk"
-msgstr "TJK"
-
-#: ../rules/base.xml.in.h:666
-msgid "Tkm"
-msgstr "TKM"
-
-#: ../rules/base.xml.in.h:667
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "Al tasto corrispondente in una tastiera Dvorak."
-
-#: ../rules/base.xml.in.h:668
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "Al tasto corrispondente in una tastiera Qwerty."
-
-#: ../rules/base.xml.in.h:669
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
-
-# variante bulgara
-#: ../rules/base.xml.in.h:670
-msgid "Traditional phonetic"
-msgstr "Fonetica tradizionale"
-
-#: ../rules/base.xml.in.h:671
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access Keyboard"
-
-#: ../rules/base.xml.in.h:672
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
-
-#: ../rules/base.xml.in.h:673
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
-
-#: ../rules/base.xml.in.h:674
-msgid "Tur"
-msgstr "TUR"
-
-#: ../rules/base.xml.in.h:675
-msgid "Turkey"
-msgstr "Turca"
-
-# non controllato su UE
-#: ../rules/base.xml.in.h:676
-msgid "Turkmenistan"
-msgstr "Turkmenistan"
-
-#: ../rules/base.xml.in.h:677
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
-
-#: ../rules/base.xml.in.h:678
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
-
-#: ../rules/base.xml.in.h:679
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
-
-#: ../rules/base.xml.in.h:680
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (modalità 102/105:EU)"
-
-#: ../rules/base.xml.in.h:681
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (modalità 106:JP)"
-
-# Non sono sicuro vada tradotto
-#: ../rules/base.xml.in.h:682
-msgid "Typewriter"
-msgstr "Macchina per scrivere"
-
-#: ../rules/base.xml.in.h:683
-msgid "Typewriter, legacy"
-msgstr "Macchina per scrivere, vecchia maniera"
-
-#: ../rules/base.xml.in.h:684
-msgid "Tza"
-msgstr "TZA"
-
-#: ../rules/base.xml.in.h:685
-msgid "UCW layout (accented letters only)"
-msgstr "Disposizione UCW (solo lettere accentate)"
-
-#: ../rules/base.xml.in.h:686
-msgid "US Dvorak with CZ UCW support"
-msgstr "Dvorak US con supporto UCW CZ"
-
-#: ../rules/base.xml.in.h:687
-msgid "US keyboard with Bosnian digraphs"
-msgstr "Tastiera USA con digrammi bosniaci"
-
-#: ../rules/base.xml.in.h:688
-msgid "US keyboard with Bosnian letters"
-msgstr "Tastiera USA con lettere bosniache"
-
-#: ../rules/base.xml.in.h:689
-msgid "US keyboard with Croatian digraphs"
-msgstr "Tastiera USA con digrammi croati"
-
-#: ../rules/base.xml.in.h:690
-msgid "US keyboard with Croatian letters"
-msgstr "Tastiera USA con lettere croate"
-
-#: ../rules/base.xml.in.h:691
-msgid "US keyboard with Estonian letters"
-msgstr "Tastiera USA con lettere estoni"
-
-#: ../rules/base.xml.in.h:692
-msgid "US keyboard with Italian letters"
-msgstr "Tastiera USA con lettere italiane"
-
-#: ../rules/base.xml.in.h:693
-msgid "US keyboard with Lithuanian letters"
-msgstr "Tastiera USA con lettere lituane"
-
-#: ../rules/base.xml.in.h:694
-msgid "US keyboard with Slovenian letters"
-msgstr "Tastiera USA con lettere slovene"
-
-#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr "USA"
-
-# variante russa
-#: ../rules/base.xml.in.h:696
-msgid "Udmurt"
-msgstr "Udmurt"
-
-#: ../rules/base.xml.in.h:697
-msgid "Ukr"
-msgstr "UKR"
-
-# UE
-#: ../rules/base.xml.in.h:698
-msgid "Ukraine"
-msgstr "Ucraina"
-
-#: ../rules/base.xml.in.h:699
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Aggiunte unicode (frecce e operatori matematici)"
-
-#: ../rules/base.xml.in.h:700
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Aggiunte unicode (frecce e operatori matematici). Operatori matematici sul livello predefinito"
-
-# Sarà da tradurre? -Luca
-#: ../rules/base.xml.in.h:701
-msgid "UnicodeExpert"
-msgstr "UnicodeEsperto"
-
-# UE
-#: ../rules/base.xml.in.h:702
-msgid "United Kingdom"
-msgstr "Regno Unito"
-
-#: ../rules/base.xml.in.h:703
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
-
-#: ../rules/base.xml.in.h:704
-msgid "Urdu, Alternative phonetic"
-msgstr "Urdu, alternativa fonetica"
-
-#: ../rules/base.xml.in.h:705
-msgid "Urdu, Phonetic"
-msgstr "Urdu, fonetica"
-
-#: ../rules/base.xml.in.h:706
-msgid "Urdu, Winkeys"
-msgstr "Urdu, tasti Win"
-
-#: ../rules/base.xml.in.h:707
-msgid "Use Bosnian digraphs"
-msgstr "Usa digrammi bosniaci"
-
-#: ../rules/base.xml.in.h:708
-msgid "Use Croatian digraphs"
-msgstr "Usa digrammi croati"
-
-#: ../rules/base.xml.in.h:709
-msgid "Use guillemets for quotes"
-msgstr "Usa caporali per virgolette"
-
-#: ../rules/base.xml.in.h:710
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Usare i LED della tastiera per mostrare il gruppo alternativo"
-
-#: ../rules/base.xml.in.h:711
-msgid "Using space key to input non-breakable space character"
-msgstr "Uso del tasto Spazio per inserire carattere di spazio non-interrompibile"
-
-#: ../rules/base.xml.in.h:712
-msgid "Usual space at any level"
-msgstr "Solito Spazio a ogni livello"
-
-#: ../rules/base.xml.in.h:713
-msgid "Uzb"
-msgstr "UZB"
-
-# UE
-#: ../rules/base.xml.in.h:714
-msgid "Uzbekistan"
-msgstr "Uzbekistan"
-
-# UE
-#: ../rules/base.xml.in.h:715
-msgid "Vietnam"
-msgstr "Vietnam"
-
-#: ../rules/base.xml.in.h:716
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "ViewSonic KU-306 Internet Keyboard"
-
-#: ../rules/base.xml.in.h:717
-msgid "Vnm"
-msgstr "VNK"
-
-#: ../rules/base.xml.in.h:718
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Tastierino Wang 724 con aggiunte unicode (frecce e operatori matematici)"
-
-#: ../rules/base.xml.in.h:719
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Tastierino Wang 724 con aggiunte unicode (frecce e operatori matematici). Operatori matematici sul livello predefinito"
-
-# variante belga
-#: ../rules/base.xml.in.h:720
-msgid "Wang model 724 azerty"
-msgstr "Wang modello 724 azerty"
-
-#: ../rules/base.xml.in.h:721
-msgid "Western"
-msgstr "Occidentale"
-
-#: ../rules/base.xml.in.h:722
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
-
-# variante bielorussa
-#: ../rules/base.xml.in.h:723
-msgid "Winkeys"
-msgstr "Tasti Win"
-
-#: ../rules/base.xml.in.h:724
-msgid "With &lt;\\|&gt; key"
-msgstr "Con tasti &lt;\\|&gt;"
-
-#: ../rules/base.xml.in.h:725
-msgid "With EuroSign on 5"
-msgstr "Con simbolo € sul 5"
-
-#: ../rules/base.xml.in.h:726
-msgid "With guillemets"
-msgstr "Con caporali"
-
-#: ../rules/base.xml.in.h:727
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! Internet Keyboard"
-
-#: ../rules/base.xml.in.h:728
-msgid "Yakut"
-msgstr "Yakut"
-
-#: ../rules/base.xml.in.h:729
-msgid "Yoruba"
-msgstr "Yoruba"
-
-#: ../rules/base.xml.in.h:730
-msgid "Z and ZHE swapped"
-msgstr "Z e ZHE scambiati"
-
-# codice per sudafrica
-#: ../rules/base.xml.in.h:731
-msgid "Zaf"
-msgstr "ZAF"
-
-#: ../rules/base.xml.in.h:732
-msgid "Zero-width non-joiner character at second level"
-msgstr "Spazio non di unione a larghezza nulla al secondo livello"
-
-#: ../rules/base.xml.in.h:733
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
-msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio non-interrompibile al terzo livello"
-
-#: ../rules/base.xml.in.h:734
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
-msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio non-interrompibile al terzo livello, niente al quarto livello"
-
-#: ../rules/base.xml.in.h:735
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
-msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio non-interrompibile al terzo livello, Spazio sottile non-interrompibile al quarto livello"
-
-#: ../rules/base.xml.in.h:736
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
-msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio non-interrompibile al terzo livello, Spazio di unione a larghezza nulla al quarto livello"
-
-#: ../rules/base.xml.in.h:737
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
-msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio di unione a larghezza nulla al terzo livello"
-
-#: ../rules/base.xml.in.h:738
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
-msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio di unione a larghezza nulla al terzo livello, Spazio non-interrompibile al quarto livello"
-
-#: ../rules/base.xml.in.h:739
-msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
-msgstr "Spazio non di unione a larghezza nulla al terzo livello, Spazio di unione a larghezza nulla al quarto livello"
-
-#: ../rules/base.xml.in.h:740
-msgid "azerty"
-msgstr "azerty"
-
-#: ../rules/base.xml.in.h:741
-msgid "azerty/digits"
-msgstr "azerty/cifre"
-
-#: ../rules/base.xml.in.h:742
-msgid "digits"
-msgstr "cifre"
-
-# variante esperanto
-#
-# to diplace: 1) spostare, rimuovere; dislocare
-# 2) rimpiazzare, sostituire
-# 3) soppiantare
-#
-# sarà corretto spostate???
-#: ../rules/base.xml.in.h:743
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "Punto e virgola e virgolette spostate (obsoleta)"
-
-#: ../rules/base.xml.in.h:744
-msgid "lyx"
-msgstr "lyx"
-
-#: ../rules/base.xml.in.h:745
-msgid "qwerty"
-msgstr "qwerty"
-
-#: ../rules/base.xml.in.h:746
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, backslash esteso"
-
-#: ../rules/base.xml.in.h:747
-msgid "qwerty/digits"
-msgstr "querty/cifre"
-
-#: ../rules/base.xml.in.h:748
-msgid "qwertz"
-msgstr "qwertz"
-
-# layout a parte, sembrerebbe inglese
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL"
-msgstr "APL"
-
-# No ISO code in ISO639-2, only draft ISO693-3
-# Atsina refers to the Gros Ventres tribe.
-# http://en.wikipedia.org/wiki/Atsina_(disambiguation)
-#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Atsina"
-
-# lingua iran nord orientale
-# http://it.wikipedia.org/wiki/Lingua_avestica
-#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr "Avestico"
-
-# variante serba
-#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr "Combinazione di accenti invece di tasti muti"
-
-# http://en.wikipedia.org/wiki/Interior_Salish_languages
-#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr "Couer D'alene Salish"
-
-#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr "Internazionale (combinazione Unicode AltGr)"
-
-#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "Internazionale (combinazione Unicode AltGr, alternativa)"
+# Italian translation for xkeyboard-config
+# Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# This file is distributed under the same license as the xkeyboard-config package.
+#
+# Il file rules.xml è composto da tre parti
+# <modelList> - elenca i modelli di tastiera riconosciuti
+# <layoutList> - elenca le disposizioni di tastiera applicabili
+# e le loro varianti
+# <optionList> - elenca le opzioni selezionabili per le disposizioni
+# (opzioni visibili per esempio nel sottodialogo "Altre opzioni"
+# dello strumento di preferenze Tastiera di GNOME)
+#
+#
+# Per i modelli in genere non serve usare particolari traduzioni, visto che
+# è il nome proprio con cui il vendor commercializza il prodotto
+#
+# Le disposizioni spesso sono i nomi della lingua, ma sono presenti anche casi
+# in cui la variante è descritta nel modo in cui "appare" la tastiera
+#
+# Le opzioni sarebbero facili, se non fosse che mentre nel file XML originale
+# sono disposte in maniera gerarchica, qui nel PO vengono spalmate qua e là
+# per colpa dell'ordinamento alfabetico. Per questo ho riportato i vari gruppi
+# come appaiono, basta cercare optionList
+#
+# ## Glossario ##
+#
+# legacy --> vecchia maniera
+# dead keys --> tasti muti
+# eliminate dead keys --> tasti muti esclusi
+# to map --> applicare
+# non-breakable --> non interrompibile ??
+# Luca Ferretti <elle.uca@infinito.it>, 2005, 2006, 2007, 2008, 2009, 2010, 2011.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xkeyboard-config 2.1.99\n"
+"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-04-02 00:27+0200\n"
+"Last-Translator: Luca Ferretti <elle.uca@infinito.it>\n"
+"Language-Team: Italian <tp@lists.linux.it>\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1)\n"
+
+# tasto per scegliere il terzo livello: |...|
+# posizione tasto compose: |...|
+#: ../rules/base.xml.in.h:1
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;Minore/Maggiore&gt;"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:2
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Minore/Maggiore&gt; (sceglie il terzo livello, blocca quando premuto assieme a un altro selettore del terzo livello)"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:3
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Minore/Maggiore&gt; sceglie il quinto livello e attiva level5-Lock quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:4
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Minore/Maggiore&gt; sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:5
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Minore/Maggiore&gt; sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
+
+#: ../rules/base.xml.in.h:6
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
+
+#: ../rules/base.xml.in.h:7
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
+
+#: ../rules/base.xml.in.h:8
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
+
+#: ../rules/base.xml.in.h:9
+msgid "ATM/phone-style"
+msgstr "ATM/tipo telefono"
+
+#: ../rules/base.xml.in.h:10
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
+
+#: ../rules/base.xml.in.h:11
+msgid "Acer C300"
+msgstr "Acer C300"
+
+#: ../rules/base.xml.in.h:12
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
+
+#: ../rules/base.xml.in.h:13
+msgid "Acer Laptop"
+msgstr "Portatile Acer"
+
+#: ../rules/base.xml.in.h:14
+msgid "Add the standard behavior to Menu key"
+msgstr "Aggiungere il comportamento standard al tasto Menu"
+
+# optionList: esperanto
+#: ../rules/base.xml.in.h:15
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Aggiunta dei circonflessi Esperanto (supersigno)"
+
+# optionList: eurosign
+# descrizione: Special shortcuts for the Euro character
+#: ../rules/base.xml.in.h:16
+msgid "Adding currency signs to certain keys"
+msgstr "Aggiunta del simboli di valuta a determinati tasti"
+
+#: ../rules/base.xml.in.h:17
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
+
+#: ../rules/base.xml.in.h:18
+msgid "Afg"
+msgstr "Afg"
+
+# UE
+#: ../rules/base.xml.in.h:19
+msgid "Afghani"
+msgstr "Afgano"
+
+# variante per Ghana
+#: ../rules/base.xml.in.h:20
+msgid "Akan"
+msgstr "Akan"
+
+# UE
+#: ../rules/base.xml.in.h:21
+msgid "Albanian"
+msgstr "Albanese"
+
+#: ../rules/base.xml.in.h:22
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt e Meta sono sui tasti Alt"
+
+# to map, pare che in termini matematici voglia dire applicare
+#: ../rules/base.xml.in.h:23
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt è applicato al tasto Win destro, Super al tasto Menu"
+
+#: ../rules/base.xml.in.h:24
+msgid "Alt+Caps Lock"
+msgstr "Alt+BlocMaiusc"
+
+#: ../rules/base.xml.in.h:25
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
+
+#: ../rules/base.xml.in.h:26
+msgid "Alt+Shift"
+msgstr "Alt+Maiusc"
+
+#: ../rules/base.xml.in.h:27
+msgid "Alt+Space"
+msgstr "Alt+Spazio"
+
+# optionList: altwin
+# descrizione: Using special PC keys (Win, Menu) to work as standard X keys
+# (Super, Hyper, etc.)
+#: ../rules/base.xml.in.h:28
+msgid "Alt/Win key behavior"
+msgstr "Comportamento tasto Alt/Win"
+
+#: ../rules/base.xml.in.h:29
+msgid "Amharic"
+msgstr "Amarica"
+
+#: ../rules/base.xml.in.h:30
+msgid "Any Alt key"
+msgstr "Ogni tasto Alt"
+
+#: ../rules/base.xml.in.h:31
+msgid "Any Win key"
+msgstr "Ogni tasto Win"
+
+#: ../rules/base.xml.in.h:32
+msgid "Any Win key (while pressed)"
+msgstr "Ogni tasto Win (mentre è premuto)"
+
+#: ../rules/base.xml.in.h:33
+msgid "Apple"
+msgstr "Apple"
+
+#: ../rules/base.xml.in.h:34
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Apple Keyboard alluminio (ANSI)"
+
+#: ../rules/base.xml.in.h:35
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Apple Keyboard alluminio (ISO)"
+
+#: ../rules/base.xml.in.h:36
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Apple Keyboard alluminio (JIS)"
+
+#: ../rules/base.xml.in.h:37
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Apple Keyboard alluminio: emula tasti PC (Stamp, BlocScorr, Pausa, BlocNum)"
+
+#: ../rules/base.xml.in.h:38
+msgid "Apple Laptop"
+msgstr "Portatile Apple"
+
+# nel senso di layout/disposizione e usato nell'elenco di nazioni.
+#: ../rules/base.xml.in.h:39
+msgid "Arabic"
+msgstr "Araba"
+
+# variante araba
+#: ../rules/base.xml.in.h:40
+msgid "Arabic (Buckwalter)"
+msgstr "Araba (Buckwalter)"
+
+#: ../rules/base.xml.in.h:41
+msgid "Arabic (Morocco)"
+msgstr "Araba (Marocco)"
+
+# UE
+#: ../rules/base.xml.in.h:42
+msgid "Arabic (Pakistan)"
+msgstr "Araba (Pakistan)"
+
+# nel senso di layout/disposizione e usato nell'elenco di nazioni.
+#: ../rules/base.xml.in.h:43
+msgid "Arabic (Syria)"
+msgstr "Araba (Siria)"
+
+#: ../rules/base.xml.in.h:44
+msgid "Arabic (azerty)"
+msgstr "Araba (azerty)"
+
+#: ../rules/base.xml.in.h:45
+msgid "Arabic (azerty/digits)"
+msgstr "Araba (azerty/cifre)"
+
+#: ../rules/base.xml.in.h:46
+msgid "Arabic (digits)"
+msgstr "Araba (cifre)"
+
+#: ../rules/base.xml.in.h:47
+msgid "Arabic (qwerty)"
+msgstr "Araba (qwerty)"
+
+#: ../rules/base.xml.in.h:48
+msgid "Arabic (qwerty/digits)"
+msgstr "Araba (querty/cifre)"
+
+# UE
+#: ../rules/base.xml.in.h:49
+msgid "Armenian"
+msgstr "Armena"
+
+#: ../rules/base.xml.in.h:50
+msgid "Armenian (alternative eastern)"
+msgstr "Armena (orientale alternativa)"
+
+# variante marocchina
+#: ../rules/base.xml.in.h:51
+msgid "Armenian (alternative phonetic)"
+msgstr "Armena (fonetica alternativa)"
+
+#: ../rules/base.xml.in.h:52
+msgid "Armenian (eastern)"
+msgstr "Armena (orientale)"
+
+#: ../rules/base.xml.in.h:53
+msgid "Armenian (phonetic)"
+msgstr "Armena (fonetica)"
+
+#: ../rules/base.xml.in.h:54
+msgid "Armenian (western)"
+msgstr "Armena (occidentale)"
+
+#: ../rules/base.xml.in.h:55
+msgid "Asus Laptop"
+msgstr "Portatile Asus"
+
+#: ../rules/base.xml.in.h:56
+msgid "At bottom left"
+msgstr "In basso a sinistra"
+
+#: ../rules/base.xml.in.h:57
+msgid "At left of 'A'"
+msgstr "A sinistra di \"A\""
+
+# variante per tastiera ghana
+#: ../rules/base.xml.in.h:58
+msgid "Avatime"
+msgstr "Avatime"
+
+# UE
+#
+# FIXME credo sia sbagliato, dovrebbe essere Azerbaijani
+#: ../rules/base.xml.in.h:59
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Azera (cirillico)"
+
+# UE
+#: ../rules/base.xml.in.h:60
+msgid "Azerbaijani"
+msgstr "Azera"
+
+#: ../rules/base.xml.in.h:61
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 wireless Internet Keyboard"
+
+#: ../rules/base.xml.in.h:62
+msgid "BTC 5090"
+msgstr "BTC 5090"
+
+#: ../rules/base.xml.in.h:63
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimedia"
+
+#: ../rules/base.xml.in.h:64
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
+
+#: ../rules/base.xml.in.h:65
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
+
+#: ../rules/base.xml.in.h:66
+msgid "BTC 9000"
+msgstr "BTC 9000"
+
+#: ../rules/base.xml.in.h:67
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
+
+#: ../rules/base.xml.in.h:68
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
+
+#: ../rules/base.xml.in.h:69
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
+
+#: ../rules/base.xml.in.h:70
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+
+#: ../rules/base.xml.in.h:71
+msgid "Backslash"
+msgstr "Backslash"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:72
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Backslash sceglie il terzo livello, blocca quando premuto assieme a un altro selettore del terzo livello)"
+
+#: ../rules/base.xml.in.h:73
+msgid "Bambara"
+msgstr "Bambara"
+
+# UE
+#: ../rules/base.xml.in.h:74
+msgid "Belarusian"
+msgstr "Bielorussa"
+
+#: ../rules/base.xml.in.h:75
+msgid "Belarusian (Latin)"
+msgstr "Bielorussa (latina)"
+
+#: ../rules/base.xml.in.h:76
+msgid "Belarusian (legacy)"
+msgstr "Bielorussa (vecchia maniera)"
+
+# UE
+#: ../rules/base.xml.in.h:77
+msgid "Belgian"
+msgstr "Belga"
+
+#: ../rules/base.xml.in.h:78
+msgid "Belgian (ISO alternate)"
+msgstr "Belga (ISO alternativa)"
+
+#: ../rules/base.xml.in.h:79
+msgid "Belgian (Sun dead keys)"
+msgstr "Belga (tasti muti Sun)"
+
+# variante belga
+#: ../rules/base.xml.in.h:80
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belga (modello Wang 724 azerty)"
+
+# variante marocchina
+#: ../rules/base.xml.in.h:81
+msgid "Belgian (alternative)"
+msgstr "Belga (alternativa)"
+
+#: ../rules/base.xml.in.h:82
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belga (alternativa, tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:83
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belga (alternativa, solo latin-9)"
+
+#: ../rules/base.xml.in.h:84
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belga (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:85
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
+
+#: ../rules/base.xml.in.h:86
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
+
+#: ../rules/base.xml.in.h:87
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
+
+# variante per india
+#: ../rules/base.xml.in.h:88
+msgid "Bengali"
+msgstr "Bengalese"
+
+# variante per bengali, credo sia fonetico (crf www.bengalinux.org)
+#: ../rules/base.xml.in.h:89
+msgid "Bengali (Probhat)"
+msgstr "Bengalese (probhat)"
+
+# variante marocchina
+#: ../rules/base.xml.in.h:90
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Berbera (Marocco, tifinagh fonetica alternativa)"
+
+# variante marocchina
+#: ../rules/base.xml.in.h:91
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Berbera (Marocco, tifinagh alternativa)"
+
+# variante marocchina
+#: ../rules/base.xml.in.h:92
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Berbera (Marocco, tifinagh fonetica estesa)"
+
+# variante marocchina
+#: ../rules/base.xml.in.h:93
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Berbera (Marocco, tifinagh estesa)"
+
+# variante marocchina
+#: ../rules/base.xml.in.h:94
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Berbera (Marocco, tifinagh fonetica fonetica)"
+
+#: ../rules/base.xml.in.h:95
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Berbera (Marocco, tifinagh)"
+
+#: ../rules/base.xml.in.h:96
+msgid "Bosnian"
+msgstr "Bosniaca"
+
+#: ../rules/base.xml.in.h:97
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bosniaca (tastiera USA con digrammi bosniaci)"
+
+#: ../rules/base.xml.in.h:98
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bosniaca (tastiera USA con lettere bosniache)"
+
+#: ../rules/base.xml.in.h:99
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bosniaca (con digrammi bosniaci)"
+
+#: ../rules/base.xml.in.h:100
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bosniaca (con caporali per virgolette)"
+
+#: ../rules/base.xml.in.h:101
+msgid "Both Alt keys together"
+msgstr "Entrambi i tasti Alt insieme"
+
+#: ../rules/base.xml.in.h:102
+msgid "Both Ctrl keys together"
+msgstr "Entrambi i tasti Ctrl insieme"
+
+#: ../rules/base.xml.in.h:103
+msgid "Both Shift keys together"
+msgstr "Entrambi i tasti Maiusc insieme"
+
+#: ../rules/base.xml.in.h:104
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Entrambi i tasti Maiusc insieme attivano BloccaMaiusc, un tasto Maiusc lo disattiva"
+
+#: ../rules/base.xml.in.h:105
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Entrambi i tasti Maiusc insieme commutano BloccaMaiusc"
+
+# Credo che ShiftLock sia un refuso per Caps Lock
+#: ../rules/base.xml.in.h:106
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Entrambi i tasti Maiusc insieme commutano BloccaMaiusc"
+
+#: ../rules/base.xml.in.h:107
+msgid "Braille"
+msgstr "Braille"
+
+#: ../rules/base.xml.in.h:108
+msgid "Braille (left hand)"
+msgstr "Braille (mano sinistra)"
+
+#: ../rules/base.xml.in.h:109
+msgid "Braille (right hand)"
+msgstr "Braille (mano destra)"
+
+#: ../rules/base.xml.in.h:110
+msgid "Brother Internet Keyboard"
+msgstr "Brother Internet Keyboard"
+
+# UE
+#: ../rules/base.xml.in.h:111
+msgid "Bulgarian"
+msgstr "Bulgara (fonetica nuova)"
+
+#: ../rules/base.xml.in.h:112
+msgid "Bulgarian (new phonetic)"
+msgstr "Bulgara (fonetica nuova)"
+
+# variante bulgara
+#: ../rules/base.xml.in.h:113
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Bulgara (fonetica tradizionale)"
+
+#: ../rules/base.xml.in.h:114
+msgid "Burmese"
+msgstr "Burmese"
+
+#: ../rules/base.xml.in.h:115
+msgid "Canadian Multilingual"
+msgstr "Canadese multilingue"
+
+#: ../rules/base.xml.in.h:116
+msgid "Canadian Multilingual (first part)"
+msgstr "Canadese multilingue (prima parte)"
+
+#: ../rules/base.xml.in.h:117
+msgid "Canadian Multilingual (second part)"
+msgstr "Canadese multilingue (seconda parte)"
+
+#: ../rules/base.xml.in.h:118
+msgid "Caps Lock"
+msgstr "BlocMaiusc"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:119
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "BlocMaiusc (sceglie il terzo livello, blocca quando premuto assieme a un altro selettore del terzo livello)"
+
+# per come appare, tradurre il "to" è superfluo
+#: ../rules/base.xml.in.h:120
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "BlocMaiusc (prima disposizione), Maiusc+BlocMaiusc (ultima disposizione)"
+
+#: ../rules/base.xml.in.h:121
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "BlocMaiusc (mentre è premuto), Alt+BlocMaiusc esegue l'azione blocca maiuscole originale"
+
+#: ../rules/base.xml.in.h:122
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "BlocMaiusc agisce come Maiusc con il blocco. Maiusc \"mette in pausa\" BlocMaiusc"
+
+#: ../rules/base.xml.in.h:123
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "BlocMaiusc agisce come Maiusc con il blocco. Maiusc non ha effetto su BlocMaiusc"
+
+#: ../rules/base.xml.in.h:124
+msgid "Caps Lock is disabled"
+msgstr "BlocMaiusc è disabilitato"
+
+# optionList: caps
+# descrizione: CapsLock tweaks. "Internal" capitalization means capitalization
+# using some internal tables. Otherwise "as Shift" - means using next group
+#: ../rules/base.xml.in.h:125
+msgid "Caps Lock key behavior"
+msgstr "Comportamento tasto BlocMaiusc"
+
+#: ../rules/base.xml.in.h:126
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "BlocMaiusc commuta Maiusc così da avere effetto su tutti i tasti"
+
+#: ../rules/base.xml.in.h:127
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "BlocMaiusc commuta l'uso normale delle lettere maiuscole dei caratteri alfabetici"
+
+# "Internal" capitalization means capitalization using some internal tables.
+# Otherwise "as Shift" - means using next group.
+#: ../rules/base.xml.in.h:128
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "BlocMaiusc fa uso interno delle lettere maiuscole. Maiusc \"mette in pausa\" BlocMaiusc"
+
+#: ../rules/base.xml.in.h:129
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "BlocMaiusc fa uso interno delle lettere maiuscole. Maiusc non ha effetto su BlocMaiusc"
+
+#: ../rules/base.xml.in.h:130
+msgid "Catalan"
+msgstr "Catalana"
+
+# variante USA
+#: ../rules/base.xml.in.h:131
+msgid "Cherokee"
+msgstr "Cherokee"
+
+#: ../rules/base.xml.in.h:132
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
+
+#: ../rules/base.xml.in.h:133
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
+
+#: ../rules/base.xml.in.h:134
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (opzione alternativa)"
+
+#: ../rules/base.xml.in.h:135
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
+
+#: ../rules/base.xml.in.h:136
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
+
+#: ../rules/base.xml.in.h:137
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
+
+#: ../rules/base.xml.in.h:138
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
+
+#: ../rules/base.xml.in.h:139
+msgid "Chicony Internet Keyboard"
+msgstr "Chicony Internet Keyboard"
+
+#: ../rules/base.xml.in.h:140
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
+
+#: ../rules/base.xml.in.h:141
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
+
+#: ../rules/base.xml.in.h:142
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
+
+# UE
+#: ../rules/base.xml.in.h:143
+msgid "Chinese"
+msgstr "Cinese"
+
+#: ../rules/base.xml.in.h:144
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Cinese (tibetana con numeri ASCII)"
+
+#: ../rules/base.xml.in.h:145
+msgid "Chinese (Tibetan)"
+msgstr "Cinese (tibetana)"
+
+#: ../rules/base.xml.in.h:146
+msgid "Chinese (Uyghur)"
+msgstr "Cinese (uyghur)"
+
+#: ../rules/base.xml.in.h:147
+msgid "Classmate PC"
+msgstr "Classmate PC"
+
+#: ../rules/base.xml.in.h:148
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq tastiera Easy Access"
+
+#: ../rules/base.xml.in.h:149
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internet Keyboard (13 tasti)"
+
+#: ../rules/base.xml.in.h:150
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internet Keyboard (18 tasti)"
+
+#: ../rules/base.xml.in.h:151
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internet Keyboard (7 tasti)"
+
+#: ../rules/base.xml.in.h:152
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq tastiera iPaq"
+
+# optionList: compose
+# descrizione: Tweaking the position of the "Compose" key: mapping to
+# existing PC keys
+#: ../rules/base.xml.in.h:153
+msgid "Compose key position"
+msgstr "Posizione tasto Compose"
+
+#: ../rules/base.xml.in.h:154
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Backspace"
+
+#: ../rules/base.xml.in.h:155
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control è applicato ai tasti Alt, Alt è applicato ai tasti Win"
+
+#: ../rules/base.xml.in.h:156
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control è applicato ai tasti Win (e ai soliti tasti Ctrl)"
+
+#: ../rules/base.xml.in.h:157
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
+
+# UE
+#: ../rules/base.xml.in.h:158
+msgid "Croatian"
+msgstr "Croata"
+
+#: ../rules/base.xml.in.h:159
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Croata (tastiera USA con digrammi croati)"
+
+#: ../rules/base.xml.in.h:160
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Croata (tastiera USA con lettere croate)"
+
+#: ../rules/base.xml.in.h:161
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Croata (con digrammi croati)"
+
+#: ../rules/base.xml.in.h:162
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Croata (con caporali per virgolette)"
+
+# optionList: ctrl
+# descrizione: Tweaking the position of the "Ctrl" key
+#: ../rules/base.xml.in.h:163
+msgid "Ctrl key position"
+msgstr "Posizione tasto Ctrl"
+
+#: ../rules/base.xml.in.h:164
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Maiusc"
+
+# UE
+#: ../rules/base.xml.in.h:165
+msgid "Czech"
+msgstr "Ceca"
+
+#: ../rules/base.xml.in.h:166
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Ceca (disposizione UCW solo lettere accentate)"
+
+#: ../rules/base.xml.in.h:167
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Coca (Dvorak USA con supporto UCW CZ)"
+
+#: ../rules/base.xml.in.h:168
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Ceca (con tasti &lt;\\|&gt;)"
+
+#: ../rules/base.xml.in.h:169
+msgid "Czech (qwerty)"
+msgstr "Ceca (qwerty)"
+
+#: ../rules/base.xml.in.h:170
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Ceca (qwerty, backslash esteso)"
+
+#: ../rules/base.xml.in.h:171
+msgid "DTK2000"
+msgstr "DTK2000"
+
+#: ../rules/base.xml.in.h:172
+msgid "Danish"
+msgstr "Danese"
+
+#: ../rules/base.xml.in.h:173
+msgid "Danish (Dvorak)"
+msgstr "Danese (Dvorak)"
+
+#: ../rules/base.xml.in.h:174
+msgid "Danish (Mac)"
+msgstr "Danese (Mac)"
+
+#: ../rules/base.xml.in.h:175
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Danese (Mac, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:176
+msgid "Danish (eliminate dead keys)"
+msgstr "Danese (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:177
+msgid "Default numeric keypad keys"
+msgstr "Tasti predefiniti nel tastierino numerico"
+
+#: ../rules/base.xml.in.h:178
+msgid "Dell"
+msgstr "Dell"
+
+#: ../rules/base.xml.in.h:179
+msgid "Dell 101-key PC"
+msgstr "Dell 101 tasti PC"
+
+#: ../rules/base.xml.in.h:180
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Dell portatile Inspiron 6xxx/8xxx"
+
+#: ../rules/base.xml.in.h:181
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Dell portatile serie Precision M"
+
+#: ../rules/base.xml.in.h:182
+msgid "Dell Latitude series laptop"
+msgstr "Dell portatile serie Latitude"
+
+#: ../rules/base.xml.in.h:183
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
+
+#: ../rules/base.xml.in.h:184
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
+
+#: ../rules/base.xml.in.h:185
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
+
+#: ../rules/base.xml.in.h:186
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell tastiera USB multimediale"
+
+#: ../rules/base.xml.in.h:187
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa tastiera Wireless Desktop"
+
+#: ../rules/base.xml.in.h:188
+msgid "Dhivehi"
+msgstr "Dhivehi"
+
+#: ../rules/base.xml.in.h:189
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond serie 9801/9802"
+
+#: ../rules/base.xml.in.h:190
+msgid "Dutch"
+msgstr "Olandese"
+
+#: ../rules/base.xml.in.h:191
+msgid "Dutch (Mac)"
+msgstr "Olandese (Mac)"
+
+#: ../rules/base.xml.in.h:192
+msgid "Dutch (Sun dead keys)"
+msgstr "Olandese (tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:193
+msgid "Dutch (standard)"
+msgstr "Olandese (standard)"
+
+#: ../rules/base.xml.in.h:194
+msgid "Dzongkha"
+msgstr "Dzongkha"
+
+#: ../rules/base.xml.in.h:195
+msgid "Enable extra typographic characters"
+msgstr "Abilitare caratteri tipografici aggiuntivi"
+
+#: ../rules/base.xml.in.h:196
+msgid "English (Canada)"
+msgstr "Inglese (Canada)"
+
+#: ../rules/base.xml.in.h:197
+msgid "English (Colemak)"
+msgstr "Inglese (Colemak)"
+
+#: ../rules/base.xml.in.h:198
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Inglese (Dvorak internazionale alternativa senza tasti muti)"
+
+#: ../rules/base.xml.in.h:199
+msgid "English (Dvorak international with dead keys)"
+msgstr "Inglese (Dvorak internazionale con tasti muti)"
+
+#: ../rules/base.xml.in.h:200
+msgid "English (Dvorak)"
+msgstr "Inglese (Dvorak)"
+
+# variante canadese
+#: ../rules/base.xml.in.h:201
+msgid "English (Ghana)"
+msgstr "Inglese (Ghana)"
+
+#: ../rules/base.xml.in.h:202
+msgid "English (Ghana, GILLBT)"
+msgstr "Inglese (Ghana, GILLBT)"
+
+#: ../rules/base.xml.in.h:203
+msgid "English (Ghana, multilingual)"
+msgstr "Inglese (Ghana, multilingue)"
+
+#: ../rules/base.xml.in.h:204
+msgid "English (India, with RupeeSign)"
+msgstr "Inglese (India, con simbolo rupia)"
+
+#: ../rules/base.xml.in.h:205
+msgid "English (Macintosh)"
+msgstr "Inglese (Macintosh )"
+
+#: ../rules/base.xml.in.h:206
+msgid "English (Mali, USA Mac)"
+msgstr "Inglese (Mali, Mac USA)"
+
+#: ../rules/base.xml.in.h:207
+msgid "English (Mali, USA international)"
+msgstr "Inglese (Mali, internazionale USA)"
+
+#: ../rules/base.xml.in.h:208
+msgid "English (Nigeria)"
+msgstr "Inglese (Nigeria)"
+
+#: ../rules/base.xml.in.h:209
+msgid "English (South Africa)"
+msgstr "Inglese (Sud Africa)"
+
+# variante canadese
+#: ../rules/base.xml.in.h:210
+msgid "English (UK)"
+msgstr "Inglese (UK)"
+
+#: ../rules/base.xml.in.h:211
+msgid "English (UK, Colemak)"
+msgstr "Inglese (UK, Colemak)"
+
+#: ../rules/base.xml.in.h:212
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Inglese (UK, punteggiatura UK Dvorak)"
+
+#: ../rules/base.xml.in.h:213
+msgid "English (UK, Dvorak)"
+msgstr "Inglese (UK, Dvorak)"
+
+#: ../rules/base.xml.in.h:214
+msgid "English (UK, Mac international)"
+msgstr "Inglese (UK, Mac internazionale)"
+
+#: ../rules/base.xml.in.h:215
+msgid "English (UK, Mac)"
+msgstr "Inglese (UK, Mac)"
+
+#: ../rules/base.xml.in.h:216
+msgid "English (UK, extended, WinKeys)"
+msgstr "Inglese (UK, estesa, tasti Win)"
+
+#: ../rules/base.xml.in.h:217
+msgid "English (UK, international with dead keys)"
+msgstr "Inglese (UK, internazionale con tasti muti)"
+
+# variante canadese
+#: ../rules/base.xml.in.h:218
+msgid "English (US)"
+msgstr "Inglese (USA)"
+
+#: ../rules/base.xml.in.h:219
+msgid "English (US, alternative international)"
+msgstr "Inglese (USA, internazionale alternativa)"
+
+#: ../rules/base.xml.in.h:220
+msgid "English (US, international with dead keys)"
+msgstr "Inglese (USA, internazionale con tasti muti)"
+
+#: ../rules/base.xml.in.h:221
+msgid "English (US, with euro on 5)"
+msgstr "Inglese (USA, con Euro sul 5)"
+
+#: ../rules/base.xml.in.h:222
+msgid "English (classic Dvorak)"
+msgstr "Inglese (Dvorak classica)"
+
+#: ../rules/base.xml.in.h:223
+msgid "English (international AltGr dead keys)"
+msgstr "Inglese (internazionale tasti muti AltGr)"
+
+#: ../rules/base.xml.in.h:224
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Inglese (commuta disposizione sul tasto moltiplica/dividi)"
+
+#: ../rules/base.xml.in.h:225
+msgid "English (left handed Dvorak)"
+msgstr "Inglese (Dvorak mancina)"
+
+#: ../rules/base.xml.in.h:226
+msgid "English (programmer Dvorak)"
+msgstr "Inglese (Dvorak per programmatori)"
+
+#: ../rules/base.xml.in.h:227
+msgid "English (right handed Dvorak)"
+msgstr "Inglese (Dvorak destrorsa)"
+
+#: ../rules/base.xml.in.h:228
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
+
+# lasciato enter, come nome di segnale
+# sono due uno è enter, l'altro return
+#: ../rules/base.xml.in.h:229
+msgid "Enter on keypad"
+msgstr "Enter sul tastierino numerico"
+
+#: ../rules/base.xml.in.h:230
+msgid "Esperanto"
+msgstr "Esperanto"
+
+# variante esperanto
+#
+# to diplace: 1) spostare, rimuovere; dislocare
+# 2) rimpiazzare, sostituire
+# 3) soppiantare
+#
+# sarà corretto spostate???
+#: ../rules/base.xml.in.h:231
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Esperanto (punto e virgola e virgolette spostate, obsoleta)"
+
+# UE
+#: ../rules/base.xml.in.h:232
+msgid "Estonian"
+msgstr "Estone"
+
+#: ../rules/base.xml.in.h:233
+msgid "Estonian (Dvorak)"
+msgstr "Estone (Dvorak)"
+
+#: ../rules/base.xml.in.h:234
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Estone (tastiera USA con lettere estoni)"
+
+#: ../rules/base.xml.in.h:235
+msgid "Estonian (eliminate dead keys)"
+msgstr "Estone (tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:236
+msgid "Euro on 2"
+msgstr "Euro sul 2"
+
+#: ../rules/base.xml.in.h:237
+msgid "Euro on 4"
+msgstr "Euro sul 4"
+
+#: ../rules/base.xml.in.h:238
+msgid "Euro on 5"
+msgstr "Euro sul 5"
+
+#: ../rules/base.xml.in.h:239
+msgid "Euro on E"
+msgstr "Euro sulla E"
+
+#: ../rules/base.xml.in.h:240
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
+
+# Ewe: variante del Ghana
+#: ../rules/base.xml.in.h:241
+msgid "Ewe"
+msgstr "Ewe"
+
+#: ../rules/base.xml.in.h:242
+msgid "FL90"
+msgstr "FL90"
+
+#: ../rules/base.xml.in.h:243
+msgid "Faroese"
+msgstr "Faeroese"
+
+#: ../rules/base.xml.in.h:244
+msgid "Faroese (eliminate dead keys)"
+msgstr "Faeroese (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:245
+msgid "Filipino"
+msgstr "Filippina"
+
+#: ../rules/base.xml.in.h:246
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Filippina (baybayin Capewell-Dvorak)"
+
+#: ../rules/base.xml.in.h:247
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Filippina (latina Capewell-Dvorak)"
+
+#: ../rules/base.xml.in.h:248
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Filippina (baybayin Capewell-QWERF 2006)"
+
+#: ../rules/base.xml.in.h:249
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Filippina (latina Capewell-QWERF 2006)"
+
+#: ../rules/base.xml.in.h:250
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Filippina (baybayin Colemak)"
+
+#: ../rules/base.xml.in.h:251
+msgid "Filipino (Colemak Latin)"
+msgstr "Filippina (latina Colemak)"
+
+#: ../rules/base.xml.in.h:252
+msgid "Filipino (Dvorak Latin)"
+msgstr "Filippina (latina Dvorak)"
+
+#: ../rules/base.xml.in.h:253
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Filippina (baybayin QWERTY)"
+
+#: ../rules/base.xml.in.h:254
+msgid "Finnish"
+msgstr "Finlandese"
+
+#: ../rules/base.xml.in.h:255
+msgid "Finnish (Mac)"
+msgstr "Finlandese (Mac)"
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "Finlandese (classica)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Finlandese (classica, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr "Finlandese (saami settentrinale)"
+
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
+#: ../rules/base.xml.in.h:261
+msgid "Four-level key with abstract separators"
+msgstr "Tasto di quarto livello con separatori astratti"
+
+#: ../rules/base.xml.in.h:262
+msgid "Four-level key with comma"
+msgstr "Tasto di quarto livello con virgola"
+
+#: ../rules/base.xml.in.h:263
+msgid "Four-level key with dot"
+msgstr "Tasto di quarto livello con punto"
+
+#: ../rules/base.xml.in.h:264
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr "Tasto di quarto livello con punto, restrizione latin-9"
+
+# http://en.wikipedia.org/wiki/Momayyez
+#: ../rules/base.xml.in.h:265
+msgid "Four-level key with momayyez"
+msgstr "Tasto di quarto livello con momayyez"
+
+#: ../rules/base.xml.in.h:266
+msgid "French"
+msgstr "Francese"
+
+# variante francese
+#: ../rules/base.xml.in.h:267
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Francese (Bepo, ergonomica, tipo Dvorak)"
+
+# variante francese
+#: ../rules/base.xml.in.h:268
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Francese (Bepo, ergonomica, tipo Dvorak, solo latin-9)"
+
+#: ../rules/base.xml.in.h:269
+msgid "French (Breton)"
+msgstr "Francese (bretone)"
+
+#: ../rules/base.xml.in.h:270
+msgid "French (Canada, Dvorak)"
+msgstr "Francese (Canada, Dvorak)"
+
+#: ../rules/base.xml.in.h:271
+msgid "French (Canada, legacy)"
+msgstr "Francese (Canada, vecchia maniera)"
+
+#: ../rules/base.xml.in.h:272
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Francese (Repubblica Democratica del Congo)"
+
+#: ../rules/base.xml.in.h:273
+msgid "French (Dvorak)"
+msgstr "Francese (Dvorak)"
+
+# Questa invece variante delle tastiere francesi
+#: ../rules/base.xml.in.h:274
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Francese (georgiana AZERTY Tskapo)"
+
+#: ../rules/base.xml.in.h:275
+msgid "French (Guinea)"
+msgstr "Francese (Guinea)"
+
+#: ../rules/base.xml.in.h:276
+msgid "French (Mac)"
+msgstr "Francese (Mac)"
+
+# lasciata la forma francese, magari ha un senso particolare
+# variante del mali
+#: ../rules/base.xml.in.h:277
+msgid "French (Mali, alternative)"
+msgstr "Francese (Mali, alternativa)"
+
+#: ../rules/base.xml.in.h:278
+msgid "French (Morocco)"
+msgstr "Francese (Marocco)"
+
+#: ../rules/base.xml.in.h:279
+msgid "French (Occitan)"
+msgstr "Francese (occitano)"
+
+#: ../rules/base.xml.in.h:280
+msgid "French (Sun dead keys)"
+msgstr "Francese (tasti muti Sun)"
+
+# UE
+#: ../rules/base.xml.in.h:281
+msgid "French (Switzerland)"
+msgstr "Francese (Svizzera)"
+
+# UE
+#: ../rules/base.xml.in.h:282
+msgid "French (Switzerland, Mac)"
+msgstr "Francese (Svizzera, Mac)"
+
+#: ../rules/base.xml.in.h:283
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Francese (Svizzera, tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:284
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Francese (Svizzera tasti muti rimossi)"
+
+# variante marocchina
+#: ../rules/base.xml.in.h:285
+msgid "French (alternative)"
+msgstr "Francese (alternativa)"
+
+#: ../rules/base.xml.in.h:286
+msgid "French (alternative, Sun dead keys)"
+msgstr "Francese (alternativa, tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:287
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Francese (alternativa, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:288
+msgid "French (alternative, latin-9 only)"
+msgstr "Francese (alternativa, solo latin-9)"
+
+#: ../rules/base.xml.in.h:289
+msgid "French (eliminate dead keys)"
+msgstr "Francese (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:290
+msgid "French (legacy alternative)"
+msgstr "Francese (alternativa vecchia maniera)"
+
+#: ../rules/base.xml.in.h:291
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Francese (vecchia maniera, alternativa, tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:292
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Francese (vecchia maniera, alternativa, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:293
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Portatile AMILO Fujitsu-Siemens Computers"
+
+# Fula: variante del Ghana
+#: ../rules/base.xml.in.h:294
+msgid "Fula"
+msgstr "Fula"
+
+# Codice tre lettere per U.K.
+#: ../rules/base.xml.in.h:295
+msgid "GBr"
+msgstr "GBR"
+
+# Ga: variante del ghana
+#: ../rules/base.xml.in.h:296
+msgid "Ga"
+msgstr "Ga"
+
+#: ../rules/base.xml.in.h:297
+msgid "Generic 101-key PC"
+msgstr "Generica 101 tasti PC"
+
+#: ../rules/base.xml.in.h:298
+msgid "Generic 102-key (Intl) PC"
+msgstr "Generica 102 tasti (Intl) PC"
+
+#: ../rules/base.xml.in.h:299
+msgid "Generic 104-key PC"
+msgstr "Generica 104 tasti PC"
+
+#: ../rules/base.xml.in.h:300
+msgid "Generic 105-key (Intl) PC"
+msgstr "Generica 105 tasti (Intl) PC"
+
+#: ../rules/base.xml.in.h:301
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
+
+#: ../rules/base.xml.in.h:302
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+
+#: ../rules/base.xml.in.h:303
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
+
+#: ../rules/base.xml.in.h:304
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
+
+#: ../rules/base.xml.in.h:305
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
+
+# Curiosamente è una variante delle tastiere italiane...
+#: ../rules/base.xml.in.h:306
+msgid "Georgian"
+msgstr "Georgiana"
+
+# Curiosamente è una variante delle tastiere italiane...
+#: ../rules/base.xml.in.h:307
+msgid "Georgian (MESS)"
+msgstr "Georgiana (MESS)"
+
+#: ../rules/base.xml.in.h:308
+msgid "Georgian (Ossetian)"
+msgstr "Gergiana (osseta)"
+
+#: ../rules/base.xml.in.h:309
+msgid "Georgian (ergonomic)"
+msgstr "Gergiana (ergonomica)"
+
+# UE
+#: ../rules/base.xml.in.h:310
+msgid "German"
+msgstr "Tedesca"
+
+# UE
+#: ../rules/base.xml.in.h:311
+msgid "German (Austria)"
+msgstr "Tedesca (Austria)"
+
+#: ../rules/base.xml.in.h:312
+msgid "German (Austria, Mac)"
+msgstr "Tedesca (Austria, Mac)"
+
+#: ../rules/base.xml.in.h:313
+msgid "German (Austria, Sun dead keys)"
+msgstr "Tedesca (Austria, tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:314
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Tedesca (Austria, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:315
+msgid "German (Dvorak)"
+msgstr "Tedesca (Dvorak)"
+
+#: ../rules/base.xml.in.h:316
+msgid "German (Mac)"
+msgstr "Tedesca (Mac)"
+
+#: ../rules/base.xml.in.h:317
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Tedesca (Mac, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:318
+msgid "German (Neo 2)"
+msgstr "Tedesca (Neo 2)"
+
+#: ../rules/base.xml.in.h:319
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Tedesca (tastiera rumena con lettere tedesche)"
+
+#: ../rules/base.xml.in.h:320
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Tedesca (tastiera rumena con lettere tedesche, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:321
+msgid "German (Sun dead keys)"
+msgstr "Tedesca (tasti muti Sun)"
+
+# UE
+#: ../rules/base.xml.in.h:322
+msgid "German (Switzerland, Mac)"
+msgstr "Tedesca (Svizzera, Mac)"
+
+#: ../rules/base.xml.in.h:323
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Tedesca (Svizzera, tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:324
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Tedesca (Svizzera, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:325
+msgid "German (dead acute)"
+msgstr "Tedesca (acuto muto)"
+
+# variante tedesca...
+#
+# rispetto alla tedesca normale cambia un carattere, ^
+# ah, le tastiere tedesche non hanno le lettere accentate, per cui
+# probabilemente 'sta cosa è importate per il Compose
+#: ../rules/base.xml.in.h:326
+msgid "German (dead grave acute)"
+msgstr "Tedesca (acuto grave muto)"
+
+#: ../rules/base.xml.in.h:327
+msgid "German (eliminate dead keys)"
+msgstr "Tedesca (tasti muti rimossi)"
+
+# FIXME tradotto come in iso-codes, ma inferiore nun se po' vede...
+#: ../rules/base.xml.in.h:328
+msgid "German (lower Sorbian qwertz)"
+msgstr "Tedesca (sorabo inferiore qwertz)"
+
+# codice iso639: dsb
+# FIXME tradotto come in iso-codes, ma inferiore nun se po' vede...
+#: ../rules/base.xml.in.h:329
+msgid "German (lower Sorbian)"
+msgstr "Tedesca (sorabo inferiore)"
+
+#: ../rules/base.xml.in.h:330
+msgid "German (qwerty)"
+msgstr "Tedesca (qwerty)"
+
+# UE
+#: ../rules/base.xml.in.h:331
+msgid "Greek"
+msgstr "Greca"
+
+#: ../rules/base.xml.in.h:332
+msgid "Greek (eliminate dead keys)"
+msgstr "Greca (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:333
+msgid "Greek (extended)"
+msgstr "Greca (estesa)"
+
+# Variante greca
+#: ../rules/base.xml.in.h:334
+msgid "Greek (polytonic)"
+msgstr "Greca (politonica)"
+
+#: ../rules/base.xml.in.h:335
+msgid "Greek (simple)"
+msgstr "Greca (semplice)"
+
+# Gujarati: variante india
+#: ../rules/base.xml.in.h:336
+msgid "Gujarati"
+msgstr "Gujarati"
+
+#: ../rules/base.xml.in.h:337
+msgid "Gyration"
+msgstr "Gyration"
+
+#: ../rules/base.xml.in.h:338
+msgid "HTC Dream"
+msgstr "HTC Dream"
+
+#: ../rules/base.xml.in.h:339
+msgid "Happy Hacking Keyboard"
+msgstr "Happy Hacking Keyboard"
+
+#: ../rules/base.xml.in.h:340
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Happy Hacking Keyboard per Mac"
+
+# Hausa: variante Ghana
+#: ../rules/base.xml.in.h:341
+msgid "Hausa"
+msgstr "Hausa"
+
+#: ../rules/base.xml.in.h:342
+msgid "Hebrew"
+msgstr "Ebraica"
+
+# variante bulgare
+#: ../rules/base.xml.in.h:343
+msgid "Hebrew (Phonetic)"
+msgstr "Ebraica (fonetica)"
+
+#: ../rules/base.xml.in.h:344
+msgid "Hebrew (Tiro)"
+msgstr "Ebraica (Tiro)"
+
+#: ../rules/base.xml.in.h:345
+msgid "Hebrew (lyx)"
+msgstr "Ebraica (lyx)"
+
+#: ../rules/base.xml.in.h:346
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internet Keyboard"
+
+# omesso Notebook
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110"
+
+#: ../rules/base.xml.in.h:348
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
+
+#: ../rules/base.xml.in.h:349
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
+
+#: ../rules/base.xml.in.h:350
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
+
+#: ../rules/base.xml.in.h:351
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
+
+#: ../rules/base.xml.in.h:352
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
+
+#: ../rules/base.xml.in.h:353
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
+
+#: ../rules/base.xml.in.h:354
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavillion ZT11xx"
+
+#: ../rules/base.xml.in.h:355
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavillion dv5"
+
+#: ../rules/base.xml.in.h:356
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard Multimedia Keyboard SK-250x"
+
+#: ../rules/base.xml.in.h:357
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
+
+#: ../rules/base.xml.in.h:358
+msgid "Hexadecimal"
+msgstr "Esadecimale"
+
+# Hindi Bolnagri: variante India
+#: ../rules/base.xml.in.h:359
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi (bolnagri)"
+
+# variante indiana
+#: ../rules/base.xml.in.h:360
+msgid "Hindi (Wx)"
+msgstr "Hindi (Wx)"
+
+#: ../rules/base.xml.in.h:361
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
+
+#: ../rules/base.xml.in.h:362
+msgid "Htc Dream phone"
+msgstr "Telefono HTC Dream"
+
+# UE
+#: ../rules/base.xml.in.h:363
+msgid "Hungarian"
+msgstr "Ungherese"
+
+#: ../rules/base.xml.in.h:364
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Ungherese (101/qwerty/virgola/tasti muti)"
+
+#: ../rules/base.xml.in.h:365
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Ungherese (101/qwerty/virgola/tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:366
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Ungherese (101/qwerty/punto/tasti muti)"
+
+#: ../rules/base.xml.in.h:367
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Ungherese (101/qwerty/punto/tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:368
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Ungherese (101/qwertz/virgola/tasti muti)"
+
+#: ../rules/base.xml.in.h:369
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Ungherese (101/qwertz/virgola/tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:370
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Ungherese (101/qwertz/punto/tasti muti)"
+
+#: ../rules/base.xml.in.h:371
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Ungherese (101/qwertz/punto/tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:372
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Ungherese (102/qwerty/virgola/tasti muti)"
+
+#: ../rules/base.xml.in.h:373
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Ungherese (102/qwerty/virgola/tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:374
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Ungherese (102/qwerty/punto/tasti muti)"
+
+#: ../rules/base.xml.in.h:375
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Ungherese (102/qwerty/punto/tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:376
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Ungherese (102/qwertz/virgola/tasti muti)"
+
+#: ../rules/base.xml.in.h:377
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Ungherese (102/qwertz/virgola/tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:378
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Ungherese (102/qwertz/punto/tasti muti)"
+
+#: ../rules/base.xml.in.h:379
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Ungherese (102/qwertz/punto/tasti muti esclusi)"
+
+#: ../rules/base.xml.in.h:380
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Ungherese (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:381
+msgid "Hungarian (qwerty)"
+msgstr "Ungherese (qwerty)"
+
+#: ../rules/base.xml.in.h:382
+msgid "Hungarian (standard)"
+msgstr "Ungherese (standard)"
+
+#: ../rules/base.xml.in.h:383
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper è applicato ai tasti Win"
+
+#: ../rules/base.xml.in.h:384
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
+
+#: ../rules/base.xml.in.h:385
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
+
+#: ../rules/base.xml.in.h:386
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
+
+#: ../rules/base.xml.in.h:387
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+
+#: ../rules/base.xml.in.h:388
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
+
+#: ../rules/base.xml.in.h:389
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+
+# UE
+#: ../rules/base.xml.in.h:390
+msgid "Icelandic"
+msgstr "Islandese"
+
+#: ../rules/base.xml.in.h:391
+msgid "Icelandic (Dvorak)"
+msgstr "Islandese (Dvorak)"
+
+# UE
+#: ../rules/base.xml.in.h:392
+msgid "Icelandic (Mac)"
+msgstr "Islandese (Mac)"
+
+#: ../rules/base.xml.in.h:393
+msgid "Icelandic (Sun dead keys)"
+msgstr "Islandese (tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:394
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Islandese (tasti muti rimossi)"
+
+# Igbo: variante Nigeria
+#: ../rules/base.xml.in.h:395
+msgid "Igbo"
+msgstr "Igbo"
+
+# UE
+#: ../rules/base.xml.in.h:396
+msgid "Indian"
+msgstr "Indiana"
+
+# Inuktitut: variante canadese
+#: ../rules/base.xml.in.h:397
+msgid "Inuktitut"
+msgstr "Inuktitut"
+
+# UE
+#: ../rules/base.xml.in.h:398
+msgid "Iraqi"
+msgstr "Iracheno"
+
+#: ../rules/base.xml.in.h:399
+msgid "Irish"
+msgstr "Irlandese"
+
+#: ../rules/base.xml.in.h:400
+msgid "Irish (CloGaelach)"
+msgstr "Irlandese (CloGaelach)"
+
+#: ../rules/base.xml.in.h:401
+msgid "Irish (Ogham IS434)"
+msgstr "Irlandese (Ogham IS434)"
+
+#: ../rules/base.xml.in.h:402
+msgid "Irish (Ogham)"
+msgstr "Irlandese (Ogham)"
+
+# Sarà da tradurre? -Luca
+#: ../rules/base.xml.in.h:403
+msgid "Irish (UnicodeExpert)"
+msgstr "Irlandese (UnicodeExpert)"
+
+# UE
+#: ../rules/base.xml.in.h:404
+msgid "Italian"
+msgstr "Italiana"
+
+# Curiosamente è una variante delle tastiere italiane...
+#: ../rules/base.xml.in.h:405
+msgid "Italian (Georgian)"
+msgstr "Italiana (georgiana)"
+
+#: ../rules/base.xml.in.h:406
+msgid "Italian (Mac)"
+msgstr "Italiana (Mac)"
+
+#: ../rules/base.xml.in.h:407
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Italiana (tastiera USA con lettere italiane)"
+
+#: ../rules/base.xml.in.h:408
+msgid "Italian (eliminate dead keys)"
+msgstr "Italiana (tasti muti rimossi)"
+
+# UE
+#: ../rules/base.xml.in.h:409
+msgid "Japanese"
+msgstr "Giapponese"
+
+#: ../rules/base.xml.in.h:410
+msgid "Japanese (Kana 86)"
+msgstr "Giapponese (Kana 86)"
+
+#: ../rules/base.xml.in.h:411
+msgid "Japanese (Kana)"
+msgstr "Giapponese (Kana)"
+
+#: ../rules/base.xml.in.h:412
+msgid "Japanese (Mac)"
+msgstr "Giapponese (Mac)"
+
+#: ../rules/base.xml.in.h:413
+msgid "Japanese (OADG 109A)"
+msgstr "Giapponese (OADG 109A)"
+
+#: ../rules/base.xml.in.h:414
+msgid "Japanese (PC-98xx Series)"
+msgstr "Giappone (serie PC-98xx)"
+
+# optionList: japan
+# descrizione:
+#
+# <b>Japanese keyboard options</b>
+# [*] Kana Lock key is locking
+# [ ] NICOLA-F style Backspace
+#: ../rules/base.xml.in.h:415
+msgid "Japanese keyboard options"
+msgstr "Opzioni tastiera giapponese"
+
+#: ../rules/base.xml.in.h:416
+msgid "Kana Lock key is locking"
+msgstr "Il tasto Kana Lock sta bloccando"
+
+# variante india
+#: ../rules/base.xml.in.h:417
+msgid "Kannada"
+msgstr "Kannada"
+
+#: ../rules/base.xml.in.h:418
+msgid "Kazakh"
+msgstr "Kazaka"
+
+#: ../rules/base.xml.in.h:419
+msgid "Kazakh (with Russian)"
+msgstr "Kazaka (con russo)"
+
+#: ../rules/base.xml.in.h:420
+msgid "Key sequence to kill the X server"
+msgstr "Sequenza di tasti per terminare il server X"
+
+# optionList: lv3
+# descrizione: The key combination used to choose the 3rd (and 4th, together
+# with Shift) level of symbols
+#: ../rules/base.xml.in.h:421
+msgid "Key to choose 3rd level"
+msgstr "Tasto per scegliere il terzo livello"
+
+#: ../rules/base.xml.in.h:422
+msgid "Key to choose 5th level"
+msgstr "Tasto per scegliere il quinto livello"
+
+# optionList: grp
+# descrizione: The key combination used to switch between groups
+#: ../rules/base.xml.in.h:423
+msgid "Key(s) to change layout"
+msgstr "Tasto o tasti per cambiare disposizione"
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
+
+#: ../rules/base.xml.in.h:425
+msgid "Khmer (Cambodian)"
+msgstr "Khmer (cambogiana)"
+
+# variante tastiera kenya
+#: ../rules/base.xml.in.h:426
+msgid "Kikuyu"
+msgstr "Kikuyu"
+
+# nome di modello
+#: ../rules/base.xml.in.h:427
+msgid "Kinesis"
+msgstr "Kinesis"
+
+#: ../rules/base.xml.in.h:428
+msgid "Korean"
+msgstr "Coreana"
+
+#: ../rules/base.xml.in.h:429
+msgid "Korean (101/104 key compatible)"
+msgstr "Coreana (compatibile 101/104 tasti)"
+
+#: ../rules/base.xml.in.h:430
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Curda (Iran, arabo-latina)"
+
+#: ../rules/base.xml.in.h:431
+msgid "Kurdish (Iran, F)"
+msgstr "Curda (Iran, F)"
+
+#: ../rules/base.xml.in.h:432
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Curda (Iran, latina Q)"
+
+# FIXME le altre sono Alt
+#: ../rules/base.xml.in.h:433
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Curda (Iran, latina alt-Q)"
+
+#: ../rules/base.xml.in.h:434
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Curda (Iraq, arabo-latina)"
+
+#: ../rules/base.xml.in.h:435
+msgid "Kurdish (Iraq, F)"
+msgstr "Curda (Iraq, F)"
+
+#: ../rules/base.xml.in.h:436
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Curda (Iraq, latina Alt-Q)"
+
+#: ../rules/base.xml.in.h:437
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Curda (Iraq, latina Q)"
+
+#: ../rules/base.xml.in.h:438
+msgid "Kurdish (Syria, F)"
+msgstr "Curda (Siria, F)"
+
+#: ../rules/base.xml.in.h:439
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Curda (Siria, latina Alt-Q)"
+
+#: ../rules/base.xml.in.h:440
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Curda (Siria, latina Q)"
+
+#: ../rules/base.xml.in.h:441
+msgid "Kurdish (Turkey, F)"
+msgstr "Curda (Turchia, F)"
+
+#: ../rules/base.xml.in.h:442
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Curda (Turchia, latina Alt-Q)"
+
+#: ../rules/base.xml.in.h:443
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Curda (Turchia, latina Q)"
+
+#: ../rules/base.xml.in.h:444
+msgid "Kutenai"
+msgstr "Kutenai"
+
+# UE
+#: ../rules/base.xml.in.h:445
+msgid "Kyrgyz"
+msgstr "Kirghiza"
+
+#: ../rules/base.xml.in.h:446
+msgid "Kyrgyz (phonetic)"
+msgstr "Kirghiza (fonetica)"
+
+#: ../rules/base.xml.in.h:447
+msgid "Lao"
+msgstr "LAO"
+
+#: ../rules/base.xml.in.h:448
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Lao (disposizione standard proposta STEA)"
+
+#: ../rules/base.xml.in.h:449
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Compaq Laptop tastiera per portatile (es. Armada)"
+
+#: ../rules/base.xml.in.h:450
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Compaq Internet Keyboard per portatile (es. Presario)"
+
+#: ../rules/base.xml.in.h:451
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Portatile eMachines m68xx"
+
+# UE
+#: ../rules/base.xml.in.h:452
+msgid "Latvian"
+msgstr "Lettone"
+
+#: ../rules/base.xml.in.h:453
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Lettone (variante apostrofo ')"
+
+#: ../rules/base.xml.in.h:454
+msgid "Latvian (F variant)"
+msgstr "Lettone (variante F)"
+
+#: ../rules/base.xml.in.h:455
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Lettone (variante tilde ~)"
+
+#: ../rules/base.xml.in.h:456
+msgid "Left Alt"
+msgstr "Alt sinistro"
+
+#: ../rules/base.xml.in.h:457
+msgid "Left Alt (while pressed)"
+msgstr "Alt sinistro (mentre è premuto)"
+
+#: ../rules/base.xml.in.h:458
+msgid "Left Alt is swapped with Left Win"
+msgstr "Alt sinistro è scambiato con Win sinistro"
+
+#: ../rules/base.xml.in.h:459
+msgid "Left Ctrl"
+msgstr "Ctrl sinistro"
+
+#: ../rules/base.xml.in.h:460
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Ctrl sinistro (per prima disposizione), Ctrl destro (per ultima disposizione)"
+
+#: ../rules/base.xml.in.h:461
+msgid "Left Ctrl+Left Shift"
+msgstr "Ctrl sinistro+Maiusc sinistro"
+
+#: ../rules/base.xml.in.h:462
+msgid "Left Shift"
+msgstr "Maiusc sinistro"
+
+#: ../rules/base.xml.in.h:463
+msgid "Left Win"
+msgstr "Win sinistro"
+
+#: ../rules/base.xml.in.h:464
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Win sinistro (prima disposizione), Win/Menu destro (ultima disposizione)"
+
+#: ../rules/base.xml.in.h:465
+msgid "Left Win (while pressed)"
+msgstr "Win sinistro (mentre è premuto)"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:466
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Win sinistro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:467
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Win sinistro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
+
+#: ../rules/base.xml.in.h:468
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Ctrl sinistro + Win sinistro (per prima disposizione), Ctrl destro + Menu (per seconda disposizione)"
+
+#: ../rules/base.xml.in.h:469
+msgid "Legacy"
+msgstr "Vecchia maniera"
+
+#: ../rules/base.xml.in.h:470
+msgid "Legacy Wang 724"
+msgstr "Wang 724 vecchia maniera"
+
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
+#: ../rules/base.xml.in.h:472
+msgid "Legacy key with comma"
+msgstr "Tasto vecchia maniera con virgola"
+
+#: ../rules/base.xml.in.h:473
+msgid "Legacy key with dot"
+msgstr "Tasto vecchia maniera con punto"
+
+# UE
+#: ../rules/base.xml.in.h:474
+msgid "Lithuanian"
+msgstr "Lituana"
+
+#: ../rules/base.xml.in.h:475
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Lituana (IBM LST 1205-92)"
+
+# UE
+#: ../rules/base.xml.in.h:476
+msgid "Lithuanian (LEKP)"
+msgstr "Lituana (LEKP)"
+
+# UE
+#: ../rules/base.xml.in.h:477
+msgid "Lithuanian (LEKPa)"
+msgstr "Lituana (LEKPa)"
+
+#: ../rules/base.xml.in.h:478
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Lituana (tastiera USA con lettere lituane)"
+
+# UE
+#: ../rules/base.xml.in.h:479
+msgid "Lithuanian (standard)"
+msgstr "Lituana (standard)"
+
+#: ../rules/base.xml.in.h:480
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
+
+#: ../rules/base.xml.in.h:481
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
+
+#: ../rules/base.xml.in.h:482
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (opzione alternativa)"
+
+#: ../rules/base.xml.in.h:483
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
+
+#: ../rules/base.xml.in.h:484
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
+
+#: ../rules/base.xml.in.h:485
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
+
+#: ../rules/base.xml.in.h:486
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
+
+#: ../rules/base.xml.in.h:487
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (opzione alternativa 2)"
+
+#: ../rules/base.xml.in.h:488
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
+
+#: ../rules/base.xml.in.h:489
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
+
+#: ../rules/base.xml.in.h:490
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Tasti aggiuntivi Logitech attraverso G15daemon"
+
+#: ../rules/base.xml.in.h:491
+msgid "Logitech Generic Keyboard"
+msgstr "Logitech tastiera generica"
+
+#: ../rules/base.xml.in.h:492
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech Internet 350 Keyboard"
+
+#: ../rules/base.xml.in.h:493
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internet Keyboard"
+
+#: ../rules/base.xml.in.h:494
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator Keyboard"
+
+#: ../rules/base.xml.in.h:495
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite Keyboard"
+
+#: ../rules/base.xml.in.h:496
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
+
+#: ../rules/base.xml.in.h:497
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
+
+#: ../rules/base.xml.in.h:498
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge Keyboard"
+
+#: ../rules/base.xml.in.h:499
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo Keyboard"
+
+#: ../rules/base.xml.in.h:500
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
+
+#: ../rules/base.xml.in.h:501
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (modello Y-RB6)"
+
+#: ../rules/base.xml.in.h:502
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+
+#: ../rules/base.xml.in.h:503
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+
+#: ../rules/base.xml.in.h:504
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
+
+#: ../rules/base.xml.in.h:505
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
+
+#: ../rules/base.xml.in.h:506
+msgid "Macedonian"
+msgstr "Macedone"
+
+#: ../rules/base.xml.in.h:507
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Macedone (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:508
+msgid "Macintosh"
+msgstr "Macintosh"
+
+#: ../rules/base.xml.in.h:509
+msgid "Macintosh Old"
+msgstr "Macintosh Old"
+
+#: ../rules/base.xml.in.h:510
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Rendere BlocMaiusc un Backspace aggiuntivo"
+
+#: ../rules/base.xml.in.h:511
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Rendere BlocMaiusc un Control aggiuntivo, ma mantiente il keysym Caps_Lock"
+
+#: ../rules/base.xml.in.h:512
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Rendere BlocMaiusc un Ctrl aggiuntivo"
+
+#: ../rules/base.xml.in.h:513
+msgid "Make Caps Lock an additional ESC"
+msgstr "Rendere BlocMaiusc un ESC aggiuntivo"
+
+#: ../rules/base.xml.in.h:514
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Rendere BlocMaiusc un Hyper aggiuntivo"
+
+#: ../rules/base.xml.in.h:515
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Rendere BlocMaiusc un BlocNum aggiuntivo"
+
+#: ../rules/base.xml.in.h:516
+msgid "Make Caps Lock an additional Super"
+msgstr "Rendere BlocMaiusc un Super aggiuntivo"
+
+#: ../rules/base.xml.in.h:517
+msgid "Malayalam"
+msgstr "Malayalam"
+
+#: ../rules/base.xml.in.h:518
+msgid "Malayalam (Lalitha)"
+msgstr "Malayalam (lalitha)"
+
+#: ../rules/base.xml.in.h:519
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Malayalam (inscript migliorato con simbolo Rupia)"
+
+# UE
+#: ../rules/base.xml.in.h:520
+msgid "Maltese"
+msgstr "Maltese"
+
+#: ../rules/base.xml.in.h:521
+msgid "Maltese (with US layout)"
+msgstr "Maltese (con disposizione USA)"
+
+#: ../rules/base.xml.in.h:522
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
+
+#: ../rules/base.xml.in.h:523
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access Keyboard"
+
+#: ../rules/base.xml.in.h:524
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
+
+# il tasto Menu
+#: ../rules/base.xml.in.h:525
+msgid "Menu"
+msgstr "Menu"
+
+#: ../rules/base.xml.in.h:526
+msgid "Meta is mapped to Left Win"
+msgstr "Meta è applicato al tasto Win sinistro"
+
+#: ../rules/base.xml.in.h:527
+msgid "Meta is mapped to Win keys"
+msgstr "Meta è applicato ai tasti Win"
+
+#: ../rules/base.xml.in.h:528
+msgid "Meta on Left Ctrl"
+msgstr "Meta su Ctrl sinistro"
+
+#: ../rules/base.xml.in.h:529
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
+
+#: ../rules/base.xml.in.h:530
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
+
+#: ../rules/base.xml.in.h:531
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, svedese"
+
+#: ../rules/base.xml.in.h:532
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
+
+#: ../rules/base.xml.in.h:533
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
+
+#: ../rules/base.xml.in.h:534
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+
+#: ../rules/base.xml.in.h:535
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural Keyboard Pro OEM"
+
+#: ../rules/base.xml.in.h:536
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+
+#: ../rules/base.xml.in.h:537
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+
+#: ../rules/base.xml.in.h:538
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+
+#: ../rules/base.xml.in.h:539
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft Office Keyboard"
+
+#: ../rules/base.xml.in.h:540
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
+
+# optionList: (vari)
+# descrizione: (nessuna)
+#: ../rules/base.xml.in.h:541
+msgid "Miscellaneous compatibility options"
+msgstr "Opzioni varie di compatibilità"
+
+#: ../rules/base.xml.in.h:542
+msgid "Mongolian"
+msgstr "Mongola"
+
+#: ../rules/base.xml.in.h:543
+msgid "Montenegrin"
+msgstr "Montenegrina"
+
+#: ../rules/base.xml.in.h:544
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Montenegrina (cirillico con caporali)"
+
+#: ../rules/base.xml.in.h:545
+msgid "Montenegrin (Cyrillic)"
+msgstr "Montenegrina (cirillico)"
+
+#: ../rules/base.xml.in.h:546
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Montenegrina (cirillico, Z e ZHE scambiati)"
+
+#: ../rules/base.xml.in.h:547
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Montenegrina (latina qwerty)"
+
+#: ../rules/base.xml.in.h:548
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Montenegrina (latina unicode qwerty)"
+
+#: ../rules/base.xml.in.h:549
+msgid "Montenegrin (Latin unicode)"
+msgstr "Montenegrina (latina unicode)"
+
+#: ../rules/base.xml.in.h:550
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Montenegrina (latina con caporali)"
+
+#: ../rules/base.xml.in.h:551
+msgid "Māori"
+msgstr "Māori"
+
+#: ../rules/base.xml.in.h:552
+msgid "NICOLA-F style Backspace"
+msgstr "Backspace stile NICOLA-F"
+
+#: ../rules/base.xml.in.h:553
+msgid "Nepali"
+msgstr "Nepalese"
+
+#: ../rules/base.xml.in.h:554
+msgid "Non-breakable space character at fourth level"
+msgstr "Carattere Spazio non-interrompibile al quarto livello"
+
+#: ../rules/base.xml.in.h:555
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Carattere Spazio non-interrompibile al quarto livello, carattere Spazio sottile non-interrompibile al sesto livello"
+
+#: ../rules/base.xml.in.h:556
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Carattere Spazio non-interrompibile al quarto livello, carattere Spazio sottile non-interrompibile al sesto livello (attraverso Ctrl+Maiusc)"
+
+#: ../rules/base.xml.in.h:557
+msgid "Non-breakable space character at second level"
+msgstr "Carattere Spazio non-interrompibile al secondo livello"
+
+#: ../rules/base.xml.in.h:558
+msgid "Non-breakable space character at third level"
+msgstr "Carattere Spazio non-interrompibile al terzo livello"
+
+#: ../rules/base.xml.in.h:559
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Carattere Spazio non-interrompibile al terzo livello, niente al quarto livello"
+
+#: ../rules/base.xml.in.h:560
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Carattere Spazio non-interrompibile al terzo livello, carattere Spazio sottile non-interrompibile al quarto livello"
+
+#: ../rules/base.xml.in.h:561
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
+
+# Curiosamente è una variante delle tastiere italiane...
+#: ../rules/base.xml.in.h:562
+msgid "Norwegian"
+msgstr "Norvegese"
+
+#: ../rules/base.xml.in.h:563
+msgid "Norwegian (Dvorak)"
+msgstr "Norvegese (Dvorak)"
+
+#: ../rules/base.xml.in.h:564
+msgid "Norwegian (Mac)"
+msgstr "Norvegese (Mac)"
+
+#: ../rules/base.xml.in.h:565
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Norvegese (Mac, tasti muti rimossi)"
+
+# FIXME missing )
+#: ../rules/base.xml.in.h:566
+msgid "Norwegian (Northern Saami"
+msgstr "Norvegese (saami settentrinale)"
+
+#: ../rules/base.xml.in.h:567
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Norvegese (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:568
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Norvegese (saami settentrionale, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:569
+msgid "Num Lock"
+msgstr "BlocNum"
+
+# optionList: kpdl
+# descrizione: Select a keypad KPDL key variant
+#: ../rules/base.xml.in.h:570
+msgid "Numeric keypad delete key behaviour"
+msgstr "Comportamento tasto Canc su tastierino numerico"
+
+#: ../rules/base.xml.in.h:571
+msgid "Numeric keypad keys work as with Mac"
+msgstr "I tasti del tastierino numerico operano come nei Mac"
+
+# optionList: keypad
+# descrizione: Select a keypad type
+#: ../rules/base.xml.in.h:572
+msgid "Numeric keypad layout selection"
+msgstr "Selezione disposizione tastierino numerico"
+
+#: ../rules/base.xml.in.h:573
+msgid "OLPC"
+msgstr "OLPC"
+
+# variante bangladesh
+#: ../rules/base.xml.in.h:574
+msgid "Oriya"
+msgstr "Oriya"
+
+#: ../rules/base.xml.in.h:575
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/Internet keyboard"
+
+#: ../rules/base.xml.in.h:576
+msgid "PC-98xx Series"
+msgstr "Serie PC-98xx"
+
+#: ../rules/base.xml.in.h:577
+msgid "Pashto"
+msgstr "Pashto"
+
+#: ../rules/base.xml.in.h:578
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Pashto (Afghanistan, OLPC)"
+
+# posizione del tasto compose: |...|Pause
+#: ../rules/base.xml.in.h:579
+msgid "Pause"
+msgstr "Pausa"
+
+#: ../rules/base.xml.in.h:580
+msgid "Persian"
+msgstr "Persiana"
+
+#: ../rules/base.xml.in.h:581
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Persiana (Afghanistan, Dari OLPC)"
+
+#: ../rules/base.xml.in.h:582
+msgid "Persian (with Persian Keypad)"
+msgstr "Persiana (con tastierino numerico persiano)"
+
+#: ../rules/base.xml.in.h:583
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Filippine - Dvorak (Baybayin)"
+
+# variante canadese
+#: ../rules/base.xml.in.h:584
+msgid "Polish"
+msgstr "Polacca"
+
+#: ../rules/base.xml.in.h:585
+msgid "Polish (Dvorak)"
+msgstr "Polacca (Dvorak)"
+
+# variante polacca
+#: ../rules/base.xml.in.h:586
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Polacca (Dvorak, virgolette polacche sul tasto 1)"
+
+# da controllare..
+#: ../rules/base.xml.in.h:587
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Polacca (Dvorak, virgolette polacche sul tasto quotemark)"
+
+# Kashubian: variante polonia
+#: ../rules/base.xml.in.h:588
+msgid "Polish (Kashubian)"
+msgstr "Polacca (Kashubian)"
+
+#: ../rules/base.xml.in.h:589
+msgid "Polish (programmer Dvorak)"
+msgstr "Polacca (Dvorak per programmatori)"
+
+#: ../rules/base.xml.in.h:590
+msgid "Polish (qwertz)"
+msgstr "Polacca (qwertz)"
+
+# UE
+#: ../rules/base.xml.in.h:591
+msgid "Portuguese"
+msgstr "Portoghese"
+
+#: ../rules/base.xml.in.h:592
+msgid "Portuguese (Brazil)"
+msgstr "Portoghese (Brasile)"
+
+#: ../rules/base.xml.in.h:593
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Portoghese (Brasile, Dvorak)"
+
+#: ../rules/base.xml.in.h:594
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Portoghese (Brasile, tasti muti rimossi)"
+
+# variante brasiliana
+#: ../rules/base.xml.in.h:595
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Portoghese (Brasile, nativa per Esperanto)"
+
+# variante brasiliana
+#: ../rules/base.xml.in.h:596
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Portoghese (Brasile, nativa per tastiere USA)"
+
+#: ../rules/base.xml.in.h:597
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Portoghese (Brasile, nativa)"
+
+#: ../rules/base.xml.in.h:598
+msgid "Portuguese (Mac)"
+msgstr "Portoghese (Mac)"
+
+#: ../rules/base.xml.in.h:599
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Portoghese (Mac, tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:600
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Portoghese (Mac, tasti muti rimossi)"
+
+# variante brasiliana
+#: ../rules/base.xml.in.h:601
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Portoghese (nativa per Esperanto)"
+
+# variante brasiliana
+#: ../rules/base.xml.in.h:602
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Portoghese (nativa per tastiere USA)"
+
+#: ../rules/base.xml.in.h:603
+msgid "Portuguese (Nativo)"
+msgstr "Portoghese (nativa)"
+
+#: ../rules/base.xml.in.h:604
+msgid "Portuguese (Sun dead keys)"
+msgstr "Portoghese (tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:605
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Portoghese (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:606
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
+
+# Posizione del tasto compose: |...|
+# nelle tastiere italiane è Stamp
+#: ../rules/base.xml.in.h:607
+msgid "PrtSc"
+msgstr "Stamp"
+
+# Gurmukhi: variante india
+#: ../rules/base.xml.in.h:608
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Punjabi (Gurmukhi Jhelum)"
+
+# Gurmukhi: variante india
+#: ../rules/base.xml.in.h:609
+msgid "Punjabi (Gurmukhi)"
+msgstr "Punjabi (Gurmukhi)"
+
+#: ../rules/base.xml.in.h:610
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
+
+#: ../rules/base.xml.in.h:611
+msgid "Right Alt"
+msgstr "Alt destro"
+
+#: ../rules/base.xml.in.h:612
+msgid "Right Alt (while pressed)"
+msgstr "Alt destro (mentre è premuto)"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Alt destro sceglie il quinto livello e attiva level5-Lock quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:614
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Alt destro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:615
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Alt destro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
+
+#: ../rules/base.xml.in.h:616
+msgid "Right Alt key never chooses 3rd level"
+msgstr "Il tasto Alt destro non sceglie mai il terzo livello"
+
+#: ../rules/base.xml.in.h:617
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Alt destro, il tasto Maiusc+Alt destro è Multi_Key"
+
+#: ../rules/base.xml.in.h:618
+msgid "Right Ctrl"
+msgstr "Ctrl destro"
+
+#: ../rules/base.xml.in.h:619
+msgid "Right Ctrl (while pressed)"
+msgstr "Ctrl destro (mentre è premuto)"
+
+#: ../rules/base.xml.in.h:620
+msgid "Right Ctrl as Right Alt"
+msgstr "Ctrl destro come Alt destro"
+
+#: ../rules/base.xml.in.h:621
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Ctrl destro è applicato a Menu"
+
+#: ../rules/base.xml.in.h:622
+msgid "Right Ctrl+Right Shift"
+msgstr "Ctrl destro + Maiusc destro"
+
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "Maiusc destro"
+
+#: ../rules/base.xml.in.h:624
+msgid "Right Win"
+msgstr "Win destro"
+
+#: ../rules/base.xml.in.h:625
+msgid "Right Win (while pressed)"
+msgstr "Win destro (mentre è premuto)"
+
+# tasto per scegliere il quinto livello: |...|<
+#: ../rules/base.xml.in.h:626
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Win destro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello"
+
+# tasto per scegliere il quinto livello: |...|
+#: ../rules/base.xml.in.h:627
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Win destro sceglie il quinto livello, blocca quando premuto assieme a un altro selettore del quinto livello, una pressione rilascia il blocco"
+
+# UE
+#: ../rules/base.xml.in.h:628
+msgid "Romanian"
+msgstr "Romeno"
+
+# variante rumena
+#: ../rules/base.xml.in.h:629
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Romena (tatar crimea Dobruca-1 Q)"
+
+#: ../rules/base.xml.in.h:630
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Romena (tatar crimea Dobruca-2 Q)"
+
+#: ../rules/base.xml.in.h:631
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Romena (tatar crimea turca Alt-Q)"
+
+#: ../rules/base.xml.in.h:632
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Romena (tatar crimea turca F)"
+
+#: ../rules/base.xml.in.h:633
+msgid "Romanian (WinKeys)"
+msgstr "Romena (tasti Win)"
+
+#: ../rules/base.xml.in.h:634
+msgid "Romanian (cedilla)"
+msgstr "Romena (cediglia)"
+
+#: ../rules/base.xml.in.h:635
+msgid "Romanian (standard cedilla)"
+msgstr "Romena (cediglia standard)"
+
+#: ../rules/base.xml.in.h:636
+msgid "Romanian (standard)"
+msgstr "Romena (standard)"
+
+#: ../rules/base.xml.in.h:637
+msgid "Rupee on 4"
+msgstr "Rupia sul 4"
+
+#: ../rules/base.xml.in.h:638
+msgid "Russian"
+msgstr "Russa"
+
+# Variante russa http://it.wikipedia.org/wiki/Baschiri
+#: ../rules/base.xml.in.h:639
+msgid "Russian (Bashkirian)"
+msgstr "Russa (baschira)"
+
+# variante russa
+#: ../rules/base.xml.in.h:640
+msgid "Russian (Chuvash Latin)"
+msgstr "Russa (latina chuvash)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr "Russa (chuvash)"
+
+#: ../rules/base.xml.in.h:642
+msgid "Russian (DOS)"
+msgstr "Russa (DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr "Russa (Georgia)"
+
+#: ../rules/base.xml.in.h:644
+msgid "Russian (Germany, phonetic)"
+msgstr "Russa (Germania, fonetica)"
+
+#: ../rules/base.xml.in.h:645
+msgid "Russian (Kalmyk)"
+msgstr "Russa (kalmyk)"
+
+#: ../rules/base.xml.in.h:646
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Russa (Kazakistan, con kazaco)"
+
+#: ../rules/base.xml.in.h:647
+msgid "Russian (Komi)"
+msgstr "Russa (komi)"
+
+#: ../rules/base.xml.in.h:648
+msgid "Russian (Mari)"
+msgstr "Russa (mari)"
+
+#: ../rules/base.xml.in.h:649
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Russa (osseta, tasti win)"
+
+#: ../rules/base.xml.in.h:650
+msgid "Russian (Ossetian, legacy)"
+msgstr "Russa (osseta, vecchia maniera)"
+
+#: ../rules/base.xml.in.h:651
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Russa (Polonia, Dvorak fonetica)"
+
+#: ../rules/base.xml.in.h:652
+msgid "Russian (Serbian)"
+msgstr "Russa (serba)"
+
+#: ../rules/base.xml.in.h:653
+msgid "Russian (Sweden, phonetic)"
+msgstr "Russa (svedese, fonetica)"
+
+#: ../rules/base.xml.in.h:654
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Russa, (svedese, fonetica, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:655
+msgid "Russian (Tatar)"
+msgstr "Russa (tatara)"
+
+#: ../rules/base.xml.in.h:656
+msgid "Russian (US, phonetic)"
+msgstr "Russa (USA, fonetica)"
+
+#: ../rules/base.xml.in.h:657
+msgid "Russian (Udmurt)"
+msgstr "Russa(udmurta)"
+
+#: ../rules/base.xml.in.h:658
+msgid "Russian (Yakut)"
+msgstr "Russa (yakutia)"
+
+#: ../rules/base.xml.in.h:659
+msgid "Russian (legacy)"
+msgstr "Russa (vecchia maniera)"
+
+#: ../rules/base.xml.in.h:660
+msgid "Russian (phonetic WinKeys)"
+msgstr "Russa (fonetica tasti win)"
+
+#: ../rules/base.xml.in.h:661
+msgid "Russian (phonetic)"
+msgstr "Russa (fonetica)"
+
+#: ../rules/base.xml.in.h:662
+msgid "Russian (typewriter)"
+msgstr "Russa (macchina per scrivere)"
+
+#: ../rules/base.xml.in.h:663
+msgid "Russian (typewriter, legacy)"
+msgstr "Russa (macchina per scrivere, vecchia maniera)"
+
+#: ../rules/base.xml.in.h:664
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless Keyboard"
+
+#: ../rules/base.xml.in.h:665
+msgid "SK-1300"
+msgstr "SK-1300"
+
+#: ../rules/base.xml.in.h:666
+msgid "SK-2500"
+msgstr "SK-2500"
+
+#: ../rules/base.xml.in.h:667
+msgid "SK-6200"
+msgstr "SK-6200"
+
+#: ../rules/base.xml.in.h:668
+msgid "SK-7100"
+msgstr "SK-7100"
+
+#: ../rules/base.xml.in.h:669
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
+
+#: ../rules/base.xml.in.h:670
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
+
+#: ../rules/base.xml.in.h:671
+msgid "Saisiyat (Taiwan)"
+msgstr "Saisiyat (Taiwan)"
+
+#: ../rules/base.xml.in.h:672
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
+
+#: ../rules/base.xml.in.h:673
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
+
+#: ../rules/base.xml.in.h:674
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
+
+#: ../rules/base.xml.in.h:675
+msgid "Scroll Lock"
+msgstr "BlocScorr"
+
+# variante canadese
+# No ISO code in ISO639-2, only draft ISO693-3
+#: ../rules/base.xml.in.h:676
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
+
+# parte di Numeric keypad delete key behaviour
+# vedi descrizione compelta in altro commento
+#: ../rules/base.xml.in.h:677
+msgid "Semi-colon on third level"
+msgstr "Punto e virgola sul terzo livello"
+
+#: ../rules/base.xml.in.h:678
+msgid "Serbian"
+msgstr "Serba"
+
+#: ../rules/base.xml.in.h:679
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Serba (latina Unicode qwerty)"
+
+#: ../rules/base.xml.in.h:680
+msgid "Serbian (Latin Unicode)"
+msgstr "Serba (latina Unicode)"
+
+#: ../rules/base.xml.in.h:681
+msgid "Serbian (Latin qwerty)"
+msgstr "Serba (latina qwerty)"
+
+#: ../rules/base.xml.in.h:682
+msgid "Serbian (Latin with guillemets)"
+msgstr "Serba (latina con caporali)"
+
+#: ../rules/base.xml.in.h:683
+msgid "Serbian (Latin)"
+msgstr "Serba (latina)"
+
+# http://it.wikipedia.org/wiki/Lingua_rutena
+#: ../rules/base.xml.in.h:684
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Serba (rutena pannonica omofonica)"
+
+#: ../rules/base.xml.in.h:685
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Serba (Z e ZHE scambiati)"
+
+#: ../rules/base.xml.in.h:686
+msgid "Serbian (with guillemets)"
+msgstr "Serba (con caporali)"
+
+#: ../rules/base.xml.in.h:687
+msgid "Serbo-Croatian (US)"
+msgstr "Serbo-croata (USA)"
+
+#: ../rules/base.xml.in.h:688
+msgid "Shift cancels Caps Lock"
+msgstr "Maiusc annulla BlocMaiusc"
+
+#: ../rules/base.xml.in.h:689
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Maiusc non annulla BlocNum, invece sceglie il terzo livello"
+
+#: ../rules/base.xml.in.h:690
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Maiusc con i tasti del tastierino numerico opera come in MS Windows"
+
+#: ../rules/base.xml.in.h:691
+msgid "Shift+Caps Lock"
+msgstr "Maiusc+BlocMaiusc"
+
+# variante pakistana
+#: ../rules/base.xml.in.h:692
+msgid "Sindhi"
+msgstr "Sindhi"
+
+#: ../rules/base.xml.in.h:693
+msgid "Sinhala"
+msgstr "Singalese"
+
+# UE
+#: ../rules/base.xml.in.h:694
+msgid "Slovak"
+msgstr "Slovacca"
+
+#: ../rules/base.xml.in.h:695
+msgid "Slovak (extended Backslash)"
+msgstr "Slovacca (backslash esteso)"
+
+#: ../rules/base.xml.in.h:696
+msgid "Slovak (qwerty)"
+msgstr "Slovacca (qwerty)"
+
+#: ../rules/base.xml.in.h:697
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Slovacca (qwerty, backslash esteso)"
+
+# UE
+#: ../rules/base.xml.in.h:698
+msgid "Slovene"
+msgstr "Slovena"
+
+#: ../rules/base.xml.in.h:699
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Slovena (tastiera USA con lettere slovene)"
+
+#: ../rules/base.xml.in.h:700
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Slovena (usa caporali per virgolette)"
+
+#: ../rules/base.xml.in.h:701
+msgid "Spanish"
+msgstr "Spagnola"
+
+# punto sottoscritto stando a http://it.wikipedia.org/wiki/Diacritico
+# Grazie a Daniele Forsi
+#
+#: ../rules/base.xml.in.h:702
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Spagnola (cariante asturiana con H punto sottoscritto e L punto sottoscritto)"
+
+# FIXME... trovare traduzione middle-dot
+#: ../rules/base.xml.in.h:703
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Spagnola (variante catalana con L middle-dot)"
+
+#: ../rules/base.xml.in.h:704
+msgid "Spanish (Dvorak)"
+msgstr "Spagnola (Dvorak)"
+
+#: ../rules/base.xml.in.h:705
+msgid "Spanish (Latin American)"
+msgstr "Spagnola (latino americana)"
+
+#: ../rules/base.xml.in.h:706
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Spagnola (latino americana, tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Spagnola (latino americana, tilde muta inclusa)"
+
+#: ../rules/base.xml.in.h:708
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Spagnola (latino americana, tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:709
+msgid "Spanish (Mac)"
+msgstr "Spagnola (Mac)"
+
+#: ../rules/base.xml.in.h:710
+msgid "Spanish (Sun dead keys)"
+msgstr "Spagnola (tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:711
+msgid "Spanish (eliminate dead keys)"
+msgstr "Spagnola (tasti muti rimossi)"
+
+# variante LatAm
+#: ../rules/base.xml.in.h:712
+msgid "Spanish (include dead tilde)"
+msgstr "Spagnola (tilde muta inclusa)"
+
+#: ../rules/base.xml.in.h:713
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Tasti speciali (Ctrl+Alt+&lt;tasto&gt;) gestiti in un server"
+
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Type 5/6"
+
+#: ../rules/base.xml.in.h:715
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power Multimedia Keyboard"
+
+#: ../rules/base.xml.in.h:716
+msgid "Swahili (Kenya)"
+msgstr "Swahili (Kenya)"
+
+#: ../rules/base.xml.in.h:717
+msgid "Swahili (Tanzania)"
+msgstr "Swahili (Tanzania)"
+
+#: ../rules/base.xml.in.h:718
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Scambiare Ctrl e BlocMaiusc"
+
+#: ../rules/base.xml.in.h:719
+msgid "Swap ESC and Caps Lock"
+msgstr "Scambiare ESC e BlocMaiusc"
+
+# UE
+#: ../rules/base.xml.in.h:720
+msgid "Swedish"
+msgstr "Svedese"
+
+#: ../rules/base.xml.in.h:721
+msgid "Swedish (Dvorak)"
+msgstr "Svedese (Dvorak)"
+
+#: ../rules/base.xml.in.h:722
+msgid "Swedish (Mac)"
+msgstr "Svedese (Mac)"
+
+#: ../rules/base.xml.in.h:723
+msgid "Swedish (Svdvorak)"
+msgstr "Svedese (Svdvorak)"
+
+#: ../rules/base.xml.in.h:724
+msgid "Swedish (eliminate dead keys)"
+msgstr "Svedese (tasti muti rimossi)"
+
+#: ../rules/base.xml.in.h:725
+msgid "Swedish (northern Saami)"
+msgstr "Svedese (saami settentrinale)"
+
+#: ../rules/base.xml.in.h:726
+msgid "Swiss"
+msgstr "Svizzera"
+
+#: ../rules/base.xml.in.h:727
+msgid "Swiss (legacy)"
+msgstr "Svizzera (vecchia maniera)"
+
+#: ../rules/base.xml.in.h:728
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet PC)"
+
+# L'aggettivo per Siria in iglese EU sarebbe Syrian
+#
+#: ../rules/base.xml.in.h:729
+msgid "Syriac"
+msgstr "Siriana"
+
+#: ../rules/base.xml.in.h:730
+msgid "Syriac (phonetic)"
+msgstr "Siriana (fonetica)"
+
+#: ../rules/base.xml.in.h:731
+msgid "Taiwanese"
+msgstr "Taiwanese"
+
+#: ../rules/base.xml.in.h:732
+msgid "Taiwanese (indigenous)"
+msgstr "Taiwanese (indigena)"
+
+# UE
+#: ../rules/base.xml.in.h:733
+msgid "Tajik"
+msgstr "Tagika"
+
+#: ../rules/base.xml.in.h:734
+msgid "Tajik (legacy)"
+msgstr "Tagika (vecchia maniera)"
+
+#: ../rules/base.xml.in.h:735
+msgid "Tamil"
+msgstr "Tamil"
+
+#: ../rules/base.xml.in.h:736
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Tamil (Sri Lanka, TAB macchina per scrivere)"
+
+#: ../rules/base.xml.in.h:737
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Tamil (Sri Lanka, Unicode)"
+
+#: ../rules/base.xml.in.h:738
+msgid "Tamil (TAB typewriter)"
+msgstr "Tamil (Sri Lanka, TAB macchina per scrivere)"
+
+#: ../rules/base.xml.in.h:739
+msgid "Tamil (TSCII typewriter)"
+msgstr "Tamil (TSCII macchina per scrivere)"
+
+#: ../rules/base.xml.in.h:740
+msgid "Tamil (Unicode)"
+msgstr "Tamil (Unicode)"
+
+#: ../rules/base.xml.in.h:741
+msgid "Tamil (keyboard with numerals)"
+msgstr "Tamil (tastiera con numeri)"
+
+#: ../rules/base.xml.in.h:742
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
+
+#: ../rules/base.xml.in.h:743
+msgid "Telugu"
+msgstr "Telegu"
+
+# UE
+#: ../rules/base.xml.in.h:744
+msgid "Thai"
+msgstr "Thai"
+
+# Variante tailandese
+#: ../rules/base.xml.in.h:745
+msgid "Thai (Pattachote)"
+msgstr "Thai (pattachote)"
+
+#: ../rules/base.xml.in.h:746
+msgid "Thai (TIS-820.2538)"
+msgstr "Thai (TIS-820.2538)"
+
+#: ../rules/base.xml.in.h:747
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "Al tasto corrispondente in una tastiera Dvorak."
+
+#: ../rules/base.xml.in.h:748
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "Al tasto corrispondente in una tastiera Qwerty."
+
+#: ../rules/base.xml.in.h:749
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Commuta i PointerKey con Maiusc + BlocNum"
+
+#: ../rules/base.xml.in.h:750
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
+
+#: ../rules/base.xml.in.h:751
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access Keyboard"
+
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
+
+#: ../rules/base.xml.in.h:753
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
+
+# UE
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr "Tswana"
+
+# non controllato su UE
+#: ../rules/base.xml.in.h:755
+msgid "Turkish"
+msgstr "Turca"
+
+#: ../rules/base.xml.in.h:756
+msgid "Turkish (Alt-Q)"
+msgstr "Turca (Alt-Q)"
+
+#: ../rules/base.xml.in.h:757
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Turca (Tatar crimea turca Alt-Q)"
+
+#: ../rules/base.xml.in.h:758
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Turca (Tatar crimea turca F)"
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Turca (Tatar crimea turca Q)"
+
+#: ../rules/base.xml.in.h:760
+msgid "Turkish (F)"
+msgstr "Turca (F)"
+
+#: ../rules/base.xml.in.h:761
+msgid "Turkish (Sun dead keys)"
+msgstr "Turca (tasti muti Sun)"
+
+#: ../rules/base.xml.in.h:762
+msgid "Turkish (international with dead keys)"
+msgstr "Turca (internazionale con tasti muti)"
+
+#: ../rules/base.xml.in.h:763
+msgid "Turkmen"
+msgstr "Turkmena"
+
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr "Turkmena (Alt-Q)"
+
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
+
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
+
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (modalità 102/105:EU)"
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (modalità 106:JP)"
+
+# UE
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Ucraina"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Ucraina (tatar crimea turca Alt-Q)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Ucraina (tatar crimea turca F)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Ucraina (tatar crimea turca Q)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Ucraina (tasti win)"
+
+# http://it.wikipedia.org/wiki/Lingua_rutena
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Ucraina (omofonica)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Ucraina (vecchia maniera)"
+
+# variante bulgara
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Ucraina (fonetica)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Ucraina (RSTU standard su disposizione russa)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Ucraina (RSTU standard)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Ucraina (macchina per scrivere)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Aggiunte unicode (frecce e operatori matematici)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Aggiunte unicode (frecce e operatori matematici). Operatori matematici sul livello predefinito"
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+# UE
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Urdu (Pakistan)"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Urdu (Pakistan, CRULP)"
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Urdu (Pakistan, NLA)"
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Urdu (tasti Win)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Urdu (fonetica alternativa)"
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Urdu (fonetica)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Usare i LED della tastiera per mostrare il gruppo alternativo"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Uso del tasto Spazio per inserire carattere di spazio non-interrompibile"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Solito Spazio a ogni livello"
+
+# UE
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Uzbeka"
+
+# UE
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Uzbeka (Afghanistan)"
+
+# UE
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Uzbeka (Afghanistan, OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Uzbeka (tatar crimea turca Alt-Q)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Uzbeka (tatar crimea turca F)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Uzbeka (tatar crimea turca Q)"
+
+# UE
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Uzbeka (latina)"
+
+# UE
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "Vietnamese"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 Internet Keyboard"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Tastierino Wang 724 con aggiunte unicode (frecce e operatori matematici)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Tastierino Wang 724 con aggiunte unicode (frecce e operatori matematici). Operatori matematici sul livello predefinito"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Wolof"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! Internet Keyboard"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Yoruba"
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "Spazio non di unione a larghezza nulla al secondo livello"
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio non-interrompibile al terzo livello"
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio non-interrompibile al terzo livello, niente al quarto livello"
+
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio non-interrompibile al terzo livello, Spazio sottile non-interrompibile al quarto livello"
+
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio non-interrompibile al terzo livello, Spazio di unione a larghezza nulla al quarto livello"
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio di unione a larghezza nulla al terzo livello"
+
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Spazio non di unione a larghezza nulla al secondo livello, Spazio di unione a larghezza nulla al terzo livello, Spazio non-interrompibile al quarto livello"
+
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Spazio non di unione a larghezza nulla al terzo livello, Spazio di unione a larghezza nulla al quarto livello"
+
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
+
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
+
+# shortDesc per Kazakistan
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
+
+# Braille, shortDesc
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
+
+# codice tre lettere per la svizzera
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
+
+# codice tre lettere per maldive
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
+
+# codice tre lettere per Kenia
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+# codice tre lettere per Nigeria
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+# codice tre lettere per bulgaria
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+# shortDesc per Ghana, usato codice ISO
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+# codice tre lettere per la svizzera
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+# variante bielorussa
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+# codice tre lettere per iraq
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+# codice tre lettere per sri lanka
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+# variante per Ghana
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+# codice tre lettere per malta
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+# Komi: variante russa
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+# shortDesc per corea del sud, usato codice iso
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+# codice tre lettere per nepal
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+# codice tre lettere per Isole Fær Øer
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+# Codice tre lettere per islanda<
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+# codice tre lettere per israele<
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+# codice tre lettere per spagna
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+# codice tre lettere per etiopia
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+# codice 3 lettere per bhutan
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+# codice 3 lettere per bhutan
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
+
+# layout a parte, sembrerebbe inglese
+#: ../rules/base.extras.xml.in.h:1
+msgid "APL"
+msgstr "APL"
+
+# UE
+#: ../rules/base.extras.xml.in.h:2
+msgid "Iran"
+msgstr "Iran"
+
+# lingua iran nord orientale
+# http://it.wikipedia.org/wiki/Lingua_avestica
+#: ../rules/base.extras.xml.in.h:3
+msgid "Iran - Avestan"
+msgstr "Iran - Avestico"
+
+# UE
+#: ../rules/base.extras.xml.in.h:4
+msgid "Lithuania"
+msgstr "Lituania"
+
+# UE
+#: ../rules/base.extras.xml.in.h:5
+msgid "Lithuania - Dvorak"
+msgstr "Lituania - Dvorak"
+
+# codice tre lettere per lituania
+#: ../rules/base.extras.xml.in.h:6
+msgid "Ltu"
+msgstr "Ltu"
+
+# UE
+#: ../rules/base.extras.xml.in.h:7
+msgid "Romania"
+msgstr "Romania"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Romania - Touchtype ergonomica"
+
+# codice tre lettere per romania
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rou"
+
+# codice tre lettere per russia
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
+
+# UE
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Russia"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Serbia"
+
+# variante serba
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Serbia - Combinazione di accenti invece di tasti muti"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "USA"
+
+# No ISO code in ISO639-2, only draft ISO693-3
+# Atsina refers to the Gros Ventres tribe.
+# http://en.wikipedia.org/wiki/Atsina_(disambiguation)
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "USA - Atsina"
+
+# http://en.wikipedia.org/wiki/Interior_Salish_languages
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "USA - Couer D'alene Salish"
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "USA - Internazionale (combinazione Unicode AltGr)"
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "USA - Internazionale (combinazione Unicode AltGr, alternativa)"
+
+# variante turca
+#~ msgid "(F)"
+#~ msgstr "(F)"
+
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "Alb"
+#~ msgstr "ALB"
+
+#~ msgid "Alt-Q"
+#~ msgstr "Alt-Q"
+
+#~ msgid "Alternative"
+#~ msgstr "Alternativa"
+
+#~ msgid "Alternative Phonetic"
+#~ msgstr "Alternativa fonetica"
+
+#~ msgid "Alternative international"
+#~ msgstr "Internazionale alternativa"
+
+# Andorra
+#~ msgid "And"
+#~ msgstr "AND"
+
+#~ msgid "Andorra"
+#~ msgstr "Andorra"
+
+#~ msgid "Ara"
+#~ msgstr "Ara"
+
+#~ msgid "Arm"
+#~ msgstr "ARM"
+
+# ISO per austria
+#~ msgid "Aut"
+#~ msgstr "AUT"
+
+#~ msgid "Aze"
+#~ msgstr "AZE"
+
+# UE
+#~ msgid "Bangladesh"
+#~ msgstr "Bangladesh"
+
+# codice tre lettere per belgio
+#~ msgid "Bel"
+#~ msgstr "BEL"
+
+# codice tre lettere per bangladesh
+#~ msgid "Bgd"
+#~ msgstr "BGD"
+
+# UE
+#~ msgid "Bhutan"
+#~ msgstr "Bhutan"
+
+# codice tre lettere per bosnia-erz
+#~ msgid "Bih"
+#~ msgstr "BIH"
+
+# codice tre lettere per bielorussia
+#~ msgid "Blr"
+#~ msgstr "BLR"
+
+# UE
+#~ msgid "Bosnia and Herzegovina"
+#~ msgstr "Bosnia-Erzegovina"
+
+#~ msgid "Bra"
+#~ msgstr "BRA"
+
+# UE
+#~ msgid "Brazil"
+#~ msgstr "Brasile"
+
+# bre in iso639
+#~ msgid "Breton"
+#~ msgstr "Bretone"
+
+# codice 3 lettere per botswana
+#~ msgid "Bwa"
+#~ msgstr "BWA"
+
+# codice tre lettere per congo
+#~ msgid "COD"
+#~ msgstr "COD"
+
+# variante pakistana
+#~ msgid "CRULP"
+#~ msgstr "CRULP"
+
+# UE
+#~ msgid "Canada"
+#~ msgstr "Canada"
+
+# variante romena (wikipedia mette la gl)
+#~ msgid "Cedilla"
+#~ msgstr "Cediglia"
+
+# codice tre lettere per cina
+#~ msgid "Chn"
+#~ msgstr "CHN"
+
+# variante russa
+#~ msgid "Chuvash"
+#~ msgstr "Chuvash"
+
+#~ msgid "Classic"
+#~ msgstr "Classica"
+
+# variante USA
+#~ msgid "Colemak"
+#~ msgstr "Colemak"
+
+# UE
+#~ msgid "Cyrillic"
+#~ msgstr "Cirillico"
+
+#~ msgid "Cze"
+#~ msgstr "CZE"
+
+# variante per lingua Kalmyk
+#~ msgid "DOS"
+#~ msgstr "DOS"
+
+# variante tedesca...
+#
+# rispetto alla tedesca normale cambiano due caratteri, ` e ^
+# ah, le tastiere tedesche non hanno le lettere accentate, per cui
+# probabilemente 'sta cosa è importate per il Compose
+#~ msgid "Dead acute"
+#~ msgstr "Acuto muto"
+
+# UE
+#~ msgid "Denmark"
+#~ msgstr "Danimarca"
+
+# codice tre lettere per germania<
+#~ msgid "Deu"
+#~ msgstr "DEU"
+
+# codice tre lettere per Danimarca
+#~ msgid "Dnk"
+#~ msgstr "DNK"
+
+#~ msgid "Dvorak"
+#~ msgstr "Dvorak"
+
+#~ msgid "E"
+#~ msgstr "E"
+
+#~ msgid "Eastern"
+#~ msgstr "Orientale"
+
+# descrizione breve per Esperanto, usato codice iso639 tre lettere
+#~ msgid "Epo"
+#~ msgstr "EPO"
+
+#~ msgid "Ergonomic"
+#~ msgstr "Ergonomica"
+
+# codice tre lettere per estonia
+#~ msgid "Est"
+#~ msgstr "EST"
+
+# UE
+#~ msgid "Ethiopia"
+#~ msgstr "Etiopia"
+
+#~ msgid "Extended"
+#~ msgstr "Estesa"
+
+# UE
+#~ msgid "Finland"
+#~ msgstr "Finlandia"
+
+#~ msgid "Fra"
+#~ msgstr "FRA"
+
+# UE
+#~ msgid "France"
+#~ msgstr "Francia"
+
+# variante per tastiera ghana
+#~ msgid "GILLBT"
+#~ msgstr "GILLBT"
+
+# UE
+#~ msgid "Georgia"
+#~ msgstr "Georgia"
+
+#~ msgid "Ghana"
+#~ msgstr "Ghana"
+
+# codice tre lettere per guinea
+#~ msgid "Gin"
+#~ msgstr "GIN"
+
+# codice tre lettere per grecia
+#~ msgid "Grc"
+#~ msgstr "GRC"
+
+#~ msgid "Guinea"
+#~ msgstr "Guinea"
+
+# variante ukraina
+#~ msgid "Homophonic"
+#~ msgstr "Omofonica"
+
+# codice tre lettere per croazia
+#~ msgid "Hrv"
+#~ msgstr "HRV"
+
+#~ msgid "Hun"
+#~ msgstr "HUN"
+
+#~ msgid "Ind"
+#~ msgstr "IND"
+
+# UE
+#~ msgid "Ireland"
+#~ msgstr "Irlanda"
+
+# codice tre lettere per irlanda
+#~ msgid "Irl"
+#~ msgstr "IRL"
+
+# codice tre lettere per Iran
+#~ msgid "Irn"
+#~ msgstr "IRN"
+
+# UE
+#~ msgid "Israel"
+#~ msgstr "Israele"
+
+#~ msgid "Jpn"
+#~ msgstr "JPN"
+
+# variante russa, in iso639 è XAL
+#~ msgid "Kalmyk"
+#~ msgstr "Kalmyk"
+
+# Kana: variante giappone
+#~ msgid "Kana"
+#~ msgstr "Kana"
+
+#~ msgid "Kenya"
+#~ msgstr "Kenya"
+
+# shortDesc per Kyrgyzstan
+#~ msgid "Kgz"
+#~ msgstr "KGZ"
+
+# shortDesc per Cambogia, usato codide ISO
+#~ msgid "Khm"
+#~ msgstr "KHM"
+
+#~ msgid "Korea, Republic of"
+#~ msgstr "Corea, Repubblica di"
+
+# variante canadese
+#~ msgid "Ktunaxa"
+#~ msgstr "Ktunaxa"
+
+# Short description per Latin American
+# include una lunga serie di nazioni: AR, Bo, CL, CO, CR, CU, DO...
+#
+#~ msgid "LAm"
+#~ msgstr "LAm"
+
+# variante lituana
+#~ msgid "LEKP"
+#~ msgstr "LEKP"
+
+# variante lituana
+#~ msgid "LEKPa"
+#~ msgstr "LEKPa"
+
+# UE
+#~ msgid "Laos"
+#~ msgstr "Laos"
+
+#~ msgid "Latin"
+#~ msgstr "Latino"
+
+#~ msgid "Left hand"
+#~ msgstr "Mano sinistra"
+
+# codice tre lettere per lettonia
+#~ msgid "Lva"
+#~ msgstr "LVA"
+
+# variante della Georgia
+#~ msgid "MESS"
+#~ msgstr "MESS"
+
+# shortDesc per Montenegro, usato ISO
+#~ msgid "MNE"
+#~ msgstr "MNE"
+
+#~ msgid "Macintosh (International)"
+#~ msgstr "Macintosh (internazionale)"
+
+# UE
+#~ msgid "Maldives"
+#~ msgstr "Maldive"
+
+#~ msgid "Mali"
+#~ msgstr "Mali"
+
+#~ msgid "Mao"
+#~ msgstr "Mao"
+
+#~ msgid "Maori"
+#~ msgstr "Maori"
+
+# codice tre lettere per macedonia
+#~ msgid "Mkd"
+#~ msgstr "MKD"
+
+#~ msgid "Mli"
+#~ msgstr "MLI"
+
+# codice tre lettere per birmania
+#~ msgid "Mmr"
+#~ msgstr "MMR"
+
+# codice tre lettere per mongolia
+#~ msgid "Mng"
+#~ msgstr "MNG"
+
+# UE
+#~ msgid "Myanmar"
+#~ msgstr "Birmania"
+
+# variante pakistana
+#~ msgid "NLA"
+#~ msgstr "NLA"
+
+# variante brasiliana
+#~ msgid "Nativo"
+#~ msgstr "Nativo"
+
+# variante tetheska.... ehm tedesca
+#~ msgid "Neo 2"
+#~ msgstr "Neo 2"
+
+# UE
+#~ msgid "Netherlands"
+#~ msgstr "Paesi Bassi"
+
+#~ msgid "Nigeria"
+#~ msgstr "Nigeria"
+
+# codice tre lettere per paesi bassi
+#~ msgid "Nld"
+#~ msgstr "NLD"
+
+# codice tre lettere per norvegia
+#~ msgid "Nor"
+#~ msgstr "NOR"
+
+# UE
+#~ msgid "Norway"
+#~ msgstr "Norvegia"
+
+#~ msgid "OLPC Dari"
+#~ msgstr "OLPC Dari"
+
+#~ msgid "OLPC Pashto"
+#~ msgstr "OLPC Pashto"
+
+#~ msgid "OLPC Southern Uzbek"
+#~ msgstr "OLPC Uzbeco meridionale"
+
+# variante francese
+#~ msgid "Occitan"
+#~ msgstr "Occitana"
+
+# Variante irlandese
+#~ msgid "Ogham"
+#~ msgstr "Ogham"
+
+#~ msgid "Ossetian"
+#~ msgstr "Osseta"
+
+#~ msgid "Phonetic"
+#~ msgstr "Fonetico"
+
+# variante russa
+#~ msgid "Phonetic Winkeys"
+#~ msgstr "Fonetica tasti Win"
+
+# codice tre lettere per Polonia
+#~ msgid "Pol"
+#~ msgstr "POL"
+
+# UE
+#~ msgid "Poland"
+#~ msgstr "Polonia"
+
+#~ msgid "Probhat"
+#~ msgstr "Probhat"
+
+# codice tre lettere per portogallo
+#~ msgid "Prt"
+#~ msgstr "PRT"
+
+# codice per serbia
+#~ msgid "SRB"
+#~ msgstr "SRB"
+
+#~ msgid "Sen"
+#~ msgstr "SEN"
+
+#~ msgid "Senegal"
+#~ msgstr "Senegal"
+
+# variante greca
+#~ msgid "Simple"
+#~ msgstr "Semplice"
+
+#~ msgid "Southern Uzbek"
+#~ msgstr "Uzbeko meridionale"
+
+# UE
+#~ msgid "Spain"
+#~ msgstr "Spagna"
+
+#~ msgid "Sri Lanka"
+#~ msgstr "Sri Lanka"
+
+#~ msgid "Standard"
+#~ msgstr "Standard"
+
+# codice tre lettere per repubblica slovacca
+#~ msgid "Svk"
+#~ msgstr "SVK"
+
+# codice tre lettere per slovenia
+#~ msgid "Svn"
+#~ msgstr "SVN"
+
+#~ msgid "Swe"
+#~ msgstr "SWE"
+
+# UE
+#~ msgid "Syria"
+#~ msgstr "Siria"
+
+# variante russa, come lingua stado a iso639 sarebbe tatarico
+#~ msgid "Tatar"
+#~ msgstr "Tatar"
+
+#~ msgid "Tha"
+#~ msgstr "THA"
+
+#~ msgid "Tibetan"
+#~ msgstr "Tibetana"
+
+# variante marocchina, corrispondente al codice iso639 BER (berbero)
+#~ msgid "Tifinagh"
+#~ msgstr "Tifinagh"
+
+# codice tre lettere per tajikistan
+#~ msgid "Tjk"
+#~ msgstr "TJK"
+
+# Non sono sicuro vada tradotto
+#~ msgid "Typewriter"
+#~ msgstr "Macchina per scrivere"
+
+#~ msgid "Tza"
+#~ msgstr "TZA"
+
+# variante russa
+#~ msgid "Udmurt"
+#~ msgstr "Udmurt"
+
+#~ msgid "Ukr"
+#~ msgstr "UKR"
+
+# UE
+#~ msgid "United Kingdom"
+#~ msgstr "Regno Unito"
+
+#~ msgid "Uzb"
+#~ msgstr "UZB"
+
+#~ msgid "Vnm"
+#~ msgstr "VNK"
+
+#~ msgid "Western"
+#~ msgstr "Occidentale"
+
+#~ msgid "With guillemets"
+#~ msgstr "Con caporali"
+
+# codice per sudafrica
+#~ msgid "Zaf"
+#~ msgstr "ZAF"
+
+#~ msgid "azerty"
+#~ msgstr "azerty"
+
+#~ msgid "digits"
+#~ msgstr "cifre"
+
+#~ msgid "lyx"
+#~ msgstr "lyx"
+
+#~ msgid "qwertz"
+#~ msgstr "qwertz"
diff --git a/xorg-server/xkeyboard-config/po/ko.po b/xorg-server/xkeyboard-config/po/ko.po
index 2eb2a3e89..e52e0a99a 100644
--- a/xorg-server/xkeyboard-config/po/ko.po
+++ b/xorg-server/xkeyboard-config/po/ko.po
@@ -1,3096 +1,3832 @@
-# xkeyboard-config Korean translation
-# This file is distributed under the same license as the xkeyboard-config package.
-# Changwoo Ryu <cwryu@debian.org>, 2007, 2008, 2009, 2010.
-#
-msgid ""
-msgstr ""
-"Project-Id-Version: xkeyboard-config 2.0\n"
-"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2010-09-15 21:57+0100\n"
-"PO-Revision-Date: 2010-09-17 11:21+0900\n"
-"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
-"Language-Team: Korean <translation-team-ko@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../rules/base.xml.in.h:1
-msgid "&lt;Less/Greater&gt;"
-msgstr "&lt;</>&gt;"
-
-#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;</>&gt; 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
-
-#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;</>&gt; 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
-
-#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr "(F)"
-
-#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr "(구형 방식) 다른 버전"
-
-#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(구형 방식) 다른 버전, 썬 데드키"
-
-#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(구형 방식) 다른 버전, 데드키 없음"
-
-#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr "101/104키 호환"
-
-#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/QWERTY/쉼표/데드키"
-
-#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/QWERTY/쉼표/데드키 없음"
-
-#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/QWERTY/점/데드키"
-
-#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/QWERTY/점/데드키 없음"
-
-#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/QWERTZ/쉼표/데드키"
-
-#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/QWERTZ/쉼표/데드키 없음"
-
-#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/QWERTZ/점/데드키"
-
-#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/QWERTZ/점/데드키 없음"
-
-#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/QWERTY/쉼표/데드키"
-
-#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/QWERTY/쉼표/데드키 없음"
-
-#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/QWERTY/점/데드키"
-
-#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/QWERTY/점/데드키 없음"
-
-#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/QWERTZ/쉼표/데드키"
-
-#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/QWERTZ/쉼표/데드키 없음"
-
-#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/QWERTZ/점/데드키"
-
-#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/QWERTZ/점/데드키 없음"
-
-#: ../rules/base.xml.in.h:25
-msgid "2"
-msgstr "2"
-
-#: ../rules/base.xml.in.h:26
-msgid "4"
-msgstr "4"
-
-#: ../rules/base.xml.in.h:27
-msgid "5"
-msgstr "5"
-
-#: ../rules/base.xml.in.h:28
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
-
-#: ../rules/base.xml.in.h:29
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
-
-#: ../rules/base.xml.in.h:30
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
-
-#: ../rules/base.xml.in.h:31
-msgid "ATM/phone-style"
-msgstr "ATM/전화기형태"
-
-#: ../rules/base.xml.in.h:32
-msgid "Acer AirKey V"
-msgstr "에이서 AirKey V"
-
-#: ../rules/base.xml.in.h:33
-msgid "Acer C300"
-msgstr "에이서 C300"
-
-#: ../rules/base.xml.in.h:34
-msgid "Acer Ferrari 4000"
-msgstr "에이서 Ferrari 4000"
-
-#: ../rules/base.xml.in.h:35
-msgid "Acer Laptop"
-msgstr "에이서 노트북"
-
-#: ../rules/base.xml.in.h:36
-msgid "Add the standard behavior to Menu key"
-msgstr "메뉴 키에 기본 동작 추가"
-
-#: ../rules/base.xml.in.h:37
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "에스페란토 곡절 악센트 (curcimflex) 추가"
-
-#: ../rules/base.xml.in.h:38
-msgid "Adding EuroSign to certain keys"
-msgstr "유로 기호를 특정 키에 추가"
-
-#: ../rules/base.xml.in.h:39
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
-
-#: ../rules/base.xml.in.h:40
-msgid "Afg"
-msgstr "아프가니스탄"
-
-#: ../rules/base.xml.in.h:41
-msgid "Afghanistan"
-msgstr "아프가니스탄"
-
-#: ../rules/base.xml.in.h:42
-msgid "Akan"
-msgstr "아칸"
-
-#: ../rules/base.xml.in.h:43
-msgid "Alb"
-msgstr "알바니아"
-
-#: ../rules/base.xml.in.h:44
-msgid "Albania"
-msgstr "알바니아"
-
-#: ../rules/base.xml.in.h:45
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt와 Meta를 Alt 키에"
-
-#: ../rules/base.xml.in.h:46
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt 키를 오른쪽 윈도우 키로 매핑, Super 키를 메뉴 키로 매핑"
-
-#: ../rules/base.xml.in.h:47
-msgid "Alt+Caps Lock"
-msgstr "Alt+Caps Lock"
-
-#: ../rules/base.xml.in.h:48
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
-
-#: ../rules/base.xml.in.h:49
-msgid "Alt+Shift"
-msgstr "Alt+Shift"
-
-#: ../rules/base.xml.in.h:50
-msgid "Alt+Space"
-msgstr "Alt+스페이스"
-
-#: ../rules/base.xml.in.h:51
-msgid "Alt-Q"
-msgstr "Alt-Q"
-
-#: ../rules/base.xml.in.h:52
-msgid "Alt/Win key behavior"
-msgstr "Alt/Win 키 동작"
-
-#: ../rules/base.xml.in.h:53
-msgid "Alternative"
-msgstr "다른 버전"
-
-#: ../rules/base.xml.in.h:54
-msgid "Alternative Eastern"
-msgstr "다른 동부"
-
-#: ../rules/base.xml.in.h:55
-msgid "Alternative Phonetic"
-msgstr "다른 음성 기호 버전"
-
-#: ../rules/base.xml.in.h:56
-msgid "Alternative international"
-msgstr "다른 버전 국제"
-
-#: ../rules/base.xml.in.h:57
-msgid "Alternative, Sun dead keys"
-msgstr "다른 버전, 썬 데드키"
-
-#: ../rules/base.xml.in.h:58
-msgid "Alternative, eliminate dead keys"
-msgstr "다른 버전, 데드키 없음"
-
-#: ../rules/base.xml.in.h:59
-msgid "Alternative, latin-9 only"
-msgstr "다른 버전, latin-9 전용"
-
-#: ../rules/base.xml.in.h:60
-msgid "And"
-msgstr "안도라"
-
-#: ../rules/base.xml.in.h:61
-msgid "Andorra"
-msgstr "안도라"
-
-#: ../rules/base.xml.in.h:62
-msgid "Any Alt key"
-msgstr "모든 Alt 키"
-
-#: ../rules/base.xml.in.h:63
-msgid "Any Win key"
-msgstr "모든 윈도우 키"
-
-#: ../rules/base.xml.in.h:64
-msgid "Any Win key (while pressed)"
-msgstr "모든 윈도우 키 (누르고 있는 동안)"
-
-#: ../rules/base.xml.in.h:65
-msgid "Apostrophe (') variant"
-msgstr "아포스트로피 (') 변형"
-
-#: ../rules/base.xml.in.h:66
-msgid "Apple"
-msgstr "애플"
-
-#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Apple Aluminium Keyboard (ANSI)"
-
-#: ../rules/base.xml.in.h:68
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Apple Aluminium Keyboard (ISO)"
-
-#: ../rules/base.xml.in.h:69
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Apple Aluminium Keyboard (JIS)"
-
-#: ../rules/base.xml.in.h:70
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Apple Aluminium Keyboard: PC 키 에뮬레이션 (Print, Scroll_Lock, Pause, Num Lock)"
-
-#: ../rules/base.xml.in.h:71
-msgid "Apple Laptop"
-msgstr "애플 노트북"
-
-#: ../rules/base.xml.in.h:72
-msgid "Ara"
-msgstr "아랍"
-
-#: ../rules/base.xml.in.h:73
-msgid "Arabic"
-msgstr "아랍"
-
-#: ../rules/base.xml.in.h:74
-msgid "Arm"
-msgstr "아르메니아"
-
-#: ../rules/base.xml.in.h:75
-msgid "Armenia"
-msgstr "아르메니아"
-
-#: ../rules/base.xml.in.h:76
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "오스트리아 변형, 가운데점 H 및 가운데점 L 포함"
-
-#: ../rules/base.xml.in.h:77
-msgid "Asus Laptop"
-msgstr "에이서스 노트북"
-
-#: ../rules/base.xml.in.h:78
-msgid "At bottom left"
-msgstr "맨 아래 왼쪽에"
-
-#: ../rules/base.xml.in.h:79
-msgid "At left of 'A'"
-msgstr "'A' 왼쪽에"
-
-#: ../rules/base.xml.in.h:80
-msgid "Austria"
-msgstr "오스트리아"
-
-#: ../rules/base.xml.in.h:81
-msgid "Aut"
-msgstr "오스트리아"
-
-#: ../rules/base.xml.in.h:82
-msgid "Avatime"
-msgstr "Avatime"
-
-#: ../rules/base.xml.in.h:83
-msgid "Aze"
-msgstr "아제르바이잔"
-
-#: ../rules/base.xml.in.h:84
-msgid "Azerbaijan"
-msgstr "아제르바이잔"
-
-#: ../rules/base.xml.in.h:85
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 무선 인터넷 키보드"
-
-#: ../rules/base.xml.in.h:86
-msgid "BTC 5090"
-msgstr "BTC 5090"
-
-#: ../rules/base.xml.in.h:87
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF 멀티미디어"
-
-#: ../rules/base.xml.in.h:88
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
-
-#: ../rules/base.xml.in.h:89
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
-
-#: ../rules/base.xml.in.h:90
-msgid "BTC 9000"
-msgstr "BTC 9000"
-
-#: ../rules/base.xml.in.h:91
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
-
-#: ../rules/base.xml.in.h:92
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
-
-#: ../rules/base.xml.in.h:93
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
-
-#: ../rules/base.xml.in.h:94
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U 미니 무선 인터넷/게임 키보드"
-
-#: ../rules/base.xml.in.h:95
-msgid "Backslash"
-msgstr "백슬래시"
-
-#: ../rules/base.xml.in.h:96
-msgid "Bangladesh"
-msgstr "방글라데시"
-
-# FIXME: 브랜드?
-#: ../rules/base.xml.in.h:97
-msgid "Bashkirian"
-msgstr "Bashkirian"
-
-#: ../rules/base.xml.in.h:98
-msgid "Bel"
-msgstr "벨기에"
-
-#: ../rules/base.xml.in.h:99
-msgid "Belarus"
-msgstr "벨라루스"
-
-#: ../rules/base.xml.in.h:100
-msgid "Belgium"
-msgstr "벨기에"
-
-#: ../rules/base.xml.in.h:101
-msgid "BenQ X-Touch"
-msgstr "벤큐 X-Touch"
-
-#: ../rules/base.xml.in.h:102
-msgid "BenQ X-Touch 730"
-msgstr "벤큐 X-Touch 730"
-
-#: ../rules/base.xml.in.h:103
-msgid "BenQ X-Touch 800"
-msgstr "벤큐 X-Touch 800"
-
-#: ../rules/base.xml.in.h:104
-msgid "Bengali"
-msgstr "벵골어"
-
-#: ../rules/base.xml.in.h:105
-msgid "Bengali Probhat"
-msgstr "벵골어 프롭햇"
-
-#: ../rules/base.xml.in.h:106
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ergonomic, 드보락 방식"
-
-#: ../rules/base.xml.in.h:107
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ergonomic, 드보락 방식, latin-9 전용"
-
-#: ../rules/base.xml.in.h:108
-msgid "Bgd"
-msgstr "방글라데시"
-
-#: ../rules/base.xml.in.h:109
-msgid "Bgr"
-msgstr "불가리아"
-
-#: ../rules/base.xml.in.h:110
-msgid "Bhutan"
-msgstr "부탄"
-
-#: ../rules/base.xml.in.h:111
-msgid "Biblical Hebrew (Tiro)"
-msgstr "성서 히브리어 (Tiro)"
-
-#: ../rules/base.xml.in.h:112
-msgid "Bih"
-msgstr "보스니아 헤르체고비나"
-
-#: ../rules/base.xml.in.h:113
-msgid "Blr"
-msgstr "벨라루스"
-
-#: ../rules/base.xml.in.h:114
-msgid "Bosnia and Herzegovina"
-msgstr "보스니아 헤르체고비나"
-
-#: ../rules/base.xml.in.h:115
-msgid "Both Alt keys together"
-msgstr "Alt 키 2개 동시 누름"
-
-#: ../rules/base.xml.in.h:116
-msgid "Both Ctrl keys together"
-msgstr "Ctrl 키 2개 동시 누름"
-
-#: ../rules/base.xml.in.h:117
-msgid "Both Shift keys together"
-msgstr "Shift 키 2개 동시 누름"
-
-#: ../rules/base.xml.in.h:118
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "Shift 키 두 개로 Caps Lock 토글"
-
-#: ../rules/base.xml.in.h:119
-msgid "Botswana"
-msgstr "보츠와나"
-
-#: ../rules/base.xml.in.h:120
-msgid "Bra"
-msgstr "브라질"
-
-#: ../rules/base.xml.in.h:121
-msgid "Braille"
-msgstr "점자"
-
-#: ../rules/base.xml.in.h:122
-msgid "Brazil"
-msgstr "브라질"
-
-# http://ko.wikipedia.org/wiki/브르타뉴어
-#: ../rules/base.xml.in.h:123
-msgid "Breton"
-msgstr "브르타뉴어"
-
-# Braille
-#: ../rules/base.xml.in.h:124
-msgid "Brl"
-msgstr "점자"
-
-#: ../rules/base.xml.in.h:125
-msgid "Brother Internet Keyboard"
-msgstr "브라더 인터넷 키보드"
-
-#: ../rules/base.xml.in.h:126
-msgid "Btn"
-msgstr "부탄"
-
-# 아랍어 음역 방법 http://en.wikipedia.org/wiki/Buckwalter_transliteration
-#: ../rules/base.xml.in.h:127
-msgid "Buckwalter"
-msgstr "버크월터"
-
-#: ../rules/base.xml.in.h:128
-msgid "Bulgaria"
-msgstr "불가리아"
-
-#: ../rules/base.xml.in.h:129
-msgid "Bwa"
-msgstr "보츠나와"
-
-#: ../rules/base.xml.in.h:130
-msgid "COD"
-msgstr "COD"
-
-# 우르드어 관련 http://www.crulp.org/
-#: ../rules/base.xml.in.h:131
-msgid "CRULP"
-msgstr "CRULP"
-
-#: ../rules/base.xml.in.h:132
-msgid "Cambodia"
-msgstr "캄보디아"
-
-#: ../rules/base.xml.in.h:133
-msgid "Can"
-msgstr "캐나다"
-
-#: ../rules/base.xml.in.h:134
-msgid "Canada"
-msgstr "캐나다"
-
-#: ../rules/base.xml.in.h:135
-msgid "Caps Lock"
-msgstr "Caps Lock"
-
-#: ../rules/base.xml.in.h:136
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "Caps Lock (1번으로), Shift+Caps Lock (마지막으로)"
-
-#: ../rules/base.xml.in.h:137
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "Caps Lock (누르고 있는 동안), Alt+Caps Lock을 누르면 원래 Caps Lock 기능"
-
-#: ../rules/base.xml.in.h:138
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "Caps Lock이 Shift처럼 동작하고 상태 고정, Shift가 Caps Lock을 \"일시 중지\""
-
-#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "Caps Lock이 Shift처럼 동작하고 상태 고정, Shift가 Caps Lock 상태에 영향 없음"
-
-#: ../rules/base.xml.in.h:140
-msgid "Caps Lock is disabled"
-msgstr "Caps Lock 사용 안 함"
-
-#: ../rules/base.xml.in.h:141
-msgid "Caps Lock key behavior"
-msgstr "Caps Lock 키 동작"
-
-#: ../rules/base.xml.in.h:142
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "Caps Lock이 Shift 상태를 토글, 즉 모든 키가 영향을 받음"
-
-#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr "Caps Lock이 일반적인 알파벳 대문자 상태를 토글"
-
-#: ../rules/base.xml.in.h:144
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr "Caps Lock이 내부 대문자 기능 사용. Shift가 Caps Lock을 \"일시 중지\""
-
-#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr "Caps Lock이 내부 대문자 기능 사용. Shift가 Caps Lock 상태에 영향 없음"
-
-#: ../rules/base.xml.in.h:146
-msgid "Catalan variant with middle-dot L"
-msgstr "카탈로니아어 변형, 가운데점 L 포함"
-
-#: ../rules/base.xml.in.h:147
-msgid "Cedilla"
-msgstr "세디유"
-
-#: ../rules/base.xml.in.h:148
-msgid "Che"
-msgstr "스위스"
-
-# 체로키어 - 아메리카 원주민 부족
-#: ../rules/base.xml.in.h:149
-msgid "Cherokee"
-msgstr "체로키어"
-
-#: ../rules/base.xml.in.h:150
-msgid "Cherry B.UNLIMITED"
-msgstr "체리 B.UNLIMITED"
-
-#: ../rules/base.xml.in.h:151
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "체리 Blue Line CyBo@rd"
-
-#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "체리 Blue Line CyBo@rd (다른 옵션)"
-
-#: ../rules/base.xml.in.h:153
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "체리 CyBo@rd USB-Hub"
-
-#: ../rules/base.xml.in.h:154
-msgid "Cherry CyMotion Expert"
-msgstr "체리 CyMotion Expert"
-
-#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Master Linux"
-msgstr "체리 CyMotion Master Linux"
-
-#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master XPress"
-msgstr "체리 CyMotion Master XPress"
-
-#: ../rules/base.xml.in.h:157
-msgid "Chicony Internet Keyboard"
-msgstr "치코니 인터넷 키보드"
-
-#: ../rules/base.xml.in.h:158
-msgid "Chicony KB-9885"
-msgstr "치코니 KB-9885"
-
-#: ../rules/base.xml.in.h:159
-msgid "Chicony KU-0108"
-msgstr "치코니 KU-0108"
-
-#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0420"
-msgstr "치코니 KU-0420"
-
-#: ../rules/base.xml.in.h:161
-msgid "China"
-msgstr "중국"
-
-#: ../rules/base.xml.in.h:162
-msgid "Chn"
-msgstr "중국"
-
-# http://ko.wikipedia.org/wiki/%EC%B6%94%EB%B0%94%EC%8B%9C%EC%96%B4
-#: ../rules/base.xml.in.h:163
-msgid "Chuvash"
-msgstr "추바시어"
-
-# http://ko.wikipedia.org/wiki/%EC%B6%94%EB%B0%94%EC%8B%9C%EC%96%B4
-#: ../rules/base.xml.in.h:164
-msgid "Chuvash Latin"
-msgstr "추바시어 라틴"
-
-#: ../rules/base.xml.in.h:165
-msgid "Classic"
-msgstr "클래식"
-
-#: ../rules/base.xml.in.h:166
-msgid "Classic Dvorak"
-msgstr "클래식 드보락"
-
-#: ../rules/base.xml.in.h:167
-msgid "Classic, eliminate dead keys"
-msgstr "클래식, 데드키 없음"
-
-#: ../rules/base.xml.in.h:168
-msgid "Classmate PC"
-msgstr "클래스메이트 PC"
-
-# 아일랜드 변형
-#: ../rules/base.xml.in.h:169
-msgid "CloGaelach"
-msgstr "CloGaelach"
-
-# Colemak: 상표명
-#: ../rules/base.xml.in.h:170
-msgid "Colemak"
-msgstr "Colemak"
-
-#: ../rules/base.xml.in.h:171
-msgid "Compaq Easy Access Keyboard"
-msgstr "컴팩 Easy Access 키보드"
-
-#: ../rules/base.xml.in.h:172
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "컴팩 인터넷 키보드 (13키)"
-
-#: ../rules/base.xml.in.h:173
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "컴팩 인터넷 키보드 (18키)"
-
-#: ../rules/base.xml.in.h:174
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "컴팩 인터넷 키보드 (7키)"
-
-#: ../rules/base.xml.in.h:175
-msgid "Compaq iPaq Keyboard"
-msgstr "컴팩 iPaq 키보드"
-
-#: ../rules/base.xml.in.h:176
-msgid "Compose key position"
-msgstr "조합 키 위치"
-
-#: ../rules/base.xml.in.h:177
-msgid "Congo, Democratic Republic of the"
-msgstr "콩고 민주 공화국"
-
-#: ../rules/base.xml.in.h:178
-msgid "Control + Alt + Backspace"
-msgstr "Ctrl + Alt + 백스페이스"
-
-#: ../rules/base.xml.in.h:179
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Ctrl 키를 윈도우 키로 매핑, Alt 키를 윈도우 키로 매핑"
-
-#: ../rules/base.xml.in.h:180
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control 키를 윈도우 키로 매핑 (그리고 일반 Ctrl 키로도 동작)"
-
-#: ../rules/base.xml.in.h:181
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
-
-#: ../rules/base.xml.in.h:182
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Crimean Tatar (Dobruca-1 Q)"
-
-#: ../rules/base.xml.in.h:183
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Crimean Tatar (Dobruca-2 Q)"
-
-#: ../rules/base.xml.in.h:184
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Crimean Tatar (터키어 Alt-Q)"
-
-#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Crimean Tatar (터키어 F)"
-
-#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Crimean Tatar (터키어 Q)"
-
-#: ../rules/base.xml.in.h:187
-msgid "Croatia"
-msgstr "크로아티아"
-
-#: ../rules/base.xml.in.h:188
-msgid "Ctrl key position"
-msgstr "Ctrl 키 위치"
-
-#: ../rules/base.xml.in.h:189
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Shift"
-
-#: ../rules/base.xml.in.h:190
-msgid "Cyrillic"
-msgstr "키릴"
-
-#: ../rules/base.xml.in.h:191
-msgid "Cyrillic with guillemets"
-msgstr "키릴, 각괄호 포함"
-
-#: ../rules/base.xml.in.h:192
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "키릴, Z와 ZHE 뒤바꾸기"
-
-#: ../rules/base.xml.in.h:193
-msgid "Cze"
-msgstr "체코"
-
-#: ../rules/base.xml.in.h:194
-msgid "Czechia"
-msgstr "체코"
-
-#: ../rules/base.xml.in.h:195
-msgid "DOS"
-msgstr "DOS"
-
-#: ../rules/base.xml.in.h:196
-msgid "DTK2000"
-msgstr "DTK2000"
-
-#: ../rules/base.xml.in.h:197
-msgid "Dead acute"
-msgstr "어큐트 데드키"
-
-#: ../rules/base.xml.in.h:198
-msgid "Dead grave acute"
-msgstr "그레이브 어큐트 데드키"
-
-#: ../rules/base.xml.in.h:199
-msgid "Default numeric keypad keys"
-msgstr "기본 숫자 키패드 키"
-
-#: ../rules/base.xml.in.h:200
-msgid "Dell"
-msgstr "델"
-
-#: ../rules/base.xml.in.h:201
-msgid "Dell 101-key PC"
-msgstr "델 101키 PC"
-
-#: ../rules/base.xml.in.h:202
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "델 노트북 Inspiron 6xxx/8xxx"
-
-#: ../rules/base.xml.in.h:203
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "델 노트북 Precision M series"
-
-#: ../rules/base.xml.in.h:204
-msgid "Dell Latitude series laptop"
-msgstr "델 Latitude 시리즈 노트북"
-
-#: ../rules/base.xml.in.h:205
-msgid "Dell Precision M65"
-msgstr "델 Precision M65"
-
-#: ../rules/base.xml.in.h:206
-msgid "Dell SK-8125"
-msgstr "델 SK-8125"
-
-#: ../rules/base.xml.in.h:207
-msgid "Dell SK-8135"
-msgstr "델 SK-8135"
-
-#: ../rules/base.xml.in.h:208
-msgid "Dell USB Multimedia Keyboard"
-msgstr "델 USB 멀티미디어 키보드"
-
-#: ../rules/base.xml.in.h:209
-msgid "Denmark"
-msgstr "덴마크"
-
-#: ../rules/base.xml.in.h:210
-msgid "Deu"
-msgstr "독일"
-
-#: ../rules/base.xml.in.h:211
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa Wireless Desktop 키보드"
-
-#: ../rules/base.xml.in.h:212
-msgid "Diamond 9801 / 9802 series"
-msgstr "다이아몬드 9801 / 9802 시리즈"
-
-#: ../rules/base.xml.in.h:213
-msgid "Dnk"
-msgstr "덴마크"
-
-#: ../rules/base.xml.in.h:214
-msgid "Dvorak"
-msgstr "드보락"
-
-#: ../rules/base.xml.in.h:215
-msgid "Dvorak (UK Punctuation)"
-msgstr "드보락 (영국 문장 부호)"
-
-#: ../rules/base.xml.in.h:216
-msgid "Dvorak alternative international (no dead keys)"
-msgstr "드보락 다른 국제 버전 (데드키 없음)"
-
-#: ../rules/base.xml.in.h:217
-msgid "Dvorak international (with dead keys)"
-msgstr "드보락 국제 버전 (데드키 포함)"
-
-#: ../rules/base.xml.in.h:218
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "드보락, 1 키에 폴란드어 따옴표"
-
-#: ../rules/base.xml.in.h:219
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "드보락, 따옴표 키에 폴란드어 따옴표"
-
-#: ../rules/base.xml.in.h:220
-msgid "E"
-msgstr "E"
-
-#: ../rules/base.xml.in.h:221
-msgid "Eastern"
-msgstr "동부"
-
-#: ../rules/base.xml.in.h:222
-msgid "Eliminate dead keys"
-msgstr "데드키 없음"
-
-#: ../rules/base.xml.in.h:223
-msgid "Enable extra typographic characters"
-msgstr "추가 타이포그라피 문자 사용"
-
-#: ../rules/base.xml.in.h:224
-msgid "English"
-msgstr "영어"
-
-#: ../rules/base.xml.in.h:225
-msgid "English (USA International)"
-msgstr "영어 (미국 국제 버전)"
-
-#: ../rules/base.xml.in.h:226
-msgid "English (USA Macintosh)"
-msgstr "영어 (미국 매킨토시)"
-
-#: ../rules/base.xml.in.h:227
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
-
-#: ../rules/base.xml.in.h:228
-msgid "Enter on keypad"
-msgstr "키패드에 Enter"
-
-#: ../rules/base.xml.in.h:229
-msgid "Epo"
-msgstr "에스페란토"
-
-#: ../rules/base.xml.in.h:230
-msgid "Ergonomic"
-msgstr "어고노믹"
-
-#: ../rules/base.xml.in.h:231
-msgid "Esp"
-msgstr "스페인"
-
-#: ../rules/base.xml.in.h:232
-msgid "Esperanto"
-msgstr "에스페란토"
-
-#: ../rules/base.xml.in.h:233
-msgid "Est"
-msgstr "에스토니아"
-
-#: ../rules/base.xml.in.h:234
-msgid "Estonia"
-msgstr "에스토니아"
-
-#: ../rules/base.xml.in.h:235
-msgid "Eth"
-msgstr "에티오피아"
-
-#: ../rules/base.xml.in.h:236
-msgid "Ethiopia"
-msgstr "에티오피아"
-
-#: ../rules/base.xml.in.h:237
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
-
-#: ../rules/base.xml.in.h:238
-msgid "Ewe"
-msgstr "Ewe"
-
-#: ../rules/base.xml.in.h:239
-msgid "Extended"
-msgstr "확장"
-
-#: ../rules/base.xml.in.h:240
-msgid "Extended - Winkeys"
-msgstr "확장 - 윈도우키"
-
-#: ../rules/base.xml.in.h:241
-msgid "Extended Backslash"
-msgstr "확장 백슬래시"
-
-#: ../rules/base.xml.in.h:242
-msgid "F-letter (F) variant"
-msgstr "F 글자 (F) 변형"
-
-#: ../rules/base.xml.in.h:243
-msgid "FL90"
-msgstr "FL90"
-
-#: ../rules/base.xml.in.h:244
-msgid "Faroe Islands"
-msgstr "페로 제도"
-
-#: ../rules/base.xml.in.h:245
-msgid "Fin"
-msgstr "핀란드"
-
-#: ../rules/base.xml.in.h:246
-msgid "Finland"
-msgstr "핀란드"
-
-#. This assumes the KP_ abstract symbols are actually useful for some apps
-#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:249
-msgid "Four-level key with abstract separators"
-msgstr "네번째 단계, 가상 구분 문자 사용"
-
-#: ../rules/base.xml.in.h:250
-msgid "Four-level key with comma"
-msgstr "네번째 단계, 쉼표 사용"
-
-#: ../rules/base.xml.in.h:251
-msgid "Four-level key with dot"
-msgstr "네번째 단계, 점 사용"
-
-#: ../rules/base.xml.in.h:252
-msgid "Four-level key with dot, latin-9 restriction"
-msgstr "네번째 단계, 점 사용, latin-9 제한 사항"
-
-# momayyez: http://en.wikipedia.org/wiki/Momayyez
-#: ../rules/base.xml.in.h:253
-msgid "Four-level key with momayyez"
-msgstr "네번째 단계, 아랍식 쉼표 (momayyez) 사용"
-
-#: ../rules/base.xml.in.h:254
-msgid "Fra"
-msgstr "프랑스"
-
-#: ../rules/base.xml.in.h:255
-msgid "France"
-msgstr "프랑스"
-
-#: ../rules/base.xml.in.h:256
-msgid "Français (France Alternative)"
-msgstr "Français (프랑스 다른 버전)"
-
-#: ../rules/base.xml.in.h:257
-msgid "French"
-msgstr "프랑스어"
-
-#: ../rules/base.xml.in.h:258
-msgid "French (Macintosh)"
-msgstr "프랑스어 (매킨토시)"
-
-#: ../rules/base.xml.in.h:259
-msgid "French (legacy)"
-msgstr "프랑스어 (구형 방식)"
-
-#: ../rules/base.xml.in.h:260
-msgid "French Dvorak"
-msgstr "프랑스어 드보락"
-
-#: ../rules/base.xml.in.h:261
-msgid "French, Sun dead keys"
-msgstr "프랑스어, 썬 데드키"
-
-#: ../rules/base.xml.in.h:262
-msgid "French, eliminate dead keys"
-msgstr "프랑스어, 데드키 없음"
-
-#: ../rules/base.xml.in.h:263
-msgid "Fro"
-msgstr "페로 제도"
-
-#: ../rules/base.xml.in.h:264
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "후지스-지멘스 컴퓨터 AMILO 노트북"
-
-#: ../rules/base.xml.in.h:265
-msgid "Fula"
-msgstr "풀라"
-
-#: ../rules/base.xml.in.h:266
-msgid "GBr"
-msgstr "영국"
-
-#: ../rules/base.xml.in.h:267
-msgid "GILLBT"
-msgstr "GILLBT"
-
-# 가나의 언어
-#: ../rules/base.xml.in.h:268
-msgid "Ga"
-msgstr "가어"
-
-#: ../rules/base.xml.in.h:269
-msgid "Generic 101-key PC"
-msgstr "일반 101키 PC"
-
-#: ../rules/base.xml.in.h:270
-msgid "Generic 102-key (Intl) PC"
-msgstr "일반 102키 (국제 버전) PC"
-
-#: ../rules/base.xml.in.h:271
-msgid "Generic 104-key PC"
-msgstr "일반 104키 PC"
-
-#: ../rules/base.xml.in.h:272
-msgid "Generic 105-key (Intl) PC"
-msgstr "일반 105키 (국제 버전) PC"
-
-#: ../rules/base.xml.in.h:273
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
-
-#: ../rules/base.xml.in.h:274
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-
-#: ../rules/base.xml.in.h:275
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
-
-#: ../rules/base.xml.in.h:276
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
-
-#: ../rules/base.xml.in.h:277
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
-
-#: ../rules/base.xml.in.h:278
-msgid "Geo"
-msgstr "조지아"
-
-#: ../rules/base.xml.in.h:279
-msgid "Georgia"
-msgstr "조지아"
-
-#: ../rules/base.xml.in.h:280
-msgid "Georgian"
-msgstr "조지아"
-
-#: ../rules/base.xml.in.h:281
-msgid "Georgian AZERTY Tskapo"
-msgstr "조지아 AZERTY Tskapo"
-
-#: ../rules/base.xml.in.h:282
-msgid "German (Macintosh)"
-msgstr "독일어 (매킨토시)"
-
-#: ../rules/base.xml.in.h:283
-msgid "German, Sun dead keys"
-msgstr "독일어, 썬 데드키"
-
-#: ../rules/base.xml.in.h:284
-msgid "German, eliminate dead keys"
-msgstr "독일어, 데드키 없음"
-
-#: ../rules/base.xml.in.h:285
-msgid "Germany"
-msgstr "독일"
-
-#: ../rules/base.xml.in.h:286
-msgid "Gha"
-msgstr "가나"
-
-#: ../rules/base.xml.in.h:287
-msgid "Ghana"
-msgstr "가나"
-
-#: ../rules/base.xml.in.h:288
-msgid "Gin"
-msgstr "기니"
-
-#: ../rules/base.xml.in.h:289
-msgid "Grc"
-msgstr "그리스"
-
-#: ../rules/base.xml.in.h:290
-msgid "Greece"
-msgstr "그리스"
-
-# 기니공화국
-#: ../rules/base.xml.in.h:291
-msgid "Guinea"
-msgstr "기니"
-
-#: ../rules/base.xml.in.h:292
-msgid "Gujarati"
-msgstr "구자라트어"
-
-#: ../rules/base.xml.in.h:293
-msgid "Gurmukhi"
-msgstr "구르무키 문자"
-
-# 젤룸 - 파키스탄 지역
-#: ../rules/base.xml.in.h:294
-msgid "Gurmukhi Jhelum"
-msgstr "구르무키 문자, 젤룸"
-
-# 제조사 이름
-#: ../rules/base.xml.in.h:295
-msgid "Gyration"
-msgstr "Gyration"
-
-#: ../rules/base.xml.in.h:296
-msgid "Happy Hacking Keyboard"
-msgstr "해피해킹 키보드"
-
-#: ../rules/base.xml.in.h:297
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "해피해킹 키보드, 맥용"
-
-# 나이지리아 변형
-#: ../rules/base.xml.in.h:298
-msgid "Hausa"
-msgstr "하우사어"
-
-#: ../rules/base.xml.in.h:299
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "휴렛팩커드 인터넷 키보드"
-
-#: ../rules/base.xml.in.h:300
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "휴렛팩커드 Mini 110 Notebook"
-
-#: ../rules/base.xml.in.h:301
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "휴렛팩커드 Omnibook 500 FA"
-
-#: ../rules/base.xml.in.h:302
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "휴렛팩커드 Omnibook 5xx"
-
-#: ../rules/base.xml.in.h:303
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "휴렛팩커드 Omnibook 6000/6100"
-
-#: ../rules/base.xml.in.h:304
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "휴렛팩커드 Omnibook XE3 GC"
-
-#: ../rules/base.xml.in.h:305
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "휴렛팩커드 Omnibook XE3 GF"
-
-#: ../rules/base.xml.in.h:306
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "휴렛팩커드 Omnibook XT1000"
-
-#: ../rules/base.xml.in.h:307
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "휴렛팩커드 Pavilion ZT11xx"
-
-#: ../rules/base.xml.in.h:308
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "휴렛팩커드 Pavilion dv5"
-
-#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "휴렛팩커드 SK-250x 멀티미디어 키보드"
-
-#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard nx9020"
-msgstr "휴렛팩커드 nx9020"
-
-#: ../rules/base.xml.in.h:311
-msgid "Hexadecimal"
-msgstr "십육진법"
-
-# Bolnagri: x input method 이름, http://indlinux.org/wiki/index.php/BolNagri
-#: ../rules/base.xml.in.h:312
-msgid "Hindi Bolnagri"
-msgstr "힌두어 Bolnagri"
-
-#: ../rules/base.xml.in.h:313
-msgid "Hindi Wx"
-msgstr "힌두어 Wx"
-
-# 음악 용어, 상표인가?
-#: ../rules/base.xml.in.h:314
-msgid "Homophonic"
-msgstr "호모포닉"
-
-#: ../rules/base.xml.in.h:315
-msgid "Honeywell Euroboard"
-msgstr "하니웰 Euroboard"
-
-#: ../rules/base.xml.in.h:316
-msgid "Hrv"
-msgstr "크로아티아"
-
-#: ../rules/base.xml.in.h:317
-msgid "Hun"
-msgstr "헝가리"
-
-#: ../rules/base.xml.in.h:318
-msgid "Hungary"
-msgstr "헝가리"
-
-#: ../rules/base.xml.in.h:319
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper 키를 윈도우 키로 매핑"
-
-#: ../rules/base.xml.in.h:320
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
-
-#: ../rules/base.xml.in.h:321
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
-
-#: ../rules/base.xml.in.h:322
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
-
-#: ../rules/base.xml.in.h:323
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
-
-#: ../rules/base.xml.in.h:324
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
-
-#: ../rules/base.xml.in.h:325
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
-
-#: ../rules/base.xml.in.h:326
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-
-#: ../rules/base.xml.in.h:327
-msgid "ISO Alternate"
-msgstr "ISO 다른 버전"
-
-#: ../rules/base.xml.in.h:328
-msgid "Iceland"
-msgstr "아이슬랜드"
-
-# 나이지리아 변형
-#: ../rules/base.xml.in.h:329
-msgid "Igbo"
-msgstr "이그보어"
-
-#: ../rules/base.xml.in.h:330
-msgid "Include dead tilde"
-msgstr "물결 데드키 포함"
-
-#: ../rules/base.xml.in.h:331
-msgid "Ind"
-msgstr "인도"
-
-#: ../rules/base.xml.in.h:332
-msgid "India"
-msgstr "인도"
-
-#: ../rules/base.xml.in.h:333
-msgid "International (AltGr dead keys)"
-msgstr "국제 버전 (AltGr 데드키)"
-
-#: ../rules/base.xml.in.h:334
-msgid "International (with dead keys)"
-msgstr "국제 버전 (데드키 포함)"
-
-#: ../rules/base.xml.in.h:335
-msgid "Inuktitut"
-msgstr "이누이트어"
-
-#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr "이란"
-
-#: ../rules/base.xml.in.h:337
-msgid "Iraq"
-msgstr "이라크"
-
-#: ../rules/base.xml.in.h:338
-msgid "Ireland"
-msgstr "아일랜드"
-
-#: ../rules/base.xml.in.h:339
-msgid "Irl"
-msgstr "아일랜드"
-
-#: ../rules/base.xml.in.h:340
-msgid "Irn"
-msgstr "아일랜드"
-
-#: ../rules/base.xml.in.h:341
-msgid "Irq"
-msgstr "이라크"
-
-#: ../rules/base.xml.in.h:342
-msgid "Isl"
-msgstr "아이슬랜드"
-
-#: ../rules/base.xml.in.h:343
-msgid "Isr"
-msgstr "이스라엘"
-
-#: ../rules/base.xml.in.h:344
-msgid "Israel"
-msgstr "이스라엘"
-
-#: ../rules/base.xml.in.h:345
-msgid "Ita"
-msgstr "이탈리아"
-
-#: ../rules/base.xml.in.h:346
-msgid "Italy"
-msgstr "이탈리아"
-
-#: ../rules/base.xml.in.h:347
-msgid "Japan"
-msgstr "일본"
-
-#: ../rules/base.xml.in.h:348
-msgid "Japan (PC-98xx Series)"
-msgstr "일본 (PC-98xx 시리즈)"
-
-#: ../rules/base.xml.in.h:349
-msgid "Japanese keyboard options"
-msgstr "일본어 키보드 옵션"
-
-#: ../rules/base.xml.in.h:350
-msgid "Jpn"
-msgstr "일본"
-
-# http://ko.wikipedia.org/wiki/칼미크어
-#: ../rules/base.xml.in.h:351
-msgid "Kalmyk"
-msgstr "칼미크어"
-
-#: ../rules/base.xml.in.h:352
-msgid "Kana"
-msgstr "가나"
-
-#: ../rules/base.xml.in.h:353
-msgid "Kana Lock key is locking"
-msgstr "Kana Lock 키 상태 고정"
-
-#: ../rules/base.xml.in.h:354
-msgid "Kannada"
-msgstr "칸나다어"
-
-#: ../rules/base.xml.in.h:355
-msgid "Kashubian"
-msgstr "카슈브어"
-
-#: ../rules/base.xml.in.h:356
-msgid "Kaz"
-msgstr "카자흐스탄"
-
-#: ../rules/base.xml.in.h:357
-msgid "Kazakh with Russian"
-msgstr "카자흐스탄, 러시아어 포함"
-
-#: ../rules/base.xml.in.h:358
-msgid "Kazakhstan"
-msgstr "카자흐스탄"
-
-#: ../rules/base.xml.in.h:359
-msgid "Ken"
-msgstr "케냐"
-
-#: ../rules/base.xml.in.h:360
-msgid "Kenya"
-msgstr "케냐"
-
-#: ../rules/base.xml.in.h:361
-msgid "Key sequence to kill the X server"
-msgstr "X 서버를 멈추는 키 조합"
-
-#: ../rules/base.xml.in.h:362
-msgid "Key to choose 3rd level"
-msgstr "3번째 단계를 선택하는 키"
-
-#: ../rules/base.xml.in.h:363
-msgid "Key to choose 5th level"
-msgstr "5번째 단계를 선택하는 키"
-
-#: ../rules/base.xml.in.h:364
-msgid "Key(s) to change layout"
-msgstr "배치를 전환하는 키"
-
-#: ../rules/base.xml.in.h:365
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
-
-#: ../rules/base.xml.in.h:366
-msgid "Kgz"
-msgstr "키르지스탄"
-
-#: ../rules/base.xml.in.h:367
-msgid "Khm"
-msgstr "캄보디아"
-
-# http://en.wikipedia.org/wiki/Kikuyu#Language
-#: ../rules/base.xml.in.h:368
-msgid "Kikuyu"
-msgstr "키쿠유어"
-
-#: ../rules/base.xml.in.h:369
-msgid "Kinesis"
-msgstr "키네시스"
-
-# http://ko.wikipedia.org/wiki/코미어
-#: ../rules/base.xml.in.h:370
-msgid "Komi"
-msgstr "코미어"
-
-#: ../rules/base.xml.in.h:371
-msgid "Kor"
-msgstr "대한민국"
-
-#: ../rules/base.xml.in.h:372
-msgid "Korea, Republic of"
-msgstr "대한민국"
-
-# 쿠테나이 - 아메리카 원주민 부족
-#: ../rules/base.xml.in.h:373
-msgid "Ktunaxa"
-msgstr "쿠테나이"
-
-#: ../rules/base.xml.in.h:374
-msgid "Kurdish, (F)"
-msgstr "쿠르드어, (F)"
-
-#: ../rules/base.xml.in.h:375
-msgid "Kurdish, Arabic-Latin"
-msgstr "쿠르드어, 아랍어 라틴"
-
-#: ../rules/base.xml.in.h:376
-msgid "Kurdish, Latin Alt-Q"
-msgstr "쿠르드어, 라틴 Alt-Q"
-
-#: ../rules/base.xml.in.h:377
-msgid "Kurdish, Latin Q"
-msgstr "쿠르드어, 라틴 Q"
-
-#: ../rules/base.xml.in.h:378
-msgid "Kyrgyzstan"
-msgstr "키르기지스탄"
-
-#: ../rules/base.xml.in.h:379
-msgid "LAm"
-msgstr "라틴 아메리카"
-
-# 리투아니아어 레이아웃 이름 http://lekp.info/
-#: ../rules/base.xml.in.h:380
-msgid "LEKP"
-msgstr "LEKP"
-
-# 리투아니아어 레이아웃 이름 http://lekp.info/
-#: ../rules/base.xml.in.h:381
-msgid "LEKPa"
-msgstr "LEKPa"
-
-#: ../rules/base.xml.in.h:382
-msgid "Lao"
-msgstr "라오스"
-
-#: ../rules/base.xml.in.h:383
-msgid "Laos"
-msgstr "라오스"
-
-#: ../rules/base.xml.in.h:384
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "노트북 컴팩 (Armada 등) 노트북 키보드"
-
-#: ../rules/base.xml.in.h:385
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "노트북 컴팩 (Presario 등) 노트북 키보드"
-
-#: ../rules/base.xml.in.h:386
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "노트북 컴팩 eMachines m68xx"
-
-#: ../rules/base.xml.in.h:387
-msgid "Latin"
-msgstr "라틴"
-
-#: ../rules/base.xml.in.h:388
-msgid "Latin American"
-msgstr "라틴 아메리카"
-
-#: ../rules/base.xml.in.h:389
-msgid "Latin Unicode"
-msgstr "라틴 유니코드"
-
-#: ../rules/base.xml.in.h:390
-msgid "Latin Unicode qwerty"
-msgstr "라틴 유니코드 QWERTY"
-
-#: ../rules/base.xml.in.h:391
-msgid "Latin qwerty"
-msgstr "라틴 QWERTY"
-
-#: ../rules/base.xml.in.h:392
-msgid "Latin unicode"
-msgstr "라틴 유니코드"
-
-#: ../rules/base.xml.in.h:393
-msgid "Latin unicode qwerty"
-msgstr "라틴 유니코드 QWERTY"
-
-#: ../rules/base.xml.in.h:394
-msgid "Latin with guillemets"
-msgstr "라틴, 각괄호 포함"
-
-#: ../rules/base.xml.in.h:395
-msgid "Latvia"
-msgstr "라트비아"
-
-#: ../rules/base.xml.in.h:396
-msgid "Layout toggle on multiply/divide key"
-msgstr "곱하기/나누기 키에 키보드 배치 토글"
-
-#: ../rules/base.xml.in.h:397
-msgid "Left Alt"
-msgstr "왼쪽 Alt"
-
-#: ../rules/base.xml.in.h:398
-msgid "Left Alt (while pressed)"
-msgstr "왼쪽 Alt (누르고 있는 동안)"
-
-#: ../rules/base.xml.in.h:399
-msgid "Left Alt is swapped with Left Win"
-msgstr "왼쪽 Alt와 왼쪽 윈도우 키 뒤바꾸기"
-
-#: ../rules/base.xml.in.h:400
-msgid "Left Ctrl"
-msgstr "왼쪽 Ctrl"
-
-#: ../rules/base.xml.in.h:401
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "왼쪽 Ctrl (1번 키보드 배치로), 오른쪽 Ctrl (마지막 키보드 배치로)"
-
-#: ../rules/base.xml.in.h:402
-msgid "Left Ctrl+Left Shift"
-msgstr "왼쪽 Ctrl+왼쪽 Shift"
-
-#: ../rules/base.xml.in.h:403
-msgid "Left Shift"
-msgstr "왼쪽 Shift"
-
-#: ../rules/base.xml.in.h:404
-msgid "Left Win"
-msgstr "왼쪽 윈도우"
-
-#: ../rules/base.xml.in.h:405
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "왼쪽 윈도우 (1번으로), 오른쪽 윈도우/메뉴 (마지막으로)"
-
-#: ../rules/base.xml.in.h:406
-msgid "Left Win (while pressed)"
-msgstr "왼쪽 윈도우 (누르고 있는 동안)"
-
-#: ../rules/base.xml.in.h:407
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "왼쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
-
-#: ../rules/base.xml.in.h:408
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "왼쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
-
-#: ../rules/base.xml.in.h:409
-msgid "Left hand"
-msgstr "왼손잡이"
-
-#: ../rules/base.xml.in.h:410
-msgid "Left handed Dvorak"
-msgstr "왼손잡이 드보락"
-
-#: ../rules/base.xml.in.h:411
-msgid "Legacy"
-msgstr "구형 방식"
-
-#: ../rules/base.xml.in.h:412
-msgid "Legacy Wang 724"
-msgstr "구형 방식 Wang 724 키패드"
-
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:414
-msgid "Legacy key with comma"
-msgstr "구형 방식 키, 쉼표 포함"
-
-#: ../rules/base.xml.in.h:415
-msgid "Legacy key with dot"
-msgstr "구형 방식 키, 점 포함"
-
-#: ../rules/base.xml.in.h:416
-msgid "Lithuania"
-msgstr "리투아니아"
-
-#: ../rules/base.xml.in.h:417
-msgid "Lka"
-msgstr "스리랑카"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:418
-msgid "Logitech Access Keyboard"
-msgstr "로지텍 액세스 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:419
-msgid "Logitech Cordless Desktop"
-msgstr "로지텍 무선 데스크탑"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:420
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "로지텍 무선 데스크탑 (다른 옵션)"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:421
-msgid "Logitech Cordless Desktop EX110"
-msgstr "로지텍 무선 데스크탑 EX110"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:422
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "로지텍 무선 데스크탑 LX-300"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:423
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "로지텍 무선 데스크탑 내비게이터"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:424
-msgid "Logitech Cordless Desktop Optical"
-msgstr "로지텍 무선 데스크탑 옵티컬"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:425
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "로지텍 무선 데스크탑 프로 (다른 옵션 2)"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:426
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "로지텍 무선 데스크탑 아이터치"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:427
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "로지텍 무선 프리덤/데스크탑 내비게이터"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:428
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "로지텍 G15 추가 키, G15daemon 사용"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:429
-msgid "Logitech Generic Keyboard"
-msgstr "로지텍 일반 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:430
-msgid "Logitech Internet 350 Keyboard"
-msgstr "로지텍 인터넷 350 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:431
-msgid "Logitech Internet Keyboard"
-msgstr "로지텍 인터넷 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:432
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "로지텍 인터넷 내비게이터 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:433
-msgid "Logitech Media Elite Keyboard"
-msgstr "로지텍 미디어 엘리트 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:434
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "로지텍 울트라 무선 미디어 데스크탑 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:435
-msgid "Logitech Ultra-X Keyboard"
-msgstr "로지텍 울트라 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:436
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "로지텍 디노보 엣지 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:437
-msgid "Logitech diNovo Keyboard"
-msgstr "로지텍 디노보 키보드"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:438
-msgid "Logitech iTouch"
-msgstr "로지텍 아이터치"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:439
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "로지텍 아이터치 무선 키보드 (모델 Y-RB6)"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:440
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "로지텍 아이터치 인터넷 내비게이터 키보드 SE"
-
-# 한국에서 광고하는 대로 음역
-#: ../rules/base.xml.in.h:441
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "로지텍 아이터치 인터넷 내비게이터 키보드 SE (USB)"
-
-# http://ko.wikipedia.org/wiki/저지_소르브어
-#: ../rules/base.xml.in.h:442
-msgid "Lower Sorbian"
-msgstr "저지 소르브어"
-
-# http://ko.wikipedia.org/wiki/저지_소르브어
-#: ../rules/base.xml.in.h:443
-msgid "Lower Sorbian (qwertz)"
-msgstr "저지 소르브어 (QWERTZ)"
-
-#: ../rules/base.xml.in.h:444
-msgid "Ltu"
-msgstr "리투아니아"
-
-#: ../rules/base.xml.in.h:445
-msgid "Lva"
-msgstr "라트비아"
-
-#: ../rules/base.xml.in.h:446
-msgid "MESS"
-msgstr "MESS"
-
-#: ../rules/base.xml.in.h:447
-msgid "MNE"
-msgstr "몬테네그로"
-
-#: ../rules/base.xml.in.h:448
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
-
-#: ../rules/base.xml.in.h:449
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (국제 버전)"
-
-#: ../rules/base.xml.in.h:450
-msgid "Macedonia"
-msgstr "마케도니아"
-
-#: ../rules/base.xml.in.h:451
-msgid "Macintosh"
-msgstr "매킨토시"
-
-#: ../rules/base.xml.in.h:452
-msgid "Macintosh (International)"
-msgstr "매킨토시 (국제 버전)"
-
-#: ../rules/base.xml.in.h:453
-msgid "Macintosh Old"
-msgstr "매킨토시 구형"
-
-#: ../rules/base.xml.in.h:454
-msgid "Macintosh, Sun dead keys"
-msgstr "매킨토시, 썬 데드키"
-
-#: ../rules/base.xml.in.h:455
-msgid "Macintosh, eliminate dead keys"
-msgstr "매킨토시, 데드키 없음"
-
-#: ../rules/base.xml.in.h:456
-msgid "Make Caps Lock an additional Backspace"
-msgstr "Caps Lock을 추가 백스페이스로 사용"
-
-#: ../rules/base.xml.in.h:457
-msgid "Make Caps Lock an additional Ctrl"
-msgstr "Caps Lock을 추가 Ctrl로 사용"
-
-#: ../rules/base.xml.in.h:458
-msgid "Make Caps Lock an additional ESC"
-msgstr "Caps Lock을 추가 ESC로 사용"
-
-#: ../rules/base.xml.in.h:459
-msgid "Make Caps Lock an additional Hyper"
-msgstr "Caps Lock을 추가 Hyper로 사용"
-
-#: ../rules/base.xml.in.h:460
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "Caps Lock을 추가 Num Lock으로 사용"
-
-#: ../rules/base.xml.in.h:461
-msgid "Make Caps Lock an additional Super"
-msgstr "Caps Lock을 추가 Super로 사용"
-
-#: ../rules/base.xml.in.h:462
-msgid "Malayalam"
-msgstr "말라얄람어"
-
-#: ../rules/base.xml.in.h:463
-msgid "Malayalam Lalitha"
-msgstr "말라얄람어 라리타"
-
-#: ../rules/base.xml.in.h:464
-msgid "Maldives"
-msgstr "몰디브"
-
-#: ../rules/base.xml.in.h:465
-msgid "Mali"
-msgstr "말리"
-
-#: ../rules/base.xml.in.h:466
-msgid "Malta"
-msgstr "몰타"
-
-#: ../rules/base.xml.in.h:467
-msgid "Maltese keyboard with US layout"
-msgstr "몰타 키보드, 미국식 배치"
-
-#: ../rules/base.xml.in.h:468
-msgid "Mao"
-msgstr "마오리"
-
-#: ../rules/base.xml.in.h:469
-msgid "Maori"
-msgstr "마오리"
-
-#: ../rules/base.xml.in.h:470
-msgid "Mdv"
-msgstr "몰디브"
-
-#: ../rules/base.xml.in.h:471
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
-
-#: ../rules/base.xml.in.h:472
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access 키보드"
-
-#: ../rules/base.xml.in.h:473
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
-
-#: ../rules/base.xml.in.h:474
-msgid "Menu"
-msgstr "메뉴"
-
-#: ../rules/base.xml.in.h:475
-msgid "Meta is mapped to Left Win"
-msgstr "메타 키를 왼쪽 윈도우 키로 매핑"
-
-#: ../rules/base.xml.in.h:476
-msgid "Meta is mapped to Win keys"
-msgstr "메타 키를 윈도우 키로 매핑"
-
-#: ../rules/base.xml.in.h:477
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "마이크로소프트 컴포트 커브 키보드 2000"
-
-#: ../rules/base.xml.in.h:478
-msgid "Microsoft Internet Keyboard"
-msgstr "마이크로소프트 인터넷 키보드"
-
-#: ../rules/base.xml.in.h:479
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "마이크로소프트 인터넷 키보드 프로, 스웨덴"
-
-#: ../rules/base.xml.in.h:480
-msgid "Microsoft Natural"
-msgstr "마이크로소프트 내츄럴"
-
-#: ../rules/base.xml.in.h:481
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "마이크로소프트 내츄럴 키보드 엘리트"
-
-#: ../rules/base.xml.in.h:482
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "마이크로소프트 내츄럴 키보드 / 마이크로소프트 인터넷 키보드 프로"
-
-#: ../rules/base.xml.in.h:483
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "마이크로소프트 내츄럴 키보드 프로 OEM"
-
-#: ../rules/base.xml.in.h:484
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "마이크로소프트 내츄럴 키보드 프로 USB / 마이크로소프트 인터넷 키보드 프로"
-
-#: ../rules/base.xml.in.h:485
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "마이크로소프트 내츄럴 무선 어고노믹 키보드 7000"
-
-#: ../rules/base.xml.in.h:486
-msgid "Microsoft Office Keyboard"
-msgstr "마이크로소프트 오피스 키보드"
-
-#: ../rules/base.xml.in.h:487
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "마이크로소프트 무선 멀티미디어 키보드 1.0A"
-
-#: ../rules/base.xml.in.h:488
-msgid "Miscellaneous compatibility options"
-msgstr "기타 호환성 옵션"
-
-#: ../rules/base.xml.in.h:489
-msgid "Mkd"
-msgstr "마케도니아"
-
-#: ../rules/base.xml.in.h:490
-msgid "Mli"
-msgstr "말리"
-
-#: ../rules/base.xml.in.h:491
-msgid "Mlt"
-msgstr "몰타"
-
-#: ../rules/base.xml.in.h:492
-msgid "Mmr"
-msgstr "미얀마"
-
-#: ../rules/base.xml.in.h:493
-msgid "Mng"
-msgstr "몽골"
-
-#: ../rules/base.xml.in.h:494
-msgid "Mongolia"
-msgstr "몽골"
-
-#: ../rules/base.xml.in.h:495
-msgid "Montenegro"
-msgstr "몬테네그로"
-
-#: ../rules/base.xml.in.h:496
-msgid "Morocco"
-msgstr "모로코"
-
-#: ../rules/base.xml.in.h:497
-msgid "Multilingual"
-msgstr "여러 언어 지원"
-
-#: ../rules/base.xml.in.h:498
-msgid "Multilingual, first part"
-msgstr "여러 언어 지원, 첫번째"
-
-#: ../rules/base.xml.in.h:499
-msgid "Multilingual, second part"
-msgstr "여러 언어 지원, 두번째"
-
-#: ../rules/base.xml.in.h:500
-msgid "Myanmar"
-msgstr "미얀마"
-
-#: ../rules/base.xml.in.h:501
-msgid "NICOLA-F style Backspace"
-msgstr "NICOLA-F 방식 백스페이스"
-
-# 우르드어 키보드 형태
-#: ../rules/base.xml.in.h:502
-msgid "NLA"
-msgstr "NLA"
-
-# 아메리카 소수 언어
-#: ../rules/base.xml.in.h:503
-msgid "Nativo"
-msgstr "나티보"
-
-# 아메리카 소수 언어
-#: ../rules/base.xml.in.h:504
-msgid "Nativo for Esperanto"
-msgstr "나티보, 에스페란토"
-
-# 아메리카 소수 언어
-#: ../rules/base.xml.in.h:505
-msgid "Nativo for USA keyboards"
-msgstr "나티보, 미국 키보드"
-
-# 독일어?
-#: ../rules/base.xml.in.h:506
-msgid "Neo 2"
-msgstr "Neo 2"
-
-#: ../rules/base.xml.in.h:507
-msgid "Nepal"
-msgstr "네팔"
-
-#: ../rules/base.xml.in.h:508
-msgid "Netherlands"
-msgstr "네덜란드"
-
-#: ../rules/base.xml.in.h:509
-msgid "New phonetic"
-msgstr "새 음성 표기"
-
-#: ../rules/base.xml.in.h:510
-msgid "Nga"
-msgstr "나이지리아"
-
-#: ../rules/base.xml.in.h:511
-msgid "Nigeria"
-msgstr "나이지리아"
-
-#: ../rules/base.xml.in.h:512
-msgid "Nld"
-msgstr "네덜란드"
-
-#: ../rules/base.xml.in.h:513
-msgid "Non-breakable space character at fourth level"
-msgstr "4번째 단계에서 강제 공백 문자"
-
-#: ../rules/base.xml.in.h:514
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "4번째 단계에서 강제 공백 문자, 6번째 단계에서 얇은 강제 공백 문자"
-
-#: ../rules/base.xml.in.h:515
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "4번째 단계에서 강제 공백 문자, 6번째 단계에서 얇은 강제 공백 문자 (Ctrl+Shift 사용)"
-
-#: ../rules/base.xml.in.h:516
-msgid "Non-breakable space character at second level"
-msgstr "2번째 단계에서 강제 공백 문자"
-
-#: ../rules/base.xml.in.h:517
-msgid "Non-breakable space character at third level"
-msgstr "3번째 단계에서 강제 공백 문자"
-
-#: ../rules/base.xml.in.h:518
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "3번째 단계에서 강제 공백 문자, 4번째에서는 출력 없음."
-
-#: ../rules/base.xml.in.h:519
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "3번째 단계에서 강제 공백 문자, 4번째에서는 얇은 강제 공백 문자."
-
-#: ../rules/base.xml.in.h:520
-msgid "Nor"
-msgstr "노르웨이"
-
-#: ../rules/base.xml.in.h:521
-msgid "Northern Saami"
-msgstr "북 사오미"
-
-#: ../rules/base.xml.in.h:522
-msgid "Northern Saami, eliminate dead keys"
-msgstr "북 사오미, 데드키 없음"
-
-#: ../rules/base.xml.in.h:523
-msgid "Northgate OmniKey 101"
-msgstr "노스게이트 OmniKey 101"
-
-#: ../rules/base.xml.in.h:524
-msgid "Norway"
-msgstr "노르웨이"
-
-#: ../rules/base.xml.in.h:525
-msgid "Npl"
-msgstr "네팔"
-
-#: ../rules/base.xml.in.h:526
-msgid "Num Lock"
-msgstr "Num Lock"
-
-#: ../rules/base.xml.in.h:527
-msgid "Numeric keypad delete key behaviour"
-msgstr "숫자 키패드의 Delete 키 동작"
-
-#: ../rules/base.xml.in.h:528
-msgid "Numeric keypad keys work as with Mac"
-msgstr "숫자 키패드 키가 맥과 동일하게 동작"
-
-#: ../rules/base.xml.in.h:529
-msgid "Numeric keypad layout selection"
-msgstr "숫자 키패드 배치 선택"
-
-#: ../rules/base.xml.in.h:530
-msgid "OADG 109A"
-msgstr "OADG 109A"
-
-#: ../rules/base.xml.in.h:531
-msgid "OLPC"
-msgstr "OLPC"
-
-# 아프가니스탄 공용어의 하나, http://ko.wikipedia.org/wiki/%EB%8B%A4%EB%A6%AC%EC%96%B4
-#: ../rules/base.xml.in.h:532
-msgid "OLPC Dari"
-msgstr "OLPC 다리어"
-
-# 아프가니스탄 공용어의 하나, http://ko.wikipedia.org/wiki/%ED%8C%8C%EC%8A%88%ED%86%A0%EC%96%B4
-#: ../rules/base.xml.in.h:533
-msgid "OLPC Pashto"
-msgstr "OLPC 파슈토어"
-
-#: ../rules/base.xml.in.h:534
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC 남 우즈벡"
-
-#: ../rules/base.xml.in.h:535
-msgid "Occitan"
-msgstr "오크어"
-
-# 아일랜드 변형
-#: ../rules/base.xml.in.h:536
-msgid "Ogham"
-msgstr "오검 문자"
-
-# 아일랜드 변형
-#: ../rules/base.xml.in.h:537
-msgid "Ogham IS434"
-msgstr "오검 문자 IS434"
-
-# Oriya - 인도 방언
-#: ../rules/base.xml.in.h:538
-msgid "Oriya"
-msgstr "오리야어"
-
-#: ../rules/base.xml.in.h:539
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/Internet 키보드"
-
-# 러시아 변형
-#: ../rules/base.xml.in.h:540
-msgid "Ossetian"
-msgstr "Ossetian"
-
-#: ../rules/base.xml.in.h:541
-msgid "Ossetian, Winkeys"
-msgstr "Ossetian, 윈도우 키"
-
-#: ../rules/base.xml.in.h:542
-msgid "Ossetian, legacy"
-msgstr "Ossetian, 구형 방식 키"
-
-#: ../rules/base.xml.in.h:543
-msgid "PC-98xx Series"
-msgstr "PC-98xx 시리즈"
-
-#: ../rules/base.xml.in.h:544
-msgid "Pak"
-msgstr "파키스탄"
-
-#: ../rules/base.xml.in.h:545
-msgid "Pakistan"
-msgstr "파키스탄"
-
-#: ../rules/base.xml.in.h:546
-msgid "Pannonian Rusyn Homophonic"
-msgstr "판노니아 루테니아 기호"
-
-# 아프가니스탄
-#: ../rules/base.xml.in.h:547
-msgid "Pashto"
-msgstr "파슈토어"
-
-# 태국
-#: ../rules/base.xml.in.h:548
-msgid "Pattachote"
-msgstr "Pattachote"
-
-#: ../rules/base.xml.in.h:549
-msgid "Pause"
-msgstr "Pause"
-
-#: ../rules/base.xml.in.h:550
-msgid "Persian, with Persian Keypad"
-msgstr "페르시아어, 페르시아어 키패드"
-
-#: ../rules/base.xml.in.h:551
-msgid "Phonetic"
-msgstr "음성 표기"
-
-#: ../rules/base.xml.in.h:552
-msgid "Phonetic Winkeys"
-msgstr "음성 표기, 윈도우 키"
-
-#: ../rules/base.xml.in.h:553
-msgid "Pol"
-msgstr "폴란드"
-
-#: ../rules/base.xml.in.h:554
-msgid "Poland"
-msgstr "폴란드"
-
-# 그리스어 발음 표기 http://en.wikipedia.org/wiki/Polytonic_orthography
-#: ../rules/base.xml.in.h:555
-msgid "Polytonic"
-msgstr "폴리토닉"
-
-#: ../rules/base.xml.in.h:556
-msgid "Portugal"
-msgstr "포르투갈"
-
-#: ../rules/base.xml.in.h:557
-msgid "Probhat"
-msgstr "프롭햇"
-
-#: ../rules/base.xml.in.h:558
-msgid "Programmer Dvorak"
-msgstr "프로그래머 드보락"
-
-#: ../rules/base.xml.in.h:559
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
-
-#: ../rules/base.xml.in.h:560
-msgid "Prt"
-msgstr "포르투갈"
-
-#: ../rules/base.xml.in.h:561
-msgid "PrtSc"
-msgstr "PrtSc"
-
-#: ../rules/base.xml.in.h:562
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
-
-#: ../rules/base.xml.in.h:563
-msgid "Right Alt"
-msgstr "오른쪽 Alt"
-
-#: ../rules/base.xml.in.h:564
-msgid "Right Alt (while pressed)"
-msgstr "오른쪽 Alt (누르고 있는 동안)"
-
-#: ../rules/base.xml.in.h:565
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "오른쪽 Alt로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
-
-#: ../rules/base.xml.in.h:566
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "오른쪽 Alt로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
-
-#: ../rules/base.xml.in.h:567
-msgid "Right Alt key never chooses 3rd level"
-msgstr "오른쪽 Alt는 3번째 단계를 선택하지 않음"
-
-#: ../rules/base.xml.in.h:568
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "오른쪽 Alt, Shift+오른쪽 Alt가 Multi_Key"
-
-#: ../rules/base.xml.in.h:569
-msgid "Right Ctrl"
-msgstr "오른쪽 Ctrl"
-
-#: ../rules/base.xml.in.h:570
-msgid "Right Ctrl (while pressed)"
-msgstr "오른쪽 Ctrl (누르고 있는 동안)"
-
-#: ../rules/base.xml.in.h:571
-msgid "Right Ctrl as Right Alt"
-msgstr "오른쪽 Ctrl 키를 오른쪽 Alt 키로"
-
-#: ../rules/base.xml.in.h:572
-msgid "Right Ctrl+Right Shift"
-msgstr "오른쪽 Ctrl+오른쪽 Alt"
-
-#: ../rules/base.xml.in.h:573
-msgid "Right Shift"
-msgstr "오른쪽 Shift"
-
-#: ../rules/base.xml.in.h:574
-msgid "Right Win"
-msgstr "오른쪽 윈도우"
-
-#: ../rules/base.xml.in.h:575
-msgid "Right Win (while pressed)"
-msgstr "오른쪽 윈도우 (누르고 있는 동안)"
-
-#: ../rules/base.xml.in.h:576
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "오른쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
-
-#: ../rules/base.xml.in.h:577
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "오른쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
-
-#: ../rules/base.xml.in.h:578
-msgid "Right hand"
-msgstr "오른손잡이"
-
-#: ../rules/base.xml.in.h:579
-msgid "Right handed Dvorak"
-msgstr "오른손잡이 드보락"
-
-#: ../rules/base.xml.in.h:580
-msgid "Romania"
-msgstr "루마니아"
-
-#: ../rules/base.xml.in.h:581
-msgid "Romanian keyboard with German letters"
-msgstr "루마니아 키보드, 독일어 글자"
-
-#: ../rules/base.xml.in.h:582
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "루마니아 키보드, 독일어 글자, 데드키 없음"
-
-#: ../rules/base.xml.in.h:583
-msgid "Rou"
-msgstr "루마니아"
-
-#: ../rules/base.xml.in.h:584
-msgid "Rus"
-msgstr "러시아"
-
-#: ../rules/base.xml.in.h:585
-msgid "Russia"
-msgstr "러시아"
-
-#: ../rules/base.xml.in.h:586
-msgid "Russian"
-msgstr "러시아어"
-
-#: ../rules/base.xml.in.h:587
-msgid "Russian phonetic"
-msgstr "러시아어 음성 표기"
-
-#: ../rules/base.xml.in.h:588
-msgid "Russian phonetic Dvorak"
-msgstr "러시아어 음성 표기 드보락"
-
-#: ../rules/base.xml.in.h:589
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "러시아어 음성 표기, 데드키 없음"
-
-#: ../rules/base.xml.in.h:590
-msgid "Russian with Kazakh"
-msgstr "러시아어, 카자흐 포함"
-
-#: ../rules/base.xml.in.h:591
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless 키보드"
-
-#: ../rules/base.xml.in.h:592
-msgid "SK-1300"
-msgstr "SK-1300"
-
-#: ../rules/base.xml.in.h:593
-msgid "SK-2500"
-msgstr "SK-2500"
-
-#: ../rules/base.xml.in.h:594
-msgid "SK-6200"
-msgstr "SK-6200"
-
-#: ../rules/base.xml.in.h:595
-msgid "SK-7100"
-msgstr "SK-7100"
-
-#: ../rules/base.xml.in.h:596 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr "SRB"
-
-#: ../rules/base.xml.in.h:597
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
-
-#: ../rules/base.xml.in.h:598
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
-
-#: ../rules/base.xml.in.h:599
-msgid "Samsung SDM 4500P"
-msgstr "삼성 SDM 4500P"
-
-#: ../rules/base.xml.in.h:600
-msgid "Samsung SDM 4510P"
-msgstr "삼성 SDM 4510P"
-
-#: ../rules/base.xml.in.h:601
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
-
-# 캐나다 소스 언어
-#: ../rules/base.xml.in.h:602
-msgid "Secwepemctsin"
-msgstr "슈스와프어"
-
-#: ../rules/base.xml.in.h:603
-msgid "Semi-colon on third level"
-msgstr "3번째 단계에서 세미콜론"
-
-#: ../rules/base.xml.in.h:604
-msgid "Sen"
-msgstr "세네갈"
-
-#: ../rules/base.xml.in.h:605
-msgid "Senegal"
-msgstr "세네갈"
-
-#: ../rules/base.xml.in.h:606 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr "세르비아"
-
-#: ../rules/base.xml.in.h:607
-msgid "Serbian"
-msgstr "세르비아어"
-
-#: ../rules/base.xml.in.h:608
-msgid "Shift cancels Caps Lock"
-msgstr "Shift를 누르면 Caps Lock 끄기"
-
-#: ../rules/base.xml.in.h:609
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Shift를 누르면 Num Lock을 끄지 않고, 3번째 단계를 선택"
-
-#: ../rules/base.xml.in.h:610
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Shift와 동시에 숫자 키패드 키를 누르면 MS 윈도우즈와 동일하게 동작"
-
-#: ../rules/base.xml.in.h:611
-msgid "Shift+Caps Lock"
-msgstr "Shift+Caps Lock"
-
-#: ../rules/base.xml.in.h:612
-msgid "Simple"
-msgstr "간단"
-
-# 인도
-#: ../rules/base.xml.in.h:613
-msgid "Sindhi"
-msgstr "신디어"
-
-#: ../rules/base.xml.in.h:614
-msgid "Slovakia"
-msgstr "슬로바키아"
-
-#: ../rules/base.xml.in.h:615
-msgid "Slovenia"
-msgstr "슬로베니아"
-
-#: ../rules/base.xml.in.h:616
-msgid "South Africa"
-msgstr "남아공"
-
-#: ../rules/base.xml.in.h:617
-msgid "Southern Uzbek"
-msgstr "남 우즈벡"
-
-#: ../rules/base.xml.in.h:618
-msgid "Spain"
-msgstr "스페인"
-
-#: ../rules/base.xml.in.h:619
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "특수 키는 (Ctrl+Alt+&lt;키&gt;) 서버에서 처리"
-
-#: ../rules/base.xml.in.h:620
-msgid "Sri Lanka"
-msgstr "스리랑카"
-
-#: ../rules/base.xml.in.h:621
-msgid "Standard"
-msgstr "표준"
-
-#: ../rules/base.xml.in.h:622
-msgid "Standard (Cedilla)"
-msgstr "표준 (세디유)"
-
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:624
-msgid "Standard RSTU"
-msgstr "표준 RSTU"
-
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:626
-msgid "Standard RSTU on Russian layout"
-msgstr "표준 RSTU 러시아어 배치"
-
-#: ../rules/base.xml.in.h:627
-msgid "Sun Type 5/6"
-msgstr "썬 타입 5/6"
-
-#: ../rules/base.xml.in.h:628
-msgid "Sun dead keys"
-msgstr "썬 데드키"
-
-#: ../rules/base.xml.in.h:629
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power 멀티미디어 키보드"
-
-#: ../rules/base.xml.in.h:630
-msgid "Svdvorak"
-msgstr "슬로바키아 드보락"
-
-#: ../rules/base.xml.in.h:631
-msgid "Svk"
-msgstr "슬로바키아"
-
-#: ../rules/base.xml.in.h:632
-msgid "Svn"
-msgstr "슬로베니아"
-
-#: ../rules/base.xml.in.h:633
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Ctrl과 Caps Lock 뒤바꾸기"
-
-#: ../rules/base.xml.in.h:634
-msgid "Swap ESC and Caps Lock"
-msgstr "ESC와 Caps Lock 뒤바꾸기"
-
-#: ../rules/base.xml.in.h:635
-msgid "Swe"
-msgstr "스웨덴"
-
-#: ../rules/base.xml.in.h:636
-msgid "Sweden"
-msgstr "스웨덴"
-
-#: ../rules/base.xml.in.h:637
-msgid "Switzerland"
-msgstr "스위스"
-
-#: ../rules/base.xml.in.h:638
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (타블렛 PC)"
-
-#: ../rules/base.xml.in.h:639
-msgid "Syr"
-msgstr "시리아"
-
-#: ../rules/base.xml.in.h:640
-msgid "Syria"
-msgstr "시리아"
-
-#: ../rules/base.xml.in.h:641
-msgid "Syriac"
-msgstr "시리아어"
-
-#: ../rules/base.xml.in.h:642
-msgid "Syriac phonetic"
-msgstr "시리아어 음성 기호"
-
-#: ../rules/base.xml.in.h:643
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
-
-#: ../rules/base.xml.in.h:644
-msgid "Tajikistan"
-msgstr "타지키스탄"
-
-#: ../rules/base.xml.in.h:645
-msgid "Tamil"
-msgstr "타밀어"
-
-#: ../rules/base.xml.in.h:646
-msgid "Tamil Keyboard with Numerals"
-msgstr "타밀어 키보드, 숫자 포함"
-
-#: ../rules/base.xml.in.h:647
-msgid "Tamil TAB Typewriter"
-msgstr "타밀어 TAB 타자기"
-
-#: ../rules/base.xml.in.h:648
-msgid "Tamil TSCII Typewriter"
-msgstr "타밀어 TSCII 타자기"
-
-#: ../rules/base.xml.in.h:649
-msgid "Tamil Unicode"
-msgstr "타밀어 유니코드"
-
-#: ../rules/base.xml.in.h:650
-msgid "Tanzania"
-msgstr "탄자니아"
-
-#: ../rules/base.xml.in.h:651
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
-
-# http://ko.wikipedia.org/wiki/타타르어
-#: ../rules/base.xml.in.h:652
-msgid "Tatar"
-msgstr "타타르어"
-
-#: ../rules/base.xml.in.h:653
-msgid "Telugu"
-msgstr "텔루구어"
-
-#: ../rules/base.xml.in.h:654
-msgid "Tha"
-msgstr "태국"
-
-#: ../rules/base.xml.in.h:655
-msgid "Thailand"
-msgstr "태국"
-
-#: ../rules/base.xml.in.h:656
-msgid "Tibetan"
-msgstr "티베트"
-
-#: ../rules/base.xml.in.h:657
-msgid "Tibetan (with ASCII numerals)"
-msgstr "티베트 (ASCII 숫자 포함)"
-
-#: ../rules/base.xml.in.h:658
-msgid "Tifinagh"
-msgstr "티피나그"
-
-#: ../rules/base.xml.in.h:659
-msgid "Tifinagh alternative"
-msgstr "티피나그 다른 버전"
-
-#: ../rules/base.xml.in.h:660
-msgid "Tifinagh alternative phonetic"
-msgstr "티피나그 다른 음성 기호 버전"
-
-#: ../rules/base.xml.in.h:661
-msgid "Tifinagh extended"
-msgstr "티피나그 확장"
-
-#: ../rules/base.xml.in.h:662
-msgid "Tifinagh extended phonetic"
-msgstr "티피나그 확장 음성 기호"
-
-#: ../rules/base.xml.in.h:663
-msgid "Tifinagh phonetic"
-msgstr "티피나그 음성 기호"
-
-#: ../rules/base.xml.in.h:664
-msgid "Tilde (~) variant"
-msgstr "틸드 (~) 변형"
-
-#: ../rules/base.xml.in.h:665
-msgid "Tjk"
-msgstr "타지키스탄"
-
-#: ../rules/base.xml.in.h:666
-msgid "Tkm"
-msgstr "투르크메니스탄"
-
-#: ../rules/base.xml.in.h:667
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "드보락 키보드에서 해당하는 키로."
-
-#: ../rules/base.xml.in.h:668
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "QWERTY 키보드에서 해당하는 키로."
-
-#: ../rules/base.xml.in.h:669
-msgid "Toshiba Satellite S3000"
-msgstr "도시바 Satellite S3000"
-
-#: ../rules/base.xml.in.h:670
-msgid "Traditional phonetic"
-msgstr "구식 음성 기호"
-
-#: ../rules/base.xml.in.h:671
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access 키보드"
-
-#: ../rules/base.xml.in.h:672
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
-
-#: ../rules/base.xml.in.h:673
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
-
-#: ../rules/base.xml.in.h:674
-msgid "Tur"
-msgstr "터키"
-
-#: ../rules/base.xml.in.h:675
-msgid "Turkey"
-msgstr "터키"
-
-#: ../rules/base.xml.in.h:676
-msgid "Turkmenistan"
-msgstr "투르크메니스탄"
-
-#: ../rules/base.xml.in.h:677
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
-
-#: ../rules/base.xml.in.h:678
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
-
-#: ../rules/base.xml.in.h:679
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
-
-#: ../rules/base.xml.in.h:680
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:유럽 모드)"
-
-#: ../rules/base.xml.in.h:681
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (106:일본 모드)"
-
-#: ../rules/base.xml.in.h:682
-msgid "Typewriter"
-msgstr "타자기"
-
-#: ../rules/base.xml.in.h:683
-msgid "Typewriter, legacy"
-msgstr "타자기, 구형"
-
-#: ../rules/base.xml.in.h:684
-msgid "Tza"
-msgstr "탄자니아"
-
-#: ../rules/base.xml.in.h:685
-msgid "UCW layout (accented letters only)"
-msgstr "UCW 배치 (악센트 문자만)"
-
-#: ../rules/base.xml.in.h:686
-msgid "US Dvorak with CZ UCW support"
-msgstr "US 드보락, CZ UCW 지원"
-
-#: ../rules/base.xml.in.h:687
-msgid "US keyboard with Bosnian digraphs"
-msgstr "미국식 키보드, 보스니아 이중 글자 포함"
-
-#: ../rules/base.xml.in.h:688
-msgid "US keyboard with Bosnian letters"
-msgstr "미국식 키보드, 보스니아 글자 포함"
-
-#: ../rules/base.xml.in.h:689
-msgid "US keyboard with Croatian digraphs"
-msgstr "미국식 키보드, 크로아티아 이중 글자 포함"
-
-#: ../rules/base.xml.in.h:690
-msgid "US keyboard with Croatian letters"
-msgstr "미국식 키보드, 크로아티아 글자 포함"
-
-#: ../rules/base.xml.in.h:691
-msgid "US keyboard with Estonian letters"
-msgstr "미국식 키보드, 에스토니아 글자 포함"
-
-#: ../rules/base.xml.in.h:692
-msgid "US keyboard with Italian letters"
-msgstr "미국식 키보드, 이탈리아어 글자 포함"
-
-#: ../rules/base.xml.in.h:693
-msgid "US keyboard with Lithuanian letters"
-msgstr "미국식 키보드, 리투아니아 글자 포함"
-
-#: ../rules/base.xml.in.h:694
-msgid "US keyboard with Slovenian letters"
-msgstr "미국식 키보드, 슬로베니아 글자 포함"
-
-#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr "미국"
-
-# http://ko.wikipedia.org/wiki/우드무르트어
-#: ../rules/base.xml.in.h:696
-msgid "Udmurt"
-msgstr "우드무르트어"
-
-#: ../rules/base.xml.in.h:697
-msgid "Ukr"
-msgstr "우크라이나"
-
-#: ../rules/base.xml.in.h:698
-msgid "Ukraine"
-msgstr "우크라이나"
-
-#: ../rules/base.xml.in.h:699
-msgid "Unicode additions (arrows and math operators)"
-msgstr "유니코드 추가 (화살표 및 수학 기호)"
-
-#: ../rules/base.xml.in.h:700
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "유니코드 추가 (화살표 및 수학 기호). 수학 기호를 기본 단계에"
-
-#: ../rules/base.xml.in.h:701
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
-
-#: ../rules/base.xml.in.h:702
-msgid "United Kingdom"
-msgstr "영국"
-
-# Unitek - 유니텍(unitech)이 아님
-#: ../rules/base.xml.in.h:703
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
-
-# Urdu, 인도 방언
-#: ../rules/base.xml.in.h:704
-msgid "Urdu, Alternative phonetic"
-msgstr "우르두어, 다른 음성 기호 버전"
-
-# Urdu - 인도 방언
-#: ../rules/base.xml.in.h:705
-msgid "Urdu, Phonetic"
-msgstr "우르두어, 음성 표기"
-
-# Urdu - 인도 방언
-#: ../rules/base.xml.in.h:706
-msgid "Urdu, Winkeys"
-msgstr "우르두어, 윈도우 키"
-
-#: ../rules/base.xml.in.h:707
-msgid "Use Bosnian digraphs"
-msgstr "보스니아 이중 글자 사용"
-
-#: ../rules/base.xml.in.h:708
-msgid "Use Croatian digraphs"
-msgstr "크로아티아 이중 글자 사용"
-
-#: ../rules/base.xml.in.h:709
-msgid "Use guillemets for quotes"
-msgstr "따옴표에 각괄호 사용"
-
-#: ../rules/base.xml.in.h:710
-msgid "Use keyboard LED to show alternative layout"
-msgstr "키보드 LED에서 다른 키보드 배치 사용 표시"
-
-#: ../rules/base.xml.in.h:711
-msgid "Using space key to input non-breakable space character"
-msgstr "스페이스 키가 강제 공백 출력."
-
-#: ../rules/base.xml.in.h:712
-msgid "Usual space at any level"
-msgstr "모든 단계에서 일반 공백 문자"
-
-#: ../rules/base.xml.in.h:713
-msgid "Uzb"
-msgstr "우즈베키스탄"
-
-#: ../rules/base.xml.in.h:714
-msgid "Uzbekistan"
-msgstr "우즈베키스탄"
-
-#: ../rules/base.xml.in.h:715
-msgid "Vietnam"
-msgstr "베트남"
-
-#: ../rules/base.xml.in.h:716
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "뷰소닉 KU-306 인터넷 키보드"
-
-#: ../rules/base.xml.in.h:717
-msgid "Vnm"
-msgstr "베트남"
-
-#: ../rules/base.xml.in.h:718
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Wang 724 키패드, 유니코드 추가 (화살표 및 수학 기호)"
-
-#: ../rules/base.xml.in.h:719
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Wang 724 키패드, 유니코드 추가 (화살표 및 수학 기호), 수학 기호를 기본 단계에"
-
-#: ../rules/base.xml.in.h:720
-msgid "Wang model 724 azerty"
-msgstr "Wang model 724 AZERTY"
-
-#: ../rules/base.xml.in.h:721
-msgid "Western"
-msgstr "서부"
-
-#: ../rules/base.xml.in.h:722
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
-
-#: ../rules/base.xml.in.h:723
-msgid "Winkeys"
-msgstr "윈도우 키"
-
-#: ../rules/base.xml.in.h:724
-msgid "With &lt;\\|&gt; key"
-msgstr "&lt;\\|&gt; 키 포함"
-
-#: ../rules/base.xml.in.h:725
-msgid "With EuroSign on 5"
-msgstr "유로 기호를 5 키에"
-
-#: ../rules/base.xml.in.h:726
-msgid "With guillemets"
-msgstr "각괄호 포함"
-
-#: ../rules/base.xml.in.h:727
-msgid "Yahoo! Internet Keyboard"
-msgstr "야후! 인터넷 키보드"
-
-# http://ko.wikipedia.org/wiki/야쿠트어
-#: ../rules/base.xml.in.h:728
-msgid "Yakut"
-msgstr "아쿠트어"
-
-# 나이지리아 변형
-#: ../rules/base.xml.in.h:729
-msgid "Yoruba"
-msgstr "요루바어"
-
-#: ../rules/base.xml.in.h:730
-msgid "Z and ZHE swapped"
-msgstr "Z와 ZHE 뒤바꾸기"
-
-#: ../rules/base.xml.in.h:731
-msgid "Zaf"
-msgstr "남아공"
-
-#: ../rules/base.xml.in.h:732
-msgid "Zero-width non-joiner character at second level"
-msgstr "2번째 단계에서 폭 없는 연결 금지 문자"
-
-#: ../rules/base.xml.in.h:733
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
-msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자"
-
-#: ../rules/base.xml.in.h:734
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
-msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 없음"
-
-#: ../rules/base.xml.in.h:735
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
-msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 얇은 강제 공백 문자"
-
-#: ../rules/base.xml.in.h:736
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
-msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 폭 없는 연결 문자"
-
-#: ../rules/base.xml.in.h:737
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
-msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 폭 없는 연결 문자"
-
-#: ../rules/base.xml.in.h:738
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
-msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 폭 없는 연결 문자, 4번째에서는 강제 공백 문자"
-
-#: ../rules/base.xml.in.h:739
-msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
-msgstr "3번째 단계에서 폭 없는 연결 금지 문자, 4번째에서는 폭 없는 연결 문자"
-
-#: ../rules/base.xml.in.h:740
-msgid "azerty"
-msgstr "AZERTY"
-
-#: ../rules/base.xml.in.h:741
-msgid "azerty/digits"
-msgstr "AZERTY/숫자"
-
-#: ../rules/base.xml.in.h:742
-msgid "digits"
-msgstr "숫자"
-
-#: ../rules/base.xml.in.h:743
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "세미콜론과 따옴표 없애기 (없어진 기능)"
-
-#: ../rules/base.xml.in.h:744
-msgid "lyx"
-msgstr "lyx"
-
-#: ../rules/base.xml.in.h:745
-msgid "qwerty"
-msgstr "QWERTY"
-
-#: ../rules/base.xml.in.h:746
-msgid "qwerty, extended Backslash"
-msgstr "QWERTY, 백슬래시 확장"
-
-#: ../rules/base.xml.in.h:747
-msgid "qwerty/digits"
-msgstr "QWERTY/숫자"
-
-#: ../rules/base.xml.in.h:748
-msgid "qwertz"
-msgstr "QWERTZ"
-
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL"
-msgstr "APL"
-
-# 미국 원주민 부족
-#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "아트시나"
-
-#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr "아베스탄"
-
-#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr "데드키 대신 조합으로 액센트 입력"
-
-#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr "Couer D'alene Salish"
-
-#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr "국제 (AltGr 유니코드 조합)"
-
-#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "국제 (AltGr 유니코드 조합, 다른 버전)"
+# xkeyboard-config Korean translation
+# This file is distributed under the same license as the xkeyboard-config package.
+# Changwoo Ryu <cwryu@debian.org>, 2007, 2008, 2009, 2010, 2011.
+#
+# - 주의
+# - 한국에 수입해 판매되는 제품은 광고할 때 사용하는 표기를 그대로 사용
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: xkeyboard-config 2.1.99\n"
+"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-03-27 00:43+0900\n"
+"Last-Translator: Changwoo Ryu <cwryu@debian.org>\n"
+"Language-Team: Korean <translation-team-ko@lists.sourceforge.net>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../rules/base.xml.in.h:1
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;</>&gt;"
+
+#: ../rules/base.xml.in.h:2
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;</>&gt; (3번째 단계 선택, 다른 3번째 단계 선택 키와 같이 누르면 고정)"
+
+#: ../rules/base.xml.in.h:3
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;</>&gt; 키로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
+
+#: ../rules/base.xml.in.h:4
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;</>&gt; 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
+
+#: ../rules/base.xml.in.h:5
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;</>&gt; 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
+
+#: ../rules/base.xml.in.h:6
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
+
+#: ../rules/base.xml.in.h:7
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
+
+#: ../rules/base.xml.in.h:8
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
+
+#: ../rules/base.xml.in.h:9
+msgid "ATM/phone-style"
+msgstr "ATM/전화기형태"
+
+#: ../rules/base.xml.in.h:10
+msgid "Acer AirKey V"
+msgstr "에이서 AirKey V"
+
+#: ../rules/base.xml.in.h:11
+msgid "Acer C300"
+msgstr "에이서 C300"
+
+#: ../rules/base.xml.in.h:12
+msgid "Acer Ferrari 4000"
+msgstr "에이서 Ferrari 4000"
+
+#: ../rules/base.xml.in.h:13
+msgid "Acer Laptop"
+msgstr "에이서 노트북"
+
+#: ../rules/base.xml.in.h:14
+msgid "Add the standard behavior to Menu key"
+msgstr "메뉴 키에 기본 동작 추가"
+
+#: ../rules/base.xml.in.h:15
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "에스페란토 곡절 액센트 (curcimflex) 추가"
+
+#: ../rules/base.xml.in.h:16
+msgid "Adding currency signs to certain keys"
+msgstr "화폐 기호를 특정 키에 추가"
+
+#: ../rules/base.xml.in.h:17
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
+
+#: ../rules/base.xml.in.h:18
+msgid "Afg"
+msgstr "아프가니스탄"
+
+#: ../rules/base.xml.in.h:19
+msgid "Afghani"
+msgstr "아프가니스탄"
+
+#: ../rules/base.xml.in.h:20
+msgid "Akan"
+msgstr "아칸"
+
+#: ../rules/base.xml.in.h:21
+msgid "Albanian"
+msgstr "알바니아"
+
+#: ../rules/base.xml.in.h:22
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt와 Meta를 Alt 키에"
+
+#: ../rules/base.xml.in.h:23
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt 키를 오른쪽 윈도우 키로 매핑, Super 키를 메뉴 키로 매핑"
+
+#: ../rules/base.xml.in.h:24
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
+
+#: ../rules/base.xml.in.h:25
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
+
+#: ../rules/base.xml.in.h:26
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
+
+#: ../rules/base.xml.in.h:27
+msgid "Alt+Space"
+msgstr "Alt+스페이스"
+
+#: ../rules/base.xml.in.h:28
+msgid "Alt/Win key behavior"
+msgstr "Alt/Win 키 동작"
+
+#: ../rules/base.xml.in.h:29
+msgid "Amharic"
+msgstr "암하라어"
+
+#: ../rules/base.xml.in.h:30
+msgid "Any Alt key"
+msgstr "모든 Alt 키"
+
+#: ../rules/base.xml.in.h:31
+msgid "Any Win key"
+msgstr "모든 윈도우 키"
+
+#: ../rules/base.xml.in.h:32
+msgid "Any Win key (while pressed)"
+msgstr "모든 윈도우 키 (누르고 있는 동안)"
+
+#: ../rules/base.xml.in.h:33
+msgid "Apple"
+msgstr "애플"
+
+#: ../rules/base.xml.in.h:34
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Apple Aluminium Keyboard (ANSI)"
+
+#: ../rules/base.xml.in.h:35
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Apple Aluminium Keyboard (ISO)"
+
+#: ../rules/base.xml.in.h:36
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Apple Aluminium Keyboard (JIS)"
+
+#: ../rules/base.xml.in.h:37
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Apple Aluminium Keyboard: PC 키 에뮬레이션 (Print, Scroll_Lock, Pause, Num Lock)"
+
+#: ../rules/base.xml.in.h:38
+msgid "Apple Laptop"
+msgstr "애플 노트북"
+
+#: ../rules/base.xml.in.h:39
+msgid "Arabic"
+msgstr "아랍어"
+
+# 버크월터 - 아랍어 음역 방법
+# http://en.wikipedia.org/wiki/Buckwalter_transliteration
+#: ../rules/base.xml.in.h:40
+msgid "Arabic (Buckwalter)"
+msgstr "아랍어 (버크월터)"
+
+#: ../rules/base.xml.in.h:41
+msgid "Arabic (Morocco)"
+msgstr "아랍어 (모로코)"
+
+#: ../rules/base.xml.in.h:42
+msgid "Arabic (Pakistan)"
+msgstr "아랍어 (파키스탄)"
+
+#: ../rules/base.xml.in.h:43
+msgid "Arabic (Syria)"
+msgstr "아랍어 (시리아)"
+
+#: ../rules/base.xml.in.h:44
+msgid "Arabic (azerty)"
+msgstr "아랍어 (AZERTY)"
+
+#: ../rules/base.xml.in.h:45
+msgid "Arabic (azerty/digits)"
+msgstr "아랍어 (AZERTY/숫자)"
+
+#: ../rules/base.xml.in.h:46
+msgid "Arabic (digits)"
+msgstr "아랍어 (숫자)"
+
+#: ../rules/base.xml.in.h:47
+msgid "Arabic (qwerty)"
+msgstr "아랍어 (QWERTY)"
+
+#: ../rules/base.xml.in.h:48
+msgid "Arabic (qwerty/digits)"
+msgstr "아랍어 (QWERTY/숫자)"
+
+#: ../rules/base.xml.in.h:49
+msgid "Armenian"
+msgstr "아르메니아"
+
+#: ../rules/base.xml.in.h:50
+msgid "Armenian (alternative eastern)"
+msgstr "아르메니아 (다른 동부)"
+
+#: ../rules/base.xml.in.h:51
+msgid "Armenian (alternative phonetic)"
+msgstr "아르메니아 (다른 음성 기호)"
+
+#: ../rules/base.xml.in.h:52
+msgid "Armenian (eastern)"
+msgstr "아르메니아 (동부)"
+
+#: ../rules/base.xml.in.h:53
+msgid "Armenian (phonetic)"
+msgstr "아르메니아 (음성 기호)"
+
+#: ../rules/base.xml.in.h:54
+msgid "Armenian (western)"
+msgstr "아르메니아 (서부)"
+
+#: ../rules/base.xml.in.h:55
+msgid "Asus Laptop"
+msgstr "에이서스 노트북"
+
+#: ../rules/base.xml.in.h:56
+msgid "At bottom left"
+msgstr "맨 아래 왼쪽에"
+
+#: ../rules/base.xml.in.h:57
+msgid "At left of 'A'"
+msgstr "'A' 왼쪽에"
+
+#: ../rules/base.xml.in.h:58
+msgid "Avatime"
+msgstr "Avatime"
+
+#: ../rules/base.xml.in.h:59
+msgid "Azerbaijan (Cyrillic)"
+msgstr "아제르바이잔어 (키릴 문자)"
+
+#: ../rules/base.xml.in.h:60
+msgid "Azerbaijani"
+msgstr "아제르바이잔어"
+
+#: ../rules/base.xml.in.h:61
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 무선 인터넷 키보드"
+
+#: ../rules/base.xml.in.h:62
+msgid "BTC 5090"
+msgstr "BTC 5090"
+
+#: ../rules/base.xml.in.h:63
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF 멀티미디어"
+
+#: ../rules/base.xml.in.h:64
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
+
+#: ../rules/base.xml.in.h:65
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
+
+#: ../rules/base.xml.in.h:66
+msgid "BTC 9000"
+msgstr "BTC 9000"
+
+#: ../rules/base.xml.in.h:67
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
+
+#: ../rules/base.xml.in.h:68
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
+
+#: ../rules/base.xml.in.h:69
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
+
+#: ../rules/base.xml.in.h:70
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U 미니 무선 인터넷/게임 키보드"
+
+#: ../rules/base.xml.in.h:71
+msgid "Backslash"
+msgstr "백슬래시"
+
+#: ../rules/base.xml.in.h:72
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "백슬래시로 3번째 단계 선택, 다른 3번째 단계 선택 키와 같이 누르면 고정"
+
+#: ../rules/base.xml.in.h:73
+msgid "Bambara"
+msgstr "밤바라어"
+
+#: ../rules/base.xml.in.h:74
+msgid "Belarusian"
+msgstr "벨라루스어"
+
+#: ../rules/base.xml.in.h:75
+msgid "Belarusian (Latin)"
+msgstr "벨라루스어 (라틴)"
+
+#: ../rules/base.xml.in.h:76
+msgid "Belarusian (legacy)"
+msgstr "벨라루시아어 (구형)"
+
+#: ../rules/base.xml.in.h:77
+msgid "Belgian"
+msgstr "벨기에어"
+
+#: ../rules/base.xml.in.h:78
+msgid "Belgian (ISO alternate)"
+msgstr "벨기에어 (ISO 다른 버전)"
+
+#: ../rules/base.xml.in.h:79
+msgid "Belgian (Sun dead keys)"
+msgstr "벨기에어 (썬 데드키)"
+
+#: ../rules/base.xml.in.h:80
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "벨기에어 (Wang model 724 AZERTY)"
+
+#: ../rules/base.xml.in.h:81
+msgid "Belgian (alternative)"
+msgstr "벨기에어 (다른 버전)"
+
+#: ../rules/base.xml.in.h:82
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "벨기에어 (다른 버전, 썬 데드키)"
+
+#: ../rules/base.xml.in.h:83
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "벨기에어 (다른 버전, latin-9 전용)"
+
+#: ../rules/base.xml.in.h:84
+msgid "Belgian (eliminate dead keys)"
+msgstr "벨기에어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:85
+msgid "BenQ X-Touch"
+msgstr "벤큐 X-Touch"
+
+#: ../rules/base.xml.in.h:86
+msgid "BenQ X-Touch 730"
+msgstr "벤큐 X-Touch 730"
+
+#: ../rules/base.xml.in.h:87
+msgid "BenQ X-Touch 800"
+msgstr "벤큐 X-Touch 800"
+
+#: ../rules/base.xml.in.h:88
+msgid "Bengali"
+msgstr "벵골어"
+
+#: ../rules/base.xml.in.h:89
+msgid "Bengali (Probhat)"
+msgstr "벵골어 (프롭햇)"
+
+# 베르베르어파
+#: ../rules/base.xml.in.h:90
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "베르베르어 (모로코, 티피나그 다른 음성 기호 버전)"
+
+# 베르베르어파
+#: ../rules/base.xml.in.h:91
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "베르베르어 (모로코, 티피나그 다른 버전)"
+
+# 베르베르어파
+#: ../rules/base.xml.in.h:92
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "베르베르어 (모로코, 티피나그 확장 음성 기호)"
+
+# 베르베르어파
+#: ../rules/base.xml.in.h:93
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "베르베르어 (모로코, 티피나그 확장)"
+
+# 베르베르어파
+#: ../rules/base.xml.in.h:94
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "베르베르어 (모로코, 티피나그 음성 기호)"
+
+# 베르베르어파
+#: ../rules/base.xml.in.h:95
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "베르베르어 (모로코, 티피나그)"
+
+#: ../rules/base.xml.in.h:96
+msgid "Bosnian"
+msgstr "보스니아어"
+
+#: ../rules/base.xml.in.h:97
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "보스니아어 (미국식 키보드, 보스니아 이중 문자 포함)"
+
+#: ../rules/base.xml.in.h:98
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "보스니아어 (미국식 키보드, 보스니아 문자 포함)"
+
+#: ../rules/base.xml.in.h:99
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "보스니아어 (보스니아 이중 문자 사용)"
+
+#: ../rules/base.xml.in.h:100
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "보스니아어 (따옴표에 각괄호 사용)"
+
+#: ../rules/base.xml.in.h:101
+msgid "Both Alt keys together"
+msgstr "Alt 키 2개 동시 누름"
+
+#: ../rules/base.xml.in.h:102
+msgid "Both Ctrl keys together"
+msgstr "Ctrl 키 2개 동시 누름"
+
+#: ../rules/base.xml.in.h:103
+msgid "Both Shift keys together"
+msgstr "Shift 키 2개 동시 누름"
+
+#: ../rules/base.xml.in.h:104
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Shift 키 두 개로 Caps Lock 켜기, Shift 키 한 개로 해제"
+
+#: ../rules/base.xml.in.h:105
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Shift 키 두 개로 Caps Lock 토글"
+
+#: ../rules/base.xml.in.h:106
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Shift 키 두 개로 ShiftLock 토글"
+
+#: ../rules/base.xml.in.h:107
+msgid "Braille"
+msgstr "점자"
+
+#: ../rules/base.xml.in.h:108
+msgid "Braille (left hand)"
+msgstr "점자 (왼손잡이)"
+
+#: ../rules/base.xml.in.h:109
+msgid "Braille (right hand)"
+msgstr "점자 (오른손잡이)"
+
+#: ../rules/base.xml.in.h:110
+msgid "Brother Internet Keyboard"
+msgstr "브라더 인터넷 키보드"
+
+#: ../rules/base.xml.in.h:111
+msgid "Bulgarian"
+msgstr "불가리아어"
+
+#: ../rules/base.xml.in.h:112
+msgid "Bulgarian (new phonetic)"
+msgstr "불가리아어 (새 음성 기호)"
+
+#: ../rules/base.xml.in.h:113
+msgid "Bulgarian (traditional phonetic)"
+msgstr "불가리아어 (구식 음성 기호)"
+
+#: ../rules/base.xml.in.h:114
+msgid "Burmese"
+msgstr "미얀마어"
+
+#: ../rules/base.xml.in.h:115
+msgid "Canadian Multilingual"
+msgstr "캐나다 여러 언어 지원"
+
+#: ../rules/base.xml.in.h:116
+msgid "Canadian Multilingual (first part)"
+msgstr "캐나다 여러 언어 지원 (첫번째)"
+
+#: ../rules/base.xml.in.h:117
+msgid "Canadian Multilingual (second part)"
+msgstr "캐나다 여러 언어 지원 (두번째)"
+
+#: ../rules/base.xml.in.h:118
+msgid "Caps Lock"
+msgstr "Caps Lock"
+
+#: ../rules/base.xml.in.h:119
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Caps Lock (3번째 단계 선택, 다른 3번째 단계 선택 키와 같이 누르면 고정)"
+
+#: ../rules/base.xml.in.h:120
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Caps Lock (1번으로), Shift+Caps Lock (마지막으로)"
+
+#: ../rules/base.xml.in.h:121
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Caps Lock (누르고 있는 동안), Alt+Caps Lock을 누르면 원래 Caps Lock 기능"
+
+#: ../rules/base.xml.in.h:122
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock이 Shift처럼 동작하고 상태 고정, Shift가 Caps Lock을 \"일시 중지\""
+
+#: ../rules/base.xml.in.h:123
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock이 Shift처럼 동작하고 상태 고정, Shift가 Caps Lock 상태에 영향 없음"
+
+#: ../rules/base.xml.in.h:124
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock 사용 안 함"
+
+#: ../rules/base.xml.in.h:125
+msgid "Caps Lock key behavior"
+msgstr "Caps Lock 키 동작"
+
+#: ../rules/base.xml.in.h:126
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Caps Lock이 Shift 상태를 토글, 즉 모든 키가 영향을 받음"
+
+#: ../rules/base.xml.in.h:127
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Caps Lock이 일반적인 알파벳 대문자 상태를 토글"
+
+#: ../rules/base.xml.in.h:128
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock이 내부 대문자 기능 사용. Shift가 Caps Lock을 \"일시 중지\""
+
+#: ../rules/base.xml.in.h:129
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock이 내부 대문자 기능 사용. Shift가 Caps Lock 상태에 영향 없음"
+
+#: ../rules/base.xml.in.h:130
+msgid "Catalan"
+msgstr "카탈루냐어"
+
+# 체로키어 - 아메리카 원주민 부족
+#: ../rules/base.xml.in.h:131
+msgid "Cherokee"
+msgstr "체로키어"
+
+#: ../rules/base.xml.in.h:132
+msgid "Cherry B.UNLIMITED"
+msgstr "체리 B.UNLIMITED"
+
+#: ../rules/base.xml.in.h:133
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "체리 Blue Line CyBo@rd"
+
+#: ../rules/base.xml.in.h:134
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "체리 Blue Line CyBo@rd (다른 옵션)"
+
+#: ../rules/base.xml.in.h:135
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "체리 CyBo@rd USB-Hub"
+
+#: ../rules/base.xml.in.h:136
+msgid "Cherry CyMotion Expert"
+msgstr "체리 CyMotion Expert"
+
+#: ../rules/base.xml.in.h:137
+msgid "Cherry CyMotion Master Linux"
+msgstr "체리 CyMotion Master Linux"
+
+#: ../rules/base.xml.in.h:138
+msgid "Cherry CyMotion Master XPress"
+msgstr "체리 CyMotion Master XPress"
+
+#: ../rules/base.xml.in.h:139
+msgid "Chicony Internet Keyboard"
+msgstr "치코니 인터넷 키보드"
+
+#: ../rules/base.xml.in.h:140
+msgid "Chicony KB-9885"
+msgstr "치코니 KB-9885"
+
+#: ../rules/base.xml.in.h:141
+msgid "Chicony KU-0108"
+msgstr "치코니 KU-0108"
+
+#: ../rules/base.xml.in.h:142
+msgid "Chicony KU-0420"
+msgstr "치코니 KU-0420"
+
+#: ../rules/base.xml.in.h:143
+msgid "Chinese"
+msgstr "중국어"
+
+#: ../rules/base.xml.in.h:144
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "중국어 (티베트, ASCII 숫자 포함)"
+
+#: ../rules/base.xml.in.h:145
+msgid "Chinese (Tibetan)"
+msgstr "중국어 (티베트)"
+
+#: ../rules/base.xml.in.h:146
+msgid "Chinese (Uyghur)"
+msgstr "중국어 (위구르)"
+
+#: ../rules/base.xml.in.h:147
+msgid "Classmate PC"
+msgstr "클래스메이트 PC"
+
+#: ../rules/base.xml.in.h:148
+msgid "Compaq Easy Access Keyboard"
+msgstr "컴팩 Easy Access 키보드"
+
+#: ../rules/base.xml.in.h:149
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "컴팩 인터넷 키보드 (13키)"
+
+#: ../rules/base.xml.in.h:150
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "컴팩 인터넷 키보드 (18키)"
+
+#: ../rules/base.xml.in.h:151
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "컴팩 인터넷 키보드 (7키)"
+
+#: ../rules/base.xml.in.h:152
+msgid "Compaq iPaq Keyboard"
+msgstr "컴팩 iPaq 키보드"
+
+#: ../rules/base.xml.in.h:153
+msgid "Compose key position"
+msgstr "조합 키 위치"
+
+#: ../rules/base.xml.in.h:154
+msgid "Control + Alt + Backspace"
+msgstr "Ctrl + Alt + 백스페이스"
+
+#: ../rules/base.xml.in.h:155
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Ctrl 키를 윈도우 키로 매핑, Alt 키를 윈도우 키로 매핑"
+
+#: ../rules/base.xml.in.h:156
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Ctrl 키를 윈도우 키로 매핑 (그리고 일반 Ctrl 키로도 동작)"
+
+#: ../rules/base.xml.in.h:157
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
+
+#: ../rules/base.xml.in.h:158
+msgid "Croatian"
+msgstr "크로아티아어"
+
+#: ../rules/base.xml.in.h:159
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "크로아티아어 (미국식 키보드, 크로아티아 이중 문자 포함)"
+
+#: ../rules/base.xml.in.h:160
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "크로아티아어 (미국식 키보드, 크로아티아 문자 포함)"
+
+#: ../rules/base.xml.in.h:161
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "크로아티아어 (크로아티아 이중 문자 사용)"
+
+#: ../rules/base.xml.in.h:162
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "크로아티아어 (따옴표에 각괄호 사용)"
+
+#: ../rules/base.xml.in.h:163
+msgid "Ctrl key position"
+msgstr "Ctrl 키 위치"
+
+#: ../rules/base.xml.in.h:164
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
+
+#: ../rules/base.xml.in.h:165
+msgid "Czech"
+msgstr "체코어"
+
+#: ../rules/base.xml.in.h:166
+msgid "Czech (UCW layout accented letters only)"
+msgstr "체코어 (UCW 배치, 액센트 문자만)"
+
+#: ../rules/base.xml.in.h:167
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "체코어 (US 드보락, CZ UCW 지원)"
+
+#: ../rules/base.xml.in.h:168
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "체코어 (&lt;\\|&gt; 키 포함)"
+
+#: ../rules/base.xml.in.h:169
+msgid "Czech (qwerty)"
+msgstr "체코어 (QWERTY)"
+
+#: ../rules/base.xml.in.h:170
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "체코어 (QWERTY, 백슬래시 확장)"
+
+#: ../rules/base.xml.in.h:171
+msgid "DTK2000"
+msgstr "DTK2000"
+
+#: ../rules/base.xml.in.h:172
+msgid "Danish"
+msgstr "덴마크어"
+
+#: ../rules/base.xml.in.h:173
+msgid "Danish (Dvorak)"
+msgstr "덴마크어 (드보락)"
+
+#: ../rules/base.xml.in.h:174
+msgid "Danish (Mac)"
+msgstr "덴마크어 (맥)"
+
+#: ../rules/base.xml.in.h:175
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "덴마크어 (맥, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:176
+msgid "Danish (eliminate dead keys)"
+msgstr "덴마크어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:177
+msgid "Default numeric keypad keys"
+msgstr "기본 숫자 키패드 키"
+
+#: ../rules/base.xml.in.h:178
+msgid "Dell"
+msgstr "델"
+
+#: ../rules/base.xml.in.h:179
+msgid "Dell 101-key PC"
+msgstr "델 101키 PC"
+
+#: ../rules/base.xml.in.h:180
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "델 노트북 Inspiron 6xxx/8xxx"
+
+#: ../rules/base.xml.in.h:181
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "델 노트북 Precision M series"
+
+#: ../rules/base.xml.in.h:182
+msgid "Dell Latitude series laptop"
+msgstr "델 Latitude 시리즈 노트북"
+
+#: ../rules/base.xml.in.h:183
+msgid "Dell Precision M65"
+msgstr "델 Precision M65"
+
+#: ../rules/base.xml.in.h:184
+msgid "Dell SK-8125"
+msgstr "델 SK-8125"
+
+#: ../rules/base.xml.in.h:185
+msgid "Dell SK-8135"
+msgstr "델 SK-8135"
+
+#: ../rules/base.xml.in.h:186
+msgid "Dell USB Multimedia Keyboard"
+msgstr "델 USB 멀티미디어 키보드"
+
+#: ../rules/base.xml.in.h:187
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa Wireless Desktop 키보드"
+
+#: ../rules/base.xml.in.h:188
+msgid "Dhivehi"
+msgstr "Dhivehi"
+
+#: ../rules/base.xml.in.h:189
+msgid "Diamond 9801 / 9802 series"
+msgstr "다이아몬드 9801 / 9802 시리즈"
+
+#: ../rules/base.xml.in.h:190
+msgid "Dutch"
+msgstr "네덜란드어"
+
+#: ../rules/base.xml.in.h:191
+msgid "Dutch (Mac)"
+msgstr "네덜란드어 (맥)"
+
+#: ../rules/base.xml.in.h:192
+msgid "Dutch (Sun dead keys)"
+msgstr "네덜란드어 (썬 데드키)"
+
+#: ../rules/base.xml.in.h:193
+msgid "Dutch (standard)"
+msgstr "네덜란드어 (표준)"
+
+#: ../rules/base.xml.in.h:194
+msgid "Dzongkha"
+msgstr "종카어"
+
+#: ../rules/base.xml.in.h:195
+msgid "Enable extra typographic characters"
+msgstr "추가 타이포그라피 문자 사용"
+
+#: ../rules/base.xml.in.h:196
+msgid "English (Canada)"
+msgstr "영어 (캐나다)"
+
+# Colemak: 상표명
+#: ../rules/base.xml.in.h:197
+msgid "English (Colemak)"
+msgstr "영어 (Colemak)"
+
+#: ../rules/base.xml.in.h:198
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "영어 (드보락 다른 국제 버전, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:199
+msgid "English (Dvorak international with dead keys)"
+msgstr "영어 (드보락 국제 버전, 데드키 포함)"
+
+#: ../rules/base.xml.in.h:200
+msgid "English (Dvorak)"
+msgstr "영어 (드보락)"
+
+#: ../rules/base.xml.in.h:201
+msgid "English (Ghana)"
+msgstr "영어 (가나)"
+
+#: ../rules/base.xml.in.h:202
+msgid "English (Ghana, GILLBT)"
+msgstr "영어 (가나, GILLBT)"
+
+#: ../rules/base.xml.in.h:203
+msgid "English (Ghana, multilingual)"
+msgstr "영어 (가나, 다국어)"
+
+#: ../rules/base.xml.in.h:204
+msgid "English (India, with RupeeSign)"
+msgstr "영어 (인도, 루피 기호 포함)"
+
+#: ../rules/base.xml.in.h:205
+msgid "English (Macintosh)"
+msgstr "영어 (매킨토시)"
+
+#: ../rules/base.xml.in.h:206
+msgid "English (Mali, USA Mac)"
+msgstr "영어 (말리, 미국 맥)"
+
+#: ../rules/base.xml.in.h:207
+msgid "English (Mali, USA international)"
+msgstr "영어 (말리, 미국 국제 버전)"
+
+#: ../rules/base.xml.in.h:208
+msgid "English (Nigeria)"
+msgstr "영어 (나이지리아)"
+
+#: ../rules/base.xml.in.h:209
+msgid "English (South Africa)"
+msgstr "영어 (남아공)"
+
+#: ../rules/base.xml.in.h:210
+msgid "English (UK)"
+msgstr "영어 (영국)"
+
+#: ../rules/base.xml.in.h:211
+msgid "English (UK, Colemak)"
+msgstr "영어 (영국, Colemak)"
+
+#: ../rules/base.xml.in.h:212
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "영어 (영국, 드보락 영국 문장 부호)"
+
+#: ../rules/base.xml.in.h:213
+msgid "English (UK, Dvorak)"
+msgstr "영어 (영국, 드보락)"
+
+#: ../rules/base.xml.in.h:214
+msgid "English (UK, Mac international)"
+msgstr "영어 (영국, 맥 국제 버전)"
+
+#: ../rules/base.xml.in.h:215
+msgid "English (UK, Mac)"
+msgstr "영어 (영국, 맥)"
+
+#: ../rules/base.xml.in.h:216
+msgid "English (UK, extended, WinKeys)"
+msgstr "영어 (영국, 확장, 윈도우 키)"
+
+#: ../rules/base.xml.in.h:217
+msgid "English (UK, international with dead keys)"
+msgstr "영어 (영국, 국제 버전, 데드키 포함)"
+
+#: ../rules/base.xml.in.h:218
+msgid "English (US)"
+msgstr "영어 (미국)"
+
+#: ../rules/base.xml.in.h:219
+msgid "English (US, alternative international)"
+msgstr "영어 (미국, 다른 국제 버전)"
+
+#: ../rules/base.xml.in.h:220
+msgid "English (US, international with dead keys)"
+msgstr "영어 (미국, 국제 버전, 데드키 포함)"
+
+#: ../rules/base.xml.in.h:221
+msgid "English (US, with euro on 5)"
+msgstr "영어 (미국, 5 키에 유로 기호)"
+
+#: ../rules/base.xml.in.h:222
+msgid "English (classic Dvorak)"
+msgstr "영어 (클래식 드보락)"
+
+#: ../rules/base.xml.in.h:223
+msgid "English (international AltGr dead keys)"
+msgstr "영어 (국제 버전, AltGr 데드키)"
+
+#: ../rules/base.xml.in.h:224
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "영어 (곱하기/나누기 키에 키보드 배치 토글)"
+
+#: ../rules/base.xml.in.h:225
+msgid "English (left handed Dvorak)"
+msgstr "영어 (왼손잡이 드보락)"
+
+#: ../rules/base.xml.in.h:226
+msgid "English (programmer Dvorak)"
+msgstr "영어 (프로그래머 드보락)"
+
+#: ../rules/base.xml.in.h:227
+msgid "English (right handed Dvorak)"
+msgstr "영어 (오른손잡이 드보락)"
+
+#: ../rules/base.xml.in.h:228
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
+
+#: ../rules/base.xml.in.h:229
+msgid "Enter on keypad"
+msgstr "키패드에 Enter"
+
+#: ../rules/base.xml.in.h:230
+msgid "Esperanto"
+msgstr "에스페란토"
+
+#: ../rules/base.xml.in.h:231
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "에스페란토 (세미콜론과 따옴표 없애기, 없어진 기능)"
+
+#: ../rules/base.xml.in.h:232
+msgid "Estonian"
+msgstr "에스토니아어"
+
+#: ../rules/base.xml.in.h:233
+msgid "Estonian (Dvorak)"
+msgstr "에스토니아어 (드보락)"
+
+#: ../rules/base.xml.in.h:234
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "에스토니아어 (미국식 키보드, 에스토니아 문자 포함)"
+
+#: ../rules/base.xml.in.h:235
+msgid "Estonian (eliminate dead keys)"
+msgstr "에스토니아어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:236
+msgid "Euro on 2"
+msgstr "유로를 2 키에"
+
+#: ../rules/base.xml.in.h:237
+msgid "Euro on 4"
+msgstr "유로를 4 키에"
+
+#: ../rules/base.xml.in.h:238
+msgid "Euro on 5"
+msgstr "유로를 5 키에"
+
+#: ../rules/base.xml.in.h:239
+msgid "Euro on E"
+msgstr "유로를 E 키에"
+
+#: ../rules/base.xml.in.h:240
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
+
+#: ../rules/base.xml.in.h:241
+msgid "Ewe"
+msgstr "Ewe"
+
+#: ../rules/base.xml.in.h:242
+msgid "FL90"
+msgstr "FL90"
+
+#: ../rules/base.xml.in.h:243
+msgid "Faroese"
+msgstr "페로어"
+
+#: ../rules/base.xml.in.h:244
+msgid "Faroese (eliminate dead keys)"
+msgstr "페로어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:245
+msgid "Filipino"
+msgstr "필리핀어"
+
+#: ../rules/base.xml.in.h:246
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "필리핀어 (케이프웰 드보락 베이베이인)"
+
+#: ../rules/base.xml.in.h:247
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "필리핀어 (케이프웰 드보락 라틴)"
+
+#: ../rules/base.xml.in.h:248
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "필리핀어 (케이프웰 QWERF 2006 베이베이인)"
+
+#: ../rules/base.xml.in.h:249
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "필리핀어 (케이프웰 QWERF 2006 라틴)"
+
+# Colemak: 상표명
+#: ../rules/base.xml.in.h:250
+msgid "Filipino (Colemak Baybayin)"
+msgstr "필리핀어 (Colemak 베이베이인)"
+
+# Colemak: 상표명
+#: ../rules/base.xml.in.h:251
+msgid "Filipino (Colemak Latin)"
+msgstr "필리핀어 (Colemak 라틴)"
+
+#: ../rules/base.xml.in.h:252
+msgid "Filipino (Dvorak Latin)"
+msgstr "필리핀어 (드보락 라틴)"
+
+#: ../rules/base.xml.in.h:253
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "필리핀어 (QWERTY 베이베이인)"
+
+#: ../rules/base.xml.in.h:254
+msgid "Finnish"
+msgstr "핀란드어"
+
+#: ../rules/base.xml.in.h:255
+msgid "Finnish (Mac)"
+msgstr "핀란드어 (맥)"
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "핀란드어 (클래식)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "핀란드어 (클래식, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr "핀란드어 (북 사오미)"
+
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
+#: ../rules/base.xml.in.h:261
+msgid "Four-level key with abstract separators"
+msgstr "네번째 단계, 가상 구분 문자 사용"
+
+#: ../rules/base.xml.in.h:262
+msgid "Four-level key with comma"
+msgstr "네번째 단계, 쉼표 사용"
+
+#: ../rules/base.xml.in.h:263
+msgid "Four-level key with dot"
+msgstr "네번째 단계, 점 사용"
+
+#: ../rules/base.xml.in.h:264
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr "네번째 단계, 점 사용, latin-9 제한 사항"
+
+# momayyez: http://en.wikipedia.org/wiki/Momayyez
+#: ../rules/base.xml.in.h:265
+msgid "Four-level key with momayyez"
+msgstr "네번째 단계, 아랍식 쉼표 (momayyez) 사용"
+
+#: ../rules/base.xml.in.h:266
+msgid "French"
+msgstr "프랑스어"
+
+#: ../rules/base.xml.in.h:267
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "프랑스어 (Bepo, ergonomic, 드보락 방식)"
+
+#: ../rules/base.xml.in.h:268
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "프랑스어 (Bepo, ergonomic, 드보락 방식, latin-9 전용)"
+
+# 브르타뉴어 - 프랑스 지방 언어
+#: ../rules/base.xml.in.h:269
+msgid "French (Breton)"
+msgstr "프랑스어 (브르타뉴어)"
+
+#: ../rules/base.xml.in.h:270
+msgid "French (Canada, Dvorak)"
+msgstr "프랑스어 (캐나다, 드보락)"
+
+#: ../rules/base.xml.in.h:271
+msgid "French (Canada, legacy)"
+msgstr "프랑스어 (캐나다, 구형)"
+
+#: ../rules/base.xml.in.h:272
+msgid "French (Democratic Republic of the Congo)"
+msgstr "프랑스어 (콩고 민주 공화국)"
+
+#: ../rules/base.xml.in.h:273
+msgid "French (Dvorak)"
+msgstr "프랑스어 (드보락)"
+
+#: ../rules/base.xml.in.h:274
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "프랑스어 (조지아 AZERTY Tskapo)"
+
+#: ../rules/base.xml.in.h:275
+msgid "French (Guinea)"
+msgstr "프랑스어 (기니)"
+
+#: ../rules/base.xml.in.h:276
+msgid "French (Mac)"
+msgstr "프랑스어 (맥)"
+
+#: ../rules/base.xml.in.h:277
+msgid "French (Mali, alternative)"
+msgstr "프랑스어 (말리, 다른 버전)"
+
+#: ../rules/base.xml.in.h:278
+msgid "French (Morocco)"
+msgstr "프랑스어 (모로코)"
+
+#: ../rules/base.xml.in.h:279
+msgid "French (Occitan)"
+msgstr "프랑스어 (오크어)"
+
+#: ../rules/base.xml.in.h:280
+msgid "French (Sun dead keys)"
+msgstr "프랑스어 (썬 데드키)"
+
+#: ../rules/base.xml.in.h:281
+msgid "French (Switzerland)"
+msgstr "프랑스어 (스위스)"
+
+#: ../rules/base.xml.in.h:282
+msgid "French (Switzerland, Mac)"
+msgstr "프랑스어 (스위스, 맥)"
+
+#: ../rules/base.xml.in.h:283
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "프랑스어 (스위스, 썬 데드키)"
+
+#: ../rules/base.xml.in.h:284
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "프랑스어 (스위스, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:285
+msgid "French (alternative)"
+msgstr "프랑스어 (다른 버전)"
+
+#: ../rules/base.xml.in.h:286
+msgid "French (alternative, Sun dead keys)"
+msgstr "프랑스어 (다른 버전, 썬 데드키)"
+
+#: ../rules/base.xml.in.h:287
+msgid "French (alternative, eliminate dead keys)"
+msgstr "프랑스어 (다른 버전, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:288
+msgid "French (alternative, latin-9 only)"
+msgstr "프랑스어 (다른 버전, latin-9 전용)"
+
+#: ../rules/base.xml.in.h:289
+msgid "French (eliminate dead keys)"
+msgstr "프랑스어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:290
+msgid "French (legacy alternative)"
+msgstr "프랑스어 (구형 다른 버전)"
+
+#: ../rules/base.xml.in.h:291
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "프랑스어 (구형, 다른 버전, 썬 데드키)"
+
+#: ../rules/base.xml.in.h:292
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "프랑스어 (구형, 다른 버전, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:293
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "후지스-지멘스 컴퓨터 AMILO 노트북"
+
+#: ../rules/base.xml.in.h:294
+msgid "Fula"
+msgstr "풀라"
+
+#: ../rules/base.xml.in.h:295
+msgid "GBr"
+msgstr "영국"
+
+# 가나의 언어
+#: ../rules/base.xml.in.h:296
+msgid "Ga"
+msgstr "가어"
+
+#: ../rules/base.xml.in.h:297
+msgid "Generic 101-key PC"
+msgstr "일반 101키 PC"
+
+#: ../rules/base.xml.in.h:298
+msgid "Generic 102-key (Intl) PC"
+msgstr "일반 102키 (국제 버전) PC"
+
+#: ../rules/base.xml.in.h:299
+msgid "Generic 104-key PC"
+msgstr "일반 104키 PC"
+
+#: ../rules/base.xml.in.h:300
+msgid "Generic 105-key (Intl) PC"
+msgstr "일반 105키 (국제 버전) PC"
+
+#: ../rules/base.xml.in.h:301
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
+
+#: ../rules/base.xml.in.h:302
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+
+#: ../rules/base.xml.in.h:303
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
+
+#: ../rules/base.xml.in.h:304
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
+
+#: ../rules/base.xml.in.h:305
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
+
+#: ../rules/base.xml.in.h:306
+msgid "Georgian"
+msgstr "조지아어"
+
+#: ../rules/base.xml.in.h:307
+msgid "Georgian (MESS)"
+msgstr "조지아어 (MESS)"
+
+# 오세트 - 러시아 및 조지아 지역 오세트족
+#: ../rules/base.xml.in.h:308
+msgid "Georgian (Ossetian)"
+msgstr "조지아어 (오세트어)"
+
+#: ../rules/base.xml.in.h:309
+msgid "Georgian (ergonomic)"
+msgstr "조지아어 (어고노믹)"
+
+#: ../rules/base.xml.in.h:310
+msgid "German"
+msgstr "독일어"
+
+#: ../rules/base.xml.in.h:311
+msgid "German (Austria)"
+msgstr "독일어 (오스트리아)"
+
+#: ../rules/base.xml.in.h:312
+msgid "German (Austria, Mac)"
+msgstr "독일어 (오스트리아, 맥)"
+
+#: ../rules/base.xml.in.h:313
+msgid "German (Austria, Sun dead keys)"
+msgstr "독일어 (오스트리아, 썬 데드키)"
+
+#: ../rules/base.xml.in.h:314
+msgid "German (Austria, eliminate dead keys)"
+msgstr "독일어 (오스트리아, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:315
+msgid "German (Dvorak)"
+msgstr "독일어 (드보락)"
+
+#: ../rules/base.xml.in.h:316
+msgid "German (Mac)"
+msgstr "독일어 (맥)"
+
+#: ../rules/base.xml.in.h:317
+msgid "German (Mac, eliminate dead keys)"
+msgstr "독일어 (맥, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:318
+msgid "German (Neo 2)"
+msgstr "독일어 (Neo 2)"
+
+#: ../rules/base.xml.in.h:319
+msgid "German (Romanian keyboard with German letters)"
+msgstr "독일어 (루마니아 키보드, 독일어 문자 포함)"
+
+#: ../rules/base.xml.in.h:320
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "독일어 (루마니아 키보드, 독일어 문자 포함, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:321
+msgid "German (Sun dead keys)"
+msgstr "독일어 (썬 데드키)"
+
+#: ../rules/base.xml.in.h:322
+msgid "German (Switzerland, Mac)"
+msgstr "독일어 (스위스, 맥)"
+
+#: ../rules/base.xml.in.h:323
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "독일어 (스위스, 썬 데드키)"
+
+#: ../rules/base.xml.in.h:324
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "독일어 (스위스, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:325
+msgid "German (dead acute)"
+msgstr "독일어 (어큐트 데드키)"
+
+#: ../rules/base.xml.in.h:326
+msgid "German (dead grave acute)"
+msgstr "독일어 (그레이브 어큐트 데드키)"
+
+#: ../rules/base.xml.in.h:327
+msgid "German (eliminate dead keys)"
+msgstr "독일어 (데드키 없음)"
+
+# http://ko.wikipedia.org/wiki/저지_소르브어
+#: ../rules/base.xml.in.h:328
+msgid "German (lower Sorbian qwertz)"
+msgstr "독일어 (저지 소르브어 QWERTZ)"
+
+# http://ko.wikipedia.org/wiki/저지_소르브어
+#: ../rules/base.xml.in.h:329
+msgid "German (lower Sorbian)"
+msgstr "독일어 (저지 소르브어)"
+
+#: ../rules/base.xml.in.h:330
+msgid "German (qwerty)"
+msgstr "독일어 (QWERTY)"
+
+#: ../rules/base.xml.in.h:331
+msgid "Greek"
+msgstr "그리스어"
+
+#: ../rules/base.xml.in.h:332
+msgid "Greek (eliminate dead keys)"
+msgstr "그리스어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:333
+msgid "Greek (extended)"
+msgstr "그리스어 (확장)"
+
+# 그리스어 발음 표기 http://en.wikipedia.org/wiki/Polytonic_orthography
+#: ../rules/base.xml.in.h:334
+msgid "Greek (polytonic)"
+msgstr "그리스어 (폴리토닉)"
+
+#: ../rules/base.xml.in.h:335
+msgid "Greek (simple)"
+msgstr "그리스어 (간단)"
+
+#: ../rules/base.xml.in.h:336
+msgid "Gujarati"
+msgstr "구자라트어"
+
+# 제조사 이름
+#: ../rules/base.xml.in.h:337
+msgid "Gyration"
+msgstr "Gyration"
+
+#: ../rules/base.xml.in.h:338
+msgid "HTC Dream"
+msgstr "HTC 드림"
+
+#: ../rules/base.xml.in.h:339
+msgid "Happy Hacking Keyboard"
+msgstr "해피해킹 키보드"
+
+#: ../rules/base.xml.in.h:340
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "해피해킹 키보드, 맥용"
+
+# 나이지리아 변종
+#: ../rules/base.xml.in.h:341
+msgid "Hausa"
+msgstr "하우사어"
+
+#: ../rules/base.xml.in.h:342
+msgid "Hebrew"
+msgstr "히브리어"
+
+#: ../rules/base.xml.in.h:343
+msgid "Hebrew (Phonetic)"
+msgstr "히브리어 (음성 표기)"
+
+#: ../rules/base.xml.in.h:344
+msgid "Hebrew (Tiro)"
+msgstr "히브리어 (Tiro)"
+
+#: ../rules/base.xml.in.h:345
+msgid "Hebrew (lyx)"
+msgstr "히브리어 (lyx)"
+
+#: ../rules/base.xml.in.h:346
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "휴렛팩커드 인터넷 키보드"
+
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "휴렛팩커드 Mini 110 Notebook"
+
+#: ../rules/base.xml.in.h:348
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "휴렛팩커드 Omnibook 500 FA"
+
+#: ../rules/base.xml.in.h:349
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "휴렛팩커드 Omnibook 5xx"
+
+#: ../rules/base.xml.in.h:350
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "휴렛팩커드 Omnibook 6000/6100"
+
+#: ../rules/base.xml.in.h:351
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "휴렛팩커드 Omnibook XE3 GC"
+
+#: ../rules/base.xml.in.h:352
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "휴렛팩커드 Omnibook XE3 GF"
+
+#: ../rules/base.xml.in.h:353
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "휴렛팩커드 Omnibook XT1000"
+
+#: ../rules/base.xml.in.h:354
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "휴렛팩커드 Pavilion ZT11xx"
+
+#: ../rules/base.xml.in.h:355
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "휴렛팩커드 Pavilion dv5"
+
+#: ../rules/base.xml.in.h:356
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "휴렛팩커드 SK-250x 멀티미디어 키보드"
+
+#: ../rules/base.xml.in.h:357
+msgid "Hewlett-Packard nx9020"
+msgstr "휴렛팩커드 nx9020"
+
+#: ../rules/base.xml.in.h:358
+msgid "Hexadecimal"
+msgstr "십육진법"
+
+# Bolnagri: x input method 이름, http://indlinux.org/wiki/index.php/BolNagri
+#: ../rules/base.xml.in.h:359
+msgid "Hindi (Bolnagri)"
+msgstr "힌두어 (Bolnagri)"
+
+#: ../rules/base.xml.in.h:360
+msgid "Hindi (Wx)"
+msgstr "힌두어 (Wx)"
+
+#: ../rules/base.xml.in.h:361
+msgid "Honeywell Euroboard"
+msgstr "하니웰 Euroboard"
+
+#: ../rules/base.xml.in.h:362
+msgid "Htc Dream phone"
+msgstr "HTC 드림 휴대전화"
+
+#: ../rules/base.xml.in.h:363
+msgid "Hungarian"
+msgstr "헝가리어"
+
+#: ../rules/base.xml.in.h:364
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "헝가리어 (101/QWERTY/쉼표/데드키)"
+
+#: ../rules/base.xml.in.h:365
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "헝가리어 (101/QWERTY/쉼표/데드키 없음)"
+
+#: ../rules/base.xml.in.h:366
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "헝가리어 (101/QWERTY/점/데드키)"
+
+#: ../rules/base.xml.in.h:367
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "헝가리어 (101/QWERTY/점/데드키 없음)"
+
+#: ../rules/base.xml.in.h:368
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "헝가리어 (101/QWERTZ/쉼표/데드키)"
+
+#: ../rules/base.xml.in.h:369
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "헝가리어 (101/QWERTZ/쉼표/데드키 없음0"
+
+#: ../rules/base.xml.in.h:370
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "헝가리어 (101/QWERTZ/점/데드키)"
+
+#: ../rules/base.xml.in.h:371
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "헝가리어 (101/QWERTZ/점/데드키 없음)"
+
+#: ../rules/base.xml.in.h:372
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "헝가리어 (102/QWERTY/쉼표/데드키)"
+
+#: ../rules/base.xml.in.h:373
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "헝가리어 (102/QWERTY/쉼표/데드키 없음)"
+
+#: ../rules/base.xml.in.h:374
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "헝가리어 (102/QWERTY/점/데드키)"
+
+#: ../rules/base.xml.in.h:375
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "헝가리어 (102/QWERTY/점/데드키 없음)"
+
+#: ../rules/base.xml.in.h:376
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "헝가리어 (102/QWERTZ/쉼표/데드키)"
+
+#: ../rules/base.xml.in.h:377
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "헝가리어 (102/QWERTZ/쉼표/데드키 없음)"
+
+#: ../rules/base.xml.in.h:378
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "헝가리어 (102/QWERTZ/점/데드키)"
+
+#: ../rules/base.xml.in.h:379
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "헝가리어 (102/QWERTZ/점/데드키 없음)"
+
+#: ../rules/base.xml.in.h:380
+msgid "Hungarian (eliminate dead keys)"
+msgstr "헝가리어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:381
+msgid "Hungarian (qwerty)"
+msgstr "헝가리어 (QWERTY)"
+
+#: ../rules/base.xml.in.h:382
+msgid "Hungarian (standard)"
+msgstr "헝가리어 (표준)"
+
+#: ../rules/base.xml.in.h:383
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper 키를 윈도우 키로 매핑"
+
+#: ../rules/base.xml.in.h:384
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
+
+#: ../rules/base.xml.in.h:385
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
+
+#: ../rules/base.xml.in.h:386
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
+
+#: ../rules/base.xml.in.h:387
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+
+#: ../rules/base.xml.in.h:388
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
+
+#: ../rules/base.xml.in.h:389
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+
+#: ../rules/base.xml.in.h:390
+msgid "Icelandic"
+msgstr "아이슬란드어"
+
+#: ../rules/base.xml.in.h:391
+msgid "Icelandic (Dvorak)"
+msgstr "아이슬란드어 (드보락)"
+
+#: ../rules/base.xml.in.h:392
+msgid "Icelandic (Mac)"
+msgstr "아이슬란드어 (맥)"
+
+#: ../rules/base.xml.in.h:393
+msgid "Icelandic (Sun dead keys)"
+msgstr "아이슬란드어 (썬 데드키)"
+
+#: ../rules/base.xml.in.h:394
+msgid "Icelandic (eliminate dead keys)"
+msgstr "아이슬란드어 (데드키 없음)"
+
+# 나이지리아 변종
+#: ../rules/base.xml.in.h:395
+msgid "Igbo"
+msgstr "이그보어"
+
+#: ../rules/base.xml.in.h:396
+msgid "Indian"
+msgstr "인도"
+
+#: ../rules/base.xml.in.h:397
+msgid "Inuktitut"
+msgstr "이누이트어"
+
+#: ../rules/base.xml.in.h:398
+msgid "Iraqi"
+msgstr "이라크"
+
+#: ../rules/base.xml.in.h:399
+msgid "Irish"
+msgstr "아일랜드"
+
+# 아일랜드 변종
+#: ../rules/base.xml.in.h:400
+msgid "Irish (CloGaelach)"
+msgstr "아일랜드 (CloGaelach)"
+
+# 아일랜드 변종
+#: ../rules/base.xml.in.h:401
+msgid "Irish (Ogham IS434)"
+msgstr "아일랜드 (오검 문자 IS434)"
+
+#: ../rules/base.xml.in.h:402
+msgid "Irish (Ogham)"
+msgstr "아일랜드 (오검 문자)"
+
+#: ../rules/base.xml.in.h:403
+msgid "Irish (UnicodeExpert)"
+msgstr "아일랜드 (UnicodeExpert)"
+
+#: ../rules/base.xml.in.h:404
+msgid "Italian"
+msgstr "이탈리아어"
+
+#: ../rules/base.xml.in.h:405
+msgid "Italian (Georgian)"
+msgstr "이탈리아어 (조지아)"
+
+#: ../rules/base.xml.in.h:406
+msgid "Italian (Mac)"
+msgstr "이탈리아어 (맥)"
+
+#: ../rules/base.xml.in.h:407
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "이탈리아어 (미국식 키보드, 이탈리아어 문자 포함)"
+
+#: ../rules/base.xml.in.h:408
+msgid "Italian (eliminate dead keys)"
+msgstr "이탈리아어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:409
+msgid "Japanese"
+msgstr "일본어"
+
+#: ../rules/base.xml.in.h:410
+msgid "Japanese (Kana 86)"
+msgstr "일본어 (가나 86)"
+
+#: ../rules/base.xml.in.h:411
+msgid "Japanese (Kana)"
+msgstr "일본어 (가나)"
+
+#: ../rules/base.xml.in.h:412
+msgid "Japanese (Mac)"
+msgstr "일본어 (맥)"
+
+#: ../rules/base.xml.in.h:413
+msgid "Japanese (OADG 109A)"
+msgstr "일본어 (OADG 109A)"
+
+#: ../rules/base.xml.in.h:414
+msgid "Japanese (PC-98xx Series)"
+msgstr "일본어 (PC-98xx 시리즈)"
+
+#: ../rules/base.xml.in.h:415
+msgid "Japanese keyboard options"
+msgstr "일본어 키보드 옵션"
+
+#: ../rules/base.xml.in.h:416
+msgid "Kana Lock key is locking"
+msgstr "Kana Lock 키 상태 고정"
+
+#: ../rules/base.xml.in.h:417
+msgid "Kannada"
+msgstr "칸나다어"
+
+#: ../rules/base.xml.in.h:418
+msgid "Kazakh"
+msgstr "카자흐어"
+
+#: ../rules/base.xml.in.h:419
+msgid "Kazakh (with Russian)"
+msgstr "카자흐어 (러시아어 포함)"
+
+#: ../rules/base.xml.in.h:420
+msgid "Key sequence to kill the X server"
+msgstr "X 서버를 멈추는 키 조합"
+
+#: ../rules/base.xml.in.h:421
+msgid "Key to choose 3rd level"
+msgstr "3번째 단계를 선택하는 키"
+
+#: ../rules/base.xml.in.h:422
+msgid "Key to choose 5th level"
+msgstr "5번째 단계를 선택하는 키"
+
+#: ../rules/base.xml.in.h:423
+msgid "Key(s) to change layout"
+msgstr "배치를 전환하는 키"
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
+
+#: ../rules/base.xml.in.h:425
+msgid "Khmer (Cambodian)"
+msgstr "크메르어 (캄보디아)"
+
+# http://en.wikipedia.org/wiki/Kikuyu#Language
+#: ../rules/base.xml.in.h:426
+msgid "Kikuyu"
+msgstr "키쿠유어"
+
+#: ../rules/base.xml.in.h:427
+msgid "Kinesis"
+msgstr "키네시스"
+
+#: ../rules/base.xml.in.h:428
+msgid "Korean"
+msgstr "한국어"
+
+#: ../rules/base.xml.in.h:429
+msgid "Korean (101/104 key compatible)"
+msgstr "한국어 (101/104키 호환)"
+
+#: ../rules/base.xml.in.h:430
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "쿠르드어 (이란, 아랍어 라틴)"
+
+#: ../rules/base.xml.in.h:431
+msgid "Kurdish (Iran, F)"
+msgstr "쿠르드어 (이란, F)"
+
+#: ../rules/base.xml.in.h:432
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "쿠르드어 (이란, 라틴 Q)"
+
+#: ../rules/base.xml.in.h:433
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "쿠르드어 (이란, 라틴 Alt-Q)"
+
+#: ../rules/base.xml.in.h:434
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "쿠르드어 (이라크, 아랍어 라틴)"
+
+#: ../rules/base.xml.in.h:435
+msgid "Kurdish (Iraq, F)"
+msgstr "쿠르드어 (이라크, F)"
+
+#: ../rules/base.xml.in.h:436
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "쿠르드어 (이라크, 라틴 Alt-Q)"
+
+#: ../rules/base.xml.in.h:437
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "쿠르드어 (이라크, 라틴 Q)"
+
+#: ../rules/base.xml.in.h:438
+msgid "Kurdish (Syria, F)"
+msgstr "쿠르드어 (시리아, F)"
+
+#: ../rules/base.xml.in.h:439
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "쿠르드어 (시리아, 라틴 Alt-Q)"
+
+#: ../rules/base.xml.in.h:440
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "쿠르드어 (시리아, 라틴 Q)"
+
+#: ../rules/base.xml.in.h:441
+msgid "Kurdish (Turkey, F)"
+msgstr "쿠르드어 (터키, F)"
+
+#: ../rules/base.xml.in.h:442
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "쿠르드어 (터키, 라틴 Alt-Q)"
+
+#: ../rules/base.xml.in.h:443
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "쿠르드어 (터키, 라틴 Q)"
+
+# 쿠테나이 - 아메리카 원주민
+#: ../rules/base.xml.in.h:444
+msgid "Kutenai"
+msgstr "쿠테나이어"
+
+#: ../rules/base.xml.in.h:445
+msgid "Kyrgyz"
+msgstr "키르기스어"
+
+#: ../rules/base.xml.in.h:446
+msgid "Kyrgyz (phonetic)"
+msgstr "키르기스어 (음성 기호)"
+
+#: ../rules/base.xml.in.h:447
+msgid "Lao"
+msgstr "라오어"
+
+#: ../rules/base.xml.in.h:448
+msgid "Lao (STEA proposed standard layout)"
+msgstr "라오어 (STEA 제안 표준 키 배치)"
+
+#: ../rules/base.xml.in.h:449
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "노트북 컴팩 (Armada 등) 노트북 키보드"
+
+#: ../rules/base.xml.in.h:450
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "노트북 컴팩 (Presario 등) 노트북 키보드"
+
+#: ../rules/base.xml.in.h:451
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "노트북 컴팩 eMachines m68xx"
+
+#: ../rules/base.xml.in.h:452
+msgid "Latvian"
+msgstr "라트비아어"
+
+#: ../rules/base.xml.in.h:453
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "라트비아어 (아포스트로피 ' 변종)"
+
+#: ../rules/base.xml.in.h:454
+msgid "Latvian (F variant)"
+msgstr "라트비아어 (F 변종)"
+
+#: ../rules/base.xml.in.h:455
+msgid "Latvian (Tilde ~ variant)"
+msgstr "라트비아어 (물결 ~ 변종)"
+
+#: ../rules/base.xml.in.h:456
+msgid "Left Alt"
+msgstr "왼쪽 Alt"
+
+#: ../rules/base.xml.in.h:457
+msgid "Left Alt (while pressed)"
+msgstr "왼쪽 Alt (누르고 있는 동안)"
+
+#: ../rules/base.xml.in.h:458
+msgid "Left Alt is swapped with Left Win"
+msgstr "왼쪽 Alt와 왼쪽 윈도우 키 뒤바꾸기"
+
+#: ../rules/base.xml.in.h:459
+msgid "Left Ctrl"
+msgstr "왼쪽 Ctrl"
+
+#: ../rules/base.xml.in.h:460
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "왼쪽 Ctrl (1번 키보드 배치로), 오른쪽 Ctrl (마지막 키보드 배치로)"
+
+#: ../rules/base.xml.in.h:461
+msgid "Left Ctrl+Left Shift"
+msgstr "왼쪽 Ctrl+왼쪽 Shift"
+
+#: ../rules/base.xml.in.h:462
+msgid "Left Shift"
+msgstr "왼쪽 Shift"
+
+#: ../rules/base.xml.in.h:463
+msgid "Left Win"
+msgstr "왼쪽 윈도우"
+
+#: ../rules/base.xml.in.h:464
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "왼쪽 윈도우 (1번으로), 오른쪽 윈도우/메뉴 (마지막으로)"
+
+#: ../rules/base.xml.in.h:465
+msgid "Left Win (while pressed)"
+msgstr "왼쪽 윈도우 (누르고 있는 동안)"
+
+#: ../rules/base.xml.in.h:466
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "왼쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
+
+#: ../rules/base.xml.in.h:467
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "왼쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
+
+#: ../rules/base.xml.in.h:468
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "왼쪽 Ctrl+왼쪽 윈도우 (1번 키보드 배치로), 오른쪽 Ctrl+Menu (2번째 키보드 배치로)"
+
+#: ../rules/base.xml.in.h:469
+msgid "Legacy"
+msgstr "구형 방식"
+
+#: ../rules/base.xml.in.h:470
+msgid "Legacy Wang 724"
+msgstr "구형 방식 Wang 724 키패드"
+
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
+#: ../rules/base.xml.in.h:472
+msgid "Legacy key with comma"
+msgstr "구형 방식 키, 쉼표 포함"
+
+#: ../rules/base.xml.in.h:473
+msgid "Legacy key with dot"
+msgstr "구형 방식 키, 점 포함"
+
+#: ../rules/base.xml.in.h:474
+msgid "Lithuanian"
+msgstr "리투아니아어"
+
+#: ../rules/base.xml.in.h:475
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "리투아니아어 (IBM LST 1205-92)"
+
+#: ../rules/base.xml.in.h:476
+msgid "Lithuanian (LEKP)"
+msgstr "리투아니아어 (LEKP)"
+
+#: ../rules/base.xml.in.h:477
+msgid "Lithuanian (LEKPa)"
+msgstr "리투아니아어 (LEKPa)"
+
+#: ../rules/base.xml.in.h:478
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "리투아니아어 (미국식 키보드, 리투아니아 문자 포함)"
+
+#: ../rules/base.xml.in.h:479
+msgid "Lithuanian (standard)"
+msgstr "리투아니아어 (표준)"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:480
+msgid "Logitech Access Keyboard"
+msgstr "로지텍 액세스 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:481
+msgid "Logitech Cordless Desktop"
+msgstr "로지텍 무선 데스크탑"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:482
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "로지텍 무선 데스크탑 (다른 옵션)"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:483
+msgid "Logitech Cordless Desktop EX110"
+msgstr "로지텍 무선 데스크탑 EX110"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:484
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "로지텍 무선 데스크탑 LX-300"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:485
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "로지텍 무선 데스크탑 내비게이터"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:486
+msgid "Logitech Cordless Desktop Optical"
+msgstr "로지텍 무선 데스크탑 옵티컬"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:487
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "로지텍 무선 데스크탑 프로 (다른 옵션 2)"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:488
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "로지텍 무선 데스크탑 아이터치"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:489
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "로지텍 무선 프리덤/데스크탑 내비게이터"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:490
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "로지텍 G15 추가 키, G15daemon 사용"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:491
+msgid "Logitech Generic Keyboard"
+msgstr "로지텍 일반 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:492
+msgid "Logitech Internet 350 Keyboard"
+msgstr "로지텍 인터넷 350 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:493
+msgid "Logitech Internet Keyboard"
+msgstr "로지텍 인터넷 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:494
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "로지텍 인터넷 내비게이터 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:495
+msgid "Logitech Media Elite Keyboard"
+msgstr "로지텍 미디어 엘리트 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:496
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "로지텍 울트라 무선 미디어 데스크탑 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:497
+msgid "Logitech Ultra-X Keyboard"
+msgstr "로지텍 울트라 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:498
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "로지텍 디노보 엣지 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:499
+msgid "Logitech diNovo Keyboard"
+msgstr "로지텍 디노보 키보드"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:500
+msgid "Logitech iTouch"
+msgstr "로지텍 아이터치"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:501
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "로지텍 아이터치 무선 키보드 (모델 Y-RB6)"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:502
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "로지텍 아이터치 인터넷 내비게이터 키보드 SE"
+
+# 한국에서 광고하는 대로 음역
+#: ../rules/base.xml.in.h:503
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "로지텍 아이터치 인터넷 내비게이터 키보드 SE (USB)"
+
+#: ../rules/base.xml.in.h:504
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
+
+#: ../rules/base.xml.in.h:505
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (국제 버전)"
+
+#: ../rules/base.xml.in.h:506
+msgid "Macedonian"
+msgstr "마케도니아어"
+
+#: ../rules/base.xml.in.h:507
+msgid "Macedonian (eliminate dead keys)"
+msgstr "마케도니아어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:508
+msgid "Macintosh"
+msgstr "매킨토시"
+
+#: ../rules/base.xml.in.h:509
+msgid "Macintosh Old"
+msgstr "매킨토시 구형"
+
+#: ../rules/base.xml.in.h:510
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Caps Lock을 추가 백스페이스로 사용"
+
+#: ../rules/base.xml.in.h:511
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Caps Lock을 추가 Ctrl로 사용, 하지만 Caps_Lock keysym 유지"
+
+#: ../rules/base.xml.in.h:512
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Caps Lock을 추가 Ctrl로 사용"
+
+#: ../rules/base.xml.in.h:513
+msgid "Make Caps Lock an additional ESC"
+msgstr "Caps Lock을 추가 ESC로 사용"
+
+#: ../rules/base.xml.in.h:514
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Caps Lock을 추가 Hyper로 사용"
+
+#: ../rules/base.xml.in.h:515
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Caps Lock을 추가 Num Lock으로 사용"
+
+#: ../rules/base.xml.in.h:516
+msgid "Make Caps Lock an additional Super"
+msgstr "Caps Lock을 추가 Super로 사용"
+
+#: ../rules/base.xml.in.h:517
+msgid "Malayalam"
+msgstr "말라얄람어"
+
+#: ../rules/base.xml.in.h:518
+msgid "Malayalam (Lalitha)"
+msgstr "말라얄람어 (라리타)"
+
+#: ../rules/base.xml.in.h:519
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "말라얄람어 (발전된 Inscript, 루피 기호 포함)"
+
+#: ../rules/base.xml.in.h:520
+msgid "Maltese"
+msgstr "몰타어"
+
+#: ../rules/base.xml.in.h:521
+msgid "Maltese (with US layout)"
+msgstr "몰타어 (미국식 키 배치)"
+
+#: ../rules/base.xml.in.h:522
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
+
+#: ../rules/base.xml.in.h:523
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access 키보드"
+
+#: ../rules/base.xml.in.h:524
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
+
+#: ../rules/base.xml.in.h:525
+msgid "Menu"
+msgstr "메뉴"
+
+#: ../rules/base.xml.in.h:526
+msgid "Meta is mapped to Left Win"
+msgstr "메타 키를 왼쪽 윈도우 키로 매핑"
+
+#: ../rules/base.xml.in.h:527
+msgid "Meta is mapped to Win keys"
+msgstr "메타 키를 윈도우 키로 매핑"
+
+#: ../rules/base.xml.in.h:528
+msgid "Meta on Left Ctrl"
+msgstr "메타 키를 왼쪽 Ctrl에"
+
+#: ../rules/base.xml.in.h:529
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "마이크로소프트 컴포트 커브 키보드 2000"
+
+#: ../rules/base.xml.in.h:530
+msgid "Microsoft Internet Keyboard"
+msgstr "마이크로소프트 인터넷 키보드"
+
+#: ../rules/base.xml.in.h:531
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "마이크로소프트 인터넷 키보드 프로, 스웨덴"
+
+#: ../rules/base.xml.in.h:532
+msgid "Microsoft Natural"
+msgstr "마이크로소프트 내츄럴"
+
+#: ../rules/base.xml.in.h:533
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "마이크로소프트 내츄럴 키보드 엘리트"
+
+#: ../rules/base.xml.in.h:534
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "마이크로소프트 내츄럴 키보드 / 마이크로소프트 인터넷 키보드 프로"
+
+#: ../rules/base.xml.in.h:535
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "마이크로소프트 내츄럴 키보드 프로 OEM"
+
+#: ../rules/base.xml.in.h:536
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "마이크로소프트 내츄럴 키보드 프로 USB / 마이크로소프트 인터넷 키보드 프로"
+
+#: ../rules/base.xml.in.h:537
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "마이크로소프트 내츄럴 무선 어고노믹 키보드 4000"
+
+#: ../rules/base.xml.in.h:538
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "마이크로소프트 내츄럴 무선 어고노믹 키보드 7000"
+
+#: ../rules/base.xml.in.h:539
+msgid "Microsoft Office Keyboard"
+msgstr "마이크로소프트 오피스 키보드"
+
+#: ../rules/base.xml.in.h:540
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "마이크로소프트 무선 멀티미디어 키보드 1.0A"
+
+#: ../rules/base.xml.in.h:541
+msgid "Miscellaneous compatibility options"
+msgstr "기타 호환성 옵션"
+
+#: ../rules/base.xml.in.h:542
+msgid "Mongolian"
+msgstr "몽골어"
+
+#: ../rules/base.xml.in.h:543
+msgid "Montenegrin"
+msgstr "몬테네그로어"
+
+#: ../rules/base.xml.in.h:544
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "몬테네그로어 (키릴 문자, 각괄호 포함)"
+
+#: ../rules/base.xml.in.h:545
+msgid "Montenegrin (Cyrillic)"
+msgstr "몬테네그로어 (키릴 문자)"
+
+#: ../rules/base.xml.in.h:546
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "몬테네그로어 (키릴 문자, Z와 ZHE 뒤바꾸기)"
+
+#: ../rules/base.xml.in.h:547
+msgid "Montenegrin (Latin qwerty)"
+msgstr "몬테네그로어 (라틴 QWERTY)"
+
+#: ../rules/base.xml.in.h:548
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "몬테네그로어 (라틴 유니코드 QWERTY)"
+
+#: ../rules/base.xml.in.h:549
+msgid "Montenegrin (Latin unicode)"
+msgstr "몬테네그로어 (라틴 유니코드)"
+
+#: ../rules/base.xml.in.h:550
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "몬테네그로어 (라틴, 각괄호 포함)"
+
+#: ../rules/base.xml.in.h:551
+msgid "Māori"
+msgstr "마오리어"
+
+#: ../rules/base.xml.in.h:552
+msgid "NICOLA-F style Backspace"
+msgstr "NICOLA-F 방식 백스페이스"
+
+#: ../rules/base.xml.in.h:553
+msgid "Nepali"
+msgstr "네팔어"
+
+#: ../rules/base.xml.in.h:554
+msgid "Non-breakable space character at fourth level"
+msgstr "4번째 단계에서 강제 공백 문자"
+
+#: ../rules/base.xml.in.h:555
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "4번째 단계에서 강제 공백 문자, 6번째 단계에서 얇은 강제 공백 문자"
+
+#: ../rules/base.xml.in.h:556
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "4번째 단계에서 강제 공백 문자, 6번째 단계에서 얇은 강제 공백 문자 (Ctrl+Shift 사용)"
+
+#: ../rules/base.xml.in.h:557
+msgid "Non-breakable space character at second level"
+msgstr "2번째 단계에서 강제 공백 문자"
+
+#: ../rules/base.xml.in.h:558
+msgid "Non-breakable space character at third level"
+msgstr "3번째 단계에서 강제 공백 문자"
+
+#: ../rules/base.xml.in.h:559
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "3번째 단계에서 강제 공백 문자, 4번째에서는 출력 없음."
+
+#: ../rules/base.xml.in.h:560
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "3번째 단계에서 강제 공백 문자, 4번째에서는 얇은 강제 공백 문자."
+
+#: ../rules/base.xml.in.h:561
+msgid "Northgate OmniKey 101"
+msgstr "노스게이트 OmniKey 101"
+
+#: ../rules/base.xml.in.h:562
+msgid "Norwegian"
+msgstr "노르웨이어"
+
+#: ../rules/base.xml.in.h:563
+msgid "Norwegian (Dvorak)"
+msgstr "노르웨이어 (드보락)"
+
+#: ../rules/base.xml.in.h:564
+msgid "Norwegian (Mac)"
+msgstr "노르웨이어 (맥) "
+
+#: ../rules/base.xml.in.h:565
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "노르웨이어 (맥, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:566
+msgid "Norwegian (Northern Saami"
+msgstr "노르웨이어 (북 사오미)"
+
+#: ../rules/base.xml.in.h:567
+msgid "Norwegian (eliminate dead keys)"
+msgstr "노르웨이어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:568
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "노르웨이어 (북 사오미, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:569
+msgid "Num Lock"
+msgstr "Num Lock"
+
+#: ../rules/base.xml.in.h:570
+msgid "Numeric keypad delete key behaviour"
+msgstr "숫자 키패드의 Delete 키 동작"
+
+#: ../rules/base.xml.in.h:571
+msgid "Numeric keypad keys work as with Mac"
+msgstr "숫자 키패드 키가 맥과 동일하게 동작"
+
+#: ../rules/base.xml.in.h:572
+msgid "Numeric keypad layout selection"
+msgstr "숫자 키패드 배치 선택"
+
+#: ../rules/base.xml.in.h:573
+msgid "OLPC"
+msgstr "OLPC"
+
+# Oriya - 인도 방언
+#: ../rules/base.xml.in.h:574
+msgid "Oriya"
+msgstr "오리야어"
+
+#: ../rules/base.xml.in.h:575
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/Internet 키보드"
+
+#: ../rules/base.xml.in.h:576
+msgid "PC-98xx Series"
+msgstr "PC-98xx 시리즈"
+
+# 아프가니스탄
+#: ../rules/base.xml.in.h:577
+msgid "Pashto"
+msgstr "파슈토어"
+
+#: ../rules/base.xml.in.h:578
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "파슈토어 (아프가니스탄, OLPC)"
+
+#: ../rules/base.xml.in.h:579
+msgid "Pause"
+msgstr "Pause"
+
+#: ../rules/base.xml.in.h:580
+msgid "Persian"
+msgstr "페르시아어"
+
+#: ../rules/base.xml.in.h:581
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "페르시아어 (아프가니스탄, Dari OLPC)"
+
+#: ../rules/base.xml.in.h:582
+msgid "Persian (with Persian Keypad)"
+msgstr "페르시아어 (페르시아어 키패드 포함)"
+
+#: ../rules/base.xml.in.h:583
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "필리핀 - 드보락 (베이베이인)"
+
+#: ../rules/base.xml.in.h:584
+msgid "Polish"
+msgstr "폴란드어"
+
+#: ../rules/base.xml.in.h:585
+msgid "Polish (Dvorak)"
+msgstr "폴란드어 (드보락)"
+
+#: ../rules/base.xml.in.h:586
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "폴란드어 (드보락, 1 키에 폴란드어 따옴표)"
+
+#: ../rules/base.xml.in.h:587
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "폴란드어 (드보락, 따옴표 키에 폴란드어 따옴표)"
+
+#: ../rules/base.xml.in.h:588
+msgid "Polish (Kashubian)"
+msgstr "폴란드어 (카슈브어)"
+
+#: ../rules/base.xml.in.h:589
+msgid "Polish (programmer Dvorak)"
+msgstr "폴란드어 (프로그래머 드보락)"
+
+#: ../rules/base.xml.in.h:590
+msgid "Polish (qwertz)"
+msgstr "폴란드어 (QWERTZ)"
+
+#: ../rules/base.xml.in.h:591
+msgid "Portuguese"
+msgstr "포르투갈어"
+
+#: ../rules/base.xml.in.h:592
+msgid "Portuguese (Brazil)"
+msgstr "포르투갈어 (브라질)"
+
+#: ../rules/base.xml.in.h:593
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "포르투갈어 (브라질, 드보락)"
+
+#: ../rules/base.xml.in.h:594
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "포르투갈어 (브라질, 데드키 없음)"
+
+# 나티보 - 아메리카 소수 언어
+#: ../rules/base.xml.in.h:595
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "포르투갈어 (브라질, 에스페란토 나티보)"
+
+# 나티보 - 아메리카 소수 언어
+#: ../rules/base.xml.in.h:596
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "포르투갈어 (브라질, 미국 키보드 나티보)"
+
+# 나티보 - 아메리카 소수 언어
+#: ../rules/base.xml.in.h:597
+msgid "Portuguese (Brazil, nativo)"
+msgstr "포르투갈어 (브라질, 나티보)"
+
+#: ../rules/base.xml.in.h:598
+msgid "Portuguese (Mac)"
+msgstr "포르투갈어 (맥)"
+
+#: ../rules/base.xml.in.h:599
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "포르투갈어 (맥, 썬 데드키)"
+
+#: ../rules/base.xml.in.h:600
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "포르투갈어 (맥, 데드키 없음)"
+
+# 나티보 - 아메리카 소수 언어
+#: ../rules/base.xml.in.h:601
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "포르투갈어 (나티보, 에스페란토)"
+
+# 나티보 - 아메리카 소수 언어
+#: ../rules/base.xml.in.h:602
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "포르투갈어 (나티보, 미국 키보드)"
+
+# 나티보 - 아메리카 소수 언어
+#: ../rules/base.xml.in.h:603
+msgid "Portuguese (Nativo)"
+msgstr "포르투갈어 (나티보)"
+
+#: ../rules/base.xml.in.h:604
+msgid "Portuguese (Sun dead keys)"
+msgstr "포르투갈어 (썬 데드키)"
+
+#: ../rules/base.xml.in.h:605
+msgid "Portuguese (eliminate dead keys)"
+msgstr "포르투갈어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:606
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
+
+#: ../rules/base.xml.in.h:607
+msgid "PrtSc"
+msgstr "PrtSc"
+
+# 젤룸 - 파키스탄 지역
+#: ../rules/base.xml.in.h:608
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "펀자브어 (구르무키 문자, 젤룸)"
+
+#: ../rules/base.xml.in.h:609
+msgid "Punjabi (Gurmukhi)"
+msgstr "펀자브어 (구르무키 문자)"
+
+#: ../rules/base.xml.in.h:610
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
+
+#: ../rules/base.xml.in.h:611
+msgid "Right Alt"
+msgstr "오른쪽 Alt"
+
+#: ../rules/base.xml.in.h:612
+msgid "Right Alt (while pressed)"
+msgstr "오른쪽 Alt (누르고 있는 동안)"
+
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "오른쪽 Alt로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 5번째 단계 고정, 한 번 누르면 고정 해제"
+
+#: ../rules/base.xml.in.h:614
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "오른쪽 Alt로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
+
+#: ../rules/base.xml.in.h:615
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "오른쪽 Alt로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
+
+#: ../rules/base.xml.in.h:616
+msgid "Right Alt key never chooses 3rd level"
+msgstr "오른쪽 Alt는 3번째 단계를 선택하지 않음"
+
+#: ../rules/base.xml.in.h:617
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "오른쪽 Alt, Shift+오른쪽 Alt가 Multi_Key"
+
+#: ../rules/base.xml.in.h:618
+msgid "Right Ctrl"
+msgstr "오른쪽 Ctrl"
+
+#: ../rules/base.xml.in.h:619
+msgid "Right Ctrl (while pressed)"
+msgstr "오른쪽 Ctrl (누르고 있는 동안)"
+
+#: ../rules/base.xml.in.h:620
+msgid "Right Ctrl as Right Alt"
+msgstr "오른쪽 Ctrl 키를 오른쪽 Alt 키로"
+
+#: ../rules/base.xml.in.h:621
+msgid "Right Ctrl is mapped to Menu"
+msgstr "오른쪽 Ctrl 키를 메뉴 키로 매핑"
+
+#: ../rules/base.xml.in.h:622
+msgid "Right Ctrl+Right Shift"
+msgstr "오른쪽 Ctrl+오른쪽 Alt"
+
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "오른쪽 Shift"
+
+#: ../rules/base.xml.in.h:624
+msgid "Right Win"
+msgstr "오른쪽 윈도우"
+
+#: ../rules/base.xml.in.h:625
+msgid "Right Win (while pressed)"
+msgstr "오른쪽 윈도우 (누르고 있는 동안)"
+
+#: ../rules/base.xml.in.h:626
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "오른쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정"
+
+#: ../rules/base.xml.in.h:627
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "오른쪽 윈도우로 5번째 단계 선택, 다른 5번째 단계 선택 키와 같이 누르면 고정, 한 번 누르면 고정 해제"
+
+#: ../rules/base.xml.in.h:628
+msgid "Romanian"
+msgstr "루마니아어"
+
+#: ../rules/base.xml.in.h:629
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "루마니아어 (크림타타르, Dobruca-1 Q)"
+
+#: ../rules/base.xml.in.h:630
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "루마니아어 (크림타타르, Dobruca-2 Q)"
+
+#: ../rules/base.xml.in.h:631
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "루마니아어 (크림타타르, 터키어 Alt-Q)"
+
+#: ../rules/base.xml.in.h:632
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "루마니아어 (크림타타르, 터키어 F)"
+
+#: ../rules/base.xml.in.h:633
+msgid "Romanian (WinKeys)"
+msgstr "루마니아어 (윈도우 키)"
+
+#: ../rules/base.xml.in.h:634
+msgid "Romanian (cedilla)"
+msgstr "루미니아어 (세디유)"
+
+#: ../rules/base.xml.in.h:635
+msgid "Romanian (standard cedilla)"
+msgstr "루마니아어 (표준 세디유)"
+
+#: ../rules/base.xml.in.h:636
+msgid "Romanian (standard)"
+msgstr "루마니아어 (표준)"
+
+#: ../rules/base.xml.in.h:637
+msgid "Rupee on 4"
+msgstr "루피를 4 키에"
+
+#: ../rules/base.xml.in.h:638
+msgid "Russian"
+msgstr "러시아어"
+
+# FIXME: 브랜드?
+#: ../rules/base.xml.in.h:639
+msgid "Russian (Bashkirian)"
+msgstr "러시아어 (Bashkirian)"
+
+# http://ko.wikipedia.org/wiki/%EC%B6%94%EB%B0%94%EC%8B%9C%EC%96%B4
+#: ../rules/base.xml.in.h:640
+msgid "Russian (Chuvash Latin)"
+msgstr "러시아어 (추바시어 라틴)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr "러시아어 (추바시어)"
+
+#: ../rules/base.xml.in.h:642
+msgid "Russian (DOS)"
+msgstr "러시아어 (DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr "러시아어 (그루지아)"
+
+#: ../rules/base.xml.in.h:644
+msgid "Russian (Germany, phonetic)"
+msgstr "러시아어 (독일, 음성 표기)"
+
+#: ../rules/base.xml.in.h:645
+msgid "Russian (Kalmyk)"
+msgstr "러시아어 (칼미크)"
+
+#: ../rules/base.xml.in.h:646
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "러시아어 (카자흐스탄, 카자흐어 포함)"
+
+#: ../rules/base.xml.in.h:647
+msgid "Russian (Komi)"
+msgstr "러시아어 (코미)"
+
+#: ../rules/base.xml.in.h:648
+msgid "Russian (Mari)"
+msgstr "러시아어 (마리)"
+
+#: ../rules/base.xml.in.h:649
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "러시아어 (오세트, 윈도우 키)"
+
+#: ../rules/base.xml.in.h:650
+msgid "Russian (Ossetian, legacy)"
+msgstr "러시아어 (오세트, 구형)"
+
+#: ../rules/base.xml.in.h:651
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "러시아어 (폴란드, 음성 표기 드보락)"
+
+#: ../rules/base.xml.in.h:652
+msgid "Russian (Serbian)"
+msgstr "러시아어 (세르비아)"
+
+#: ../rules/base.xml.in.h:653
+msgid "Russian (Sweden, phonetic)"
+msgstr "러시아어 (스웨덴, 음성 표기)"
+
+#: ../rules/base.xml.in.h:654
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "러시아어 (스웨덴, 음성 표기, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:655
+msgid "Russian (Tatar)"
+msgstr "러시아어 (타타르)"
+
+#: ../rules/base.xml.in.h:656
+msgid "Russian (US, phonetic)"
+msgstr "러시아어 (미국, 음성 표기)"
+
+#: ../rules/base.xml.in.h:657
+msgid "Russian (Udmurt)"
+msgstr "러시아어 (우드무르트)"
+
+#: ../rules/base.xml.in.h:658
+msgid "Russian (Yakut)"
+msgstr "러시아어 (야쿠트)"
+
+#: ../rules/base.xml.in.h:659
+msgid "Russian (legacy)"
+msgstr "러시아어 (구형)"
+
+#: ../rules/base.xml.in.h:660
+msgid "Russian (phonetic WinKeys)"
+msgstr "러시아어 (음성 표기, 윈도우 키)"
+
+#: ../rules/base.xml.in.h:661
+msgid "Russian (phonetic)"
+msgstr "러시아어 (음성 표기)"
+
+#: ../rules/base.xml.in.h:662
+msgid "Russian (typewriter)"
+msgstr "러시아어 (타자기)"
+
+#: ../rules/base.xml.in.h:663
+msgid "Russian (typewriter, legacy)"
+msgstr "러시아어 (타자기, 구형)"
+
+#: ../rules/base.xml.in.h:664
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless 키보드"
+
+#: ../rules/base.xml.in.h:665
+msgid "SK-1300"
+msgstr "SK-1300"
+
+#: ../rules/base.xml.in.h:666
+msgid "SK-2500"
+msgstr "SK-2500"
+
+#: ../rules/base.xml.in.h:667
+msgid "SK-6200"
+msgstr "SK-6200"
+
+#: ../rules/base.xml.in.h:668
+msgid "SK-7100"
+msgstr "SK-7100"
+
+#: ../rules/base.xml.in.h:669
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
+
+#: ../rules/base.xml.in.h:670
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
+
+# 사이시얏트 (賽夏族) - 타이완 원주민
+#: ../rules/base.xml.in.h:671
+msgid "Saisiyat (Taiwan)"
+msgstr "사이시얏트 (타이완)"
+
+#: ../rules/base.xml.in.h:672
+msgid "Samsung SDM 4500P"
+msgstr "삼성 SDM 4500P"
+
+#: ../rules/base.xml.in.h:673
+msgid "Samsung SDM 4510P"
+msgstr "삼성 SDM 4510P"
+
+# Sanwa Supply - 일본 제조사
+#: ../rules/base.xml.in.h:674
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
+
+#: ../rules/base.xml.in.h:675
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
+
+# 캐나다 소스 언어
+#: ../rules/base.xml.in.h:676
+msgid "Secwepemctsin"
+msgstr "슈스와프어"
+
+#: ../rules/base.xml.in.h:677
+msgid "Semi-colon on third level"
+msgstr "3번째 단계에서 세미콜론"
+
+#: ../rules/base.xml.in.h:678
+msgid "Serbian"
+msgstr "세르비아어"
+
+#: ../rules/base.xml.in.h:679
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "세르비아어 (라틴 유니코드 QWERTY)"
+
+#: ../rules/base.xml.in.h:680
+msgid "Serbian (Latin Unicode)"
+msgstr "세르비아어 (라틴 유니코드)"
+
+#: ../rules/base.xml.in.h:681
+msgid "Serbian (Latin qwerty)"
+msgstr "세르비아어 (라틴 QWERTY)"
+
+#: ../rules/base.xml.in.h:682
+msgid "Serbian (Latin with guillemets)"
+msgstr "세르비아어 (라틴, 각괄호 포함)"
+
+#: ../rules/base.xml.in.h:683
+msgid "Serbian (Latin)"
+msgstr "세르비아어 (라틴)"
+
+#: ../rules/base.xml.in.h:684
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "세르비아어 (판노니아 루테니아 기호)"
+
+#: ../rules/base.xml.in.h:685
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "세르비아어 (Z와 ZHE 뒤바꾸기)"
+
+#: ../rules/base.xml.in.h:686
+msgid "Serbian (with guillemets)"
+msgstr "세르비아어 (각괄호 포함)"
+
+#: ../rules/base.xml.in.h:687
+msgid "Serbo-Croatian (US)"
+msgstr "세르보크로아트어 (미국)"
+
+#: ../rules/base.xml.in.h:688
+msgid "Shift cancels Caps Lock"
+msgstr "Shift를 누르면 Caps Lock 끄기"
+
+#: ../rules/base.xml.in.h:689
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Shift를 누르면 Num Lock을 끄지 않고, 3번째 단계를 선택"
+
+#: ../rules/base.xml.in.h:690
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Shift와 동시에 숫자 키패드 키를 누르면 MS 윈도우즈와 동일하게 동작"
+
+#: ../rules/base.xml.in.h:691
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
+
+# 인도
+#: ../rules/base.xml.in.h:692
+msgid "Sindhi"
+msgstr "신디어"
+
+#: ../rules/base.xml.in.h:693
+msgid "Sinhala"
+msgstr "싱할라어"
+
+#: ../rules/base.xml.in.h:694
+msgid "Slovak"
+msgstr "슬로바키아어"
+
+#: ../rules/base.xml.in.h:695
+msgid "Slovak (extended Backslash)"
+msgstr "슬로바키아어 (확장 백슬래시)"
+
+#: ../rules/base.xml.in.h:696
+msgid "Slovak (qwerty)"
+msgstr "슬로바키아어 (QWERTY)"
+
+#: ../rules/base.xml.in.h:697
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "슬로바키아어 (QWERTY, 백슬래시 확장)"
+
+#: ../rules/base.xml.in.h:698
+msgid "Slovene"
+msgstr "슬로베니아어"
+
+#: ../rules/base.xml.in.h:699
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "슬로베니아어 (미국식 키보드, 슬로베니아 문자 포함)"
+
+#: ../rules/base.xml.in.h:700
+msgid "Slovene (use guillemets for quotes)"
+msgstr "슬로베니아어 (따옴표에 각괄호 사용)"
+
+#: ../rules/base.xml.in.h:701
+msgid "Spanish"
+msgstr "스페인어"
+
+# 아스투리아스 - 스페인 지역
+#: ../rules/base.xml.in.h:702
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "스페인어 (아스투리아스어 변종, 가운데점 H 및 가운데점 L 포함)"
+
+#: ../rules/base.xml.in.h:703
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "스페인어 (카탈로니아어 변종, 가운데점 L 포함)"
+
+#: ../rules/base.xml.in.h:704
+msgid "Spanish (Dvorak)"
+msgstr "스페인어 (드보락)"
+
+#: ../rules/base.xml.in.h:705
+msgid "Spanish (Latin American)"
+msgstr "스페인어 (라틴 아메리카)"
+
+#: ../rules/base.xml.in.h:706
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "스페인어 (라틴 아메리카, 데드키 없음)"
+
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "스페인어 (라틴 아메리카, 물결 데드키 포함)"
+
+#: ../rules/base.xml.in.h:708
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "스페인어 (라틴 아메리카, 썬 데드키)"
+
+#: ../rules/base.xml.in.h:709
+msgid "Spanish (Mac)"
+msgstr "스페인어 (맥)"
+
+#: ../rules/base.xml.in.h:710
+msgid "Spanish (Sun dead keys)"
+msgstr "스페인어 (썬 데드키)"
+
+#: ../rules/base.xml.in.h:711
+msgid "Spanish (eliminate dead keys)"
+msgstr "스페인어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:712
+msgid "Spanish (include dead tilde)"
+msgstr "스페인어 (물결 데드키 포함)"
+
+#: ../rules/base.xml.in.h:713
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "특수 키는 (Ctrl+Alt+&lt;키&gt;) 서버에서 처리"
+
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "썬 타입 5/6"
+
+#: ../rules/base.xml.in.h:715
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power 멀티미디어 키보드"
+
+#: ../rules/base.xml.in.h:716
+msgid "Swahili (Kenya)"
+msgstr "스와힐리어 (케냐)"
+
+#: ../rules/base.xml.in.h:717
+msgid "Swahili (Tanzania)"
+msgstr "스와힐리어 (탄자니아)"
+
+#: ../rules/base.xml.in.h:718
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Ctrl과 Caps Lock 뒤바꾸기"
+
+#: ../rules/base.xml.in.h:719
+msgid "Swap ESC and Caps Lock"
+msgstr "ESC와 Caps Lock 뒤바꾸기"
+
+#: ../rules/base.xml.in.h:720
+msgid "Swedish"
+msgstr "스웨덴어"
+
+#: ../rules/base.xml.in.h:721
+msgid "Swedish (Dvorak)"
+msgstr "스웨덴어 (드보락)"
+
+#: ../rules/base.xml.in.h:722
+msgid "Swedish (Mac)"
+msgstr "스웨덴어 (맥)"
+
+#: ../rules/base.xml.in.h:723
+msgid "Swedish (Svdvorak)"
+msgstr "스웨덴어 (SV 드보락)"
+
+#: ../rules/base.xml.in.h:724
+msgid "Swedish (eliminate dead keys)"
+msgstr "스웨덴어 (데드키 없음)"
+
+#: ../rules/base.xml.in.h:725
+msgid "Swedish (northern Saami)"
+msgstr "스웨덴어 (북 사오미)"
+
+#: ../rules/base.xml.in.h:726
+msgid "Swiss"
+msgstr "스위스"
+
+#: ../rules/base.xml.in.h:727
+msgid "Swiss (legacy)"
+msgstr "스위스 (구형)"
+
+#: ../rules/base.xml.in.h:728
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (타블렛 PC)"
+
+#: ../rules/base.xml.in.h:729
+msgid "Syriac"
+msgstr "시리아어"
+
+#: ../rules/base.xml.in.h:730
+msgid "Syriac (phonetic)"
+msgstr "시리아어 (음성 기호)"
+
+#: ../rules/base.xml.in.h:731
+msgid "Taiwanese"
+msgstr "타이완"
+
+#: ../rules/base.xml.in.h:732
+msgid "Taiwanese (indigenous)"
+msgstr "타이완 (원주민)"
+
+#: ../rules/base.xml.in.h:733
+msgid "Tajik"
+msgstr "타지키스탄"
+
+#: ../rules/base.xml.in.h:734
+msgid "Tajik (legacy)"
+msgstr "타지키스탄 (구형)"
+
+#: ../rules/base.xml.in.h:735
+msgid "Tamil"
+msgstr "타밀어"
+
+#: ../rules/base.xml.in.h:736
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "타밀어 (스리랑카, TAB 타자기)"
+
+#: ../rules/base.xml.in.h:737
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "타밀어 (스리랑카, 유니코드)"
+
+#: ../rules/base.xml.in.h:738
+msgid "Tamil (TAB typewriter)"
+msgstr "타밀어 (TAB 타자기)"
+
+#: ../rules/base.xml.in.h:739
+msgid "Tamil (TSCII typewriter)"
+msgstr "타밀어 (TSCII 타자기)"
+
+#: ../rules/base.xml.in.h:740
+msgid "Tamil (Unicode)"
+msgstr "타밀어 (유니코드)"
+
+#: ../rules/base.xml.in.h:741
+msgid "Tamil (keyboard with numerals)"
+msgstr "타밀어 (숫자 포함 키보드)"
+
+#: ../rules/base.xml.in.h:742
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
+
+#: ../rules/base.xml.in.h:743
+msgid "Telugu"
+msgstr "텔루구어"
+
+#: ../rules/base.xml.in.h:744
+msgid "Thai"
+msgstr "타이어"
+
+#: ../rules/base.xml.in.h:745
+msgid "Thai (Pattachote)"
+msgstr "타이어 (Pattachote)"
+
+#: ../rules/base.xml.in.h:746
+msgid "Thai (TIS-820.2538)"
+msgstr "타이어 (TIS-820.2538)"
+
+#: ../rules/base.xml.in.h:747
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "드보락 키보드에서 해당하는 키로."
+
+#: ../rules/base.xml.in.h:748
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "QWERTY 키보드에서 해당하는 키로."
+
+#: ../rules/base.xml.in.h:749
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "포인터키를 Shift + NumLock 키로 토글"
+
+#: ../rules/base.xml.in.h:750
+msgid "Toshiba Satellite S3000"
+msgstr "도시바 Satellite S3000"
+
+#: ../rules/base.xml.in.h:751
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access 키보드"
+
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
+
+#: ../rules/base.xml.in.h:753
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
+
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr "츠와나어"
+
+#: ../rules/base.xml.in.h:755
+msgid "Turkish"
+msgstr "터키어"
+
+#: ../rules/base.xml.in.h:756
+msgid "Turkish (Alt-Q)"
+msgstr "터키어 (Alt-Q)"
+
+#: ../rules/base.xml.in.h:757
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "터키어 (크림타타르, 터키어 Alt-Q)"
+
+#: ../rules/base.xml.in.h:758
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "터키어 (크림타타르, 터키어 F)"
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "터키어 (크림타타르, 터키어 Q)"
+
+#: ../rules/base.xml.in.h:760
+msgid "Turkish (F)"
+msgstr "터키어 (F)"
+
+#: ../rules/base.xml.in.h:761
+msgid "Turkish (Sun dead keys)"
+msgstr "터키어 (썬 데드키)"
+
+#: ../rules/base.xml.in.h:762
+msgid "Turkish (international with dead keys)"
+msgstr "터키어 (국제 버전, 데드키 포함)"
+
+#: ../rules/base.xml.in.h:763
+msgid "Turkmen"
+msgstr "투르크멘어"
+
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr "투르크멘어 (Alt-Q)"
+
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
+
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
+
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:유럽 모드)"
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:일본 모드)"
+
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "우크라이나어"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "우크라이나어 (크림타타르, 터키어 Alt-Q)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "우크라이나어 (크림타타르, 터키어 F)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "우크라이나어 (크림타타르, 터키어 Q)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "우크라이나어 (윈도우 키)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "우크라이나어 (homophonic)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "우크라이나어 (구형)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "우크라이나어 (음성 기호)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "우크라이나어 (표준 RSTU, 러시아어 키 배치)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "우크라이나어 (표준 RSTU)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "우크라이나어 (타자기)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "유니코드 추가 (화살표 및 수학 기호)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "유니코드 추가 (화살표 및 수학 기호). 수학 기호를 기본 단계에"
+
+# Unitek - 유니텍(unitech)이 아님
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+# Urdu - 인도 방언
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "우르두어 (파키스탄)"
+
+# Urdu - 인도 방언
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "우르두어 (파키스탄, CRULP)"
+
+# Urdu - 인도 방언
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "우르두어 (파키스탄, NLA)"
+
+# Urdu - 인도 방언
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "우르두어 (윈도우 키)"
+
+# Urdu, 인도 방언
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "우르두어 (다른 음성 기호 버전)"
+
+# Urdu - 인도 방언
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "우르두어 (음성 표기)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "키보드 LED에서 다른 키보드 배치 사용 표시"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "스페이스 키가 강제 공백 출력."
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "모든 단계에서 일반 공백 문자"
+
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "우즈베크어"
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "우즈베크어 (아프가니스탄)"
+
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "우즈베크어 (아프가니스탄, OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "우즈베크어 (크림타타르, 터키어 Alt-Q)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "우즈베크어 (크림타타르, 터키어 F)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "우즈베크어 (크림타타르, 터키어 Q)"
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "우즈베크어 (라틴)"
+
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "베트남어"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "뷰소닉 KU-306 인터넷 키보드"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Wang 724 키패드, 유니코드 추가 (화살표 및 수학 기호)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Wang 724 키패드, 유니코드 추가 (화살표 및 수학 기호), 수학 기호를 기본 단계에"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+# 월로프어 - 세네갈, 감비아, 모리타니에서 쓰이는 아프리카 언어
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "월로프어"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "야후! 인터넷 키보드"
+
+# 나이지리아 변종
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "요루바어"
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "2번째 단계에서 폭 없는 연결 금지 문자"
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자"
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 없음"
+
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 얇은 강제 공백 문자"
+
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 강제 공백 문자, 4번째에서는 폭 없는 연결 문자"
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 폭 없는 연결 문자"
+
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "2번째 단계에서 폭 없는 연결 금지 문자, 3번째에서는 폭 없는 연결 문자, 4번째에서는 강제 공백 문자"
+
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "3번째 단계에서 폭 없는 연결 금지 문자, 4번째에서는 폭 없는 연결 문자"
+
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
+
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
+
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
+
+# Braille
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
+
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "APL"
+msgstr "APL"
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "Iran"
+msgstr "이란"
+
+#: ../rules/base.extras.xml.in.h:3
+msgid "Iran - Avestan"
+msgstr "이란 - 아베스탄"
+
+#: ../rules/base.extras.xml.in.h:4
+msgid "Lithuania"
+msgstr "리투아니아"
+
+#: ../rules/base.extras.xml.in.h:5
+msgid "Lithuania - Dvorak"
+msgstr "리투아니아 - 드보락"
+
+#: ../rules/base.extras.xml.in.h:6
+msgid "Ltu"
+msgstr "리투아니아"
+
+#: ../rules/base.extras.xml.in.h:7
+msgid "Romania"
+msgstr "루마니아"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "루마니아 - 어고노믹 터치 방식"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "루마니아"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "러시아"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "러시아"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "세르비아"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "세르비아 - 데드키 대신 조합으로 액센트 입력"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "미국"
+
+# 아스시나 - 미국 원주민 부족
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "미국 - 아트시나"
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "미국 - Couer D'alene Salish"
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "미국 - 국제 (AltGr 유니코드 조합)"
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "미국 - 국제 (AltGr 유니코드 조합, 다른 버전)"
diff --git a/xorg-server/xkeyboard-config/po/nl.po b/xorg-server/xkeyboard-config/po/nl.po
index 4bc4f8179..715ab9164 100644
--- a/xorg-server/xkeyboard-config/po/nl.po
+++ b/xorg-server/xkeyboard-config/po/nl.po
@@ -2,7 +2,7 @@
# Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
# This file is distributed under the same license as the xkeyboard-config package.
# Taco Witte <tcwitte@cs.uu.nl>, 2003, 2004, 2005, 2006.
-# Tino Meinen <tino.meinen@gmail.com>, 2007, 2008, 2009.
+# Tino Meinen <tino.meinen@gmail.com>, 2007, 2008, 2009, 2011
# ------------------------------------------------------------------------
# Compose -samensteltoets
# dead keys -dode/latente/inactieve
@@ -21,112 +21,114 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config-1.6.99\n"
+"Project-Id-Version: xkeyboard-config-2.1-pre1\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2009-09-15 23:31+0100\n"
-"PO-Revision-Date: 2009-09-24 17:46+0800\n"
+"POT-Creation-Date: 2011-01-12 00:16+0000\n"
+"PO-Revision-Date: 2011-02-09 21:13+0800\n"
"Last-Translator: Tino Meinen <tino.meinen@gmail.com>\n"
"Language-Team: Dutch <vertaling@vrijschrift.org>\n"
+"Language: nl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../rules/base.xml.in.h:1
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;Groter dan/Kleiner dan&gt;"
+
+# locks - op slot gezet/blijvend/in stand houden
+#: ../rules/base.xml.in.h:2
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Groter dan/Kleiner dan&gt; geeft het 5de niveau en is blijvend wanneer het ingedrukt wordt samen met een andere 5de niveau-kiezer"
+
+#: ../rules/base.xml.in.h:3
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Groter dan/Kleiner dan&gt; geeft het 5de niveau en is blijvend wanneer het ingedrukt wordt samen met een andere 5de niveau-kiezer, één toetsaanslag heft het niveau op"
+
+#: ../rules/base.xml.in.h:4
msgid "(F)"
msgstr "(F)"
-#: ../rules/base.xml.in.h:2
+#: ../rules/base.xml.in.h:5
msgid "(Legacy) Alternative"
msgstr "(Historisch) alternatief"
-#: ../rules/base.xml.in.h:3
+#: ../rules/base.xml.in.h:6
msgid "(Legacy) Alternative, Sun dead keys"
msgstr "(Historisch) alternatief, Sun ‘dode toetsen’"
-#: ../rules/base.xml.in.h:4
+#: ../rules/base.xml.in.h:7
msgid "(Legacy) Alternative, eliminate dead keys"
msgstr "(Historisch) alternatief, zonder dode toetsen"
-#: ../rules/base.xml.in.h:5
+#: ../rules/base.xml.in.h:8
msgid "101/104 key Compatible"
msgstr "101/104-toetsen compatibel"
-#: ../rules/base.xml.in.h:6
+#: ../rules/base.xml.in.h:9
msgid "101/qwerty/comma/Dead keys"
msgstr "101/qwerty/komma/dode toetsen"
-#: ../rules/base.xml.in.h:7
+#: ../rules/base.xml.in.h:10
msgid "101/qwerty/comma/Eliminate dead keys"
msgstr "101/qwerty/komma/zonder dode toetsen"
-#: ../rules/base.xml.in.h:8
+#: ../rules/base.xml.in.h:11
msgid "101/qwerty/dot/Dead keys"
msgstr "101/qwerty/punt/dode toetsen"
-#: ../rules/base.xml.in.h:9
+#: ../rules/base.xml.in.h:12
msgid "101/qwerty/dot/Eliminate dead keys"
msgstr "101/qwerty/punt/zonder dode toetsen"
-#: ../rules/base.xml.in.h:10
+#: ../rules/base.xml.in.h:13
msgid "101/qwertz/comma/Dead keys"
msgstr "101/qwertz/komma/dode toetsen"
-#: ../rules/base.xml.in.h:11
+#: ../rules/base.xml.in.h:14
msgid "101/qwertz/comma/Eliminate dead keys"
msgstr "101/qwertz/komma/zonder dode toetsen"
-#: ../rules/base.xml.in.h:12
+#: ../rules/base.xml.in.h:15
msgid "101/qwertz/dot/Dead keys"
msgstr "101/qwertz/punt/dode toetsen"
-#: ../rules/base.xml.in.h:13
+#: ../rules/base.xml.in.h:16
msgid "101/qwertz/dot/Eliminate dead keys"
msgstr "101/qwertz/punt/zonder dode toetsen"
-#: ../rules/base.xml.in.h:14
+#: ../rules/base.xml.in.h:17
msgid "102/qwerty/comma/Dead keys"
msgstr "102/qwerty/komma/dode toetsen"
-#: ../rules/base.xml.in.h:15
+#: ../rules/base.xml.in.h:18
msgid "102/qwerty/comma/Eliminate dead keys"
msgstr "102/qwerty/komma/zonder dode toetsen"
-#: ../rules/base.xml.in.h:16
+#: ../rules/base.xml.in.h:19
msgid "102/qwerty/dot/Dead keys"
msgstr "102/qwerty/punt/dode toetsen"
-#: ../rules/base.xml.in.h:17
+#: ../rules/base.xml.in.h:20
msgid "102/qwerty/dot/Eliminate dead keys"
msgstr "102/qwerty/punt/zonder dode toetsen"
-#: ../rules/base.xml.in.h:18
+#: ../rules/base.xml.in.h:21
msgid "102/qwertz/comma/Dead keys"
msgstr "102/qwertz/komma/dode toetsen"
-#: ../rules/base.xml.in.h:19
+#: ../rules/base.xml.in.h:22
msgid "102/qwertz/comma/Eliminate dead keys"
msgstr "102/qwertz/komma/zonder dode toetsen"
-#: ../rules/base.xml.in.h:20
+#: ../rules/base.xml.in.h:23
msgid "102/qwertz/dot/Dead keys"
msgstr "102/qwertz/punt/dode toetsen"
-#: ../rules/base.xml.in.h:21
+#: ../rules/base.xml.in.h:24
msgid "102/qwertz/dot/Eliminate dead keys"
msgstr "102/qwertz/punt/zonder dode toetsen"
-#: ../rules/base.xml.in.h:22
-msgid "2"
-msgstr "2"
-
-#: ../rules/base.xml.in.h:23
-msgid "4"
-msgstr "4"
-
-#: ../rules/base.xml.in.h:24
-msgid "5"
-msgstr "5"
-
#: ../rules/base.xml.in.h:25
msgid "A4Tech KB-21"
msgstr "A4Tech KB-21"
@@ -140,326 +142,347 @@ msgid "A4Tech Wireless Desktop RFKB-23"
msgstr "A4Tech draadloos toetsenbord RFKB-23"
#: ../rules/base.xml.in.h:28
-msgid "ACPI Standard"
-msgstr "ACPI standaard"
-
-#: ../rules/base.xml.in.h:29
msgid "ATM/phone-style"
msgstr "ATM/telefoonstijl"
-#: ../rules/base.xml.in.h:30
+#: ../rules/base.xml.in.h:29
msgid "Acer AirKey V"
msgstr "Acer AirKey V"
-#: ../rules/base.xml.in.h:31
+#: ../rules/base.xml.in.h:30
msgid "Acer C300"
msgstr "Acer C300"
-#: ../rules/base.xml.in.h:32
+#: ../rules/base.xml.in.h:31
msgid "Acer Ferrari 4000"
msgstr "Acer Ferrari 4000"
-#: ../rules/base.xml.in.h:33
+#: ../rules/base.xml.in.h:32
msgid "Acer Laptop"
msgstr "Acer laptop"
-#: ../rules/base.xml.in.h:34
+#: ../rules/base.xml.in.h:33
msgid "Add the standard behavior to Menu key"
msgstr "Het standaard gedrag toevoegen aan de Menu-toets"
-#: ../rules/base.xml.in.h:35
+#: ../rules/base.xml.in.h:34
msgid "Adding Esperanto circumflexes (supersigno)"
msgstr "Esperanto circonflexes toevoegen (supersigno)"
# op afbeelden/aan toekennen
-#: ../rules/base.xml.in.h:36
-msgid "Adding EuroSign to certain keys"
-msgstr "Het Euro-teken aan bepaalde toetsen toevoegen"
+#: ../rules/base.xml.in.h:35
+msgid "Adding currency signs to certain keys"
+msgstr "Het Euro-teken aan bepaalde toetsen toekennen"
-#: ../rules/base.xml.in.h:37
+#: ../rules/base.xml.in.h:36
msgid "Advance Scorpius KI"
msgstr "Advance Scorpius KI"
-#: ../rules/base.xml.in.h:38
+#: ../rules/base.xml.in.h:37
msgid "Afg"
msgstr "Afg"
-#: ../rules/base.xml.in.h:39
+#: ../rules/base.xml.in.h:38
msgid "Afghanistan"
msgstr "Afghanistan"
-#: ../rules/base.xml.in.h:40
+#: ../rules/base.xml.in.h:39
msgid "Akan"
msgstr "Akaans"
-#: ../rules/base.xml.in.h:41
+#: ../rules/base.xml.in.h:40
msgid "Alb"
msgstr "Alb"
-#: ../rules/base.xml.in.h:42
+#: ../rules/base.xml.in.h:41
msgid "Albania"
msgstr "Albanië"
-#: ../rules/base.xml.in.h:43
+#: ../rules/base.xml.in.h:42
msgid "Alt and Meta are on Alt keys"
msgstr "Alt en Meta zitten op de Alt-toetsen"
# wordt afgebeeld op/zit op
# zit op is veel korter en is ook duidelijker
-#: ../rules/base.xml.in.h:44
+#: ../rules/base.xml.in.h:43
msgid "Alt is mapped to Right Win, Super to Menu"
msgstr "Alt zit op de rechter Win-toets, Super op de Menu-toets"
-#: ../rules/base.xml.in.h:45
-msgid "Alt+CapsLock"
-msgstr "Alt+CapsLock"
+#: ../rules/base.xml.in.h:44
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
-#: ../rules/base.xml.in.h:46
+#: ../rules/base.xml.in.h:45
msgid "Alt+Ctrl"
msgstr "Alt+Ctrl"
-#: ../rules/base.xml.in.h:47
+#: ../rules/base.xml.in.h:46
msgid "Alt+Shift"
msgstr "Alt+Shift"
-#: ../rules/base.xml.in.h:48
+#: ../rules/base.xml.in.h:47
msgid "Alt+Space"
msgstr "Alt+Spatie"
-#: ../rules/base.xml.in.h:49
+#: ../rules/base.xml.in.h:48
msgid "Alt-Q"
msgstr "Alt-Q"
-#: ../rules/base.xml.in.h:50
+#: ../rules/base.xml.in.h:49
msgid "Alt/Win key behavior"
msgstr "Alt/Win-toets gedrag"
-#: ../rules/base.xml.in.h:51
+#: ../rules/base.xml.in.h:50
msgid "Alternative"
msgstr "Alternatief"
-#: ../rules/base.xml.in.h:52
+#: ../rules/base.xml.in.h:51
msgid "Alternative Eastern"
msgstr "Alternatief oosters"
-#: ../rules/base.xml.in.h:53
+#: ../rules/base.xml.in.h:52
msgid "Alternative Phonetic"
msgstr "Alternatief fonetisch"
-#: ../rules/base.xml.in.h:54
-msgid "Alternative international (former us_intl)"
-msgstr "Alternatief internationaal (voormalig us_intl)"
+#: ../rules/base.xml.in.h:53
+msgid "Alternative international"
+msgstr "Alternatief internationaal"
-#: ../rules/base.xml.in.h:55
+#: ../rules/base.xml.in.h:54
msgid "Alternative, Sun dead keys"
msgstr "Alternatief, Sun-dode toetsen"
-#: ../rules/base.xml.in.h:56
+#: ../rules/base.xml.in.h:55
msgid "Alternative, eliminate dead keys"
msgstr "Alternatief, zonder dode toetsen"
-#: ../rules/base.xml.in.h:57
+#: ../rules/base.xml.in.h:56
msgid "Alternative, latin-9 only"
msgstr "Alternatief, enkel latin-9"
-#: ../rules/base.xml.in.h:58
+#: ../rules/base.xml.in.h:57
msgid "And"
msgstr "And"
-#: ../rules/base.xml.in.h:59
+#: ../rules/base.xml.in.h:58
msgid "Andorra"
msgstr "Andorra"
# Beide/Willekeurige/Een van de/Een/Elke
-#: ../rules/base.xml.in.h:60
+#: ../rules/base.xml.in.h:59
msgid "Any Alt key"
msgstr "Elke Alt-toets"
-#: ../rules/base.xml.in.h:61
+#: ../rules/base.xml.in.h:60
msgid "Any Win key"
msgstr "Elke Win-toets"
# Beide Win-toetsen wisselen de indeling gedurende het indrukken.<
# gedurende het indrukken/ingedrukt houden (vrij vertaald)
-#: ../rules/base.xml.in.h:62
+#: ../rules/base.xml.in.h:61
msgid "Any Win key (while pressed)"
msgstr "Elke Win-toets (ingedrukt houden)"
-#: ../rules/base.xml.in.h:63
+#: ../rules/base.xml.in.h:62
msgid "Apostrophe (') variant"
msgstr "Apostrof (') variant"
-#: ../rules/base.xml.in.h:64
+#: ../rules/base.xml.in.h:63
msgid "Apple"
msgstr "Apple"
+#: ../rules/base.xml.in.h:64
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Apple Aluminium Toetsenbord (ANSI)"
+
#: ../rules/base.xml.in.h:65
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Apple Aluminium Toetsenbord (ISO)"
+
+#: ../rules/base.xml.in.h:66
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Apple Aluminium Toetsenbord (JIS)"
+
+#: ../rules/base.xml.in.h:67
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Apple Aluminium toetsenbord: PC-toetsen emuleren (Print, Scroll Lock, Pause, Num Lock)"
+
+#: ../rules/base.xml.in.h:68
msgid "Apple Laptop"
msgstr "Apple laptop"
-#: ../rules/base.xml.in.h:66
+#: ../rules/base.xml.in.h:69
msgid "Ara"
msgstr "Ara"
-#: ../rules/base.xml.in.h:67
+#: ../rules/base.xml.in.h:70
msgid "Arabic"
msgstr "Arabisch"
-#: ../rules/base.xml.in.h:68
+#: ../rules/base.xml.in.h:71
msgid "Arm"
msgstr "Arm"
-#: ../rules/base.xml.in.h:69
+#: ../rules/base.xml.in.h:72
msgid "Armenia"
msgstr "Armenië"
-#: ../rules/base.xml.in.h:70
+#: ../rules/base.xml.in.h:73
msgid "Asturian variant with bottom-dot H and bottom-dot L"
msgstr "Asturische variant met onder-punt H en onder-punt L"
-#: ../rules/base.xml.in.h:71
+#: ../rules/base.xml.in.h:74
msgid "Asus Laptop"
msgstr "Asus laptop"
# "Ctrl-toets zit linksonder"
-#: ../rules/base.xml.in.h:72
+#: ../rules/base.xml.in.h:75
msgid "At bottom left"
msgstr "Linksonder"
# Ctrl-toets links van ‘A’
-#: ../rules/base.xml.in.h:73
+#: ../rules/base.xml.in.h:76
msgid "At left of 'A'"
msgstr "Links van de ‘A’"
-#: ../rules/base.xml.in.h:74
+#: ../rules/base.xml.in.h:77
+msgid "Austria"
+msgstr "Oostenrijk"
+
+# Oostenrijk?
+#: ../rules/base.xml.in.h:78
+msgid "Aut"
+msgstr "Oos"
+
+#: ../rules/base.xml.in.h:79
+msgid "Avatime"
+msgstr "Avatime"
+
+#: ../rules/base.xml.in.h:80
msgid "Aze"
msgstr "Aze"
-#: ../rules/base.xml.in.h:75
+#: ../rules/base.xml.in.h:81
msgid "Azerbaijan"
msgstr "Azerbeidzjan"
-#: ../rules/base.xml.in.h:76
+#: ../rules/base.xml.in.h:82
msgid "Azona RF2300 wireless Internet Keyboard"
msgstr "Azona RF2300 draadloos internettoetsenbord"
-#: ../rules/base.xml.in.h:77
+#: ../rules/base.xml.in.h:83
msgid "BTC 5090"
msgstr "BTC 5090"
-#: ../rules/base.xml.in.h:78
+#: ../rules/base.xml.in.h:84
msgid "BTC 5113RF Multimedia"
msgstr "BTC 5113RF multimedia"
-#: ../rules/base.xml.in.h:79
+#: ../rules/base.xml.in.h:85
msgid "BTC 5126T"
msgstr "BTC 5126T"
-#: ../rules/base.xml.in.h:80
+#: ../rules/base.xml.in.h:86
msgid "BTC 6301URF"
msgstr "BTC 6301URF"
-#: ../rules/base.xml.in.h:81
+#: ../rules/base.xml.in.h:87
msgid "BTC 9000"
msgstr "BTC 9000"
-#: ../rules/base.xml.in.h:82
+#: ../rules/base.xml.in.h:88
msgid "BTC 9000A"
msgstr "BTC 9000A"
-#: ../rules/base.xml.in.h:83
+#: ../rules/base.xml.in.h:89
msgid "BTC 9001AH"
msgstr "BTC 9001AH"
-#: ../rules/base.xml.in.h:84
+#: ../rules/base.xml.in.h:90
msgid "BTC 9019U"
msgstr "BTC 9019U"
-#: ../rules/base.xml.in.h:85
+#: ../rules/base.xml.in.h:91
msgid "BTC 9116U Mini Wireless Internet and Gaming"
msgstr "BTC 9116U Mini Wireless Internet en Gaming"
-#: ../rules/base.xml.in.h:86
-msgid "Baltic+"
-msgstr "Baltisch+"
-
-#: ../rules/base.xml.in.h:87
-msgid "Ban"
-msgstr "Ban"
+#: ../rules/base.xml.in.h:92
+msgid "Backslash"
+msgstr "Backslash"
-#: ../rules/base.xml.in.h:88
+#: ../rules/base.xml.in.h:93
msgid "Bangladesh"
msgstr "Bangladesh"
-#: ../rules/base.xml.in.h:89
+#: ../rules/base.xml.in.h:94
msgid "Bashkirian"
msgstr "Bashkiriaans"
-#: ../rules/base.xml.in.h:90
+#: ../rules/base.xml.in.h:95
msgid "Bel"
msgstr "Wit"
-#: ../rules/base.xml.in.h:91
+#: ../rules/base.xml.in.h:96
msgid "Belarus"
msgstr "Wit-Rusland"
-#: ../rules/base.xml.in.h:92
+#: ../rules/base.xml.in.h:97
msgid "Belgium"
msgstr "België"
-#: ../rules/base.xml.in.h:93
+#: ../rules/base.xml.in.h:98
msgid "BenQ X-Touch"
msgstr "BenQ X-Touch"
-#: ../rules/base.xml.in.h:94
+#: ../rules/base.xml.in.h:99
msgid "BenQ X-Touch 730"
msgstr "BenQ X-Touch 730"
-#: ../rules/base.xml.in.h:95
+#: ../rules/base.xml.in.h:100
msgid "BenQ X-Touch 800"
msgstr "BenQ X-Touch 800"
-#: ../rules/base.xml.in.h:96
+#: ../rules/base.xml.in.h:101
msgid "Bengali"
msgstr "Bengaals"
-#: ../rules/base.xml.in.h:97
+#: ../rules/base.xml.in.h:102
msgid "Bengali Probhat"
msgstr "Bengaals Probhat"
-#: ../rules/base.xml.in.h:98
+#: ../rules/base.xml.in.h:103
msgid "Bepo, ergonomic, Dvorak way"
msgstr "Bepo, ergonomisch, Dvorak wijze"
-#: ../rules/base.xml.in.h:99
+#: ../rules/base.xml.in.h:104
msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
msgstr "Bepo, ergonomisch, Dvorak wijze, enkel latin-9"
-#: ../rules/base.xml.in.h:100
+#: ../rules/base.xml.in.h:105
+msgid "Bgd"
+msgstr "Bgd"
+
+#: ../rules/base.xml.in.h:106
msgid "Bgr"
msgstr "Bgr"
-#: ../rules/base.xml.in.h:101
-msgid "Bhu"
-msgstr "Bhu"
-
-#: ../rules/base.xml.in.h:102
+#: ../rules/base.xml.in.h:107
msgid "Bhutan"
msgstr "Bhutan"
-#: ../rules/base.xml.in.h:103
+#: ../rules/base.xml.in.h:108
msgid "Biblical Hebrew (Tiro)"
msgstr "Bijbels Hebreeuws (Tiro)"
-#: ../rules/base.xml.in.h:104
+#: ../rules/base.xml.in.h:109
msgid "Bih"
msgstr "Bih"
-#: ../rules/base.xml.in.h:105
+#: ../rules/base.xml.in.h:110
msgid "Blr"
msgstr "Blr"
-#: ../rules/base.xml.in.h:106
+#: ../rules/base.xml.in.h:111
msgid "Bosnia and Herzegovina"
msgstr "Bosnië-Herzegovina"
@@ -467,2387 +490,2705 @@ msgstr "Bosnië-Herzegovina"
# "Beide Alt-toetsen samen verandert de groep."
#
# tezamen/samen/tegelijk
-#: ../rules/base.xml.in.h:107
+#: ../rules/base.xml.in.h:112
msgid "Both Alt keys together"
msgstr "Beide Alt-toetsen samen"
-#: ../rules/base.xml.in.h:108
+#: ../rules/base.xml.in.h:113
msgid "Both Ctrl keys together"
msgstr "Beide Ctrl-toetsen samen"
-#: ../rules/base.xml.in.h:109
+#: ../rules/base.xml.in.h:114
msgid "Both Shift keys together"
msgstr "Beide Shift-toetsen samen"
-#: ../rules/base.xml.in.h:110
+#: ../rules/base.xml.in.h:115
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Beide Shift-toetsen zet de Caps Lock aan/uit."
+
+#: ../rules/base.xml.in.h:116
+msgid "Botswana"
+msgstr "Botswana"
+
+#: ../rules/base.xml.in.h:117
msgid "Bra"
msgstr "Bra"
-#: ../rules/base.xml.in.h:111
+#: ../rules/base.xml.in.h:118
msgid "Braille"
msgstr "Braille"
-#: ../rules/base.xml.in.h:112
+#: ../rules/base.xml.in.h:119
msgid "Brazil"
msgstr "Brazilië"
-#: ../rules/base.xml.in.h:113
+#: ../rules/base.xml.in.h:120
msgid "Breton"
msgstr "Bretons"
-#: ../rules/base.xml.in.h:114
+#: ../rules/base.xml.in.h:121
msgid "Brl"
msgstr "Brl"
-#: ../rules/base.xml.in.h:115
+#: ../rules/base.xml.in.h:122
msgid "Brother Internet Keyboard"
msgstr "Brother internet toetsenbord"
-#: ../rules/base.xml.in.h:116
+#: ../rules/base.xml.in.h:123
+msgid "Btn"
+msgstr "Btn"
+
+#: ../rules/base.xml.in.h:124
msgid "Buckwalter"
msgstr "Buckwalter"
-#: ../rules/base.xml.in.h:117
+#: ../rules/base.xml.in.h:125
msgid "Bulgaria"
msgstr "Bulgarije"
-#: ../rules/base.xml.in.h:118
+#: ../rules/base.xml.in.h:126
+msgid "Bwa"
+msgstr "Bwa"
+
+#: ../rules/base.xml.in.h:127
+msgid "COD"
+msgstr "COD"
+
+#: ../rules/base.xml.in.h:128
msgid "CRULP"
msgstr "CRULP"
-#: ../rules/base.xml.in.h:119
+#: ../rules/base.xml.in.h:129
msgid "Cambodia"
msgstr "Cambodja"
-#: ../rules/base.xml.in.h:120
+#: ../rules/base.xml.in.h:130
msgid "Can"
msgstr "Can"
-#: ../rules/base.xml.in.h:121
+#: ../rules/base.xml.in.h:131
msgid "Canada"
msgstr "Canada"
-#: ../rules/base.xml.in.h:122
+#: ../rules/base.xml.in.h:132
+msgid "Capewell-Dvorak (Baybayin)"
+msgstr "Capewell-Dvorak (Baybayin)"
+
+#: ../rules/base.xml.in.h:133
+msgid "Capewell-Dvorak (Latin)"
+msgstr "Capewell-Dvorak (Latijns)"
+
+#: ../rules/base.xml.in.h:134
+msgid "Capewell-QWERF 2006 (Baybayin)"
+msgstr "Capewell-QWERF 2006 (Baybayin)"
+
+#: ../rules/base.xml.in.h:135
+msgid "Capewell-QWERF 2006 (Latin)"
+msgstr "Capewell-QWERF 2006 (Latijns)"
+
+#: ../rules/base.xml.in.h:136
msgid "Caps Lock"
msgstr "Caps Lock"
-#: ../rules/base.xml.in.h:123
-msgid "CapsLock"
-msgstr "CapsLock"
-
# CapsLock wisselt naar de eerste indeling, Shift+CapsLock wisselt naar de laatste indeling
-#: ../rules/base.xml.in.h:124
-msgid "CapsLock (to first layout), Shift+CapsLock (to last layout)"
-msgstr "CapsLock (naar eerste indeling), Shift+CapsLock (naar laatste indeling)"
+#: ../rules/base.xml.in.h:137
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Caps Lock (naar eerste indeling), Shift+Caps Lock (naar laatste indeling)"
-#: ../rules/base.xml.in.h:125
-msgid "CapsLock (while pressed), Alt+CapsLock does the original capslock action"
-msgstr "CapsLock (ingedrukt houden), Alt+CapsLock geeft de oorspronkelijke capslock actie"
+#: ../rules/base.xml.in.h:138
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Caps Lock (ingedrukt houden), Alt+Caps Lock geeft de oorspronkelijke caps lock actie"
-#: ../rules/base.xml.in.h:126
-msgid "CapsLock acts as Shift with locking. Shift \"pauses\" CapsLock"
-msgstr "CapsLock werkt als Shift met blokkering, Shift heft CapsLock tijdelijk op"
+#: ../rules/base.xml.in.h:139
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock werkt als Shift met blokkering, Shift heft Caps Lock tijdelijk op"
-#: ../rules/base.xml.in.h:127
-msgid "CapsLock acts as Shift with locking. Shift doesn't affect CapsLock"
-msgstr "CapsLock werkt als Shift met blokkering. Shift heft CapsLock niet op"
+#: ../rules/base.xml.in.h:140
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock werkt als Shift met blokkering. Shift heft Caps Lock niet op"
-#: ../rules/base.xml.in.h:128
-msgid "CapsLock is disabled"
-msgstr "CapsLock is uitgezet"
+#: ../rules/base.xml.in.h:141
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock is uitgezet"
-#: ../rules/base.xml.in.h:129
-msgid "CapsLock key behavior"
-msgstr "CapsLock-toets gedrag"
+#: ../rules/base.xml.in.h:142
+msgid "Caps Lock key behavior"
+msgstr "Caps Lock-toets gedrag"
-#: ../rules/base.xml.in.h:130
-msgid "CapsLock toggles Shift so all keys are affected"
-msgstr "CapsLock wisselt Shift op alle toetsen"
+#: ../rules/base.xml.in.h:143
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Caps Lock wisselt Shift op alle toetsen"
# heeft alleen effect op/werkt alleen op/beinvloedt alleen ~
# de alfabetische toetsen/
# bepaalt hoofdletters/kleine letters bij alfabetische tekens.<
-#: ../rules/base.xml.in.h:131
-msgid "CapsLock toggles normal capitalization of alphabetic characters"
-msgstr "CapsLock beïnvloedt alleen de alfabetische toetsen"
+#: ../rules/base.xml.in.h:144
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Caps Lock beïnvloedt alleen de alfabetische toetsen"
-#: ../rules/base.xml.in.h:132
-msgid "CapsLock uses internal capitalization. Shift \"pauses\" CapsLock"
-msgstr "CapsLock gebruikt interne conversie naar hoofdletters. Shift heft CapsLock tijdelijk op"
+#: ../rules/base.xml.in.h:145
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock gebruikt interne conversie naar hoofdletters. Shift heft Caps Lock tijdelijk op"
-#: ../rules/base.xml.in.h:133
-msgid "CapsLock uses internal capitalization. Shift doesn't affect CapsLock"
-msgstr "CapsLock gebruikt interne conversie naar hoofdletters. Shift heft CapsLock niet op"
+#: ../rules/base.xml.in.h:146
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock gebruikt interne conversie naar hoofdletters. Shift heft Caps Lock niet op"
-#: ../rules/base.xml.in.h:134
+#: ../rules/base.xml.in.h:147
msgid "Catalan variant with middle-dot L"
msgstr "Catalaanse variant met midden-punt L"
-#: ../rules/base.xml.in.h:135
+#: ../rules/base.xml.in.h:148
msgid "Cedilla"
msgstr "Cedilla"
-#: ../rules/base.xml.in.h:136
+#: ../rules/base.xml.in.h:149
msgid "Che"
msgstr "Che"
-#: ../rules/base.xml.in.h:137
+#: ../rules/base.xml.in.h:150
msgid "Cherokee"
msgstr "Cherokee"
-#: ../rules/base.xml.in.h:138
+#: ../rules/base.xml.in.h:151
msgid "Cherry B.UNLIMITED"
msgstr "Cherry B.UNLIMITED"
-#: ../rules/base.xml.in.h:139
+#: ../rules/base.xml.in.h:152
msgid "Cherry Blue Line CyBo@rd"
msgstr "Cherry Blue Line CyBo@rd"
-#: ../rules/base.xml.in.h:140
+#: ../rules/base.xml.in.h:153
msgid "Cherry Blue Line CyBo@rd (alternate option)"
msgstr "Cherry Blue Line CyBo@rd (alternatieve optie)"
-#: ../rules/base.xml.in.h:141
+#: ../rules/base.xml.in.h:154
msgid "Cherry CyBo@rd USB-Hub"
msgstr "Cherry CyBo@rd USB-Hub"
-#: ../rules/base.xml.in.h:142
+#: ../rules/base.xml.in.h:155
msgid "Cherry CyMotion Expert"
msgstr "Cherry CyMotion Master Expert"
-#: ../rules/base.xml.in.h:143
+#: ../rules/base.xml.in.h:156
msgid "Cherry CyMotion Master Linux"
msgstr "Cherry CyMotion Master Linux"
-#: ../rules/base.xml.in.h:144
+#: ../rules/base.xml.in.h:157
msgid "Cherry CyMotion Master XPress"
msgstr "Cherry CyMotion Master XPress"
-#: ../rules/base.xml.in.h:145
+#: ../rules/base.xml.in.h:158
msgid "Chicony Internet Keyboard"
msgstr "Chicony internet toetsenbord"
-#: ../rules/base.xml.in.h:146
+#: ../rules/base.xml.in.h:159
msgid "Chicony KB-9885"
msgstr "Chicony KB-9885"
-#: ../rules/base.xml.in.h:147
+#: ../rules/base.xml.in.h:160
msgid "Chicony KU-0108"
msgstr "Chicony KU-0108"
-#: ../rules/base.xml.in.h:148
+#: ../rules/base.xml.in.h:161
msgid "Chicony KU-0420"
msgstr "Chicony KU-0420"
-#: ../rules/base.xml.in.h:149
+#: ../rules/base.xml.in.h:162
msgid "China"
msgstr "China"
-#: ../rules/base.xml.in.h:150
+#: ../rules/base.xml.in.h:163
+msgid "Chn"
+msgstr "Chn"
+
+#: ../rules/base.xml.in.h:164
msgid "Chuvash"
msgstr "Tsjoevasjisch"
-#: ../rules/base.xml.in.h:151
+#: ../rules/base.xml.in.h:165
msgid "Chuvash Latin"
msgstr "Tsjoevasjisch Latijns"
-#: ../rules/base.xml.in.h:152
+#: ../rules/base.xml.in.h:166
msgid "Classic"
msgstr "Klassiek"
-#: ../rules/base.xml.in.h:153
+#: ../rules/base.xml.in.h:167
msgid "Classic Dvorak"
msgstr "Dvorak klassiek"
-#: ../rules/base.xml.in.h:154
+#: ../rules/base.xml.in.h:168
+msgid "Classic, eliminate dead keys"
+msgstr "Klassiek, zonder dode toetsen"
+
+#: ../rules/base.xml.in.h:169
msgid "Classmate PC"
msgstr "Classmate PC"
-#: ../rules/base.xml.in.h:155
+#: ../rules/base.xml.in.h:170
msgid "CloGaelach"
msgstr "CloGaelach"
-#: ../rules/base.xml.in.h:156
+#: ../rules/base.xml.in.h:171
msgid "Colemak"
msgstr "Colemak"
-#: ../rules/base.xml.in.h:157
+#: ../rules/base.xml.in.h:172
+msgid "Colemak (Baybayin)"
+msgstr "Colemak (Baybayin)"
+
+#: ../rules/base.xml.in.h:173
+msgid "Colemak (Latin)"
+msgstr "Colemak (Latijns)"
+
+#: ../rules/base.xml.in.h:174
msgid "Compaq Easy Access Keyboard"
msgstr "Compaq Easy Access toetsenbord"
-#: ../rules/base.xml.in.h:158
+#: ../rules/base.xml.in.h:175
msgid "Compaq Internet Keyboard (13 keys)"
msgstr "Compaq internet toetsenbord (13 toetsen)"
-#: ../rules/base.xml.in.h:159
+#: ../rules/base.xml.in.h:176
msgid "Compaq Internet Keyboard (18 keys)"
msgstr "Compaq internet toetsenbord (18 toetsen)"
-#: ../rules/base.xml.in.h:160
+#: ../rules/base.xml.in.h:177
msgid "Compaq Internet Keyboard (7 keys)"
msgstr "Compaq internet toetsenbord (7 toetsen)"
-#: ../rules/base.xml.in.h:161
+#: ../rules/base.xml.in.h:178
msgid "Compaq iPaq Keyboard"
msgstr "Compaq iPaq toetsenbord"
-#: ../rules/base.xml.in.h:162
+#: ../rules/base.xml.in.h:179
msgid "Compose key position"
msgstr "Samensteltoets positie"
-#: ../rules/base.xml.in.h:163
+#: ../rules/base.xml.in.h:180
msgid "Congo, Democratic Republic of the"
msgstr "Congo, Democratisch republiek van"
-#: ../rules/base.xml.in.h:164
+#: ../rules/base.xml.in.h:181
msgid "Control + Alt + Backspace"
msgstr "Ctrl + Alt + Backspace"
-#: ../rules/base.xml.in.h:165
+#: ../rules/base.xml.in.h:182
msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
msgstr "Ctrl zit op de Alt-toetsen, Alt zit op de Win-toetsen"
-#: ../rules/base.xml.in.h:166
+#: ../rules/base.xml.in.h:183
msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
msgstr "Ctrl zit op de Win-toetsen (en de gebruikelijke Ctrl-toetsen)"
-#: ../rules/base.xml.in.h:167
+#: ../rules/base.xml.in.h:184
msgid "Creative Desktop Wireless 7000"
msgstr "Creative Desktop Wireless 7000"
# Krim-Tataars of Krim-Turks
# http://nl.wikipedia.org/wiki/Krim-Tataars
-#: ../rules/base.xml.in.h:168
+#: ../rules/base.xml.in.h:185
msgid "Crimean Tatar (Dobruca-1 Q)"
msgstr "Krim-Tataars (Dobruca-1 Q)"
-#: ../rules/base.xml.in.h:169
+#: ../rules/base.xml.in.h:186
msgid "Crimean Tatar (Dobruca-2 Q)"
msgstr "Krim-Tataars (Dobruca-2 Q)"
-#: ../rules/base.xml.in.h:170
+#: ../rules/base.xml.in.h:187
msgid "Crimean Tatar (Turkish Alt-Q)"
msgstr "Krim-Tataars (Turks Alt-Q)"
-#: ../rules/base.xml.in.h:171
+#: ../rules/base.xml.in.h:188
msgid "Crimean Tatar (Turkish F)"
msgstr "Krim-Tataars (Turks F)"
-#: ../rules/base.xml.in.h:172
+#: ../rules/base.xml.in.h:189
msgid "Crimean Tatar (Turkish Q)"
msgstr "Krim-Tataars (Turks Q)"
-#: ../rules/base.xml.in.h:173
+#: ../rules/base.xml.in.h:190
msgid "Croatia"
msgstr "Kroatië"
-#: ../rules/base.xml.in.h:174
+#: ../rules/base.xml.in.h:191
msgid "Ctrl key position"
msgstr "Ctrl-toetspositie"
-#: ../rules/base.xml.in.h:175
+#: ../rules/base.xml.in.h:192
msgid "Ctrl+Shift"
msgstr "Ctrl+Shift"
-#: ../rules/base.xml.in.h:176
+#: ../rules/base.xml.in.h:193
msgid "Cyrillic"
msgstr "Cyrillisch"
# Guillemets of ook quillemets zijn Franse aanhalingstekens.
# Dit is "Nederlands" en dit is de «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:177
+#: ../rules/base.xml.in.h:194
msgid "Cyrillic with guillemets"
msgstr "Cyrillisch met Franse aanhalingstekens"
# verwisseld/gewisseld/omgewisseld
-#: ../rules/base.xml.in.h:178
+#: ../rules/base.xml.in.h:195
msgid "Cyrillic, Z and ZHE swapped"
msgstr "Cyrillisch, Z en ZHE omgewisseld"
-#: ../rules/base.xml.in.h:179
+#: ../rules/base.xml.in.h:196
msgid "Cze"
msgstr "Tsj"
-#: ../rules/base.xml.in.h:180
+#: ../rules/base.xml.in.h:197
msgid "Czechia"
msgstr "Tsjechië"
-#: ../rules/base.xml.in.h:181
+#: ../rules/base.xml.in.h:198
msgid "DOS"
msgstr "DOS"
-#: ../rules/base.xml.in.h:182
-msgid "DRC"
-msgstr "DRC"
-
-#: ../rules/base.xml.in.h:183
+#: ../rules/base.xml.in.h:199
msgid "DTK2000"
msgstr "DTK2000"
-#: ../rules/base.xml.in.h:184
-msgid "Dan"
-msgstr "Dan"
-
-#: ../rules/base.xml.in.h:185
+#: ../rules/base.xml.in.h:200
msgid "Dead acute"
msgstr "Dood acutus"
-#: ../rules/base.xml.in.h:186
+#: ../rules/base.xml.in.h:201
msgid "Dead grave acute"
msgstr "Dood gravis-acutus"
# dubbelop numeriek/cijfer
-#: ../rules/base.xml.in.h:187
+#: ../rules/base.xml.in.h:202
msgid "Default numeric keypad keys"
msgstr "Standaard cijferblok-toetsen"
-#: ../rules/base.xml.in.h:188
+#: ../rules/base.xml.in.h:203
msgid "Dell"
msgstr "Dell"
-#: ../rules/base.xml.in.h:189
+#: ../rules/base.xml.in.h:204
msgid "Dell 101-key PC"
msgstr "Dell 101-toetsen PC"
-#: ../rules/base.xml.in.h:190
+#: ../rules/base.xml.in.h:205
msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-#: ../rules/base.xml.in.h:191
+#: ../rules/base.xml.in.h:206
msgid "Dell Laptop/notebook Precision M series"
msgstr "Dell Laptop/notebook Precision M series"
-#: ../rules/base.xml.in.h:192
+#: ../rules/base.xml.in.h:207
msgid "Dell Latitude series laptop"
msgstr "Dell Latitude laptopserie"
-#: ../rules/base.xml.in.h:193
+#: ../rules/base.xml.in.h:208
msgid "Dell Precision M65"
msgstr "Dell Precision M65"
-#: ../rules/base.xml.in.h:194
+#: ../rules/base.xml.in.h:209
msgid "Dell SK-8125"
msgstr "Dell SK-8125"
-#: ../rules/base.xml.in.h:195
+#: ../rules/base.xml.in.h:210
msgid "Dell SK-8135"
msgstr "Dell SK-8135"
-#: ../rules/base.xml.in.h:196
+#: ../rules/base.xml.in.h:211
msgid "Dell USB Multimedia Keyboard"
msgstr "Dell USB multimediatoetsenbord"
-#: ../rules/base.xml.in.h:197
+#: ../rules/base.xml.in.h:212
msgid "Denmark"
msgstr "Denemarken"
-#: ../rules/base.xml.in.h:198
+#: ../rules/base.xml.in.h:213
msgid "Deu"
msgstr "Deu"
-#: ../rules/base.xml.in.h:199
+#: ../rules/base.xml.in.h:214
msgid "Dexxa Wireless Desktop Keyboard"
msgstr "Dexxa Wireless Desktop toetsenbord"
-#: ../rules/base.xml.in.h:200
+#: ../rules/base.xml.in.h:215
msgid "Diamond 9801 / 9802 series"
msgstr "Diamond 9801 / 9802 serie"
-#: ../rules/base.xml.in.h:201
+# denemarken?
+#: ../rules/base.xml.in.h:216
+msgid "Dnk"
+msgstr "Dnk"
+
+#: ../rules/base.xml.in.h:217
msgid "Dvorak"
msgstr "Dvorak"
# interpunctie/leestekens
# het gaat hier waarschijnlijk over de indeling, waar het vraagteken en de
# puntkomma etc. staan.
-#: ../rules/base.xml.in.h:202
+#: ../rules/base.xml.in.h:218
+msgid "Dvorak (Baybayin)"
+msgstr "Dvorak (Baybayin)"
+
+# interpunctie/leestekens
+# het gaat hier waarschijnlijk over de indeling, waar het vraagteken en de
+# puntkomma etc. staan.
+#: ../rules/base.xml.in.h:219
+msgid "Dvorak (Latin)"
+msgstr "Dvorak (Latijns)"
+
+# interpunctie/leestekens
+# het gaat hier waarschijnlijk over de indeling, waar het vraagteken en de
+# puntkomma etc. staan.
+#: ../rules/base.xml.in.h:220
msgid "Dvorak (UK Punctuation)"
msgstr "Dvorak (UK-leestekens)"
-#: ../rules/base.xml.in.h:203
-msgid "Dvorak international"
-msgstr "Dvorak internationaal"
+#: ../rules/base.xml.in.h:221
+msgid "Dvorak alternative international (no dead keys)"
+msgstr "Dvorak alternatief internationaal (geen dode toetsen)"
-#: ../rules/base.xml.in.h:204
+#: ../rules/base.xml.in.h:222
+msgid "Dvorak international (with dead keys)"
+msgstr "Dvorak internationaal (met dode toetsen)"
+
+#: ../rules/base.xml.in.h:223
msgid "Dvorak, Polish quotes on key 1"
msgstr "Dvorak, Poolse aanhalingstekens op toets 1"
-#: ../rules/base.xml.in.h:205
+#: ../rules/base.xml.in.h:224
msgid "Dvorak, Polish quotes on quotemark key"
msgstr "Dvorak, Poolse aanhalingstekens op aanhalingstekentoets"
-#: ../rules/base.xml.in.h:206
-msgid "E"
-msgstr "E"
-
# oostelijk/oosters
-#: ../rules/base.xml.in.h:207
+#: ../rules/base.xml.in.h:225
msgid "Eastern"
msgstr "Oosters"
-#: ../rules/base.xml.in.h:208
+#: ../rules/base.xml.in.h:226
msgid "Eliminate dead keys"
msgstr "Geen dode toetsen"
-#: ../rules/base.xml.in.h:209
+#: ../rules/base.xml.in.h:227
msgid "Enable extra typographic characters"
msgstr "Extra typografische tekens aanzetten"
-#: ../rules/base.xml.in.h:210
+#: ../rules/base.xml.in.h:228
msgid "English"
msgstr "Engels"
-#: ../rules/base.xml.in.h:211
+#: ../rules/base.xml.in.h:229
+msgid "English (USA International)"
+msgstr "Engels (USA internationaal)"
+
+#: ../rules/base.xml.in.h:230
+msgid "English (USA Macintosh)"
+msgstr "Engels (USA Macintosh)"
+
+#: ../rules/base.xml.in.h:231
+msgid "English with RupeeSign"
+msgstr "Engels met Rupee-teken"
+
+#: ../rules/base.xml.in.h:232
msgid "Ennyah DKB-1008"
msgstr "Ennyah DKB-1008"
-#: ../rules/base.xml.in.h:212
+#: ../rules/base.xml.in.h:233
msgid "Enter on keypad"
msgstr "Enter op cijferblok"
-#: ../rules/base.xml.in.h:213
+#: ../rules/base.xml.in.h:234
msgid "Epo"
msgstr "Epo"
-#: ../rules/base.xml.in.h:214
+#: ../rules/base.xml.in.h:235
msgid "Ergonomic"
msgstr "Ergonomisch"
-#: ../rules/base.xml.in.h:215
+#: ../rules/base.xml.in.h:236
msgid "Esp"
msgstr "Esp"
-#: ../rules/base.xml.in.h:216
+#: ../rules/base.xml.in.h:237
msgid "Esperanto"
msgstr "Esperanto"
-#: ../rules/base.xml.in.h:217
+#: ../rules/base.xml.in.h:238
msgid "Est"
msgstr "Est"
-#: ../rules/base.xml.in.h:218
+#: ../rules/base.xml.in.h:239
msgid "Estonia"
msgstr "Estland"
-#: ../rules/base.xml.in.h:219
+#: ../rules/base.xml.in.h:240
msgid "Eth"
msgstr "Eth"
-#: ../rules/base.xml.in.h:220
+#: ../rules/base.xml.in.h:241
msgid "Ethiopia"
msgstr "Ethiopië"
-#: ../rules/base.xml.in.h:221
-msgid "Evdev-managed keyboard"
-msgstr "Evdev-beheerd toetsenbord"
+# Rusland<
+#: ../rules/base.xml.in.h:242
+msgid "Euro on 2"
+msgstr "Euro-teken op 2"
-#: ../rules/base.xml.in.h:222
+#: ../rules/base.xml.in.h:243
+msgid "Euro on 4"
+msgstr "Euro-teken op 4"
+
+#: ../rules/base.xml.in.h:244
+msgid "Euro on 5"
+msgstr "Euro-teken op 5"
+
+#: ../rules/base.xml.in.h:245
+msgid "Euro on E"
+msgstr "Euro-teken op E"
+
+#: ../rules/base.xml.in.h:246
msgid "Everex STEPnote"
msgstr "Everex STEPnote"
-#: ../rules/base.xml.in.h:223
+#: ../rules/base.xml.in.h:247
msgid "Ewe"
msgstr "Ewe"
-#: ../rules/base.xml.in.h:224
+#: ../rules/base.xml.in.h:248
msgid "Extended"
msgstr "Uitgebreid"
-#: ../rules/base.xml.in.h:225
+#: ../rules/base.xml.in.h:249
msgid "Extended - Winkeys"
msgstr "Uitgebreid - Win-toetsen"
-#: ../rules/base.xml.in.h:226
+#: ../rules/base.xml.in.h:250
msgid "Extended Backslash"
msgstr "Brede backslash"
-#: ../rules/base.xml.in.h:227
+#: ../rules/base.xml.in.h:251
msgid "F-letter (F) variant"
msgstr "F-letter (F) variant"
-#: ../rules/base.xml.in.h:228
+#: ../rules/base.xml.in.h:252
msgid "FL90"
msgstr "FL90"
-#: ../rules/base.xml.in.h:229
-msgid "Fao"
-msgstr "Fao"
-
-#: ../rules/base.xml.in.h:230
+#: ../rules/base.xml.in.h:253
msgid "Faroe Islands"
msgstr "Faeröer-eilanden"
-#: ../rules/base.xml.in.h:231
+#: ../rules/base.xml.in.h:254
msgid "Fin"
msgstr "Fin"
-#: ../rules/base.xml.in.h:232
+#: ../rules/base.xml.in.h:255
msgid "Finland"
msgstr "Finland"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:235
+#: ../rules/base.xml.in.h:258
msgid "Four-level key with abstract separators"
msgstr "Vier-niveaus toets met abstracte scheidingstekens"
-#: ../rules/base.xml.in.h:236
+#: ../rules/base.xml.in.h:259
msgid "Four-level key with comma"
msgstr "Vier-niveaus toets met komma"
-#: ../rules/base.xml.in.h:237
+#: ../rules/base.xml.in.h:260
msgid "Four-level key with dot"
msgstr "Vier-niveaus toets met punt"
-#: ../rules/base.xml.in.h:238
+#: ../rules/base.xml.in.h:261
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Vier-niveaus toets met punt, latin-9 restrictie"
-#: ../rules/base.xml.in.h:239
+#: ../rules/base.xml.in.h:262
msgid "Four-level key with momayyez"
msgstr "Vier-niveaus toets met momayyez"
-#: ../rules/base.xml.in.h:240
+#: ../rules/base.xml.in.h:263
msgid "Fra"
msgstr "Fra"
-#: ../rules/base.xml.in.h:241
+#: ../rules/base.xml.in.h:264
msgid "France"
msgstr "Frankrijk"
-#: ../rules/base.xml.in.h:242
+# waarom Francais en niet French?
+#: ../rules/base.xml.in.h:265
+msgid "Français (France Alternative)"
+msgstr "Frans (Frankrijk alternatief)"
+
+#: ../rules/base.xml.in.h:266
msgid "French"
msgstr "Frans"
-#: ../rules/base.xml.in.h:243
+#: ../rules/base.xml.in.h:267
msgid "French (Macintosh)"
msgstr "Frans (Macintosh)"
-#: ../rules/base.xml.in.h:244
+#: ../rules/base.xml.in.h:268
msgid "French (legacy)"
msgstr "Frans (oud)"
-#: ../rules/base.xml.in.h:245
+#: ../rules/base.xml.in.h:269
msgid "French Dvorak"
msgstr "Frans-Dvorak"
-#: ../rules/base.xml.in.h:246
+#: ../rules/base.xml.in.h:270
msgid "French, Sun dead keys"
msgstr "Frans, Sun-dode toetsen"
-#: ../rules/base.xml.in.h:247
+#: ../rules/base.xml.in.h:271
msgid "French, eliminate dead keys"
msgstr "Frans, zonder dode toetsen"
-#: ../rules/base.xml.in.h:248
+#: ../rules/base.xml.in.h:272
+msgid "Fro"
+msgstr "Fro"
+
+#: ../rules/base.xml.in.h:273
msgid "Fujitsu-Siemens Computers AMILO laptop"
msgstr "Fujitsu-Siemens Computers AMILO laptop"
-#: ../rules/base.xml.in.h:249
+#: ../rules/base.xml.in.h:274
msgid "Fula"
msgstr "Fula"
-#: ../rules/base.xml.in.h:250
+#: ../rules/base.xml.in.h:275
msgid "GBr"
msgstr "GBr"
-#: ../rules/base.xml.in.h:251
+#: ../rules/base.xml.in.h:276
+msgid "GILLBT"
+msgstr "GILLBT"
+
+#: ../rules/base.xml.in.h:277
msgid "Ga"
msgstr "Ga"
-#: ../rules/base.xml.in.h:252
+#: ../rules/base.xml.in.h:278
msgid "Generic 101-key PC"
msgstr "Algemeen 101-toetsen PC"
-#: ../rules/base.xml.in.h:253
+#: ../rules/base.xml.in.h:279
msgid "Generic 102-key (Intl) PC"
msgstr "Algemeen 102-toetsen (internationaal) PC"
-#: ../rules/base.xml.in.h:254
+#: ../rules/base.xml.in.h:280
msgid "Generic 104-key PC"
msgstr "Algemeen 104-toetsen PC"
-#: ../rules/base.xml.in.h:255
+#: ../rules/base.xml.in.h:281
msgid "Generic 105-key (Intl) PC"
msgstr "Algemeen 105-toetsen (internationaal) PC"
-#: ../rules/base.xml.in.h:256
+#: ../rules/base.xml.in.h:282
msgid "Genius Comfy KB-12e"
msgstr "Genius Comfy KB-12e"
-#: ../rules/base.xml.in.h:257
+#: ../rules/base.xml.in.h:283
msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
msgstr "Genius Comfy KB-16M / Genius MM toetsenbord KWD-910"
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:284
msgid "Genius Comfy KB-21e-Scroll"
msgstr "Genius Comfy KB-21e-Scroll"
-#: ../rules/base.xml.in.h:259
+#: ../rules/base.xml.in.h:285
msgid "Genius KB-19e NB"
msgstr "Genius KB-19e NB"
-#: ../rules/base.xml.in.h:260
+#: ../rules/base.xml.in.h:286
msgid "Genius KKB-2050HS"
msgstr "Genius KKB-2050HS"
-#: ../rules/base.xml.in.h:261
+#: ../rules/base.xml.in.h:287
msgid "Geo"
msgstr "Geo"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:288
msgid "Georgia"
msgstr "Georgië"
-#: ../rules/base.xml.in.h:263
+#: ../rules/base.xml.in.h:289
msgid "Georgian"
msgstr "Georgisch"
-#: ../rules/base.xml.in.h:264
+#: ../rules/base.xml.in.h:290
msgid "Georgian AZERTY Tskapo"
msgstr "Georgisch AZERTY Tskapo"
-#: ../rules/base.xml.in.h:265
+#: ../rules/base.xml.in.h:291
msgid "German (Macintosh)"
msgstr "Duits (Macintosh)"
-#: ../rules/base.xml.in.h:266
+#: ../rules/base.xml.in.h:292
msgid "German, Sun dead keys"
msgstr "Duits, Sun-dode toetsen"
-#: ../rules/base.xml.in.h:267
+#: ../rules/base.xml.in.h:293
msgid "German, eliminate dead keys"
msgstr "Duits, zonder dode toetsen"
-#: ../rules/base.xml.in.h:268
+#: ../rules/base.xml.in.h:294
msgid "Germany"
msgstr "Duitsland"
-#: ../rules/base.xml.in.h:269
+#: ../rules/base.xml.in.h:295
msgid "Gha"
msgstr "Gha"
-#: ../rules/base.xml.in.h:270
+#: ../rules/base.xml.in.h:296
msgid "Ghana"
msgstr "Ghana"
-#: ../rules/base.xml.in.h:271
-msgid "Gre"
-msgstr "Gri"
+#: ../rules/base.xml.in.h:297
+msgid "Gin"
+msgstr "Gin"
-#: ../rules/base.xml.in.h:272
+#: ../rules/base.xml.in.h:298
+msgid "Grc"
+msgstr "Grc"
+
+#: ../rules/base.xml.in.h:299
msgid "Greece"
msgstr "Griekenland"
-#: ../rules/base.xml.in.h:273
-msgid "Group toggle on multiply/divide key"
-msgstr "Groepswissel met de toets vermenigvuldigen/delen"
-
-#: ../rules/base.xml.in.h:274
-msgid "Gui"
-msgstr "Gui"
-
-#: ../rules/base.xml.in.h:275
+#: ../rules/base.xml.in.h:300
msgid "Guinea"
msgstr "Guinea"
-#: ../rules/base.xml.in.h:276
+#: ../rules/base.xml.in.h:301
msgid "Gujarati"
msgstr "Gujarati"
-#: ../rules/base.xml.in.h:277
+#: ../rules/base.xml.in.h:302
msgid "Gurmukhi"
msgstr "Gurmukhi"
-#: ../rules/base.xml.in.h:278
+#: ../rules/base.xml.in.h:303
msgid "Gurmukhi Jhelum"
msgstr "Gurmukhi Jhelum"
# het zal wel een merk zijn
-#: ../rules/base.xml.in.h:279
+#: ../rules/base.xml.in.h:304
msgid "Gyration"
msgstr "Gyration"
-#: ../rules/base.xml.in.h:280
+#: ../rules/base.xml.in.h:305
+msgid "HTC Dream"
+msgstr "HTC Dream"
+
+#: ../rules/base.xml.in.h:306
msgid "Happy Hacking Keyboard"
msgstr "Happy Hacking toetsenbord"
-#: ../rules/base.xml.in.h:281
+#: ../rules/base.xml.in.h:307
msgid "Happy Hacking Keyboard for Mac"
msgstr "Happy Hacking toetsenbord voor Mac"
-#: ../rules/base.xml.in.h:282
+#: ../rules/base.xml.in.h:308
msgid "Hausa"
msgstr "Hausa"
-#: ../rules/base.xml.in.h:283
+#: ../rules/base.xml.in.h:309
msgid "Hewlett-Packard Internet Keyboard"
msgstr "Hewlett-Packard internet toetsenbord"
-#: ../rules/base.xml.in.h:284
+#: ../rules/base.xml.in.h:310
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
+
+#: ../rules/base.xml.in.h:311
msgid "Hewlett-Packard Omnibook 500 FA"
msgstr "Hewlett-Packard Omnibook 500 FA"
-#: ../rules/base.xml.in.h:285
+#: ../rules/base.xml.in.h:312
msgid "Hewlett-Packard Omnibook 5xx"
msgstr "Hewlett-Packard Omnibook 5xx"
-#: ../rules/base.xml.in.h:286
+#: ../rules/base.xml.in.h:313
msgid "Hewlett-Packard Omnibook 6000/6100"
msgstr "Hewlett-Packard Omnibook 6000/6100"
-#: ../rules/base.xml.in.h:287
+#: ../rules/base.xml.in.h:314
msgid "Hewlett-Packard Omnibook XE3 GC"
msgstr "Hewlett-Packard Omnibook XE3 GC"
-#: ../rules/base.xml.in.h:288
+#: ../rules/base.xml.in.h:315
msgid "Hewlett-Packard Omnibook XE3 GF"
msgstr "Hewlett-Packard Omnibook XE3 GF"
-#: ../rules/base.xml.in.h:289
+#: ../rules/base.xml.in.h:316
msgid "Hewlett-Packard Omnibook XT1000"
msgstr "Hewlett-Packard Omnibook XT1000"
-#: ../rules/base.xml.in.h:290
+#: ../rules/base.xml.in.h:317
msgid "Hewlett-Packard Pavilion ZT11xx"
msgstr "Hewlett-Packard Pavilion ZT11xx"
-#: ../rules/base.xml.in.h:291
+#: ../rules/base.xml.in.h:318
msgid "Hewlett-Packard Pavilion dv5"
msgstr "Hewlett-Packard Pavilion dv5"
-#: ../rules/base.xml.in.h:292
+#: ../rules/base.xml.in.h:319
msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
msgstr "Hewlett-Packard SK-250x multimedia toetsenbord"
-#: ../rules/base.xml.in.h:293
+#: ../rules/base.xml.in.h:320
msgid "Hewlett-Packard nx9020"
msgstr "Hewlett-Packard nx9020"
-#: ../rules/base.xml.in.h:294
+#: ../rules/base.xml.in.h:321
msgid "Hexadecimal"
msgstr "Hexadecimaal"
-#: ../rules/base.xml.in.h:295
+#: ../rules/base.xml.in.h:322
msgid "Hindi Bolnagri"
msgstr "Hindi Bolnagri"
-#: ../rules/base.xml.in.h:296
+#: ../rules/base.xml.in.h:323
msgid "Hindi Wx"
msgstr "Hindi Wx"
# gelijkklinkend/homofonetisch/homofonisch
-#: ../rules/base.xml.in.h:297
+#: ../rules/base.xml.in.h:324
msgid "Homophonic"
msgstr "Homofonisch"
-#: ../rules/base.xml.in.h:298
+#: ../rules/base.xml.in.h:325
msgid "Honeywell Euroboard"
msgstr "Honeywell Euroboard"
# Kro/Hrv
-#: ../rules/base.xml.in.h:299
+#: ../rules/base.xml.in.h:326
msgid "Hrv"
msgstr "Hrv"
-#: ../rules/base.xml.in.h:300
+#: ../rules/base.xml.in.h:327
+msgid "Htc Dream phone"
+msgstr "Htc Dream phone"
+
+#: ../rules/base.xml.in.h:328
msgid "Hun"
msgstr "Hon"
-#: ../rules/base.xml.in.h:301
+#: ../rules/base.xml.in.h:329
msgid "Hungary"
msgstr "Hongarije"
-#: ../rules/base.xml.in.h:302
+#: ../rules/base.xml.in.h:330
msgid "Hyper is mapped to Win-keys"
msgstr "Hyper zit op de Win-toetsen"
-#: ../rules/base.xml.in.h:303
+#: ../rules/base.xml.in.h:331
msgid "IBM (LST 1205-92)"
msgstr "IBM (LST 1205-92)"
-#: ../rules/base.xml.in.h:304
+#: ../rules/base.xml.in.h:332
msgid "IBM Rapid Access"
msgstr "IBM Rapid Access"
-#: ../rules/base.xml.in.h:305
+#: ../rules/base.xml.in.h:333
msgid "IBM Rapid Access II"
msgstr "IBM Rapid Access II"
-#: ../rules/base.xml.in.h:306
+#: ../rules/base.xml.in.h:334
msgid "IBM Space Saver"
msgstr "IBM Space Saver"
-#: ../rules/base.xml.in.h:307
+#: ../rules/base.xml.in.h:335
msgid "IBM ThinkPad 560Z/600/600E/A22E"
msgstr "IBM ThinkPad 560Z/600/600E/A22E"
-#: ../rules/base.xml.in.h:308
-msgid "IBM ThinkPad 560Z/600/600E/A22E, Intl"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E, Intl"
-
-#: ../rules/base.xml.in.h:309
+#: ../rules/base.xml.in.h:336
msgid "IBM ThinkPad R60/T60/R61/T61"
msgstr "IBM ThinkPad R60/T60/R61/T61"
-#: ../rules/base.xml.in.h:310
+#: ../rules/base.xml.in.h:337
msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-#: ../rules/base.xml.in.h:311
+#: ../rules/base.xml.in.h:338
msgid "ISO Alternate"
msgstr "ISO alternatief"
-#: ../rules/base.xml.in.h:312
+#: ../rules/base.xml.in.h:339
msgid "Iceland"
msgstr "IJsland"
-#: ../rules/base.xml.in.h:313
+#: ../rules/base.xml.in.h:340
msgid "Igbo"
msgstr "Igbo"
# met/bijvoegen
# inactieve/dode/latente
-#: ../rules/base.xml.in.h:314
+#: ../rules/base.xml.in.h:341
msgid "Include dead tilde"
msgstr "Met dode tilde"
-#: ../rules/base.xml.in.h:315
+#: ../rules/base.xml.in.h:342
msgid "Ind"
msgstr "Ind"
-#: ../rules/base.xml.in.h:316
+#: ../rules/base.xml.in.h:343
msgid "India"
msgstr "India"
-#: ../rules/base.xml.in.h:317
+#: ../rules/base.xml.in.h:344
msgid "International (AltGr dead keys)"
msgstr "Internationaal (AltGr dode toetsen)"
-#: ../rules/base.xml.in.h:318
+#: ../rules/base.xml.in.h:345
msgid "International (with dead keys)"
msgstr "Internationaal (met dode toetsen)"
-#: ../rules/base.xml.in.h:319
+#: ../rules/base.xml.in.h:346
msgid "Inuktitut"
msgstr "Inuktitut"
-#: ../rules/base.xml.in.h:320
+#: ../rules/base.xml.in.h:347 ../rules/base.extras.xml.in.h:8
msgid "Iran"
msgstr "Iran"
-#: ../rules/base.xml.in.h:321
+#: ../rules/base.xml.in.h:348
msgid "Iraq"
msgstr "Irak"
-#: ../rules/base.xml.in.h:322
+#: ../rules/base.xml.in.h:349
msgid "Ireland"
msgstr "Ierland"
-#: ../rules/base.xml.in.h:323
+#: ../rules/base.xml.in.h:350
msgid "Irl"
msgstr "Irl"
-#: ../rules/base.xml.in.h:324
+#: ../rules/base.xml.in.h:351
msgid "Irn"
msgstr "Irn"
-#: ../rules/base.xml.in.h:325
+#: ../rules/base.xml.in.h:352
msgid "Irq"
msgstr "Irq"
-#: ../rules/base.xml.in.h:326
+#: ../rules/base.xml.in.h:353
msgid "Isl"
msgstr "Isl"
-#: ../rules/base.xml.in.h:327
+#: ../rules/base.xml.in.h:354
msgid "Isr"
msgstr "Isr"
-#: ../rules/base.xml.in.h:328
+#: ../rules/base.xml.in.h:355
msgid "Israel"
msgstr "Israël"
-#: ../rules/base.xml.in.h:329
+#: ../rules/base.xml.in.h:356
msgid "Ita"
msgstr "Ita"
-#: ../rules/base.xml.in.h:330
+#: ../rules/base.xml.in.h:357
msgid "Italy"
msgstr "Italië"
-#: ../rules/base.xml.in.h:331
+#: ../rules/base.xml.in.h:358
msgid "Japan"
msgstr "Japan"
-#: ../rules/base.xml.in.h:332
+#: ../rules/base.xml.in.h:359
msgid "Japan (PC-98xx Series)"
msgstr "Japan (PC-98xx serie)"
-#: ../rules/base.xml.in.h:333
+#: ../rules/base.xml.in.h:360
msgid "Japanese keyboard options"
msgstr "Japanse toetsenbordopties"
-#: ../rules/base.xml.in.h:334
+#: ../rules/base.xml.in.h:361
msgid "Jpn"
msgstr "Jpn"
-#: ../rules/base.xml.in.h:335
+#: ../rules/base.xml.in.h:362
msgid "Kalmyk"
msgstr "Kalmyk"
-#: ../rules/base.xml.in.h:336
+#: ../rules/base.xml.in.h:363
msgid "Kana"
msgstr "Kana"
-#: ../rules/base.xml.in.h:337
+#: ../rules/base.xml.in.h:364
+msgid "Kana 86"
+msgstr "Kana 86"
+
+#: ../rules/base.xml.in.h:365
msgid "Kana Lock key is locking"
msgstr "Kana Lock-toets is blokkerend"
-#: ../rules/base.xml.in.h:338
+#: ../rules/base.xml.in.h:366
msgid "Kannada"
msgstr "Kannada"
-#: ../rules/base.xml.in.h:339
+#: ../rules/base.xml.in.h:367
msgid "Kashubian"
msgstr "Kasjoebiaans"
-#: ../rules/base.xml.in.h:340
+#: ../rules/base.xml.in.h:368
msgid "Kaz"
msgstr "Kaz"
# de taal Kazachstaans
-#: ../rules/base.xml.in.h:341
+#: ../rules/base.xml.in.h:369
msgid "Kazakh with Russian"
msgstr "Kazachstaans met Russisch"
-#: ../rules/base.xml.in.h:342
+#: ../rules/base.xml.in.h:370
msgid "Kazakhstan"
msgstr "Kazachstan"
+#: ../rules/base.xml.in.h:371
+msgid "Ken"
+msgstr "Ken"
+
+#: ../rules/base.xml.in.h:372
+msgid "Kenya"
+msgstr "Kenia"
+
# om zeep te helpen/af te breken/te stoppen/
-#: ../rules/base.xml.in.h:343
+#: ../rules/base.xml.in.h:373
msgid "Key sequence to kill the X server"
msgstr "Toetscombinatie om de X-server af te breken"
-# aan te zetten/te kiezen/te selecteren/te krijgen
-#
+# aan te zetten/te kiezen/te selecteren/te krijgen/te bereiken
+# voor het derde niveau
# 'to choose' is hier een slechte woordkeuze IMO
-#: ../rules/base.xml.in.h:344
+#: ../rules/base.xml.in.h:374
msgid "Key to choose 3rd level"
msgstr "De toets om het 3e niveau te krijgen"
+# aan te zetten/te kiezen/te selecteren/te krijgen
+#
+# 'to choose' is hier een slechte woordkeuze IMO
+#: ../rules/base.xml.in.h:375
+msgid "Key to choose 5th level"
+msgstr "De toets om het 5e niveau te krijgen"
+
# wijzigen/veranderen
-#: ../rules/base.xml.in.h:345
+#: ../rules/base.xml.in.h:376
msgid "Key(s) to change layout"
msgstr "De toets(en) om de indeling te veranderen"
-#: ../rules/base.xml.in.h:346
+#: ../rules/base.xml.in.h:377
msgid "Keytronic FlexPro"
msgstr "Keytronic FlexPro"
-#: ../rules/base.xml.in.h:347
+#: ../rules/base.xml.in.h:378
msgid "Kgz"
msgstr "Kgz"
-#: ../rules/base.xml.in.h:348
+#: ../rules/base.xml.in.h:379
msgid "Khm"
msgstr "Khm"
-#: ../rules/base.xml.in.h:349
+#: ../rules/base.xml.in.h:380
+msgid "Kikuyu"
+msgstr "Kikuyu"
+
+#: ../rules/base.xml.in.h:381
+msgid "Kinesis"
+msgstr "Kinesis"
+
+#: ../rules/base.xml.in.h:382
msgid "Komi"
msgstr "Komi"
-#: ../rules/base.xml.in.h:350
+#: ../rules/base.xml.in.h:383
msgid "Kor"
msgstr "Kor"
-#: ../rules/base.xml.in.h:351
+#: ../rules/base.xml.in.h:384
msgid "Korea, Republic of"
msgstr "Korea, Republiek"
-#: ../rules/base.xml.in.h:352
+#: ../rules/base.xml.in.h:385
msgid "Ktunaxa"
msgstr "Ktunaxa"
-#: ../rules/base.xml.in.h:353
+#: ../rules/base.xml.in.h:386
msgid "Kurdish, (F)"
msgstr "Koerdisch, (F)"
-#: ../rules/base.xml.in.h:354
+#: ../rules/base.xml.in.h:387
msgid "Kurdish, Arabic-Latin"
msgstr "Koerdisch, Arabisch-Latijns"
-#: ../rules/base.xml.in.h:355
+#: ../rules/base.xml.in.h:388
msgid "Kurdish, Latin Alt-Q"
msgstr "Koerdisch, Latijns Alt-Q"
-#: ../rules/base.xml.in.h:356
+#: ../rules/base.xml.in.h:389
msgid "Kurdish, Latin Q"
msgstr "Koerdisch, Latijns Q"
-#: ../rules/base.xml.in.h:357
+#: ../rules/base.xml.in.h:390
msgid "Kyrgyzstan"
msgstr "Kirgizië"
-#: ../rules/base.xml.in.h:358
-msgid "LAm"
-msgstr "LAm"
-
-#: ../rules/base.xml.in.h:359
+#: ../rules/base.xml.in.h:391
msgid "LEKP"
msgstr "LEKP"
-#: ../rules/base.xml.in.h:360
+#: ../rules/base.xml.in.h:392
msgid "LEKPa"
msgstr "LEKPa"
-#: ../rules/base.xml.in.h:361
+#: ../rules/base.xml.in.h:393
msgid "Lao"
msgstr "Lao"
-#: ../rules/base.xml.in.h:362
+#: ../rules/base.xml.in.h:394
msgid "Laos"
msgstr "Laos"
-#: ../rules/base.xml.in.h:363
+#: ../rules/base.xml.in.h:395
msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
msgstr "Laptop/notebook Compaq (bijv. Armada) laptop toetsenbord"
-#: ../rules/base.xml.in.h:364
+#: ../rules/base.xml.in.h:396
msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
msgstr "Laptop/notebook Compaq (bijv. Presario) internet toetsenbord"
-#: ../rules/base.xml.in.h:365
+#: ../rules/base.xml.in.h:397
msgid "Laptop/notebook eMachines m68xx"
msgstr "Laptop/notebook eMachines m68xx"
-#: ../rules/base.xml.in.h:366
+#: ../rules/base.xml.in.h:398
msgid "Latin"
msgstr "Latijns"
-#: ../rules/base.xml.in.h:367
+#: ../rules/base.xml.in.h:399
msgid "Latin American"
msgstr "Latijns-Amerika"
-#: ../rules/base.xml.in.h:368
+#: ../rules/base.xml.in.h:400
msgid "Latin Unicode"
msgstr "Latijns-Unicode"
-#: ../rules/base.xml.in.h:369
+#: ../rules/base.xml.in.h:401
msgid "Latin Unicode qwerty"
msgstr "Latijns-Unicode qwerty"
-#: ../rules/base.xml.in.h:370
+#: ../rules/base.xml.in.h:402
msgid "Latin qwerty"
msgstr "Latijns qwerty"
-#: ../rules/base.xml.in.h:371
+#: ../rules/base.xml.in.h:403
msgid "Latin unicode"
msgstr "Latijns-unicode"
-#: ../rules/base.xml.in.h:372
+#: ../rules/base.xml.in.h:404
msgid "Latin unicode qwerty"
msgstr "Latijns-unicode qwerty"
# Guillemets of ook quillemets zijn Franse aanhalingstekens.
# Dit is "Nederlands" en dit is de «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:373
+#: ../rules/base.xml.in.h:405
msgid "Latin with guillemets"
msgstr "Latijns met Franse aanhalingstekens"
-#: ../rules/base.xml.in.h:374
+#: ../rules/base.xml.in.h:406
msgid "Latvia"
msgstr "Letland"
-#: ../rules/base.xml.in.h:375
-msgid "Lav"
-msgstr "Lav"
+#: ../rules/base.xml.in.h:407
+msgid "Layout toggle on multiply/divide key"
+msgstr "Indeling wisselen met de toetsen vermenigvuldigen/delen"
-#: ../rules/base.xml.in.h:376
+#: ../rules/base.xml.in.h:408
msgid "Left Alt"
msgstr "Linker Alt-toets"
-#: ../rules/base.xml.in.h:377
+#: ../rules/base.xml.in.h:409
msgid "Left Alt (while pressed)"
msgstr "Linker Alt-toets (ingedrukt houden)"
-#: ../rules/base.xml.in.h:378
+#: ../rules/base.xml.in.h:410
msgid "Left Alt is swapped with Left Win"
msgstr "De linker Alt-toets en Win-toets worden gewisseld"
-#: ../rules/base.xml.in.h:379
+#: ../rules/base.xml.in.h:411
msgid "Left Ctrl"
msgstr "Linker Ctrl-toets"
-# -toets toevoegen?
-#: ../rules/base.xml.in.h:380
+# Linker Win-toets wisselt naar de eerste indeling, rechter Win/Menu-toets wisselt naar de laatste indeling
+# vorige indeling/laatste indeling
+#: ../rules/base.xml.in.h:412
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Linker Ctrl-toets (naar de eerste indeling), rechter Ctrl-toets (naar de laatste indeling)"
+
+# Linker Ctrl + Shift-toets
+#: ../rules/base.xml.in.h:413
msgid "Left Ctrl+Left Shift"
msgstr "Linker Ctrl + linker Shift-toets"
-#: ../rules/base.xml.in.h:381
+#: ../rules/base.xml.in.h:414
msgid "Left Shift"
msgstr "Linker Shift-toets"
-#: ../rules/base.xml.in.h:382
+#: ../rules/base.xml.in.h:415
msgid "Left Win"
msgstr "Linker Win-toets"
# Linker Win-toets wisselt naar de eerste indeling, rechter Win/Menu-toets wisselt naar de laatste indeling
-#: ../rules/base.xml.in.h:383
+#: ../rules/base.xml.in.h:416
msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
msgstr "Linker Win-toets (naar de eerste indeling), rechter Win/Menu-toets (naar de laatste indeling)"
-#: ../rules/base.xml.in.h:384
+#: ../rules/base.xml.in.h:417
msgid "Left Win (while pressed)"
msgstr "Linker Win-toets (ingedrukt houden)"
-#: ../rules/base.xml.in.h:385
+#: ../rules/base.xml.in.h:418
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Linker Win-toets geeft het 5de niveau en is blijvend wanneer het ingedrukt wordt samen met een andere 5de niveau-kiezer"
+
+#: ../rules/base.xml.in.h:419
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Linker Win-toets geeft het 5de niveau en is blijvend wanneer het ingedrukt wordt samen met een andere 5de niveau-kiezer, één toetsaanslag heft het niveau op"
+
+#: ../rules/base.xml.in.h:420
msgid "Left hand"
msgstr "Linkshandig"
-#: ../rules/base.xml.in.h:386
+#: ../rules/base.xml.in.h:421
msgid "Left handed Dvorak"
msgstr "Linkshandige Dvorak"
-#: ../rules/base.xml.in.h:387
+#: ../rules/base.xml.in.h:422
msgid "Legacy"
msgstr "Historisch"
-#: ../rules/base.xml.in.h:388
+#: ../rules/base.xml.in.h:423
msgid "Legacy Wang 724"
msgstr "Historisch Wang 724"
#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:390
+#: ../rules/base.xml.in.h:425
msgid "Legacy key with comma"
msgstr "Historisch cijferblok met komma"
-#: ../rules/base.xml.in.h:391
+#: ../rules/base.xml.in.h:426
msgid "Legacy key with dot"
msgstr "Historisch cijferblok met punt"
-#: ../rules/base.xml.in.h:392
-msgid "Less-than/Greater-than"
-msgstr "Groter dan/Kleiner dan"
-
-#: ../rules/base.xml.in.h:393
+#: ../rules/base.xml.in.h:427
msgid "Lithuania"
msgstr "Litouwen"
-#: ../rules/base.xml.in.h:394
+#: ../rules/base.xml.in.h:428
+msgid "Lka"
+msgstr "Lka"
+
+#: ../rules/base.xml.in.h:429
msgid "Logitech Access Keyboard"
msgstr "Logitech Access toetsenbord"
-#: ../rules/base.xml.in.h:395
+#: ../rules/base.xml.in.h:430
msgid "Logitech Cordless Desktop"
msgstr "Logitech Cordless Desktop"
-#: ../rules/base.xml.in.h:396
+#: ../rules/base.xml.in.h:431
msgid "Logitech Cordless Desktop (alternate option)"
msgstr "Logitech Cordless Desktop (alternatieve optie)"
-#: ../rules/base.xml.in.h:397
+#: ../rules/base.xml.in.h:432
msgid "Logitech Cordless Desktop EX110"
msgstr "Logitech Cordless Desktop EX110"
-#: ../rules/base.xml.in.h:398
+#: ../rules/base.xml.in.h:433
msgid "Logitech Cordless Desktop LX-300"
msgstr "Logitech Cordless Desktop LX-300"
-#: ../rules/base.xml.in.h:399
+#: ../rules/base.xml.in.h:434
msgid "Logitech Cordless Desktop Navigator"
msgstr "Logitech Cordless Desktop Navigator"
-#: ../rules/base.xml.in.h:400
+#: ../rules/base.xml.in.h:435
msgid "Logitech Cordless Desktop Optical"
msgstr "Logitech Cordless Desktop Optisch"
-#: ../rules/base.xml.in.h:401
+#: ../rules/base.xml.in.h:436
msgid "Logitech Cordless Desktop Pro (alternate option 2)"
msgstr "Logitech Cordless Desktop Pro (alternatieve optie 2)"
-#: ../rules/base.xml.in.h:402
+#: ../rules/base.xml.in.h:437
msgid "Logitech Cordless Desktop iTouch"
msgstr "Logitech Cordless Desktop iTouch"
-#: ../rules/base.xml.in.h:403
+#: ../rules/base.xml.in.h:438
msgid "Logitech Cordless Freedom/Desktop Navigator"
msgstr "Logitech Cordless Freedom/Desktop Navigator"
-#: ../rules/base.xml.in.h:404
+#: ../rules/base.xml.in.h:439
msgid "Logitech G15 extra keys via G15daemon"
msgstr "Logitech G15 extra toetsen via G15daemon"
-#: ../rules/base.xml.in.h:405
+#: ../rules/base.xml.in.h:440
msgid "Logitech Generic Keyboard"
msgstr "Logitech algemeen toetsenbord"
-#: ../rules/base.xml.in.h:406
+#: ../rules/base.xml.in.h:441
msgid "Logitech Internet 350 Keyboard"
msgstr "Logitech internet 350 toetsenbord"
-#: ../rules/base.xml.in.h:407
+#: ../rules/base.xml.in.h:442
msgid "Logitech Internet Keyboard"
msgstr "Logitech internet toetsenbord"
-#: ../rules/base.xml.in.h:408
+#: ../rules/base.xml.in.h:443
msgid "Logitech Internet Navigator Keyboard"
msgstr "Logitech Internet Navigator toetsenbord"
-#: ../rules/base.xml.in.h:409
+#: ../rules/base.xml.in.h:444
msgid "Logitech Media Elite Keyboard"
msgstr "Logitech Media Elite toetsenbord"
-#: ../rules/base.xml.in.h:410
+#: ../rules/base.xml.in.h:445
msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
msgstr "Logitech Ultra-X Cordless Media Desktop toetsenbord"
-#: ../rules/base.xml.in.h:411
+#: ../rules/base.xml.in.h:446
msgid "Logitech Ultra-X Keyboard"
msgstr "Logitech Ultra-X toetsenbord"
-#: ../rules/base.xml.in.h:412
+#: ../rules/base.xml.in.h:447
msgid "Logitech diNovo Edge Keyboard"
msgstr "Logitech diNovo Edge toetsenbord"
-#: ../rules/base.xml.in.h:413
+#: ../rules/base.xml.in.h:448
msgid "Logitech diNovo Keyboard"
msgstr "Logitech diNovo toetsenbord"
-#: ../rules/base.xml.in.h:414
+#: ../rules/base.xml.in.h:449
msgid "Logitech iTouch"
msgstr "Logitech iTouch"
-#: ../rules/base.xml.in.h:415
+#: ../rules/base.xml.in.h:450
msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
msgstr "Logitech iTouch draadloos toetsenbord (model Y-RB6)"
-#: ../rules/base.xml.in.h:416
+#: ../rules/base.xml.in.h:451
msgid "Logitech iTouch Internet Navigator Keyboard SE"
msgstr "Logitech iTouch Internet Navigator toetsenbord SE"
-#: ../rules/base.xml.in.h:417
+#: ../rules/base.xml.in.h:452
msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
msgstr "Logitech iTouch Internet Navigator toetsenbord SE (USB)"
# Het Nedersorbisch is de noordelijke versie van de in Brandenburg
# gesproken Sorbische taal.
# http://nl.wikipedia.org/wiki/Nedersorbisch
-#: ../rules/base.xml.in.h:418
+#: ../rules/base.xml.in.h:453
msgid "Lower Sorbian"
msgstr "Nedersorbisch"
-#: ../rules/base.xml.in.h:419
+#: ../rules/base.xml.in.h:454
msgid "Lower Sorbian (qwertz)"
msgstr "Nedersorbisch (qwertz)"
-#: ../rules/base.xml.in.h:420
+#: ../rules/base.xml.in.h:455
msgid "Ltu"
msgstr "Ltu"
-#: ../rules/base.xml.in.h:421
+#: ../rules/base.xml.in.h:456
+msgid "Lva"
+msgstr "Lva"
+
+#: ../rules/base.xml.in.h:457
msgid "MESS"
msgstr "MESS"
-#: ../rules/base.xml.in.h:422
+#: ../rules/base.xml.in.h:458
msgid "MNE"
msgstr "MNE"
-#: ../rules/base.xml.in.h:423
+#: ../rules/base.xml.in.h:459
msgid "MacBook/MacBook Pro"
msgstr "MacBook/MacBook Pro"
-#: ../rules/base.xml.in.h:424
+#: ../rules/base.xml.in.h:460
msgid "MacBook/MacBook Pro (Intl)"
msgstr "MacBook/MacBook Pro (Intl)"
-#: ../rules/base.xml.in.h:425
+#: ../rules/base.xml.in.h:461
msgid "Macedonia"
msgstr "Macedonisch"
-#: ../rules/base.xml.in.h:426
+#: ../rules/base.xml.in.h:462
msgid "Macintosh"
msgstr "Macintosh"
-#: ../rules/base.xml.in.h:427
+#: ../rules/base.xml.in.h:463
+msgid "Macintosh (International)"
+msgstr "Macintosh (Internationaal)"
+
+#: ../rules/base.xml.in.h:464
msgid "Macintosh Old"
msgstr "Macintosh oud"
-#: ../rules/base.xml.in.h:428
+#: ../rules/base.xml.in.h:465
msgid "Macintosh, Sun dead keys"
msgstr "Macintosh, Sun-‘dode toetsen’"
-#: ../rules/base.xml.in.h:429
+#: ../rules/base.xml.in.h:466
msgid "Macintosh, eliminate dead keys"
msgstr "Macintosh, zonder dode toetsen"
# Backspace-toets
-#: ../rules/base.xml.in.h:430
-msgid "Make CapsLock an additional Backspace"
-msgstr "Van CapsLock een extra Backspace maken"
+#: ../rules/base.xml.in.h:467
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Van Caps Lock een extra Backspace maken"
# Ctrl-toets
-#: ../rules/base.xml.in.h:431
-msgid "Make CapsLock an additional Ctrl"
-msgstr "Van CapsLock een extra Ctrl maken"
+#: ../rules/base.xml.in.h:468
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Van Caps Lock een extra Ctrl maken"
# ESC-toets
-#: ../rules/base.xml.in.h:432
-msgid "Make CapsLock an additional ESC"
-msgstr "Van CapsLock een extra ESC maken"
-
-#: ../rules/base.xml.in.h:433
-msgid "Make CapsLock an additional Hyper"
-msgstr "Van CapsLock een extra Hyper maken"
+#: ../rules/base.xml.in.h:469
+msgid "Make Caps Lock an additional ESC"
+msgstr "Van Caps Lock een extra ESC maken"
-#: ../rules/base.xml.in.h:434
-msgid "Make CapsLock an additional NumLock"
-msgstr "Van CapsLock een extra NumLock maken"
+#: ../rules/base.xml.in.h:470
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Van Caps Lock een extra Hyper maken"
-#: ../rules/base.xml.in.h:435
-msgid "Make CapsLock an additional Super"
-msgstr "Van CapsLock een extra Super maken"
+#: ../rules/base.xml.in.h:471
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Van Caps Lock een extra Num Lock maken"
-#: ../rules/base.xml.in.h:436
-msgid "Mal"
-msgstr "Mal"
+#: ../rules/base.xml.in.h:472
+msgid "Make Caps Lock an additional Super"
+msgstr "Van Caps Lock een extra Super maken"
# een van de 23 Indische talen
-#: ../rules/base.xml.in.h:437
+#: ../rules/base.xml.in.h:473
msgid "Malayalam"
msgstr "Malayalam"
# een van de 23 Indische talen
-#: ../rules/base.xml.in.h:438
+#: ../rules/base.xml.in.h:474
msgid "Malayalam Lalitha"
msgstr "Malayalam Lalitha"
# kan ook als Malediven worden geschreven.
-#: ../rules/base.xml.in.h:439
+#: ../rules/base.xml.in.h:475
msgid "Maldives"
msgstr "Maldiven"
-#: ../rules/base.xml.in.h:440
+#: ../rules/base.xml.in.h:476
+msgid "Mali"
+msgstr "Mali"
+
+#: ../rules/base.xml.in.h:477
msgid "Malta"
msgstr "Malta"
# VS/US/
-#: ../rules/base.xml.in.h:441
+#: ../rules/base.xml.in.h:478
msgid "Maltese keyboard with US layout"
msgstr "Maltees toetsenbord met US-indeling"
-#: ../rules/base.xml.in.h:442
+#: ../rules/base.xml.in.h:479
msgid "Mao"
msgstr "Mao"
-#: ../rules/base.xml.in.h:443
+#: ../rules/base.xml.in.h:480
msgid "Maori"
msgstr "Maori"
-#: ../rules/base.xml.in.h:444
+#: ../rules/base.xml.in.h:481
+msgid "Mari"
+msgstr "Mari"
+
+#: ../rules/base.xml.in.h:482
+msgid "Mdv"
+msgstr "Mdv"
+
+#: ../rules/base.xml.in.h:483
msgid "Memorex MX1998"
msgstr "Memorex MX1998"
-#: ../rules/base.xml.in.h:445
+#: ../rules/base.xml.in.h:484
msgid "Memorex MX2500 EZ-Access Keyboard"
msgstr "Memorex MX2500 EZ-Access toetsenbord"
-#: ../rules/base.xml.in.h:446
+#: ../rules/base.xml.in.h:485
msgid "Memorex MX2750"
msgstr "Memorex MX2750"
-#: ../rules/base.xml.in.h:447
+#: ../rules/base.xml.in.h:486
msgid "Menu"
msgstr "Menu"
-#: ../rules/base.xml.in.h:448
+#: ../rules/base.xml.in.h:487
msgid "Meta is mapped to Left Win"
msgstr "Meta zit op de linker Win-toets"
-#: ../rules/base.xml.in.h:449
+#: ../rules/base.xml.in.h:488
msgid "Meta is mapped to Win keys"
msgstr "Meta zit op de Win-toetsen"
-#: ../rules/base.xml.in.h:450
+#: ../rules/base.xml.in.h:489
+msgid "Meta on Left Ctrl"
+msgstr "Meta op Linker Ctrl-toets"
+
+#: ../rules/base.xml.in.h:490
msgid "Microsoft Comfort Curve Keyboard 2000"
msgstr "Microsoft Comfort Curve toetsenbord 2000"
-#: ../rules/base.xml.in.h:451
+#: ../rules/base.xml.in.h:491
msgid "Microsoft Internet Keyboard"
msgstr "Microsoft internet toetsenbord"
-#: ../rules/base.xml.in.h:452
+#: ../rules/base.xml.in.h:492
msgid "Microsoft Internet Keyboard Pro, Swedish"
msgstr "Microsoft Internet Keyboard Pro, Zweeds"
-#: ../rules/base.xml.in.h:453
+#: ../rules/base.xml.in.h:493
msgid "Microsoft Natural"
msgstr "Microsoft Natural"
-#: ../rules/base.xml.in.h:454
+#: ../rules/base.xml.in.h:494
msgid "Microsoft Natural Keyboard Elite"
msgstr "Microsoft Natural Keyboard Elite"
-#: ../rules/base.xml.in.h:455
+#: ../rules/base.xml.in.h:495
msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-#: ../rules/base.xml.in.h:456
+#: ../rules/base.xml.in.h:496
msgid "Microsoft Natural Keyboard Pro OEM"
msgstr "Microsoft Natural Keyboard Pro OEM"
-#: ../rules/base.xml.in.h:457
+#: ../rules/base.xml.in.h:497
msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-#: ../rules/base.xml.in.h:458
+#: ../rules/base.xml.in.h:498
msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-#: ../rules/base.xml.in.h:459
+#: ../rules/base.xml.in.h:499
msgid "Microsoft Office Keyboard"
msgstr "Microsoft Office toetsenbord"
-#: ../rules/base.xml.in.h:460
+#: ../rules/base.xml.in.h:500
msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
msgstr "Microsoft draadloos multimediatoetsenbord 1.0A"
-#: ../rules/base.xml.in.h:461
+#: ../rules/base.xml.in.h:501
msgid "Miscellaneous compatibility options"
msgstr "Overige compatibiliteitsopties"
-#: ../rules/base.xml.in.h:462
+#: ../rules/base.xml.in.h:502
msgid "Mkd"
msgstr "Mkd"
-#: ../rules/base.xml.in.h:463
+#: ../rules/base.xml.in.h:503
+msgid "Mli"
+msgstr "Mli"
+
+#: ../rules/base.xml.in.h:504
msgid "Mlt"
msgstr "Mlt"
-#: ../rules/base.xml.in.h:464
+#: ../rules/base.xml.in.h:505
msgid "Mmr"
msgstr "Mmr"
-#: ../rules/base.xml.in.h:465
+#: ../rules/base.xml.in.h:506
msgid "Mng"
msgstr "Mng"
-#: ../rules/base.xml.in.h:466
+#: ../rules/base.xml.in.h:507
msgid "Mongolia"
msgstr "Mongolië"
# Servië en Montenegro
-#: ../rules/base.xml.in.h:467
+#: ../rules/base.xml.in.h:508
msgid "Montenegro"
msgstr "Montenegro"
-#: ../rules/base.xml.in.h:468
+#: ../rules/base.xml.in.h:509
msgid "Morocco"
msgstr "Marokko"
-#: ../rules/base.xml.in.h:469
+#: ../rules/base.xml.in.h:510
msgid "Multilingual"
msgstr "Meertalig"
-#: ../rules/base.xml.in.h:470
+#: ../rules/base.xml.in.h:511
msgid "Multilingual, first part"
msgstr "Meertalig, eerste deel"
-#: ../rules/base.xml.in.h:471
+#: ../rules/base.xml.in.h:512
msgid "Multilingual, second part"
msgstr "Meertalig, tweede deel"
-#: ../rules/base.xml.in.h:472
+#: ../rules/base.xml.in.h:513
msgid "Myanmar"
msgstr "Myanmar"
-#: ../rules/base.xml.in.h:473
+#: ../rules/base.xml.in.h:514
msgid "NICOLA-F style Backspace"
msgstr "NICOLA-F stijl backspace"
-#: ../rules/base.xml.in.h:474
+#: ../rules/base.xml.in.h:515
msgid "NLA"
msgstr "NLA"
-#: ../rules/base.xml.in.h:475
+#: ../rules/base.xml.in.h:516
msgid "Nativo"
msgstr "Nativo"
-#: ../rules/base.xml.in.h:476
+#: ../rules/base.xml.in.h:517
msgid "Nativo for Esperanto"
msgstr "Nativo voor Esperanto"
-#: ../rules/base.xml.in.h:477
+#: ../rules/base.xml.in.h:518
msgid "Nativo for USA keyboards"
msgstr "Nativo voor Amerikaanse toetsenborden"
-#: ../rules/base.xml.in.h:478
+#: ../rules/base.xml.in.h:519
msgid "Neo 2"
msgstr "Neo 2"
-#: ../rules/base.xml.in.h:479
-msgid "Nep"
-msgstr "Nep"
-
-#: ../rules/base.xml.in.h:480
+#: ../rules/base.xml.in.h:520
msgid "Nepal"
msgstr "Nepal"
-#: ../rules/base.xml.in.h:481
+#: ../rules/base.xml.in.h:521
msgid "Netherlands"
msgstr "Nederland"
-#: ../rules/base.xml.in.h:482
+#: ../rules/base.xml.in.h:522
msgid "New phonetic"
msgstr "Nieuw fonetisch"
-#: ../rules/base.xml.in.h:483
-msgid "Nig"
-msgstr "Nig"
+#: ../rules/base.xml.in.h:523
+msgid "Nga"
+msgstr "Nga"
-#: ../rules/base.xml.in.h:484
+#: ../rules/base.xml.in.h:524
msgid "Nigeria"
msgstr "Nigeria"
-#: ../rules/base.xml.in.h:485
+#: ../rules/base.xml.in.h:525
msgid "Nld"
msgstr "Nld"
# Spatiebalk geeft harde spatie op het vierde niveau.
-#: ../rules/base.xml.in.h:486
+#: ../rules/base.xml.in.h:526
msgid "Non-breakable space character at fourth level"
msgstr "Harde spatie op het vierde niveau"
# sixth level? hoeveel levels zijn er wel niet?
-#: ../rules/base.xml.in.h:487
+#: ../rules/base.xml.in.h:527
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde niveau"
# sixth level? hoeveel levels zijn er wel niet?
-#: ../rules/base.xml.in.h:488
+#: ../rules/base.xml.in.h:528
msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde niveau (via Ctrl+Shift)"
-#: ../rules/base.xml.in.h:489
+#: ../rules/base.xml.in.h:529
msgid "Non-breakable space character at second level"
msgstr "Harde spatie op het tweede niveau"
-#: ../rules/base.xml.in.h:490
+#: ../rules/base.xml.in.h:530
msgid "Non-breakable space character at third level"
msgstr "Harde spatie op het derde niveau"
-#: ../rules/base.xml.in.h:491
+#: ../rules/base.xml.in.h:531
msgid "Non-breakable space character at third level, nothing at fourth level"
msgstr "Harde spatie op het derde niveau, niets op het vierde niveau"
-#: ../rules/base.xml.in.h:492
+#: ../rules/base.xml.in.h:532
msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
msgstr "Harde spatie op het derde niveau, smalle harde spatie op het vierde niveau"
-#: ../rules/base.xml.in.h:493
+#: ../rules/base.xml.in.h:533
msgid "Nor"
msgstr "Nor"
-#: ../rules/base.xml.in.h:494
+#: ../rules/base.xml.in.h:534
msgid "Northern Saami"
msgstr "Noord-Lapland"
-#: ../rules/base.xml.in.h:495
+#: ../rules/base.xml.in.h:535
msgid "Northern Saami, eliminate dead keys"
msgstr "Noord-Lapland, zonder dode toetsen"
-#: ../rules/base.xml.in.h:496
+#: ../rules/base.xml.in.h:536
msgid "Northgate OmniKey 101"
msgstr "Northgate OmniKey 101"
-#: ../rules/base.xml.in.h:497
+#: ../rules/base.xml.in.h:537
msgid "Norway"
msgstr "Noorwegen"
-#: ../rules/base.xml.in.h:498
-msgid "NumLock"
-msgstr "NumLock"
+# Nepal
+#: ../rules/base.xml.in.h:538
+msgid "Npl"
+msgstr "Npl"
+
+#: ../rules/base.xml.in.h:539
+msgid "Num Lock"
+msgstr "Num Lock"
# op het cijferblok is de delete toets aangegeven met del
-#: ../rules/base.xml.in.h:499
+#: ../rules/base.xml.in.h:540
msgid "Numeric keypad delete key behaviour"
msgstr "Cijferblok del-toetsgedrag"
-#: ../rules/base.xml.in.h:500
+#: ../rules/base.xml.in.h:541
msgid "Numeric keypad keys work as with Mac"
msgstr "Cijferblok-toetsen werken net als bij een Mac"
-#: ../rules/base.xml.in.h:501
+#: ../rules/base.xml.in.h:542
msgid "Numeric keypad layout selection"
msgstr "Cijferblok-indeling selecteren"
-#: ../rules/base.xml.in.h:502
+#: ../rules/base.xml.in.h:543
msgid "OADG 109A"
msgstr "OADG 109A"
-#: ../rules/base.xml.in.h:503
+#: ../rules/base.xml.in.h:544
msgid "OLPC"
msgstr "OLPC"
-#: ../rules/base.xml.in.h:504
+#: ../rules/base.xml.in.h:545
msgid "OLPC Dari"
msgstr "OLPC Dari"
-#: ../rules/base.xml.in.h:505
+#: ../rules/base.xml.in.h:546
msgid "OLPC Pashto"
msgstr "OLPC Pashto"
-#: ../rules/base.xml.in.h:506
+#: ../rules/base.xml.in.h:547
msgid "OLPC Southern Uzbek"
msgstr "OLPC Zuid-Oezbekistan"
-#: ../rules/base.xml.in.h:507
+#: ../rules/base.xml.in.h:548
msgid "Occitan"
msgstr "Occitaans"
-#: ../rules/base.xml.in.h:508
+#: ../rules/base.xml.in.h:549
msgid "Ogham"
msgstr "Oghamees"
-#: ../rules/base.xml.in.h:509
+#: ../rules/base.xml.in.h:550
msgid "Ogham IS434"
msgstr "Oghamees IS434"
-#: ../rules/base.xml.in.h:510
+#: ../rules/base.xml.in.h:551
msgid "Oriya"
msgstr "Oriya"
-#: ../rules/base.xml.in.h:511
+#: ../rules/base.xml.in.h:552
msgid "Ortek MCK-800 MM/Internet keyboard"
msgstr "Ortek MCK-800 MM/Internet toetsenbord"
-#: ../rules/base.xml.in.h:512
+#: ../rules/base.xml.in.h:553
msgid "Ossetian"
msgstr "Osetisch"
-#: ../rules/base.xml.in.h:513
+#: ../rules/base.xml.in.h:554
msgid "Ossetian, Winkeys"
msgstr "Osetisch, Win-toetsen"
-#: ../rules/base.xml.in.h:514
+#: ../rules/base.xml.in.h:555
msgid "Ossetian, legacy"
msgstr "Osetisch, historisch"
-#: ../rules/base.xml.in.h:515
+#: ../rules/base.xml.in.h:556
msgid "PC-98xx Series"
msgstr "PC-98xx serie"
-#: ../rules/base.xml.in.h:516
+#: ../rules/base.xml.in.h:557
msgid "Pak"
msgstr "Pak"
-#: ../rules/base.xml.in.h:517
+#: ../rules/base.xml.in.h:558
msgid "Pakistan"
msgstr "Pakistan"
-#: ../rules/base.xml.in.h:518
+# Pannonian Rusyn (руска бешеда) or simply Rusyn (or Ruthenian) is a Slavic language
+# or dialect spoken by Pannonian Rusyns in north-western Serbia (Bačka region) and eastern
+# Croatia (therefore also called Yugoslavo-Ruthenian, Vojvodina-Ruthenian or Bačka-Ruthenian).
+#: ../rules/base.xml.in.h:559
+msgid "Pannonian Rusyn Homophonic"
+msgstr "Pannonisch Rusyn Homophonisch"
+
+#: ../rules/base.xml.in.h:560
msgid "Pashto"
msgstr "Pashto"
-#: ../rules/base.xml.in.h:519
+#: ../rules/base.xml.in.h:561
msgid "Pattachote"
msgstr "Pattachote"
-#: ../rules/base.xml.in.h:520
+# de text op de Pause-toets is meestal "Pause"
+#: ../rules/base.xml.in.h:562
+msgid "Pause"
+msgstr "Pause"
+
+#: ../rules/base.xml.in.h:563
msgid "Persian, with Persian Keypad"
msgstr "Persisch, met Persisch cijferblok"
-#: ../rules/base.xml.in.h:521
+#: ../rules/base.xml.in.h:564
+msgid "Phi"
+msgstr "Phi"
+
+#: ../rules/base.xml.in.h:565
+msgid "Philippines"
+msgstr "Filipijnen"
+
+#: ../rules/base.xml.in.h:566
msgid "Phonetic"
msgstr "Fonetisch"
-#: ../rules/base.xml.in.h:522
+#: ../rules/base.xml.in.h:567
msgid "Phonetic Winkeys"
msgstr "Fonetisch Win-toetsen"
-#: ../rules/base.xml.in.h:523
+#: ../rules/base.xml.in.h:568
msgid "Pol"
msgstr "Pol"
-#: ../rules/base.xml.in.h:524
+#: ../rules/base.xml.in.h:569
msgid "Poland"
msgstr "Polen"
-#: ../rules/base.xml.in.h:525
+#: ../rules/base.xml.in.h:570
msgid "Polytonic"
msgstr "Meertonig"
-#: ../rules/base.xml.in.h:526
+#: ../rules/base.xml.in.h:571
msgid "Portugal"
msgstr "Portugal"
-#: ../rules/base.xml.in.h:527
+#: ../rules/base.xml.in.h:572
msgid "Probhat"
msgstr "Probhat"
-#: ../rules/base.xml.in.h:528
+#: ../rules/base.xml.in.h:573
msgid "Programmer Dvorak"
msgstr "Programmeer-Dvorak"
-#: ../rules/base.xml.in.h:529
+#: ../rules/base.xml.in.h:574
msgid "Propeller Voyager (KTEZ-1000)"
msgstr "Propeller Voyager (KTEZ-1000)"
-#: ../rules/base.xml.in.h:530
+#: ../rules/base.xml.in.h:575
msgid "Prt"
msgstr "Prt"
-#: ../rules/base.xml.in.h:531
+#: ../rules/base.xml.in.h:576
+msgid "PrtSc"
+msgstr "PrtSc"
+
+#: ../rules/base.xml.in.h:577
msgid "QTronix Scorpius 98N+"
msgstr "QTronix Scorpius 98N+"
-#: ../rules/base.xml.in.h:532
+#: ../rules/base.xml.in.h:578
+msgid "QWERTY (Baybayin)"
+msgstr "QWERTY (Baybayin)"
+
+#: ../rules/base.xml.in.h:579
msgid "Right Alt"
msgstr "Rechter Alt-toets"
# BUG Alt ipv Alt key
-#: ../rules/base.xml.in.h:533
+#: ../rules/base.xml.in.h:580
msgid "Right Alt (while pressed)"
msgstr "Rechter Alt-toets (ingedrukt houden)"
-#: ../rules/base.xml.in.h:534
+#: ../rules/base.xml.in.h:581
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Rechter Alt-toets geeft het 5de niveau en is blijvend wanneer het ingedrukt wordt samen met een andere 5de niveau-kiezer"
+
+#: ../rules/base.xml.in.h:582
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Rechter Alt-toets geeft het 5de niveau en is blijvend wanneer het ingedrukt wordt samen met een andere 5de niveau-kiezer, één toetsaanslag heft het niveau op"
+
+#: ../rules/base.xml.in.h:583
msgid "Right Alt key never chooses 3rd level"
msgstr "Rechter Alt-toets geeft nooit het 3e niveau"
-#: ../rules/base.xml.in.h:535
+#: ../rules/base.xml.in.h:584
msgid "Right Alt, Shift+Right Alt key is Multi_Key"
msgstr "Rechter Alt-toets, Shift + rechter Alt-toets is Multi_Key"
-#: ../rules/base.xml.in.h:536
+#: ../rules/base.xml.in.h:585
msgid "Right Ctrl"
msgstr "Rechter Ctrl-toets"
-#: ../rules/base.xml.in.h:537
+#: ../rules/base.xml.in.h:586
msgid "Right Ctrl (while pressed)"
msgstr "Rechter Ctrl-toets (ingedrukt houden)"
# Rechter Ctrl-toets doet hetzelfde als de rechter Alt-toets.
-#: ../rules/base.xml.in.h:538
+#: ../rules/base.xml.in.h:587
msgid "Right Ctrl as Right Alt"
msgstr "Rechter Ctrl-toets en Alt-toets hetzelfde"
-#: ../rules/base.xml.in.h:539
+# Rechter Ctrl+Shift-toets
+#: ../rules/base.xml.in.h:588
+msgid "Right Ctrl+Right Shift"
+msgstr "Rechter Ctrl-toets + Rechter Shift-toets"
+
+#: ../rules/base.xml.in.h:589
msgid "Right Shift"
msgstr "Rechter Shift-toets"
-#: ../rules/base.xml.in.h:540
+#: ../rules/base.xml.in.h:590
msgid "Right Win"
msgstr "Rechter Win-toets"
-#: ../rules/base.xml.in.h:541
+#: ../rules/base.xml.in.h:591
msgid "Right Win (while pressed)"
msgstr "Rechter Win-toets (ingedrukt houden)"
-#: ../rules/base.xml.in.h:542
+#: ../rules/base.xml.in.h:592
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Rechter Win-toets geeft het 5de niveau en is blijvend wanneer het ingedrukt wordt samen met een andere 5de niveau-kiezer"
+
+#: ../rules/base.xml.in.h:593
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Rechter Win-toets geeft het 5de niveau en is blijvend wanneer het ingedrukt wordt samen met een andere 5de niveau-kiezer, één toetsaanslag heft het niveau op"
+
+#: ../rules/base.xml.in.h:594
msgid "Right hand"
msgstr "Rechtshandig"
-#: ../rules/base.xml.in.h:543
+#: ../rules/base.xml.in.h:595
msgid "Right handed Dvorak"
msgstr "Rechtshandige Dvorak"
-#: ../rules/base.xml.in.h:544
+#: ../rules/base.xml.in.h:596
msgid "Romania"
msgstr "Roemenië"
-#: ../rules/base.xml.in.h:545
+#: ../rules/base.xml.in.h:597
msgid "Romanian keyboard with German letters"
msgstr "Roemeens toetsenbord met Duitse lettertekens"
-#: ../rules/base.xml.in.h:546
+#: ../rules/base.xml.in.h:598
msgid "Romanian keyboard with German letters, eliminate dead keys"
msgstr "Roemeens toetsenbord met Duitse lettertekens, zonder dode toetsen"
-#: ../rules/base.xml.in.h:547
+#: ../rules/base.xml.in.h:599
msgid "Rou"
msgstr "Rou"
-#: ../rules/base.xml.in.h:548
+#: ../rules/base.xml.in.h:600
+msgid "Rupee on 4"
+msgstr "Rupee op 4"
+
+#: ../rules/base.xml.in.h:601
msgid "Rus"
msgstr "Rus"
-#: ../rules/base.xml.in.h:549
+#: ../rules/base.xml.in.h:602
msgid "Russia"
msgstr "Rusland"
-#: ../rules/base.xml.in.h:550
+#: ../rules/base.xml.in.h:603
msgid "Russian"
msgstr "Russisch"
-#: ../rules/base.xml.in.h:551
+#: ../rules/base.xml.in.h:604
msgid "Russian phonetic"
msgstr "Russisch fonetisch"
-#: ../rules/base.xml.in.h:552
+#: ../rules/base.xml.in.h:605
msgid "Russian phonetic Dvorak"
msgstr "Russisch-fonetisch Dvorak"
-#: ../rules/base.xml.in.h:553
+#: ../rules/base.xml.in.h:606
msgid "Russian phonetic, eliminate dead keys"
msgstr "Russisch fonetisch, zonder dode toetsen"
-#: ../rules/base.xml.in.h:554
+#: ../rules/base.xml.in.h:607
msgid "Russian with Kazakh"
msgstr "Russisch met Kazachstaans"
# draadloos toetsenbord
-#: ../rules/base.xml.in.h:555
+#: ../rules/base.xml.in.h:608
msgid "SILVERCREST Multimedia Wireless Keyboard"
msgstr "SILVERCREST Multimedia Wireless Keyboard"
-#: ../rules/base.xml.in.h:556
+#: ../rules/base.xml.in.h:609
msgid "SK-1300"
msgstr "SK-1300"
-#: ../rules/base.xml.in.h:557
+#: ../rules/base.xml.in.h:610
msgid "SK-2500"
msgstr "SK-2500"
-#: ../rules/base.xml.in.h:558
+#: ../rules/base.xml.in.h:611
msgid "SK-6200"
msgstr "SK-6200"
-#: ../rules/base.xml.in.h:559
+#: ../rules/base.xml.in.h:612
msgid "SK-7100"
msgstr "SK-7100"
-#: ../rules/base.xml.in.h:560 ../rules/base.extras.xml.in.h:7
+#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:9
msgid "SRB"
msgstr "SRB"
-#: ../rules/base.xml.in.h:561
+#: ../rules/base.xml.in.h:614
msgid "SVEN Ergonomic 2500"
msgstr "SVEN Ergonomic 2500"
-#: ../rules/base.xml.in.h:562
+#: ../rules/base.xml.in.h:615
msgid "SVEN Slim 303"
msgstr "SVEN Slim 303"
-#: ../rules/base.xml.in.h:563
+#: ../rules/base.xml.in.h:616
msgid "Samsung SDM 4500P"
msgstr "Samsung SDM 4500P"
-#: ../rules/base.xml.in.h:564
+#: ../rules/base.xml.in.h:617
msgid "Samsung SDM 4510P"
msgstr "Samsung SDM 4510P"
-#: ../rules/base.xml.in.h:565
+#: ../rules/base.xml.in.h:618
msgid "Scroll Lock"
msgstr "Scroll Lock"
-#: ../rules/base.xml.in.h:566
-msgid "ScrollLock"
-msgstr "ScrollLock"
-
# Canadees-Indiaanse taal (Shuswap)
-#: ../rules/base.xml.in.h:567
+#: ../rules/base.xml.in.h:619
msgid "Secwepemctsin"
msgstr "Secwepemctsin"
-#: ../rules/base.xml.in.h:568
+#: ../rules/base.xml.in.h:620
msgid "Semi-colon on third level"
msgstr "Punt-komma op derde niveau"
-#: ../rules/base.xml.in.h:569 ../rules/base.extras.xml.in.h:8
+#: ../rules/base.xml.in.h:621
+msgid "Sen"
+msgstr "Sen"
+
+#: ../rules/base.xml.in.h:622
+msgid "Senegal"
+msgstr "Senegal"
+
+#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:10
msgid "Serbia"
+msgstr "Servië"
+
+#: ../rules/base.xml.in.h:624
+msgid "Serbian"
msgstr "Servisch"
-#: ../rules/base.xml.in.h:570
-msgid "Shift cancels CapsLock"
-msgstr "Shift heft CapsLock op"
+#: ../rules/base.xml.in.h:625
+msgid "Serbo-Croatian"
+msgstr "Servo-Kroatisch"
-#: ../rules/base.xml.in.h:571
-msgid "Shift does not cancel NumLock, chooses 3d level instead"
-msgstr "Shift heft NumLock niet op, maar geeft juist het 3e niveau"
+#: ../rules/base.xml.in.h:626
+msgid "Shift cancels Caps Lock"
+msgstr "Shift heft Caps Lock op"
-#: ../rules/base.xml.in.h:572
+#: ../rules/base.xml.in.h:627
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Shift heft Num Lock niet op, maar geeft juist het 3e niveau"
+
+#: ../rules/base.xml.in.h:628
msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Shift met cijferblok-toetsen werkt zoals in MS Windows"
-#: ../rules/base.xml.in.h:573
-msgid "Shift+CapsLock"
-msgstr "Shift+CapsLock"
+#: ../rules/base.xml.in.h:629
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
-#: ../rules/base.xml.in.h:574
+#: ../rules/base.xml.in.h:630
msgid "Simple"
msgstr "Simpel"
-#: ../rules/base.xml.in.h:575
+#: ../rules/base.xml.in.h:631
+msgid "Sindhi"
+msgstr "Sindhi"
+
+#: ../rules/base.xml.in.h:632
msgid "Slovakia"
msgstr "Slowakije"
-#: ../rules/base.xml.in.h:576
+#: ../rules/base.xml.in.h:633
msgid "Slovenia"
msgstr "Slovenië"
-#: ../rules/base.xml.in.h:577
+#: ../rules/base.xml.in.h:634
msgid "South Africa"
msgstr "Zuid-Afrika"
-#: ../rules/base.xml.in.h:578
+#: ../rules/base.xml.in.h:635
msgid "Southern Uzbek"
msgstr "Zuid-Oezbekistan"
-#: ../rules/base.xml.in.h:579
+#: ../rules/base.xml.in.h:636
msgid "Spain"
msgstr "Spanje"
-#: ../rules/base.xml.in.h:580
+#: ../rules/base.xml.in.h:637
msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
msgstr "Speciale toetsen (Ctrl+Alt+&lt;toets&gt;) afgehandeld in een server"
-#: ../rules/base.xml.in.h:581
-msgid "SrL"
-msgstr "SrL"
-
-#: ../rules/base.xml.in.h:582
+#: ../rules/base.xml.in.h:638
msgid "Sri Lanka"
msgstr "Sri Lanka"
-#: ../rules/base.xml.in.h:583
+#: ../rules/base.xml.in.h:639
msgid "Standard"
msgstr "Standaard"
-#: ../rules/base.xml.in.h:584
+#: ../rules/base.xml.in.h:640
msgid "Standard (Cedilla)"
msgstr "Standaard (Cedilla)"
#. RSTU 2019-91
-#: ../rules/base.xml.in.h:586
+#: ../rules/base.xml.in.h:642
msgid "Standard RSTU"
msgstr "Standaard RSTU"
#. RSTU 2019-91
-#: ../rules/base.xml.in.h:588
+#: ../rules/base.xml.in.h:644
msgid "Standard RSTU on Russian layout"
msgstr "Standaard RSTU op Russische indeling"
-#: ../rules/base.xml.in.h:589
+#: ../rules/base.xml.in.h:645
msgid "Sun Type 5/6"
msgstr "Sun type 5/6"
-#: ../rules/base.xml.in.h:590
+#: ../rules/base.xml.in.h:646
msgid "Sun dead keys"
msgstr "Sun dode toetsen"
-#: ../rules/base.xml.in.h:591
+#: ../rules/base.xml.in.h:647
msgid "Super Power Multimedia Keyboard"
msgstr "Super Power multimediatoetsenbord"
# Slovaaks Dvorak?
-#: ../rules/base.xml.in.h:592
+#: ../rules/base.xml.in.h:648
msgid "Svdvorak"
msgstr "Svdvorak"
-#: ../rules/base.xml.in.h:593
+#: ../rules/base.xml.in.h:649
msgid "Svk"
msgstr "Svk"
-#: ../rules/base.xml.in.h:594
+#: ../rules/base.xml.in.h:650
msgid "Svn"
msgstr "Svn"
-#: ../rules/base.xml.in.h:595
-msgid "Swap Ctrl and CapsLock"
-msgstr "Ctrl en CapsLock omwisselen"
+#: ../rules/base.xml.in.h:651
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Ctrl en Caps Lock omwisselen"
-#: ../rules/base.xml.in.h:596
-msgid "Swap ESC and CapsLock"
-msgstr "Esc en CapsLock omwisselen"
+#: ../rules/base.xml.in.h:652
+msgid "Swap ESC and Caps Lock"
+msgstr "Esc en Caps Lock omwisselen"
-#: ../rules/base.xml.in.h:597
+#: ../rules/base.xml.in.h:653
msgid "Swe"
msgstr "Swe"
-#: ../rules/base.xml.in.h:598
+#: ../rules/base.xml.in.h:654
msgid "Sweden"
msgstr "Zweden"
-#: ../rules/base.xml.in.h:599
+#: ../rules/base.xml.in.h:655
msgid "Switzerland"
msgstr "Zwitserland"
-#: ../rules/base.xml.in.h:600
+#: ../rules/base.xml.in.h:656
msgid "Symplon PaceBook (tablet PC)"
msgstr "Symplon PaceBook (tablet PC)"
-#: ../rules/base.xml.in.h:601
+#: ../rules/base.xml.in.h:657
msgid "Syr"
msgstr "Syr"
-#: ../rules/base.xml.in.h:602
+#: ../rules/base.xml.in.h:658
msgid "Syria"
msgstr "Syrië"
-#: ../rules/base.xml.in.h:603
+#: ../rules/base.xml.in.h:659
msgid "Syriac"
msgstr "Syrisch"
-#: ../rules/base.xml.in.h:604
+#: ../rules/base.xml.in.h:660
msgid "Syriac phonetic"
msgstr "Syrisch fonetisch"
-#: ../rules/base.xml.in.h:605
+#: ../rules/base.xml.in.h:661
msgid "TIS-820.2538"
msgstr "TIS-820.2538"
-#: ../rules/base.xml.in.h:606
+#: ../rules/base.xml.in.h:662
msgid "Tajikistan"
msgstr "Tadzjikistan"
-#: ../rules/base.xml.in.h:607
+#: ../rules/base.xml.in.h:663
msgid "Tamil"
msgstr "Tamil"
-#: ../rules/base.xml.in.h:608
+#: ../rules/base.xml.in.h:664
+msgid "Tamil Keyboard with Numerals"
+msgstr "Tamil toetsenbord met cijfertekens"
+
+#: ../rules/base.xml.in.h:665
msgid "Tamil TAB Typewriter"
msgstr "Tamil TAB typmachine"
-#: ../rules/base.xml.in.h:609
+#: ../rules/base.xml.in.h:666
msgid "Tamil TSCII Typewriter"
msgstr "Tamil TSCII typmachine"
-#: ../rules/base.xml.in.h:610
+#: ../rules/base.xml.in.h:667
msgid "Tamil Unicode"
msgstr "Tamil unicode"
-#: ../rules/base.xml.in.h:611
+#: ../rules/base.xml.in.h:668
+msgid "Tanzania"
+msgstr "Tanzania"
+
+#: ../rules/base.xml.in.h:669
msgid "Targa Visionary 811"
msgstr "Targa Visionary 811"
-#: ../rules/base.xml.in.h:612
+#: ../rules/base.xml.in.h:670
msgid "Tatar"
msgstr "Tatar"
-#: ../rules/base.xml.in.h:613
+#: ../rules/base.xml.in.h:671
msgid "Telugu"
msgstr "Telugu"
-#: ../rules/base.xml.in.h:614
+#: ../rules/base.xml.in.h:672
msgid "Tha"
msgstr "Tha"
-#: ../rules/base.xml.in.h:615
+#: ../rules/base.xml.in.h:673
msgid "Thailand"
msgstr "Thailand"
-#: ../rules/base.xml.in.h:616
+#: ../rules/base.xml.in.h:674
msgid "Tibetan"
msgstr "Tibetaans"
-#: ../rules/base.xml.in.h:617
+#: ../rules/base.xml.in.h:675
msgid "Tibetan (with ASCII numerals)"
msgstr "Tibetaans (met ASCII-cijfers)"
-#: ../rules/base.xml.in.h:618
+#: ../rules/base.xml.in.h:676
msgid "Tifinagh"
msgstr "Tifinagh"
-#: ../rules/base.xml.in.h:619
-msgid "Tifinagh Alternative"
+#: ../rules/base.xml.in.h:677
+msgid "Tifinagh alternative"
msgstr "Tifinagh alternatief"
-#: ../rules/base.xml.in.h:620
-msgid "Tifinagh Alternative Phonetic"
+#: ../rules/base.xml.in.h:678
+msgid "Tifinagh alternative phonetic"
msgstr "Tifinagh alternatief fonetisch"
-#: ../rules/base.xml.in.h:621
-msgid "Tifinagh Extended"
+#: ../rules/base.xml.in.h:679
+msgid "Tifinagh extended"
msgstr "Tifinagh uitgebreid"
-#: ../rules/base.xml.in.h:622
-msgid "Tifinagh Extended Phonetic"
+#: ../rules/base.xml.in.h:680
+msgid "Tifinagh extended phonetic"
msgstr "Tifinagh fonetisch uitgebreid"
-#: ../rules/base.xml.in.h:623
-msgid "Tifinagh Phonetic"
+#: ../rules/base.xml.in.h:681
+msgid "Tifinagh phonetic"
msgstr "Tifinagh fonetisch"
-#: ../rules/base.xml.in.h:624
+#: ../rules/base.xml.in.h:682
msgid "Tilde (~) variant"
msgstr "Tilde (~) variant"
-#: ../rules/base.xml.in.h:625
+#: ../rules/base.xml.in.h:683
msgid "Tjk"
msgstr "Tjk"
-#: ../rules/base.xml.in.h:626
+#: ../rules/base.xml.in.h:684
+msgid "Tkm"
+msgstr "Tkm"
+
+#: ../rules/base.xml.in.h:685
msgid "To the corresponding key in a Dvorak keyboard."
msgstr "Naar de corresponderende toets op een Dvorak toetsenbord."
-#: ../rules/base.xml.in.h:627
+#: ../rules/base.xml.in.h:686
msgid "To the corresponding key in a Qwerty keyboard."
msgstr "Naar de corresponderende toets op een Qwerty toetsenbord."
-#: ../rules/base.xml.in.h:628
+# XKB PointerKeys are the mouse emulation XKB provides on the hit of a key
+# press(Test with Shift+NumLock, then the keypad will move the mouse
+# around)
+#: ../rules/base.xml.in.h:687
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Muistoetsen aan/uitzetten met Shift+NumLock."
+
+#: ../rules/base.xml.in.h:688
msgid "Toshiba Satellite S3000"
msgstr "Toshiba Satellite S3000"
-#: ../rules/base.xml.in.h:629
+#: ../rules/base.xml.in.h:689
msgid "Traditional phonetic"
msgstr "Traditioneel fonetisch"
-#: ../rules/base.xml.in.h:630
+#: ../rules/base.xml.in.h:690
msgid "Trust Direct Access Keyboard"
msgstr "Trust Direct Access toetsenbord"
-#: ../rules/base.xml.in.h:631
+#: ../rules/base.xml.in.h:691
msgid "Trust Slimline"
msgstr "Trust Slimline"
# classic is hier onderdeel van merknaam?
-#: ../rules/base.xml.in.h:632
+#: ../rules/base.xml.in.h:692
msgid "Trust Wireless Keyboard Classic"
msgstr "Trust Wireless Keyboard Classic"
-#: ../rules/base.xml.in.h:633
+#: ../rules/base.xml.in.h:693
msgid "Tur"
msgstr "Tur"
-#: ../rules/base.xml.in.h:634
+#: ../rules/base.xml.in.h:694
msgid "Turkey"
msgstr "Turkije"
-#: ../rules/base.xml.in.h:635
+#: ../rules/base.xml.in.h:695
msgid "Turkmenistan"
msgstr "Turkmenistan"
-#: ../rules/base.xml.in.h:636
+#: ../rules/base.xml.in.h:696
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
+
+#: ../rules/base.xml.in.h:697
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
+
+#: ../rules/base.xml.in.h:698
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:699
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+
+#: ../rules/base.xml.in.h:700
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+
+#: ../rules/base.xml.in.h:701
msgid "Typewriter"
msgstr "Typmachine"
-#: ../rules/base.xml.in.h:637
+#: ../rules/base.xml.in.h:702
+msgid "Typewriter, legacy"
+msgstr "Typmachine, historisch"
+
+# Tanzania?
+#: ../rules/base.xml.in.h:703
+msgid "Tza"
+msgstr "Tza"
+
+#: ../rules/base.xml.in.h:704
msgid "UCW layout (accented letters only)"
msgstr "UCW-indeling (allen lettertekens met accenten)"
+#: ../rules/base.xml.in.h:705
+msgid "US Dvorak with CZ UCW support"
+msgstr "US Dvorak met CZ UCW ondersteuning"
+
# lettersamenstelling?
-#: ../rules/base.xml.in.h:638
+#: ../rules/base.xml.in.h:706
msgid "US keyboard with Bosnian digraphs"
msgstr "Amerikaans toetsenbord met Bosnische digrafen"
-#: ../rules/base.xml.in.h:639
+#: ../rules/base.xml.in.h:707
msgid "US keyboard with Bosnian letters"
msgstr "Amerikaans toetsenbord met Bosnische lettertekens"
-#: ../rules/base.xml.in.h:640
+#: ../rules/base.xml.in.h:708
msgid "US keyboard with Croatian digraphs"
msgstr "Amerikaans toetsenbord met Kroatische digrafen"
-#: ../rules/base.xml.in.h:641
+#: ../rules/base.xml.in.h:709
msgid "US keyboard with Croatian letters"
msgstr "Amerikaans toetsenbord met Kroatische lettertekens"
-#: ../rules/base.xml.in.h:642
+#: ../rules/base.xml.in.h:710
msgid "US keyboard with Estonian letters"
msgstr "Amerikaans toetsenbord met Estlandse lettertekens"
-#: ../rules/base.xml.in.h:643
+#: ../rules/base.xml.in.h:711
msgid "US keyboard with Italian letters"
msgstr "Amerikaans toetsenbord met Italiaanse lettertekens"
-#: ../rules/base.xml.in.h:644
+#: ../rules/base.xml.in.h:712
msgid "US keyboard with Lithuanian letters"
msgstr "Amerikaans toetsenbord met Litouwse lettertekens"
-#: ../rules/base.xml.in.h:645
+#: ../rules/base.xml.in.h:713
msgid "US keyboard with Slovenian letters"
msgstr "Amerikaans toetsenbord met Sloveense lettertekens"
# eigenlijk VS maar dat is veel dubbelzinniger,
# iedereen weet wat USA betekent, VS kan voor veel dingen staan
-#: ../rules/base.xml.in.h:646 ../rules/base.extras.xml.in.h:9
+#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:11
msgid "USA"
msgstr "USA"
-#: ../rules/base.xml.in.h:647
+#: ../rules/base.xml.in.h:715
msgid "Udmurt"
msgstr "Udmurts"
-#: ../rules/base.xml.in.h:648
+#: ../rules/base.xml.in.h:716
msgid "Ukr"
msgstr "Ukr"
-#: ../rules/base.xml.in.h:649
+#: ../rules/base.xml.in.h:717
msgid "Ukraine"
msgstr "Oekraïne"
-#: ../rules/base.xml.in.h:650
+#: ../rules/base.xml.in.h:718
msgid "Unicode additions (arrows and math operators)"
msgstr "Unicode-aanvullingen (pijlen en wiskundige operatoren)"
-#: ../rules/base.xml.in.h:651
+#: ../rules/base.xml.in.h:719
msgid "Unicode additions (arrows and math operators). Math operators on default level"
msgstr "Unicode-aanvullingen (pijlen en wiskundige operatoren). Wiskundige operatoren op het standaard niveau"
-#: ../rules/base.xml.in.h:652
+#: ../rules/base.xml.in.h:720
msgid "UnicodeExpert"
msgstr "UnicodeExpert"
-#: ../rules/base.xml.in.h:653
+#: ../rules/base.xml.in.h:721
msgid "United Kingdom"
msgstr "Verenigd Koninkrijk"
-#: ../rules/base.xml.in.h:654
+#: ../rules/base.xml.in.h:722
msgid "Unitek KB-1925"
msgstr "Unitek KB-1925"
-#: ../rules/base.xml.in.h:655
+#: ../rules/base.xml.in.h:723
msgid "Urdu, Alternative phonetic"
msgstr "Urdu, alternatief fonetisch"
-#: ../rules/base.xml.in.h:656
+#: ../rules/base.xml.in.h:724
msgid "Urdu, Phonetic"
msgstr "Urdu, fonetisch"
-#: ../rules/base.xml.in.h:657
+#: ../rules/base.xml.in.h:725
msgid "Urdu, Winkeys"
msgstr "Urdu, Win-toetsen"
-#: ../rules/base.xml.in.h:658
+#: ../rules/base.xml.in.h:726
msgid "Use Bosnian digraphs"
msgstr "Bosnische digrafen gebruiken"
-#: ../rules/base.xml.in.h:659
+#: ../rules/base.xml.in.h:727
msgid "Use Croatian digraphs"
msgstr "Kroatische digrafen gebruiken"
# Guillemets of ook quillemets zijn Franse aanhalingstekens.
# Dit is de "Nederlandse" en dit is de «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:660
+#: ../rules/base.xml.in.h:728
msgid "Use guillemets for quotes"
msgstr "Franse aanhalingstekens gebruiken voor citaten"
-#: ../rules/base.xml.in.h:661
+#: ../rules/base.xml.in.h:729
msgid "Use keyboard LED to show alternative layout"
msgstr "Toetsenbord-LED gebruiken om alternatieve indeling te tonen"
-#: ../rules/base.xml.in.h:662
+#: ../rules/base.xml.in.h:730
msgid "Using space key to input non-breakable space character"
msgstr "Spatiebalk gebruiken voor het invoeren van niet-afbrekende (harde) spaties"
# Spatiebalk geeft de gebruikelijke spatie op elk niveau.
-#: ../rules/base.xml.in.h:663
+#: ../rules/base.xml.in.h:731
msgid "Usual space at any level"
msgstr "Gebruikelijke spatie op elk niveau"
-#: ../rules/base.xml.in.h:664
+#: ../rules/base.xml.in.h:732
msgid "Uzb"
msgstr "Uzb"
-#: ../rules/base.xml.in.h:665
+#: ../rules/base.xml.in.h:733
msgid "Uzbekistan"
msgstr "Oezbekistan"
-#: ../rules/base.xml.in.h:666
+#: ../rules/base.xml.in.h:734
msgid "Vietnam"
msgstr "Viëtnam"
-#: ../rules/base.xml.in.h:667
+#: ../rules/base.xml.in.h:735
msgid "ViewSonic KU-306 Internet Keyboard"
msgstr "ViewSonic KU-306 internet toetsenbord"
-#: ../rules/base.xml.in.h:668
+#: ../rules/base.xml.in.h:736
msgid "Vnm"
msgstr "Vnm"
-#: ../rules/base.xml.in.h:669
+#: ../rules/base.xml.in.h:737
msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
msgstr "Wang 724 cijferblok met unicode-aanvullingen (pijlen en wiskundige operatoren)"
-#: ../rules/base.xml.in.h:670
+#: ../rules/base.xml.in.h:738
msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
msgstr "Wang 724 cijferblok met unicode aanvullingen (pijlen en wiskundige operatoren). Wiskundige operatoren op het standaard niveau"
-#: ../rules/base.xml.in.h:671
+#: ../rules/base.xml.in.h:739
msgid "Wang model 724 azerty"
msgstr "Wang model 724 azerty"
-#: ../rules/base.xml.in.h:672
+#: ../rules/base.xml.in.h:740
msgid "Western"
msgstr "Westers"
-#: ../rules/base.xml.in.h:673
+#: ../rules/base.xml.in.h:741
msgid "Winbook Model XP5"
msgstr "Winbook Model XP5"
-#: ../rules/base.xml.in.h:674
+#: ../rules/base.xml.in.h:742
msgid "Winkeys"
msgstr "Win-toetsen"
-#: ../rules/base.xml.in.h:675
+#: ../rules/base.xml.in.h:743
msgid "With &lt;\\|&gt; key"
msgstr "Met &lt;\\|&gt;-toets"
-#: ../rules/base.xml.in.h:676
+#: ../rules/base.xml.in.h:744
msgid "With EuroSign on 5"
msgstr "Met het Euro-teken bij de 5"
# Guillemets of ook quillemets zijn Franse aanhalingstekens.
# Dit is "Nederlands" en dit is de «Franse manier» van aanhalen.
-#: ../rules/base.xml.in.h:677
+#: ../rules/base.xml.in.h:745
msgid "With guillemets"
msgstr "Met Franse aanhalingstekens"
-#: ../rules/base.xml.in.h:678
+#: ../rules/base.xml.in.h:746
msgid "Yahoo! Internet Keyboard"
msgstr "Yahoo! internettoetsenbord"
-#: ../rules/base.xml.in.h:679
+#: ../rules/base.xml.in.h:747
msgid "Yakut"
msgstr "Yakut"
-#: ../rules/base.xml.in.h:680
+#: ../rules/base.xml.in.h:748
msgid "Yoruba"
msgstr "Yoruba"
-#: ../rules/base.xml.in.h:681
+#: ../rules/base.xml.in.h:749
msgid "Z and ZHE swapped"
msgstr "Z en ZHE omgewisseld"
-#: ../rules/base.xml.in.h:682
-msgid "Zar"
-msgstr "Zar"
+#: ../rules/base.xml.in.h:750
+msgid "Zaf"
+msgstr "Zaf"
-#: ../rules/base.xml.in.h:683
+# The zero-width non-joiner (ZWNJ) is a non-printing character used in the computerized
+# typesetting of some cursive scripts, or other scripts which make use of ligatures, such as
+# Devanagari.
+#
+# When placed between two characters that would otherwise be connected,
+# a ZWNJ causes them to be printed in their final and initial forms, respectively
+#
+# Nulbreedte-losmaker/non-verbinder/non-verbindingsteken
+# losmaker is het duidelijkst, het maakt twee tekens los die anders verbonden zouden worden.
+# (Tino)
+#: ../rules/base.xml.in.h:751
+msgid "Zero-width non-joiner character at second level"
+msgstr "Nulbreedte-losmaker op het tweede niveau"
+
+#: ../rules/base.xml.in.h:752
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau"
+
+#: ../rules/base.xml.in.h:753
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, niets op het vierde niveau"
+
+#: ../rules/base.xml.in.h:754
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, smalle harde spatie op het vierde niveau"
+
+#: ../rules/base.xml.in.h:755
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Nulbreedte-losmaker op het tweede niveau, harde spatie op het derde niveau, nulbreedte-verbinder op het vierde niveau"
+
+#: ../rules/base.xml.in.h:756
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Nulbreedte-losmaker op het tweede niveau, nulbreedte-verbinder op het derde niveau"
+
+#: ../rules/base.xml.in.h:757
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Nulbreedte-losmaker op het tweede niveau, nulbreedte-verbinder op het derde niveau, harde spatie op het vierde niveau"
+
+#: ../rules/base.xml.in.h:758
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Nulbreedte-losmaker op het derde niveau, nulbreedte-verbinder op het vierde niveau"
+
+#: ../rules/base.xml.in.h:759
msgid "azerty"
msgstr "azerty"
-#: ../rules/base.xml.in.h:684
+#: ../rules/base.xml.in.h:760
msgid "azerty/digits"
msgstr "azerty/cijfers"
-#: ../rules/base.xml.in.h:685
+#: ../rules/base.xml.in.h:761
msgid "digits"
msgstr "cijfers"
-#: ../rules/base.xml.in.h:686
+#: ../rules/base.xml.in.h:762
msgid "displaced semicolon and quote (obsolete)"
msgstr "puntkomma en aanhalingsteken op afwijkende plek (historisch)"
-#: ../rules/base.xml.in.h:687
+#: ../rules/base.xml.in.h:763
msgid "lyx"
msgstr "lyx"
-#: ../rules/base.xml.in.h:688
+#: ../rules/base.xml.in.h:764
msgid "qwerty"
msgstr "qwerty"
# brede backslash/uitgebreide backslash
-#: ../rules/base.xml.in.h:689
+#: ../rules/base.xml.in.h:765
msgid "qwerty, extended Backslash"
msgstr "qwerty, brede backslash"
-#: ../rules/base.xml.in.h:690
+#: ../rules/base.xml.in.h:766
msgid "qwerty/digits"
msgstr "qwerty/cijfers"
-#: ../rules/base.xml.in.h:691
+#: ../rules/base.xml.in.h:767
msgid "qwertz"
msgstr "qwertz"
@@ -2859,24 +3200,82 @@ msgstr "APL"
msgid "Atsina"
msgstr "Atsina"
+# Het Avestisch is de taal van de Avesta: religieuze literatuur van de Parsi's,
+# volgelingen van Zoroaster of Zarathustra (heilsprofeet)
#: ../rules/base.extras.xml.in.h:3
+msgid "Avestan"
+msgstr "Avestisch"
+
+#: ../rules/base.extras.xml.in.h:4
msgid "Combining accents instead of dead keys"
msgstr "Combinerende accenten in plaats van dode toetsen"
-# Coeur d'Alene is a Salishan language spoken by only five of the 800 individuals in the Coeur d'Alene Tribe on the Coeur d'Alene Reservation in northern Idaho, United States.
+# Coeur d'Alene is a Salishan language spoken by only five of the 800 individuals
+# in the Coeur d'Alene Tribe on the Coeur d'Alene Reservation in northern Idaho, United States.
# http://en.wikipedia.org/wiki/Coeur_d'Alene_language
-#: ../rules/base.extras.xml.in.h:4
+#: ../rules/base.extras.xml.in.h:5
msgid "Couer D'alene Salish"
msgstr "Coeur D'alene Salish"
-#: ../rules/base.extras.xml.in.h:5
+#: ../rules/base.extras.xml.in.h:6
msgid "International (AltGr Unicode combining)"
msgstr "Internationaal (AltGr Unicode combinatie)"
-#: ../rules/base.extras.xml.in.h:6
+#: ../rules/base.extras.xml.in.h:7
msgid "International (AltGr Unicode combining, alternative)"
msgstr "Internationaal (AltGr Unicode combinatie, alternatief)"
+#~ msgid "2"
+#~ msgstr "2"
+
+#~ msgid "4"
+#~ msgstr "4"
+
+#~ msgid "5"
+#~ msgstr "5"
+
+#~ msgid "ACPI Standard"
+#~ msgstr "ACPI standaard"
+
+#~ msgid "Baltic+"
+#~ msgstr "Baltisch+"
+
+#~ msgid "Bhu"
+#~ msgstr "Bhu"
+
+#~ msgid "DRC"
+#~ msgstr "DRC"
+
+#~ msgid "E"
+#~ msgstr "E"
+
+#~ msgid "Evdev-managed keyboard"
+#~ msgstr "Evdev-beheerd toetsenbord"
+
+#~ msgid "Gre"
+#~ msgstr "Gri"
+
+#~ msgid "Gui"
+#~ msgstr "Gui"
+
+#~ msgid "IBM ThinkPad 560Z/600/600E/A22E, Intl"
+#~ msgstr "IBM ThinkPad 560Z/600/600E/A22E, Intl"
+
+#~ msgid "LAm"
+#~ msgstr "LAm"
+
+#~ msgid "Lav"
+#~ msgstr "Lav"
+
+#~ msgid "Nep"
+#~ msgstr "Nep"
+
+#~ msgid "ScrollLock"
+#~ msgstr "ScrollLock"
+
+#~ msgid "SrL"
+#~ msgstr "SrL"
+
# toevoegen/toekennen
#~ msgid "Add the EuroSign to the 2 key."
#~ msgstr "Het Euro-teken toevoegen aan de 2-toets."
@@ -2904,9 +3303,6 @@ msgstr "Internationaal (AltGr Unicode combinatie, alternatief)"
#~ msgid "Both Ctrl keys together change layout."
#~ msgstr "Beide Ctrl-toetsen samen verandert de indeling."
-#~ msgid "Both Shift keys together change layout."
-#~ msgstr "Beide Shift-toetsen samen verandert de indeling."
-
#~ msgid "Brazilian ABNT2"
#~ msgstr "Braziliaans ABNT2"
@@ -2940,10 +3336,6 @@ msgstr "Internationaal (AltGr Unicode combinatie, alternatief)"
#~ msgid "Japanese 106-key"
#~ msgstr "Japans 106-toetsen"
-# nummerblok/
-#~ msgid "Keypad"
-#~ msgstr "Nummerblok"
-
#~ msgid "Kir"
#~ msgstr "Kir"
@@ -3071,9 +3463,6 @@ msgstr "Internationaal (AltGr Unicode combinatie, alternatief)"
#~ msgid "Bulgarian"
#~ msgstr "Bulgaars"
-#~ msgid "Canadian"
-#~ msgstr "Canadees"
-
#~ msgid "Caps Lock key changes group"
#~ msgstr "Caps Lock-toets verandert de groep"
diff --git a/xorg-server/xkeyboard-config/po/pl.po b/xorg-server/xkeyboard-config/po/pl.po
index 917cc720c..a064d8e8c 100644
--- a/xorg-server/xkeyboard-config/po/pl.po
+++ b/xorg-server/xkeyboard-config/po/pl.po
@@ -4,12 +4,13 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.1-pre1\n"
+"Project-Id-Version: xkeyboard-config 2.1.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2011-01-12 00:16+0000\n"
-"PO-Revision-Date: 2011-01-12 19:01+0100\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-04-01 18:20+0200\n"
"Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
"Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
+"Language: pl\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -19,3078 +20,3732 @@ msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Mniejsze/Większe&gt;"
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Mniejsze/Większe&gt; (wybiera poziom 3., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3.)"
#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 5. i włącza blokadę poziomu 5. przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr "(F)"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr "(stary) alternatywny"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Mniejsze/Większe&gt; wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(stary) alternatywny, klawisze akcentów Suna"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(stary) alternatywny, bez klawiszy akcentów"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr "Kompatybilny ze 101/104 klawiszami"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/QWERTY/przecinek/Klawisze akcentów"
+msgid "ATM/phone-style"
+msgstr "ATM/telefoniczna"
#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/QWERTY/przecinek/Bez klawiszy akcentów"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/QWERTY/kropka/Klawisze akcentów"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/QWERTY/kropka/Bez klawiszy akcentów"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/QWERTZ/przecinek/Klawisze akcentów"
+msgid "Acer Laptop"
+msgstr "Laptop Acer"
#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/QWERTZ/przecinek/Bez klawiszy akcentów"
+msgid "Add the standard behavior to Menu key"
+msgstr "Dodanie standardowego działania klawisza Menu"
#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/QWERTZ/kropka/Klawisze akcentów"
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Dodanie akcentów przeciągłych Esperanto (supersigno)"
#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/QWERTZ/kropka/Bez klawiszy akcentów"
+msgid "Adding currency signs to certain keys"
+msgstr "Dodanie znaków walut do pewnych klawiszy"
#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/QWERTY/przecinek/Klawisze akcentów"
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/QWERTY/przecinek/Bez klawiszy akcentów"
+msgid "Afg"
+msgstr "AFG"
#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/QWERTY/kropka/Klawisze akcentów"
+msgid "Afghani"
+msgstr "Afgański"
#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/QWERTY/kropka/Bez klawiszy akcentów"
+msgid "Akan"
+msgstr "Akan"
#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/QWERTZ/przecinek/Klawisze akcentów"
+msgid "Albanian"
+msgstr "Albański"
#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/QWERTZ/przecinek/Bez klawiszy akcentów"
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt i Meta pod klawiszami Alt"
#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/QWERTZ/kropka/Klawisze akcentów"
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt pod prawym Win, Super pod Menu"
#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/QWERTZ/kropka/Bez klawiszy akcentów"
+msgid "Alt+Caps Lock"
+msgstr "Alt+CapsLock"
#: ../rules/base.xml.in.h:25
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
#: ../rules/base.xml.in.h:26
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
#: ../rules/base.xml.in.h:27
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
+msgid "Alt+Space"
+msgstr "Alt+Spacja"
#: ../rules/base.xml.in.h:28
-msgid "ATM/phone-style"
-msgstr "ATM/telefoniczna"
+msgid "Alt/Win key behavior"
+msgstr "Zachowanie klawiszy Alt/Win"
#: ../rules/base.xml.in.h:29
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Amharic"
+msgstr "Amharski"
#: ../rules/base.xml.in.h:30
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Any Alt key"
+msgstr "Dowolny klawisz Alt"
#: ../rules/base.xml.in.h:31
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Any Win key"
+msgstr "Dowolny klawisz Win"
#: ../rules/base.xml.in.h:32
-msgid "Acer Laptop"
-msgstr "Laptop Acer"
+msgid "Any Win key (while pressed)"
+msgstr "Dowolny klawisz Win (wciśnięty)"
#: ../rules/base.xml.in.h:33
-msgid "Add the standard behavior to Menu key"
-msgstr "Dodanie standardowego działania klawisza Menu"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:34
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Dodanie akcentów przeciągłych Esperanto (supersigno)"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Apple Aluminium Keyboard (ANSI)"
#: ../rules/base.xml.in.h:35
-msgid "Adding currency signs to certain keys"
-msgstr "Dodanie znaków walut do pewnych klawiszy"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Apple Aluminium Keyboard (ISO)"
#: ../rules/base.xml.in.h:36
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Apple Aluminium Keyboard (JIS)"
#: ../rules/base.xml.in.h:37
-msgid "Afg"
-msgstr "AFG"
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Apple Aluminium Keyboard: emulacja klawiszy PC (Print, ScrollLock, Pause, NumLock)"
#: ../rules/base.xml.in.h:38
-msgid "Afghanistan"
-msgstr "Afgański"
+msgid "Apple Laptop"
+msgstr "Laptop Apple"
#: ../rules/base.xml.in.h:39
-msgid "Akan"
-msgstr "Akan"
+msgid "Arabic"
+msgstr "Arabski"
#: ../rules/base.xml.in.h:40
-msgid "Alb"
-msgstr "ALB"
+msgid "Arabic (Buckwalter)"
+msgstr "Arabski (Buckwalter)"
#: ../rules/base.xml.in.h:41
-msgid "Albania"
-msgstr "Albański"
+msgid "Arabic (Morocco)"
+msgstr "Arabski (marokański)"
#: ../rules/base.xml.in.h:42
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt i Meta pod klawiszami Alt"
+msgid "Arabic (Pakistan)"
+msgstr "Arabski (pakistański)"
#: ../rules/base.xml.in.h:43
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt pod prawym Win, Super pod Menu"
+msgid "Arabic (Syria)"
+msgstr "Arabski (syryjski)"
#: ../rules/base.xml.in.h:44
-msgid "Alt+Caps Lock"
-msgstr "Alt+CapsLock"
+msgid "Arabic (azerty)"
+msgstr "Arabski (AZERTY)"
#: ../rules/base.xml.in.h:45
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
+msgid "Arabic (azerty/digits)"
+msgstr "Arabski (AZERTY/cyfry)"
#: ../rules/base.xml.in.h:46
-msgid "Alt+Shift"
-msgstr "Alt+Shift"
+msgid "Arabic (digits)"
+msgstr "Arabski (cyfry)"
#: ../rules/base.xml.in.h:47
-msgid "Alt+Space"
-msgstr "Alt+Spacja"
+msgid "Arabic (qwerty)"
+msgstr "Arabski (QWERTY)"
#: ../rules/base.xml.in.h:48
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Arabic (qwerty/digits)"
+msgstr "Arabski (QWERTY/cyfry)"
#: ../rules/base.xml.in.h:49
-msgid "Alt/Win key behavior"
-msgstr "Zachowanie klawiszy Alt/Win"
+msgid "Armenian"
+msgstr "Armeński"
#: ../rules/base.xml.in.h:50
-msgid "Alternative"
-msgstr "Alternatywny"
+msgid "Armenian (alternative eastern)"
+msgstr "Armeński (anternatywny wschodni)"
#: ../rules/base.xml.in.h:51
-msgid "Alternative Eastern"
-msgstr "Anternatywny wschodni"
+msgid "Armenian (alternative phonetic)"
+msgstr "Armeński (alternatywny fonetyczny)"
#: ../rules/base.xml.in.h:52
-msgid "Alternative Phonetic"
-msgstr "Alternatywny fonetyczny"
+msgid "Armenian (eastern)"
+msgstr "Armeński (wschodni)"
#: ../rules/base.xml.in.h:53
-msgid "Alternative international"
-msgstr "Alternatywny międzynarodowy"
+msgid "Armenian (phonetic)"
+msgstr "Armeński (fonetyczny)"
#: ../rules/base.xml.in.h:54
-msgid "Alternative, Sun dead keys"
-msgstr "Alternatywny, klawisze akcentów Suna"
+msgid "Armenian (western)"
+msgstr "Armeński (zachodni)"
#: ../rules/base.xml.in.h:55
-msgid "Alternative, eliminate dead keys"
-msgstr "Alternatywny, bez klawiszy akcentów"
+msgid "Asus Laptop"
+msgstr "Laptop Asus"
#: ../rules/base.xml.in.h:56
-msgid "Alternative, latin-9 only"
-msgstr "Alternatywny, tylko latin-9"
+msgid "At bottom left"
+msgstr "W lewym dolnym rogu"
#: ../rules/base.xml.in.h:57
-msgid "And"
-msgstr "AND"
+msgid "At left of 'A'"
+msgstr "Z lewej 'A'"
#: ../rules/base.xml.in.h:58
-msgid "Andorra"
-msgstr "Andorski"
+msgid "Avatime"
+msgstr "Avatime"
#: ../rules/base.xml.in.h:59
-msgid "Any Alt key"
-msgstr "Dowolny klawisz Alt"
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Azerbejdżański (cyrylica)"
#: ../rules/base.xml.in.h:60
-msgid "Any Win key"
-msgstr "Dowolny klawisz Win"
+msgid "Azerbaijani"
+msgstr "Azerbejdżański"
#: ../rules/base.xml.in.h:61
-msgid "Any Win key (while pressed)"
-msgstr "Dowolny klawisz Win (wciśnięty)"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 wireless Internet Keyboard"
#: ../rules/base.xml.in.h:62
-msgid "Apostrophe (') variant"
-msgstr "Wariant z apostrofem (')"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:63
-msgid "Apple"
-msgstr "Apple"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimedia"
#: ../rules/base.xml.in.h:64
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Apple Aluminium Keyboard (ANSI)"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:65
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Apple Aluminium Keyboard (ISO)"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:66
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Apple Aluminium Keyboard (JIS)"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Apple Aluminium Keyboard: emulacja klawiszy PC (Print, ScrollLock, Pause, NumLock)"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:68
-msgid "Apple Laptop"
-msgstr "Laptop Apple"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:69
-msgid "Ara"
-msgstr "ARA"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:70
-msgid "Arabic"
-msgstr "Arabski"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
#: ../rules/base.xml.in.h:71
-msgid "Arm"
-msgstr "ARM"
+msgid "Backslash"
+msgstr "Backslash"
#: ../rules/base.xml.in.h:72
-msgid "Armenia"
-msgstr "Armeński"
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Odwrotny ukośnik wybiera poziom 3., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3."
#: ../rules/base.xml.in.h:73
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Wariant asturski z H i L z dolną kropką"
+msgid "Bambara"
+msgstr "Bambara"
#: ../rules/base.xml.in.h:74
-msgid "Asus Laptop"
-msgstr "Laptop Asus"
+msgid "Belarusian"
+msgstr "Białoruski"
#: ../rules/base.xml.in.h:75
-msgid "At bottom left"
-msgstr "W lewym dolnym rogu"
+msgid "Belarusian (Latin)"
+msgstr "Białoruski (łaciński)"
#: ../rules/base.xml.in.h:76
-msgid "At left of 'A'"
-msgstr "Z lewej 'A'"
+msgid "Belarusian (legacy)"
+msgstr "Białoruski (stary)"
#: ../rules/base.xml.in.h:77
-msgid "Austria"
-msgstr "Austriacki"
+msgid "Belgian"
+msgstr "Belgijski"
#: ../rules/base.xml.in.h:78
-msgid "Aut"
-msgstr "Aut"
+msgid "Belgian (ISO alternate)"
+msgstr "Belgijski (alternatywny ISO)"
#: ../rules/base.xml.in.h:79
-msgid "Avatime"
-msgstr "Avatime"
+msgid "Belgian (Sun dead keys)"
+msgstr "Belgijski (klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:80
-msgid "Aze"
-msgstr "AZE"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belgijski (Wang model 724 AZERTY)"
#: ../rules/base.xml.in.h:81
-msgid "Azerbaijan"
-msgstr "Azerbejdżański"
+msgid "Belgian (alternative)"
+msgstr "Belgijski (alternatywny)"
#: ../rules/base.xml.in.h:82
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 wireless Internet Keyboard"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belgijski (alternatywny, klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:83
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belgijski (alternatywny, tylko latin-9)"
#: ../rules/base.xml.in.h:84
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF Multimedia"
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belgijski (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:85
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:86
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:87
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:88
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Bengali"
+msgstr "Bengalski"
#: ../rules/base.xml.in.h:89
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Bengali (Probhat)"
+msgstr "Bengalski (Probhat)"
#: ../rules/base.xml.in.h:90
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Berberyjski (Maroko, alternatywny fonetyczny tifinagh)"
#: ../rules/base.xml.in.h:91
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Berberyjski (Maroko, alternatywny tifinagh)"
#: ../rules/base.xml.in.h:92
-msgid "Backslash"
-msgstr "Backslash"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Berberyjski (Maroko, rozszerzony fonetyczny tifinagh)"
#: ../rules/base.xml.in.h:93
-msgid "Bangladesh"
-msgstr "Bangladeski"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Berberyjski (Maroko, rozszerzony tifinagh)"
#: ../rules/base.xml.in.h:94
-msgid "Bashkirian"
-msgstr "Baszkirski"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Berberyjski (Maroko, tifinagh fonetyczny"
#: ../rules/base.xml.in.h:95
-msgid "Bel"
-msgstr "BEL"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Berberyjski (Maroko, tifinagh)"
#: ../rules/base.xml.in.h:96
-msgid "Belarus"
-msgstr "Białoruski"
+msgid "Bosnian"
+msgstr "Bośniacki"
#: ../rules/base.xml.in.h:97
-msgid "Belgium"
-msgstr "Belgijski"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bośniacki (klawiatura US z dwuznakami bośniackimi)"
#: ../rules/base.xml.in.h:98
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bośniacki (klawiatura US z literami bośniackimi)"
#: ../rules/base.xml.in.h:99
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bośniacki (z użyciem dwuznaków bośniackich)"
#: ../rules/base.xml.in.h:100
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bośniacki (z użyciem cudzysłowów do cytowania)"
#: ../rules/base.xml.in.h:101
-msgid "Bengali"
-msgstr "Bengalski"
+msgid "Both Alt keys together"
+msgstr "Oba klawisze Alt naraz"
#: ../rules/base.xml.in.h:102
-msgid "Bengali Probhat"
-msgstr "Bengalski Probhat"
+msgid "Both Ctrl keys together"
+msgstr "Oba klawisze Ctrl naraz"
#: ../rules/base.xml.in.h:103
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ergonomiczny, w stylu Dvoraka"
+msgid "Both Shift keys together"
+msgstr "Oba klawisze Shift naraz"
#: ../rules/base.xml.in.h:104
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ergonomiczny, w stylu Dvoraka, tylko latin-9"
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Oba klawisze Shift naraz włączają CapsLock, jeden Shift wyłącza"
#: ../rules/base.xml.in.h:105
-msgid "Bgd"
-msgstr "BGD"
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Oba klawisze Shift naraz przełączają CapsLock"
#: ../rules/base.xml.in.h:106
-msgid "Bgr"
-msgstr "BGR"
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Oba klawisze Shift naraz przełączają ShiftLock"
#: ../rules/base.xml.in.h:107
-msgid "Bhutan"
-msgstr "Bhutański"
+msgid "Braille"
+msgstr "Braille'a"
#: ../rules/base.xml.in.h:108
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Hebrajski biblijny (Tiro)"
+msgid "Braille (left hand)"
+msgstr "Braille (leworęczny)"
#: ../rules/base.xml.in.h:109
-msgid "Bih"
-msgstr "BIH"
+msgid "Braille (right hand)"
+msgstr "Braille (praworęczny)"
#: ../rules/base.xml.in.h:110
-msgid "Blr"
-msgstr "BLR"
+msgid "Brother Internet Keyboard"
+msgstr "Brother Internet Keyboard"
#: ../rules/base.xml.in.h:111
-msgid "Bosnia and Herzegovina"
-msgstr "Bośniacko-hercegowiński"
+msgid "Bulgarian"
+msgstr "Bułgarski"
#: ../rules/base.xml.in.h:112
-msgid "Both Alt keys together"
-msgstr "Oba klawisze Alt naraz"
+msgid "Bulgarian (new phonetic)"
+msgstr "Bułgarski (nowy fonetyczny)"
#: ../rules/base.xml.in.h:113
-msgid "Both Ctrl keys together"
-msgstr "Oba klawisze Ctrl naraz"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Bułgarski (tradycyjny fonetyczny)"
#: ../rules/base.xml.in.h:114
-msgid "Both Shift keys together"
-msgstr "Oba klawisze Shift naraz"
+msgid "Burmese"
+msgstr "Birmański"
#: ../rules/base.xml.in.h:115
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "Oba klawisze Shift naraz przełączają CapsLock"
+msgid "Canadian Multilingual"
+msgstr "Kanadyjski wielojęzyczny"
#: ../rules/base.xml.in.h:116
-msgid "Botswana"
-msgstr "Botswański"
+msgid "Canadian Multilingual (first part)"
+msgstr "Kanadyjski wielojęzyczny (część pierwsza)"
#: ../rules/base.xml.in.h:117
-msgid "Bra"
-msgstr "BRA"
+msgid "Canadian Multilingual (second part)"
+msgstr "Kanadyjski wielojęzyczny (część druga)"
#: ../rules/base.xml.in.h:118
-msgid "Braille"
-msgstr "Braille'a"
+msgid "Caps Lock"
+msgstr "CapsLock"
#: ../rules/base.xml.in.h:119
-msgid "Brazil"
-msgstr "Brazylijski"
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "CapsLock (wybiera poziom 3., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3.)"
#: ../rules/base.xml.in.h:120
-msgid "Breton"
-msgstr "Bretoński"
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "CapsLock (do pierwszego układu), Shift+CapsLock (do ostatniego układu)"
#: ../rules/base.xml.in.h:121
-msgid "Brl"
-msgstr "BRL"
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "CapsLock (wciśnięty), Alt+CapsLock działa jak zwykły CapsLock"
#: ../rules/base.xml.in.h:122
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internet Keyboard"
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "CapsLock działa jako Shift z blokadą. Shift wstrzymuje CapsLock"
#: ../rules/base.xml.in.h:123
-msgid "Btn"
-msgstr "BTN"
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "CapsLock działa jako Shift z blokadą. Shift nie wpływa na CapsLock"
#: ../rules/base.xml.in.h:124
-msgid "Buckwalter"
-msgstr "Buckwalter"
+msgid "Caps Lock is disabled"
+msgstr "CapsLock wyłączony"
#: ../rules/base.xml.in.h:125
-msgid "Bulgaria"
-msgstr "Bułgarski"
+msgid "Caps Lock key behavior"
+msgstr "Zachowanie klawisza CapsLock"
#: ../rules/base.xml.in.h:126
-msgid "Bwa"
-msgstr "BWA"
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "CapsLock przełącza Shift wpływając na wszystkie klawisze"
#: ../rules/base.xml.in.h:127
-msgid "COD"
-msgstr "COD"
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "CapsLock przełącza wielkość znaków alfabetycznych"
#: ../rules/base.xml.in.h:128
-msgid "CRULP"
-msgstr "CRULP"
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "CapsLock używa wewnętrznej zmiany rozmiaru liter. Shift wstrzymuje CapsLock"
#: ../rules/base.xml.in.h:129
-msgid "Cambodia"
-msgstr "Kambodżański"
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "CapsLock używa wewnętrznej zmiany rozmiaru liter. Shift nie wpływa na CapsLock"
#: ../rules/base.xml.in.h:130
-msgid "Can"
-msgstr "CAN"
+msgid "Catalan"
+msgstr "Kataloński"
#: ../rules/base.xml.in.h:131
-msgid "Canada"
-msgstr "Kanadyjski"
+msgid "Cherokee"
+msgstr "Czerokeski"
#: ../rules/base.xml.in.h:132
-msgid "Capewell-Dvorak (Baybayin)"
-msgstr "Capewella-Dvoraka (baybayin)"
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
#: ../rules/base.xml.in.h:133
-msgid "Capewell-Dvorak (Latin)"
-msgstr "Capewella-Dvoraka (łaciński)"
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
#: ../rules/base.xml.in.h:134
-msgid "Capewell-QWERF 2006 (Baybayin)"
-msgstr "Capewella-QWERF 2006 (baybayin)"
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (opcja zmiany)"
#: ../rules/base.xml.in.h:135
-msgid "Capewell-QWERF 2006 (Latin)"
-msgstr "Capewella-QWERF 2006 (łaciński)"
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
#: ../rules/base.xml.in.h:136
-msgid "Caps Lock"
-msgstr "CapsLock"
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
#: ../rules/base.xml.in.h:137
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "CapsLock (do pierwszego układu), Shift+CapsLock (do ostatniego układu)"
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:138
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "CapsLock (wciśnięty), Alt+CapsLock działa jak zwykły CapsLock"
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "CapsLock działa jako Shift z blokadą. Shift wstrzymuje CapsLock"
+msgid "Chicony Internet Keyboard"
+msgstr "Chicony Internet Keyboard"
#: ../rules/base.xml.in.h:140
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "CapsLock działa jako Shift z blokadą. Shift nie wpływa na CapsLock"
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
#: ../rules/base.xml.in.h:141
-msgid "Caps Lock is disabled"
-msgstr "CapsLock wyłączony"
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
#: ../rules/base.xml.in.h:142
-msgid "Caps Lock key behavior"
-msgstr "Zachowanie klawisza CapsLock"
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "CapsLock przełącza Shift wpływając na wszystkie klawisze"
+msgid "Chinese"
+msgstr "Chiński"
#: ../rules/base.xml.in.h:144
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr "CapsLock przełącza wielkość znaków alfabetycznych"
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Chiński (tybetański z liczbami ASCII)"
#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr "CapsLock używa wewnętrznej zmiany rozmiaru liter. Shift wstrzymuje CapsLock"
+msgid "Chinese (Tibetan)"
+msgstr "Chiński (tybetański)"
#: ../rules/base.xml.in.h:146
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr "CapsLock używa wewnętrznej zmiany rozmiaru liter. Shift nie wpływa na CapsLock"
+msgid "Chinese (Uyghur)"
+msgstr "Chiński (ujgurski)"
#: ../rules/base.xml.in.h:147
-msgid "Catalan variant with middle-dot L"
-msgstr "Wariant kataloński z L ze środkową kropką"
+msgid "Classmate PC"
+msgstr "Classmate PC"
#: ../rules/base.xml.in.h:148
-msgid "Cedilla"
-msgstr "Cedilla"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access Keyboard"
#: ../rules/base.xml.in.h:149
-msgid "Che"
-msgstr "CHE"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internet Keyboard (13 klawiszy)"
#: ../rules/base.xml.in.h:150
-msgid "Cherokee"
-msgstr "Czerokeski"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internet Keyboard (18 klawiszy)"
#: ../rules/base.xml.in.h:151
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UNLIMITED"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internet Keyboard (7 klawiszy)"
#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq Keyboard"
#: ../rules/base.xml.in.h:153
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (opcja zmiany)"
+msgid "Compose key position"
+msgstr "Położenie klawisza Compose"
#: ../rules/base.xml.in.h:154
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Backspace"
#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control pod klawiszami Alt, Alt pod klawiszami Win"
#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control pod klawiszami Win (oraz zwykłymi klawiszami Ctrl)"
#: ../rules/base.xml.in.h:157
-msgid "Cherry CyMotion Master XPress"
-msgstr "Cherry CyMotion Master XPress"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
#: ../rules/base.xml.in.h:158
-msgid "Chicony Internet Keyboard"
-msgstr "Chicony Internet Keyboard"
+msgid "Croatian"
+msgstr "Chorwacki"
#: ../rules/base.xml.in.h:159
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Chorwacki (klawiatura US z dwuznakami chorwackimi)"
#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Chorwacki (klawiatura US z literami chorwackimi)"
#: ../rules/base.xml.in.h:161
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Chorwacki (z użyciem dwuznaków chorwackich)"
#: ../rules/base.xml.in.h:162
-msgid "China"
-msgstr "Chiński"
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Chorwacki (z użyciem cudzysłowów do cytowania)"
#: ../rules/base.xml.in.h:163
-msgid "Chn"
-msgstr "CHN"
+msgid "Ctrl key position"
+msgstr "Położenie klawisza Ctrl"
#: ../rules/base.xml.in.h:164
-msgid "Chuvash"
-msgstr "Czuwaski"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
#: ../rules/base.xml.in.h:165
-msgid "Chuvash Latin"
-msgstr "Czuwaski łaciński"
+msgid "Czech"
+msgstr "Czeski"
#: ../rules/base.xml.in.h:166
-msgid "Classic"
-msgstr "Klasyczny"
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Czeski (układ UCW - tylko litery akcentowane)"
#: ../rules/base.xml.in.h:167
-msgid "Classic Dvorak"
-msgstr "Klasyczny Dvoraka"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Czeski (US Dvoraka z obsługą CZ UCW)"
#: ../rules/base.xml.in.h:168
-msgid "Classic, eliminate dead keys"
-msgstr "Klasyczny, bez klawiszy akcentów"
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Czeski (z klawiszem &lt;\\|&gt;)"
#: ../rules/base.xml.in.h:169
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Czech (qwerty)"
+msgstr "Czeski (QWERTY)"
#: ../rules/base.xml.in.h:170
-msgid "CloGaelach"
-msgstr "Szkocki gaelicki"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Czeski (QWERTY, rozszerzony Backslash)"
#: ../rules/base.xml.in.h:171
-msgid "Colemak"
-msgstr "Colemak"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:172
-msgid "Colemak (Baybayin)"
-msgstr "Colemak (baybayin)"
+msgid "Danish"
+msgstr "Duński"
#: ../rules/base.xml.in.h:173
-msgid "Colemak (Latin)"
-msgstr "Colemak (łaciński)"
+msgid "Danish (Dvorak)"
+msgstr "Duński (Dvoraka)"
#: ../rules/base.xml.in.h:174
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access Keyboard"
+msgid "Danish (Mac)"
+msgstr "Duński (Mac)"
#: ../rules/base.xml.in.h:175
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internet Keyboard (13 klawiszy)"
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Duński (Mac, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:176
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internet Keyboard (18 klawiszy)"
+msgid "Danish (eliminate dead keys)"
+msgstr "Duński (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:177
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internet Keyboard (7 klawiszy)"
+msgid "Default numeric keypad keys"
+msgstr "Domyślne klawisze klawiatury numerycznej"
#: ../rules/base.xml.in.h:178
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq Keyboard"
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:179
-msgid "Compose key position"
-msgstr "Położenie klawisza Compose"
+msgid "Dell 101-key PC"
+msgstr "Dell 101-key PC"
#: ../rules/base.xml.in.h:180
-msgid "Congo, Democratic Republic of the"
-msgstr "Kongijski"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Laptop/notebook Dell Inspiron 6xxx/8xxx"
#: ../rules/base.xml.in.h:181
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Backspace"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Laptop/notebook z serii Dell Precision M"
#: ../rules/base.xml.in.h:182
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Control pod klawiszami Alt, Alt pod klawiszami Win"
+msgid "Dell Latitude series laptop"
+msgstr "Laptop z serii Dell Latitude"
#: ../rules/base.xml.in.h:183
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control pod klawiszami Win (oraz zwykłymi klawiszami Ctrl)"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:184
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Krymskotatarski (Dobruca-1 Q)"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Krymskotatarski (Dobruca-2 Q)"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB Multimedia Keyboard"
#: ../rules/base.xml.in.h:187
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Krymskotatarski (turecki Alt-Q)"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa Wireless Desktop Keyboard"
#: ../rules/base.xml.in.h:188
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Krymskotatarski (turecki F)"
+msgid "Dhivehi"
+msgstr "Malediwski"
#: ../rules/base.xml.in.h:189
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Krymskotatarski (turecki Q)"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond z serii 9801 / 9802"
#: ../rules/base.xml.in.h:190
-msgid "Croatia"
-msgstr "Chorwacki"
+msgid "Dutch"
+msgstr "Holenderski"
#: ../rules/base.xml.in.h:191
-msgid "Ctrl key position"
-msgstr "Położenie klawisza Ctrl"
+msgid "Dutch (Mac)"
+msgstr "Holenderski (Mac)"
#: ../rules/base.xml.in.h:192
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Shift"
+msgid "Dutch (Sun dead keys)"
+msgstr "Holenderski (klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:193
-msgid "Cyrillic"
-msgstr "Cyrylicki"
+msgid "Dutch (standard)"
+msgstr "Holenderski (standardowy)"
#: ../rules/base.xml.in.h:194
-msgid "Cyrillic with guillemets"
-msgstr "Cyrylicki z cudzysłowami"
+msgid "Dzongkha"
+msgstr "Dzongka"
#: ../rules/base.xml.in.h:195
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Cyrylicki, zamienione Z i Ż"
+msgid "Enable extra typographic characters"
+msgstr "Włączenie dodatkowych znaków typograficznych"
#: ../rules/base.xml.in.h:196
-msgid "Cze"
-msgstr "CZE"
+msgid "English (Canada)"
+msgstr "Angielski (Kanada)"
#: ../rules/base.xml.in.h:197
-msgid "Czechia"
-msgstr "Czeski"
+msgid "English (Colemak)"
+msgstr "Angielski (Colemak)"
#: ../rules/base.xml.in.h:198
-msgid "DOS"
-msgstr "DOS"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Angielski (alternatywny międzynarodowy Dvoraka bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:199
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "English (Dvorak international with dead keys)"
+msgstr "Angielski (międzynarodowy Dvoraka z klawiszami akcentów)"
#: ../rules/base.xml.in.h:200
-msgid "Dead acute"
-msgstr "Akcent ostry"
+msgid "English (Dvorak)"
+msgstr "Angielski (Dvoraka)"
#: ../rules/base.xml.in.h:201
-msgid "Dead grave acute"
-msgstr "Akcent gravis"
+msgid "English (Ghana)"
+msgstr "Angielski (Ghana)"
#: ../rules/base.xml.in.h:202
-msgid "Default numeric keypad keys"
-msgstr "Domyślne klawisze klawiatury numerycznej"
+msgid "English (Ghana, GILLBT)"
+msgstr "Angielski (Ghana, GILLBT)"
#: ../rules/base.xml.in.h:203
-msgid "Dell"
-msgstr "Dell"
+msgid "English (Ghana, multilingual)"
+msgstr "Angielski (Ghana, wielojęzyczny)"
#: ../rules/base.xml.in.h:204
-msgid "Dell 101-key PC"
-msgstr "Dell 101-key PC"
+msgid "English (India, with RupeeSign)"
+msgstr "Angielski (Indie, ze znakiem rupii)"
#: ../rules/base.xml.in.h:205
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Laptop/notebook Dell Inspiron 6xxx/8xxx"
+msgid "English (Macintosh)"
+msgstr "Angielski (Macintosh)"
#: ../rules/base.xml.in.h:206
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Laptop/notebook z serii Dell Precision M"
+msgid "English (Mali, USA Mac)"
+msgstr "Angielski (Mali, USA - Mac)"
#: ../rules/base.xml.in.h:207
-msgid "Dell Latitude series laptop"
-msgstr "Laptop z serii Dell Latitude"
+msgid "English (Mali, USA international)"
+msgstr "Angielski (Mali, międzynarodowy USA)"
#: ../rules/base.xml.in.h:208
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "English (Nigeria)"
+msgstr "Angielski (Nigeria)"
#: ../rules/base.xml.in.h:209
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
+msgid "English (South Africa)"
+msgstr "Angielski (Afryka Południowa)"
#: ../rules/base.xml.in.h:210
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "English (UK)"
+msgstr "Angielski (Wielka Brytania)"
#: ../rules/base.xml.in.h:211
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell USB Multimedia Keyboard"
+msgid "English (UK, Colemak)"
+msgstr "Angielski (Wielka Brytania, Colemak)"
#: ../rules/base.xml.in.h:212
-msgid "Denmark"
-msgstr "Duński"
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Angielski (Wielka Brytania, Dvoraka z brytyjskimi znakami przestankowymi)"
#: ../rules/base.xml.in.h:213
-msgid "Deu"
-msgstr "DEU"
+msgid "English (UK, Dvorak)"
+msgstr "Angielski (Wielka Brytania, Dvoraka)"
#: ../rules/base.xml.in.h:214
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa Wireless Desktop Keyboard"
+msgid "English (UK, Mac international)"
+msgstr "Angielski (Wielka Brytania, międzynarodowy Mac)"
#: ../rules/base.xml.in.h:215
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond z serii 9801 / 9802"
+msgid "English (UK, Mac)"
+msgstr "Angielski (Wielka Brytania, Mac)"
#: ../rules/base.xml.in.h:216
-msgid "Dnk"
-msgstr "DNK"
+msgid "English (UK, extended, WinKeys)"
+msgstr "Angielski (Wielka Brytania, rozszerzony, klawisze Win)"
#: ../rules/base.xml.in.h:217
-msgid "Dvorak"
-msgstr "Dvoraka"
+msgid "English (UK, international with dead keys)"
+msgstr "Angielski (Wielka Brytania, międzynarodowy z klawiszami akcentów)"
#: ../rules/base.xml.in.h:218
-msgid "Dvorak (Baybayin)"
-msgstr "Dvoraka (baybayin)"
+msgid "English (US)"
+msgstr "Angielski (USA)"
#: ../rules/base.xml.in.h:219
-msgid "Dvorak (Latin)"
-msgstr "Dvoraka (łaciński)"
+msgid "English (US, alternative international)"
+msgstr "Angielski (USA, alternatywny międzynarodowy)"
#: ../rules/base.xml.in.h:220
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvoraka (znaki przestankowe UK)"
+msgid "English (US, international with dead keys)"
+msgstr "Międzynarodowy (USA, międzynarodowy z klawiszami akcentów)"
#: ../rules/base.xml.in.h:221
-msgid "Dvorak alternative international (no dead keys)"
-msgstr "Alternatywny międzynarodowy Dvoraka (bez klawiszy akcentów)"
+msgid "English (US, with euro on 5)"
+msgstr "Angielski (USA, ze znakiem euro pod 5)"
#: ../rules/base.xml.in.h:222
-msgid "Dvorak international (with dead keys)"
-msgstr "Międzynarodowy Dvoraka (z klawiszami akcentów)"
+msgid "English (classic Dvorak)"
+msgstr "Angielski (klasyczny Dvoraka)"
#: ../rules/base.xml.in.h:223
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Dvoraka, polskie cudzysłowy pod klawiszem 1"
+msgid "English (international AltGr dead keys)"
+msgstr "Angielski (międzynarodowy, klawisze akcentów pod AltGr)"
#: ../rules/base.xml.in.h:224
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvoraka, polskie cudzysłowy pod klawiszem cudzysłowu"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Angielski (przełączanie układu klawiszem mnożenia/dzielenia)"
#: ../rules/base.xml.in.h:225
-msgid "Eastern"
-msgstr "Wschodni"
+msgid "English (left handed Dvorak)"
+msgstr "Angielski (leworęczny Dvoraka)"
#: ../rules/base.xml.in.h:226
-msgid "Eliminate dead keys"
-msgstr "Bez klawiszy akcentów"
+msgid "English (programmer Dvorak)"
+msgstr "Angielski (Dvoraka programisty)"
#: ../rules/base.xml.in.h:227
-msgid "Enable extra typographic characters"
-msgstr "Włączenie dodatkowych znaków typograficznych"
+msgid "English (right handed Dvorak)"
+msgstr "Angielski (praworęczny Dvoraka)"
#: ../rules/base.xml.in.h:228
-msgid "English"
-msgstr "Angielski"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:229
-msgid "English (USA International)"
-msgstr "Angielski (USA - międzynarodowy)"
+msgid "Enter on keypad"
+msgstr "Enter na klawiaturze numerycznej"
#: ../rules/base.xml.in.h:230
-msgid "English (USA Macintosh)"
-msgstr "Angielski (USA - Macintosh)"
+msgid "Esperanto"
+msgstr "Esperancki"
#: ../rules/base.xml.in.h:231
-msgid "English with RupeeSign"
-msgstr "Angielski ze znakiem rupi"
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Esperanto (zamieniony średnik i apostrof, przestarzałe)"
#: ../rules/base.xml.in.h:232
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
+msgid "Estonian"
+msgstr "Estoński"
#: ../rules/base.xml.in.h:233
-msgid "Enter on keypad"
-msgstr "Enter na klawiaturze numerycznej"
+msgid "Estonian (Dvorak)"
+msgstr "Estoński (Dvoraka)"
#: ../rules/base.xml.in.h:234
-msgid "Epo"
-msgstr "EPO"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Estoński (klawiatura US z literami estońskimi)"
#: ../rules/base.xml.in.h:235
-msgid "Ergonomic"
-msgstr "Ergonomiczny"
+msgid "Estonian (eliminate dead keys)"
+msgstr "Estoński (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:236
-msgid "Esp"
-msgstr "ESP"
+msgid "Euro on 2"
+msgstr "Euro pod 2"
#: ../rules/base.xml.in.h:237
-msgid "Esperanto"
-msgstr "Esperancki"
+msgid "Euro on 4"
+msgstr "Euro pod 4"
#: ../rules/base.xml.in.h:238
-msgid "Est"
-msgstr "EST"
+msgid "Euro on 5"
+msgstr "Euro pod 5"
#: ../rules/base.xml.in.h:239
-msgid "Estonia"
-msgstr "Estoński"
+msgid "Euro on E"
+msgstr "Euro pod E"
#: ../rules/base.xml.in.h:240
-msgid "Eth"
-msgstr "ETH"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:241
-msgid "Ethiopia"
-msgstr "Etiopski"
+msgid "Ewe"
+msgstr "Ewe"
#: ../rules/base.xml.in.h:242
-msgid "Euro on 2"
-msgstr "Euro pod 2"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:243
-msgid "Euro on 4"
-msgstr "Euro pod 4"
+msgid "Faroese"
+msgstr "Farerski"
#: ../rules/base.xml.in.h:244
-msgid "Euro on 5"
-msgstr "Euro pod 5"
+msgid "Faroese (eliminate dead keys)"
+msgstr "Farerski (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:245
-msgid "Euro on E"
-msgstr "Euro pod E"
+msgid "Filipino"
+msgstr "Filipiński"
#: ../rules/base.xml.in.h:246
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Filipiński (baybayin Capewella-Dvoraka)"
#: ../rules/base.xml.in.h:247
-msgid "Ewe"
-msgstr "Ewe"
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Filipiński (łaciński Capewella-Dvoraka)"
#: ../rules/base.xml.in.h:248
-msgid "Extended"
-msgstr "Rozszerzony"
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Filipiński (baybayin Capewella-QWERF 2006)"
#: ../rules/base.xml.in.h:249
-msgid "Extended - Winkeys"
-msgstr "Rozszerzony - klawisze Win"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Filipiński (łaciński Capewella-QWERF 2006)"
#: ../rules/base.xml.in.h:250
-msgid "Extended Backslash"
-msgstr "Rozszerzony backslash"
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Folipiński (baybain Colemak)"
#: ../rules/base.xml.in.h:251
-msgid "F-letter (F) variant"
-msgstr "Wariant z literą F (F)"
+msgid "Filipino (Colemak Latin)"
+msgstr "Filipiński (łaciński Colemak)"
#: ../rules/base.xml.in.h:252
-msgid "FL90"
-msgstr "FL90"
+msgid "Filipino (Dvorak Latin)"
+msgstr "Filipiński (łaciński Dvoraka)"
#: ../rules/base.xml.in.h:253
-msgid "Faroe Islands"
-msgstr "Wysp Owczych"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Filipino (baybain QWERTY)"
#: ../rules/base.xml.in.h:254
-msgid "Fin"
-msgstr "FIN"
+msgid "Finnish"
+msgstr "Fiński"
#: ../rules/base.xml.in.h:255
-msgid "Finland"
-msgstr "Fiński"
+msgid "Finnish (Mac)"
+msgstr "Fiński (Mac)"
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "Fiński (klasyczny)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Fiński (klasyczny, bez klawiszy akcentów)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr "Fiński (północnolapoński)"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:261
msgid "Four-level key with abstract separators"
msgstr "Klawisz czterofunkcyjny z abstrakcyjnymi separatorami"
-#: ../rules/base.xml.in.h:259
+#: ../rules/base.xml.in.h:262
msgid "Four-level key with comma"
msgstr "Klawisz czterofunkcyjny z przecinkiem"
-#: ../rules/base.xml.in.h:260
+#: ../rules/base.xml.in.h:263
msgid "Four-level key with dot"
msgstr "Klawisz czterofunkcyjny z kropką"
-#: ../rules/base.xml.in.h:261
+#: ../rules/base.xml.in.h:264
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Klawisz czterofunkcyjny z kropką, tylko latin-9"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:265
msgid "Four-level key with momayyez"
msgstr "Klawisz czterofunkcyjny ze znakiem momayyez"
-#: ../rules/base.xml.in.h:263
-msgid "Fra"
-msgstr "FRA"
-
-#: ../rules/base.xml.in.h:264
-msgid "France"
-msgstr "Francuski"
-
-#: ../rules/base.xml.in.h:265
-msgid "Français (France Alternative)"
-msgstr "Francuski (Francja - alternatywny)"
-
#: ../rules/base.xml.in.h:266
msgid "French"
msgstr "Francuski"
#: ../rules/base.xml.in.h:267
-msgid "French (Macintosh)"
-msgstr "Francuski (Macintosh)"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Francuski (Bepo, ergonomiczny, w stylu Dvoraka)"
#: ../rules/base.xml.in.h:268
-msgid "French (legacy)"
-msgstr "Francuski (stary)"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Francuski (Bepo, ergonomiczny, w stylu Dvoraka, tylko latin-9)"
#: ../rules/base.xml.in.h:269
-msgid "French Dvorak"
-msgstr "Francuski Dvoraka"
+msgid "French (Breton)"
+msgstr "Francuski (bretoński)"
#: ../rules/base.xml.in.h:270
-msgid "French, Sun dead keys"
-msgstr "Francuski, klawisze akcentów Suna"
+msgid "French (Canada, Dvorak)"
+msgstr "Francuski (kanadyjski, Dvoraka)"
#: ../rules/base.xml.in.h:271
-msgid "French, eliminate dead keys"
-msgstr "Francuski, bez klawiszy akcentów"
+msgid "French (Canada, legacy)"
+msgstr "Francuski (kanadyjski, stary)"
#: ../rules/base.xml.in.h:272
-msgid "Fro"
-msgstr "FRO"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Francuski (Demokratyczna Republika Konga)"
#: ../rules/base.xml.in.h:273
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Laptop Fujitsu-Siemens Computers AMILO"
+msgid "French (Dvorak)"
+msgstr "Francuski (Dvoraka)"
#: ../rules/base.xml.in.h:274
-msgid "Fula"
-msgstr "Fulani"
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Francuski (gruziński AZERTY Tskapo)"
#: ../rules/base.xml.in.h:275
-msgid "GBr"
-msgstr "GBr"
+msgid "French (Guinea)"
+msgstr "Francuski (Gwinea)"
#: ../rules/base.xml.in.h:276
-msgid "GILLBT"
-msgstr "GILLBT"
+msgid "French (Mac)"
+msgstr "Francuski (Mac)"
#: ../rules/base.xml.in.h:277
-msgid "Ga"
-msgstr "Ga"
+msgid "French (Mali, alternative)"
+msgstr "Francuski (Mali, alternatywny)"
#: ../rules/base.xml.in.h:278
-msgid "Generic 101-key PC"
-msgstr "Zwykła PC 101-klawiszowa"
+msgid "French (Morocco)"
+msgstr "Francuski (Maroko)"
#: ../rules/base.xml.in.h:279
-msgid "Generic 102-key (Intl) PC"
-msgstr "Zwykła PC 102-klawiszowa (Intl)"
+msgid "French (Occitan)"
+msgstr "Francuski (okcytański)"
#: ../rules/base.xml.in.h:280
-msgid "Generic 104-key PC"
-msgstr "Zwykła PC 104-klawiszowa"
+msgid "French (Sun dead keys)"
+msgstr "Francuski (klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:281
-msgid "Generic 105-key (Intl) PC"
-msgstr "Zwykła PC 105-klawiszowa (Intl)"
+msgid "French (Switzerland)"
+msgstr "Francuski (Szwajcaria)"
#: ../rules/base.xml.in.h:282
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "French (Switzerland, Mac)"
+msgstr "Francuski (Szwajcaria, Mac)"
#: ../rules/base.xml.in.h:283
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Francuski (Szwajcaria, klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:284
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Francuski (Szwajcaria, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:285
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
+msgid "French (alternative)"
+msgstr "Francuski (alternatywny)"
#: ../rules/base.xml.in.h:286
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
+msgid "French (alternative, Sun dead keys)"
+msgstr "Francuski (alternatywny, klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:287
-msgid "Geo"
-msgstr "GEO"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Francuski (alternatywny, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:288
-msgid "Georgia"
-msgstr "Gruziński"
+msgid "French (alternative, latin-9 only)"
+msgstr "Francuski (alternatywny, tylko latin-9)"
#: ../rules/base.xml.in.h:289
-msgid "Georgian"
-msgstr "Gruziński"
+msgid "French (eliminate dead keys)"
+msgstr "Francuski (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:290
-msgid "Georgian AZERTY Tskapo"
-msgstr "Gruziński AZERTY Tskapo"
+msgid "French (legacy alternative)"
+msgstr "Francuski (stary alternatywny)"
#: ../rules/base.xml.in.h:291
-msgid "German (Macintosh)"
-msgstr "Niemiecki (Macintosh)"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Francuski (stary alternatywny, klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:292
-msgid "German, Sun dead keys"
-msgstr "Niemiecki, klawisze akcentów Suna"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Francuski (stary alternatywny, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:293
-msgid "German, eliminate dead keys"
-msgstr "Niemiecki, bez klawiszy akcentów"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Laptop Fujitsu-Siemens Computers AMILO"
#: ../rules/base.xml.in.h:294
-msgid "Germany"
-msgstr "Niemiecki"
+msgid "Fula"
+msgstr "Fulani"
#: ../rules/base.xml.in.h:295
-msgid "Gha"
-msgstr "GHA"
+msgid "GBr"
+msgstr "GBr"
#: ../rules/base.xml.in.h:296
-msgid "Ghana"
-msgstr "Ghański"
+msgid "Ga"
+msgstr "Ga"
#: ../rules/base.xml.in.h:297
-msgid "Gin"
-msgstr "GIN"
+msgid "Generic 101-key PC"
+msgstr "Zwykła PC 101-klawiszowa"
#: ../rules/base.xml.in.h:298
-msgid "Grc"
-msgstr "GRC"
+msgid "Generic 102-key (Intl) PC"
+msgstr "Zwykła PC 102-klawiszowa (Intl)"
#: ../rules/base.xml.in.h:299
-msgid "Greece"
-msgstr "Grecki"
+msgid "Generic 104-key PC"
+msgstr "Zwykła PC 104-klawiszowa"
#: ../rules/base.xml.in.h:300
-msgid "Guinea"
-msgstr "Gwinejski"
+msgid "Generic 105-key (Intl) PC"
+msgstr "Zwykła PC 105-klawiszowa (Intl)"
#: ../rules/base.xml.in.h:301
-msgid "Gujarati"
-msgstr "Gudźarati"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:302
-msgid "Gurmukhi"
-msgstr "Gurmukhi"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
#: ../rules/base.xml.in.h:303
-msgid "Gurmukhi Jhelum"
-msgstr "Gurmukhi Jhelum"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:304
-msgid "Gyration"
-msgstr "Gyration"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
#: ../rules/base.xml.in.h:305
-msgid "HTC Dream"
-msgstr "HTC Dream"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:306
-msgid "Happy Hacking Keyboard"
-msgstr "Happy Hacking Keyboard"
+msgid "Georgian"
+msgstr "Gruziński"
#: ../rules/base.xml.in.h:307
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Happy Hacking Keyboard for Mac"
+msgid "Georgian (MESS)"
+msgstr "Gruziński (MESS)"
#: ../rules/base.xml.in.h:308
-msgid "Hausa"
-msgstr "Hausa"
+msgid "Georgian (Ossetian)"
+msgstr "Gruziński (osetyjski)"
#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internet Keyboard"
+msgid "Georgian (ergonomic)"
+msgstr "Gruziński (ergonomiczny)"
#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 Notebook"
+msgid "German"
+msgstr "Niemiecki"
#: ../rules/base.xml.in.h:311
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "German (Austria)"
+msgstr "Niemiecki (Austria)"
#: ../rules/base.xml.in.h:312
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "German (Austria, Mac)"
+msgstr "Niemiecki (Austria, Mac)"
#: ../rules/base.xml.in.h:313
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+msgid "German (Austria, Sun dead keys)"
+msgstr "Niemiecki (Austria, klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:314
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Niemiecki (Austria, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:315
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "German (Dvorak)"
+msgstr "Niemiecki (Dvoraka)"
#: ../rules/base.xml.in.h:316
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "German (Mac)"
+msgstr "Niemiecki (Mac)"
#: ../rules/base.xml.in.h:317
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Niemiecki (Mac, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:318
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
+msgid "German (Neo 2)"
+msgstr "Niemiecki (Neo 2)"
#: ../rules/base.xml.in.h:319
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Niemiecki (klawiatura rumuńska z literami niemieckimi)"
#: ../rules/base.xml.in.h:320
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Niemiecki (klawiatura rumuńska z literami niemieckimi, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:321
-msgid "Hexadecimal"
-msgstr "Szesnastkowy"
+msgid "German (Sun dead keys)"
+msgstr "Niemiecki (klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:322
-msgid "Hindi Bolnagri"
-msgstr "Hindi Bolnagri"
+msgid "German (Switzerland, Mac)"
+msgstr "Niemiecki (Szwajcaria, Mac)"
#: ../rules/base.xml.in.h:323
-msgid "Hindi Wx"
-msgstr "Hindi Wx"
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Niemiecki (Szwajcaria, klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:324
-msgid "Homophonic"
-msgstr "Homofoniczny"
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Niemiecki (Szwajcaria, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:325
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "German (dead acute)"
+msgstr "Niemiecki (akcent ostry)"
#: ../rules/base.xml.in.h:326
-msgid "Hrv"
-msgstr "HRV"
+msgid "German (dead grave acute)"
+msgstr "Niemiecki (akcent gravis)"
#: ../rules/base.xml.in.h:327
-msgid "Htc Dream phone"
-msgstr "Telefon HTC Dream"
+msgid "German (eliminate dead keys)"
+msgstr "Niemiecki (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:328
-msgid "Hun"
-msgstr "HUN"
+msgid "German (lower Sorbian qwertz)"
+msgstr "Niemiecki (dolnołużycki QWERTZ)"
#: ../rules/base.xml.in.h:329
-msgid "Hungary"
-msgstr "Węgierski"
+msgid "German (lower Sorbian)"
+msgstr "Niemiecki (dolnołużycki)"
#: ../rules/base.xml.in.h:330
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper pod klawiszami Win"
+msgid "German (qwerty)"
+msgstr "Niemiecki (QWERTY)"
#: ../rules/base.xml.in.h:331
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
+msgid "Greek"
+msgstr "Grecki"
#: ../rules/base.xml.in.h:332
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "Greek (eliminate dead keys)"
+msgstr "Grecki (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:333
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Greek (extended)"
+msgstr "Grecki (rozszerzony)"
#: ../rules/base.xml.in.h:334
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "Greek (polytonic)"
+msgstr "Grecki (politoniczny)"
#: ../rules/base.xml.in.h:335
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "Greek (simple)"
+msgstr "Grecki (prosty)"
#: ../rules/base.xml.in.h:336
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
+msgid "Gujarati"
+msgstr "Gudźarati"
#: ../rules/base.xml.in.h:337
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "Gyration"
+msgstr "Gyration"
#: ../rules/base.xml.in.h:338
-msgid "ISO Alternate"
-msgstr "Zmienny ISO"
+msgid "HTC Dream"
+msgstr "HTC Dream"
#: ../rules/base.xml.in.h:339
-msgid "Iceland"
-msgstr "Islandzki"
+msgid "Happy Hacking Keyboard"
+msgstr "Happy Hacking Keyboard"
#: ../rules/base.xml.in.h:340
-msgid "Igbo"
-msgstr "Ibo"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Happy Hacking Keyboard for Mac"
#: ../rules/base.xml.in.h:341
-msgid "Include dead tilde"
-msgstr "Dołączenie tyldy górnej"
+msgid "Hausa"
+msgstr "Hausa"
#: ../rules/base.xml.in.h:342
-msgid "Ind"
-msgstr "IND"
+msgid "Hebrew"
+msgstr "Hebrajski"
#: ../rules/base.xml.in.h:343
-msgid "India"
-msgstr "Indyjski"
+msgid "Hebrew (Phonetic)"
+msgstr "Hebrajski (fonetyczny)"
#: ../rules/base.xml.in.h:344
-msgid "International (AltGr dead keys)"
-msgstr "Międzynarodowy (klawisze akcentów pod AltGr)"
+msgid "Hebrew (Tiro)"
+msgstr "Hebrajski (Tiro)"
#: ../rules/base.xml.in.h:345
-msgid "International (with dead keys)"
-msgstr "Międzynarodowy (z klawiszami akcentów)"
+msgid "Hebrew (lyx)"
+msgstr "Hebrajski (lyx)"
#: ../rules/base.xml.in.h:346
-msgid "Inuktitut"
-msgstr "Inuktitut"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internet Keyboard"
-#: ../rules/base.xml.in.h:347 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr "Irański"
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
#: ../rules/base.xml.in.h:348
-msgid "Iraq"
-msgstr "Iracki"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:349
-msgid "Ireland"
-msgstr "Irlandzki"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:350
-msgid "Irl"
-msgstr "IRL"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:351
-msgid "Irn"
-msgstr "IRN"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:352
-msgid "Irq"
-msgstr "IRQ"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:353
-msgid "Isl"
-msgstr "ISL"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:354
-msgid "Isr"
-msgstr "ISR"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:355
-msgid "Israel"
-msgstr "Izraelski"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:356
-msgid "Ita"
-msgstr "ITA"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
#: ../rules/base.xml.in.h:357
-msgid "Italy"
-msgstr "Włoski"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:358
-msgid "Japan"
-msgstr "Japoński"
+msgid "Hexadecimal"
+msgstr "Szesnastkowy"
#: ../rules/base.xml.in.h:359
-msgid "Japan (PC-98xx Series)"
-msgstr "Japoński (serie PC-98xx)"
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi (Bolnagri)"
#: ../rules/base.xml.in.h:360
-msgid "Japanese keyboard options"
-msgstr "Opcje klawiatury japońskiej"
+msgid "Hindi (Wx)"
+msgstr "Hindi (Wx)"
#: ../rules/base.xml.in.h:361
-msgid "Jpn"
-msgstr "JPN"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
#: ../rules/base.xml.in.h:362
-msgid "Kalmyk"
-msgstr "Kałmucki"
+msgid "Htc Dream phone"
+msgstr "Telefon HTC Dream"
#: ../rules/base.xml.in.h:363
-msgid "Kana"
-msgstr "Kana"
+msgid "Hungarian"
+msgstr "Węgierski"
#: ../rules/base.xml.in.h:364
-msgid "Kana 86"
-msgstr "Kana 86"
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Węgierski (101/QWERTY/przecinek/klawisze akcentów)"
#: ../rules/base.xml.in.h:365
-msgid "Kana Lock key is locking"
-msgstr "Blokujący klawisz Kana Lock"
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Węgierski (101/QWERTY/przecinek/bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:366
-msgid "Kannada"
-msgstr "Kannada"
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Węgierski (101/QWERTY/kropka/klawisze akcentów)"
#: ../rules/base.xml.in.h:367
-msgid "Kashubian"
-msgstr "Kaszubski"
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Węgierski (101/QWERTY/kropka/bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:368
-msgid "Kaz"
-msgstr "KAZ"
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Węgierski (101/QWERTZ/przecinek/klawisze akcentów)"
#: ../rules/base.xml.in.h:369
-msgid "Kazakh with Russian"
-msgstr "Kazaski z rosyjskim"
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Węgierski (101/QWERTZ/przecinek/bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:370
-msgid "Kazakhstan"
-msgstr "Kazachstański"
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Węgierski (101/QWERTZ/kropka/klawisze akcentów)"
#: ../rules/base.xml.in.h:371
-msgid "Ken"
-msgstr "KEN"
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Węgierski (101/QWERTZ/kropka/bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:372
-msgid "Kenya"
-msgstr "Kenijski"
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Węgierski (102/QWERTY/przecinek/klawisze akcentów)"
#: ../rules/base.xml.in.h:373
-msgid "Key sequence to kill the X server"
-msgstr "Sekwencja klawiszy zabijająca serwer X"
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Węgierski (102/QWERTY/przecinek/bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:374
-msgid "Key to choose 3rd level"
-msgstr "Klawisz wybierający poziom 3."
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Węgierski (102/QWERTY/kropka/klawisze akcentów)"
#: ../rules/base.xml.in.h:375
-msgid "Key to choose 5th level"
-msgstr "Klawisz wybierający poziom 5."
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Węgierski (102/QWERTY/kropka/bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:376
-msgid "Key(s) to change layout"
-msgstr "Klawisze zmieniające układ"
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Węgierski (102/QWERTZ/przecinek/klawisze akcentów)"
#: ../rules/base.xml.in.h:377
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Węgierski (102/QWERTZ/przecinek/bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:378
-msgid "Kgz"
-msgstr "KGZ"
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Węgierski (102/QWERTZ/kropka/klawisze akcentów)"
#: ../rules/base.xml.in.h:379
-msgid "Khm"
-msgstr "KHM"
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Węgierski (102/QWERTZ/kropka/bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:380
-msgid "Kikuyu"
-msgstr "Kikiju"
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Węgierski (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:381
-msgid "Kinesis"
-msgstr "Kinesis"
+msgid "Hungarian (qwerty)"
+msgstr "Węgierski (QWERTY)"
#: ../rules/base.xml.in.h:382
-msgid "Komi"
-msgstr "Komi"
+msgid "Hungarian (standard)"
+msgstr "Węgierski (standardowy)"
#: ../rules/base.xml.in.h:383
-msgid "Kor"
-msgstr "KOR"
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper pod klawiszami Win"
#: ../rules/base.xml.in.h:384
-msgid "Korea, Republic of"
-msgstr "Koreański"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:385
-msgid "Ktunaxa"
-msgstr "Kutanejski"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:386
-msgid "Kurdish, (F)"
-msgstr "Kurdyjski (F)"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:387
-msgid "Kurdish, Arabic-Latin"
-msgstr "Kurdyjski, arabsko-łaciński"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:388
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Kurdyjski, łaciński Alt-Q"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
#: ../rules/base.xml.in.h:389
-msgid "Kurdish, Latin Q"
-msgstr "Kurdyjski, łaciński Q"
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
#: ../rules/base.xml.in.h:390
-msgid "Kyrgyzstan"
-msgstr "Kirgijski"
+msgid "Icelandic"
+msgstr "Islandzki"
#: ../rules/base.xml.in.h:391
-msgid "LEKP"
-msgstr "LEKP"
+msgid "Icelandic (Dvorak)"
+msgstr "Islandzki (Dvoraka)"
#: ../rules/base.xml.in.h:392
-msgid "LEKPa"
-msgstr "LEKPa"
+msgid "Icelandic (Mac)"
+msgstr "Islandzki (Mac)"
#: ../rules/base.xml.in.h:393
-msgid "Lao"
-msgstr "Lao"
+msgid "Icelandic (Sun dead keys)"
+msgstr "Islandzki (klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:394
-msgid "Laos"
-msgstr "Laoski"
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Islandzki (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:395
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Klawiatura laptopowa Compaq (np. Armada)"
+msgid "Igbo"
+msgstr "Ibo"
#: ../rules/base.xml.in.h:396
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Klawiatura internetowa laptopów/notebooków Compaq (np. Presario)"
+msgid "Indian"
+msgstr "Indyjski"
#: ../rules/base.xml.in.h:397
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Laptop/notebook eMachines m68xx"
+msgid "Inuktitut"
+msgstr "Inuktitut"
#: ../rules/base.xml.in.h:398
-msgid "Latin"
-msgstr "Łaciński"
+msgid "Iraqi"
+msgstr "Iracki"
#: ../rules/base.xml.in.h:399
-msgid "Latin American"
-msgstr "Ameryki Łacińskiej"
+msgid "Irish"
+msgstr "Irlandzki"
#: ../rules/base.xml.in.h:400
-msgid "Latin Unicode"
-msgstr "Łaciński Unicode"
+msgid "Irish (CloGaelach)"
+msgstr "Irlandzki (gaelicki)"
#: ../rules/base.xml.in.h:401
-msgid "Latin Unicode qwerty"
-msgstr "Łaciński QWERTY Unicode"
+msgid "Irish (Ogham IS434)"
+msgstr "Irlandzki (Ogham IS434)"
#: ../rules/base.xml.in.h:402
-msgid "Latin qwerty"
-msgstr "Łaciński QWERTY"
+msgid "Irish (Ogham)"
+msgstr "Irlandzki (Ogham)"
#: ../rules/base.xml.in.h:403
-msgid "Latin unicode"
-msgstr "Łaciński"
+msgid "Irish (UnicodeExpert)"
+msgstr "Irlandzki (UnicodeExpert)"
#: ../rules/base.xml.in.h:404
-msgid "Latin unicode qwerty"
-msgstr "Łaciński QWERTY Unicode"
+msgid "Italian"
+msgstr "Włoski"
#: ../rules/base.xml.in.h:405
-msgid "Latin with guillemets"
-msgstr "Łaciński z cudzysłowami"
+msgid "Italian (Georgian)"
+msgstr "Włoski (gruziński)"
#: ../rules/base.xml.in.h:406
-msgid "Latvia"
-msgstr "Łotewski"
+msgid "Italian (Mac)"
+msgstr "Włoski (Mac)"
#: ../rules/base.xml.in.h:407
-msgid "Layout toggle on multiply/divide key"
-msgstr "Przełączanie układu klawiszem mnożenia/dzielenia"
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Włoski (klawiatura US z literami włoskimi)"
#: ../rules/base.xml.in.h:408
-msgid "Left Alt"
-msgstr "Lewy Alt"
+msgid "Italian (eliminate dead keys)"
+msgstr "Włoski (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:409
-msgid "Left Alt (while pressed)"
-msgstr "Lewy Alt (wciśnięty)"
+msgid "Japanese"
+msgstr "Japoński"
#: ../rules/base.xml.in.h:410
-msgid "Left Alt is swapped with Left Win"
-msgstr "Lewy Alt zamieniony z lewym Win"
+msgid "Japanese (Kana 86)"
+msgstr "Japoński (Kana 86)"
#: ../rules/base.xml.in.h:411
-msgid "Left Ctrl"
-msgstr "Lewy Ctrl"
+msgid "Japanese (Kana)"
+msgstr "Japoński (Kana)"
#: ../rules/base.xml.in.h:412
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Lewy Ctrl (do pierwszego układu), prawy Ctrl (do ostatniego układu)"
+msgid "Japanese (Mac)"
+msgstr "Japoński (Mac)"
#: ../rules/base.xml.in.h:413
-msgid "Left Ctrl+Left Shift"
-msgstr "Lewy Ctrl+lewy Shift"
+msgid "Japanese (OADG 109A)"
+msgstr "Japoński (OADG 109A)"
#: ../rules/base.xml.in.h:414
-msgid "Left Shift"
-msgstr "Lewy Shift"
+msgid "Japanese (PC-98xx Series)"
+msgstr "Japoński (serie PC-98xx)"
#: ../rules/base.xml.in.h:415
-msgid "Left Win"
-msgstr "Lewy Win"
+msgid "Japanese keyboard options"
+msgstr "Opcje klawiatury japońskiej"
#: ../rules/base.xml.in.h:416
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Lewy Win (do pierwszego układu), prawy Win/Menu (do ostatniego układu)"
+msgid "Kana Lock key is locking"
+msgstr "Blokujący klawisz Kana Lock"
#: ../rules/base.xml.in.h:417
-msgid "Left Win (while pressed)"
-msgstr "Lewy Win (wciśnięty)"
+msgid "Kannada"
+msgstr "Kannada"
#: ../rules/base.xml.in.h:418
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Lewy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
+msgid "Kazakh"
+msgstr "Kazaski"
#: ../rules/base.xml.in.h:419
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Lewy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
+msgid "Kazakh (with Russian)"
+msgstr "Kazaski (z rosyjskim)"
#: ../rules/base.xml.in.h:420
-msgid "Left hand"
-msgstr "Leworęczny"
+msgid "Key sequence to kill the X server"
+msgstr "Sekwencja klawiszy zabijająca serwer X"
#: ../rules/base.xml.in.h:421
-msgid "Left handed Dvorak"
-msgstr "Leworęczny Dvoraka"
+msgid "Key to choose 3rd level"
+msgstr "Klawisz wybierający poziom 3."
#: ../rules/base.xml.in.h:422
-msgid "Legacy"
-msgstr "Stary"
+msgid "Key to choose 5th level"
+msgstr "Klawisz wybierający poziom 5."
#: ../rules/base.xml.in.h:423
-msgid "Legacy Wang 724"
-msgstr "Legacy Wang 724"
+msgid "Key(s) to change layout"
+msgstr "Klawisze zmieniające układ"
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:425
-msgid "Legacy key with comma"
-msgstr "Klawisz tradycyjny z przecinkiem"
+msgid "Khmer (Cambodian)"
+msgstr "Khmerski (Kambodża)"
#: ../rules/base.xml.in.h:426
-msgid "Legacy key with dot"
-msgstr "Klawisz tradycyjny z kropką"
+msgid "Kikuyu"
+msgstr "Kikiju"
#: ../rules/base.xml.in.h:427
-msgid "Lithuania"
-msgstr "Litewski"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:428
-msgid "Lka"
-msgstr "LKA"
+msgid "Korean"
+msgstr "Koreański"
#: ../rules/base.xml.in.h:429
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access Keyboard"
+msgid "Korean (101/104 key compatible)"
+msgstr "Koreański (kompatybilny ze 101/104 klawiszami)"
#: ../rules/base.xml.in.h:430
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Kurdyjski (Iran, arabsko-łaciński)"
#: ../rules/base.xml.in.h:431
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (opcja zmiany)"
+msgid "Kurdish (Iran, F)"
+msgstr "Kurdyjski (Iran, F)"
#: ../rules/base.xml.in.h:432
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Kurdyjski (Iran, łaciński Q)"
#: ../rules/base.xml.in.h:433
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Kurdyjski (Iran, łaciński Alt-Q)"
#: ../rules/base.xml.in.h:434
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Kurdyjski (Irak, arabsko-łaciński)"
#: ../rules/base.xml.in.h:435
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
+msgid "Kurdish (Iraq, F)"
+msgstr "Kurdyjski (Irak, F)"
#: ../rules/base.xml.in.h:436
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (opcja zmiany 2)"
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Kurdyjski (Irak, łaciński Alt-Q)"
#: ../rules/base.xml.in.h:437
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Kurdyjski (Irak, łaciński Q)"
#: ../rules/base.xml.in.h:438
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
+msgid "Kurdish (Syria, F)"
+msgstr "Kurdyjski (Syria, F)"
#: ../rules/base.xml.in.h:439
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Logitech G15 - dodatkowe glawisze poprzez G15daemon"
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Kurdyjski (Syria, łaciński Alt-Q)"
#: ../rules/base.xml.in.h:440
-msgid "Logitech Generic Keyboard"
-msgstr "Logitech Generic Keyboard"
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Kurdyjski (Syria, łaciński Q)"
#: ../rules/base.xml.in.h:441
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech Internet 350 Keyboard"
+msgid "Kurdish (Turkey, F)"
+msgstr "Kurdyjski (Turcja, F)"
#: ../rules/base.xml.in.h:442
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech Internet Keyboard"
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Kurdyjski (Turcja, łaciński Alt-Q)"
#: ../rules/base.xml.in.h:443
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech Internet Navigator Keyboard"
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Kurdyjski (Turcja, łaciński Q)"
#: ../rules/base.xml.in.h:444
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite Keyboard"
+msgid "Kutenai"
+msgstr "Kutenai"
#: ../rules/base.xml.in.h:445
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgid "Kyrgyz"
+msgstr "Kirgiski"
#: ../rules/base.xml.in.h:446
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X Keyboard"
+msgid "Kyrgyz (phonetic)"
+msgstr "Kirgiski (fonetyczny)"
#: ../rules/base.xml.in.h:447
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
+msgid "Lao"
+msgstr "Laotański"
#: ../rules/base.xml.in.h:448
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo Keyboard"
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Laotański (proponowany układ standardowy STEA)"
#: ../rules/base.xml.in.h:449
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Klawiatura laptopowa Compaq (np. Armada)"
#: ../rules/base.xml.in.h:450
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Klawiatura internetowa laptopów/notebooków Compaq (np. Presario)"
#: ../rules/base.xml.in.h:451
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Laptop/notebook eMachines m68xx"
#: ../rules/base.xml.in.h:452
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgid "Latvian"
+msgstr "Łotewski"
#: ../rules/base.xml.in.h:453
-msgid "Lower Sorbian"
-msgstr "Dolnołużycki"
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Łotewski (wariant z apostrofem ')"
#: ../rules/base.xml.in.h:454
-msgid "Lower Sorbian (qwertz)"
-msgstr "Dolnołużycki (QWERTZ)"
+msgid "Latvian (F variant)"
+msgstr "Łotewski (wariant F)"
#: ../rules/base.xml.in.h:455
-msgid "Ltu"
-msgstr "LTU"
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Łotewski (wariant z tyldą ~)"
#: ../rules/base.xml.in.h:456
-msgid "Lva"
-msgstr "LVA"
+msgid "Left Alt"
+msgstr "Lewy Alt"
#: ../rules/base.xml.in.h:457
-msgid "MESS"
-msgstr "MESS"
+msgid "Left Alt (while pressed)"
+msgstr "Lewy Alt (wciśnięty)"
#: ../rules/base.xml.in.h:458
-msgid "MNE"
-msgstr "MNE"
+msgid "Left Alt is swapped with Left Win"
+msgstr "Lewy Alt zamieniony z lewym Win"
#: ../rules/base.xml.in.h:459
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Left Ctrl"
+msgstr "Lewy Ctrl"
#: ../rules/base.xml.in.h:460
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Lewy Ctrl (do pierwszego układu), prawy Ctrl (do ostatniego układu)"
#: ../rules/base.xml.in.h:461
-msgid "Macedonia"
-msgstr "Macedoński"
+msgid "Left Ctrl+Left Shift"
+msgstr "Lewy Ctrl+lewy Shift"
#: ../rules/base.xml.in.h:462
-msgid "Macintosh"
-msgstr "Macintosh"
+msgid "Left Shift"
+msgstr "Lewy Shift"
#: ../rules/base.xml.in.h:463
-msgid "Macintosh (International)"
-msgstr "Macintosh (międzynarodowy)"
+msgid "Left Win"
+msgstr "Lewy Win"
#: ../rules/base.xml.in.h:464
-msgid "Macintosh Old"
-msgstr "Macintosh - stary"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Lewy Win (do pierwszego układu), prawy Win/Menu (do ostatniego układu)"
#: ../rules/base.xml.in.h:465
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, klawisze akcentów Suna"
+msgid "Left Win (while pressed)"
+msgstr "Lewy Win (wciśnięty)"
#: ../rules/base.xml.in.h:466
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, bez klawiszy akcentów"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Lewy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
#: ../rules/base.xml.in.h:467
-msgid "Make Caps Lock an additional Backspace"
-msgstr "CapsLock jako dodatkowy Backspace"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Lewy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
#: ../rules/base.xml.in.h:468
-msgid "Make Caps Lock an additional Ctrl"
-msgstr "CapsLock jako dodatkowy Ctrl"
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Lewy Ctrl+lewy Win (do pierwszego układu), prawy Ctrl+Menu (do drugiego układu)"
#: ../rules/base.xml.in.h:469
-msgid "Make Caps Lock an additional ESC"
-msgstr "CapsLock jako dodatkowy Esc"
+msgid "Legacy"
+msgstr "Stary"
#: ../rules/base.xml.in.h:470
-msgid "Make Caps Lock an additional Hyper"
-msgstr "CapsLock jako dodatkowy Hyper"
-
-#: ../rules/base.xml.in.h:471
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "CapsLock jako dodatkowy NumLock"
+msgid "Legacy Wang 724"
+msgstr "Legacy Wang 724"
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:472
-msgid "Make Caps Lock an additional Super"
-msgstr "CapsLock jako dodatkowy Super"
+msgid "Legacy key with comma"
+msgstr "Klawisz tradycyjny z przecinkiem"
#: ../rules/base.xml.in.h:473
-msgid "Malayalam"
-msgstr "Malajalam"
+msgid "Legacy key with dot"
+msgstr "Klawisz tradycyjny z kropką"
#: ../rules/base.xml.in.h:474
-msgid "Malayalam Lalitha"
-msgstr "Malajalam Lalitha"
+msgid "Lithuanian"
+msgstr "Litewski"
#: ../rules/base.xml.in.h:475
-msgid "Maldives"
-msgstr "Malediwski"
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Litewski (IBM LST 1205-92)"
#: ../rules/base.xml.in.h:476
-msgid "Mali"
-msgstr "Mali"
+msgid "Lithuanian (LEKP)"
+msgstr "Litewski (LEKP)"
#: ../rules/base.xml.in.h:477
-msgid "Malta"
-msgstr "Maltański"
+msgid "Lithuanian (LEKPa)"
+msgstr "Litewski (LEKPa)"
#: ../rules/base.xml.in.h:478
-msgid "Maltese keyboard with US layout"
-msgstr "Klawiatura maltańska z układem US"
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Litewski (klawiatura US z literami litewskimi)"
#: ../rules/base.xml.in.h:479
-msgid "Mao"
-msgstr "MAO"
+msgid "Lithuanian (standard)"
+msgstr "Litewski (standardowy)"
#: ../rules/base.xml.in.h:480
-msgid "Maori"
-msgstr "Maoryski"
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
#: ../rules/base.xml.in.h:481
-msgid "Mari"
-msgstr "Maryjski"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
#: ../rules/base.xml.in.h:482
-msgid "Mdv"
-msgstr "MDV"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (opcja zmiany)"
#: ../rules/base.xml.in.h:483
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
#: ../rules/base.xml.in.h:484
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access Keyboard"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:485
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
#: ../rules/base.xml.in.h:486
-msgid "Menu"
-msgstr "Menu"
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
#: ../rules/base.xml.in.h:487
-msgid "Meta is mapped to Left Win"
-msgstr "Meta pod lewym Win"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (opcja zmiany 2)"
#: ../rules/base.xml.in.h:488
-msgid "Meta is mapped to Win keys"
-msgstr "Meta pod klawiszami Win"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
#: ../rules/base.xml.in.h:489
-msgid "Meta on Left Ctrl"
-msgstr "Meta pod lewym Ctrl"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
#: ../rules/base.xml.in.h:490
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15 - dodatkowe glawisze poprzez G15daemon"
#: ../rules/base.xml.in.h:491
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft Internet Keyboard"
+msgid "Logitech Generic Keyboard"
+msgstr "Logitech Generic Keyboard"
#: ../rules/base.xml.in.h:492
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, Swedish"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech Internet 350 Keyboard"
#: ../rules/base.xml.in.h:493
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internet Keyboard"
#: ../rules/base.xml.in.h:494
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural Keyboard Elite"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator Keyboard"
#: ../rules/base.xml.in.h:495
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite Keyboard"
#: ../rules/base.xml.in.h:496
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural Keyboard Pro OEM"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
#: ../rules/base.xml.in.h:497
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
#: ../rules/base.xml.in.h:498
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge Keyboard"
#: ../rules/base.xml.in.h:499
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft Office Keyboard"
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo Keyboard"
#: ../rules/base.xml.in.h:500
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:501
-msgid "Miscellaneous compatibility options"
-msgstr "Różne opcje kompatybilności"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)"
#: ../rules/base.xml.in.h:502
-msgid "Mkd"
-msgstr "MKD"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
#: ../rules/base.xml.in.h:503
-msgid "Mli"
-msgstr "MLI"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
#: ../rules/base.xml.in.h:504
-msgid "Mlt"
-msgstr "MLT"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:505
-msgid "Mmr"
-msgstr "MMR"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:506
-msgid "Mng"
-msgstr "MNG"
+msgid "Macedonian"
+msgstr "Macedoński"
#: ../rules/base.xml.in.h:507
-msgid "Mongolia"
-msgstr "Mongolski"
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Macedoński (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:508
-msgid "Montenegro"
-msgstr "Czarnogórski"
+msgid "Macintosh"
+msgstr "Macintosh"
#: ../rules/base.xml.in.h:509
-msgid "Morocco"
-msgstr "Marokański"
+msgid "Macintosh Old"
+msgstr "Macintosh - stary"
#: ../rules/base.xml.in.h:510
-msgid "Multilingual"
-msgstr "Wielojęzyczny"
+msgid "Make Caps Lock an additional Backspace"
+msgstr "CapsLock jako dodatkowy Backspace"
#: ../rules/base.xml.in.h:511
-msgid "Multilingual, first part"
-msgstr "Wielojęzyczny, część pierwsza"
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "CapsLock jako dodatkowy Ctrl, ale z pozostawieniem symbolu Caps_Lock"
#: ../rules/base.xml.in.h:512
-msgid "Multilingual, second part"
-msgstr "Wielojęzyczny, część druga"
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "CapsLock jako dodatkowy Ctrl"
#: ../rules/base.xml.in.h:513
-msgid "Myanmar"
-msgstr "Myanmarski"
+msgid "Make Caps Lock an additional ESC"
+msgstr "CapsLock jako dodatkowy Esc"
#: ../rules/base.xml.in.h:514
-msgid "NICOLA-F style Backspace"
-msgstr "Backspace w stylu NICOLA-F"
+msgid "Make Caps Lock an additional Hyper"
+msgstr "CapsLock jako dodatkowy Hyper"
#: ../rules/base.xml.in.h:515
-msgid "NLA"
-msgstr "NLA"
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "CapsLock jako dodatkowy NumLock"
#: ../rules/base.xml.in.h:516
-msgid "Nativo"
-msgstr "Nativo"
+msgid "Make Caps Lock an additional Super"
+msgstr "CapsLock jako dodatkowy Super"
#: ../rules/base.xml.in.h:517
-msgid "Nativo for Esperanto"
-msgstr "Nativo dla esperanto"
+msgid "Malayalam"
+msgstr "Malajalam"
#: ../rules/base.xml.in.h:518
-msgid "Nativo for USA keyboards"
-msgstr "Nativo dla klawiatur USA"
+msgid "Malayalam (Lalitha)"
+msgstr "Malajalam (Lalitha)"
#: ../rules/base.xml.in.h:519
-msgid "Neo 2"
-msgstr "Neo 2"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Malajalam (rozszerzony Inscript ze znakiem rupii)"
#: ../rules/base.xml.in.h:520
-msgid "Nepal"
-msgstr "Nepalski"
+msgid "Maltese"
+msgstr "Maltański"
#: ../rules/base.xml.in.h:521
-msgid "Netherlands"
-msgstr "Holenderski"
+msgid "Maltese (with US layout)"
+msgstr "Maltański (z układem US)"
#: ../rules/base.xml.in.h:522
-msgid "New phonetic"
-msgstr "Nowy fonetyczny"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:523
-msgid "Nga"
-msgstr "NGA"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access Keyboard"
#: ../rules/base.xml.in.h:524
-msgid "Nigeria"
-msgstr "Nigeryjski"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:525
-msgid "Nld"
-msgstr "NLD"
+msgid "Menu"
+msgstr "Menu"
#: ../rules/base.xml.in.h:526
-msgid "Non-breakable space character at fourth level"
-msgstr "Znak niełamliwej spacji na poziomie 4."
+msgid "Meta is mapped to Left Win"
+msgstr "Meta pod lewym Win"
#: ../rules/base.xml.in.h:527
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Znak niełamliwej spacji na poziomie 4., wąskiej niełamliwej spacji na poziomie 6."
+msgid "Meta is mapped to Win keys"
+msgstr "Meta pod klawiszami Win"
#: ../rules/base.xml.in.h:528
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Znak niełamliwej spacji na poziomie 4., wąskiej niełamliwej spacji na poziomie 6. (z Ctrl+Shift)"
+msgid "Meta on Left Ctrl"
+msgstr "Meta pod lewym Ctrl"
#: ../rules/base.xml.in.h:529
-msgid "Non-breakable space character at second level"
-msgstr "Znak niełamliwej spacji na poziomie 2."
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
#: ../rules/base.xml.in.h:530
-msgid "Non-breakable space character at third level"
-msgstr "Znak niełamliwej spacji na poziomie 3."
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
#: ../rules/base.xml.in.h:531
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Znak niełamliwej spacji na poziomie 3., nic na poziomie 4."
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, Swedish"
#: ../rules/base.xml.in.h:532
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Znak niełamliwej spacji na poziomie 3., wąskiej niełamliwej spacji na poziomie 4."
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:533
-msgid "Nor"
-msgstr "NOR"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
#: ../rules/base.xml.in.h:534
-msgid "Northern Saami"
-msgstr "Północnolapoński"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:535
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Północnolapoński, bez klawiszy akcentów"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural Keyboard Pro OEM"
#: ../rules/base.xml.in.h:536
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:537
-msgid "Norway"
-msgstr "Norweski"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
#: ../rules/base.xml.in.h:538
-msgid "Npl"
-msgstr "NPL"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
#: ../rules/base.xml.in.h:539
-msgid "Num Lock"
-msgstr "NumLock"
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft Office Keyboard"
#: ../rules/base.xml.in.h:540
-msgid "Numeric keypad delete key behaviour"
-msgstr "Zachowanie klawisza Delete na klawiaturze numerycznej"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
#: ../rules/base.xml.in.h:541
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Klawiatura numeryczna działająca jak w Macu"
+msgid "Miscellaneous compatibility options"
+msgstr "Różne opcje kompatybilności"
#: ../rules/base.xml.in.h:542
-msgid "Numeric keypad layout selection"
-msgstr "Wybór układu klawiatury numerycznej"
+msgid "Mongolian"
+msgstr "Mongolski"
#: ../rules/base.xml.in.h:543
-msgid "OADG 109A"
-msgstr "OADG 109A"
+msgid "Montenegrin"
+msgstr "Czarnogórski"
#: ../rules/base.xml.in.h:544
-msgid "OLPC"
-msgstr "OLPC"
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Czarnogórski (cyrylicki z cudzysłowami)"
#: ../rules/base.xml.in.h:545
-msgid "OLPC Dari"
-msgstr "OLPC Dari"
+msgid "Montenegrin (Cyrillic)"
+msgstr "Czarnogórski (cyrylicki)"
#: ../rules/base.xml.in.h:546
-msgid "OLPC Pashto"
-msgstr "OLPC pasztuński"
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Czarnogórski (cyrylicki, zamienione Z i Ż"
#: ../rules/base.xml.in.h:547
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC południowouzbecki"
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Czarnogórski (łaciński QWERTY)"
#: ../rules/base.xml.in.h:548
-msgid "Occitan"
-msgstr "Okcytański"
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Czarnogórski (łaciński unikodowy QWERTY)"
#: ../rules/base.xml.in.h:549
-msgid "Ogham"
-msgstr "Ogham"
+msgid "Montenegrin (Latin unicode)"
+msgstr "Czarnogórski (łaciński unikodowy)"
#: ../rules/base.xml.in.h:550
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Czarnogórski (łaciński z cudzysłowami)"
#: ../rules/base.xml.in.h:551
-msgid "Oriya"
-msgstr "Orija"
+msgid "Māori"
+msgstr "Maoryski"
#: ../rules/base.xml.in.h:552
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/Internet keyboard"
+msgid "NICOLA-F style Backspace"
+msgstr "Backspace w stylu NICOLA-F"
#: ../rules/base.xml.in.h:553
-msgid "Ossetian"
-msgstr "Osetyjski"
+msgid "Nepali"
+msgstr "Nepalski"
#: ../rules/base.xml.in.h:554
-msgid "Ossetian, Winkeys"
-msgstr "Osetyjski, klawisze Win"
+msgid "Non-breakable space character at fourth level"
+msgstr "Znak niełamliwej spacji na poziomie 4."
#: ../rules/base.xml.in.h:555
-msgid "Ossetian, legacy"
-msgstr "Osetyjski, stary"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Znak niełamliwej spacji na poziomie 4., wąskiej niełamliwej spacji na poziomie 6."
#: ../rules/base.xml.in.h:556
-msgid "PC-98xx Series"
-msgstr "Serie PC-98xx"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Znak niełamliwej spacji na poziomie 4., wąskiej niełamliwej spacji na poziomie 6. (z Ctrl+Shift)"
#: ../rules/base.xml.in.h:557
-msgid "Pak"
-msgstr "PAK"
+msgid "Non-breakable space character at second level"
+msgstr "Znak niełamliwej spacji na poziomie 2."
#: ../rules/base.xml.in.h:558
-msgid "Pakistan"
-msgstr "Pakistański"
+msgid "Non-breakable space character at third level"
+msgstr "Znak niełamliwej spacji na poziomie 3."
#: ../rules/base.xml.in.h:559
-msgid "Pannonian Rusyn Homophonic"
-msgstr "Rusiński homofoniczny"
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Znak niełamliwej spacji na poziomie 3., nic na poziomie 4."
#: ../rules/base.xml.in.h:560
-msgid "Pashto"
-msgstr "Pasztuński"
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Znak niełamliwej spacji na poziomie 3., wąskiej niełamliwej spacji na poziomie 4."
#: ../rules/base.xml.in.h:561
-msgid "Pattachote"
-msgstr "Pattachote"
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:562
-msgid "Pause"
-msgstr "Pauza"
+msgid "Norwegian"
+msgstr "Norweski"
#: ../rules/base.xml.in.h:563
-msgid "Persian, with Persian Keypad"
-msgstr "Perski, z perską klawiaturą numeryczną"
+msgid "Norwegian (Dvorak)"
+msgstr "Norweski (Dvoraka)"
#: ../rules/base.xml.in.h:564
-msgid "Phi"
-msgstr "PHI"
+msgid "Norwegian (Mac)"
+msgstr "Norweski (Mac)"
#: ../rules/base.xml.in.h:565
-msgid "Philippines"
-msgstr "Filipiński"
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Norweski (Mac, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:566
-msgid "Phonetic"
-msgstr "Fonetyczny"
+msgid "Norwegian (Northern Saami"
+msgstr "Norweski (północnolapoński)"
#: ../rules/base.xml.in.h:567
-msgid "Phonetic Winkeys"
-msgstr "Fonetyczny z klawiszami Win"
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Norweski (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:568
-msgid "Pol"
-msgstr "POL"
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Norweski (północnolapoński, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:569
-msgid "Poland"
-msgstr "Polski"
+msgid "Num Lock"
+msgstr "NumLock"
#: ../rules/base.xml.in.h:570
-msgid "Polytonic"
-msgstr "Politoniczny"
+msgid "Numeric keypad delete key behaviour"
+msgstr "Zachowanie klawisza Delete na klawiaturze numerycznej"
#: ../rules/base.xml.in.h:571
-msgid "Portugal"
-msgstr "Portugalski"
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Klawiatura numeryczna działająca jak w Macu"
#: ../rules/base.xml.in.h:572
-msgid "Probhat"
-msgstr "Probhat"
+msgid "Numeric keypad layout selection"
+msgstr "Wybór układu klawiatury numerycznej"
#: ../rules/base.xml.in.h:573
-msgid "Programmer Dvorak"
-msgstr "Dvoraka programisty"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:574
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Oriya"
+msgstr "Orija"
#: ../rules/base.xml.in.h:575
-msgid "Prt"
-msgstr "PRT"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/Internet keyboard"
#: ../rules/base.xml.in.h:576
-msgid "PrtSc"
-msgstr "PrtSc"
+msgid "PC-98xx Series"
+msgstr "Serie PC-98xx"
#: ../rules/base.xml.in.h:577
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Pashto"
+msgstr "Pasztuński"
#: ../rules/base.xml.in.h:578
-msgid "QWERTY (Baybayin)"
-msgstr "QWERTY (baybayin)"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Paszto (Afganistan, OLPC)"
#: ../rules/base.xml.in.h:579
-msgid "Right Alt"
-msgstr "Prawy Alt"
+msgid "Pause"
+msgstr "Pauza"
#: ../rules/base.xml.in.h:580
-msgid "Right Alt (while pressed)"
-msgstr "Prawy Alt (wciśnięty)"
+msgid "Persian"
+msgstr "Perski"
#: ../rules/base.xml.in.h:581
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Prawy Alt wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Perski (Afganistan, Dari OLPC)"
#: ../rules/base.xml.in.h:582
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Prawy Alt wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
+msgid "Persian (with Persian Keypad)"
+msgstr "Perski (z perską klawiaturą numeryczną)"
#: ../rules/base.xml.in.h:583
-msgid "Right Alt key never chooses 3rd level"
-msgstr "Prawy Alt nigdy nie wybierający poziomu 3."
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Filipiński - Dvoraka (baybayin)"
#: ../rules/base.xml.in.h:584
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Prawy Alt, Shift+prawy Alt jako Multi_Key"
+msgid "Polish"
+msgstr "Polski"
#: ../rules/base.xml.in.h:585
-msgid "Right Ctrl"
-msgstr "Prawy Ctrl"
+msgid "Polish (Dvorak)"
+msgstr "Polski (Dvoraka)"
#: ../rules/base.xml.in.h:586
-msgid "Right Ctrl (while pressed)"
-msgstr "Prawy Ctrl (wciśnięty)"
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem 1)"
#: ../rules/base.xml.in.h:587
-msgid "Right Ctrl as Right Alt"
-msgstr "Prawy Ctrl jako prawy Alt"
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem cudzysłowu)"
#: ../rules/base.xml.in.h:588
-msgid "Right Ctrl+Right Shift"
-msgstr "Prawy Ctrl+prawy Shift"
+msgid "Polish (Kashubian)"
+msgstr "Polski (kaszubski)"
#: ../rules/base.xml.in.h:589
-msgid "Right Shift"
-msgstr "Prawy Shift"
+msgid "Polish (programmer Dvorak)"
+msgstr "Polski (Dvoraka programisty)"
#: ../rules/base.xml.in.h:590
-msgid "Right Win"
-msgstr "Prawy Win"
+msgid "Polish (qwertz)"
+msgstr "Polski (QWERTZ)"
#: ../rules/base.xml.in.h:591
-msgid "Right Win (while pressed)"
-msgstr "Prawy Win (wciśnięty)"
+msgid "Portuguese"
+msgstr "Portugalski"
#: ../rules/base.xml.in.h:592
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "Prawy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
+msgid "Portuguese (Brazil)"
+msgstr "Portugalski (Brazylia)"
#: ../rules/base.xml.in.h:593
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "Prawy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Portugalski (Brazylia, Dvoraka)"
#: ../rules/base.xml.in.h:594
-msgid "Right hand"
-msgstr "Praworęczny"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Portugalski (Brazylia, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:595
-msgid "Right handed Dvorak"
-msgstr "Praworęczny Dvoraka"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Portugalski (Brazylia, nativo dla esperanto)"
#: ../rules/base.xml.in.h:596
-msgid "Romania"
-msgstr "Rumuński"
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Portugalski (Brazylia, nativo dla klawiatur USA)"
#: ../rules/base.xml.in.h:597
-msgid "Romanian keyboard with German letters"
-msgstr "Klawiatura rumuńska z literami niemieckimi"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Portugalski (Brazylia, nativo)"
#: ../rules/base.xml.in.h:598
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Klawiatura rumuńska z literami niemieckimi, bez klawiszy akcentów"
+msgid "Portuguese (Mac)"
+msgstr "Portugalski (Mac)"
#: ../rules/base.xml.in.h:599
-msgid "Rou"
-msgstr "ROU"
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Portugalski (Mac, klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:600
-msgid "Rupee on 4"
-msgstr "Rupia pod 4"
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Portugalski (Mac, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:601
-msgid "Rus"
-msgstr "RUS"
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Portugalski (nativo dla esperanto)"
#: ../rules/base.xml.in.h:602
-msgid "Russia"
-msgstr "Rosyjski"
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Portugalski (nativo dla klawiatur USA)"
#: ../rules/base.xml.in.h:603
-msgid "Russian"
-msgstr "Rosyjski"
+msgid "Portuguese (Nativo)"
+msgstr "Portugalski (nativo)"
#: ../rules/base.xml.in.h:604
-msgid "Russian phonetic"
-msgstr "Rosyjski fonetyczny"
+msgid "Portuguese (Sun dead keys)"
+msgstr "Portugalski (klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:605
-msgid "Russian phonetic Dvorak"
-msgstr "Rosyjski fonetyczny Dvoraka"
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Portugalski (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:606
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Rosyjski fonetyczny, bez klawiszy akcentów"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:607
-msgid "Russian with Kazakh"
-msgstr "Rosyjski z kazaskim"
+msgid "PrtSc"
+msgstr "PrtSc"
#: ../rules/base.xml.in.h:608
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless Keyboard"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Pendżabski (Gurmukhi Jhelum)"
#: ../rules/base.xml.in.h:609
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Punjabi (Gurmukhi)"
+msgstr "Pendżabski (Gurmukhi)"
#: ../rules/base.xml.in.h:610
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:611
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Right Alt"
+msgstr "Prawy Alt"
#: ../rules/base.xml.in.h:612
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Right Alt (while pressed)"
+msgstr "Prawy Alt (wciśnięty)"
-#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr "SRB"
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Prawy Alt wybiera poziom 5. i włącza blokadę poziomu 5. przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
#: ../rules/base.xml.in.h:614
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Prawy Alt wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
#: ../rules/base.xml.in.h:615
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Prawy Alt wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
#: ../rules/base.xml.in.h:616
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "Prawy Alt nigdy nie wybierający poziomu 3."
#: ../rules/base.xml.in.h:617
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Prawy Alt, Shift+prawy Alt jako Multi_Key"
#: ../rules/base.xml.in.h:618
-msgid "Scroll Lock"
-msgstr "ScrollLock"
+msgid "Right Ctrl"
+msgstr "Prawy Ctrl"
#: ../rules/base.xml.in.h:619
-msgid "Secwepemctsin"
-msgstr "Shuswap"
+msgid "Right Ctrl (while pressed)"
+msgstr "Prawy Ctrl (wciśnięty)"
#: ../rules/base.xml.in.h:620
-msgid "Semi-colon on third level"
-msgstr "Średnik na poziomie 3."
+msgid "Right Ctrl as Right Alt"
+msgstr "Prawy Ctrl jako prawy Alt"
#: ../rules/base.xml.in.h:621
-msgid "Sen"
-msgstr "SEN"
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Prawy Ctrl pod Menu"
#: ../rules/base.xml.in.h:622
-msgid "Senegal"
-msgstr "Senegalski"
+msgid "Right Ctrl+Right Shift"
+msgstr "Prawy Ctrl+prawy Shift"
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr "Serbski"
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "Prawy Shift"
#: ../rules/base.xml.in.h:624
-msgid "Serbian"
-msgstr "Serbski"
+msgid "Right Win"
+msgstr "Prawy Win"
#: ../rules/base.xml.in.h:625
-msgid "Serbo-Croatian"
-msgstr "Serbsko-chorwacki"
+msgid "Right Win (while pressed)"
+msgstr "Prawy Win (wciśnięty)"
#: ../rules/base.xml.in.h:626
-msgid "Shift cancels Caps Lock"
-msgstr "Shift anuluje CapsLock"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Prawy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5."
#: ../rules/base.xml.in.h:627
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Shift nie anuluje NumLocka, wybiera poziom 3."
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Prawy Win wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5.; jedno naciśnięcie zwalnia blokadę"
#: ../rules/base.xml.in.h:628
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Shift z klawiaturą numeryczną działą jak pod MS Windows"
+msgid "Romanian"
+msgstr "Rumuński"
#: ../rules/base.xml.in.h:629
-msgid "Shift+Caps Lock"
-msgstr "Shift+CapsLock"
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Rumuński (krymskotatarski Dobruca-1 Q)"
#: ../rules/base.xml.in.h:630
-msgid "Simple"
-msgstr "Prosty"
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Rumuński (krymskotatarski Dobruca-2 Q)"
#: ../rules/base.xml.in.h:631
-msgid "Sindhi"
-msgstr "Sindhi"
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Rumuński (krymskotatarski turecki Alt-Q)"
#: ../rules/base.xml.in.h:632
-msgid "Slovakia"
-msgstr "Słowacki"
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Rumuński (krymskotatarski turecki F)"
#: ../rules/base.xml.in.h:633
-msgid "Slovenia"
-msgstr "Słoweński"
+msgid "Romanian (WinKeys)"
+msgstr "Rumuński (klawisze Win)"
#: ../rules/base.xml.in.h:634
-msgid "South Africa"
-msgstr "Południowoafrykański"
+msgid "Romanian (cedilla)"
+msgstr "Rumuński (cedilla)"
#: ../rules/base.xml.in.h:635
-msgid "Southern Uzbek"
-msgstr "Południowouzbecki"
+msgid "Romanian (standard cedilla)"
+msgstr "Rumuński (standardowy cedilla)"
#: ../rules/base.xml.in.h:636
-msgid "Spain"
-msgstr "Hiszpański"
+msgid "Romanian (standard)"
+msgstr "Rumuński (standardowy)"
#: ../rules/base.xml.in.h:637
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Klawisze specjalne (Ctrl+Alt+&lt;klawisz&gt;) obsługiwane przez serwer"
+msgid "Rupee on 4"
+msgstr "Rupia pod 4"
#: ../rules/base.xml.in.h:638
-msgid "Sri Lanka"
-msgstr "Sri Lanki"
+msgid "Russian"
+msgstr "Rosyjski"
#: ../rules/base.xml.in.h:639
-msgid "Standard"
-msgstr "Standardowy"
+msgid "Russian (Bashkirian)"
+msgstr "Rosyjski (baszkirski)"
#: ../rules/base.xml.in.h:640
-msgid "Standard (Cedilla)"
-msgstr "Standardowy (Cedilla)"
+msgid "Russian (Chuvash Latin)"
+msgstr "Rosyjski (czuwaski łaciński)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr "Rosyjski (czuwaski)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:642
-msgid "Standard RSTU"
-msgstr "Standardowy RSTU"
+msgid "Russian (DOS)"
+msgstr "Rosyjski (DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr "Rosyjski (gruziński)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:644
-msgid "Standard RSTU on Russian layout"
-msgstr "Standardowy RSTU przy rosyjskim układzie"
+msgid "Russian (Germany, phonetic)"
+msgstr "Rosyjski (Niemcy, fonetyczny)"
#: ../rules/base.xml.in.h:645
-msgid "Sun Type 5/6"
-msgstr "Sun Type 5/6"
+msgid "Russian (Kalmyk)"
+msgstr "Rosyjski (kałmucki)"
#: ../rules/base.xml.in.h:646
-msgid "Sun dead keys"
-msgstr "Klawisze akcentów Suna"
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Rosyjski (Kazahstan, z kazaskim)"
#: ../rules/base.xml.in.h:647
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power Multimedia Keyboard"
+msgid "Russian (Komi)"
+msgstr "Rosyjski (Komi)"
#: ../rules/base.xml.in.h:648
-msgid "Svdvorak"
-msgstr "Svdvorak"
+msgid "Russian (Mari)"
+msgstr "Rosyjski (Mari)"
#: ../rules/base.xml.in.h:649
-msgid "Svk"
-msgstr "SVK"
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Rosyjski (osetyjski, klawisze Win)"
#: ../rules/base.xml.in.h:650
-msgid "Svn"
-msgstr "SVN"
+msgid "Russian (Ossetian, legacy)"
+msgstr "Rosyjski (osetyjski, stary)"
#: ../rules/base.xml.in.h:651
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Zamiana Ctrl i CapsLocka"
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Rosyjski (Polska, fonetyczny Dvoraka)"
#: ../rules/base.xml.in.h:652
-msgid "Swap ESC and Caps Lock"
-msgstr "Zamiana Esc i CapsLocka"
+msgid "Russian (Serbian)"
+msgstr "Rosyjski (serbski)"
#: ../rules/base.xml.in.h:653
-msgid "Swe"
-msgstr "SWE"
+msgid "Russian (Sweden, phonetic)"
+msgstr "Rosyjski (Szwecja, fonetyczny)"
#: ../rules/base.xml.in.h:654
-msgid "Sweden"
-msgstr "Szwedzki"
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Rosyjski (Szwecja, fonetyczny, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:655
-msgid "Switzerland"
-msgstr "Szwajcarski"
+msgid "Russian (Tatar)"
+msgstr "Rosyjski (tatarski)"
#: ../rules/base.xml.in.h:656
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (tablet PC)"
+msgid "Russian (US, phonetic)"
+msgstr "Rosyjski (USA, fonetyczny)"
#: ../rules/base.xml.in.h:657
-msgid "Syr"
-msgstr "SYR"
+msgid "Russian (Udmurt)"
+msgstr "Rosyjski (udmurcki)"
#: ../rules/base.xml.in.h:658
-msgid "Syria"
-msgstr "Syryjski"
+msgid "Russian (Yakut)"
+msgstr "Rosyjski (jakucki)"
#: ../rules/base.xml.in.h:659
-msgid "Syriac"
-msgstr "Syryjski"
+msgid "Russian (legacy)"
+msgstr "Rosyjski (stary)"
#: ../rules/base.xml.in.h:660
-msgid "Syriac phonetic"
-msgstr "Syryjski fonetyczny"
+msgid "Russian (phonetic WinKeys)"
+msgstr "Rosyjski (fonetyczny, klawisze Win)"
#: ../rules/base.xml.in.h:661
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
+msgid "Russian (phonetic)"
+msgstr "Rosyjski (fonetyczny)"
#: ../rules/base.xml.in.h:662
-msgid "Tajikistan"
-msgstr "Tadżykistański"
+msgid "Russian (typewriter)"
+msgstr "Rosyjski (maszynistki)"
#: ../rules/base.xml.in.h:663
-msgid "Tamil"
-msgstr "Tamilski"
+msgid "Russian (typewriter, legacy)"
+msgstr "Rosyjski (maszynistki, stary)"
#: ../rules/base.xml.in.h:664
-msgid "Tamil Keyboard with Numerals"
-msgstr "Klawiatura tamilska z cyframi"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless Keyboard"
#: ../rules/base.xml.in.h:665
-msgid "Tamil TAB Typewriter"
-msgstr "Tamilski maszyny do pisania TAB"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:666
-msgid "Tamil TSCII Typewriter"
-msgstr "Tamilski maszyny do pisania TSCII"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:667
-msgid "Tamil Unicode"
-msgstr "Tamilski Unicode"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:668
-msgid "Tanzania"
-msgstr "Tanzański"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:669
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:670
-msgid "Tatar"
-msgstr "Tatarski"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:671
-msgid "Telugu"
-msgstr "Telugu"
+msgid "Saisiyat (Taiwan)"
+msgstr "Saisiyat (Tajwan)"
#: ../rules/base.xml.in.h:672
-msgid "Tha"
-msgstr "THA"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:673
-msgid "Thailand"
-msgstr "Tajlandzki"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:674
-msgid "Tibetan"
-msgstr "Tybetański"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
#: ../rules/base.xml.in.h:675
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Tybetański (z liczbami ASCII)"
+msgid "Scroll Lock"
+msgstr "ScrollLock"
#: ../rules/base.xml.in.h:676
-msgid "Tifinagh"
-msgstr "Tifinagh"
+msgid "Secwepemctsin"
+msgstr "Shuswap"
#: ../rules/base.xml.in.h:677
-msgid "Tifinagh alternative"
-msgstr "Alternatywny tifinagh"
+msgid "Semi-colon on third level"
+msgstr "Średnik na poziomie 3."
#: ../rules/base.xml.in.h:678
-msgid "Tifinagh alternative phonetic"
-msgstr "Alternatywny fonetyczny tifinagh"
+msgid "Serbian"
+msgstr "Serbski"
#: ../rules/base.xml.in.h:679
-msgid "Tifinagh extended"
-msgstr "Rozszerzony tifinagh"
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Serbski (łaciński unikodowy QWERTY)"
#: ../rules/base.xml.in.h:680
-msgid "Tifinagh extended phonetic"
-msgstr "Rozszerzony fonetyczny tifinagh"
+msgid "Serbian (Latin Unicode)"
+msgstr "Serbski (łaciński unikodowy)"
#: ../rules/base.xml.in.h:681
-msgid "Tifinagh phonetic"
-msgstr "Tifinagh fonetyczny"
+msgid "Serbian (Latin qwerty)"
+msgstr "Serbski (łaciński QWERTY)"
#: ../rules/base.xml.in.h:682
-msgid "Tilde (~) variant"
-msgstr "Wariant z tyldą (~)"
+msgid "Serbian (Latin with guillemets)"
+msgstr "Serbski (łaciński z cudzysłowami)"
#: ../rules/base.xml.in.h:683
-msgid "Tjk"
-msgstr "TJK"
+msgid "Serbian (Latin)"
+msgstr "Serbski (łaciński)"
#: ../rules/base.xml.in.h:684
-msgid "Tkm"
-msgstr "TKM"
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Serbski (pannońskorusiński homofoniczny)"
#: ../rules/base.xml.in.h:685
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "Pod odpowiednimi klawiszami wg układu Dvoraka."
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Serbski (zamienione Z i Ż)"
#: ../rules/base.xml.in.h:686
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "Pod odpowiednimi klawiszami wg układu QWERTY."
+msgid "Serbian (with guillemets)"
+msgstr "Serbski (z cudzysłowami)"
#: ../rules/base.xml.in.h:687
-msgid "Toggle PointerKeys with Shift + NumLock."
-msgstr "Przełączanie klawiszy kursorów przez Shift + NumLock."
+msgid "Serbo-Croatian (US)"
+msgstr "Serbsko-chorwacki (USA)"
#: ../rules/base.xml.in.h:688
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
+msgid "Shift cancels Caps Lock"
+msgstr "Shift anuluje CapsLock"
#: ../rules/base.xml.in.h:689
-msgid "Traditional phonetic"
-msgstr "Tradycyjny fonetyczny"
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Shift nie anuluje NumLocka, wybiera poziom 3."
#: ../rules/base.xml.in.h:690
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access Keyboard"
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Shift z klawiaturą numeryczną działą jak pod MS Windows"
#: ../rules/base.xml.in.h:691
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+msgid "Shift+Caps Lock"
+msgstr "Shift+CapsLock"
#: ../rules/base.xml.in.h:692
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
+msgid "Sindhi"
+msgstr "Sindhi"
#: ../rules/base.xml.in.h:693
-msgid "Tur"
-msgstr "TUR"
+msgid "Sinhala"
+msgstr "Syngaleski"
#: ../rules/base.xml.in.h:694
-msgid "Turkey"
-msgstr "Turecki"
+msgid "Slovak"
+msgstr "Słowacki"
#: ../rules/base.xml.in.h:695
-msgid "Turkmenistan"
-msgstr "Turkmeński"
+msgid "Slovak (extended Backslash)"
+msgstr "Słowacki (rozszerzony backslash)"
#: ../rules/base.xml.in.h:696
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
+msgid "Slovak (qwerty)"
+msgstr "Słowacki (QWERTY)"
#: ../rules/base.xml.in.h:697
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Słowacki (QWERTY, rozszerzony Backslash)"
#: ../rules/base.xml.in.h:698
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
+msgid "Slovene"
+msgstr "Słoweński"
#: ../rules/base.xml.in.h:699
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (tryb 102/105:EU)"
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Słoweński (klawiatura US z literami słoweńskimi)"
#: ../rules/base.xml.in.h:700
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (tryb 106:JP)"
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Słoweński (używanie cudzysłowów do cytowania)"
#: ../rules/base.xml.in.h:701
-msgid "Typewriter"
-msgstr "Maszynistki"
+msgid "Spanish"
+msgstr "Hiszpański"
#: ../rules/base.xml.in.h:702
-msgid "Typewriter, legacy"
-msgstr "Maszynistki, stary"
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Hiszpański (wariant asturski z H i L z dolną kropką)"
#: ../rules/base.xml.in.h:703
-msgid "Tza"
-msgstr "TZA"
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Hiszpański (wariant kataloński z L ze środkową kropką)"
#: ../rules/base.xml.in.h:704
-msgid "UCW layout (accented letters only)"
-msgstr "Układ UCW (tylko litery akcentowane)"
+msgid "Spanish (Dvorak)"
+msgstr "Hiszpański (Dvoraka)"
#: ../rules/base.xml.in.h:705
-msgid "US Dvorak with CZ UCW support"
-msgstr "US Dvoraka z obsługą CZ UCW"
+msgid "Spanish (Latin American)"
+msgstr "Hiszpański (Ameryka Łacińska)"
#: ../rules/base.xml.in.h:706
-msgid "US keyboard with Bosnian digraphs"
-msgstr "Klawiatura US z dwuznakami bośniackimi"
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Hiszpański (Ameryka Łacińska, bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:707
-msgid "US keyboard with Bosnian letters"
-msgstr "Klawiatura US z literami bośniackimi"
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Hiszpański (Ameryka Łacińska, ze znakiem tyldy)"
#: ../rules/base.xml.in.h:708
-msgid "US keyboard with Croatian digraphs"
-msgstr "Klawiatura US z dwuznakami chorwacki"
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Hiszpański (Ameryka Łacińska, klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:709
-msgid "US keyboard with Croatian letters"
-msgstr "Klawiatura US z literami chorwackimi"
+msgid "Spanish (Mac)"
+msgstr "Hiszpański (Mac)"
#: ../rules/base.xml.in.h:710
-msgid "US keyboard with Estonian letters"
-msgstr "Klawiatura US z literami estońskimi"
+msgid "Spanish (Sun dead keys)"
+msgstr "Hiszpański (klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:711
-msgid "US keyboard with Italian letters"
-msgstr "Klawiatura US z literami włoskimi"
+msgid "Spanish (eliminate dead keys)"
+msgstr "Hiszpański (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:712
-msgid "US keyboard with Lithuanian letters"
-msgstr "Klawiatura US z literami litewskimi"
+msgid "Spanish (include dead tilde)"
+msgstr "Hiszpański (ze znakiem tyldy)"
#: ../rules/base.xml.in.h:713
-msgid "US keyboard with Slovenian letters"
-msgstr "Klawiatura US z literami słoweńskimi"
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Klawisze specjalne (Ctrl+Alt+&lt;klawisz&gt;) obsługiwane przez serwer"
-#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr "USA"
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Type 5/6"
#: ../rules/base.xml.in.h:715
-msgid "Udmurt"
-msgstr "Udmurcki"
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power Multimedia Keyboard"
#: ../rules/base.xml.in.h:716
-msgid "Ukr"
-msgstr "UKR"
+msgid "Swahili (Kenya)"
+msgstr "Suahili (Kenia)"
#: ../rules/base.xml.in.h:717
-msgid "Ukraine"
-msgstr "Ukraiński"
+msgid "Swahili (Tanzania)"
+msgstr "Suahili (Tanzania)"
#: ../rules/base.xml.in.h:718
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Dodatki Unicode (strzałki i symbole matematyczne)"
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Zamiana Ctrl i CapsLocka"
#: ../rules/base.xml.in.h:719
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Dodatki Unicode (strzałki i symbole matematyczne). Symbole matematyczne na poziomie domyślnym"
+msgid "Swap ESC and Caps Lock"
+msgstr "Zamiana Esc i CapsLocka"
#: ../rules/base.xml.in.h:720
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+msgid "Swedish"
+msgstr "Szwedzki"
#: ../rules/base.xml.in.h:721
-msgid "United Kingdom"
-msgstr "Brytyjski"
+msgid "Swedish (Dvorak)"
+msgstr "Szwedzki (Dvoraka)"
#: ../rules/base.xml.in.h:722
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+msgid "Swedish (Mac)"
+msgstr "Szwedzki (Mac)"
#: ../rules/base.xml.in.h:723
-msgid "Urdu, Alternative phonetic"
-msgstr "Urdu - alternatywny fonetyczny"
+msgid "Swedish (Svdvorak)"
+msgstr "Szwedzki (Svdvorak)"
#: ../rules/base.xml.in.h:724
-msgid "Urdu, Phonetic"
-msgstr "Urdu - fonetyczny"
+msgid "Swedish (eliminate dead keys)"
+msgstr "Szwedzki (bez klawiszy akcentów)"
#: ../rules/base.xml.in.h:725
-msgid "Urdu, Winkeys"
-msgstr "Urdu - klawisze Win"
+msgid "Swedish (northern Saami)"
+msgstr "Szwedzki (północnolapoński)"
#: ../rules/base.xml.in.h:726
-msgid "Use Bosnian digraphs"
-msgstr "Używanie dwuznaków bośniackich"
+msgid "Swiss"
+msgstr "Szwajcarski"
#: ../rules/base.xml.in.h:727
-msgid "Use Croatian digraphs"
-msgstr "Używanie dwuznaków chorwackich"
+msgid "Swiss (legacy)"
+msgstr "Szwajcarski (stary)"
#: ../rules/base.xml.in.h:728
-msgid "Use guillemets for quotes"
-msgstr "Używanie cudzysłowów do cytowania"
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet PC)"
#: ../rules/base.xml.in.h:729
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Używanie diody na klawiaturze do sygnalizacji układu alternatywnego"
+msgid "Syriac"
+msgstr "Syryjski"
#: ../rules/base.xml.in.h:730
-msgid "Using space key to input non-breakable space character"
-msgstr "Używanie klawisza spacji do wprowadzania znaku niełamliwej spacji"
+msgid "Syriac (phonetic)"
+msgstr "Syryjski (fonetyczny)"
#: ../rules/base.xml.in.h:731
-msgid "Usual space at any level"
-msgstr "Zwykła spacja na dowolnym poziomie"
+msgid "Taiwanese"
+msgstr "Tajwański"
#: ../rules/base.xml.in.h:732
-msgid "Uzb"
-msgstr "UZB"
+msgid "Taiwanese (indigenous)"
+msgstr "Tajwański (autochtoniczny)"
#: ../rules/base.xml.in.h:733
-msgid "Uzbekistan"
-msgstr "Uzbecki"
+msgid "Tajik"
+msgstr "Tadżycki"
#: ../rules/base.xml.in.h:734
-msgid "Vietnam"
-msgstr "Wietnamski"
+msgid "Tajik (legacy)"
+msgstr "Tadżycki (stary)"
#: ../rules/base.xml.in.h:735
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "ViewSonic KU-306 Internet Keyboard"
+msgid "Tamil"
+msgstr "Tamilski"
#: ../rules/base.xml.in.h:736
-msgid "Vnm"
-msgstr "VNM"
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Tamilski (Sri Lanka, maszynistki TAB)"
#: ../rules/base.xml.in.h:737
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Klawiatura numeryczna Wang 724 z dodatkami Unicode (strzałki i symbole matematyczne)"
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Tamilski (Sri Lanka, unikodowy)"
#: ../rules/base.xml.in.h:738
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Klawiatura numeryczna Wang 724 z dodatkami Unicode (strzałki i symbole matematyczne). Symbole matematyczne na poziomie domyślnym"
+msgid "Tamil (TAB typewriter)"
+msgstr "Tamilski (maszynistki TAB)"
#: ../rules/base.xml.in.h:739
-msgid "Wang model 724 azerty"
-msgstr "Wang model 724 AZERTY"
+msgid "Tamil (TSCII typewriter)"
+msgstr "Tamilski (maszynistki TSCII)"
#: ../rules/base.xml.in.h:740
-msgid "Western"
-msgstr "Zachodni"
+msgid "Tamil (Unicode)"
+msgstr "Tamilski (unikodowy)"
#: ../rules/base.xml.in.h:741
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
+msgid "Tamil (keyboard with numerals)"
+msgstr "Tamilski (klawiatura z cyframi)"
#: ../rules/base.xml.in.h:742
-msgid "Winkeys"
-msgstr "Klawisze Win"
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
#: ../rules/base.xml.in.h:743
-msgid "With &lt;\\|&gt; key"
-msgstr "Z klawiszem &lt;\\|&gt;"
+msgid "Telugu"
+msgstr "Telugu"
#: ../rules/base.xml.in.h:744
-msgid "With EuroSign on 5"
-msgstr "Ze znakiem euro na 5"
+msgid "Thai"
+msgstr "Tajski"
#: ../rules/base.xml.in.h:745
-msgid "With guillemets"
-msgstr "Z cudzysłowami"
+msgid "Thai (Pattachote)"
+msgstr "Tajski (Pattachote)"
#: ../rules/base.xml.in.h:746
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! Internet Keyboard"
+msgid "Thai (TIS-820.2538)"
+msgstr "Tajski (TIS-820.2538)"
#: ../rules/base.xml.in.h:747
-msgid "Yakut"
-msgstr "Jakucki"
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "Pod odpowiednimi klawiszami wg układu Dvoraka."
#: ../rules/base.xml.in.h:748
-msgid "Yoruba"
-msgstr "Joruba"
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "Pod odpowiednimi klawiszami wg układu QWERTY."
#: ../rules/base.xml.in.h:749
-msgid "Z and ZHE swapped"
-msgstr "Zamienione Z i Ż"
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Przełączanie klawiszy kursorów przez Shift + NumLock."
#: ../rules/base.xml.in.h:750
-msgid "Zaf"
-msgstr "ZAF"
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
#: ../rules/base.xml.in.h:751
-msgid "Zero-width non-joiner character at second level"
-msgstr "Znak rozdzielający zerowej szerokości na poziomie 2."
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access Keyboard"
#: ../rules/base.xml.in.h:752
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
-msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3."
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
#: ../rules/base.xml.in.h:753
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
-msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., nic na poziomie 4."
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
#: ../rules/base.xml.in.h:754
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
-msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., wąskiej niełamliwej spacji na poziomie 4."
+msgid "Tswana"
+msgstr "Tswana"
#: ../rules/base.xml.in.h:755
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
-msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., znak łączący zerowej szerokości na poziomie 4."
+msgid "Turkish"
+msgstr "Turecki"
#: ../rules/base.xml.in.h:756
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
-msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak łączący zerowej szerokości na poziomie 3."
+msgid "Turkish (Alt-Q)"
+msgstr "Turecki (Alt-Q)"
#: ../rules/base.xml.in.h:757
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
-msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak łączący zerowej szerokości na poziomie 3., znak niełamliwej spacji na poziomie 4."
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Turecki (krymskotatarski turecki Alt-Q)"
#: ../rules/base.xml.in.h:758
-msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
-msgstr "Znak rozdzielający zerowej szerokości na poziomie 3., znak łączący zerowej szerokości na poziomie 4."
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Turecki (krymskotatarski turecki F)"
#: ../rules/base.xml.in.h:759
-msgid "azerty"
-msgstr "AZERTY"
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Turecki (krymskotatarski turecki Q)"
#: ../rules/base.xml.in.h:760
-msgid "azerty/digits"
-msgstr "AZERTY/cyfry"
+msgid "Turkish (F)"
+msgstr "Turecki (F)"
#: ../rules/base.xml.in.h:761
-msgid "digits"
-msgstr "cyfry"
+msgid "Turkish (Sun dead keys)"
+msgstr "Turecki (klawisze akcentów Suna)"
#: ../rules/base.xml.in.h:762
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "zamieniony średnik i apostrof (przestarzałe)"
+msgid "Turkish (international with dead keys)"
+msgstr "Turecki (międzynarodowy z klawiszami akcentów)"
#: ../rules/base.xml.in.h:763
-msgid "lyx"
-msgstr "lyx"
+msgid "Turkmen"
+msgstr "Turkmeński"
#: ../rules/base.xml.in.h:764
-msgid "qwerty"
-msgstr "QWERTY"
+msgid "Turkmen (Alt-Q)"
+msgstr "Turkmeński (Alt-Q)"
#: ../rules/base.xml.in.h:765
-msgid "qwerty, extended Backslash"
-msgstr "QWERTY, rozszerzony Backslash"
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
#: ../rules/base.xml.in.h:766
-msgid "qwerty/digits"
-msgstr "QWERTY/cyfry"
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
#: ../rules/base.xml.in.h:767
-msgid "qwertz"
-msgstr "QWERTZ"
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (tryb 102/105:EU)"
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (tryb 106:JP)"
+
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Ukraiński"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Ukraiński (krymskotatarski turecki Alt-Q)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Ukraiński (krymskotatarski turecki F)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Ukraiński (krymskotatarski turecki Q)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Ukraiński (klawisze Win)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Ukraiński (homofoniczny)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Ukraiński (stary)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Ukraiński (fonetyczny)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Ukraiński (standardowy RSTU przy układzie rosyjskim)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Ukraiński (standardowy RSTU)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Ukraiński (maszynistki)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Dodatki Unicode (strzałki i symbole matematyczne)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Dodatki Unicode (strzałki i symbole matematyczne). Symbole matematyczne na poziomie domyślnym"
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Urdu (Pakistan)"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Urdu (Pakistan, CRULP)"
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Urdu (Pakistan, NLA)"
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Urdu (klawisze Win)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Urdu (alternatywny fonetyczny)"
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Urdu (fonetyczny)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Używanie diody na klawiaturze do sygnalizacji układu alternatywnego"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Używanie klawisza spacji do wprowadzania znaku niełamliwej spacji"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Zwykła spacja na dowolnym poziomie"
+
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Uzbecki"
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Uzbecki (Afganistan)"
+
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Uzbecki (Afganistan, OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Uzbecki (krymskotatarski turecki Alt-Q)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Uzbecki (krymskotatarski turecki F)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Uzbecki (krymskotatarski turecki Q)"
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Uzbecki (łaciński)"
+
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "Wietnamski"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 Internet Keyboard"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Klawiatura numeryczna Wang 724 z dodatkami Unicode (strzałki i symbole matematyczne)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Klawiatura numeryczna Wang 724 z dodatkami Unicode (strzałki i symbole matematyczne). Symbole matematyczne na poziomie domyślnym"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Wolof"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! Internet Keyboard"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Joruba"
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "Znak rozdzielający zerowej szerokości na poziomie 2."
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3."
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., nic na poziomie 4."
+
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., wąskiej niełamliwej spacji na poziomie 4."
+
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak niełamliwej spacji na poziomie 3., znak łączący zerowej szerokości na poziomie 4."
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak łączący zerowej szerokości na poziomie 3."
+
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Znak rozdzielający zerowej szerokości na poziomie 2., znak łączący zerowej szerokości na poziomie 3., znak niełamliwej spacji na poziomie 4."
+
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Znak rozdzielający zerowej szerokości na poziomie 3., znak łączący zerowej szerokości na poziomie 4."
+
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
+
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
+
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "AZ"
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
+
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
+
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
#: ../rules/base.extras.xml.in.h:1
msgid "APL"
msgstr "APL"
#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Atsina"
+msgid "Iran"
+msgstr "Iran"
#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr "Awestyjski"
+msgid "Iran - Avestan"
+msgstr "Iran - awestyjski"
#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr "Łączenie akcentów zamiast klawiszy akcentów"
+msgid "Lithuania"
+msgstr "Litwa"
#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr "Couer D'alene Salish"
+msgid "Lithuania - Dvorak"
+msgstr "Litwa - Dvoraka"
#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr "Międzynarodowy (łączenie Unicode z AltGr)"
+msgid "Ltu"
+msgstr "LTU"
#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "Międzynarodowy (łączenie Unicode z AltGr, alternatywny)"
+msgid "Romania"
+msgstr "Rumunia"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Rumunia - ergonomiczny Touchtype"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "ROU"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "RUS"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Rosja"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Serbia"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Serbia - łączenie akcentów zamiast klawiszy akcentów"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "SRB"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "USA"
+
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "USA - Atsina"
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "USA - Couer D'alene Salish"
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "USA - międzynarodowy (łączenie unikodu z AltGr)"
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "USA - międzynarodowy (łączenie unikodu z AltGr, alternatywny)"
diff --git a/xorg-server/xkeyboard-config/po/ru.po b/xorg-server/xkeyboard-config/po/ru.po
index 78bedb933..0eb0dcadb 100644
--- a/xorg-server/xkeyboard-config/po/ru.po
+++ b/xorg-server/xkeyboard-config/po/ru.po
@@ -10,12 +10,13 @@
# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2011.
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 2.1-pre1\n"
+"Project-Id-Version: xkeyboard-config 2.1.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2011-01-12 00:16+0000\n"
-"PO-Revision-Date: 2011-01-12 20:39+0300\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-04-01 16:52+0400\n"
"Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n"
"Language-Team: Russian <gnu@mx.ru>\n"
+"Language: ru\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
@@ -27,3081 +28,4155 @@ msgid "&lt;Less/Greater&gt;"
msgstr "&lt;Меньше чем/Больше чем&gt;"
#: ../rules/base.xml.in.h:2
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "По клавише &lt;Меньше чем/Больше чем&gt; выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Меньше чем/Больше чем&gt; (выбирается 3-й ряд, защёлкивается при нажатии вместе с другим выборщиком-3-го-ряда)"
#: ../rules/base.xml.in.h:3
-msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "По клавише &lt;Меньше чем/Больше чем&gt; выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "По клавише &lt;Меньше чем/Больше чем&gt; выбирается 5-й ряд и активируется level5-Lock при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr "(F)"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "По клавише &lt;Меньше чем/Больше чем&gt; выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr "(Устарело) Альтернативная"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "По клавише &lt;Меньше чем/Больше чем&gt; выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(Устарело) Альтернативная, специальные клавиши (dead keys) Sun"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(Устарело) Альтернативная, исключить специальные клавиши (dead keys)"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr "Cовместимая c 101/104 кнопочной"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr "pc101, qwerty, запятая, специальные клавиши (dead keys)"
+msgid "ATM/phone-style"
+msgstr "В стиле банкоматной/телефонной"
#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "pc101, qwerty, запятая, исключить специальные клавиши (dead keys)"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr "pc101, qwerty, точка, исключить специальные клавиши (dead keys)"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "pc101, qwerty, точка, исключить специальные клавиши (dead keys)"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr "pc101, qwertz, запятая, специальные клавиши (dead keys)"
+msgid "Acer Laptop"
+msgstr "Ноутбук Acer"
#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "pc101, qwertz, запятая, исключить специальные клавиши (dead keys)"
+msgid "Add the standard behavior to Menu key"
+msgstr "Добавить обыкновенное поведение на клавишу Menu"
#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr "pc101, qwertz, точка, специальные клавиши (dead keys)"
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Добавление диакритических знаков эсперанто"
#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "pc101, qwertz, точка, исключить специальные клавиши (dead keys)"
+msgid "Adding currency signs to certain keys"
+msgstr "Добавление знаков валют к некоторым клавишам"
#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr "pc102, qwerty, запятая, специальные клавиши (dead keys)"
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "pc102, qwerty, запятая, исключить специальные клавиши (dead keys)"
+msgid "Afg"
+msgstr "Afg"
#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr "pc102, qwerty, точка, специальные клавиши (dead keys)"
+msgid "Afghani"
+msgstr "Афганская"
#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "pc102, qwerty, точка, исключить специальные клавиши (dead keys)"
+msgid "Akan"
+msgstr "Аканская"
#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr "pc102, qwertz, запятая, специальные клавиши (dead keys)"
+msgid "Albanian"
+msgstr "Албанская"
#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "pc102, qwertz, запятая, исключить специальные клавиши (dead keys)"
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt и Meta на клавишах Alt"
#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr "pc102, qwertz, точка, специальные клавиши (dead keys)"
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt соответствует правой клавише Win, а Super - Menu"
#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "pc102, qwertz, точка, исключить специальные клавиши (dead keys)"
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
#: ../rules/base.xml.in.h:25
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
#: ../rules/base.xml.in.h:26
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
#: ../rules/base.xml.in.h:27
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
+msgid "Alt+Space"
+msgstr "Alt+Пробел"
#: ../rules/base.xml.in.h:28
-msgid "ATM/phone-style"
-msgstr "В стиле банкоматной/телефонной"
+msgid "Alt/Win key behavior"
+msgstr "Поведение клавиши Alt/Win"
#: ../rules/base.xml.in.h:29
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Amharic"
+msgstr "Амхарская"
#: ../rules/base.xml.in.h:30
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Any Alt key"
+msgstr "Любая клавиша Alt"
#: ../rules/base.xml.in.h:31
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Any Win key"
+msgstr "Любая клавиша Win"
#: ../rules/base.xml.in.h:32
-msgid "Acer Laptop"
-msgstr "Ноутбук Acer"
+msgid "Any Win key (while pressed)"
+msgstr "Любая клавиша Win (на время нажатия)"
#: ../rules/base.xml.in.h:33
-msgid "Add the standard behavior to Menu key"
-msgstr "Добавить обыкновенное поведение на клавишу Menu"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:34
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Добавление диакритических знаков эсперанто"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Алюминиевая клавиатура Apple (ANSI)"
#: ../rules/base.xml.in.h:35
-msgid "Adding currency signs to certain keys"
-msgstr "Добавление знаков валют к некоторым клавишам"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Алюминиевая клавиатура Apple (ISO)"
#: ../rules/base.xml.in.h:36
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Алюминиевая клавиатура Apple (JIS)"
#: ../rules/base.xml.in.h:37
-msgid "Afg"
-msgstr "Afg"
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Алюминиевая клавиатура Apple: эмуляция клавиш ПК (Print, Scroll Lock, Pause, Num Lock)"
#: ../rules/base.xml.in.h:38
-msgid "Afghanistan"
-msgstr "Афганистан"
+msgid "Apple Laptop"
+msgstr "Ноутбук Apple"
#: ../rules/base.xml.in.h:39
-msgid "Akan"
-msgstr "Акан"
+msgid "Arabic"
+msgstr "Арабская"
#: ../rules/base.xml.in.h:40
-msgid "Alb"
-msgstr "Alb"
+msgid "Arabic (Buckwalter)"
+msgstr "Арабская (Buckwalter)"
#: ../rules/base.xml.in.h:41
-msgid "Albania"
-msgstr "Албания"
+msgid "Arabic (Morocco)"
+msgstr "Арабская (Марокко)"
#: ../rules/base.xml.in.h:42
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt и Meta на клавишах Alt"
+msgid "Arabic (Pakistan)"
+msgstr "Арабская (Пакистан)"
#: ../rules/base.xml.in.h:43
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt соответствует правой клавише Win, а Super - Menu"
+msgid "Arabic (Syria)"
+msgstr "Арабская (Сирия)"
#: ../rules/base.xml.in.h:44
-msgid "Alt+Caps Lock"
-msgstr "Alt+Caps Lock"
+msgid "Arabic (azerty)"
+msgstr "Арабская (azerty)"
#: ../rules/base.xml.in.h:45
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
+msgid "Arabic (azerty/digits)"
+msgstr "Арабская (azerty/цифры)"
#: ../rules/base.xml.in.h:46
-msgid "Alt+Shift"
-msgstr "Alt+Shift"
+msgid "Arabic (digits)"
+msgstr "Арабская (цифры)"
#: ../rules/base.xml.in.h:47
-msgid "Alt+Space"
-msgstr "Alt+Пробел"
+msgid "Arabic (qwerty)"
+msgstr "Арабская (qwerty)"
#: ../rules/base.xml.in.h:48
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Arabic (qwerty/digits)"
+msgstr "Арабская (qwerty/цифры)"
#: ../rules/base.xml.in.h:49
-msgid "Alt/Win key behavior"
-msgstr "Поведение клавиши Alt/Win"
+msgid "Armenian"
+msgstr "Армянская"
#: ../rules/base.xml.in.h:50
-msgid "Alternative"
-msgstr "Альтернативная"
+msgid "Armenian (alternative eastern)"
+msgstr "Армянская (альтернативная восточная)"
#: ../rules/base.xml.in.h:51
-msgid "Alternative Eastern"
-msgstr "Альтернативная Восточная"
+msgid "Armenian (alternative phonetic)"
+msgstr "Армянская (альтернативная фонетическая)"
#: ../rules/base.xml.in.h:52
-msgid "Alternative Phonetic"
-msgstr "Альтернативная Фонетическая"
+msgid "Armenian (eastern)"
+msgstr "Армянская (восточная)"
#: ../rules/base.xml.in.h:53
-msgid "Alternative international"
-msgstr "Альтернативная международная"
+msgid "Armenian (phonetic)"
+msgstr "Армянская (фонетическая)"
#: ../rules/base.xml.in.h:54
-msgid "Alternative, Sun dead keys"
-msgstr "Альтернативная, специальные клавиши (dead keys) Sun"
+msgid "Armenian (western)"
+msgstr "Армянская (западная)"
#: ../rules/base.xml.in.h:55
-msgid "Alternative, eliminate dead keys"
-msgstr "Альтернативная, исключить специальные клавиши (dead keys)"
+msgid "Asus Laptop"
+msgstr "Ноутбук Asus"
#: ../rules/base.xml.in.h:56
-msgid "Alternative, latin-9 only"
-msgstr "Альтернативная, только latin-9"
+msgid "At bottom left"
+msgstr "Снизу слева"
#: ../rules/base.xml.in.h:57
-msgid "And"
-msgstr "And"
+msgid "At left of 'A'"
+msgstr "Слева от 'A'"
#: ../rules/base.xml.in.h:58
-msgid "Andorra"
-msgstr "Андорра"
+msgid "Avatime"
+msgstr "Аватайм"
#: ../rules/base.xml.in.h:59
-msgid "Any Alt key"
-msgstr "Любая клавиша Alt"
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Азербайджанская (кириллица)"
#: ../rules/base.xml.in.h:60
-msgid "Any Win key"
-msgstr "Любая клавиша Win"
+msgid "Azerbaijani"
+msgstr "Азербайджанская"
#: ../rules/base.xml.in.h:61
-msgid "Any Win key (while pressed)"
-msgstr "Любая клавиша Win (на время нажатия)"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 wireless Internet Keyboard"
#: ../rules/base.xml.in.h:62
-msgid "Apostrophe (') variant"
-msgstr "Вариант с апострофом (')"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:63
-msgid "Apple"
-msgstr "Apple"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimedia"
#: ../rules/base.xml.in.h:64
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr "Алюминиевая клавиатура Apple (ANSI)"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:65
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr "Алюминиевая клавиатура Apple (ISO)"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:66
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr "Алюминиевая клавиатура Apple (JIS)"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
-msgstr "Алюминиевая клавиатура Apple: эмуляция клавиш ПК (Print, Scroll Lock, Pause, Num Lock)"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:68
-msgid "Apple Laptop"
-msgstr "Ноутбук Apple"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:69
-msgid "Ara"
-msgstr "Ara"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:70
-msgid "Arabic"
-msgstr "Арабская"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
#: ../rules/base.xml.in.h:71
-msgid "Arm"
-msgstr "Arm"
+msgid "Backslash"
+msgstr "Backslash"
#: ../rules/base.xml.in.h:72
-msgid "Armenia"
-msgstr "Армения"
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "По правой клавише Backslash выбирается 3-й ряд, защёлкивается при нажатии вместе с другим выборщиком-3-го-ряда"
#: ../rules/base.xml.in.h:73
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Астурлеонский вариант с нижними точками у H и L"
+msgid "Bambara"
+msgstr "Баманская"
#: ../rules/base.xml.in.h:74
-msgid "Asus Laptop"
-msgstr "Ноутбук Asus"
+msgid "Belarusian"
+msgstr "Белорусская"
#: ../rules/base.xml.in.h:75
-msgid "At bottom left"
-msgstr "Снизу слева"
+msgid "Belarusian (Latin)"
+msgstr "Белорусская (латиница)"
#: ../rules/base.xml.in.h:76
-msgid "At left of 'A'"
-msgstr "Слева от 'A'"
+msgid "Belarusian (legacy)"
+msgstr "Белорусская (унаследованная)"
#: ../rules/base.xml.in.h:77
-msgid "Austria"
-msgstr "Австрия"
+msgid "Belgian"
+msgstr "Бельгийская"
#: ../rules/base.xml.in.h:78
-msgid "Aut"
-msgstr "Aut"
+msgid "Belgian (ISO alternate)"
+msgstr "Бельгийская (альтернативная ISO)"
#: ../rules/base.xml.in.h:79
-msgid "Avatime"
-msgstr "Аватайм"
+msgid "Belgian (Sun dead keys)"
+msgstr "Бельгийская (спец. клавиши (dead keys) Sun)"
#: ../rules/base.xml.in.h:80
-msgid "Aze"
-msgstr "Aze"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Бельгийская (Wang model 724 azerty)"
#: ../rules/base.xml.in.h:81
-msgid "Azerbaijan"
-msgstr "Азербайджан"
+msgid "Belgian (alternative)"
+msgstr "Бельгийская (альтернативная)"
#: ../rules/base.xml.in.h:82
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 wireless Internet Keyboard"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Бельгийская (альтернативная, спец. клавиши (dead keys) Sun)"
#: ../rules/base.xml.in.h:83
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Бельгийская (альтернативная, только latin-9)"
#: ../rules/base.xml.in.h:84
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF Multimedia"
+msgid "Belgian (eliminate dead keys)"
+msgstr "Бельгийская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:85
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:86
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:87
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:88
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Bengali"
+msgstr "Бенгальская"
#: ../rules/base.xml.in.h:89
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Bengali (Probhat)"
+msgstr "Бенгальская (Probhat)"
#: ../rules/base.xml.in.h:90
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Берберская (Марокко, тифинагская альтернативная фонетическая)"
#: ../rules/base.xml.in.h:91
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Берберская (Марокко, тифинагская альтернативная)"
#: ../rules/base.xml.in.h:92
-msgid "Backslash"
-msgstr "Backslash"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Берберская (Марокко, тифинагская расширенная фонетическая)"
#: ../rules/base.xml.in.h:93
-msgid "Bangladesh"
-msgstr "Бангладеш"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Берберская (Марокко, тифинагская расширенная)"
#: ../rules/base.xml.in.h:94
-msgid "Bashkirian"
-msgstr "Башкирская"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Берберская (Марокко, тифинагская фонетическая)"
#: ../rules/base.xml.in.h:95
-msgid "Bel"
-msgstr "Bel"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Берберская (Марокко, тифинагская)"
#: ../rules/base.xml.in.h:96
-msgid "Belarus"
-msgstr "Белоруссия"
+msgid "Bosnian"
+msgstr "Боснийская"
#: ../rules/base.xml.in.h:97
-msgid "Belgium"
-msgstr "Бельгия"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Боснийская (клавиатура США с боснийскими диграфами)"
#: ../rules/base.xml.in.h:98
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Боснийская (клавиатура США с боснийскими буквами)"
#: ../rules/base.xml.in.h:99
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Боснийская (используются боснийские диграфы)"
#: ../rules/base.xml.in.h:100
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Боснийская (используются кавычки ёлочки как кавычки)"
#: ../rules/base.xml.in.h:101
-msgid "Bengali"
-msgstr "Бенгальская"
+msgid "Both Alt keys together"
+msgstr "Обе клавиши Alt, нажатые вместе"
#: ../rules/base.xml.in.h:102
-msgid "Bengali Probhat"
-msgstr "Бенгальская Пробат"
+msgid "Both Ctrl keys together"
+msgstr "Обе клавиши Ctrl, нажатые вместе"
#: ../rules/base.xml.in.h:103
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Бепо, эргономичная, похожая на Dvorak"
+msgid "Both Shift keys together"
+msgstr "Обе клавиши Shift, нажатые вместе"
#: ../rules/base.xml.in.h:104
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Бепо, эргономичная, похожая на Dvorak, только latin-9"
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Обе клавиши Shift, нажатые вместе, включают Caps Lock, одна клавиша Shift выключает"
#: ../rules/base.xml.in.h:105
-msgid "Bgd"
-msgstr "Bgd"
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Обе клавиши Shift, нажатые вместе, переключают Caps Lock"
#: ../rules/base.xml.in.h:106
-msgid "Bgr"
-msgstr "Bgr"
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Обе клавиши Shift, нажатые вместе, переключают ShiftLock"
#: ../rules/base.xml.in.h:107
-msgid "Bhutan"
-msgstr "Бутан"
+msgid "Braille"
+msgstr "Брайля"
#: ../rules/base.xml.in.h:108
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Библейский иврит (Tiro)"
+msgid "Braille (left hand)"
+msgstr "Брайля (под левую руку)"
#: ../rules/base.xml.in.h:109
-msgid "Bih"
-msgstr "Bih"
+msgid "Braille (right hand)"
+msgstr "Брайля (под правую руку)"
#: ../rules/base.xml.in.h:110
-msgid "Blr"
-msgstr "Blr"
+msgid "Brother Internet Keyboard"
+msgstr "Brother Internet Keyboard"
#: ../rules/base.xml.in.h:111
-msgid "Bosnia and Herzegovina"
-msgstr "Босния и Герцеговина"
+msgid "Bulgarian"
+msgstr "Болгарская"
#: ../rules/base.xml.in.h:112
-msgid "Both Alt keys together"
-msgstr "Обе клавиши Alt, нажатые вместе"
+msgid "Bulgarian (new phonetic)"
+msgstr "Болгарская (новая фонетическая)"
#: ../rules/base.xml.in.h:113
-msgid "Both Ctrl keys together"
-msgstr "Обе клавиши Ctrl, нажатые вместе"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Болгарская (традиционная фонетическая)"
#: ../rules/base.xml.in.h:114
-msgid "Both Shift keys together"
-msgstr "Обе клавиши Shift, нажатые вместе"
+msgid "Burmese"
+msgstr "Бирманская"
#: ../rules/base.xml.in.h:115
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr "Обе клавиши Shift, нажатые вместе, переключают Caps Lock"
+msgid "Canadian Multilingual"
+msgstr "Канадская многоязыковая"
#: ../rules/base.xml.in.h:116
-msgid "Botswana"
-msgstr "Ботсвана"
+msgid "Canadian Multilingual (first part)"
+msgstr "Канадская многоязыковая (первая часть)"
#: ../rules/base.xml.in.h:117
-msgid "Bra"
-msgstr "Bra"
+msgid "Canadian Multilingual (second part)"
+msgstr "Канадская многоязыковая (вторая часть)"
#: ../rules/base.xml.in.h:118
-msgid "Braille"
-msgstr "Брайля"
+msgid "Caps Lock"
+msgstr "Caps Lock"
#: ../rules/base.xml.in.h:119
-msgid "Brazil"
-msgstr "Бразилия"
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Caps Lock (выбирается 3-й ряд, защёлкивается при нажатии вместе с другим выборщиком-3-го-ряда)"
#: ../rules/base.xml.in.h:120
-msgid "Breton"
-msgstr "Бретонская"
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Caps Lock (на первую раскладку), Shift+Caps Lock (на последнюю раскладку)"
#: ../rules/base.xml.in.h:121
-msgid "Brl"
-msgstr "Brl"
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Caps Lock (пока нажата), Alt+Caps Lock выполняет первоначальную функцию capslock"
#: ../rules/base.xml.in.h:122
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internet Keyboard"
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock действует как Shift с блокировкой. Shift приостанавливает действие Caps Lock"
#: ../rules/base.xml.in.h:123
-msgid "Btn"
-msgstr "Btn"
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock действует как Shift с блокировкой. Shift не влияет на Caps Lock"
#: ../rules/base.xml.in.h:124
-msgid "Buckwalter"
-msgstr "Buckwalter"
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock выключен"
#: ../rules/base.xml.in.h:125
-msgid "Bulgaria"
-msgstr "Болгария"
+msgid "Caps Lock key behavior"
+msgstr "Поведение клавиши Caps Lock"
#: ../rules/base.xml.in.h:126
-msgid "Bwa"
-msgstr "Bwa"
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Caps Lock переключает Shift, таким образом что, он действует сразу на все клавиши"
#: ../rules/base.xml.in.h:127
-msgid "COD"
-msgstr "COD"
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Caps Lock переключает обычную капитализацию символов алфавита"
#: ../rules/base.xml.in.h:128
-msgid "CRULP"
-msgstr "CRULP"
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock включает внутреннюю капитализацию. Shift приостанавливает действие Caps Lock"
#: ../rules/base.xml.in.h:129
-msgid "Cambodia"
-msgstr "Камбоджа"
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock включает внутреннюю капитализацию. Shift не влияет на Caps Lock"
#: ../rules/base.xml.in.h:130
-msgid "Can"
-msgstr "Can"
+msgid "Catalan"
+msgstr "Каталонская"
#: ../rules/base.xml.in.h:131
-msgid "Canada"
-msgstr "Канада"
+msgid "Cherokee"
+msgstr "Черокская"
#: ../rules/base.xml.in.h:132
-msgid "Capewell-Dvorak (Baybayin)"
-msgstr "Кэйпвелл-Дворак (байбайин)"
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
#: ../rules/base.xml.in.h:133
-msgid "Capewell-Dvorak (Latin)"
-msgstr "Кэйпвелл-Дворак (латиница)"
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
#: ../rules/base.xml.in.h:134
-msgid "Capewell-QWERF 2006 (Baybayin)"
-msgstr "Кэйпвелл-QWERF 2006 (байбайин)"
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (альтернативный вариант)"
#: ../rules/base.xml.in.h:135
-msgid "Capewell-QWERF 2006 (Latin)"
-msgstr "Кэйпвелл-QWERF 2006 (латиница)"
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
#: ../rules/base.xml.in.h:136
-msgid "Caps Lock"
-msgstr "Caps Lock"
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
#: ../rules/base.xml.in.h:137
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr "Caps Lock (на первую раскладку), Shift+Caps Lock (на последнюю раскладку)"
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:138
-msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr "Caps Lock (пока нажата), Alt+Caps Lock выполняет первоначальную функцию capslock"
+msgid "Cherry CyMotion Master XPress"
+msgstr " Cherry CyMotion Master Linux"
#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr "Caps Lock действует как Shift с блокировкой. Shift приостанавливает действие Caps Lock"
+msgid "Chicony Internet Keyboard"
+msgstr "Chicony Internet Keyboard"
#: ../rules/base.xml.in.h:140
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr "Caps Lock действует как Shift с блокировкой. Shift не влияет на Caps Lock"
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
#: ../rules/base.xml.in.h:141
-msgid "Caps Lock is disabled"
-msgstr "Caps Lock выключен"
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
#: ../rules/base.xml.in.h:142
-msgid "Caps Lock key behavior"
-msgstr "Поведение клавиши Caps Lock"
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr "Caps Lock переключает Shift, таким образом что, он действует сразу на все клавиши"
+msgid "Chinese"
+msgstr "Китайская"
#: ../rules/base.xml.in.h:144
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr "Caps Lock переключает обычную капитализацию символов алфавита"
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Китайская (тибетская с цифрами ASCII)"
#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr "Caps Lock включает внутреннюю капитализацию. Shift приостанавливает действие Caps Lock"
+msgid "Chinese (Tibetan)"
+msgstr "Китайская (тибетская)"
#: ../rules/base.xml.in.h:146
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr "Caps Lock включает внутреннюю капитализацию. Shift не влияет на Caps Lock"
+msgid "Chinese (Uyghur)"
+msgstr "Китайская (уйгурская)"
#: ../rules/base.xml.in.h:147
-msgid "Catalan variant with middle-dot L"
-msgstr "Каталонский вариант с точкой в L посередине"
+msgid "Classmate PC"
+msgstr "Classmate PC"
#: ../rules/base.xml.in.h:148
-msgid "Cedilla"
-msgstr "Седиль"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access Keyboard"
#: ../rules/base.xml.in.h:149
-msgid "Che"
-msgstr "Che"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internet Keyboard (13 клавиш)"
#: ../rules/base.xml.in.h:150
-msgid "Cherokee"
-msgstr "Чероки"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internet Keyboard (18 клавиш)"
#: ../rules/base.xml.in.h:151
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UNLIMITED"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internet Keyboard (7 клавиш)"
#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq Keyboard"
#: ../rules/base.xml.in.h:153
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (альтернативный вариант)"
+msgid "Compose key position"
+msgstr "Положение клавиши Compose"
#: ../rules/base.xml.in.h:154
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Backspace"
#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control используется в качестве клавиш Alt, Alt используется в качестве клавиш Win"
#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control используется в качестве клавиш Win (и как обычный Control)"
#: ../rules/base.xml.in.h:157
-msgid "Cherry CyMotion Master XPress"
-msgstr " Cherry CyMotion Master Linux"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
#: ../rules/base.xml.in.h:158
-msgid "Chicony Internet Keyboard"
-msgstr "Chicony Internet Keyboard"
+msgid "Croatian"
+msgstr "Хорватская"
#: ../rules/base.xml.in.h:159
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Хорватская (клавиатура США с хорватскими диграфами)"
#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Хорватская (клавиатура США с хорватскими буквами)"
#: ../rules/base.xml.in.h:161
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Хорватская (используются хорватские диграфы)"
#: ../rules/base.xml.in.h:162
-msgid "China"
-msgstr "Китай"
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Хорватская (используются кавычки ёлочки как кавычки)"
#: ../rules/base.xml.in.h:163
-msgid "Chn"
-msgstr "Chn"
+msgid "Ctrl key position"
+msgstr "Положение клавиши Ctrl"
#: ../rules/base.xml.in.h:164
-msgid "Chuvash"
-msgstr "Чувашия"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
#: ../rules/base.xml.in.h:165
-msgid "Chuvash Latin"
-msgstr "Чувашия, Латиница"
+msgid "Czech"
+msgstr "Чешская"
#: ../rules/base.xml.in.h:166
-msgid "Classic"
-msgstr "Классическая"
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Чешская (раскладка UCW (только символы акцентов))"
#: ../rules/base.xml.in.h:167
-msgid "Classic Dvorak"
-msgstr "Классическая Dvorak"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Чешская (Дворак США с поддержкой CZ UCW)"
#: ../rules/base.xml.in.h:168
-msgid "Classic, eliminate dead keys"
-msgstr "Классическая, исключить специальные клавиши (dead keys)"
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Чешская (с клавишей &lt;\\|&gt;)"
#: ../rules/base.xml.in.h:169
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Czech (qwerty)"
+msgstr "Чешская (qwerty)"
#: ../rules/base.xml.in.h:170
-msgid "CloGaelach"
-msgstr "CloGaelach"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Чешская (qwerty, расширенные функции Backslash)"
#: ../rules/base.xml.in.h:171
-msgid "Colemak"
-msgstr "Colemak"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:172
-msgid "Colemak (Baybayin)"
-msgstr "Коулмак (байбайин)"
+msgid "Danish"
+msgstr "Датская"
#: ../rules/base.xml.in.h:173
-msgid "Colemak (Latin)"
-msgstr "Коулмак (латиница)"
+msgid "Danish (Dvorak)"
+msgstr "Датская (Дворак)"
#: ../rules/base.xml.in.h:174
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access Keyboard"
+msgid "Danish (Mac)"
+msgstr "Датская (Mac)"
#: ../rules/base.xml.in.h:175
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internet Keyboard (13 клавиш)"
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Датская (Macintosh, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:176
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internet Keyboard (18 клавиш)"
+msgid "Danish (eliminate dead keys)"
+msgstr "Датская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:177
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internet Keyboard (7 клавиш)"
+msgid "Default numeric keypad keys"
+msgstr "Клавиши цифровой клавиатуры по умолчанию"
#: ../rules/base.xml.in.h:178
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq Keyboard"
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:179
-msgid "Compose key position"
-msgstr "Положение клавиши Compose"
+msgid "Dell 101-key PC"
+msgstr "Dell 101-клавишный PC"
#: ../rules/base.xml.in.h:180
-msgid "Congo, Democratic Republic of the"
-msgstr "Конго, Демократическая республика"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Ноутбук Dell Inspiron из серий 6xxx/8xxx"
#: ../rules/base.xml.in.h:181
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Backspace"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Ноутбук Dell Precision из серии M"
#: ../rules/base.xml.in.h:182
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Control используется в качестве клавиш Alt, Alt используется в качестве клавиш Win"
+msgid "Dell Latitude series laptop"
+msgstr "Ноутбук Dell из серии Latitude"
#: ../rules/base.xml.in.h:183
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control используется в качестве клавиш Win (и как обычный Control)"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:184
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Крымскотатарская (Dobruca-1 Q)"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Крымскотатарская (Dobruca-2 Q)"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB Multimedia Keyboard"
#: ../rules/base.xml.in.h:187
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Крымскотатарская (турецкая Alt-Q)"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa Wireless Desktop Keyboard"
#: ../rules/base.xml.in.h:188
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Крымскотатарская (турецкая F)"
+msgid "Dhivehi"
+msgstr "Дивехи"
#: ../rules/base.xml.in.h:189
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Крымскотатарская (турецкая Q)"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Модели Diamond 9801/9802"
#: ../rules/base.xml.in.h:190
-msgid "Croatia"
-msgstr "Хорватия"
+msgid "Dutch"
+msgstr "Голландская"
#: ../rules/base.xml.in.h:191
-msgid "Ctrl key position"
-msgstr "Положение клавиши Ctrl"
+msgid "Dutch (Mac)"
+msgstr "Голландская (Mac)"
#: ../rules/base.xml.in.h:192
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Shift"
+msgid "Dutch (Sun dead keys)"
+msgstr "Голландская (спец. клавиши (dead keys) Sun)"
#: ../rules/base.xml.in.h:193
-msgid "Cyrillic"
-msgstr "Кириллица"
+msgid "Dutch (standard)"
+msgstr "Голландская (стандартная)"
#: ../rules/base.xml.in.h:194
-msgid "Cyrillic with guillemets"
-msgstr "Кириллица с кавычками ёлочками"
+msgid "Dzongkha"
+msgstr "Дзонг-кэ (dz"
#: ../rules/base.xml.in.h:195
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Кириллица, З и Ж переставлены местами"
+msgid "Enable extra typographic characters"
+msgstr "Включить дополнительные типографские символы"
#: ../rules/base.xml.in.h:196
-msgid "Cze"
-msgstr "Cze"
+msgid "English (Canada)"
+msgstr "Английская (Канада)"
#: ../rules/base.xml.in.h:197
-msgid "Czechia"
-msgstr "Чехия"
+msgid "English (Colemak)"
+msgstr "Английская (Коулмак)"
#: ../rules/base.xml.in.h:198
-msgid "DOS"
-msgstr "DOS"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Английская (Дворак альтернативная международная (без спец. клавиш))"
#: ../rules/base.xml.in.h:199
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "English (Dvorak international with dead keys)"
+msgstr "Английская (Дворак международная с спец. клавишами)"
#: ../rules/base.xml.in.h:200
-msgid "Dead acute"
-msgstr "Спец. символ Dead acute"
+msgid "English (Dvorak)"
+msgstr "Английская (Дворак)"
#: ../rules/base.xml.in.h:201
-msgid "Dead grave acute"
-msgstr "Спец. символ Dead grave acute"
+msgid "English (Ghana)"
+msgstr "Английская (Гана)"
#: ../rules/base.xml.in.h:202
-msgid "Default numeric keypad keys"
-msgstr "Клавиши цифровой клавиатуры по умолчанию"
+msgid "English (Ghana, GILLBT)"
+msgstr "Английская (Гана, GILLBT)"
#: ../rules/base.xml.in.h:203
-msgid "Dell"
-msgstr "Dell"
+msgid "English (Ghana, multilingual)"
+msgstr "Английская (Гана, международная)"
#: ../rules/base.xml.in.h:204
-msgid "Dell 101-key PC"
-msgstr "Dell 101-клавишный PC"
+msgid "English (India, with RupeeSign)"
+msgstr "Английская (Индия, с знаком индийской рупии)"
#: ../rules/base.xml.in.h:205
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Ноутбук Dell Inspiron из серий 6xxx/8xxx"
+msgid "English (Macintosh)"
+msgstr "Английская (Macintosh)"
#: ../rules/base.xml.in.h:206
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Ноутбук Dell Precision из серии M"
+msgid "English (Mali, USA Mac)"
+msgstr "Английская (Мали, Mac США)"
#: ../rules/base.xml.in.h:207
-msgid "Dell Latitude series laptop"
-msgstr "Ноутбук Dell из серии Latitude"
+msgid "English (Mali, USA international)"
+msgstr "Английская (Мали, международная США)"
#: ../rules/base.xml.in.h:208
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "English (Nigeria)"
+msgstr "Английская (Нигерия)"
#: ../rules/base.xml.in.h:209
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
+msgid "English (South Africa)"
+msgstr "Английская (Южная Африка)"
#: ../rules/base.xml.in.h:210
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "English (UK)"
+msgstr "Английская (Великобритания)"
#: ../rules/base.xml.in.h:211
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell USB Multimedia Keyboard"
+msgid "English (UK, Colemak)"
+msgstr "Английская (Великобритания, Коулмак)"
#: ../rules/base.xml.in.h:212
-msgid "Denmark"
-msgstr "Дания"
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Английская (Великобритания, Дворак (английская расстановка))"
#: ../rules/base.xml.in.h:213
-msgid "Deu"
-msgstr "Deu"
+msgid "English (UK, Dvorak)"
+msgstr "Английская (Великобритания, Дворак)"
#: ../rules/base.xml.in.h:214
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa Wireless Desktop Keyboard"
+msgid "English (UK, Mac international)"
+msgstr "Английская (Великобритания, Mac международная)"
#: ../rules/base.xml.in.h:215
-msgid "Diamond 9801 / 9802 series"
-msgstr "Модели Diamond 9801/9802"
+msgid "English (UK, Mac)"
+msgstr "Английская (Великобритания, Mac)"
#: ../rules/base.xml.in.h:216
-msgid "Dnk"
-msgstr "Dnk"
+msgid "English (UK, extended, WinKeys)"
+msgstr "Английская (Великобритания, расширенная, клавиши Win)"
#: ../rules/base.xml.in.h:217
-msgid "Dvorak"
-msgstr "Дворак"
+msgid "English (UK, international with dead keys)"
+msgstr "Английская (Великобритания, международная с спец. клавишами (dead keys))"
#: ../rules/base.xml.in.h:218
-msgid "Dvorak (Baybayin)"
-msgstr "Дворак (байбайин)"
+msgid "English (US)"
+msgstr "Английская (США)"
#: ../rules/base.xml.in.h:219
-msgid "Dvorak (Latin)"
-msgstr "Дворак (латиница)"
+msgid "English (US, alternative international)"
+msgstr "Английская (США, альтернативная международная)"
#: ../rules/base.xml.in.h:220
-msgid "Dvorak (UK Punctuation)"
-msgstr "Дворак (английская расстановка)"
+msgid "English (US, international with dead keys)"
+msgstr "Английская (США, международная с спец. клавишами (dead keys))"
#: ../rules/base.xml.in.h:221
-msgid "Dvorak alternative international (no dead keys)"
-msgstr "Дворак альтернативная международная (нет спец. клавиш)"
+msgid "English (US, with euro on 5)"
+msgstr "Английская (США, международная с символом евро на клавише 5)"
#: ../rules/base.xml.in.h:222
-msgid "Dvorak international (with dead keys)"
-msgstr "Дворак международная, со спец. клавишами"
+msgid "English (classic Dvorak)"
+msgstr "Английская (классическая Дворак)"
#: ../rules/base.xml.in.h:223
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Дворак, польские кавычки на клавише 1"
+msgid "English (international AltGr dead keys)"
+msgstr "Английская (международная с AltGr и спец. клавишами (dead keys))"
#: ../rules/base.xml.in.h:224
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Дворак, польские кавычки на клавишах с кавычками"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Английская (переключение раскладки по клавише умножения/деления)"
#: ../rules/base.xml.in.h:225
-msgid "Eastern"
-msgstr "Восточный"
+msgid "English (left handed Dvorak)"
+msgstr "Английская (Дворак под левую руку)"
#: ../rules/base.xml.in.h:226
-msgid "Eliminate dead keys"
-msgstr "Исключить специальные клавиши (dead keys)"
+msgid "English (programmer Dvorak)"
+msgstr "Английская (Дворак для программистов)"
#: ../rules/base.xml.in.h:227
-msgid "Enable extra typographic characters"
-msgstr "Включить дополнительные типографские символы"
+msgid "English (right handed Dvorak)"
+msgstr "Английская (Дворак под правую руку)"
#: ../rules/base.xml.in.h:228
-msgid "English"
-msgstr "Английская"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:229
-msgid "English (USA International)"
-msgstr "Английская (международная США)"
+msgid "Enter on keypad"
+msgstr "Enter на цифровой клавиатуре"
#: ../rules/base.xml.in.h:230
-msgid "English (USA Macintosh)"
-msgstr "Английская (Macintosh США)"
+msgid "Esperanto"
+msgstr "Эсперанто"
#: ../rules/base.xml.in.h:231
-msgid "English with RupeeSign"
-msgstr "Английская с знаком индийской рупии"
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Эсперанто (смещённые точка с запятой и кавычка, устарела)"
#: ../rules/base.xml.in.h:232
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
+msgid "Estonian"
+msgstr "Эстонская"
#: ../rules/base.xml.in.h:233
-msgid "Enter on keypad"
-msgstr "Enter на цифровой клавиатуре"
+msgid "Estonian (Dvorak)"
+msgstr "Эстонская (Дворак)"
#: ../rules/base.xml.in.h:234
-msgid "Epo"
-msgstr "Epo"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Эстонская (клавиатура США с эстонскими буквами)"
#: ../rules/base.xml.in.h:235
-msgid "Ergonomic"
-msgstr "Ergonomic"
+msgid "Estonian (eliminate dead keys)"
+msgstr "Эстонская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:236
-msgid "Esp"
-msgstr "Esp"
+msgid "Euro on 2"
+msgstr "Символ евро на клавише 2"
#: ../rules/base.xml.in.h:237
-msgid "Esperanto"
-msgstr "Эсперанто"
+msgid "Euro on 4"
+msgstr "Символ евро на клавише 4"
#: ../rules/base.xml.in.h:238
-msgid "Est"
-msgstr "Est"
+msgid "Euro on 5"
+msgstr "Символ евро на клавише 5"
#: ../rules/base.xml.in.h:239
-msgid "Estonia"
-msgstr "Эстония"
+msgid "Euro on E"
+msgstr "Символ евро на клавише E"
#: ../rules/base.xml.in.h:240
-msgid "Eth"
-msgstr "Eth"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:241
-msgid "Ethiopia"
-msgstr "Эфиопия"
+msgid "Ewe"
+msgstr "Ewe"
#: ../rules/base.xml.in.h:242
-msgid "Euro on 2"
-msgstr "Символ евро на клавише 2"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:243
-msgid "Euro on 4"
-msgstr "Символ евро на клавише 4"
+msgid "Faroese"
+msgstr "Фарерская"
#: ../rules/base.xml.in.h:244
-msgid "Euro on 5"
-msgstr "Символ евро на клавише 5"
+msgid "Faroese (eliminate dead keys)"
+msgstr "Фарерская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:245
-msgid "Euro on E"
-msgstr "Символ евро на клавише E"
+msgid "Filipino"
+msgstr "Филиппинская"
#: ../rules/base.xml.in.h:246
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Филиппинская (Кэйпвелл-Дворак байбайинcкая)"
#: ../rules/base.xml.in.h:247
-msgid "Ewe"
-msgstr "Ewe"
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Филиппинская (Кэйпвелл-Дворак латиница)"
#: ../rules/base.xml.in.h:248
-msgid "Extended"
-msgstr "Расширенная"
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Филиппинская (Кэйпвелл-QWERF 2006 байбайинская)"
#: ../rules/base.xml.in.h:249
-msgid "Extended - Winkeys"
-msgstr "Расширенная, клавиши Win"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Филиппинская (Кэйпвелл-QWERF 2006 латиница)"
#: ../rules/base.xml.in.h:250
-msgid "Extended Backslash"
-msgstr "Расширенные функции Backslash"
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Филиппинская (Коулмак байбайинская)"
#: ../rules/base.xml.in.h:251
-msgid "F-letter (F) variant"
-msgstr "Вариант с F"
+msgid "Filipino (Colemak Latin)"
+msgstr "Филиппинская (Коулмак латиница)"
#: ../rules/base.xml.in.h:252
-msgid "FL90"
-msgstr "FL90"
+msgid "Filipino (Dvorak Latin)"
+msgstr "Филиппинская (Дворак латиница)"
#: ../rules/base.xml.in.h:253
-msgid "Faroe Islands"
-msgstr "Острова Фаро"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Филиппинская (QWERTY байбайинская)"
#: ../rules/base.xml.in.h:254
-msgid "Fin"
-msgstr "Fin"
+msgid "Finnish"
+msgstr "Финская"
#: ../rules/base.xml.in.h:255
-msgid "Finland"
-msgstr "Финляндия"
+msgid "Finnish (Mac)"
+msgstr "Финская (Mac)"
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "Финская (классическая)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Финская (классическая, без спец. клавиш (dead keys))"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr "Финская (cеверная cаамская)"
#. This assumes the KP_ abstract symbols are actually useful for some apps
#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:258
+#: ../rules/base.xml.in.h:261
msgid "Four-level key with abstract separators"
msgstr "Четырёх-рядная клавиша с абстрактными разделителями"
-#: ../rules/base.xml.in.h:259
+#: ../rules/base.xml.in.h:262
msgid "Four-level key with comma"
msgstr "Четырёх-рядная клавиша с запятой"
-#: ../rules/base.xml.in.h:260
+#: ../rules/base.xml.in.h:263
msgid "Four-level key with dot"
msgstr "Четырёх-рядная клавиша с точкой"
-#: ../rules/base.xml.in.h:261
+#: ../rules/base.xml.in.h:264
msgid "Four-level key with dot, latin-9 restriction"
msgstr "Четырёх-рядная клавиша с точкой, ограничена latin-9"
-#: ../rules/base.xml.in.h:262
+#: ../rules/base.xml.in.h:265
msgid "Four-level key with momayyez"
msgstr "Четырёх-рядная клавиша с momayyez"
-#: ../rules/base.xml.in.h:263
-msgid "Fra"
-msgstr "Fra"
-
-#: ../rules/base.xml.in.h:264
-msgid "France"
-msgstr "Франция"
-
-#: ../rules/base.xml.in.h:265
-msgid "Français (France Alternative)"
-msgstr "Французская (французская альтернативная)"
-
#: ../rules/base.xml.in.h:266
msgid "French"
msgstr "Французская"
#: ../rules/base.xml.in.h:267
-msgid "French (Macintosh)"
-msgstr "Французская (Macintosh)"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Французская (Бепо, эргономичная, похожая на Дворак)"
#: ../rules/base.xml.in.h:268
-msgid "French (legacy)"
-msgstr "Французская (унаследованная)"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Французская (Бепо, эргономичная, похожая на Дворак, только latin-9)"
#: ../rules/base.xml.in.h:269
-msgid "French Dvorak"
-msgstr "Французская Dvorak"
+msgid "French (Breton)"
+msgstr "Французская (бретонская)"
#: ../rules/base.xml.in.h:270
-msgid "French, Sun dead keys"
-msgstr "Французская, специальные клавиши (dead keys) Sun"
+msgid "French (Canada, Dvorak)"
+msgstr "Французская (Канада, Дворак)"
#: ../rules/base.xml.in.h:271
-msgid "French, eliminate dead keys"
-msgstr "Французская, исключить специальные клавиши (dead keys)"
+msgid "French (Canada, legacy)"
+msgstr "Французская (Канада, унаследованная)"
#: ../rules/base.xml.in.h:272
-msgid "Fro"
-msgstr "Fro"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Французская (Демократическая республика Конго)"
#: ../rules/base.xml.in.h:273
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Ноутбук Fujitsu-Siemens Computers AMILO"
+msgid "French (Dvorak)"
+msgstr "Французская (Дворак)"
#: ../rules/base.xml.in.h:274
-msgid "Fula"
-msgstr "Fula"
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Французская (грузинская AZERTY Tskapo)"
#: ../rules/base.xml.in.h:275
-msgid "GBr"
-msgstr "GBr"
+msgid "French (Guinea)"
+msgstr "Французская (Гвинея)"
#: ../rules/base.xml.in.h:276
-msgid "GILLBT"
-msgstr "GILLBT"
+msgid "French (Mac)"
+msgstr "Французская (Mac)"
#: ../rules/base.xml.in.h:277
-msgid "Ga"
-msgstr "Ga"
+msgid "French (Mali, alternative)"
+msgstr "Французская (Мали, альтернативная)"
#: ../rules/base.xml.in.h:278
-msgid "Generic 101-key PC"
-msgstr "Обычная 101-клавишная"
+msgid "French (Morocco)"
+msgstr "Французская (Марокко)"
#: ../rules/base.xml.in.h:279
-msgid "Generic 102-key (Intl) PC"
-msgstr "Обычная 102-клавишная (межд)"
+msgid "French (Occitan)"
+msgstr "Французская (окситанский язык)"
#: ../rules/base.xml.in.h:280
-msgid "Generic 104-key PC"
-msgstr "Обычная 104-клавишная"
+msgid "French (Sun dead keys)"
+msgstr "Французская (со спец. клавишами (dead keys) Sun)"
#: ../rules/base.xml.in.h:281
-msgid "Generic 105-key (Intl) PC"
-msgstr "Обычная 105-клавишная (межд)"
+msgid "French (Switzerland)"
+msgstr "Французская (Швейцария)"
#: ../rules/base.xml.in.h:282
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "French (Switzerland, Mac)"
+msgstr "Французская (Швейцария, Mac)"
#: ../rules/base.xml.in.h:283
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Французская (Швейцария, спец. клавиши (dead keys) Sun)"
#: ../rules/base.xml.in.h:284
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Французская (Швейцария, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:285
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
+msgid "French (alternative)"
+msgstr "Французская (альтернативная)"
#: ../rules/base.xml.in.h:286
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
+msgid "French (alternative, Sun dead keys)"
+msgstr "Французская (альтернативная, спец. клавиши (dead keys) Sun)"
#: ../rules/base.xml.in.h:287
-msgid "Geo"
-msgstr "Geo"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Французская (альтернативная, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:288
-msgid "Georgia"
-msgstr "Грузия"
+msgid "French (alternative, latin-9 only)"
+msgstr "Французская (альтернативная, только latin-9)"
#: ../rules/base.xml.in.h:289
-msgid "Georgian"
-msgstr "Грузинская"
+msgid "French (eliminate dead keys)"
+msgstr "Французская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:290
-msgid "Georgian AZERTY Tskapo"
-msgstr "Грузинская AZERTY Tskapo"
+msgid "French (legacy alternative)"
+msgstr "Французская (устаревшая альтернативная)"
#: ../rules/base.xml.in.h:291
-msgid "German (Macintosh)"
-msgstr "Немецкая (Macintosh)"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Французская (устаревшая альтернативная с спец. клавишами (dead keys) Sun)"
#: ../rules/base.xml.in.h:292
-msgid "German, Sun dead keys"
-msgstr "Немецкая, специальные клавиши (dead keys) Sun"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Французская (устаревшая альтернативная без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:293
-msgid "German, eliminate dead keys"
-msgstr "Немецкая, исключить специальные клавиши (dead keys)"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Ноутбук Fujitsu-Siemens Computers AMILO"
#: ../rules/base.xml.in.h:294
-msgid "Germany"
-msgstr "Германия"
+msgid "Fula"
+msgstr "Fula"
#: ../rules/base.xml.in.h:295
-msgid "Gha"
-msgstr "Gha"
+msgid "GBr"
+msgstr "GBr"
#: ../rules/base.xml.in.h:296
-msgid "Ghana"
-msgstr "Гана"
+msgid "Ga"
+msgstr "Ga"
#: ../rules/base.xml.in.h:297
-msgid "Gin"
-msgstr "Gin"
+msgid "Generic 101-key PC"
+msgstr "Обычная 101-клавишная"
#: ../rules/base.xml.in.h:298
-msgid "Grc"
-msgstr "Grc"
+msgid "Generic 102-key (Intl) PC"
+msgstr "Обычная 102-клавишная (межд)"
#: ../rules/base.xml.in.h:299
-msgid "Greece"
-msgstr "Греция"
+msgid "Generic 104-key PC"
+msgstr "Обычная 104-клавишная"
#: ../rules/base.xml.in.h:300
-msgid "Guinea"
-msgstr "Гвинея"
+msgid "Generic 105-key (Intl) PC"
+msgstr "Обычная 105-клавишная (межд)"
#: ../rules/base.xml.in.h:301
-msgid "Gujarati"
-msgstr "Гуджарати"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:302
-msgid "Gurmukhi"
-msgstr "Гурмукхи"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
#: ../rules/base.xml.in.h:303
-msgid "Gurmukhi Jhelum"
-msgstr "Гурмукхи Jhelum"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:304
-msgid "Gyration"
-msgstr "Гирашн"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
#: ../rules/base.xml.in.h:305
-msgid "HTC Dream"
-msgstr "HTC Dream"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:306
-msgid "Happy Hacking Keyboard"
-msgstr "Happy Hacking Keyboard"
+msgid "Georgian"
+msgstr "Грузинская"
#: ../rules/base.xml.in.h:307
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Happy Hacking Keyboard для Mac"
+msgid "Georgian (MESS)"
+msgstr "Грузинская (MESS)"
#: ../rules/base.xml.in.h:308
-msgid "Hausa"
-msgstr "Хауза"
+msgid "Georgian (Ossetian)"
+msgstr "Грузинская (осетинская)"
#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internet Keyboard"
+msgid "Georgian (ergonomic)"
+msgstr "Georgian (эргономичная)"
#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 Notebook"
+msgid "German"
+msgstr "Немецкая"
#: ../rules/base.xml.in.h:311
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "German (Austria)"
+msgstr "Немецкая (Австрия)"
#: ../rules/base.xml.in.h:312
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "German (Austria, Mac)"
+msgstr "Немецкая (Австрия, Mac)"
#: ../rules/base.xml.in.h:313
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+msgid "German (Austria, Sun dead keys)"
+msgstr "Немецкая (Австрия, с спец. клавишами (dead keys) Sun)"
#: ../rules/base.xml.in.h:314
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Немецкая (Австрия, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:315
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "German (Dvorak)"
+msgstr "Немецкая (Дворак)"
#: ../rules/base.xml.in.h:316
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "German (Mac)"
+msgstr "Немецкая (Mac)"
#: ../rules/base.xml.in.h:317
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Немецкая (Mac, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:318
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
+msgid "German (Neo 2)"
+msgstr "Немецкая (Neo 2)"
#: ../rules/base.xml.in.h:319
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Немецкая (румынская клавиатура с немецкими буквами)"
#: ../rules/base.xml.in.h:320
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Немецкая (румынская клавиатура с немецкими буквами, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:321
-msgid "Hexadecimal"
-msgstr "Шестнадцатеричная"
+msgid "German (Sun dead keys)"
+msgstr "Немецкая (со спец. клавишами (dead keys) Sun)"
#: ../rules/base.xml.in.h:322
-msgid "Hindi Bolnagri"
-msgstr "Хинди Болнагри"
+msgid "German (Switzerland, Mac)"
+msgstr "Немецкая (Швейцария, Mac)"
#: ../rules/base.xml.in.h:323
-msgid "Hindi Wx"
-msgstr "Хинди Wx"
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Немецкая (Швейцария, с спец. клавишами (dead keys) Sun)"
#: ../rules/base.xml.in.h:324
-msgid "Homophonic"
-msgstr "Омофоническая"
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Немецкая (Швейцария, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:325
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "German (dead acute)"
+msgstr "Немецкая (с dead acute)"
#: ../rules/base.xml.in.h:326
-msgid "Hrv"
-msgstr "Hrv"
+msgid "German (dead grave acute)"
+msgstr "Немецкая (с dead grave acute)"
#: ../rules/base.xml.in.h:327
-msgid "Htc Dream phone"
-msgstr "телефон Htc Dream"
+msgid "German (eliminate dead keys)"
+msgstr "Немецкая (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:328
-msgid "Hun"
-msgstr "Hun"
+msgid "German (lower Sorbian qwertz)"
+msgstr "Немецкая (нижнелужицкий qwertz)"
#: ../rules/base.xml.in.h:329
-msgid "Hungary"
-msgstr "Венгрия"
+msgid "German (lower Sorbian)"
+msgstr "Немецкая (нижнелужицкий)"
#: ../rules/base.xml.in.h:330
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper соответствует клавишам Win"
+msgid "German (qwerty)"
+msgstr "Немецкая (qwerty)"
#: ../rules/base.xml.in.h:331
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
+msgid "Greek"
+msgstr "Греческая"
#: ../rules/base.xml.in.h:332
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "Greek (eliminate dead keys)"
+msgstr "Греческая (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:333
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Greek (extended)"
+msgstr "Греческая (расширенная)"
#: ../rules/base.xml.in.h:334
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "Greek (polytonic)"
+msgstr "Греческая (полифоническая)"
#: ../rules/base.xml.in.h:335
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "Greek (simple)"
+msgstr "Греческая (простая)"
#: ../rules/base.xml.in.h:336
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
+msgid "Gujarati"
+msgstr "Гуджарати"
#: ../rules/base.xml.in.h:337
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "Gyration"
+msgstr "Гирашн"
#: ../rules/base.xml.in.h:338
-msgid "ISO Alternate"
-msgstr "Дополнительная ISO"
+msgid "HTC Dream"
+msgstr "HTC Dream"
#: ../rules/base.xml.in.h:339
-msgid "Iceland"
-msgstr "Исландия"
+msgid "Happy Hacking Keyboard"
+msgstr "Happy Hacking Keyboard"
#: ../rules/base.xml.in.h:340
-msgid "Igbo"
-msgstr "Igbo"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Happy Hacking Keyboard для Mac"
#: ../rules/base.xml.in.h:341
-msgid "Include dead tilde"
-msgstr "Включить \"специальную\" тильду"
+msgid "Hausa"
+msgstr "Хауза"
#: ../rules/base.xml.in.h:342
-msgid "Ind"
-msgstr "Ind"
+msgid "Hebrew"
+msgstr "Иврит"
#: ../rules/base.xml.in.h:343
-msgid "India"
-msgstr "Индия"
+msgid "Hebrew (Phonetic)"
+msgstr "Иврит (фонетическая)"
#: ../rules/base.xml.in.h:344
-msgid "International (AltGr dead keys)"
-msgstr "Международная, AltGr и спец. клавишами (dead keys)"
+msgid "Hebrew (Tiro)"
+msgstr "Иврит (Tiro)"
#: ../rules/base.xml.in.h:345
-msgid "International (with dead keys)"
-msgstr "Международная, со спец. клавишами (dead keys)"
+msgid "Hebrew (lyx)"
+msgstr "Иврит (lyx)"
#: ../rules/base.xml.in.h:346
-msgid "Inuktitut"
-msgstr "Иннуитская"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internet Keyboard"
-#: ../rules/base.xml.in.h:347 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr "Иран"
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
#: ../rules/base.xml.in.h:348
-msgid "Iraq"
-msgstr "Ирак"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:349
-msgid "Ireland"
-msgstr "Ирландия"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:350
-msgid "Irl"
-msgstr "Irl"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:351
-msgid "Irn"
-msgstr "Irn"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:352
-msgid "Irq"
-msgstr "Irq"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:353
-msgid "Isl"
-msgstr "Isl"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:354
-msgid "Isr"
-msgstr "Isr"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:355
-msgid "Israel"
-msgstr "Израиль"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:356
-msgid "Ita"
-msgstr "Ita"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
#: ../rules/base.xml.in.h:357
-msgid "Italy"
-msgstr "Италия"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:358
-msgid "Japan"
-msgstr "Япония"
+msgid "Hexadecimal"
+msgstr "Шестнадцатеричная"
#: ../rules/base.xml.in.h:359
-msgid "Japan (PC-98xx Series)"
-msgstr "Japan (PC-98xx Series)"
+msgid "Hindi (Bolnagri)"
+msgstr "Хинди (Bolnagri)"
#: ../rules/base.xml.in.h:360
-msgid "Japanese keyboard options"
-msgstr "Настройки японской клавиатуры"
+msgid "Hindi (Wx)"
+msgstr "Хинди (Wx)"
#: ../rules/base.xml.in.h:361
-msgid "Jpn"
-msgstr "Jpn"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
#: ../rules/base.xml.in.h:362
-msgid "Kalmyk"
-msgstr "Калмыкская"
+msgid "Htc Dream phone"
+msgstr "телефон Htc Dream"
#: ../rules/base.xml.in.h:363
-msgid "Kana"
-msgstr "Кана"
+msgid "Hungarian"
+msgstr "Венгерская"
#: ../rules/base.xml.in.h:364
-msgid "Kana 86"
-msgstr "Kana 86"
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Венгерская (pc101/qwerty/запятая/спец. клавиши (dead keys))"
#: ../rules/base.xml.in.h:365
-msgid "Kana Lock key is locking"
-msgstr "Кана блокируется клавишей Lock"
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Венгерская (pc101/qwerty/запятая/без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:366
-msgid "Kannada"
-msgstr "Каннада"
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Венгерская (pc101/qwerty/точка/спец. клавиши (dead keys))"
#: ../rules/base.xml.in.h:367
-msgid "Kashubian"
-msgstr "Кашубский"
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Венгерская (pc101/qwerty/точка/без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:368
-msgid "Kaz"
-msgstr "Kaz"
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Венгерская (101/qwertz/запятая/спец. клавиши (dead keys))"
#: ../rules/base.xml.in.h:369
-msgid "Kazakh with Russian"
-msgstr "Казахский с Русским"
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Венгерская (101/qwertz/запятая/без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:370
-msgid "Kazakhstan"
-msgstr "Казахстан"
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Венгерская (101/qwertz/точка/спец. клавиши (dead keys))"
#: ../rules/base.xml.in.h:371
-msgid "Ken"
-msgstr "Ken"
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Венгерская (101/qwertz/точка/без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:372
-msgid "Kenya"
-msgstr "Кения"
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Венгерская (102/qwerty/запятая/спец. клавиши (dead keys))"
#: ../rules/base.xml.in.h:373
-msgid "Key sequence to kill the X server"
-msgstr "Комбинация клавиш для прерывания работы X-сервера"
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Венгерская (102/qwerty/запятая/без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:374
-msgid "Key to choose 3rd level"
-msgstr "Клавиша для выбора 3-го ряда"
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Венгерская (102/qwerty/точка/спец. клавиши (dead keys))"
#: ../rules/base.xml.in.h:375
-msgid "Key to choose 5th level"
-msgstr "Клавиша для выбора 5-го ряда"
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Венгерская (102/qwerty/точка/без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:376
-msgid "Key(s) to change layout"
-msgstr "Клавиша(и) для смены раскладки"
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Венгерская (102/qwertz/запятая/спец. клавиши (dead keys))"
#: ../rules/base.xml.in.h:377
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Венгерская (102/qwertz/запятая/без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:378
-msgid "Kgz"
-msgstr "Kgz"
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Венгерская (102/qwertz/точка/спец. клавиши (dead keys))"
#: ../rules/base.xml.in.h:379
-msgid "Khm"
-msgstr "Khm"
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Венгерская (102/qwertz/точка/без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:380
-msgid "Kikuyu"
-msgstr "Кикуйу"
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Венгерская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:381
-msgid "Kinesis"
-msgstr "Kinesis"
+msgid "Hungarian (qwerty)"
+msgstr "Венгерская (qwerty)"
#: ../rules/base.xml.in.h:382
-msgid "Komi"
-msgstr "Коми"
+msgid "Hungarian (standard)"
+msgstr "Венгерская (стандартная)"
#: ../rules/base.xml.in.h:383
-msgid "Kor"
-msgstr "Kor"
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper соответствует клавишам Win"
#: ../rules/base.xml.in.h:384
-msgid "Korea, Republic of"
-msgstr "Республика Корея"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:385
-msgid "Ktunaxa"
-msgstr "Кутенай"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:386
-msgid "Kurdish, (F)"
-msgstr "Курдская, (F)"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:387
-msgid "Kurdish, Arabic-Latin"
-msgstr "Курдская, Арабско-латинская"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:388
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Курдская, Латиница Alt-Q"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
#: ../rules/base.xml.in.h:389
-msgid "Kurdish, Latin Q"
-msgstr "Курдская, Латиница Q"
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
#: ../rules/base.xml.in.h:390
-msgid "Kyrgyzstan"
-msgstr "Киргизия"
+msgid "Icelandic"
+msgstr "Исландская"
#: ../rules/base.xml.in.h:391
-msgid "LEKP"
-msgstr "LEKP"
+msgid "Icelandic (Dvorak)"
+msgstr "Исландская (Дворак)"
#: ../rules/base.xml.in.h:392
-msgid "LEKPa"
-msgstr "LEKPa"
+msgid "Icelandic (Mac)"
+msgstr "Исландская (Mac)"
#: ../rules/base.xml.in.h:393
-msgid "Lao"
-msgstr "Lao"
+msgid "Icelandic (Sun dead keys)"
+msgstr "Исландская (спец. клавиши (dead keys) Sun)"
#: ../rules/base.xml.in.h:394
-msgid "Laos"
-msgstr "Лаос"
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Исландская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:395
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Клавиатура ноутбука Compaq (например, Armada)"
+msgid "Igbo"
+msgstr "Игбо"
#: ../rules/base.xml.in.h:396
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "«Интернет-клавиатура» ноутбука Compaq (например, Presario)"
+msgid "Indian"
+msgstr "Индийская"
#: ../rules/base.xml.in.h:397
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Ноутбук eMachines из серии m68xx"
+msgid "Inuktitut"
+msgstr "Иннуитская"
#: ../rules/base.xml.in.h:398
-msgid "Latin"
-msgstr "Латинская"
+msgid "Iraqi"
+msgstr "Иракская"
#: ../rules/base.xml.in.h:399
-msgid "Latin American"
-msgstr "Латиноамериканская"
+msgid "Irish"
+msgstr "Ирландская"
#: ../rules/base.xml.in.h:400
-msgid "Latin Unicode"
-msgstr "Латинская Юникодная"
+msgid "Irish (CloGaelach)"
+msgstr "Ирландская (CloGaelach)"
#: ../rules/base.xml.in.h:401
-msgid "Latin Unicode qwerty"
-msgstr "Латинская Юникодная qwerty"
+msgid "Irish (Ogham IS434)"
+msgstr "Ирландская (Огхам IS434)"
#: ../rules/base.xml.in.h:402
-msgid "Latin qwerty"
-msgstr "Латинская qwerty"
+msgid "Irish (Ogham)"
+msgstr "Ирландская (Огхам)"
#: ../rules/base.xml.in.h:403
-msgid "Latin unicode"
-msgstr "Латинская юникодная"
+msgid "Irish (UnicodeExpert)"
+msgstr "Ирландская (UnicodeExpert)"
#: ../rules/base.xml.in.h:404
-msgid "Latin unicode qwerty"
-msgstr "Латинская юникодная qwerty"
+msgid "Italian"
+msgstr "Итальянская"
#: ../rules/base.xml.in.h:405
-msgid "Latin with guillemets"
-msgstr "Латинская с кавычками ёлочками"
+msgid "Italian (Georgian)"
+msgstr "Итальянская (грузинская)"
#: ../rules/base.xml.in.h:406
-msgid "Latvia"
-msgstr "Латвия"
+msgid "Italian (Mac)"
+msgstr "Итальянская (Mac)"
#: ../rules/base.xml.in.h:407
-msgid "Layout toggle on multiply/divide key"
-msgstr "Переключение раскладки по клавише умножения/деления"
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Итальянская (клавиатура США с итальянскими буквами)"
#: ../rules/base.xml.in.h:408
-msgid "Left Alt"
-msgstr "Левая клавиша Alt"
+msgid "Italian (eliminate dead keys)"
+msgstr "Итальянская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:409
-msgid "Left Alt (while pressed)"
-msgstr "Левая клавиша Alt (пока нажата)"
+msgid "Japanese"
+msgstr "Японская"
#: ../rules/base.xml.in.h:410
-msgid "Left Alt is swapped with Left Win"
-msgstr "Левая клавиша Alt поменяна местами с левой клавишей Win"
+msgid "Japanese (Kana 86)"
+msgstr "Японская (Кана 86)"
#: ../rules/base.xml.in.h:411
-msgid "Left Ctrl"
-msgstr "Левая клавиша Ctrl"
+msgid "Japanese (Kana)"
+msgstr "Японская (Кана)"
#: ../rules/base.xml.in.h:412
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Левый Ctrl (на первую раскладку), Правый Ctrl (на последнюю раскладку)"
+msgid "Japanese (Mac)"
+msgstr "Японская (Mac)"
#: ../rules/base.xml.in.h:413
-msgid "Left Ctrl+Left Shift"
-msgstr "Левый Ctrl+Левый Shift"
+msgid "Japanese (OADG 109A)"
+msgstr "Японская (OADG 109A)"
#: ../rules/base.xml.in.h:414
-msgid "Left Shift"
-msgstr "Левая клавиша Shift"
+msgid "Japanese (PC-98xx Series)"
+msgstr "Японская (PC-98xx Series)"
#: ../rules/base.xml.in.h:415
-msgid "Left Win"
-msgstr "Левая клавиша Win"
+msgid "Japanese keyboard options"
+msgstr "Настройки японской клавиатуры"
#: ../rules/base.xml.in.h:416
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Левая Win (на первую раскладку), Правая Win/Menu (на последнюю раскладку)"
+msgid "Kana Lock key is locking"
+msgstr "Кана блокируется клавишей Lock"
#: ../rules/base.xml.in.h:417
-msgid "Left Win (while pressed)"
-msgstr "Левая клавиша Win (пока нажата)"
+msgid "Kannada"
+msgstr "Каннада"
#: ../rules/base.xml.in.h:418
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "По левой клавише Win выбирается 5-й ряд, блокирует, блокирует при нажатии вместе с другим выборщиком-5-го-ряда"
+msgid "Kazakh"
+msgstr "Казахская"
#: ../rules/base.xml.in.h:419
-msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "По левой клавише Win выбирается 5-й ряд, блокирует, блокирует при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
+msgid "Kazakh (with Russian)"
+msgstr "Казахская (с русским)"
#: ../rules/base.xml.in.h:420
-msgid "Left hand"
-msgstr "Левая рука"
+msgid "Key sequence to kill the X server"
+msgstr "Комбинация клавиш для прерывания работы X-сервера"
#: ../rules/base.xml.in.h:421
-msgid "Left handed Dvorak"
-msgstr "Дворак под левую руку"
+msgid "Key to choose 3rd level"
+msgstr "Клавиша для выбора 3-го ряда"
#: ../rules/base.xml.in.h:422
-msgid "Legacy"
-msgstr "Legacy"
+msgid "Key to choose 5th level"
+msgstr "Клавиша для выбора 5-го ряда"
#: ../rules/base.xml.in.h:423
-msgid "Legacy Wang 724"
-msgstr "Старая Wang 724"
+msgid "Key(s) to change layout"
+msgstr "Клавиша(и) для смены раскладки"
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:425
-msgid "Legacy key with comma"
-msgstr "Клавиша Legacy с запятой"
+msgid "Khmer (Cambodian)"
+msgstr "Кхмерская (камбоджийская)"
#: ../rules/base.xml.in.h:426
-msgid "Legacy key with dot"
-msgstr "Клавиша Legacy с точкой"
+msgid "Kikuyu"
+msgstr "Кикуйу"
#: ../rules/base.xml.in.h:427
-msgid "Lithuania"
-msgstr "Литва"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:428
-msgid "Lka"
-msgstr "Lka"
+msgid "Korean"
+msgstr "Корейская"
#: ../rules/base.xml.in.h:429
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access Keyboard"
+msgid "Korean (101/104 key compatible)"
+msgstr "Корейская (совместимая c 101/104 кнопочной)"
#: ../rules/base.xml.in.h:430
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Курдская (Иран, арабо-латинская)"
#: ../rules/base.xml.in.h:431
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (альтернативный вариант)"
+msgid "Kurdish (Iran, F)"
+msgstr "Курдская (Иран, F)"
#: ../rules/base.xml.in.h:432
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Курдская (Иран, латинская Q)"
#: ../rules/base.xml.in.h:433
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Курдская (Иран, латинская alt-Q)"
#: ../rules/base.xml.in.h:434
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Курдская (Ирак, арабо-латинская)"
#: ../rules/base.xml.in.h:435
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
+msgid "Kurdish (Iraq, F)"
+msgstr "Курдская (Ирак, F)"
#: ../rules/base.xml.in.h:436
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (альтернативный вариант 2)"
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Курдская (Ирак, латинская alt-Q)"
#: ../rules/base.xml.in.h:437
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Курдская (Ирак, латинская Q)"
#: ../rules/base.xml.in.h:438
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
+msgid "Kurdish (Syria, F)"
+msgstr "Курдская (Сирия, F)"
#: ../rules/base.xml.in.h:439
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Дополнительные клавиши Logitech G15 с помощью службы G15"
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Курдская (Сирия, латинская Alt-Q)"
#: ../rules/base.xml.in.h:440
-msgid "Logitech Generic Keyboard"
-msgstr "Logitech Generic Keyboard"
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Курдская (Сирия, латинская Q)"
#: ../rules/base.xml.in.h:441
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech Internet 350 Keyboard"
+msgid "Kurdish (Turkey, F)"
+msgstr "Курдская (Турция, F)"
#: ../rules/base.xml.in.h:442
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech Internet Keyboard"
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Курдская (Турция, латинская Alt-Q)"
#: ../rules/base.xml.in.h:443
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech Internet Navigator Keyboard"
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Курдская (Турция, латинская Q)"
#: ../rules/base.xml.in.h:444
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite Keyboard"
+msgid "Kutenai"
+msgstr "Кутенайская"
#: ../rules/base.xml.in.h:445
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgid "Kyrgyz"
+msgstr "Киргизская"
#: ../rules/base.xml.in.h:446
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X Keyboard"
+msgid "Kyrgyz (phonetic)"
+msgstr "Киргизская (фонетическая)"
#: ../rules/base.xml.in.h:447
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
+msgid "Lao"
+msgstr "Лаосская"
#: ../rules/base.xml.in.h:448
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo Keyboard"
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Лаосская (стандартная раскладка, предложенная STEA)"
#: ../rules/base.xml.in.h:449
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Клавиатура ноутбука Compaq (например, Armada)"
#: ../rules/base.xml.in.h:450
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless Keyboard (модель Y-RB6)"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "«Интернет-клавиатура» ноутбука Compaq (например, Presario)"
#: ../rules/base.xml.in.h:451
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Ноутбук eMachines из серии m68xx"
#: ../rules/base.xml.in.h:452
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgid "Latvian"
+msgstr "Латышская"
#: ../rules/base.xml.in.h:453
-msgid "Lower Sorbian"
-msgstr "Нижнелужицкий"
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Латышская (вариант с апострофом ')"
#: ../rules/base.xml.in.h:454
-msgid "Lower Sorbian (qwertz)"
-msgstr "Нижнелужицкий (qwertz)"
+msgid "Latvian (F variant)"
+msgstr "Латышская (вариант с F)"
#: ../rules/base.xml.in.h:455
-msgid "Ltu"
-msgstr "Ltu"
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Латышская (вариант с тильдой ~)"
#: ../rules/base.xml.in.h:456
-msgid "Lva"
-msgstr "Lva"
+msgid "Left Alt"
+msgstr "Левая клавиша Alt"
#: ../rules/base.xml.in.h:457
-msgid "MESS"
-msgstr "MESS"
+msgid "Left Alt (while pressed)"
+msgstr "Левая клавиша Alt (пока нажата)"
#: ../rules/base.xml.in.h:458
-msgid "MNE"
-msgstr "MNE"
+msgid "Left Alt is swapped with Left Win"
+msgstr "Левая клавиша Alt поменяна местами с левой клавишей Win"
#: ../rules/base.xml.in.h:459
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Left Ctrl"
+msgstr "Левая клавиша Ctrl"
#: ../rules/base.xml.in.h:460
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (межд)"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Левая Ctrl (на первую раскладку), Правая Ctrl (на последнюю раскладку)"
#: ../rules/base.xml.in.h:461
-msgid "Macedonia"
-msgstr "Македония"
+msgid "Left Ctrl+Left Shift"
+msgstr "Левая Ctrl+Левая Shift"
#: ../rules/base.xml.in.h:462
-msgid "Macintosh"
-msgstr "Macintosh"
+msgid "Left Shift"
+msgstr "Левая клавиша Shift"
#: ../rules/base.xml.in.h:463
-msgid "Macintosh (International)"
-msgstr "Macintosh (международная)"
+msgid "Left Win"
+msgstr "Левая клавиша Win"
#: ../rules/base.xml.in.h:464
-msgid "Macintosh Old"
-msgstr "Старый Macintosh"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Левая Win (на первую раскладку), Правая Win/Menu (на последнюю раскладку)"
#: ../rules/base.xml.in.h:465
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, специальные клавиши (dead keys) Sun"
+msgid "Left Win (while pressed)"
+msgstr "Левая клавиша Win (пока нажата)"
#: ../rules/base.xml.in.h:466
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, исключить специальные клавиши (dead keys)"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "По левой клавише Win выбирается 5-й ряд, блокирует, блокирует при нажатии вместе с другим выборщиком-5-го-ряда"
#: ../rules/base.xml.in.h:467
-msgid "Make Caps Lock an additional Backspace"
-msgstr "Использовать Caps Lock как дополнительную клавишу Backspace"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "По левой клавише Win выбирается 5-й ряд, блокирует, блокирует при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
#: ../rules/base.xml.in.h:468
-msgid "Make Caps Lock an additional Ctrl"
-msgstr "Использовать Caps Lock как дополнительную клавишу Ctrl"
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Левая-Ctrl+Левая-Win (на первую раскладку), Правая-Ctrl+Menu (на вторую раскладку)"
#: ../rules/base.xml.in.h:469
-msgid "Make Caps Lock an additional ESC"
-msgstr "Использовать Caps Lock как дополнительную клавишу ESC"
+msgid "Legacy"
+msgstr "Legacy"
#: ../rules/base.xml.in.h:470
-msgid "Make Caps Lock an additional Hyper"
-msgstr "Использовать Caps Lock как дополнительную клавишу Hyper"
-
-#: ../rules/base.xml.in.h:471
-msgid "Make Caps Lock an additional Num Lock"
-msgstr "Использовать Caps Lock как дополнительную клавишу Num Lock"
+msgid "Legacy Wang 724"
+msgstr "Старая Wang 724"
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:472
-msgid "Make Caps Lock an additional Super"
-msgstr "Использовать Caps Lock как дополнительную клавишу Super"
+msgid "Legacy key with comma"
+msgstr "Клавиша Legacy с запятой"
#: ../rules/base.xml.in.h:473
-msgid "Malayalam"
-msgstr "Малайaлам"
+msgid "Legacy key with dot"
+msgstr "Клавиша Legacy с точкой"
#: ../rules/base.xml.in.h:474
-msgid "Malayalam Lalitha"
-msgstr "Малайaлам (Lalitha)"
+msgid "Lithuanian"
+msgstr "Литовская"
#: ../rules/base.xml.in.h:475
-msgid "Maldives"
-msgstr "Мальдивы"
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Литовская (IBM LST 1205-92)"
#: ../rules/base.xml.in.h:476
-msgid "Mali"
-msgstr "Мали"
+msgid "Lithuanian (LEKP)"
+msgstr "Литовская (LEKP)"
#: ../rules/base.xml.in.h:477
-msgid "Malta"
-msgstr "Мальта"
+msgid "Lithuanian (LEKPa)"
+msgstr "Литовская (LEKPa)"
#: ../rules/base.xml.in.h:478
-msgid "Maltese keyboard with US layout"
-msgstr "Мальтийская клавиатура с раскладкой US"
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Литовская (клавиатура США с литовскими буквами)"
#: ../rules/base.xml.in.h:479
-msgid "Mao"
-msgstr "Mao"
+msgid "Lithuanian (standard)"
+msgstr "Литовская (стандартная)"
#: ../rules/base.xml.in.h:480
-msgid "Maori"
-msgstr "Маори"
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
#: ../rules/base.xml.in.h:481
-msgid "Mari"
-msgstr "Mari"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
#: ../rules/base.xml.in.h:482
-msgid "Mdv"
-msgstr "Mdv"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (альтернативный вариант)"
#: ../rules/base.xml.in.h:483
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
#: ../rules/base.xml.in.h:484
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access Keyboard"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:485
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
#: ../rules/base.xml.in.h:486
-msgid "Menu"
-msgstr "Menu"
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
#: ../rules/base.xml.in.h:487
-msgid "Meta is mapped to Left Win"
-msgstr "Meta соответствует левой клавише Win"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (альтернативный вариант 2)"
#: ../rules/base.xml.in.h:488
-msgid "Meta is mapped to Win keys"
-msgstr "Meta соответствует клавишам Win"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
#: ../rules/base.xml.in.h:489
-msgid "Meta on Left Ctrl"
-msgstr "Meta на левой клавише Ctrl"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
#: ../rules/base.xml.in.h:490
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Дополнительные клавиши Logitech G15 с помощью службы G15"
#: ../rules/base.xml.in.h:491
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft Internet Keyboard"
+msgid "Logitech Generic Keyboard"
+msgstr "Logitech Generic Keyboard"
#: ../rules/base.xml.in.h:492
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, шведская"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech Internet 350 Keyboard"
#: ../rules/base.xml.in.h:493
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internet Keyboard"
#: ../rules/base.xml.in.h:494
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural Keyboard Elite"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator Keyboard"
#: ../rules/base.xml.in.h:495
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite Keyboard"
#: ../rules/base.xml.in.h:496
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural Keyboard Pro OEM"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
#: ../rules/base.xml.in.h:497
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
#: ../rules/base.xml.in.h:498
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge Keyboard"
#: ../rules/base.xml.in.h:499
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft Office Keyboard"
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo Keyboard"
#: ../rules/base.xml.in.h:500
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:501
-msgid "Miscellaneous compatibility options"
-msgstr "Разные параметры совместимости"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (модель Y-RB6)"
#: ../rules/base.xml.in.h:502
-msgid "Mkd"
-msgstr "Mkd"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
#: ../rules/base.xml.in.h:503
-msgid "Mli"
-msgstr "Mli"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
#: ../rules/base.xml.in.h:504
-msgid "Mlt"
-msgstr "Mlt"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:505
-msgid "Mmr"
-msgstr "Mmr"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (межд)"
#: ../rules/base.xml.in.h:506
-msgid "Mng"
-msgstr "Mng"
+msgid "Macedonian"
+msgstr "Македонская"
#: ../rules/base.xml.in.h:507
-msgid "Mongolia"
-msgstr "Монголия"
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Македонская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:508
-msgid "Montenegro"
-msgstr "Черногория"
+msgid "Macintosh"
+msgstr "Macintosh"
#: ../rules/base.xml.in.h:509
-msgid "Morocco"
-msgstr "Марокко"
+msgid "Macintosh Old"
+msgstr "Старый Macintosh"
#: ../rules/base.xml.in.h:510
-msgid "Multilingual"
-msgstr "Многоязычная"
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Использовать Caps Lock как дополнительную клавишу Backspace"
#: ../rules/base.xml.in.h:511
-msgid "Multilingual, first part"
-msgstr "Многоязычная, первая часть"
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Использовать Caps Lock как дополнительную клавишу Control, но сохранить символ клавиши Caps_Lock"
#: ../rules/base.xml.in.h:512
-msgid "Multilingual, second part"
-msgstr "Многоязычная, вторая часть"
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Использовать Caps Lock как дополнительную клавишу Ctrl"
#: ../rules/base.xml.in.h:513
-msgid "Myanmar"
-msgstr "Мьянма"
+msgid "Make Caps Lock an additional ESC"
+msgstr "Использовать Caps Lock как дополнительную клавишу ESC"
#: ../rules/base.xml.in.h:514
-msgid "NICOLA-F style Backspace"
-msgstr "Backspace в стиле NICOLA-F"
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Использовать Caps Lock как дополнительную клавишу Hyper"
#: ../rules/base.xml.in.h:515
-msgid "NLA"
-msgstr "NLA"
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Использовать Caps Lock как дополнительную клавишу Num Lock"
#: ../rules/base.xml.in.h:516
-msgid "Nativo"
-msgstr "Nativo"
+msgid "Make Caps Lock an additional Super"
+msgstr "Использовать Caps Lock как дополнительную клавишу Super"
#: ../rules/base.xml.in.h:517
-msgid "Nativo for Esperanto"
-msgstr "Nativo для эсперанто"
+msgid "Malayalam"
+msgstr "Малайaлам"
#: ../rules/base.xml.in.h:518
-msgid "Nativo for USA keyboards"
-msgstr "Nativo для клавиатур в США"
+msgid "Malayalam (Lalitha)"
+msgstr "Малайaламская (лалита)"
#: ../rules/base.xml.in.h:519
-msgid "Neo 2"
-msgstr "Neo 2"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Малайaламская (улучшенный Inscript со символом рупии)"
#: ../rules/base.xml.in.h:520
-msgid "Nepal"
-msgstr "Непал"
+msgid "Maltese"
+msgstr "Мальтийская"
#: ../rules/base.xml.in.h:521
-msgid "Netherlands"
-msgstr "Нидерланды"
+msgid "Maltese (with US layout)"
+msgstr "Мальтийская (с раскладкой США)"
#: ../rules/base.xml.in.h:522
-msgid "New phonetic"
-msgstr "Новая фонетическая"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:523
-msgid "Nga"
-msgstr "Nga"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access Keyboard"
#: ../rules/base.xml.in.h:524
-msgid "Nigeria"
-msgstr "Нигерия"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:525
-msgid "Nld"
-msgstr "Nld"
+msgid "Menu"
+msgstr "Menu"
#: ../rules/base.xml.in.h:526
-msgid "Non-breakable space character at fourth level"
-msgstr "Символ неразрывного пробела в четвёртом ряду"
+msgid "Meta is mapped to Left Win"
+msgstr "Meta соответствует левой клавише Win"
#: ../rules/base.xml.in.h:527
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Символ неразрывного пробела в четвёртом ряду, символ тонкого неразрывного пробела в шестом ряду"
+msgid "Meta is mapped to Win keys"
+msgstr "Meta соответствует клавишам Win"
#: ../rules/base.xml.in.h:528
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Символ неразрывного пробела в четвёртом ряду, символ тонкого неразрывного пробела в шестом ряду (с помощью Ctrl+Shift)"
+msgid "Meta on Left Ctrl"
+msgstr "Meta на левой клавише Ctrl"
#: ../rules/base.xml.in.h:529
-msgid "Non-breakable space character at second level"
-msgstr "Символ неразрывного пробела во втором ряду"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
#: ../rules/base.xml.in.h:530
-msgid "Non-breakable space character at third level"
-msgstr "Символ неразрывного пробела в третьем ряду"
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
#: ../rules/base.xml.in.h:531
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Символ неразрывного пробела в третьем ряду, ничего на четвёртом"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, шведская"
#: ../rules/base.xml.in.h:532
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Символ неразрывного пробела в третьем ряду, символ тонкого неразрывного пробела в четвёртом ряду"
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:533
-msgid "Nor"
-msgstr "Nor"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
#: ../rules/base.xml.in.h:534
-msgid "Northern Saami"
-msgstr "Северная Саамская"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:535
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Северная Саамская, исключая специальные клавиши (dead keys)"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural Keyboard Pro OEM"
#: ../rules/base.xml.in.h:536
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:537
-msgid "Norway"
-msgstr "Норвегия"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
#: ../rules/base.xml.in.h:538
-msgid "Npl"
-msgstr "Npl"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
#: ../rules/base.xml.in.h:539
-msgid "Num Lock"
-msgstr "Num Lock"
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft Office Keyboard"
#: ../rules/base.xml.in.h:540
-msgid "Numeric keypad delete key behaviour"
-msgstr "Функция клавиши Delete на цифровой клавиатуре"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
#: ../rules/base.xml.in.h:541
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Клавиши цифровой клавиатуры работают как в Mac"
+msgid "Miscellaneous compatibility options"
+msgstr "Разные параметры совместимости"
#: ../rules/base.xml.in.h:542
-msgid "Numeric keypad layout selection"
-msgstr "Выбор раскладки цифровой клавиатуры"
+msgid "Mongolian"
+msgstr "Монгольская"
#: ../rules/base.xml.in.h:543
-msgid "OADG 109A"
-msgstr "OADG 109A"
+msgid "Montenegrin"
+msgstr "Черногорская"
#: ../rules/base.xml.in.h:544
-msgid "OLPC"
-msgstr "OLPC"
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Черногорская (кириллица с кавычками ёлочками)"
#: ../rules/base.xml.in.h:545
-msgid "OLPC Dari"
-msgstr "OLPC Dari"
+msgid "Montenegrin (Cyrillic)"
+msgstr "Черногорская (кириллица)"
#: ../rules/base.xml.in.h:546
-msgid "OLPC Pashto"
-msgstr "OLPC Pashto"
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Черногорская (кириллица, З и Ж переставлены местами)"
#: ../rules/base.xml.in.h:547
-msgid "OLPC Southern Uzbek"
-msgstr "Южно-узбекский OLPC"
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Черногорская (латинская qwerty)"
#: ../rules/base.xml.in.h:548
-msgid "Occitan"
-msgstr "Окситанский"
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Черногорская (латинская юникодная qwerty)"
#: ../rules/base.xml.in.h:549
-msgid "Ogham"
-msgstr "Огхам"
+msgid "Montenegrin (Latin unicode)"
+msgstr "Черногорская (латинская юникодная)"
#: ../rules/base.xml.in.h:550
-msgid "Ogham IS434"
-msgstr "Огхам IS434"
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Черногорская (латинская с кавычками ёлочками)"
#: ../rules/base.xml.in.h:551
-msgid "Oriya"
-msgstr "Орийя"
+msgid "Māori"
+msgstr "Маорийская"
#: ../rules/base.xml.in.h:552
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/Internet keyboard"
+msgid "NICOLA-F style Backspace"
+msgstr "Backspace в стиле NICOLA-F"
#: ../rules/base.xml.in.h:553
-msgid "Ossetian"
-msgstr "Осетинская"
+msgid "Nepali"
+msgstr "Непальская"
#: ../rules/base.xml.in.h:554
-msgid "Ossetian, Winkeys"
-msgstr "Осетинская, с клавишами Win"
+msgid "Non-breakable space character at fourth level"
+msgstr "Символ неразрывного пробела в четвёртом ряду"
#: ../rules/base.xml.in.h:555
-msgid "Ossetian, legacy"
-msgstr "Осетинская, устаревшая"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Символ неразрывного пробела в четвёртом ряду, символ тонкого неразрывного пробела в шестом ряду"
#: ../rules/base.xml.in.h:556
-msgid "PC-98xx Series"
-msgstr "PC-98xx Series"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Символ неразрывного пробела в четвёртом ряду, символ тонкого неразрывного пробела в шестом ряду (с помощью Ctrl+Shift)"
#: ../rules/base.xml.in.h:557
-msgid "Pak"
-msgstr "Pak"
+msgid "Non-breakable space character at second level"
+msgstr "Символ неразрывного пробела во втором ряду"
#: ../rules/base.xml.in.h:558
-msgid "Pakistan"
-msgstr "Пакистан"
+msgid "Non-breakable space character at third level"
+msgstr "Символ неразрывного пробела в третьем ряду"
#: ../rules/base.xml.in.h:559
-msgid "Pannonian Rusyn Homophonic"
-msgstr "Паннонская русинская омофоническая"
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Символ неразрывного пробела в третьем ряду, ничего на четвёртом"
#: ../rules/base.xml.in.h:560
-msgid "Pashto"
-msgstr "Пуштунская"
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Символ неразрывного пробела в третьем ряду, символ тонкого неразрывного пробела в четвёртом ряду"
#: ../rules/base.xml.in.h:561
-msgid "Pattachote"
-msgstr "Паттачот"
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:562
-msgid "Pause"
-msgstr "Pause"
+msgid "Norwegian"
+msgstr "Норвежская"
#: ../rules/base.xml.in.h:563
-msgid "Persian, with Persian Keypad"
-msgstr "Персидская, с персидской доп. панелью"
+msgid "Norwegian (Dvorak)"
+msgstr "Норвежская (Дворак)"
#: ../rules/base.xml.in.h:564
-msgid "Phi"
-msgstr "Phi"
+msgid "Norwegian (Mac)"
+msgstr "Норвежская (Mac)"
#: ../rules/base.xml.in.h:565
-msgid "Philippines"
-msgstr "Филиппины"
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Норвежская (Mac, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:566
-msgid "Phonetic"
-msgstr "Фонетическая"
+msgid "Norwegian (Northern Saami"
+msgstr "Норвежская (Северная Саамская)"
#: ../rules/base.xml.in.h:567
-msgid "Phonetic Winkeys"
-msgstr "Фонетическая с клавишами Win"
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Норвежская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:568
-msgid "Pol"
-msgstr "Pol"
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Норвежская (Северная Саамская, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:569
-msgid "Poland"
-msgstr "Польша"
+msgid "Num Lock"
+msgstr "Num Lock"
#: ../rules/base.xml.in.h:570
-msgid "Polytonic"
-msgstr "Полифоническая"
+msgid "Numeric keypad delete key behaviour"
+msgstr "Функция клавиши Delete на цифровой клавиатуре"
#: ../rules/base.xml.in.h:571
-msgid "Portugal"
-msgstr "Португалия"
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Клавиши цифровой клавиатуры работают как в Mac"
#: ../rules/base.xml.in.h:572
-msgid "Probhat"
-msgstr "Пробат"
+msgid "Numeric keypad layout selection"
+msgstr "Выбор раскладки цифровой клавиатуры"
#: ../rules/base.xml.in.h:573
-msgid "Programmer Dvorak"
-msgstr "Дворак для программистов"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:574
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Oriya"
+msgstr "Орийя"
#: ../rules/base.xml.in.h:575
-msgid "Prt"
-msgstr "Prt"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/Internet keyboard"
#: ../rules/base.xml.in.h:576
-msgid "PrtSc"
-msgstr "PrtSc"
+msgid "PC-98xx Series"
+msgstr "PC-98xx Series"
#: ../rules/base.xml.in.h:577
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Pashto"
+msgstr "Пуштунская"
#: ../rules/base.xml.in.h:578
-msgid "QWERTY (Baybayin)"
-msgstr "QWERTY (байбайин)"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Пуштунская (Афганистан, OLPC)"
#: ../rules/base.xml.in.h:579
-msgid "Right Alt"
-msgstr "Правая клавиша Alt"
+msgid "Pause"
+msgstr "Pause"
#: ../rules/base.xml.in.h:580
-msgid "Right Alt (while pressed)"
-msgstr "Правая клавиша Alt (пока нажата)"
+msgid "Persian"
+msgstr "Персидская"
#: ../rules/base.xml.in.h:581
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "По правой клавише Alt выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Персидская (Афганистан, Dari OLPC)"
#: ../rules/base.xml.in.h:582
-msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "По правой клавише Alt выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
+msgid "Persian (with Persian Keypad)"
+msgstr "Персидская (с персидской доп. панелью)"
#: ../rules/base.xml.in.h:583
-msgid "Right Alt key never chooses 3rd level"
-msgstr "По правой клавише Alt никогда не выбирается третий ряд"
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Филиппинская (Дворак, байбайин)"
#: ../rules/base.xml.in.h:584
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Правая клавиша Alt, Shift и правый Alt вместе работают как Multi_Key"
+msgid "Polish"
+msgstr "Польская"
#: ../rules/base.xml.in.h:585
-msgid "Right Ctrl"
-msgstr "Правая клавиша Ctrl"
+msgid "Polish (Dvorak)"
+msgstr "Польская (Дворак)"
#: ../rules/base.xml.in.h:586
-msgid "Right Ctrl (while pressed)"
-msgstr "Правая клавиша Ctrl (пока нажата)"
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Польская (Дворак, польские кавычки на клавише 1)"
#: ../rules/base.xml.in.h:587
-msgid "Right Ctrl as Right Alt"
-msgstr "Правая клавиша Ctrl работает как правая клавиша Alt"
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Польская (Дворак, польские кавычки на клавишах с кавычками)"
#: ../rules/base.xml.in.h:588
-msgid "Right Ctrl+Right Shift"
-msgstr "Правый Ctrl+Правый Shift"
+msgid "Polish (Kashubian)"
+msgstr "Польская (кашубская)"
#: ../rules/base.xml.in.h:589
-msgid "Right Shift"
-msgstr "Правая клавиша Shift"
+msgid "Polish (programmer Dvorak)"
+msgstr "Польская (Дворак для программистов)"
#: ../rules/base.xml.in.h:590
-msgid "Right Win"
-msgstr "Правая клавиша Win"
+msgid "Polish (qwertz)"
+msgstr "Польская (qwertz)"
#: ../rules/base.xml.in.h:591
-msgid "Right Win (while pressed)"
-msgstr "Правая клавиша Win (пока нажата)"
+msgid "Portuguese"
+msgstr "Португальская"
#: ../rules/base.xml.in.h:592
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
-msgstr "По правой клавише Win выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
+msgid "Portuguese (Brazil)"
+msgstr "Португальская (Бразилия)"
#: ../rules/base.xml.in.h:593
-msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
-msgstr "По правой клавише Win выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Португальская (Бразилия, Дворак)"
#: ../rules/base.xml.in.h:594
-msgid "Right hand"
-msgstr "Правая рука"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Португальская (Бразилия, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:595
-msgid "Right handed Dvorak"
-msgstr "Дворак под правую руку"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Португальская (Бразилия, nativo для эсперанто)"
#: ../rules/base.xml.in.h:596
-msgid "Romania"
-msgstr "Румыния"
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Португальская (Бразилия, nativo для клавиатур США)"
#: ../rules/base.xml.in.h:597
-msgid "Romanian keyboard with German letters"
-msgstr "Румынская клавиатура с немецкими буквами"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Португальская (Бразилия, nativo)"
#: ../rules/base.xml.in.h:598
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Румынская клавиатура с немецкими буквами, исключить специальные клавиши (dead keys)"
+msgid "Portuguese (Mac)"
+msgstr "Португальская (Mac)"
#: ../rules/base.xml.in.h:599
-msgid "Rou"
-msgstr "Rou"
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Португальская (Mac, спец. клавиши (dead keys) Sun)"
#: ../rules/base.xml.in.h:600
-msgid "Rupee on 4"
-msgstr "Знак рупии на клавише 4"
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Португальская (Mac, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:601
-msgid "Rus"
-msgstr "Rus"
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Португальская (Nativo для эсперанто)"
#: ../rules/base.xml.in.h:602
-msgid "Russia"
-msgstr "Россия"
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Португальская (Nativo для клавиатур США)"
#: ../rules/base.xml.in.h:603
-msgid "Russian"
-msgstr "Русская"
+msgid "Portuguese (Nativo)"
+msgstr "Португальская (Nativo)"
#: ../rules/base.xml.in.h:604
-msgid "Russian phonetic"
-msgstr "Русская фонетическая"
+msgid "Portuguese (Sun dead keys)"
+msgstr "Португальская (спец. клавиши (dead keys) Sun)"
#: ../rules/base.xml.in.h:605
-msgid "Russian phonetic Dvorak"
-msgstr "Русский фонетический Дворак"
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Португальская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:606
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Русская фонетическая, исключить специальные клавиши (dead keys)"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:607
-msgid "Russian with Kazakh"
-msgstr "Русская с казахской"
+msgid "PrtSc"
+msgstr "PrtSc"
#: ../rules/base.xml.in.h:608
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless Keyboard"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Пенджабская (гурмукхи Jhelum)"
#: ../rules/base.xml.in.h:609
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Punjabi (Gurmukhi)"
+msgstr "Пенджабская (гурмукхи)"
#: ../rules/base.xml.in.h:610
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:611
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Right Alt"
+msgstr "Правая клавиша Alt"
#: ../rules/base.xml.in.h:612
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Right Alt (while pressed)"
+msgstr "Правая клавиша Alt (пока нажата)"
-#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr "SRB"
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "По правой клавише Alt выбирается 5-й ряд и активируется level5-Lock при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
#: ../rules/base.xml.in.h:614
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "По правой клавише Alt выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
#: ../rules/base.xml.in.h:615
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "По правой клавише Alt выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
#: ../rules/base.xml.in.h:616
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "По правой клавише Alt никогда не выбирается третий ряд"
#: ../rules/base.xml.in.h:617
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Правая клавиша Alt, Shift и правая Alt вместе работают как Multi_Key"
#: ../rules/base.xml.in.h:618
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+msgid "Right Ctrl"
+msgstr "Правая клавиша Ctrl"
#: ../rules/base.xml.in.h:619
-msgid "Secwepemctsin"
-msgstr "Secwepemctsin"
+msgid "Right Ctrl (while pressed)"
+msgstr "Правая клавиша Ctrl (пока нажата)"
#: ../rules/base.xml.in.h:620
-msgid "Semi-colon on third level"
-msgstr "Точка с запятой в третьем ряду"
+msgid "Right Ctrl as Right Alt"
+msgstr "Правая клавиша Ctrl работает как правая клавиша Alt"
#: ../rules/base.xml.in.h:621
-msgid "Sen"
-msgstr "Sen"
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Правая клавиша Ctrl соответствует клавише Menu"
#: ../rules/base.xml.in.h:622
-msgid "Senegal"
-msgstr "Сенегал"
+msgid "Right Ctrl+Right Shift"
+msgstr "Правая Ctrl+Правая Shift"
-#: ../rules/base.xml.in.h:623 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr "Сербия"
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "Правая клавиша Shift"
#: ../rules/base.xml.in.h:624
-msgid "Serbian"
-msgstr "Сербская"
+msgid "Right Win"
+msgstr "Правая клавиша Win"
#: ../rules/base.xml.in.h:625
-msgid "Serbo-Croatian"
-msgstr "Сербо-Хорватская"
+msgid "Right Win (while pressed)"
+msgstr "Правая клавиша Win (пока нажата)"
#: ../rules/base.xml.in.h:626
-msgid "Shift cancels Caps Lock"
-msgstr "Shift отменяет Caps Lock"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "По правой клавише Win выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда"
#: ../rules/base.xml.in.h:627
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr "Shift не отменяет Num Lock, а выбирает третий ряд"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "По правой клавише Win выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда, однократное нажатие снимает блокировку"
#: ../rules/base.xml.in.h:628
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Клавиша Shift с клавишами цифровой клавиатуры работают также как в MS Windows"
+msgid "Romanian"
+msgstr "Румынская"
#: ../rules/base.xml.in.h:629
-msgid "Shift+Caps Lock"
-msgstr "Shift+Caps Lock"
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Румынская (крымско-татарская Dobruca-1 Q)"
#: ../rules/base.xml.in.h:630
-msgid "Simple"
-msgstr "Простая"
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Румынская (крымско-татарская Dobruca-2 Q)"
#: ../rules/base.xml.in.h:631
-msgid "Sindhi"
-msgstr "Синдхи"
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Румынская (крымско-татарская турецкая Alt-Q)"
#: ../rules/base.xml.in.h:632
-msgid "Slovakia"
-msgstr "Словакия"
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Румынская (крымско-татарская турецкая F)"
#: ../rules/base.xml.in.h:633
-msgid "Slovenia"
-msgstr "Словения"
+msgid "Romanian (WinKeys)"
+msgstr "Румынская (клавиши Win)"
#: ../rules/base.xml.in.h:634
-msgid "South Africa"
-msgstr "Южная Африка"
+msgid "Romanian (cedilla)"
+msgstr "Румынская (седиль)"
#: ../rules/base.xml.in.h:635
-msgid "Southern Uzbek"
-msgstr "Южно-узбекская"
+msgid "Romanian (standard cedilla)"
+msgstr "Румынская (стандартная седиль)"
#: ../rules/base.xml.in.h:636
-msgid "Spain"
-msgstr "Испания"
+msgid "Romanian (standard)"
+msgstr "Румынская (стандартная)"
#: ../rules/base.xml.in.h:637
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Специальные клавиши (Ctrl+Alt+&lt;клв&gt;) обрабатываются сервером"
+msgid "Rupee on 4"
+msgstr "Символ рупии на клавише 4"
#: ../rules/base.xml.in.h:638
-msgid "Sri Lanka"
-msgstr "Шри Ланка"
+msgid "Russian"
+msgstr "Русская"
#: ../rules/base.xml.in.h:639
-msgid "Standard"
-msgstr "Стандартная"
+msgid "Russian (Bashkirian)"
+msgstr "Русская (башкирская)"
#: ../rules/base.xml.in.h:640
-msgid "Standard (Cedilla)"
-msgstr "Стандартная (седиль)"
+msgid "Russian (Chuvash Latin)"
+msgstr "Русская (чувашская латиница)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr "Русская (чувашская)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:642
-msgid "Standard RSTU"
-msgstr "Стандартная RSTU"
+msgid "Russian (DOS)"
+msgstr "Русская (DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr "Русская (Грузия)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:644
-msgid "Standard RSTU on Russian layout"
-msgstr "Стандартная RSTU, русская"
+msgid "Russian (Germany, phonetic)"
+msgstr "Русская (Германия, фонетическая)"
#: ../rules/base.xml.in.h:645
-msgid "Sun Type 5/6"
-msgstr "Sun Type 5/6"
+msgid "Russian (Kalmyk)"
+msgstr "Русская (калмыцкая)"
#: ../rules/base.xml.in.h:646
-msgid "Sun dead keys"
-msgstr "Специальные клавиши (dead keys) Sun"
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Русская (Казахстан, с казахской)"
#: ../rules/base.xml.in.h:647
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power Multimedia Keyboard"
+msgid "Russian (Komi)"
+msgstr "Русская (комякская)"
#: ../rules/base.xml.in.h:648
-msgid "Svdvorak"
-msgstr "Svdvorak"
+msgid "Russian (Mari)"
+msgstr "Русская (марийская)"
#: ../rules/base.xml.in.h:649
-msgid "Svk"
-msgstr "Svk"
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Русская (осетинская, с клавишами Win)"
#: ../rules/base.xml.in.h:650
-msgid "Svn"
-msgstr "Svn"
+msgid "Russian (Ossetian, legacy)"
+msgstr "Русская (осетинская, устаревшая)"
#: ../rules/base.xml.in.h:651
-msgid "Swap Ctrl and Caps Lock"
-msgstr "Поменять местами клавиши Ctrl и Caps Lock"
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Русский (Польша, фонетический Дворак)"
#: ../rules/base.xml.in.h:652
-msgid "Swap ESC and Caps Lock"
-msgstr "Поменять местами клавиши ESC и Caps Lock"
+msgid "Russian (Serbian)"
+msgstr "Русская (сербская)"
#: ../rules/base.xml.in.h:653
-msgid "Swe"
-msgstr "Swe"
+msgid "Russian (Sweden, phonetic)"
+msgstr "Русская (Швеция, фонетическая)"
#: ../rules/base.xml.in.h:654
-msgid "Sweden"
-msgstr "Швеция"
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Русская (Швеция, фонетическая, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:655
-msgid "Switzerland"
-msgstr "Швейцария"
+msgid "Russian (Tatar)"
+msgstr "Русская (татарская)"
#: ../rules/base.xml.in.h:656
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (карманный ПК)"
+msgid "Russian (US, phonetic)"
+msgstr "Русская (США, фонетическая)"
#: ../rules/base.xml.in.h:657
-msgid "Syr"
-msgstr "Syr"
+msgid "Russian (Udmurt)"
+msgstr "Русская (удмуртская)"
#: ../rules/base.xml.in.h:658
-msgid "Syria"
-msgstr "Сирия"
+msgid "Russian (Yakut)"
+msgstr "Русская (якутская)"
#: ../rules/base.xml.in.h:659
-msgid "Syriac"
-msgstr "Сирийская"
+msgid "Russian (legacy)"
+msgstr "Русская (устаревшая)"
#: ../rules/base.xml.in.h:660
-msgid "Syriac phonetic"
-msgstr "Сирийская фонетическая"
+msgid "Russian (phonetic WinKeys)"
+msgstr "Русская (фонетическая с клавишами Win)"
#: ../rules/base.xml.in.h:661
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
+msgid "Russian (phonetic)"
+msgstr "Русская (фонетическая)"
#: ../rules/base.xml.in.h:662
-msgid "Tajikistan"
-msgstr "Таджикистан"
+msgid "Russian (typewriter)"
+msgstr "Русская (печатная машинка)"
#: ../rules/base.xml.in.h:663
-msgid "Tamil"
-msgstr "Тамильская"
+msgid "Russian (typewriter, legacy)"
+msgstr "Русская (печатная машинка, устаревшая)"
#: ../rules/base.xml.in.h:664
-msgid "Tamil Keyboard with Numerals"
-msgstr "Тамильская клавиатура с цифрами"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless Keyboard"
#: ../rules/base.xml.in.h:665
-msgid "Tamil TAB Typewriter"
-msgstr "Тамильская \"Печатная машинка\" TAB"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:666
-msgid "Tamil TSCII Typewriter"
-msgstr "Тамильская \"Печатная машинка\" TSCII"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:667
-msgid "Tamil Unicode"
-msgstr "Тамильская Юникодная"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:668
-msgid "Tanzania"
-msgstr "Танзания"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:669
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:670
-msgid "Tatar"
-msgstr "Татарская"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:671
-msgid "Telugu"
-msgstr "Телугу"
+msgid "Saisiyat (Taiwan)"
+msgstr "Сайсьят (Тайвань)"
#: ../rules/base.xml.in.h:672
-msgid "Tha"
-msgstr "Tha"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:673
-msgid "Thailand"
-msgstr "Таиланд"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:674
-msgid "Tibetan"
-msgstr "Тибетская"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
#: ../rules/base.xml.in.h:675
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Тибетская (с цифрами ASCII)"
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
#: ../rules/base.xml.in.h:676
-msgid "Tifinagh"
-msgstr "Тифинагская"
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
#: ../rules/base.xml.in.h:677
-msgid "Tifinagh alternative"
-msgstr "Тифинагская альтернативная"
+msgid "Semi-colon on third level"
+msgstr "Точка с запятой в третьем ряду"
#: ../rules/base.xml.in.h:678
-msgid "Tifinagh alternative phonetic"
-msgstr "Тифинагская альтернативная фонетическая"
+msgid "Serbian"
+msgstr "Сербская"
#: ../rules/base.xml.in.h:679
-msgid "Tifinagh extended"
-msgstr "Тифинагская расширенная"
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Сербская (латинская юникодная qwerty)"
#: ../rules/base.xml.in.h:680
-msgid "Tifinagh extended phonetic"
-msgstr "Тифинагская расширенная фонетическая"
+msgid "Serbian (Latin Unicode)"
+msgstr "Сербская (латинская юникодная)"
#: ../rules/base.xml.in.h:681
-msgid "Tifinagh phonetic"
-msgstr "Тифинагская фонетическая"
+msgid "Serbian (Latin qwerty)"
+msgstr "Сербская (латинская qwerty)"
#: ../rules/base.xml.in.h:682
-msgid "Tilde (~) variant"
-msgstr "Вариант с тильдой (~)"
+msgid "Serbian (Latin with guillemets)"
+msgstr "Сербская (латинская с кавычками ёлочками)"
#: ../rules/base.xml.in.h:683
-msgid "Tjk"
-msgstr "Tjk"
+msgid "Serbian (Latin)"
+msgstr "Сербская (латинская)"
#: ../rules/base.xml.in.h:684
-msgid "Tkm"
-msgstr "Tkm"
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Сербская (паннонская русинская омофоническая)"
#: ../rules/base.xml.in.h:685
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "На соответствующую клавишу на клавиатуре Дворак."
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Сербская (З и Ж переставлены местами)"
#: ../rules/base.xml.in.h:686
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "На соответствующую клавишу на клавиатуре Qwerty."
+msgid "Serbian (with guillemets)"
+msgstr "Сербская (латинская с кавычками ёлочками)"
#: ../rules/base.xml.in.h:687
-msgid "Toggle PointerKeys with Shift + NumLock."
-msgstr "Переключать PointerKeys с помощью Shift + NumLock."
+msgid "Serbo-Croatian (US)"
+msgstr "Сербо-Хорватская (США)"
#: ../rules/base.xml.in.h:688
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
+msgid "Shift cancels Caps Lock"
+msgstr "Shift отменяет Caps Lock"
#: ../rules/base.xml.in.h:689
-msgid "Traditional phonetic"
-msgstr "Традиционная фонетическая"
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Shift не отменяет Num Lock, а выбирает третий ряд"
#: ../rules/base.xml.in.h:690
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access Keyboard"
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Клавиша Shift с клавишами цифровой клавиатуры работают также как в MS Windows"
#: ../rules/base.xml.in.h:691
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
#: ../rules/base.xml.in.h:692
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
+msgid "Sindhi"
+msgstr "Синдхи"
#: ../rules/base.xml.in.h:693
-msgid "Tur"
-msgstr "Tur"
+msgid "Sinhala"
+msgstr "Сингальская"
#: ../rules/base.xml.in.h:694
-msgid "Turkey"
-msgstr "Турция"
+msgid "Slovak"
+msgstr "Словацкая"
#: ../rules/base.xml.in.h:695
-msgid "Turkmenistan"
-msgstr "Туркмения"
+msgid "Slovak (extended Backslash)"
+msgstr "Словацкая (расширенные функции Backslash)"
#: ../rules/base.xml.in.h:696
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr "TypeMatrix EZ-Reach 2020"
+msgid "Slovak (qwerty)"
+msgstr "Словацкая (qwerty)"
#: ../rules/base.xml.in.h:697
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr "TypeMatrix EZ-Reach 2030 PS2"
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Словацкая (qwerty, расширенные функции Backslash)"
#: ../rules/base.xml.in.h:698
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr "TypeMatrix EZ-Reach 2030 USB"
+msgid "Slovene"
+msgstr "Словенская"
#: ../rules/base.xml.in.h:699
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:режим EU)"
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Словенская (клавиатура США с словенскими буквами)"
#: ../rules/base.xml.in.h:700
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr "TypeMatrix EZ-Reach 2030 USB (106:режим JP)"
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Словенская (используются кавычки ёлочки как кавычки)"
#: ../rules/base.xml.in.h:701
-msgid "Typewriter"
-msgstr "Печатная машинка"
+msgid "Spanish"
+msgstr "Испанская"
#: ../rules/base.xml.in.h:702
-msgid "Typewriter, legacy"
-msgstr "Печатная машинка, устаревшая"
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Испанская (астурлеонский вариант с нижними точками у H и L)"
#: ../rules/base.xml.in.h:703
-msgid "Tza"
-msgstr "Tza"
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Испанская (каталонский вариант с точкой в L посередине)"
#: ../rules/base.xml.in.h:704
-msgid "UCW layout (accented letters only)"
-msgstr "Раскладка UCW (только символы акцентов)"
+msgid "Spanish (Dvorak)"
+msgstr "Испанская (Дворак)"
#: ../rules/base.xml.in.h:705
-msgid "US Dvorak with CZ UCW support"
-msgstr "Дворак США с поддержкой CZ UCW"
+msgid "Spanish (Latin American)"
+msgstr "Испанская (латиноамериканская)"
#: ../rules/base.xml.in.h:706
-msgid "US keyboard with Bosnian digraphs"
-msgstr "Клавиатура США с боснийскими диграфами"
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Испанская (латиноамериканская, без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:707
-msgid "US keyboard with Bosnian letters"
-msgstr "Клавиатура США с боснийскими буквами"
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Испанская (латиноамериканская, с dead tilde)"
#: ../rules/base.xml.in.h:708
-msgid "US keyboard with Croatian digraphs"
-msgstr "Клавиатура США с хорватскими диграфами"
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Испанская (латиноамериканская, с спец. клавишами (dead keys) Sun)"
#: ../rules/base.xml.in.h:709
-msgid "US keyboard with Croatian letters"
-msgstr "Клавиатура США с хорватскими буквами"
+msgid "Spanish (Mac)"
+msgstr "Испанская (Mac)"
#: ../rules/base.xml.in.h:710
-msgid "US keyboard with Estonian letters"
-msgstr "Клавиатура США с эстонскими буквами"
+msgid "Spanish (Sun dead keys)"
+msgstr "Испанская (с спец. клавишами (dead keys) Sun)"
#: ../rules/base.xml.in.h:711
-msgid "US keyboard with Italian letters"
-msgstr "Клавиатура США с итальянскими буквами"
+msgid "Spanish (eliminate dead keys)"
+msgstr "Испанская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:712
-msgid "US keyboard with Lithuanian letters"
-msgstr "Клавиатура США с литовскими буквами"
+msgid "Spanish (include dead tilde)"
+msgstr "Испанская (с dead tilde)"
#: ../rules/base.xml.in.h:713
-msgid "US keyboard with Slovenian letters"
-msgstr "Клавиатура США со словенскими буквами"
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Специальные клавиши (Ctrl+Alt+&lt;клв&gt;) обрабатываются сервером"
-#: ../rules/base.xml.in.h:714 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr "США"
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Type 5/6"
#: ../rules/base.xml.in.h:715
-msgid "Udmurt"
-msgstr "Удмуртская"
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power Multimedia Keyboard"
#: ../rules/base.xml.in.h:716
-msgid "Ukr"
-msgstr "Ukr"
+msgid "Swahili (Kenya)"
+msgstr "Суахильская (Кения)"
#: ../rules/base.xml.in.h:717
-msgid "Ukraine"
-msgstr "Украина"
+msgid "Swahili (Tanzania)"
+msgstr "Суахильская (Танзания)"
#: ../rules/base.xml.in.h:718
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Дополнения юникода (стрелки и математические операторы)"
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Поменять местами клавиши Ctrl и Caps Lock"
#: ../rules/base.xml.in.h:719
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Дополнения юникода (стрелки и математические операторы). Математические операторы в ряду по умолчанию"
+msgid "Swap ESC and Caps Lock"
+msgstr "Поменять местами клавиши ESC и Caps Lock"
#: ../rules/base.xml.in.h:720
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+msgid "Swedish"
+msgstr "Шведская"
#: ../rules/base.xml.in.h:721
-msgid "United Kingdom"
-msgstr "Великобритания"
+msgid "Swedish (Dvorak)"
+msgstr "Шведская (Дворак)"
#: ../rules/base.xml.in.h:722
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+msgid "Swedish (Mac)"
+msgstr "Шведская (Mac)"
#: ../rules/base.xml.in.h:723
-msgid "Urdu, Alternative phonetic"
-msgstr "Урду, альтернативная фонетическая"
+msgid "Swedish (Svdvorak)"
+msgstr "Шведская (Svdvorak)"
#: ../rules/base.xml.in.h:724
-msgid "Urdu, Phonetic"
-msgstr "Урду, фонетическая"
+msgid "Swedish (eliminate dead keys)"
+msgstr "Шведская (без спец. клавиш (dead keys))"
#: ../rules/base.xml.in.h:725
-msgid "Urdu, Winkeys"
-msgstr "Урду, с клавишами Win"
+msgid "Swedish (northern Saami)"
+msgstr "Шведская (Северная Саамская)"
#: ../rules/base.xml.in.h:726
-msgid "Use Bosnian digraphs"
-msgstr "Использовать боснийские диграфы"
+msgid "Swiss"
+msgstr "Швейцарская"
#: ../rules/base.xml.in.h:727
-msgid "Use Croatian digraphs"
-msgstr "Использовать хорватские диграфы"
+msgid "Swiss (legacy)"
+msgstr "Швейцарская (унаследованная)"
#: ../rules/base.xml.in.h:728
-msgid "Use guillemets for quotes"
-msgstr "Использовать кавычки ёлочки как кавычки"
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (карманный ПК)"
#: ../rules/base.xml.in.h:729
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Использовать клавиатурные индикаторы для отображения дополнительных раскладок"
+msgid "Syriac"
+msgstr "Сирийская"
#: ../rules/base.xml.in.h:730
-msgid "Using space key to input non-breakable space character"
-msgstr "Клавиша пробела используется для ввода символа неразрывного пробела"
+msgid "Syriac (phonetic)"
+msgstr "Сирийская (фонетическая)"
#: ../rules/base.xml.in.h:731
-msgid "Usual space at any level"
-msgstr "Обычный пробел в любом ряду"
+msgid "Taiwanese"
+msgstr "Тайваньская"
#: ../rules/base.xml.in.h:732
-msgid "Uzb"
-msgstr "Uzb"
+msgid "Taiwanese (indigenous)"
+msgstr "Тайваньская (туземная)"
#: ../rules/base.xml.in.h:733
-msgid "Uzbekistan"
-msgstr "Узбекистан"
+msgid "Tajik"
+msgstr "Таджикская"
#: ../rules/base.xml.in.h:734
-msgid "Vietnam"
-msgstr "Вьетнам"
+msgid "Tajik (legacy)"
+msgstr "Таджикская (унаследованная)"
#: ../rules/base.xml.in.h:735
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "ViewSonic KU-306 Internet Keyboard"
+msgid "Tamil"
+msgstr "Тамильская"
#: ../rules/base.xml.in.h:736
-msgid "Vnm"
-msgstr "Vnm"
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Тамильская (Шри-Ланка, печатная машинка TAB)"
#: ../rules/base.xml.in.h:737
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы)"
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Тамильская (Шри-Ланка, юникодная)"
#: ../rules/base.xml.in.h:738
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы). Математические операторы в ряду по умолчанию"
+msgid "Tamil (TAB typewriter)"
+msgstr "Тамильская (печатная машинка TAB)"
#: ../rules/base.xml.in.h:739
-msgid "Wang model 724 azerty"
-msgstr "Wang model 724 azerty"
+msgid "Tamil (TSCII typewriter)"
+msgstr "Тамильская (печатная машинка TSCII)"
#: ../rules/base.xml.in.h:740
-msgid "Western"
-msgstr "Западная"
+msgid "Tamil (Unicode)"
+msgstr "Тамильская (юникодная)"
#: ../rules/base.xml.in.h:741
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
+msgid "Tamil (keyboard with numerals)"
+msgstr "Тамильская (клавиатура с цифрами)"
#: ../rules/base.xml.in.h:742
-msgid "Winkeys"
-msgstr "Клавиши Win"
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
#: ../rules/base.xml.in.h:743
-msgid "With &lt;\\|&gt; key"
-msgstr "С клавишей &lt;\\|&gt;"
+msgid "Telugu"
+msgstr "Телугская"
#: ../rules/base.xml.in.h:744
-msgid "With EuroSign on 5"
-msgstr "С символом евро на клавише 5"
+msgid "Thai"
+msgstr "Тайская"
#: ../rules/base.xml.in.h:745
-msgid "With guillemets"
-msgstr "С кавычками ёлочками"
+msgid "Thai (Pattachote)"
+msgstr "Тайская (паттачотская)"
#: ../rules/base.xml.in.h:746
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! Internet Keyboard"
+msgid "Thai (TIS-820.2538)"
+msgstr "Тайская (TIS-820.2538)"
#: ../rules/base.xml.in.h:747
-msgid "Yakut"
-msgstr "Якутская"
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "На соответствующую клавишу на клавиатуре Дворак."
#: ../rules/base.xml.in.h:748
-msgid "Yoruba"
-msgstr "Йоруба"
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "На соответствующую клавишу на клавиатуре Qwerty."
#: ../rules/base.xml.in.h:749
-msgid "Z and ZHE swapped"
-msgstr "З и Ж переставлены местами"
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Переключать PointerKeys с помощью Shift + NumLock."
#: ../rules/base.xml.in.h:750
-msgid "Zaf"
-msgstr "Zaf"
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
#: ../rules/base.xml.in.h:751
-msgid "Zero-width non-joiner character at second level"
-msgstr "Несвязывающий символ нулевой ширины во втором ряду"
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access Keyboard"
#: ../rules/base.xml.in.h:752
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
-msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду"
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
#: ../rules/base.xml.in.h:753
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
-msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, ничего в четвёртом"
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
#: ../rules/base.xml.in.h:754
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
-msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, тонкий неразрывный пробел в четвёртом ряду"
+msgid "Tswana"
+msgstr "Тсванская"
#: ../rules/base.xml.in.h:755
-msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
-msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, связывающий символ нулевой ширины в четвёртом ряду"
+msgid "Turkish"
+msgstr "Турецкая"
#: ../rules/base.xml.in.h:756
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
-msgstr "Несвязывающий символ нулевой ширины во втором ряду, связывающий символ нулевой ширины в третьем ряду"
+msgid "Turkish (Alt-Q)"
+msgstr "Турецкая (Alt-Q)"
#: ../rules/base.xml.in.h:757
-msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
-msgstr "Несвязывающий символ нулевой ширины во втором ряду, связывающий символ нулевой ширины в третьем ряду, символ неразрывного пробела в четвёртом ряду"
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Турецкая (крымско-татарская турецкая Alt-Q)"
#: ../rules/base.xml.in.h:758
-msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
-msgstr "Несвязывающий символ нулевой ширины в третьем ряду, связывающий символ нулевой ширины в четвёртом ряду"
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Турецкая (крымско-татарская турецкая F)"
#: ../rules/base.xml.in.h:759
-msgid "azerty"
-msgstr "azerty"
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Турецкая (крымско-татарская турецкая Q)"
#: ../rules/base.xml.in.h:760
-msgid "azerty/digits"
-msgstr "azerty/цифры"
+msgid "Turkish (F)"
+msgstr "Турецкая (F)"
#: ../rules/base.xml.in.h:761
-msgid "digits"
-msgstr "цифры"
+msgid "Turkish (Sun dead keys)"
+msgstr "Турецкая (со спец. клавишами (dead keys) Sun)"
#: ../rules/base.xml.in.h:762
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "смещённые точка с запятой и кавычка (устарело)"
+msgid "Turkish (international with dead keys)"
+msgstr "Турецкая (международная со спец. клавишами)"
#: ../rules/base.xml.in.h:763
-msgid "lyx"
-msgstr "lyx"
+msgid "Turkmen"
+msgstr "Туркменская"
#: ../rules/base.xml.in.h:764
-msgid "qwerty"
-msgstr "qwerty"
+msgid "Turkmen (Alt-Q)"
+msgstr "Туркменская (Alt-Q)"
#: ../rules/base.xml.in.h:765
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, расширенные функции Backslash"
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
#: ../rules/base.xml.in.h:766
-msgid "qwerty/digits"
-msgstr "qwerty/цифры"
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
#: ../rules/base.xml.in.h:767
-msgid "qwertz"
-msgstr "qwertz"
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:режим EU)"
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:режим JP)"
+
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Украинская"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Украинская (крымско-татарская турецкая Alt-Q)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Украинская (крымско-татарская турецкая F)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Украинская (крымско-татарская турецкая Q)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Украинская (с клавишами Win)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Украинская (омофоническая)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Украинская (унаследованная)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Украинская (фонетическая)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Украинская (стандартная RSTU в русской раскладке)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Украинская (стандартная RSTU)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Украинская (печатная машинка)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Дополнения юникода (стрелки и математические операторы)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Дополнения юникода (стрелки и математические операторы). Математические операторы в ряду по умолчанию"
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Урдская (Пакистан)"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Урдская (Пакистан, CRULP)"
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Урдская (Пакистан, NLA)"
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Урдcкая (с клавишами Win)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Урдская (альтернативная фонетическая)"
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Урдская (фонетическая)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Использовать клавиатурные индикаторы для отображения дополнительных раскладок"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Клавиша пробела используется для ввода символа неразрывного пробела"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Обычный пробел в любом ряду"
+
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Узбекская"
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Узбекская (Афганистан)"
+
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Узбекская (Афганистан, OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Узбекская (крымско-татарская турецкая Alt-Q)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Узбекская (крымско-татарская турецкая F)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Узбекская (крымско-татарская турецкая Q)"
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Узбекская (латинская)"
+
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "Вьетнамская"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 Internet Keyboard"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы). Математические операторы в ряду по умолчанию"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Волофская"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! Internet Keyboard"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Йоруба"
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "Несвязывающий символ нулевой ширины во втором ряду"
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду"
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, ничего в четвёртом"
+
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, тонкий неразрывный пробел в четвёртом ряду"
+
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду, связывающий символ нулевой ширины в четвёртом ряду"
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Несвязывающий символ нулевой ширины во втором ряду, связывающий символ нулевой ширины в третьем ряду"
+
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Несвязывающий символ нулевой ширины во втором ряду, связывающий символ нулевой ширины в третьем ряду, символ неразрывного пробела в четвёртом ряду"
+
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Несвязывающий символ нулевой ширины в третьем ряду, связывающий символ нулевой ширины в четвёртом ряду"
+
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
+
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
+
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
+
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
+
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
#: ../rules/base.extras.xml.in.h:1
msgid "APL"
msgstr "APL"
#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Атсинская"
+msgid "Iran"
+msgstr "Иран"
#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr "Авестийская"
+msgid "Iran - Avestan"
+msgstr "Иран - авестийская"
#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr "Объединённые надбуквенные знаки вместе спец. клавиш (dead keys)"
+msgid "Lithuania"
+msgstr "Литва"
#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr "Салишская кёр-д’ален"
+msgid "Lithuania - Dvorak"
+msgstr "Литва - Дворак"
#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr "Международная (объединённая с AltGr Unicode)"
+msgid "Ltu"
+msgstr "Ltu"
#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "Международная (объединённая с AltGr Unicode, альтернативная)"
+msgid "Romania"
+msgstr "Румыния"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Румыния - эргономичная слепопечатная"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rou"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Россия"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Сербия"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Сербия - объединённые надбуквенные знаки вместе спец. клавиш (dead keys)"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "США"
+
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "США - атсинская"
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "США - салишская кёр-д’ален"
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "США - международная (объединённая с юникодным AltGr)"
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "США - международная (объединённая с юникодным AltGr, альтернативная)"
+
+#~ msgid "(F)"
+#~ msgstr "(F)"
+
+#~ msgid "Alb"
+#~ msgstr "Alb"
+
+#~ msgid "Alt-Q"
+#~ msgstr "Alt-Q"
+
+#~ msgid "Alternative"
+#~ msgstr "Альтернативная"
+
+#~ msgid "Alternative Phonetic"
+#~ msgstr "Альтернативная Фонетическая"
+
+#~ msgid "Alternative international"
+#~ msgstr "Альтернативная международная"
+
+#~ msgid "And"
+#~ msgstr "And"
+
+#~ msgid "Andorra"
+#~ msgstr "Андорра"
+
+#~ msgid "Ara"
+#~ msgstr "Ara"
+
+#~ msgid "Arm"
+#~ msgstr "Arm"
+
+#~ msgid "Aut"
+#~ msgstr "Aut"
+
+#~ msgid "Aze"
+#~ msgstr "Aze"
+
+#~ msgid "Bangladesh"
+#~ msgstr "Бангладеш"
+
+#~ msgid "Bel"
+#~ msgstr "Bel"
+
+#~ msgid "Bgd"
+#~ msgstr "Bgd"
+
+#~ msgid "Bhutan"
+#~ msgstr "Бутан"
+
+#~ msgid "Bih"
+#~ msgstr "Bih"
+
+#~ msgid "Blr"
+#~ msgstr "Blr"
+
+#~ msgid "Bosnia and Herzegovina"
+#~ msgstr "Босния и Герцеговина"
+
+#~ msgid "Bra"
+#~ msgstr "Bra"
+
+#~ msgid "Brazil"
+#~ msgstr "Бразилия"
+
+#~ msgid "Breton"
+#~ msgstr "Бретонская"
+
+#~ msgid "Bwa"
+#~ msgstr "Bwa"
+
+#~ msgid "COD"
+#~ msgstr "COD"
+
+#~ msgid "CRULP"
+#~ msgstr "CRULP"
+
+#~ msgid "Canada"
+#~ msgstr "Канада"
+
+#~ msgid "Cedilla"
+#~ msgstr "Седиль"
+
+#~ msgid "Chn"
+#~ msgstr "Chn"
+
+#~ msgid "Chuvash"
+#~ msgstr "Чувашия"
+
+#~ msgid "Classic"
+#~ msgstr "Классическая"
+
+#~ msgid "Colemak"
+#~ msgstr "Colemak"
+
+#~ msgid "Cyrillic"
+#~ msgstr "Кириллица"
+
+#~ msgid "Cze"
+#~ msgstr "Cze"
+
+#~ msgid "DOS"
+#~ msgstr "DOS"
+
+#~ msgid "Dead acute"
+#~ msgstr "Спец. символ Dead acute"
+
+#~ msgid "Denmark"
+#~ msgstr "Дания"
+
+#~ msgid "Deu"
+#~ msgstr "Deu"
+
+#~ msgid "Dnk"
+#~ msgstr "Dnk"
+
+#~ msgid "Dvorak"
+#~ msgstr "Дворак"
+
+#~ msgid "Eastern"
+#~ msgstr "Восточный"
+
+#~ msgid "Epo"
+#~ msgstr "Epo"
+
+#~ msgid "Ergonomic"
+#~ msgstr "Ergonomic"
+
+#~ msgid "Est"
+#~ msgstr "Est"
+
+#~ msgid "Ethiopia"
+#~ msgstr "Эфиопия"
+
+#~ msgid "Extended"
+#~ msgstr "Расширенная"
+
+#~ msgid "Finland"
+#~ msgstr "Финляндия"
+
+#~ msgid "Fra"
+#~ msgstr "Fra"
+
+#~ msgid "France"
+#~ msgstr "Франция"
+
+#~ msgid "GILLBT"
+#~ msgstr "GILLBT"
+
+#~ msgid "Georgia"
+#~ msgstr "Грузия"
+
+#~ msgid "Ghana"
+#~ msgstr "Гана"
+
+#~ msgid "Gin"
+#~ msgstr "Gin"
+
+#~ msgid "Grc"
+#~ msgstr "Grc"
+
+#~ msgid "Guinea"
+#~ msgstr "Гвинея"
+
+#~ msgid "Homophonic"
+#~ msgstr "Омофоническая"
+
+#~ msgid "Hrv"
+#~ msgstr "Hrv"
+
+#~ msgid "Hun"
+#~ msgstr "Hun"
+
+#~ msgid "Ind"
+#~ msgstr "Ind"
+
+#~ msgid "Ireland"
+#~ msgstr "Ирландия"
+
+#~ msgid "Irl"
+#~ msgstr "Irl"
+
+#~ msgid "Irn"
+#~ msgstr "Irn"
+
+#~ msgid "Israel"
+#~ msgstr "Израиль"
+
+#~ msgid "Jpn"
+#~ msgstr "Jpn"
+
+#~ msgid "Kana"
+#~ msgstr "Кана"
+
+#~ msgid "Kana 86"
+#~ msgstr "Kana 86"
+
+#~ msgid "Kenya"
+#~ msgstr "Кения"
+
+#~ msgid "Kgz"
+#~ msgstr "Kgz"
+
+#~ msgid "Khm"
+#~ msgstr "Khm"
+
+#~ msgid "Korea, Republic of"
+#~ msgstr "Республика Корея"
+
+#~ msgid "Ktunaxa"
+#~ msgstr "Кутенай"
+
+#~ msgid "LEKP"
+#~ msgstr "LEKP"
+
+#~ msgid "LEKPa"
+#~ msgstr "LEKPa"
+
+#~ msgid "Laos"
+#~ msgstr "Лаос"
+
+#~ msgid "Latin"
+#~ msgstr "Латинская"
+
+#~ msgid "Left hand"
+#~ msgstr "Левая рука"
+
+#~ msgid "Lva"
+#~ msgstr "Lva"
+
+#~ msgid "MESS"
+#~ msgstr "MESS"
+
+#~ msgid "MNE"
+#~ msgstr "MNE"
+
+#~ msgid "Macintosh (International)"
+#~ msgstr "Macintosh (международная)"
+
+#~ msgid "Maldives"
+#~ msgstr "Мальдивы"
+
+#~ msgid "Mali"
+#~ msgstr "Мали"
+
+#~ msgid "Mao"
+#~ msgstr "Mao"
+
+#~ msgid "Maori"
+#~ msgstr "Маори"
+
+#~ msgid "Mkd"
+#~ msgstr "Mkd"
+
+#~ msgid "Mli"
+#~ msgstr "Mli"
+
+#~ msgid "Mmr"
+#~ msgstr "Mmr"
+
+#~ msgid "Mng"
+#~ msgstr "Mng"
+
+#~ msgid "Myanmar"
+#~ msgstr "Мьянма"
+
+#~ msgid "NLA"
+#~ msgstr "NLA"
+
+#~ msgid "Nativo"
+#~ msgstr "Nativo"
+
+#~ msgid "Neo 2"
+#~ msgstr "Neo 2"
+
+#~ msgid "Netherlands"
+#~ msgstr "Нидерланды"
+
+#~ msgid "Nigeria"
+#~ msgstr "Нигерия"
+
+#~ msgid "Nld"
+#~ msgstr "Nld"
+
+#~ msgid "Nor"
+#~ msgstr "Nor"
+
+#~ msgid "Norway"
+#~ msgstr "Норвегия"
+
+#~ msgid "OLPC Dari"
+#~ msgstr "OLPC Dari"
+
+#~ msgid "OLPC Pashto"
+#~ msgstr "OLPC Pashto"
+
+#~ msgid "OLPC Southern Uzbek"
+#~ msgstr "Южно-узбекский OLPC"
+
+#~ msgid "Occitan"
+#~ msgstr "Окситанский"
+
+#~ msgid "Ogham"
+#~ msgstr "Огхам"
+
+#~ msgid "Ossetian"
+#~ msgstr "Осетинская"
+
+#~ msgid "Phonetic"
+#~ msgstr "Фонетическая"
+
+#~ msgid "Phonetic Winkeys"
+#~ msgstr "Фонетическая с клавишами Win"
+
+#~ msgid "Pol"
+#~ msgstr "Pol"
+
+#~ msgid "Poland"
+#~ msgstr "Польша"
+
+#~ msgid "Probhat"
+#~ msgstr "Пробат"
+
+#~ msgid "Prt"
+#~ msgstr "Prt"
+
+#~ msgid "SRB"
+#~ msgstr "SRB"
+
+#~ msgid "Sen"
+#~ msgstr "Sen"
+
+#~ msgid "Senegal"
+#~ msgstr "Сенегал"
+
+#~ msgid "Simple"
+#~ msgstr "Простая"
+
+#~ msgid "Southern Uzbek"
+#~ msgstr "Южно-узбекская"
+
+#~ msgid "Spain"
+#~ msgstr "Испания"
+
+#~ msgid "Sri Lanka"
+#~ msgstr "Шри Ланка"
+
+#~ msgid "Standard"
+#~ msgstr "Стандартная"
+
+#~ msgid "Svk"
+#~ msgstr "Svk"
+
+#~ msgid "Svn"
+#~ msgstr "Svn"
+
+#~ msgid "Swe"
+#~ msgstr "Swe"
+
+#~ msgid "Syria"
+#~ msgstr "Сирия"
+
+#~ msgid "Tatar"
+#~ msgstr "Татарская"
+
+#~ msgid "Tha"
+#~ msgstr "Tha"
+
+#~ msgid "Tibetan"
+#~ msgstr "Тибетская"
+
+#~ msgid "Tifinagh"
+#~ msgstr "Тифинагская"
+
+#~ msgid "Tjk"
+#~ msgstr "Tjk"
+
+#~ msgid "Typewriter"
+#~ msgstr "Печатная машинка"
+
+#~ msgid "Tza"
+#~ msgstr "Tza"
+
+#~ msgid "Udmurt"
+#~ msgstr "Удмуртская"
+
+#~ msgid "Ukr"
+#~ msgstr "Ukr"
+
+#~ msgid "United Kingdom"
+#~ msgstr "Великобритания"
+
+#~ msgid "Uzb"
+#~ msgstr "Uzb"
+
+#~ msgid "Vnm"
+#~ msgstr "Vnm"
+
+#~ msgid "Western"
+#~ msgstr "Западная"
+
+#~ msgid "With EuroSign on 5"
+#~ msgstr "С символом евро на клавише 5"
+
+#~ msgid "With guillemets"
+#~ msgstr "С кавычками ёлочками"
+
+#~ msgid "Zaf"
+#~ msgstr "Zaf"
+
+#~ msgid "azerty"
+#~ msgstr "azerty"
+
+#~ msgid "digits"
+#~ msgstr "цифры"
+
+#~ msgid "lyx"
+#~ msgstr "lyx"
+
+#~ msgid "qwertz"
+#~ msgstr "qwertz"
#~ msgid "2"
#~ msgstr "2"
diff --git a/xorg-server/xkeyboard-config/po/sv.po b/xorg-server/xkeyboard-config/po/sv.po
index 2fbb1517b..1c85a6889 100644
--- a/xorg-server/xkeyboard-config/po/sv.po
+++ b/xorg-server/xkeyboard-config/po/sv.po
@@ -1,3836 +1,3980 @@
# Swedish messages for xkeyboard-config.
-# Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+# Copyright (C) 2004-2011 Free Software Foundation, Inc.
# This file is distributed under the same license as the xkeyboard-config package.
# Christian Rose <menthos@menthos.com>, 2004.
-# Daniel Nylander <po@danielnylander.se>, 2006, 2007, 2008, 2009, 2010.
+# Daniel Nylander <po@danielnylander.se>, 2006, 2007, 2008, 2009, 2010, 2011.
#
msgid ""
msgstr ""
-"Project-Id-Version: xkeyboard-config 1.8\n"
+"Project-Id-Version: xkeyboard-config 2.1.99\n"
"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2010-01-16 18:08+0000\n"
-"PO-Revision-Date: 2010-01-16 21:09+0100\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-03-27 23:35+0100\n"
"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
+"Language: sv\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: ../rules/base.xml.in.h:1
-msgid "(F)"
-msgstr "(F)"
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;Mindre än/Större än&gt;"
#: ../rules/base.xml.in.h:2
-msgid "(Legacy) Alternative"
-msgstr "(Äldre) Alternativ"
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Mindre än/Större än&gt; (väljer tredje nivån, låses när nedtryckt tillsammans med annan 3rd-level-chooser)"
#: ../rules/base.xml.in.h:3
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(Äldre) Alternativ, Sun stumma tangenter"
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Mindre än/Större än&gt; väljer femte nivån och aktiverar level5-Lock när nedtryckt tillsammans med en annan 5th-level-chooser, ett tryck släpper på låset"
#: ../rules/base.xml.in.h:4
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(Äldre) Alternativ, eliminera stumma tangenter"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Mindre än/Större än&gt; väljer femte nivån, låses när nedtryckt tillsammans med en annan 5th-level-chooser"
#: ../rules/base.xml.in.h:5
-msgid "101/104 key Compatible"
-msgstr "101/104-tangenters kompatibel"
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Mindre än/Större än&gt; väljer femte nivån, låses när nedtryckt tillsammans med en annan 5th-level-chooser, ett tryck släpper på låset"
#: ../rules/base.xml.in.h:6
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/komma/Stumma tangenter"
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
#: ../rules/base.xml.in.h:7
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/komma/Eliminera stumma tangenter"
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
#: ../rules/base.xml.in.h:8
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/punkt/Stumma tangenter"
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/punkt/Eliminera stumma tangenter"
+msgid "ATM/phone-style"
+msgstr "Knappsats/telefonliknande"
#: ../rules/base.xml.in.h:10
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/komma/Stumma tangenter"
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
#: ../rules/base.xml.in.h:11
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwertz/komma/Eliminera stumma tangenter"
+msgid "Acer C300"
+msgstr "Acer C300"
#: ../rules/base.xml.in.h:12
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/punkt/Stumma tangenter"
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/punkt/Eliminera stumma tangenter"
+msgid "Acer Laptop"
+msgstr "Bärbar Acer-dator"
#: ../rules/base.xml.in.h:14
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/komma/Stumma tangenter"
+msgid "Add the standard behavior to Menu key"
+msgstr "Lägg till standardbeteendet till Meny-tangenten"
#: ../rules/base.xml.in.h:15
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/komma/Eliminera stumma tangenter"
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Lägger till Esperanto-circumflex (supersigno)"
#: ../rules/base.xml.in.h:16
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/punkt/Stumma tangenter"
+msgid "Adding currency signs to certain keys"
+msgstr "Lägger till valutatecken till vissa tangenter"
#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/punkt/Eliminera stumma tangenter"
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
#: ../rules/base.xml.in.h:18
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/komma/Stumma tangenter"
+msgid "Afg"
+msgstr "Afg"
#: ../rules/base.xml.in.h:19
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/komma/Eliminera stumma tangenter"
+msgid "Afghani"
+msgstr "Afgansk"
#: ../rules/base.xml.in.h:20
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/punkt/Stumma tangenter"
+msgid "Akan"
+msgstr "Akan"
#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/punkt/Eliminera stumma tangenter"
+msgid "Albanian"
+msgstr "Albansk"
#: ../rules/base.xml.in.h:22
-msgid "2"
-msgstr "2"
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt och Meta finns på Alt-tangenterna"
#: ../rules/base.xml.in.h:23
-msgid "4"
-msgstr "4"
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt är mappad till högra Win-tangenten och Super till Meny"
#: ../rules/base.xml.in.h:24
-msgid "5"
-msgstr "5"
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
#: ../rules/base.xml.in.h:25
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
#: ../rules/base.xml.in.h:26
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
+msgid "Alt+Shift"
+msgstr "Alt+Skift"
#: ../rules/base.xml.in.h:27
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
+msgid "Alt+Space"
+msgstr "Alt+Blanksteg"
#: ../rules/base.xml.in.h:28
-msgid "ACPI Standard"
-msgstr "ACPI-standard"
+msgid "Alt/Win key behavior"
+msgstr "Alt/Win-tangentbeteende"
#: ../rules/base.xml.in.h:29
-msgid "ATM/phone-style"
-msgstr "Knappsats/telefonliknande"
+msgid "Amharic"
+msgstr "Amharisk"
#: ../rules/base.xml.in.h:30
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
+msgid "Any Alt key"
+msgstr "Valfri Alt-tangent"
#: ../rules/base.xml.in.h:31
-msgid "Acer C300"
-msgstr "Acer C300"
+msgid "Any Win key"
+msgstr "Valfri Win-tangent"
#: ../rules/base.xml.in.h:32
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
+msgid "Any Win key (while pressed)"
+msgstr "Valfri Win-tangent (då den trycks ned)"
#: ../rules/base.xml.in.h:33
-msgid "Acer Laptop"
-msgstr "Bärbar Acer-dator"
+msgid "Apple"
+msgstr "Apple"
#: ../rules/base.xml.in.h:34
-msgid "Add the standard behavior to Menu key"
-msgstr "Lägg till standardbeteendet till Meny-tangenten"
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Apple aluminiumtangentbord (ANSI)"
#: ../rules/base.xml.in.h:35
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Lägger till Esperanto-circumflex (supersigno)"
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Apple aluminiumtangentbord (ISO)"
#: ../rules/base.xml.in.h:36
-msgid "Adding EuroSign to certain keys"
-msgstr "Lägger till eurotecknet till vissa tangenter"
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Apple aluminiumtangentbord (JIS)"
#: ../rules/base.xml.in.h:37
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Apple aluminiumtangentbord: emulera PC-tangenter (Print, Scroll Lock, Pause, Num Lock)"
#: ../rules/base.xml.in.h:38
-msgid "Afg"
-msgstr "Afg"
+msgid "Apple Laptop"
+msgstr "Bärbar Apple-dator"
#: ../rules/base.xml.in.h:39
-msgid "Afghanistan"
-msgstr "Afganistan"
+msgid "Arabic"
+msgstr "Arabisk"
#: ../rules/base.xml.in.h:40
-msgid "Akan"
-msgstr "Akan"
+msgid "Arabic (Buckwalter)"
+msgstr "Arabisk (Buckwalter)"
#: ../rules/base.xml.in.h:41
-msgid "Alb"
-msgstr "Alb"
+msgid "Arabic (Morocco)"
+msgstr "Arabisk (Marocko)"
#: ../rules/base.xml.in.h:42
-msgid "Albania"
-msgstr "Albanien"
+msgid "Arabic (Pakistan)"
+msgstr "Arabisk (Pakistan)"
#: ../rules/base.xml.in.h:43
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt och Meta finns på Alt-tangenterna"
+msgid "Arabic (Syria)"
+msgstr "Arabisk (Syrien)"
#: ../rules/base.xml.in.h:44
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Alt är mappad till högra Win-tangenten och Super till Meny"
+msgid "Arabic (azerty)"
+msgstr "Arabisk (azerty)"
#: ../rules/base.xml.in.h:45
-msgid "Alt+CapsLock"
-msgstr "Alt+CapsLock"
+msgid "Arabic (azerty/digits)"
+msgstr "Arabisk (azerty/siffror)"
#: ../rules/base.xml.in.h:46
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
+msgid "Arabic (digits)"
+msgstr "Arabisk (siffror)"
#: ../rules/base.xml.in.h:47
-msgid "Alt+Shift"
-msgstr "Alt+Skift"
+msgid "Arabic (qwerty)"
+msgstr "Arabisk (qwerty)"
#: ../rules/base.xml.in.h:48
-msgid "Alt+Space"
-msgstr "Alt+Blanksteg"
+msgid "Arabic (qwerty/digits)"
+msgstr "Arabisk (qwerty/siffror)"
#: ../rules/base.xml.in.h:49
-msgid "Alt-Q"
-msgstr "Alt-Q"
+msgid "Armenian"
+msgstr "Armenisk"
#: ../rules/base.xml.in.h:50
-msgid "Alt/Win key behavior"
-msgstr "Alt/Win-tangentbeteende"
+msgid "Armenian (alternative eastern)"
+msgstr "Armenisk (Alternativ östlig)"
#: ../rules/base.xml.in.h:51
-msgid "Alternative"
-msgstr "Alternativ"
+msgid "Armenian (alternative phonetic)"
+msgstr "Armenisk (Alternativ fonetisk)"
#: ../rules/base.xml.in.h:52
-msgid "Alternative Eastern"
-msgstr "Alternativ östlig"
+msgid "Armenian (eastern)"
+msgstr "Armenisk (östlig)"
#: ../rules/base.xml.in.h:53
-msgid "Alternative Phonetic"
-msgstr "Alternativ fonetisk"
+msgid "Armenian (phonetic)"
+msgstr "Armenisk (fonetisk)"
#: ../rules/base.xml.in.h:54
-msgid "Alternative international (former us_intl)"
-msgstr "Alternativ internationell (tidigare us_intl)"
+msgid "Armenian (western)"
+msgstr "Armenisk (västlig)"
#: ../rules/base.xml.in.h:55
-msgid "Alternative, Sun dead keys"
-msgstr "Alternativ, Sun stumma tangenter"
+msgid "Asus Laptop"
+msgstr "Bärbar Asus-dator"
#: ../rules/base.xml.in.h:56
-msgid "Alternative, eliminate dead keys"
-msgstr "Alternativ, eliminera stumma tangenter"
+msgid "At bottom left"
+msgstr "Nere till vänster"
#: ../rules/base.xml.in.h:57
-msgid "Alternative, latin-9 only"
-msgstr "Alternativ, endast latin-9"
+msgid "At left of 'A'"
+msgstr "Vänster om \"A\""
#: ../rules/base.xml.in.h:58
-msgid "And"
-msgstr "And"
+msgid "Avatime"
+msgstr "Avatime"
#: ../rules/base.xml.in.h:59
-msgid "Andorra"
-msgstr "Andorra"
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Azerbajdzjansk (Kyrillisk)"
#: ../rules/base.xml.in.h:60
-msgid "Any Alt key"
-msgstr "Valfri Alt-tangent"
+msgid "Azerbaijani"
+msgstr "Azerbajdzjansk"
#: ../rules/base.xml.in.h:61
-msgid "Any Win key"
-msgstr "Valfri Win-tangent"
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 wireless Internet Keyboard"
#: ../rules/base.xml.in.h:62
-msgid "Any Win key (while pressed)"
-msgstr "Valfri Win-tangent (då den trycks ned)"
+msgid "BTC 5090"
+msgstr "BTC 5090"
#: ../rules/base.xml.in.h:63
-msgid "Apostrophe (') variant"
-msgstr "Apostrof (') variant"
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimedia"
#: ../rules/base.xml.in.h:64
-msgid "Apple"
-msgstr "Apple"
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
#: ../rules/base.xml.in.h:65
-msgid "Apple Laptop"
-msgstr "Bärbar Apple-dator"
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
#: ../rules/base.xml.in.h:66
-msgid "Ara"
-msgstr "Ara"
+msgid "BTC 9000"
+msgstr "BTC 9000"
#: ../rules/base.xml.in.h:67
-msgid "Arabic"
-msgstr "Arabisk"
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
#: ../rules/base.xml.in.h:68
-msgid "Arm"
-msgstr "Arm"
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
#: ../rules/base.xml.in.h:69
-msgid "Armenia"
-msgstr "Armenien"
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
#: ../rules/base.xml.in.h:70
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Asturisk variant med nederpunkts H och nederpunkts L"
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
#: ../rules/base.xml.in.h:71
-msgid "Asus Laptop"
-msgstr "Bärbar Asus-dator"
+msgid "Backslash"
+msgstr "Omvänt snedstreck"
#: ../rules/base.xml.in.h:72
-msgid "At bottom left"
-msgstr "Nere till vänster"
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Omvänt snedstreck väljer tredje nivån, låses när nedtryckt tillsammans med en annan 3rd-level-chooser)"
#: ../rules/base.xml.in.h:73
-msgid "At left of 'A'"
-msgstr "Vänster om \"A\""
+msgid "Bambara"
+msgstr "Bambara"
#: ../rules/base.xml.in.h:74
-msgid "Aze"
-msgstr "Aze"
+msgid "Belarusian"
+msgstr "Vitrysk"
#: ../rules/base.xml.in.h:75
-msgid "Azerbaijan"
-msgstr "Azerbajdzjan"
+msgid "Belarusian (Latin)"
+msgstr "Vitrysk (latin)"
#: ../rules/base.xml.in.h:76
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 wireless Internet Keyboard"
+msgid "Belarusian (legacy)"
+msgstr "Vitrysk (äldre)"
#: ../rules/base.xml.in.h:77
-msgid "BTC 5090"
-msgstr "BTC 5090"
+msgid "Belgian"
+msgstr "Belgisk"
#: ../rules/base.xml.in.h:78
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF Multimedia"
+msgid "Belgian (ISO alternate)"
+msgstr "Belgisk (ISO-alternativ)"
#: ../rules/base.xml.in.h:79
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
+msgid "Belgian (Sun dead keys)"
+msgstr "Belgisk (Sun stumma tangenter)"
#: ../rules/base.xml.in.h:80
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Belgisk (Wang modell 724 azerty)"
#: ../rules/base.xml.in.h:81
-msgid "BTC 9000"
-msgstr "BTC 9000"
+msgid "Belgian (alternative)"
+msgstr "Belgisk (alternativ)"
#: ../rules/base.xml.in.h:82
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Belgisk (alternativ, Sun stumma tangenter)"
#: ../rules/base.xml.in.h:83
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Belgisk (alternativ, endast latin-9)"
#: ../rules/base.xml.in.h:84
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
+msgid "Belgian (eliminate dead keys)"
+msgstr "Belgisk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:85
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
#: ../rules/base.xml.in.h:86
-msgid "Ban"
-msgstr "Ban"
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
#: ../rules/base.xml.in.h:87
-msgid "Bangladesh"
-msgstr "Bangladesh"
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
#: ../rules/base.xml.in.h:88
-msgid "Bashkirian"
-msgstr "Basjkiriska"
+msgid "Bengali"
+msgstr "Bengalisk"
#: ../rules/base.xml.in.h:89
-msgid "Bel"
-msgstr "Bel"
+msgid "Bengali (Probhat)"
+msgstr "Bengali (Probhat)"
#: ../rules/base.xml.in.h:90
-msgid "Belarus"
-msgstr "Vitryssland"
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Berberisk (Marocko, Tifinagh alternativ fonetisk)"
#: ../rules/base.xml.in.h:91
-msgid "Belgium"
-msgstr "Belgien"
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Berberisk (Marocko, Tifinagh alternativ)"
#: ../rules/base.xml.in.h:92
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Berberisk (Marocko, Tifinagh utökad fonetisk)"
#: ../rules/base.xml.in.h:93
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Berberisk (Marocko, Tifinagh utökad)"
#: ../rules/base.xml.in.h:94
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Berberisk (Marocko, Tifinagh fonetisk)"
#: ../rules/base.xml.in.h:95
-msgid "Bengali"
-msgstr "Bengalisk"
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Berberisk (Marocko, Tifinagh)"
#: ../rules/base.xml.in.h:96
-msgid "Bengali Probhat"
-msgstr "Bengali Probhat"
+msgid "Bosnian"
+msgstr "Bosnisk"
#: ../rules/base.xml.in.h:97
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ergonomisk, Dvorak"
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Bosnisk (USA-tangentbord med bosniska digrafer)"
#: ../rules/base.xml.in.h:98
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ergonomisk, Dvorak, endast latin-9"
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Bosnisk (USA-tangentbord med bosniska bokstäver)"
#: ../rules/base.xml.in.h:99
-msgid "Bgr"
-msgstr "Bgr"
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Bosnisk (Använd bosniska digrafer)"
#: ../rules/base.xml.in.h:100
-msgid "Bhu"
-msgstr "Bhu"
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Bosnisk (Använd gåsögon för citattecken)"
#: ../rules/base.xml.in.h:101
-msgid "Bhutan"
-msgstr "Bhutan"
+msgid "Both Alt keys together"
+msgstr "Båda Alt-tangenterna tillsammans"
#: ../rules/base.xml.in.h:102
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Biblisk hebreisk (Tiro)"
+msgid "Both Ctrl keys together"
+msgstr "Båda Ctrl-tangenterna tillsammans"
#: ../rules/base.xml.in.h:103
-msgid "Bih"
-msgstr "Bih"
+msgid "Both Shift keys together"
+msgstr "Båda Skift-tangenterna tillsammans"
#: ../rules/base.xml.in.h:104
-msgid "Blr"
-msgstr "Blr"
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Båda Skift-tangenterna tillsammans aktiverar Caps Lock, en Shift-tangent inaktiverar"
#: ../rules/base.xml.in.h:105
-msgid "Bosnia and Herzegovina"
-msgstr "Bosnien och Herzegovina"
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Båda Skift-tangenterna tillsammans växlar Caps Lock"
#: ../rules/base.xml.in.h:106
-msgid "Both Alt keys together"
-msgstr "Båda Alt-tangenterna tillsammans"
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Båda Skift-tangenterna tillsammans växlar ShiftLock"
#: ../rules/base.xml.in.h:107
-msgid "Both Ctrl keys together"
-msgstr "Båda Ctrl-tangenterna tillsammans"
+msgid "Braille"
+msgstr "Punktskrift"
#: ../rules/base.xml.in.h:108
-msgid "Both Shift keys together"
-msgstr "Båda Skift-tangenterna tillsammans"
+msgid "Braille (left hand)"
+msgstr "Punktskrift (vänster hand)"
#: ../rules/base.xml.in.h:109
-msgid "Bra"
-msgstr "Bra"
+msgid "Braille (right hand)"
+msgstr "Punktskrift (höger hand)"
#: ../rules/base.xml.in.h:110
-msgid "Braille"
-msgstr "Braille"
+msgid "Brother Internet Keyboard"
+msgstr "Brother Internettangentbord"
#: ../rules/base.xml.in.h:111
-msgid "Brazil"
-msgstr "Brasilien"
+msgid "Bulgarian"
+msgstr "Bulgarisk"
#: ../rules/base.xml.in.h:112
-msgid "Breton"
-msgstr "Breton"
+msgid "Bulgarian (new phonetic)"
+msgstr "Bulgarisk (ny fonetisk)"
#: ../rules/base.xml.in.h:113
-msgid "Brl"
-msgstr "Brl"
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Bulgarisk (traditionell fonetisk)"
#: ../rules/base.xml.in.h:114
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internettangentbord"
+msgid "Burmese"
+msgstr "Burmesisk"
#: ../rules/base.xml.in.h:115
-msgid "Buckwalter"
-msgstr "Buckwalter"
+msgid "Canadian Multilingual"
+msgstr "Kanadensisk (flerspråkig)"
#: ../rules/base.xml.in.h:116
-msgid "Bulgaria"
-msgstr "Bulgarien"
+msgid "Canadian Multilingual (first part)"
+msgstr "Kanadensisk flerspråkig (första delen)"
#: ../rules/base.xml.in.h:117
-msgid "CRULP"
-msgstr "CRULP"
+msgid "Canadian Multilingual (second part)"
+msgstr "Kanadensisk flerspråkig (andra delen)"
#: ../rules/base.xml.in.h:118
-msgid "Cambodia"
-msgstr "Cambodia"
+msgid "Caps Lock"
+msgstr "Caps Lock"
#: ../rules/base.xml.in.h:119
-msgid "Can"
-msgstr "Can"
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Caps Lock (väljer tredje nivån, låses när nedtryckt tillsammans med en annan 3rd-level-chooser)"
#: ../rules/base.xml.in.h:120
-msgid "Canada"
-msgstr "Kanada"
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Caps Lock (till första layouten), Skift+Caps Lock (till sista layouten)"
#: ../rules/base.xml.in.h:121
-msgid "Caps Lock"
-msgstr "Caps Lock"
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Caps Lock (när den trycks ned), Alt+Caps Lock gör ursprunglig capslock-åtgärd"
#: ../rules/base.xml.in.h:122
-msgid "CapsLock"
-msgstr "CapsLock"
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock fungerar som Skift med låsning. Skift \"pausar\" Caps Lock"
#: ../rules/base.xml.in.h:123
-msgid "CapsLock (to first layout), Shift+CapsLock (to last layout)"
-msgstr "CapsLock (till första layouten), Skift+CapsLock (till sista layouten)"
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock fungerar som Skift med låsning. Skift påverkar inte Caps Lock"
#: ../rules/base.xml.in.h:124
-msgid "CapsLock (while pressed), Alt+CapsLock does the original capslock action"
-msgstr "CapsLock (när den trycks ned), Alt+CapsLock gör ursprunglig capslock-åtgärd"
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock är inaktiverad"
#: ../rules/base.xml.in.h:125
-msgid "CapsLock acts as Shift with locking. Shift \"pauses\" CapsLock"
-msgstr "CapsLock fungerar som Skift med låsning. Skift \"pausar\" CapsLock"
+msgid "Caps Lock key behavior"
+msgstr "Beteende för Caps Lock-tangenten"
#: ../rules/base.xml.in.h:126
-msgid "CapsLock acts as Shift with locking. Shift doesn't affect CapsLock"
-msgstr "CapsLock fungerar som Skift med låsning. Skift påverkar inte CapsLock"
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Caps Lock växlar Skift så alla tangenter påverkas"
#: ../rules/base.xml.in.h:127
-msgid "CapsLock is disabled"
-msgstr "CapsLock är inaktiverad"
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Caps Lock växlar normalt skiftläge på alfabetiska tecken"
#: ../rules/base.xml.in.h:128
-msgid "CapsLock key behavior"
-msgstr "Beteende för CapsLock-tangenten"
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock använder intern skiftlägesstyrning. Skift \"pausar\" Caps Lock"
#: ../rules/base.xml.in.h:129
-msgid "CapsLock toggles Shift so all keys are affected"
-msgstr "CapsLock växlar Skift så alla tangenter påverkas"
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock använder intern skiftlägesstyrning. Skift påverkar inte Caps Lock"
#: ../rules/base.xml.in.h:130
-msgid "CapsLock toggles normal capitalization of alphabetic characters"
-msgstr "CapsLock växlar normalt skiftläge på alfabetiska tecken"
+msgid "Catalan"
+msgstr "Katalansk"
#: ../rules/base.xml.in.h:131
-msgid "CapsLock uses internal capitalization. Shift \"pauses\" CapsLock"
-msgstr "CapsLock använder intern skiftlägesstyrning. Skift \"pausar\" CapsLock"
-
-#: ../rules/base.xml.in.h:132
-msgid "CapsLock uses internal capitalization. Shift doesn't affect CapsLock"
-msgstr "CapsLock använder intern skiftlägesstyrning. Skift påverkar inte CapsLock"
-
-#: ../rules/base.xml.in.h:133
-msgid "Catalan variant with middle-dot L"
-msgstr "Katalansk variant med mittenpunkts L"
-
-#: ../rules/base.xml.in.h:134
-msgid "Cedilla"
-msgstr "Cedilj"
-
-#: ../rules/base.xml.in.h:135
-msgid "Che"
-msgstr "Che"
-
-#: ../rules/base.xml.in.h:136
msgid "Cherokee"
msgstr "Cherokee"
-#: ../rules/base.xml.in.h:137
+#: ../rules/base.xml.in.h:132
msgid "Cherry B.UNLIMITED"
msgstr "Cherry B.UNLIMITED"
-#: ../rules/base.xml.in.h:138
+#: ../rules/base.xml.in.h:133
msgid "Cherry Blue Line CyBo@rd"
msgstr "Cherry Blue Line CyBo@rd"
-#: ../rules/base.xml.in.h:139
+#: ../rules/base.xml.in.h:134
msgid "Cherry Blue Line CyBo@rd (alternate option)"
msgstr "Cherry Blue Line CyBo@rd (alternativ)"
-#: ../rules/base.xml.in.h:140
+#: ../rules/base.xml.in.h:135
msgid "Cherry CyBo@rd USB-Hub"
msgstr "Cherry CyBo@rd USB-hubb"
-#: ../rules/base.xml.in.h:141
+#: ../rules/base.xml.in.h:136
msgid "Cherry CyMotion Expert"
msgstr "Cherry CyMotion Expert"
-#: ../rules/base.xml.in.h:142
+#: ../rules/base.xml.in.h:137
msgid "Cherry CyMotion Master Linux"
msgstr "Cherry CyMotion Master Linux"
-#: ../rules/base.xml.in.h:143
+#: ../rules/base.xml.in.h:138
msgid "Cherry CyMotion Master XPress"
msgstr "Cherry CyMotion Master XPress"
-#: ../rules/base.xml.in.h:144
+#: ../rules/base.xml.in.h:139
msgid "Chicony Internet Keyboard"
msgstr "Chicony Internettangentbord"
-#: ../rules/base.xml.in.h:145
+#: ../rules/base.xml.in.h:140
msgid "Chicony KB-9885"
msgstr "Chicony KB-9885"
-#: ../rules/base.xml.in.h:146
+#: ../rules/base.xml.in.h:141
msgid "Chicony KU-0108"
msgstr "Chicony KU-0108"
-#: ../rules/base.xml.in.h:147
+#: ../rules/base.xml.in.h:142
msgid "Chicony KU-0420"
msgstr "Chicony KU-0420"
+#: ../rules/base.xml.in.h:143
+msgid "Chinese"
+msgstr "Kinesisk"
+
+#: ../rules/base.xml.in.h:144
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Kinesisk (Tibetansk med ASCII-taltecken)"
+
+#: ../rules/base.xml.in.h:145
+msgid "Chinese (Tibetan)"
+msgstr "Kinesisk (Tibetansk)"
+
+#: ../rules/base.xml.in.h:146
+msgid "Chinese (Uyghur)"
+msgstr "Kinesisk (Uyghur)"
+
+#: ../rules/base.xml.in.h:147
+msgid "Classmate PC"
+msgstr "Classmate PC"
+
#: ../rules/base.xml.in.h:148
-msgid "China"
-msgstr "Kina"
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access-tangentbord"
#: ../rules/base.xml.in.h:149
-msgid "Chuvash"
-msgstr "Tjuvasjiska"
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internettangentbord (13 tangenter)"
#: ../rules/base.xml.in.h:150
-msgid "Chuvash Latin"
-msgstr "Tjuvasjiska latin"
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internettangentbord (18 tangenter)"
#: ../rules/base.xml.in.h:151
-msgid "Classic"
-msgstr "Klassisk"
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internettangentbord (7 tangenter)"
#: ../rules/base.xml.in.h:152
-msgid "Classic Dvorak"
-msgstr "Klassisk Dvorak"
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq-tangentbord"
#: ../rules/base.xml.in.h:153
-msgid "Classmate PC"
-msgstr "Classmate PC"
+msgid "Compose key position"
+msgstr "Position för Compose-tangenten"
#: ../rules/base.xml.in.h:154
-msgid "CloGaelach"
-msgstr "CloGaelach"
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Backsteg"
#: ../rules/base.xml.in.h:155
-msgid "Colemak"
-msgstr "Colemak"
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control är mappad till Win-tangenterna, Alt-tangenten är mappad till Win-tangenterna"
#: ../rules/base.xml.in.h:156
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access-tangentbord"
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control är mappad till Win-tangenterna (och de vanliga Ctrl-tangenterna)"
#: ../rules/base.xml.in.h:157
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internettangentbord (13 tangenter)"
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
#: ../rules/base.xml.in.h:158
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internettangentbord (18 tangenter)"
+msgid "Croatian"
+msgstr "Kroatisk"
#: ../rules/base.xml.in.h:159
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internettangentbord (7 tangenter)"
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Kroatisk (USA-tangentbord med kroatiska digrafer)"
#: ../rules/base.xml.in.h:160
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq-tangentbord"
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Kroatisk (USA-tangentbord med kroatiska bokstäver)"
#: ../rules/base.xml.in.h:161
-msgid "Compose key position"
-msgstr "Position för Compose-tangenten"
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Kroatisk (Använd kroatiska digrafer)"
#: ../rules/base.xml.in.h:162
-msgid "Congo, Democratic Republic of the"
-msgstr "Kongo, Demokratiska republiken"
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Kroatisk (Använd gåsögon för citattecken)"
#: ../rules/base.xml.in.h:163
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Backsteg"
+msgid "Ctrl key position"
+msgstr "Position för Ctrl-tangenten"
#: ../rules/base.xml.in.h:164
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Control är mappad till Win-tangenterna, Alt-tangenten är mappad till Win-tangenterna"
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Skift"
#: ../rules/base.xml.in.h:165
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control är mappad till Win-tangenterna (och de vanliga Ctrl-tangenterna)"
+msgid "Czech"
+msgstr "Tjeckisk"
#: ../rules/base.xml.in.h:166
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Tjeckisk (UCW-layout endast bokstäver med accenter)"
#: ../rules/base.xml.in.h:167
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Krimtatariska (Dobruca-1 Q)"
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Tjeckisk (US Dvorak med CZ UCW-stöd)"
#: ../rules/base.xml.in.h:168
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Krimtatariska (Dobruca-2 Q)"
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Tjeckisk (Med &lt;\\|&gt;-tangent)"
#: ../rules/base.xml.in.h:169
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Krimtatariska (Turkiska Alt-Q)"
+msgid "Czech (qwerty)"
+msgstr "Tjeckisk (qwerty)"
#: ../rules/base.xml.in.h:170
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Krimtatariska (Turkiska F)"
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Tjeckisk (qwerty, utökat omvänt snedstreck)"
#: ../rules/base.xml.in.h:171
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Krimtatariska (Turkiska Q)"
+msgid "DTK2000"
+msgstr "DTK2000"
#: ../rules/base.xml.in.h:172
-msgid "Croatia"
-msgstr "Kroatien"
+msgid "Danish"
+msgstr "Dansk"
#: ../rules/base.xml.in.h:173
-msgid "Ctrl key position"
-msgstr "Position för Ctrl-tangenten"
+msgid "Danish (Dvorak)"
+msgstr "Dansk (Dvorak)"
#: ../rules/base.xml.in.h:174
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Skift"
+msgid "Danish (Mac)"
+msgstr "Dansk (Mac)"
#: ../rules/base.xml.in.h:175
-msgid "Cyrillic"
-msgstr "Kyrillisk"
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Dansk (Mac, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:176
-msgid "Cyrillic with guillemets"
-msgstr "Kyrillisk med gåsögon"
+msgid "Danish (eliminate dead keys)"
+msgstr "Dansk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:177
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Kyrillisk, Z och ZHE utbytta"
+msgid "Default numeric keypad keys"
+msgstr "Standardtangenter för numeriskt tangentbord"
#: ../rules/base.xml.in.h:178
-msgid "Cze"
-msgstr "Cze"
+msgid "Dell"
+msgstr "Dell"
#: ../rules/base.xml.in.h:179
-msgid "Czechia"
-msgstr "Tjeckien"
+msgid "Dell 101-key PC"
+msgstr "Dell 101-tangenters PC"
#: ../rules/base.xml.in.h:180
-msgid "DOS"
-msgstr "DOS"
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Bärbar Dell Inspiron 6xxx/8xxx"
#: ../rules/base.xml.in.h:181
-msgid "DRC"
-msgstr "DRC"
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Bärbar Dell Precision M series"
#: ../rules/base.xml.in.h:182
-msgid "DTK2000"
-msgstr "DTK2000"
+msgid "Dell Latitude series laptop"
+msgstr "Bärbar Dell Latitude-serien"
#: ../rules/base.xml.in.h:183
-msgid "Dan"
-msgstr "Dan"
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
#: ../rules/base.xml.in.h:184
-msgid "Dead acute"
-msgstr "Stum akut accent"
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
#: ../rules/base.xml.in.h:185
-msgid "Dead grave acute"
-msgstr "Stum grav och akut accent"
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
#: ../rules/base.xml.in.h:186
-msgid "Default numeric keypad keys"
-msgstr "Standardtangenter för numeriskt tangentbord"
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB-multimediatangentbord"
#: ../rules/base.xml.in.h:187
-msgid "Dell"
-msgstr "Dell"
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa trådlöst skrivbordstangentbord"
#: ../rules/base.xml.in.h:188
-msgid "Dell 101-key PC"
-msgstr "Dell 101-tangenters PC"
+msgid "Dhivehi"
+msgstr "Dhivehi"
#: ../rules/base.xml.in.h:189
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Bärbar Dell Inspiron 6xxx/8xxx"
+msgid "Diamond 9801 / 9802 series"
+msgstr "Diamond 9801/9802-serien"
#: ../rules/base.xml.in.h:190
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Bärbar Dell Precision M series"
+msgid "Dutch"
+msgstr "Nederländsk"
#: ../rules/base.xml.in.h:191
-msgid "Dell Latitude series laptop"
-msgstr "Bärbar Dell Latitude-serien"
+msgid "Dutch (Mac)"
+msgstr "Nederländsk (Mac)"
#: ../rules/base.xml.in.h:192
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
+msgid "Dutch (Sun dead keys)"
+msgstr "Nederländsk (Sun stumma tangenter)"
#: ../rules/base.xml.in.h:193
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
+msgid "Dutch (standard)"
+msgstr "Nederländsk (standard)"
#: ../rules/base.xml.in.h:194
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
+msgid "Dzongkha"
+msgstr "Dzongkha"
#: ../rules/base.xml.in.h:195
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell USB-multimediatangentbord"
+msgid "Enable extra typographic characters"
+msgstr "Aktivera extra typografiska tecken"
#: ../rules/base.xml.in.h:196
-msgid "Denmark"
-msgstr "Danmark"
+msgid "English (Canada)"
+msgstr "Engelsk (Kanada)"
#: ../rules/base.xml.in.h:197
-msgid "Deu"
-msgstr "Deu"
+msgid "English (Colemak)"
+msgstr "Engelsk (Colemak)"
#: ../rules/base.xml.in.h:198
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa trådlöst skrivbordstangentbord"
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Engelsk (Dvorak alternativ internationell utan stumma tangenter)"
#: ../rules/base.xml.in.h:199
-msgid "Diamond 9801 / 9802 series"
-msgstr "Diamond 9801/9802-serien"
+msgid "English (Dvorak international with dead keys)"
+msgstr "Engelsk (Dvorak Internationell med stumma tangenter)"
#: ../rules/base.xml.in.h:200
-msgid "Dvorak"
-msgstr "Dvorak"
+msgid "English (Dvorak)"
+msgstr "Engelsk (Dvorak)"
#: ../rules/base.xml.in.h:201
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvorak (brittisk-engelska skiljetecken)"
+msgid "English (Ghana)"
+msgstr "Engelsk (Ghana)"
#: ../rules/base.xml.in.h:202
-msgid "Dvorak international"
-msgstr "Dvorak internationell"
+msgid "English (Ghana, GILLBT)"
+msgstr "Engelsk (Ghana, GILLBT)"
#: ../rules/base.xml.in.h:203
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Dvorak, polska citattecken på tangent 1"
+msgid "English (Ghana, multilingual)"
+msgstr "Engelsk (Ghana, flerspråkig)"
#: ../rules/base.xml.in.h:204
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Dvorak, polska citattecken på citattangent"
+msgid "English (India, with RupeeSign)"
+msgstr "Engelsk (Indien, med RupeeSign)"
#: ../rules/base.xml.in.h:205
-msgid "E"
-msgstr "E"
+msgid "English (Macintosh)"
+msgstr "Engelsk (Macintosh)"
#: ../rules/base.xml.in.h:206
-msgid "Eastern"
-msgstr "Östlig"
+msgid "English (Mali, USA Mac)"
+msgstr "Engelsk (Mali, USA Mac)"
#: ../rules/base.xml.in.h:207
-msgid "Eliminate dead keys"
-msgstr "Eliminera stumma tangenter"
+msgid "English (Mali, USA international)"
+msgstr "Engelsk (Mali, USA internationell)"
#: ../rules/base.xml.in.h:208
-msgid "Enable extra typographic characters"
-msgstr "Aktivera extra typografiska tecken"
+msgid "English (Nigeria)"
+msgstr "Engelsk (Nigeria)"
#: ../rules/base.xml.in.h:209
-msgid "English"
-msgstr "Engelsk"
+msgid "English (South Africa)"
+msgstr "Engelsk (Sydafrika)"
#: ../rules/base.xml.in.h:210
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
+msgid "English (UK)"
+msgstr "Engelsk (Storbritannien)"
#: ../rules/base.xml.in.h:211
-msgid "Enter on keypad"
-msgstr "Enter på numeriskt tangentbord"
+msgid "English (UK, Colemak)"
+msgstr "Engelsk (Storbritannien, Colemak)"
#: ../rules/base.xml.in.h:212
-msgid "Epo"
-msgstr "Epo"
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Engelsk (Storbritannien, Dvorak brittisk-engelska skiljetecken)"
#: ../rules/base.xml.in.h:213
-msgid "Ergonomic"
-msgstr "Ergonomisk"
+msgid "English (UK, Dvorak)"
+msgstr "Engelsk (Storbritannien, Dvorak)"
#: ../rules/base.xml.in.h:214
-msgid "Esp"
-msgstr "Esp"
+msgid "English (UK, Mac international)"
+msgstr "Engelsk (Storbritannien, Mac internationell)"
#: ../rules/base.xml.in.h:215
-msgid "Esperanto"
-msgstr "Esperanto"
+msgid "English (UK, Mac)"
+msgstr "Engelsk (Storbritannien, Mac)"
#: ../rules/base.xml.in.h:216
-msgid "Est"
-msgstr "Est"
+msgid "English (UK, extended, WinKeys)"
+msgstr "Engelsk (Storbritannien, utökat, Windows-tangenter)"
#: ../rules/base.xml.in.h:217
-msgid "Estonia"
-msgstr "Estland"
+msgid "English (UK, international with dead keys)"
+msgstr "Engelsk (Storbritannien, internationell med stumma tangenter)"
#: ../rules/base.xml.in.h:218
-msgid "Eth"
-msgstr "Eth"
+msgid "English (US)"
+msgstr "Engelsk (USA)"
#: ../rules/base.xml.in.h:219
-msgid "Ethiopia"
-msgstr "Etiopien"
+msgid "English (US, alternative international)"
+msgstr "Engelsk (USA, alternativ internationell)"
#: ../rules/base.xml.in.h:220
-msgid "Evdev-managed keyboard"
-msgstr "Evdev-hanterat tangentbord"
+msgid "English (US, international with dead keys)"
+msgstr "Engelsk (USA, internationell med stumma tangenter)"
#: ../rules/base.xml.in.h:221
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
+msgid "English (US, with euro on 5)"
+msgstr "Engelsk (US, med euro på 5)"
#: ../rules/base.xml.in.h:222
-msgid "Ewe"
-msgstr "Ewe"
+msgid "English (classic Dvorak)"
+msgstr "Engelsk (klassisk Dvorak)"
#: ../rules/base.xml.in.h:223
-msgid "Extended"
-msgstr "Utökad"
+msgid "English (international AltGr dead keys)"
+msgstr "Engelsk (internationell AltGr med stumma tangenter)"
#: ../rules/base.xml.in.h:224
-msgid "Extended - Winkeys"
-msgstr "Utökat - Windows-tangenter"
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Engelsk (layoutväxling på multiplicera/dividera-tangent)"
#: ../rules/base.xml.in.h:225
-msgid "Extended Backslash"
-msgstr "Utökat omvänt snedstreck"
+msgid "English (left handed Dvorak)"
+msgstr "Engelsk (vänsterhänt Dvorak)"
#: ../rules/base.xml.in.h:226
-msgid "F-letter (F) variant"
-msgstr "F-bokstavs (F) variant"
+msgid "English (programmer Dvorak)"
+msgstr "Engelsk (Dvorak för programmerare)"
#: ../rules/base.xml.in.h:227
-msgid "FL90"
-msgstr "FL90"
+msgid "English (right handed Dvorak)"
+msgstr "Engelsk (högerhänt Dvorak)"
#: ../rules/base.xml.in.h:228
-msgid "Fao"
-msgstr "Fao"
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
#: ../rules/base.xml.in.h:229
-msgid "Faroe Islands"
-msgstr "Färöarna"
+msgid "Enter on keypad"
+msgstr "Enter på numeriskt tangentbord"
#: ../rules/base.xml.in.h:230
-msgid "Fin"
-msgstr "Fin"
+msgid "Esperanto"
+msgstr "Esperanto"
#: ../rules/base.xml.in.h:231
-msgid "Finland"
-msgstr "Finland"
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Esperanto (flyttat semikolon och citattecken, föråldrat)"
+
+#: ../rules/base.xml.in.h:232
+msgid "Estonian"
+msgstr "Estnisk"
+
+#: ../rules/base.xml.in.h:233
+msgid "Estonian (Dvorak)"
+msgstr "Estnisk (Dvorak)"
-#. This assumes the KP_ abstract symbols are actually useful for some apps
-#. The description needs to be rewritten
#: ../rules/base.xml.in.h:234
-msgid "Four-level key with abstract separators"
-msgstr "Fjärdenivåstangent med abstrakta avgränsare"
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Estnisk (USA-tangentbord med estniska bokstäver)"
#: ../rules/base.xml.in.h:235
-msgid "Four-level key with comma"
-msgstr "Fjärdenivåstangent med komma"
+msgid "Estonian (eliminate dead keys)"
+msgstr "Estnisk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:236
-msgid "Four-level key with dot"
-msgstr "Fjärdenivåstangent med punkt"
+msgid "Euro on 2"
+msgstr "Euro på 2"
#: ../rules/base.xml.in.h:237
-msgid "Four-level key with dot, latin-9 restriction"
-msgstr "Fjärdenivåstangent med punkt, latin-9-begränsning"
+msgid "Euro on 4"
+msgstr "Euro på 4"
#: ../rules/base.xml.in.h:238
-msgid "Four-level key with momayyez"
-msgstr "Fjärdenivåstangent med momayyez"
+msgid "Euro on 5"
+msgstr "Euro på 5"
#: ../rules/base.xml.in.h:239
-msgid "Fra"
-msgstr "Fra"
+msgid "Euro on E"
+msgstr "Euro på E"
#: ../rules/base.xml.in.h:240
-msgid "France"
-msgstr "Frankrike"
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
#: ../rules/base.xml.in.h:241
-msgid "French"
-msgstr "Fransk"
+msgid "Ewe"
+msgstr "Ewe"
#: ../rules/base.xml.in.h:242
-msgid "French (Macintosh)"
-msgstr "Fransk (Macintosh)"
+msgid "FL90"
+msgstr "FL90"
#: ../rules/base.xml.in.h:243
-msgid "French (legacy)"
-msgstr "Fransk (äldre)"
+msgid "Faroese"
+msgstr "Färöisk"
#: ../rules/base.xml.in.h:244
-msgid "French Dvorak"
-msgstr "Fransk Dvorak"
+msgid "Faroese (eliminate dead keys)"
+msgstr "Färöisk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:245
-msgid "French, Sun dead keys"
-msgstr "Fransk, Sun stumma tangenter"
+msgid "Filipino"
+msgstr "Filipino"
#: ../rules/base.xml.in.h:246
-msgid "French, eliminate dead keys"
-msgstr "Fransk, eliminera stumma tangenter"
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Filipino (Capewell-Dvorak Baybayin)"
#: ../rules/base.xml.in.h:247
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Fujitsu-Siemens Computers AMILO bärbar dator"
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Filipino (Capewell-Dvorak Latin)"
#: ../rules/base.xml.in.h:248
-msgid "Fula"
-msgstr "Fula"
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Filipino (Capewell-QWERF 2006 Baybayin)"
#: ../rules/base.xml.in.h:249
-msgid "GBr"
-msgstr "GBr"
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Filipino (Capewell-QWERF 2006 Latin)"
#: ../rules/base.xml.in.h:250
-msgid "Ga"
-msgstr "Ga"
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Filipino (Colemak Baybayin)"
#: ../rules/base.xml.in.h:251
-msgid "Generic 101-key PC"
-msgstr "Allmän 101-tangenters PC"
+msgid "Filipino (Colemak Latin)"
+msgstr "Filipino (Colemak Latin)"
#: ../rules/base.xml.in.h:252
-msgid "Generic 102-key (Intl) PC"
-msgstr "Allmän 102-tangenters (internationell) PC"
+msgid "Filipino (Dvorak Latin)"
+msgstr "Filipino (Dvorak Latin)"
#: ../rules/base.xml.in.h:253
-msgid "Generic 104-key PC"
-msgstr "Allmän 104-tangenters PC"
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Filipino (QWERTY Baybayin)"
#: ../rules/base.xml.in.h:254
-msgid "Generic 105-key (Intl) PC"
-msgstr "Allmän 105-tangenters (internationell) PC"
+msgid "Finnish"
+msgstr "Finsk"
#: ../rules/base.xml.in.h:255
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-12e"
+msgid "Finnish (Mac)"
+msgstr "Finsk (Mac)"
#: ../rules/base.xml.in.h:256
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM-tangentbord KWD-910"
+msgid "Finnish (classic)"
+msgstr "Finsk (klassisk)"
#: ../rules/base.xml.in.h:257
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Finsk (klassisk, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:258
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
-
-#: ../rules/base.xml.in.h:259
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
-
-#: ../rules/base.xml.in.h:260
-msgid "Geo"
-msgstr "Geo"
+msgid "Finnish (northern Saami)"
+msgstr "Finsk (nordsamisk)"
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
#: ../rules/base.xml.in.h:261
-msgid "Georgia"
-msgstr "Georgien"
+msgid "Four-level key with abstract separators"
+msgstr "Fjärdenivåstangent med abstrakta avgränsare"
#: ../rules/base.xml.in.h:262
-msgid "Georgian"
-msgstr "Georgisk"
+msgid "Four-level key with comma"
+msgstr "Fjärdenivåstangent med komma"
#: ../rules/base.xml.in.h:263
-msgid "Georgian AZERTY Tskapo"
-msgstr "Georgian AZERTY Tskapo"
+msgid "Four-level key with dot"
+msgstr "Fjärdenivåstangent med punkt"
#: ../rules/base.xml.in.h:264
-msgid "German (Macintosh)"
-msgstr "Tysk (Macintosh)"
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr "Fjärdenivåstangent med punkt, latin-9-begränsning"
#: ../rules/base.xml.in.h:265
-msgid "German, Sun dead keys"
-msgstr "Tysk, Sun stumma tangenter"
+msgid "Four-level key with momayyez"
+msgstr "Fjärdenivåstangent med momayyez"
#: ../rules/base.xml.in.h:266
-msgid "German, eliminate dead keys"
-msgstr "Tysk, eliminera stumma tangenter"
+msgid "French"
+msgstr "Fransk"
#: ../rules/base.xml.in.h:267
-msgid "Germany"
-msgstr "Tyskland"
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Fransk (Bepo, ergonomisk, Dvorak-liknande)"
#: ../rules/base.xml.in.h:268
-msgid "Gha"
-msgstr "Gha"
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Fransk (Bepo, ergonomisk, Dvorak-liknande, endast latin-9)"
#: ../rules/base.xml.in.h:269
-msgid "Ghana"
-msgstr "Ghana"
+msgid "French (Breton)"
+msgstr "Fransk (Bretagnsk)"
#: ../rules/base.xml.in.h:270
-msgid "Gre"
-msgstr "Gre"
+msgid "French (Canada, Dvorak)"
+msgstr "Fransk (Kanada, Dvorak)"
#: ../rules/base.xml.in.h:271
-msgid "Greece"
-msgstr "Grekland"
+msgid "French (Canada, legacy)"
+msgstr "Fransk (Kanada, äldre)"
#: ../rules/base.xml.in.h:272
-msgid "Group toggle on multiply/divide key"
-msgstr "Gruppväxling på multiplicera/dividera-tangent"
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Fransk (Demokratiska republiken Kongo)"
#: ../rules/base.xml.in.h:273
-msgid "Gui"
-msgstr "Gui"
+msgid "French (Dvorak)"
+msgstr "Fransk (Dvorak)"
#: ../rules/base.xml.in.h:274
-msgid "Guinea"
-msgstr "Guinea"
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Frensk (Georgisk AZERTY Tskapo)"
#: ../rules/base.xml.in.h:275
-msgid "Gujarati"
-msgstr "Gujaratisk"
+msgid "French (Guinea)"
+msgstr "Fransk (Guinea)"
#: ../rules/base.xml.in.h:276
-msgid "Gurmukhi"
-msgstr "Gurmukhisk"
+msgid "French (Mac)"
+msgstr "Fransk (Mac)"
#: ../rules/base.xml.in.h:277
-msgid "Gurmukhi Jhelum"
-msgstr "Gurmukhi Jhelum"
+msgid "French (Mali, alternative)"
+msgstr "Fransk (Mali, alternativ)"
#: ../rules/base.xml.in.h:278
-msgid "Gyration"
-msgstr "Gyration"
+msgid "French (Morocco)"
+msgstr "Fransk (Marocko)"
#: ../rules/base.xml.in.h:279
-msgid "Happy Hacking Keyboard"
-msgstr "Happy Hacking-tangentbord"
+msgid "French (Occitan)"
+msgstr "Fransk (Occitan)"
#: ../rules/base.xml.in.h:280
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Happy Hacking-tangentbord för Mac"
+msgid "French (Sun dead keys)"
+msgstr "Fransk (Sun stumma tangenter)"
#: ../rules/base.xml.in.h:281
-msgid "Hausa"
-msgstr "Hausa"
+msgid "French (Switzerland)"
+msgstr "Fransk (Schweiz)"
#: ../rules/base.xml.in.h:282
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internettangentbord"
+msgid "French (Switzerland, Mac)"
+msgstr "Fransk (Schweiz, Mac)"
#: ../rules/base.xml.in.h:283
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Bärbar Hewlett-Packard Mini 110"
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Fransk (Schweiz, Sun stumma tangenter)"
#: ../rules/base.xml.in.h:284
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Fransk (Schweiz, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:285
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
+msgid "French (alternative)"
+msgstr "Fransk (alternativ)"
#: ../rules/base.xml.in.h:286
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
+msgid "French (alternative, Sun dead keys)"
+msgstr "Fransk (alternativ, Sun stumma tangenter)"
#: ../rules/base.xml.in.h:287
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Fransk (alternativ, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:288
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
+msgid "French (alternative, latin-9 only)"
+msgstr "Fransk (alternativ, endast latin-9)"
#: ../rules/base.xml.in.h:289
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
+msgid "French (eliminate dead keys)"
+msgstr "Fransk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:290
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
+msgid "French (legacy alternative)"
+msgstr "Fransk (äldre alternativ)"
#: ../rules/base.xml.in.h:291
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Fransk (äldre, alternativ, Sun stumma tangenter)"
#: ../rules/base.xml.in.h:292
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Fransk (äldre, alternativ, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:293
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Fujitsu-Siemens Computers AMILO bärbar dator"
#: ../rules/base.xml.in.h:294
-msgid "Hexadecimal"
-msgstr "Hexadecimal"
+msgid "Fula"
+msgstr "Fula"
#: ../rules/base.xml.in.h:295
-msgid "Hindi Bolnagri"
-msgstr "Hindi bolnagri"
+msgid "GBr"
+msgstr "GBr"
#: ../rules/base.xml.in.h:296
-msgid "Hindi Wx"
-msgstr "Hindi Wx"
+msgid "Ga"
+msgstr "Ga"
#: ../rules/base.xml.in.h:297
-msgid "Homophonic"
-msgstr "Homofonisk"
+msgid "Generic 101-key PC"
+msgstr "Allmän 101-tangenters PC"
#: ../rules/base.xml.in.h:298
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
+msgid "Generic 102-key (Intl) PC"
+msgstr "Allmän 102-tangenters (internationell) PC"
#: ../rules/base.xml.in.h:299
-msgid "Hrv"
-msgstr "Hrv"
+msgid "Generic 104-key PC"
+msgstr "Allmän 104-tangenters PC"
#: ../rules/base.xml.in.h:300
-msgid "Hun"
-msgstr "Hun"
+msgid "Generic 105-key (Intl) PC"
+msgstr "Allmän 105-tangenters (internationell) PC"
#: ../rules/base.xml.in.h:301
-msgid "Hungary"
-msgstr "Ungern"
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
#: ../rules/base.xml.in.h:302
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper är mappad till Win-tangenterna"
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM-tangentbord KWD-910"
#: ../rules/base.xml.in.h:303
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
#: ../rules/base.xml.in.h:304
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
#: ../rules/base.xml.in.h:305
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
#: ../rules/base.xml.in.h:306
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
+msgid "Georgian"
+msgstr "Georgisk"
#: ../rules/base.xml.in.h:307
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+msgid "Georgian (MESS)"
+msgstr "Georgisk (MESS)"
#: ../rules/base.xml.in.h:308
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
+msgid "Georgian (Ossetian)"
+msgstr "Georgisk (Ossetiansk)"
#: ../rules/base.xml.in.h:309
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgid "Georgian (ergonomic)"
+msgstr "Georgisk (ergonomisk)"
#: ../rules/base.xml.in.h:310
-msgid "ISO Alternate"
-msgstr "ISO-alternativ"
+msgid "German"
+msgstr "Tysk"
#: ../rules/base.xml.in.h:311
-msgid "Iceland"
-msgstr "Island"
+msgid "German (Austria)"
+msgstr "Tysk (Österrike)"
#: ../rules/base.xml.in.h:312
-msgid "Igbo"
-msgstr "Igbo"
+msgid "German (Austria, Mac)"
+msgstr "Tysk (Österrike, Mac)"
#: ../rules/base.xml.in.h:313
-msgid "Include dead tilde"
-msgstr "Inkludera dött tilde-tecken"
+msgid "German (Austria, Sun dead keys)"
+msgstr "Tysk (Österrike, Sun stumma tangenter)"
#: ../rules/base.xml.in.h:314
-msgid "Ind"
-msgstr "Ind"
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Tysk (Österrike, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:315
-msgid "India"
-msgstr "Indien"
+msgid "German (Dvorak)"
+msgstr "Tysk (Dvorak)"
#: ../rules/base.xml.in.h:316
-msgid "International (AltGr dead keys)"
-msgstr "Internationell (AltGr med stumma tangenter)"
+msgid "German (Mac)"
+msgstr "Tysk (Mac)"
#: ../rules/base.xml.in.h:317
-msgid "International (with dead keys)"
-msgstr "Internationell (med stumma tangenter)"
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Tysk (Mac, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:318
-msgid "Inuktitut"
-msgstr "Inuktitut"
+msgid "German (Neo 2)"
+msgstr "Tysk (Neo 2)"
#: ../rules/base.xml.in.h:319
-msgid "Iran"
-msgstr "Iran"
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Tysk (Rumänskt tangentbord med tyska bokstäver)"
#: ../rules/base.xml.in.h:320
-msgid "Iraq"
-msgstr "Irak"
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Tysk (Rumänskt tangentbord med tyska bokstäver, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:321
-msgid "Ireland"
-msgstr "Irland"
+msgid "German (Sun dead keys)"
+msgstr "Tysk (Sun stumma tangenter)"
#: ../rules/base.xml.in.h:322
-msgid "Irl"
-msgstr "Irl"
+msgid "German (Switzerland, Mac)"
+msgstr "Tysk (Schweiz, Mac)"
#: ../rules/base.xml.in.h:323
-msgid "Irn"
-msgstr "Irn"
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Tysk (Schweiz, Sun stumma tangenter)"
#: ../rules/base.xml.in.h:324
-msgid "Irq"
-msgstr "Irk"
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Tysk (Schweiz, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:325
-msgid "Isl"
-msgstr "Isl"
+msgid "German (dead acute)"
+msgstr "Tysk (stumma akutaccent)"
#: ../rules/base.xml.in.h:326
-msgid "Isr"
-msgstr "Isr"
+msgid "German (dead grave acute)"
+msgstr "Tysk (stum grav accent)"
#: ../rules/base.xml.in.h:327
-msgid "Israel"
-msgstr "Israel"
+msgid "German (eliminate dead keys)"
+msgstr "Tysk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:328
-msgid "Ita"
-msgstr "Ita"
+msgid "German (lower Sorbian qwertz)"
+msgstr "Tysk (lågsorbisk qwertz)"
#: ../rules/base.xml.in.h:329
-msgid "Italy"
-msgstr "Italien"
+msgid "German (lower Sorbian)"
+msgstr "Tysk (lågsorbisk)"
#: ../rules/base.xml.in.h:330
-msgid "Japan"
-msgstr "Japan"
+msgid "German (qwerty)"
+msgstr "Tysk (qwerty)"
#: ../rules/base.xml.in.h:331
-msgid "Japan (PC-98xx Series)"
-msgstr "Japan (PC-98xx-serien)"
+msgid "Greek"
+msgstr "Grekisk"
#: ../rules/base.xml.in.h:332
-msgid "Japanese keyboard options"
-msgstr "Tangentbordsalternativ för japanska"
+msgid "Greek (eliminate dead keys)"
+msgstr "Grekisk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:333
-msgid "Jpn"
-msgstr "Jpn"
+msgid "Greek (extended)"
+msgstr "Grekisk (utökad)"
#: ../rules/base.xml.in.h:334
-msgid "Kalmyk"
-msgstr "Kalmyk"
+msgid "Greek (polytonic)"
+msgstr "Grekisk (polytonisk)"
-# Även kanaresisk (äldre form)
#: ../rules/base.xml.in.h:335
-msgid "Kana"
-msgstr "Kana"
+msgid "Greek (simple)"
+msgstr "Grekisk (enkel)"
#: ../rules/base.xml.in.h:336
-msgid "Kana Lock key is locking"
-msgstr "Kana Lock-tangent låser"
+msgid "Gujarati"
+msgstr "Gujaratisk"
-# Även kanaresisk (äldre form)
#: ../rules/base.xml.in.h:337
-msgid "Kannada"
-msgstr "Kannada"
+msgid "Gyration"
+msgstr "Gyration"
#: ../rules/base.xml.in.h:338
-msgid "Kashubian"
-msgstr "Kashubian"
+msgid "HTC Dream"
+msgstr "HTC Dream"
#: ../rules/base.xml.in.h:339
-msgid "Kaz"
-msgstr "Kaz"
+msgid "Happy Hacking Keyboard"
+msgstr "Happy Hacking-tangentbord"
#: ../rules/base.xml.in.h:340
-msgid "Kazakh with Russian"
-msgstr "Kazakisk med ryska"
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Happy Hacking-tangentbord för Mac"
#: ../rules/base.xml.in.h:341
-msgid "Kazakhstan"
-msgstr "Kazakstan"
+msgid "Hausa"
+msgstr "Hausa"
#: ../rules/base.xml.in.h:342
-msgid "Key sequence to kill the X server"
-msgstr "Tangentsekvens för att döda X-servern"
+msgid "Hebrew"
+msgstr "Hebreisk"
#: ../rules/base.xml.in.h:343
-msgid "Key to choose 3rd level"
-msgstr "Tangent för att välja tredje nivå"
+msgid "Hebrew (Phonetic)"
+msgstr "Hebreisk (fonetisk)"
#: ../rules/base.xml.in.h:344
-msgid "Key(s) to change layout"
-msgstr "Tangent(er) för att byta layout"
+msgid "Hebrew (Tiro)"
+msgstr "Hebreisk (Tiro)"
#: ../rules/base.xml.in.h:345
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
+msgid "Hebrew (lyx)"
+msgstr "Hebreisk (lyx)"
#: ../rules/base.xml.in.h:346
-msgid "Kgz"
-msgstr "Kgz"
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internettangentbord"
#: ../rules/base.xml.in.h:347
-msgid "Khm"
-msgstr "Khm"
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Bärbar Hewlett-Packard Mini 110"
#: ../rules/base.xml.in.h:348
-msgid "Komi"
-msgstr "Komi"
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
#: ../rules/base.xml.in.h:349
-msgid "Kor"
-msgstr "Kor"
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
#: ../rules/base.xml.in.h:350
-msgid "Korea, Republic of"
-msgstr "Korea, Republiken"
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
#: ../rules/base.xml.in.h:351
-msgid "Ktunaxa"
-msgstr "Ktunaxa"
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
#: ../rules/base.xml.in.h:352
-msgid "Kurdish, (F)"
-msgstr "Kurdisk, (F)"
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
#: ../rules/base.xml.in.h:353
-msgid "Kurdish, Arabic-Latin"
-msgstr "Kurdisk, Arabisk-Latin"
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
#: ../rules/base.xml.in.h:354
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Kurdisk, Latin Alt-Q"
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
#: ../rules/base.xml.in.h:355
-msgid "Kurdish, Latin Q"
-msgstr "Kurdisk, Latin Q"
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
#: ../rules/base.xml.in.h:356
-msgid "Kyrgyzstan"
-msgstr "Kirgizistan"
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
#: ../rules/base.xml.in.h:357
-msgid "LAm"
-msgstr "LAm"
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
#: ../rules/base.xml.in.h:358
-msgid "LEKP"
-msgstr "LEKP"
+msgid "Hexadecimal"
+msgstr "Hexadecimal"
#: ../rules/base.xml.in.h:359
-msgid "LEKPa"
-msgstr "LEKPa"
+msgid "Hindi (Bolnagri)"
+msgstr "Hindi (Bolnagri)"
#: ../rules/base.xml.in.h:360
-msgid "Lao"
-msgstr "Lao"
+msgid "Hindi (Wx)"
+msgstr "Hindi (Wx)"
#: ../rules/base.xml.in.h:361
-msgid "Laos"
-msgstr "Laos"
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
#: ../rules/base.xml.in.h:362
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Laptop-tangentbord för bärbar Compaq-dator (t.ex. Armada)"
+msgid "Htc Dream phone"
+msgstr "Htc Dream-telefon"
#: ../rules/base.xml.in.h:363
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Internettangentbord för bärbar Compaq-dator (t.ex. Presario)"
+msgid "Hungarian"
+msgstr "Ungersk"
#: ../rules/base.xml.in.h:364
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Bärbar eMachines m68xx"
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Ungersk (101/qwerty/komma/stumma tangenter)"
#: ../rules/base.xml.in.h:365
-msgid "Latin"
-msgstr "Latin"
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Ungersk (101/qwerty/komma/eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:366
-msgid "Latin American"
-msgstr "Latin Amerikansk"
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Ungersk (101/qwerty/punkt/stumma tangenter)"
#: ../rules/base.xml.in.h:367
-msgid "Latin Unicode"
-msgstr "Latin Unicode"
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Ungersk (101/qwerty/punkt/eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:368
-msgid "Latin Unicode qwerty"
-msgstr "Latin Unicode qwerty"
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Ungersk (101/qwertz/komma/stumma tangenter)"
#: ../rules/base.xml.in.h:369
-msgid "Latin qwerty"
-msgstr "Latin qwerty"
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Ungersk (101/qwertz/komma/eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:370
-msgid "Latin unicode"
-msgstr "Latin unicode"
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Ungersk (101/qwertz/punkt/stumma tangenter)"
#: ../rules/base.xml.in.h:371
-msgid "Latin unicode qwerty"
-msgstr "Latin unicode qwerty"
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Ungersk (101/qwertz/punkt/eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:372
-msgid "Latin with guillemets"
-msgstr "Latin med gåsögon"
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Ungersk (102/qwerty/komma/stumma tangenter)"
#: ../rules/base.xml.in.h:373
-msgid "Latvia"
-msgstr "Lettland"
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Ungersk (102/qwerty/komma/eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:374
-msgid "Lav"
-msgstr "Lav"
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Ungersk (102/qwerty/punkt/stumma tangenter)"
#: ../rules/base.xml.in.h:375
-msgid "Left Alt"
-msgstr "Vänster alt"
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Ungersk (102/qwerty/punkt/eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:376
-msgid "Left Alt (while pressed)"
-msgstr "Vänster Alt (då den trycks ned)"
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Ungersk (102/qwertz/komma/stumma tangenter)"
#: ../rules/base.xml.in.h:377
-msgid "Left Alt is swapped with Left Win"
-msgstr "Vänster Alt är utbytt med vänster Win-tangent"
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Ungersk (102/qwertz/komma/eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:378
-msgid "Left Ctrl"
-msgstr "Vänster Ctrl"
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Ungersk (102/qwertz/punkt/stumma tangenter)"
#: ../rules/base.xml.in.h:379
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Vänster Ctrl (till första layouten), Höger Ctrl (till sista layouten)"
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Ungersk (102/qwertz/punkt/eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:380
-msgid "Left Ctrl+Left Shift"
-msgstr "Vänster ctrl+vänster skift"
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Ungersk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:381
-msgid "Left Shift"
-msgstr "Vänster skift"
+msgid "Hungarian (qwerty)"
+msgstr "Ungersk (qwerty)"
#: ../rules/base.xml.in.h:382
-msgid "Left Win"
-msgstr "Vänster Win-tangent"
+msgid "Hungarian (standard)"
+msgstr "Ungersk (standard)"
#: ../rules/base.xml.in.h:383
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Vänster Win (till första layouten), Höger Win/Meny (till sista layouten)"
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper är mappad till Win-tangenterna"
#: ../rules/base.xml.in.h:384
-msgid "Left Win (while pressed)"
-msgstr "Vänster Win-tangent (då den trycks ned)"
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
#: ../rules/base.xml.in.h:385
-msgid "Left hand"
-msgstr "Vänsterhänt"
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
#: ../rules/base.xml.in.h:386
-msgid "Left handed Dvorak"
-msgstr "Vänsterhänt Dvorak"
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
#: ../rules/base.xml.in.h:387
-msgid "Legacy"
-msgstr "Äldre"
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
#: ../rules/base.xml.in.h:388
-msgid "Legacy Wang 724"
-msgstr "Gammalt Wang 724"
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
+
+#: ../rules/base.xml.in.h:389
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:390
-msgid "Legacy key with comma"
-msgstr "Äldre tangent med komma"
+msgid "Icelandic"
+msgstr "Isländsk"
#: ../rules/base.xml.in.h:391
-msgid "Legacy key with dot"
-msgstr "Äldre tangent med punkt"
+msgid "Icelandic (Dvorak)"
+msgstr "Isländsk (Dvorak)"
#: ../rules/base.xml.in.h:392
-msgid "Less-than/Greater-than"
-msgstr "Mindre än/Större än"
+msgid "Icelandic (Mac)"
+msgstr "Isländsk (Mac)"
#: ../rules/base.xml.in.h:393
-msgid "Lithuania"
-msgstr "Litauen"
+msgid "Icelandic (Sun dead keys)"
+msgstr "Isländsk (Sun stumma tangenter)"
#: ../rules/base.xml.in.h:394
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access Keyboard"
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Isländsk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:395
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
+msgid "Igbo"
+msgstr "Igbo"
#: ../rules/base.xml.in.h:396
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (alternativ)"
+msgid "Indian"
+msgstr "Indisk"
#: ../rules/base.xml.in.h:397
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
+msgid "Inuktitut"
+msgstr "Inuktitut"
#: ../rules/base.xml.in.h:398
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
+msgid "Iraqi"
+msgstr "Irakisk"
#: ../rules/base.xml.in.h:399
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
+msgid "Irish"
+msgstr "Irländsk"
#: ../rules/base.xml.in.h:400
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
+msgid "Irish (CloGaelach)"
+msgstr "Irländsk (CloGaelach)"
#: ../rules/base.xml.in.h:401
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (alternativt val 2)"
+msgid "Irish (Ogham IS434)"
+msgstr "Irländsk (Ogham IS434)"
#: ../rules/base.xml.in.h:402
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
+msgid "Irish (Ogham)"
+msgstr "Irländsk (Ogham)"
#: ../rules/base.xml.in.h:403
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
+msgid "Irish (UnicodeExpert)"
+msgstr "Irländsk (UnicodeExpert)"
#: ../rules/base.xml.in.h:404
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Logitech G15 extratangenter via G15daemon"
+msgid "Italian"
+msgstr "Italiensk"
#: ../rules/base.xml.in.h:405
-msgid "Logitech Generic Keyboard"
-msgstr "Logitech Generic Keyboard"
+msgid "Italian (Georgian)"
+msgstr "Italiensk (Georgisk)"
#: ../rules/base.xml.in.h:406
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech Internet 350 Keyboard"
+msgid "Italian (Mac)"
+msgstr "Italiensk (Mac)"
#: ../rules/base.xml.in.h:407
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech Internettangentbord"
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Italiensk (USA-tangentbord med italienska bokstäver)"
#: ../rules/base.xml.in.h:408
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech Internet Navigator-tangentbord"
+msgid "Italian (eliminate dead keys)"
+msgstr "Italiensk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:409
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite Keyboard"
+msgid "Japanese"
+msgstr "Japansk"
#: ../rules/base.xml.in.h:410
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgid "Japanese (Kana 86)"
+msgstr "Japansk (Kana 86)"
#: ../rules/base.xml.in.h:411
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X Keyboard"
+msgid "Japanese (Kana)"
+msgstr "Japansk (Kana)"
#: ../rules/base.xml.in.h:412
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
+msgid "Japanese (Mac)"
+msgstr "Japansk (Mac)"
#: ../rules/base.xml.in.h:413
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo Keyboard"
+msgid "Japanese (OADG 109A)"
+msgstr "Japansk (OADG 109A)"
#: ../rules/base.xml.in.h:414
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
+msgid "Japanese (PC-98xx Series)"
+msgstr "Japansk (PC-98xx-serien)"
#: ../rules/base.xml.in.h:415
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless Keyboard (modell Y-RB6)"
+msgid "Japanese keyboard options"
+msgstr "Tangentbordsalternativ för japanska"
#: ../rules/base.xml.in.h:416
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+msgid "Kana Lock key is locking"
+msgstr "Kana Lock-tangent låser"
+# Även kanaresisk (äldre form)
#: ../rules/base.xml.in.h:417
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgid "Kannada"
+msgstr "Kannada"
#: ../rules/base.xml.in.h:418
-msgid "Lower Sorbian"
-msgstr "Lågsorbiska"
+msgid "Kazakh"
+msgstr "Kazakisk"
#: ../rules/base.xml.in.h:419
-msgid "Lower Sorbian (qwertz)"
-msgstr "Lågsorbiska (qwertz)"
+msgid "Kazakh (with Russian)"
+msgstr "Kazakisk (med ryska)"
#: ../rules/base.xml.in.h:420
-msgid "Ltu"
-msgstr "Ltu"
+msgid "Key sequence to kill the X server"
+msgstr "Tangentsekvens för att döda X-servern"
#: ../rules/base.xml.in.h:421
-msgid "MESS"
-msgstr "MESS"
+msgid "Key to choose 3rd level"
+msgstr "Tangent för att välja tredje nivå"
#: ../rules/base.xml.in.h:422
-msgid "MNE"
-msgstr "MNE"
+msgid "Key to choose 5th level"
+msgstr "Tangent för att välja femte nivå"
#: ../rules/base.xml.in.h:423
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
+msgid "Key(s) to change layout"
+msgstr "Tangent(er) för att byta layout"
#: ../rules/base.xml.in.h:424
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
#: ../rules/base.xml.in.h:425
-msgid "Macedonia"
-msgstr "Makedonien"
+msgid "Khmer (Cambodian)"
+msgstr "Khmer (Kambodjansk)"
#: ../rules/base.xml.in.h:426
-msgid "Macintosh"
-msgstr "Macintosh"
+msgid "Kikuyu"
+msgstr "Kikuyu"
#: ../rules/base.xml.in.h:427
-msgid "Macintosh Old"
-msgstr "Macintosh gammal"
+msgid "Kinesis"
+msgstr "Kinesis"
#: ../rules/base.xml.in.h:428
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, Sun stumma tangenter"
+msgid "Korean"
+msgstr "Koreansk"
#: ../rules/base.xml.in.h:429
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, eliminera stumma tangenter"
+msgid "Korean (101/104 key compatible)"
+msgstr "Koreansk (101/104-tangenters kompatibel)"
#: ../rules/base.xml.in.h:430
-msgid "Make CapsLock an additional Backspace"
-msgstr "Gör CapsLock till ytterligare en backstegstangent"
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Kurdisk (Iran, Arabisk-Latin)"
#: ../rules/base.xml.in.h:431
-msgid "Make CapsLock an additional Ctrl"
-msgstr "Gör CapsLock till ytterligare en Ctrl-tangent"
+msgid "Kurdish (Iran, F)"
+msgstr "Kurdisk (Iran, F)"
#: ../rules/base.xml.in.h:432
-msgid "Make CapsLock an additional ESC"
-msgstr "Gör CapsLock till ytterligare en ESC-tangent"
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Kurdisk (Iran, Latinskt Q)"
#: ../rules/base.xml.in.h:433
-msgid "Make CapsLock an additional Hyper"
-msgstr "Gör CapsLock till ytterligare en Hyper-tangent"
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Kurdisk (Iran, latinskt alt-Q)"
#: ../rules/base.xml.in.h:434
-msgid "Make CapsLock an additional NumLock"
-msgstr "Gör CapsLock till ytterligare en NumLock-tangent"
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Kurdisk (Irak, Arabisk-Latin)"
#: ../rules/base.xml.in.h:435
-msgid "Make CapsLock an additional Super"
-msgstr "Gör CapsLock till ytterligare en Super-tangent"
+msgid "Kurdish (Iraq, F)"
+msgstr "Kurdisk (Irak, F)"
#: ../rules/base.xml.in.h:436
-msgid "Mal"
-msgstr "Mal"
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Kurdisk (Irak, latinskt Alt-Q)"
#: ../rules/base.xml.in.h:437
-msgid "Malayalam"
-msgstr "Malayalam"
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Kurdisk (Irak, latinskt Q)"
#: ../rules/base.xml.in.h:438
-msgid "Malayalam Lalitha"
-msgstr "Malayalam Lalitha"
+msgid "Kurdish (Syria, F)"
+msgstr "Kurdisk (Syrien, F)"
#: ../rules/base.xml.in.h:439
-msgid "Maldives"
-msgstr "Maldiverna"
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Kurdisk (Syrien, latinskt Alt-Q)"
#: ../rules/base.xml.in.h:440
-msgid "Malta"
-msgstr "Malta"
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Kurdisk (Syrien, latinskt Q)"
#: ../rules/base.xml.in.h:441
-msgid "Maltese keyboard with US layout"
-msgstr "Maltesiskt tangentbord med USA-layout"
+msgid "Kurdish (Turkey, F)"
+msgstr "Kurdisk (Turkiet, F)"
#: ../rules/base.xml.in.h:442
-msgid "Mao"
-msgstr "Mao"
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Kurdisk (Turkiet, latinskt Alt-Q)"
#: ../rules/base.xml.in.h:443
-msgid "Maori"
-msgstr "Maori"
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Kurdisk (Turkiet, latinskt Q)"
#: ../rules/base.xml.in.h:444
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
+msgid "Kutenai"
+msgstr "Kutenai"
#: ../rules/base.xml.in.h:445
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access-tangentbord"
+msgid "Kyrgyz"
+msgstr "Kirgizisk"
#: ../rules/base.xml.in.h:446
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
+msgid "Kyrgyz (phonetic)"
+msgstr "Kirgizisk (fonetisk)"
#: ../rules/base.xml.in.h:447
-msgid "Menu"
-msgstr "Meny"
+msgid "Lao"
+msgstr "Lao"
#: ../rules/base.xml.in.h:448
-msgid "Meta is mapped to Left Win"
-msgstr "Meta är mappad till vänster Win-tangent"
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Lao (STEA-föreslagen standardlayout)"
#: ../rules/base.xml.in.h:449
-msgid "Meta is mapped to Win keys"
-msgstr "Meta är mappad till Win-tangenterna"
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Laptop-tangentbord för bärbar Compaq-dator (t.ex. Armada)"
#: ../rules/base.xml.in.h:450
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Internettangentbord för bärbar Compaq-dator (t.ex. Presario)"
#: ../rules/base.xml.in.h:451
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft Internet Keyboard"
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Bärbar eMachines m68xx"
#: ../rules/base.xml.in.h:452
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, svensk"
+msgid "Latvian"
+msgstr "Lettisk"
#: ../rules/base.xml.in.h:453
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Lettisk (Apostrof-variant)"
#: ../rules/base.xml.in.h:454
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural Keyboard Elite"
+msgid "Latvian (F variant)"
+msgstr "Lettisk (F-variant)"
#: ../rules/base.xml.in.h:455
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Lettisk (Tilde-variant)"
#: ../rules/base.xml.in.h:456
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural Keyboard Pro OEM"
+msgid "Left Alt"
+msgstr "Vänster alt"
#: ../rules/base.xml.in.h:457
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgid "Left Alt (while pressed)"
+msgstr "Vänster Alt (då den trycks ned)"
#: ../rules/base.xml.in.h:458
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgid "Left Alt is swapped with Left Win"
+msgstr "Vänster Alt är utbytt med vänster Win-tangent"
#: ../rules/base.xml.in.h:459
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft Office-tangentbord"
+msgid "Left Ctrl"
+msgstr "Vänster Ctrl"
#: ../rules/base.xml.in.h:460
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Vänster Ctrl (till första layouten), Höger Ctrl (till sista layouten)"
#: ../rules/base.xml.in.h:461
-msgid "Miscellaneous compatibility options"
-msgstr "Diverse kompatibilitetsalternativ"
+msgid "Left Ctrl+Left Shift"
+msgstr "Vänster ctrl+vänster skift"
#: ../rules/base.xml.in.h:462
-msgid "Mkd"
-msgstr "Mkd"
+msgid "Left Shift"
+msgstr "Vänster skift"
#: ../rules/base.xml.in.h:463
-msgid "Mlt"
-msgstr "Mlt"
+msgid "Left Win"
+msgstr "Vänster Win-tangent"
#: ../rules/base.xml.in.h:464
-msgid "Mmr"
-msgstr "Mmr"
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Vänster Win (till första layouten), Höger Win/Meny (till sista layouten)"
#: ../rules/base.xml.in.h:465
-msgid "Mng"
-msgstr "Mng"
+msgid "Left Win (while pressed)"
+msgstr "Vänster Win-tangent (då den trycks ned)"
#: ../rules/base.xml.in.h:466
-msgid "Mongolia"
-msgstr "Mongoliet"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Vänster Win-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan 5th-level-chooser"
#: ../rules/base.xml.in.h:467
-msgid "Montenegro"
-msgstr "Montenegro"
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Vänster Win-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan 5th-level-chooser, ett tryck släpper på låset"
#: ../rules/base.xml.in.h:468
-msgid "Morocco"
-msgstr "Marocko"
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Vänster Ctrl+ Vänster Win (till första layouten), Höger Ctrl+Meny (till andra layouten)"
#: ../rules/base.xml.in.h:469
-msgid "Multilingual"
-msgstr "Flerspråkig"
+msgid "Legacy"
+msgstr "Äldre"
#: ../rules/base.xml.in.h:470
-msgid "Multilingual, first part"
-msgstr "Flerspråkig, första delen"
-
-#: ../rules/base.xml.in.h:471
-msgid "Multilingual, second part"
-msgstr "Flerspråkig, andra delen"
+msgid "Legacy Wang 724"
+msgstr "Gammalt Wang 724"
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
#: ../rules/base.xml.in.h:472
-msgid "Myanmar"
-msgstr "Myanmar"
+msgid "Legacy key with comma"
+msgstr "Äldre tangent med komma"
#: ../rules/base.xml.in.h:473
-msgid "NICOLA-F style Backspace"
-msgstr "Backsteg i NICOLA-F-stil"
+msgid "Legacy key with dot"
+msgstr "Äldre tangent med punkt"
#: ../rules/base.xml.in.h:474
-msgid "NLA"
-msgstr "NLA"
+msgid "Lithuanian"
+msgstr "Litauisk"
#: ../rules/base.xml.in.h:475
-msgid "Nativo"
-msgstr "Nativo"
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Litauisk (IBM LST 1205-92)"
#: ../rules/base.xml.in.h:476
-msgid "Nativo for Esperanto"
-msgstr "Nativo för Esperanto"
+msgid "Lithuanian (LEKP)"
+msgstr "Litauisk (LEKP)"
#: ../rules/base.xml.in.h:477
-msgid "Nativo for USA keyboards"
-msgstr "Nativo för amerikanska tangentbord"
+msgid "Lithuanian (LEKPa)"
+msgstr "Litauisk (LEKPa)"
#: ../rules/base.xml.in.h:478
-msgid "Neo 2"
-msgstr "Neo 2"
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Litauisk (USA-tangentbord med litauiska bokstäver)"
#: ../rules/base.xml.in.h:479
-msgid "Nep"
-msgstr "Nep"
+msgid "Lithuanian (standard)"
+msgstr "Litauisk (standard)"
#: ../rules/base.xml.in.h:480
-msgid "Nepal"
-msgstr "Nepal"
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
#: ../rules/base.xml.in.h:481
-msgid "Netherlands"
-msgstr "Nederländerna"
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
#: ../rules/base.xml.in.h:482
-msgid "New phonetic"
-msgstr "Ny fonetisk"
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (alternativ)"
#: ../rules/base.xml.in.h:483
-msgid "Nig"
-msgstr "Nig"
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
#: ../rules/base.xml.in.h:484
-msgid "Nigeria"
-msgstr "Nigeria"
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
#: ../rules/base.xml.in.h:485
-msgid "Nld"
-msgstr "Nld"
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
#: ../rules/base.xml.in.h:486
-msgid "Non-breakable space character at fourth level"
-msgstr "Icke-brytande blankstegstecken på fjärde nivån"
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
#: ../rules/base.xml.in.h:487
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Icke-brytande blankstegstecken på fjärde nivån, tunt icke-brytande blankstegstecken på sjätte nivån"
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (alternativt val 2)"
#: ../rules/base.xml.in.h:488
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Icke-brytande blankstegstecken på fjärde nivån, tunt icke-brytande blankstegstecken på sjätte nivån (via Ctrl+Skift)"
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
#: ../rules/base.xml.in.h:489
-msgid "Non-breakable space character at second level"
-msgstr "Icke-brytande blankstegstecken på andra nivån"
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
#: ../rules/base.xml.in.h:490
-msgid "Non-breakable space character at third level"
-msgstr "Icke-brytande blankstegstecken på tredje nivån"
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15 extratangenter via G15daemon"
#: ../rules/base.xml.in.h:491
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Icke-brytande blankstegstecken på tredje nivån, ingenting på fjärde nivån"
+msgid "Logitech Generic Keyboard"
+msgstr "Logitech Generic Keyboard"
#: ../rules/base.xml.in.h:492
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Icke-brytande blankstegstecken på tredje nivån, tunt icke-brytande blankstegstecken på fjärde nivån"
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech Internet 350 Keyboard"
#: ../rules/base.xml.in.h:493
-msgid "Nor"
-msgstr "Nor"
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internettangentbord"
#: ../rules/base.xml.in.h:494
-msgid "Northern Saami"
-msgstr "Nordsamisk"
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator-tangentbord"
#: ../rules/base.xml.in.h:495
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Nordsamisk, eliminera stumma tangenter"
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite Keyboard"
#: ../rules/base.xml.in.h:496
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
#: ../rules/base.xml.in.h:497
-msgid "Norway"
-msgstr "Norge"
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
#: ../rules/base.xml.in.h:498
-msgid "NumLock"
-msgstr "NumLock"
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge Keyboard"
-# KONTROLLERA DENNA
#: ../rules/base.xml.in.h:499
-msgid "Numeric keypad delete key behaviour"
-msgstr "Beteende för Delete-tangent på numeriskt tangentbord"
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo Keyboard"
#: ../rules/base.xml.in.h:500
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Tangenter på det numeriska tangentbordet fungerar som på Mac"
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
#: ../rules/base.xml.in.h:501
-msgid "Numeric keypad layout selection"
-msgstr "Layoutval för numeriskt tangentbord"
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (modell Y-RB6)"
#: ../rules/base.xml.in.h:502
-msgid "OADG 109A"
-msgstr "OADG 109A"
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
#: ../rules/base.xml.in.h:503
-msgid "OLPC"
-msgstr "OLPC"
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
#: ../rules/base.xml.in.h:504
-msgid "OLPC Dari"
-msgstr "OLPC Dari"
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
#: ../rules/base.xml.in.h:505
-msgid "OLPC Pashto"
-msgstr "OLPC Pashto"
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
#: ../rules/base.xml.in.h:506
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC Södra Uzbekistan"
+msgid "Macedonian"
+msgstr "Makedonsk"
#: ../rules/base.xml.in.h:507
-msgid "Occitan"
-msgstr "Occitan"
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Makedonsk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:508
-msgid "Ogham"
-msgstr "Ogham"
+msgid "Macintosh"
+msgstr "Macintosh"
#: ../rules/base.xml.in.h:509
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
+msgid "Macintosh Old"
+msgstr "Macintosh gammal"
#: ../rules/base.xml.in.h:510
-msgid "Oriya"
-msgstr "Oriya"
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Gör Caps Lock till ytterligare en backstegstangent"
#: ../rules/base.xml.in.h:511
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/Internet-tangentbord"
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Gör Caps Lock till ytterligare en Control men behåll Caps_Lock-keysym"
#: ../rules/base.xml.in.h:512
-msgid "Ossetian"
-msgstr "Ossetisk"
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Gör Caps Lock till ytterligare en Ctrl-tangent"
#: ../rules/base.xml.in.h:513
-msgid "Ossetian, Winkeys"
-msgstr "Ossetisk, Win-tangenter"
+msgid "Make Caps Lock an additional ESC"
+msgstr "Gör Caps Lock till ytterligare en ESC-tangent"
#: ../rules/base.xml.in.h:514
-msgid "Ossetian, legacy"
-msgstr "Ossetisk, äldre"
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Gör Caps Lock till ytterligare en Hyper-tangent"
#: ../rules/base.xml.in.h:515
-msgid "PC-98xx Series"
-msgstr "PC-98xx-serien"
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Gör Caps Lock till ytterligare en Num Lock-tangent"
#: ../rules/base.xml.in.h:516
-msgid "Pak"
-msgstr "Pak"
+msgid "Make Caps Lock an additional Super"
+msgstr "Gör Caps Lock till ytterligare en Super-tangent"
#: ../rules/base.xml.in.h:517
-msgid "Pakistan"
-msgstr "Pakistan"
+msgid "Malayalam"
+msgstr "Malayalam"
#: ../rules/base.xml.in.h:518
-msgid "Pashto"
-msgstr "Pashto"
+msgid "Malayalam (Lalitha)"
+msgstr "Malayalamsk (Lalitha)"
#: ../rules/base.xml.in.h:519
-msgid "Pattachote"
-msgstr "Pattachote"
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Malayalam (förbättrad Inscript med Rupee-tecken)"
#: ../rules/base.xml.in.h:520
-msgid "Persian, with Persian Keypad"
-msgstr "Persiska, med persiskt numeriskt tangentbord"
+msgid "Maltese"
+msgstr "Maltesisk"
#: ../rules/base.xml.in.h:521
-msgid "Phonetic"
-msgstr "Fonetisk"
+msgid "Maltese (with US layout)"
+msgstr "Maltesisk (med USA-layout)"
#: ../rules/base.xml.in.h:522
-msgid "Phonetic Winkeys"
-msgstr "Fonetisk, Windows-tangenter"
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
#: ../rules/base.xml.in.h:523
-msgid "Pol"
-msgstr "Pol"
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access-tangentbord"
#: ../rules/base.xml.in.h:524
-msgid "Poland"
-msgstr "Polen"
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
#: ../rules/base.xml.in.h:525
-msgid "Polytonic"
-msgstr "Polytonic"
+msgid "Menu"
+msgstr "Meny"
#: ../rules/base.xml.in.h:526
-msgid "Portugal"
-msgstr "Portugal"
+msgid "Meta is mapped to Left Win"
+msgstr "Meta är mappad till vänster Win-tangent"
#: ../rules/base.xml.in.h:527
-msgid "Probhat"
-msgstr "Probhat"
+msgid "Meta is mapped to Win keys"
+msgstr "Meta är mappad till Win-tangenterna"
#: ../rules/base.xml.in.h:528
-msgid "Programmer Dvorak"
-msgstr "Dvorak för programmerare"
+msgid "Meta on Left Ctrl"
+msgstr "Meta på vänster Ctrl"
#: ../rules/base.xml.in.h:529
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
#: ../rules/base.xml.in.h:530
-msgid "Prt"
-msgstr "Prt"
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
#: ../rules/base.xml.in.h:531
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, svensk"
#: ../rules/base.xml.in.h:532
-msgid "Right Alt"
-msgstr "Höger Alt"
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
#: ../rules/base.xml.in.h:533
-msgid "Right Alt (while pressed)"
-msgstr "Höger Alt-tangent (då den trycks ned)"
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
#: ../rules/base.xml.in.h:534
-msgid "Right Alt key never chooses 3rd level"
-msgstr "Höger Alt-tangent väljer aldrig tredje nivån"
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:535
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Höger Alt-tangent, Skift+Höger Alt-tangent är Multi_Key"
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural Keyboard Pro OEM"
#: ../rules/base.xml.in.h:536
-msgid "Right Ctrl"
-msgstr "Höger Ctrl"
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
#: ../rules/base.xml.in.h:537
-msgid "Right Ctrl (while pressed)"
-msgstr "Höger Ctrl-tangent (då den trycks ned)"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
#: ../rules/base.xml.in.h:538
-msgid "Right Ctrl as Right Alt"
-msgstr "Höger Ctrl-tangent fungerar som höger Alt"
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
#: ../rules/base.xml.in.h:539
-msgid "Right Ctrl+Right Shift"
-msgstr "Höger Ctrl + höger Skift"
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft Office-tangentbord"
#: ../rules/base.xml.in.h:540
-msgid "Right Shift"
-msgstr "Höger skift"
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
#: ../rules/base.xml.in.h:541
-msgid "Right Win"
-msgstr "Höger Win-tangent"
+msgid "Miscellaneous compatibility options"
+msgstr "Diverse kompatibilitetsalternativ"
#: ../rules/base.xml.in.h:542
-msgid "Right Win (while pressed)"
-msgstr "Höger Win-tangent (då den trycks ned)"
+msgid "Mongolian"
+msgstr "Mongolisk"
#: ../rules/base.xml.in.h:543
-msgid "Right hand"
-msgstr "Högerhänt"
+msgid "Montenegrin"
+msgstr "Montenegrinsk"
#: ../rules/base.xml.in.h:544
-msgid "Right handed Dvorak"
-msgstr "Högerhänt Dvorak"
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Montenegrinsk (Kyrillisk med gåsögon)"
#: ../rules/base.xml.in.h:545
-msgid "Romania"
-msgstr "Rumänien"
+msgid "Montenegrin (Cyrillic)"
+msgstr "Montenegrinsk (Kyrillisk)"
#: ../rules/base.xml.in.h:546
-msgid "Romanian keyboard with German letters"
-msgstr "Rumänskt tangentbord med tyska bokstäver"
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Montenegrinsk (Kyrillisk, Z och ZHE utbytta)"
#: ../rules/base.xml.in.h:547
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Rumänskt tangentbord med tyska bokstäver, eliminera stumma tangenter"
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Montenegrinsk (Latin qwerty)"
#: ../rules/base.xml.in.h:548
-msgid "Rou"
-msgstr "Rou"
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Montenegrinsk (Latin unicode qwerty)"
#: ../rules/base.xml.in.h:549
-msgid "Rus"
-msgstr "Rus"
+msgid "Montenegrin (Latin unicode)"
+msgstr "Montenegrinsk (Latin unicode)"
#: ../rules/base.xml.in.h:550
-msgid "Russia"
-msgstr "Ryssland"
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Montenegrinsk (Latin med gåsögon)"
#: ../rules/base.xml.in.h:551
-msgid "Russian"
-msgstr "Rysk"
+msgid "Māori"
+msgstr "Māori"
#: ../rules/base.xml.in.h:552
-msgid "Russian phonetic"
-msgstr "Rysk fonetiskt"
+msgid "NICOLA-F style Backspace"
+msgstr "Backsteg i NICOLA-F-stil"
#: ../rules/base.xml.in.h:553
-msgid "Russian phonetic Dvorak"
-msgstr "Rysk fonetisk dvorak"
+msgid "Nepali"
+msgstr "Nepalesisk"
#: ../rules/base.xml.in.h:554
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Rysk fonetiskt, eliminera stumma tangenter"
+msgid "Non-breakable space character at fourth level"
+msgstr "Icke-brytande blankstegstecken på fjärde nivån"
#: ../rules/base.xml.in.h:555
-msgid "Russian with Kazakh"
-msgstr "Ryska med kazakiska"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Icke-brytande blankstegstecken på fjärde nivån, tunt icke-brytande blankstegstecken på sjätte nivån"
#: ../rules/base.xml.in.h:556
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless Keyboard"
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Icke-brytande blankstegstecken på fjärde nivån, tunt icke-brytande blankstegstecken på sjätte nivån (via Ctrl+Skift)"
#: ../rules/base.xml.in.h:557
-msgid "SK-1300"
-msgstr "SK-1300"
+msgid "Non-breakable space character at second level"
+msgstr "Icke-brytande blankstegstecken på andra nivån"
#: ../rules/base.xml.in.h:558
-msgid "SK-2500"
-msgstr "SK-2500"
+msgid "Non-breakable space character at third level"
+msgstr "Icke-brytande blankstegstecken på tredje nivån"
#: ../rules/base.xml.in.h:559
-msgid "SK-6200"
-msgstr "SK-6200"
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Icke-brytande blankstegstecken på tredje nivån, ingenting på fjärde nivån"
#: ../rules/base.xml.in.h:560
-msgid "SK-7100"
-msgstr "SK-7100"
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Icke-brytande blankstegstecken på tredje nivån, tunt icke-brytande blankstegstecken på fjärde nivån"
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:7
-msgid "SRB"
-msgstr "SRB"
+#: ../rules/base.xml.in.h:561
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
#: ../rules/base.xml.in.h:562
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
+msgid "Norwegian"
+msgstr "Norsk"
#: ../rules/base.xml.in.h:563
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
+msgid "Norwegian (Dvorak)"
+msgstr "Norsk (Dvorak)"
#: ../rules/base.xml.in.h:564
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
+msgid "Norwegian (Mac)"
+msgstr "Norsk (Mac)"
#: ../rules/base.xml.in.h:565
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Norsk (Mac, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:566
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
+msgid "Norwegian (Northern Saami"
+msgstr "Norsk (Nordsamisk)"
#: ../rules/base.xml.in.h:567
-msgid "ScrollLock"
-msgstr "ScrollLock"
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Norsk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:568
-msgid "Secwepemctsin"
-msgstr "Secwepemctsin"
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Norsk (Nordsamisk, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:569
-msgid "Semi-colon on third level"
-msgstr "Semikolon på tredje nivå"
+msgid "Num Lock"
+msgstr "Num Lock"
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:8
-msgid "Serbia"
-msgstr "Serbien"
+# KONTROLLERA DENNA
+#: ../rules/base.xml.in.h:570
+msgid "Numeric keypad delete key behaviour"
+msgstr "Beteende för Delete-tangent på numeriskt tangentbord"
#: ../rules/base.xml.in.h:571
-msgid "Shift cancels CapsLock"
-msgstr "Skift avbryter CapsLock"
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Tangenter på det numeriska tangentbordet fungerar som på Mac"
#: ../rules/base.xml.in.h:572
-msgid "Shift does not cancel NumLock, chooses 3d level instead"
-msgstr "Skift avbryter inte NumLock, väljer tredje nivån istället"
+msgid "Numeric keypad layout selection"
+msgstr "Layoutval för numeriskt tangentbord"
#: ../rules/base.xml.in.h:573
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Skift med tangenterna på numeriska tangentbordet fungerar som i MS Windows"
+msgid "OLPC"
+msgstr "OLPC"
#: ../rules/base.xml.in.h:574
-msgid "Shift+CapsLock"
-msgstr "Skift+CapsLock"
+msgid "Oriya"
+msgstr "Oriya"
#: ../rules/base.xml.in.h:575
-msgid "Simple"
-msgstr "Enkel"
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/Internet-tangentbord"
#: ../rules/base.xml.in.h:576
-msgid "Slovakia"
-msgstr "Slovakien"
+msgid "PC-98xx Series"
+msgstr "PC-98xx-serien"
#: ../rules/base.xml.in.h:577
-msgid "Slovenia"
-msgstr "Slovenien"
+msgid "Pashto"
+msgstr "Pashto"
#: ../rules/base.xml.in.h:578
-msgid "South Africa"
-msgstr "Sydafrika"
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Pashto (Afganistan, OLPC)"
#: ../rules/base.xml.in.h:579
-msgid "Southern Uzbek"
-msgstr "Södra Uzbekistan"
+msgid "Pause"
+msgstr "Pause"
#: ../rules/base.xml.in.h:580
-msgid "Spain"
-msgstr "Spanien"
+msgid "Persian"
+msgstr "Persisk"
#: ../rules/base.xml.in.h:581
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Specialtangenter (Ctrl+Alt+&lt;tangent&gt;) hanteras i en server"
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Persisk (Afganistan, Dari OLPC)"
#: ../rules/base.xml.in.h:582
-msgid "SrL"
-msgstr "SrL"
+msgid "Persian (with Persian Keypad)"
+msgstr "Persisk (med persiskt numeriskt tangentbord)"
#: ../rules/base.xml.in.h:583
-msgid "Sri Lanka"
-msgstr "Sri Lanka"
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Filippinsk - Dvorak (Baybayin)"
#: ../rules/base.xml.in.h:584
-msgid "Standard"
-msgstr "Standard"
+msgid "Polish"
+msgstr "Polsk"
#: ../rules/base.xml.in.h:585
-msgid "Standard (Cedilla)"
-msgstr "Standard (Cedilj)"
+msgid "Polish (Dvorak)"
+msgstr "Polsk (Dvorak)"
+
+#: ../rules/base.xml.in.h:586
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Polsk (Dvorak, polska citattecken på tangent 1)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:587
-msgid "Standard RSTU"
-msgstr "Standard RSTU"
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Polsk (Dvorak, polska citattecken på citattangent)"
+
+#: ../rules/base.xml.in.h:588
+msgid "Polish (Kashubian)"
+msgstr "Polsk (Kashubian)"
-#. RSTU 2019-91
#: ../rules/base.xml.in.h:589
-msgid "Standard RSTU on Russian layout"
-msgstr "Standard RSTU på rysk layout"
+msgid "Polish (programmer Dvorak)"
+msgstr "Polsk (Dvorak för programmerare)"
#: ../rules/base.xml.in.h:590
-msgid "Sun Type 5/6"
-msgstr "Sun Type 5/6"
+msgid "Polish (qwertz)"
+msgstr "Polsk (qwertz)"
#: ../rules/base.xml.in.h:591
-msgid "Sun dead keys"
-msgstr "Sun stumma tangenter"
+msgid "Portuguese"
+msgstr "Portugisisk"
#: ../rules/base.xml.in.h:592
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power Multimedia Keyboard"
+msgid "Portuguese (Brazil)"
+msgstr "Portugisisk (Brasilisk)"
#: ../rules/base.xml.in.h:593
-msgid "Svdvorak"
-msgstr "Svdvorak"
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Portugisisk (Brasiliansk, Dvorak)"
#: ../rules/base.xml.in.h:594
-msgid "Svk"
-msgstr "Svk"
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Portugisisk (Brasilisk, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:595
-msgid "Svn"
-msgstr "Svn"
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Portugisisk (Brasilisk, nativo för Esperanto)"
#: ../rules/base.xml.in.h:596
-msgid "Swap Ctrl and CapsLock"
-msgstr "Byt Ctrl och CapsLock"
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Portugisisk (Brasilisk, nativo för USA-tangentbord)"
#: ../rules/base.xml.in.h:597
-msgid "Swap ESC and CapsLock"
-msgstr "Byt ESC och CapsLock"
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Portugisisk (Brasiliansk, nativo)"
#: ../rules/base.xml.in.h:598
-msgid "Swe"
-msgstr "Swe"
+msgid "Portuguese (Mac)"
+msgstr "Portugisisk (Mac)"
#: ../rules/base.xml.in.h:599
-msgid "Sweden"
-msgstr "Sverige"
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Portugisisk (Mac, Sun stumma tangenter)"
#: ../rules/base.xml.in.h:600
-msgid "Switzerland"
-msgstr "Schweiz"
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Portugisisk (Mac, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:601
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (tablet PC)"
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Portugisisk (nativo för Esperanto)"
#: ../rules/base.xml.in.h:602
-msgid "Syr"
-msgstr "Syr"
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Portugisisk (nativo för USA-tangentbord)"
#: ../rules/base.xml.in.h:603
-msgid "Syria"
-msgstr "Syrien"
+msgid "Portuguese (Nativo)"
+msgstr "Portugisisk (Nativo)"
#: ../rules/base.xml.in.h:604
-msgid "Syriac"
-msgstr "Syrisk"
+msgid "Portuguese (Sun dead keys)"
+msgstr "Portugisisk (Sun stumma tangenter)"
#: ../rules/base.xml.in.h:605
-msgid "Syriac phonetic"
-msgstr "Syrisk fonetisk"
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Portugisisk (eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:606
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
#: ../rules/base.xml.in.h:607
-msgid "Tajikistan"
-msgstr "Tajikistan"
+msgid "PrtSc"
+msgstr "PrtSc"
#: ../rules/base.xml.in.h:608
-msgid "Tamil"
-msgstr "Tamilsk"
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Punjabi (Gurmukhi Jhelum)"
#: ../rules/base.xml.in.h:609
-msgid "Tamil TAB Typewriter"
-msgstr "Tamil TAB Typewriter"
+msgid "Punjabi (Gurmukhi)"
+msgstr "Punjabi (Gurmukhi)"
#: ../rules/base.xml.in.h:610
-msgid "Tamil TSCII Typewriter"
-msgstr "Tamil TSCII Typewriter"
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
#: ../rules/base.xml.in.h:611
-msgid "Tamil Unicode"
-msgstr "Tamilisk Unicode"
+msgid "Right Alt"
+msgstr "Höger Alt"
#: ../rules/base.xml.in.h:612
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
+msgid "Right Alt (while pressed)"
+msgstr "Höger Alt-tangent (då den trycks ned)"
#: ../rules/base.xml.in.h:613
-msgid "Tatar"
-msgstr "Tatar"
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Höger Alt-tangent väljer femte nivån och aktiverar level5-Lock när nedtryckt tillsammans med en annan 5th-level-chooser, ett tryck släpper på låset"
#: ../rules/base.xml.in.h:614
-msgid "Telugu"
-msgstr "Telugo"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Höger Alt-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan 5th-level-chooser"
#: ../rules/base.xml.in.h:615
-msgid "Tha"
-msgstr "Tha"
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Höger Alt-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan 5th-level-chooser, ett tryck släpper på låset"
#: ../rules/base.xml.in.h:616
-msgid "Thailand"
-msgstr "Thailand"
+msgid "Right Alt key never chooses 3rd level"
+msgstr "Höger Alt-tangent väljer aldrig tredje nivån"
#: ../rules/base.xml.in.h:617
-msgid "Tibetan"
-msgstr "Tibetisk"
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Höger Alt-tangent, Skift+Höger Alt-tangent är Multi_Key"
#: ../rules/base.xml.in.h:618
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Tibetisk (med ASCII-taltecken)"
+msgid "Right Ctrl"
+msgstr "Höger Ctrl"
#: ../rules/base.xml.in.h:619
-msgid "Tifinagh"
-msgstr "Tifinagh"
+msgid "Right Ctrl (while pressed)"
+msgstr "Höger Ctrl-tangent (då den trycks ned)"
#: ../rules/base.xml.in.h:620
-msgid "Tifinagh Alternative"
-msgstr "Tifinagh alternativ"
+msgid "Right Ctrl as Right Alt"
+msgstr "Höger Ctrl-tangent fungerar som höger Alt"
#: ../rules/base.xml.in.h:621
-msgid "Tifinagh Alternative Phonetic"
-msgstr "Tifinagh alternativ fonetisk"
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Höger Ctrl är mappad till Meny"
#: ../rules/base.xml.in.h:622
-msgid "Tifinagh Extended"
-msgstr "Tifinagh utökad"
+msgid "Right Ctrl+Right Shift"
+msgstr "Höger Ctrl + höger Skift"
#: ../rules/base.xml.in.h:623
-msgid "Tifinagh Extended Phonetic"
-msgstr "Tifinagh utökad fonetisk"
+msgid "Right Shift"
+msgstr "Höger skift"
#: ../rules/base.xml.in.h:624
-msgid "Tifinagh Phonetic"
-msgstr "Tifinagh fonetisk"
+msgid "Right Win"
+msgstr "Höger Win-tangent"
#: ../rules/base.xml.in.h:625
-msgid "Tilde (~) variant"
-msgstr "Tilde (~) variant"
+msgid "Right Win (while pressed)"
+msgstr "Höger Win-tangent (då den trycks ned)"
#: ../rules/base.xml.in.h:626
-msgid "Tjk"
-msgstr "Tjk"
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Höger Win-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan 5th-level-chooser"
#: ../rules/base.xml.in.h:627
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "Till motsvarande tangent på ett Dvorak-tangentbord."
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Höger Win-tangent väljer femte nivån, låses när nedtryckt tillsammans med en annan 5th-level-chooser, ett tryck släpper på låset"
#: ../rules/base.xml.in.h:628
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "Till motsvarande tangent på ett Qwerty-tangentbord."
+msgid "Romanian"
+msgstr "Rumänsk"
#: ../rules/base.xml.in.h:629
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Rumänsk (Krimtatariska Dobruca-1 Q)"
#: ../rules/base.xml.in.h:630
-msgid "Traditional phonetic"
-msgstr "Traditionell fonetisk"
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Rumänsk (Krimtatariska Dobruca-2 Q)"
#: ../rules/base.xml.in.h:631
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access-tangentbord"
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Rumänsk (Krimtatarisk turkisk Alt-Q)"
#: ../rules/base.xml.in.h:632
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Rumänsk (Krimtatarisk turkisk F)"
#: ../rules/base.xml.in.h:633
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
+msgid "Romanian (WinKeys)"
+msgstr "Rumänsk (Windows-tangenter)"
#: ../rules/base.xml.in.h:634
-msgid "Tur"
-msgstr "Tur"
+msgid "Romanian (cedilla)"
+msgstr "Rumänsk (cedilj)"
#: ../rules/base.xml.in.h:635
-msgid "Turkey"
-msgstr "Turkiet"
+msgid "Romanian (standard cedilla)"
+msgstr "Rumänsk (standard cedilj)"
#: ../rules/base.xml.in.h:636
-msgid "Turkmenistan"
-msgstr "Turkmenistan"
+msgid "Romanian (standard)"
+msgstr "Rumänsk (standard)"
#: ../rules/base.xml.in.h:637
-msgid "Typewriter"
-msgstr "Skrivmaskin"
+msgid "Rupee on 4"
+msgstr "Rupee på 4"
#: ../rules/base.xml.in.h:638
-msgid "Typewriter, legacy"
-msgstr "Skrivmaskin, äldre"
+msgid "Russian"
+msgstr "Rysk"
#: ../rules/base.xml.in.h:639
-msgid "UCW layout (accented letters only)"
-msgstr "UCW-layout (endast bokstäver med accenter)"
+msgid "Russian (Bashkirian)"
+msgstr "Rysk (Basjkiriska)"
#: ../rules/base.xml.in.h:640
-msgid "US keyboard with Bosnian digraphs"
-msgstr "USA-tangentbord med bosniska digrafer"
+msgid "Russian (Chuvash Latin)"
+msgstr "Rysk (Tjuvasjisk latin)"
#: ../rules/base.xml.in.h:641
-msgid "US keyboard with Bosnian letters"
-msgstr "USA-tangentbord med bosniska bokstäver"
+msgid "Russian (Chuvash)"
+msgstr "Rysk (Tjuvasjisk)"
#: ../rules/base.xml.in.h:642
-msgid "US keyboard with Croatian digraphs"
-msgstr "USA-tangentbord med kroatiska digrafer"
+msgid "Russian (DOS)"
+msgstr "Rysk (DOS)"
#: ../rules/base.xml.in.h:643
-msgid "US keyboard with Croatian letters"
-msgstr "USA-tangentbord med kroatiska bokstäver"
+msgid "Russian (Georgia)"
+msgstr "Rysk (Georgien)"
#: ../rules/base.xml.in.h:644
-msgid "US keyboard with Estonian letters"
-msgstr "USA-tangentbord med estniska bokstäver"
+msgid "Russian (Germany, phonetic)"
+msgstr "Rysk (Tyskland, fonetiskt)"
#: ../rules/base.xml.in.h:645
-msgid "US keyboard with Italian letters"
-msgstr "USA-tangentbord med italienska bokstäver"
+msgid "Russian (Kalmyk)"
+msgstr "Rysk (Kalmyk)"
#: ../rules/base.xml.in.h:646
-msgid "US keyboard with Lithuanian letters"
-msgstr "USA-tangentbord med litauiska bokstäver"
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Rysk (Kazakstan, med kazakiska)"
#: ../rules/base.xml.in.h:647
-msgid "US keyboard with Slovenian letters"
-msgstr "USA-tangentbord med slovenska bokstäver"
+msgid "Russian (Komi)"
+msgstr "Rysk (Komi)"
-#: ../rules/base.xml.in.h:648 ../rules/base.extras.xml.in.h:9
-msgid "USA"
-msgstr "USA"
+#: ../rules/base.xml.in.h:648
+msgid "Russian (Mari)"
+msgstr "Rysk (Mari)"
#: ../rules/base.xml.in.h:649
-msgid "Udmurt"
-msgstr "Udmurt"
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Rysk (Ossetisk, Windows-tangenter)"
#: ../rules/base.xml.in.h:650
-msgid "Ukr"
-msgstr "Ukr"
+msgid "Russian (Ossetian, legacy)"
+msgstr "Rysk (Ossetisk, äldre)"
#: ../rules/base.xml.in.h:651
-msgid "Ukraine"
-msgstr "Ukraina"
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Rysk (Polen, fonetisk Dvorak)"
#: ../rules/base.xml.in.h:652
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Unicode-tillägg (pilar och matematikoperatorer)"
+msgid "Russian (Serbian)"
+msgstr "Rysk (Serbisk)"
#: ../rules/base.xml.in.h:653
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Unicode-tillägg (pilar och matematikoperatorer). Matematikoperatorer på standardnivå"
+msgid "Russian (Sweden, phonetic)"
+msgstr "Rysk (Sverige, fonetiskt)"
#: ../rules/base.xml.in.h:654
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Rysk (Sverige, fonetiskt, eliminera stumma tangenter)"
#: ../rules/base.xml.in.h:655
-msgid "United Kingdom"
-msgstr "Storbritannien"
+msgid "Russian (Tatar)"
+msgstr "Rysk (Tatar)"
#: ../rules/base.xml.in.h:656
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
+msgid "Russian (US, phonetic)"
+msgstr "Rysk (USA, fonetisk)"
#: ../rules/base.xml.in.h:657
-msgid "Urdu, Alternative phonetic"
-msgstr "Urdu, alternativ fonetisk"
+msgid "Russian (Udmurt)"
+msgstr "Rysk (Udmurt)"
#: ../rules/base.xml.in.h:658
-msgid "Urdu, Phonetic"
-msgstr "Urdu, fonetisk"
+msgid "Russian (Yakut)"
+msgstr "Rysk (Yakut)"
#: ../rules/base.xml.in.h:659
-msgid "Urdu, Winkeys"
-msgstr "Urdu, Win-tangenter"
+msgid "Russian (legacy)"
+msgstr "Rysk (äldre)"
#: ../rules/base.xml.in.h:660
-msgid "Use Bosnian digraphs"
-msgstr "Använd bosniska digrafer"
+msgid "Russian (phonetic WinKeys)"
+msgstr "Rysk (fonetisk Windows-tangenter)"
#: ../rules/base.xml.in.h:661
-msgid "Use Croatian digraphs"
-msgstr "Använd kroatiska digrafer"
+msgid "Russian (phonetic)"
+msgstr "Rysk (fonetiskt)"
#: ../rules/base.xml.in.h:662
-msgid "Use guillemets for quotes"
-msgstr "Använd gåsögon för citattecken"
+msgid "Russian (typewriter)"
+msgstr "Rysk (skrivmaskin)"
#: ../rules/base.xml.in.h:663
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Använd tangentbordslampa för att visa alternativ layout"
+msgid "Russian (typewriter, legacy)"
+msgstr "Rysk (skrivmaskin, äldre)"
#: ../rules/base.xml.in.h:664
-msgid "Using space key to input non-breakable space character"
-msgstr "Använder blankstegstangenten för att mata in icke-brytande blankstegstecken"
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless Keyboard"
#: ../rules/base.xml.in.h:665
-msgid "Usual space at any level"
-msgstr "Vanligt blanksteg på alla nivåer"
+msgid "SK-1300"
+msgstr "SK-1300"
#: ../rules/base.xml.in.h:666
-msgid "Uzb"
-msgstr "Uzb"
+msgid "SK-2500"
+msgstr "SK-2500"
#: ../rules/base.xml.in.h:667
-msgid "Uzbekistan"
-msgstr "Uzbekistan"
+msgid "SK-6200"
+msgstr "SK-6200"
#: ../rules/base.xml.in.h:668
-msgid "Vietnam"
-msgstr "Vietnam"
+msgid "SK-7100"
+msgstr "SK-7100"
#: ../rules/base.xml.in.h:669
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "ViewSonic KU-306 internettangentbord"
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
#: ../rules/base.xml.in.h:670
-msgid "Vnm"
-msgstr "Vnm"
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
#: ../rules/base.xml.in.h:671
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Wang 724 numeriskt tangentbord med unicode-tillägg (pilar och matematikoperatorer)"
+msgid "Saisiyat (Taiwan)"
+msgstr "Saisiyat (Taiwan)"
#: ../rules/base.xml.in.h:672
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Wang 724 numeriskt tangentbord med unicode-tillägg (pilar och matematikoperatorer). Matematikoperatorer på standardnivå"
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
#: ../rules/base.xml.in.h:673
-msgid "Wang model 724 azerty"
-msgstr "Wang modell 724 azerty"
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
#: ../rules/base.xml.in.h:674
-msgid "Western"
-msgstr "Västlig"
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
#: ../rules/base.xml.in.h:675
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
#: ../rules/base.xml.in.h:676
-msgid "Winkeys"
-msgstr "Win-tangenter"
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
#: ../rules/base.xml.in.h:677
-msgid "With &lt;\\|&gt; key"
-msgstr "Med &lt;\\|&gt;-tangent"
+msgid "Semi-colon on third level"
+msgstr "Semikolon på tredje nivå"
#: ../rules/base.xml.in.h:678
-msgid "With EuroSign on 5"
-msgstr "Med eurotecknet till tangenten 5"
+msgid "Serbian"
+msgstr "Serbisk"
#: ../rules/base.xml.in.h:679
-msgid "With guillemets"
-msgstr "Med gåsögon"
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Serbisk (Latin Unicode qwerty)"
#: ../rules/base.xml.in.h:680
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! Internettangentbord"
+msgid "Serbian (Latin Unicode)"
+msgstr "Serbisk (Latin Unicode)"
#: ../rules/base.xml.in.h:681
-msgid "Yakut"
-msgstr "Jakutiska"
+msgid "Serbian (Latin qwerty)"
+msgstr "Serbisk (Latin qwerty)"
#: ../rules/base.xml.in.h:682
-msgid "Yoruba"
-msgstr "Yoruba"
+msgid "Serbian (Latin with guillemets)"
+msgstr "Serbisk (Latin med gåsögon)"
#: ../rules/base.xml.in.h:683
-msgid "Z and ZHE swapped"
-msgstr "Z och ZHE utbytta"
+msgid "Serbian (Latin)"
+msgstr "Serbisk (Latin)"
#: ../rules/base.xml.in.h:684
-msgid "Zar"
-msgstr "Zar"
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Serbisk (Pannonian Rusyn homofonisk)"
#: ../rules/base.xml.in.h:685
-msgid "azerty"
-msgstr "azerty"
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Serbisk (Z och ZHE utbytta)"
#: ../rules/base.xml.in.h:686
-msgid "azerty/digits"
-msgstr "azerty/siffror"
+msgid "Serbian (with guillemets)"
+msgstr "Serbisk (med gåsögon)"
#: ../rules/base.xml.in.h:687
-msgid "digits"
-msgstr "siffror"
+msgid "Serbo-Croatian (US)"
+msgstr "Serbokroatisk (US)"
#: ../rules/base.xml.in.h:688
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "flyttat semikolon och citattecken (föråldrat)"
+msgid "Shift cancels Caps Lock"
+msgstr "Skift avbryter Caps Lock"
#: ../rules/base.xml.in.h:689
-msgid "lyx"
-msgstr "lyx"
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Skift avbryter inte Num Lock, väljer tredje nivån istället"
#: ../rules/base.xml.in.h:690
-msgid "qwerty"
-msgstr "qwerty"
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Skift med tangenterna på numeriska tangentbordet fungerar som i MS Windows"
#: ../rules/base.xml.in.h:691
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, utökat omvänt snedstreck"
+msgid "Shift+Caps Lock"
+msgstr "Skift+Caps Lock"
#: ../rules/base.xml.in.h:692
-msgid "qwerty/digits"
-msgstr "qwerty/siffror"
+msgid "Sindhi"
+msgstr "Sindhi"
#: ../rules/base.xml.in.h:693
-msgid "qwertz"
-msgstr "qwertz"
+msgid "Sinhala"
+msgstr "Sinhala"
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL"
-msgstr "APL"
+#: ../rules/base.xml.in.h:694
+msgid "Slovak"
+msgstr "Slovakisk"
-#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Atsina"
-
-#: ../rules/base.extras.xml.in.h:3
-msgid "Combining accents instead of dead keys"
-msgstr "Kombinerade accenter istället för stumma tangenter"
-
-#: ../rules/base.extras.xml.in.h:4
-msgid "Couer D'alene Salish"
-msgstr "Couer D'alene Salish"
-
-#: ../rules/base.extras.xml.in.h:5
-msgid "International (AltGr Unicode combining)"
-msgstr "Internationell (AltGr med kombinerad Unicode)"
-
-#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "Internationell (AltGr med kombinerad Unicode, alternativ)"
-
-#~ msgid "Baltic+"
-#~ msgstr "Baltisk+"
-
-#~ msgid "IBM ThinkPad 560Z/600/600E/A22E, Intl"
-#~ msgstr "IBM ThinkPad 560Z/600/600E/A22E, Intl"
-
-#~ msgid "Keypad"
-#~ msgstr "Knappsats"
-
-#~ msgid "Pro"
-#~ msgstr "Pro"
-
-#~ msgid "Pro Keypad"
-#~ msgstr "Pro Keypad"
-
-#~ msgid "Standard Phonetic"
-#~ msgstr "Fonetisk, standard"
-
-#~ msgid "Brazilian ABNT2"
-#~ msgstr "Brasiliansk ABNT2"
-
-#~ msgid "Japanese 106-key"
-#~ msgstr "Japansk 106-tangenters"
-
-#~ msgid "Kir"
-#~ msgstr "Kir"
-
-#~ msgid "Korean 106-key"
-#~ msgstr "Koreansk 106-tangenters"
+#: ../rules/base.xml.in.h:695
+msgid "Slovak (extended Backslash)"
+msgstr "Slovakisk (utökat omvänt snedstreck)"
-#~ msgid "Super is mapped to Win keys"
-#~ msgstr "Super-tangenten är mappad till Win-tangenterna"
+#: ../rules/base.xml.in.h:696
+msgid "Slovak (qwerty)"
+msgstr "Slovakisk (qwerty)"
-#~ msgid "US keyboard with Slovenian digraphs"
-#~ msgstr "USA-tangentbord med slovenska digrafer"
+#: ../rules/base.xml.in.h:697
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Slovakisk (qwerty, utökat omvänt snedstreck)"
-#~ msgid "Unicode"
-#~ msgstr "Unicode"
+#: ../rules/base.xml.in.h:698
+msgid "Slovene"
+msgstr "Slovensk"
-#~ msgid "Use Slovenian digraphs"
-#~ msgstr "Använd slovenska digrafer"
+#: ../rules/base.xml.in.h:699
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Slovensk (USA-tangentbord med slovenska bokstäver)"
-#~ msgid "Add the EuroSign to the 2 key."
-#~ msgstr "Lägg till eurotecknet till tangenten 2."
+#: ../rules/base.xml.in.h:700
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Slovensk (använd gåsögon för citattecken)"
-#~ msgid "Add the EuroSign to the 4 key."
-#~ msgstr "Lägg till eurotecknet till tangenten 4."
+#: ../rules/base.xml.in.h:701
+msgid "Spanish"
+msgstr "Spansk"
-#~ msgid "Add the EuroSign to the 5 key."
-#~ msgstr "Lägg till eurotecknet till tangenten 5."
+#: ../rules/base.xml.in.h:702
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Spansk (Asturisk variant med nederpunkts H och nederpunkts L)"
-#~ msgid "Add the EuroSign to the E key."
-#~ msgstr "Lägg till eurotecknet till tangenten E."
+#: ../rules/base.xml.in.h:703
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Spansk (Katalansk variant med mittenpunkts L)"
-#~ msgid "Alt+Ctrl change layout."
-#~ msgstr "Alt+Ctrl byter layout."
+#: ../rules/base.xml.in.h:704
+msgid "Spanish (Dvorak)"
+msgstr "Spansk (Dvorak)"
-#~ msgid "Alt+Shift change layout."
-#~ msgstr "Alt+Shift byter layout."
+#: ../rules/base.xml.in.h:705
+msgid "Spanish (Latin American)"
+msgstr "Spansk (Latinamerikansk)"
-#~ msgid "Both Alt keys together change layout."
-#~ msgstr "Båda Alt-tangenterna tillsammans byter layout."
+#: ../rules/base.xml.in.h:706
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Spansk (Latinamerikansk, eliminera stumma tangenter)"
-#~ msgid "Both Ctrl keys together change layout."
-#~ msgstr "Båda Ctrl-tangenterna tillsammans byter layout."
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Spansk (Latinamerikansk, inkluderar stumma tilde)"
-#~ msgid "Both Shift keys together change layout."
-#~ msgstr "Båda Skift-tangenterna tillsammans byter layout."
+#: ../rules/base.xml.in.h:708
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Spansk (Latinamerikansk, Sun stumma tangenter)"
-#~ msgid "CapsLock LED shows alternative layout."
-#~ msgstr "CapsLock-lampan visar alternativ layout."
+#: ../rules/base.xml.in.h:709
+msgid "Spanish (Mac)"
+msgstr "Spansk (Mac)"
-#~ msgid "CapsLock just locks the Shift modifier."
-#~ msgstr "CapsLock låser bara Skift-modifieraren."
+#: ../rules/base.xml.in.h:710
+msgid "Spanish (Sun dead keys)"
+msgstr "Spansk (Sun stumma tangenter)"
-#~ msgid "CapsLock key changes layout."
-#~ msgstr "CapsLock-tangenten byter layout."
+#: ../rules/base.xml.in.h:711
+msgid "Spanish (eliminate dead keys)"
+msgstr "Spansk (eliminera stumma tangenter)"
-#~ msgid "Ctrl+Shift change layout."
-#~ msgstr "Ctrl+Skift byter layout."
+#: ../rules/base.xml.in.h:712
+msgid "Spanish (include dead tilde)"
+msgstr "Spansk (Inkludera dött tilde-tecken)"
-#~ msgid "Hewlett-Packard Internet Keyboard 5181"
-#~ msgstr "Hewlett-Packard Internet Keyboard 5181"
-
-#~ msgid "Hewlett-Packard Internet Keyboard 5185"
-#~ msgstr "Hewlett-Packard Internet Keyboard 5185"
-
-#~ msgid "Hewlett-Packard SK-2505 Internet Keyboard"
-#~ msgstr "Hewlett-Packard SK-2505 Internettangentbord"
-
-#~ msgid "IBM Rapid Access II (alternate option)"
-#~ msgstr "IBM Rapid Access II (alternativ)"
-
-#~ msgid "LCtrl+LShift change layout."
-#~ msgstr "Vänster Ctrl + vänster Skift byter layout."
-
-#~ msgid "Layout switching"
-#~ msgstr "Layoutväxling"
-
-#~ msgid "Left Alt key changes layout."
-#~ msgstr "Vänster Alt-tangent byter layout."
-
-#~ msgid "Left Alt key switches layout while pressed."
-#~ msgstr "Vänster Alt-tangent byter layout då den trycks ned."
-
-#~ msgid "Left Ctrl key changes layout."
-#~ msgstr "Vänster Ctrl-tangent byter layout."
-
-#~ msgid "Left Shift key changes layout."
-#~ msgstr "Vänster Skift-tangent byter layout."
-
-#~ msgid "Left Win-key changes layout."
-#~ msgstr "Vänster Win-tangent byter layout."
-
-#~ msgid "Left Win-key is Compose."
-#~ msgstr "Vänster Win-tangent är Compose."
-
-#~ msgid "Legacy keypad"
-#~ msgstr "Äldre numeriskt tangentbord"
-
-#~ msgid "Menu is Compose."
-#~ msgstr "Meny är Compose."
-
-#~ msgid "Neostyle"
-#~ msgstr "Neostyle"
-
-#~ msgid "NumLock LED shows alternative layout."
-#~ msgstr "NumLock-lampan visar alternativ layout."
-
-#~ msgid "Press Left Alt key to choose 3rd level."
-#~ msgstr "Tryck vänster Alt-tangent för att välja tredjenivå."
-
-#~ msgid "Press Left Win-key to choose 3rd level."
-#~ msgstr "Tryck vänster Win-tangent för att välja tredjenivå."
+#: ../rules/base.xml.in.h:713
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Specialtangenter (Ctrl+Alt+&lt;tangent&gt;) hanteras i en server"
-#~ msgid "Press Right Alt key to choose 3rd level."
-#~ msgstr "Tryck höger Alt-tangent för att välja tredjenivå."
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Type 5/6"
-#~ msgid "Press Right Ctrl to choose 3rd level."
-#~ msgstr "Tryck höger Ctrl-tangent för att välja tredjenivå."
+#: ../rules/base.xml.in.h:715
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power Multimedia Keyboard"
-#~ msgid "Press Right Win-key to choose 3rd level."
-#~ msgstr "Tryck höger Win-tangent för att välja tredjenivå."
+#: ../rules/base.xml.in.h:716
+msgid "Swahili (Kenya)"
+msgstr "Swahilisk (Kenya)"
-#~ msgid "Press any of Alt keys to choose 3rd level."
-#~ msgstr "Tryck valfri Alt-tangent för att välja tredjenivå."
+#: ../rules/base.xml.in.h:717
+msgid "Swahili (Tanzania)"
+msgstr "Swahilisk (Tanzania)"
-#~ msgid "Press any of Win-keys to choose 3rd level."
-#~ msgstr "Tryck valfri Win-tangent för att välja tredjenivå."
+#: ../rules/base.xml.in.h:718
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Byt Ctrl och Caps Lock"
-#~ msgid "R-Alt switches layout while pressed."
-#~ msgstr "Höger Alt-tangent byter layout då den trycks ned."
+#: ../rules/base.xml.in.h:719
+msgid "Swap ESC and Caps Lock"
+msgstr "Byt ESC och Caps Lock"
-#~ msgid "Right Alt is Compose."
-#~ msgstr "Höger Alt är Compose."
+#: ../rules/base.xml.in.h:720
+msgid "Swedish"
+msgstr "Svensk"
-#~ msgid "Right Alt key changes layout."
-#~ msgstr "Höger Alt-tangent byter layout."
+#: ../rules/base.xml.in.h:721
+msgid "Swedish (Dvorak)"
+msgstr "Svensk (Dvorak)"
-#~ msgid "Right Ctrl is Compose."
-#~ msgstr "Höger Ctrl är Compose."
+#: ../rules/base.xml.in.h:722
+msgid "Swedish (Mac)"
+msgstr "Svensk (Mac)"
-#~ msgid "Right Ctrl key changes layout."
-#~ msgstr "Höger Ctrl-tangent byter layout."
+#: ../rules/base.xml.in.h:723
+msgid "Swedish (Svdvorak)"
+msgstr "Svensk (Svdvorak)"
-#~ msgid "Right Ctrl key switches layout while pressed."
-#~ msgstr "Höger Ctrl-tangent byter layout då den trycks ned."
+#: ../rules/base.xml.in.h:724
+msgid "Swedish (eliminate dead keys)"
+msgstr "Svensk (eliminera stumma tangenter)"
-#~ msgid "Right Shift key changes layout."
-#~ msgstr "Höger Skift-tangent byter layout."
+#: ../rules/base.xml.in.h:725
+msgid "Swedish (northern Saami)"
+msgstr "Svensk (Nordsamisk)"
-#~ msgid "Right Win-key changes layout."
-#~ msgstr "Höger Win-tangent byter layout."
+#: ../rules/base.xml.in.h:726
+msgid "Swiss"
+msgstr "Schweizisk"
-#~ msgid "Right Win-key is Compose."
-#~ msgstr "Höger Win-tangent är Compose."
+#: ../rules/base.xml.in.h:727
+msgid "Swiss (legacy)"
+msgstr "Schweizisk (äldre)"
-#~ msgid "ScrollLock LED shows alternative layout."
-#~ msgstr "ScrollLock-lampan visar alternativ layout."
+#: ../rules/base.xml.in.h:728
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (tablet PC)"
-#~ msgid "Shift+CapsLock changes layout."
-#~ msgstr "Skift+CapsLock-tangenten byter layout."
+#: ../rules/base.xml.in.h:729
+msgid "Syriac"
+msgstr "Syrisk"
-#~ msgid "Swap keycodes of two keys when Mac keyboards are misdetected by kernel."
-#~ msgstr "Byt tangentkoder för två tangenter när Mac-tangentbord identifieras fel av kärnan."
+#: ../rules/base.xml.in.h:730
+msgid "Syriac (phonetic)"
+msgstr "Syrisk (fonetisk)"
-#~ msgid "Third level choosers"
-#~ msgstr "Tredjenivåsväljare"
+#: ../rules/base.xml.in.h:731
+msgid "Taiwanese"
+msgstr "Taiwanesisk"
-#~ msgid "Urdu"
-#~ msgstr "Urdu"
+#: ../rules/base.xml.in.h:732
+msgid "Taiwanese (indigenous)"
+msgstr "Taiwanesisk (inhemsk)"
-#~ msgid "(Legacy) Dvorak"
-#~ msgstr "(Äldre) Dvorak"
+#: ../rules/base.xml.in.h:733
+msgid "Tajik"
+msgstr "Tadjikisk"
-#~ msgid "Commabelow"
-#~ msgstr "Commabelow"
+#: ../rules/base.xml.in.h:734
+msgid "Tajik (legacy)"
+msgstr "Tadjikisk (äldre)"
-#~ msgid "Dnk"
-#~ msgstr "Dnk"
+#: ../rules/base.xml.in.h:735
+msgid "Tamil"
+msgstr "Tamilsk"
-#~ msgid "Kyr"
-#~ msgstr "Kyr"
+#: ../rules/base.xml.in.h:736
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Tamilsk (Sri Lanka, TAB Typewriter)"
-#~ msgid "Lva"
-#~ msgstr "Lva"
+#: ../rules/base.xml.in.h:737
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Tamilsk (Sri Lanka, Unicode)"
-#~ msgid "Standard (Commabelow)"
-#~ msgstr "Standard (Commabelow)"
+#: ../rules/base.xml.in.h:738
+msgid "Tamil (TAB typewriter)"
+msgstr "Tamilsk (TAB Typewriter)"
-#~ msgid "\"Typewriter\""
-#~ msgstr "\"Skrivmaskin\""
+#: ../rules/base.xml.in.h:739
+msgid "Tamil (TSCII typewriter)"
+msgstr "Tamilsk (TSCII Typewriter)"
-#~ msgid "Acts as Shift with locking. Shift cancels Caps."
-#~ msgstr "Fungerar som Skift med låsning. Skift \"pausar\" Caps Lock."
+#: ../rules/base.xml.in.h:740
+msgid "Tamil (Unicode)"
+msgstr "Tamilsk (Unicode)"
-#~ msgid "Acts as Shift with locking. Shift doesn't cancel Caps."
-#~ msgstr "Fungerar som Skift med låsning. Skift påverkar inte Caps Lock."
+#: ../rules/base.xml.in.h:741
+msgid "Tamil (keyboard with numerals)"
+msgstr "Tamilsk (tangentbord med siffror)"
-#~ msgid "Alt+Control changes group"
-#~ msgstr "Alt+Control byter grupp"
+#: ../rules/base.xml.in.h:742
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
-#~ msgid "Alt+Shift changes group"
-#~ msgstr "Alt+Shift byter grupp"
+#: ../rules/base.xml.in.h:743
+msgid "Telugu"
+msgstr "Telugo"
-#~ msgid "Belgian"
-#~ msgstr "Belgisk"
+#: ../rules/base.xml.in.h:744
+msgid "Thai"
+msgstr "Thailändsk"
-#~ msgid "Bulgarian"
-#~ msgstr "Bulgarisk"
+#: ../rules/base.xml.in.h:745
+msgid "Thai (Pattachote)"
+msgstr "Thailändsk (Pattachote)"
-#~ msgid "Canadian"
-#~ msgstr "Kanadensisk"
+#: ../rules/base.xml.in.h:746
+msgid "Thai (TIS-820.2538)"
+msgstr "Thailändsk (TIS-820.2538)"
-#~ msgid "Caps Lock key changes group"
-#~ msgstr "Caps Lock-tangenten byter grupp"
+#: ../rules/base.xml.in.h:747
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "Till motsvarande tangent på ett Dvorak-tangentbord."
-#~ msgid "Caps_Lock LED shows alternative group"
-#~ msgstr "CapsLock-lampan visar alternativ grupp"
+#: ../rules/base.xml.in.h:748
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "Till motsvarande tangent på ett Qwerty-tangentbord."
-#~ msgid "Control Key Position"
-#~ msgstr "Position för Control-tangent"
+#: ../rules/base.xml.in.h:749
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Växla PointerKeys med Skift + NumLock."
-#~ msgid "Control key at bottom left"
-#~ msgstr "Control-tangenten nere till vänster"
+#: ../rules/base.xml.in.h:750
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
-#~ msgid "Control key at left of 'A'"
-#~ msgstr "Control-tangenten till vänster om \"A\""
+#: ../rules/base.xml.in.h:751
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access-tangentbord"
-#~ msgid "Control+Shift changes group"
-#~ msgstr "Control+Skift byter grupp"
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
-#~ msgid "Czech"
-#~ msgstr "Tjeckisk"
+#: ../rules/base.xml.in.h:753
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
-#~ msgid "Danish"
-#~ msgstr "Dansk"
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr "Tswana"
-#~ msgid "DeuCH"
-#~ msgstr "DeuCH"
+#: ../rules/base.xml.in.h:755
+msgid "Turkish"
+msgstr "Turkisk"
-#~ msgid "Dvo"
-#~ msgstr "Dvo"
+#: ../rules/base.xml.in.h:756
+msgid "Turkish (Alt-Q)"
+msgstr "Turkisk (Alt-Q)"
-#~ msgid "Finnish"
-#~ msgstr "Finsk"
+#: ../rules/base.xml.in.h:757
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Turkisk (Krimtatarisk turkiskt Alt-Q)"
-#~ msgid "FraCH"
-#~ msgstr "FraCH"
+#: ../rules/base.xml.in.h:758
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Turkisk (Krimtatarisk turkiskt F)"
-#~ msgid "German"
-#~ msgstr "Tysk"
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Turkisk (Krimtatarisk turkiskt Q)"
-#~ msgid "Group Shift/Lock behavior"
-#~ msgstr "Gruppbeteende för Skift/Lock"
+#: ../rules/base.xml.in.h:760
+msgid "Turkish (F)"
+msgstr "Turkisk (F)"
-#~ msgid "Hungarian"
-#~ msgstr "Ungersk"
+#: ../rules/base.xml.in.h:761
+msgid "Turkish (Sun dead keys)"
+msgstr "Turkisk (Sun stumma tangenter)"
-#~ msgid "Italian"
-#~ msgstr "Italiensk"
+#: ../rules/base.xml.in.h:762
+msgid "Turkish (international with dead keys)"
+msgstr "Turkisk (Internationell med stumma tangenter)"
-#~ msgid "Japanese"
-#~ msgstr "Japansk"
+#: ../rules/base.xml.in.h:763
+msgid "Turkmen"
+msgstr "Turkmenisk"
-#~ msgid "Left Alt key changes group"
-#~ msgstr "Vänster Alt-tangent byter grupp"
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr "Turkmenisk (Alt-Q)"
-#~ msgid "Left Ctrl key changes group"
-#~ msgstr "Vänster Ctrl-tangent byter grupp"
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
-#~ msgid "Left Shift key changes group"
-#~ msgstr "Vänster Skift-tangent byter grupp"
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
-#~ msgid "Make CapsLock an additional Control"
-#~ msgstr "Gör CapsLock till ytterligare en Control-tangent"
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
-#~ msgid "Norwegian"
-#~ msgstr "Norsk"
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:EU-läge)"
-#~ msgid "Num_Lock LED shows alternative group"
-#~ msgstr "Num_Lock-lampan visar alternativ grupp"
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:JP-läge)"
-#~ msgid "Polish"
-#~ msgstr "Polsk"
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Ukrainsk"
-#~ msgid "Polish with Polish quotes on key \"1/!\""
-#~ msgstr "Polska med polska citattecken på tangenten \"1/!\""
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Ukrainsk (Krimtatarisk turkisk Alt-Q)"
-#~ msgid "Portuguese"
-#~ msgstr "Portugisisk"
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Ukrainsk (Krimtatarisk turkiskt F)"
-#~ msgid "Press Left Alt key to choose 3rd level"
-#~ msgstr "Tryck vänster Alt-tangent för att välja tredjenivå"
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Ukrainsk (Krimtatarisk turkiskt Q)"
-#~ msgid "Press Right Alt key to choose 3rd level"
-#~ msgstr "Tryck höger Alt-tangent för att välja tredjenivå"
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Ukrainsk (Windows-tangenter)"
-#~ msgid "Press Right Alt-key to choose 3rd level, Shift+Right Alt-key is Multi_Key"
-#~ msgstr "Tryck höger Alt-tangent för att välja tredjenivå. Skift+höger Alt-tangent är Multi_Key"
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Ukrainsk (homofonisk)"
-#~ msgid "Press Right Control to choose 3rd level"
-#~ msgstr "Tryck höger Control-tangent för att välja tredjenivå"
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Ukrainsk (äldre)"
-#~ msgid "Press any of Alt keys to choose 3rd level"
-#~ msgstr "Tryck valfri Alt-tangent för att välja tredjenivå"
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Ukrainsk (fonetisk)"
-#~ msgid "Right Alt key changes group"
-#~ msgstr "Höger Alt-tangent byter grupp"
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Ukrainsk (Standard RSTU på rysk layout)"
-#~ msgid "Right Control key works as Right Alt"
-#~ msgstr "Höger Control-tangent fungerar som höger Alt"
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Ukrainsk (Standard RSTU)"
-#~ msgid "Right Ctrl key changes group"
-#~ msgstr "Höger Ctrl-tangent byter grupp"
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Ukrainsk (skrivmaskin)"
-#~ msgid "Right Shift key changes group"
-#~ msgstr "Höger Skift-tangent byter grupp"
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Unicode-tillägg (pilar och matematikoperatorer)"
-#~ msgid "Scroll Lock changes group"
-#~ msgstr "Scroll Lock byter grupp"
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Unicode-tillägg (pilar och matematikoperatorer). Matematikoperatorer på standardnivå"
-#~ msgid "Scroll_Lock LED shows alternative group"
-#~ msgstr "Scroll_Lock-lampan visar alternativ grupp"
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
-#~ msgid "Shift with numpad keys works as in MS Windows"
-#~ msgstr "Skift med tangenterna på numeriska tangentbordet fungerar som i MS Windows"
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Urdu (Pakistan)"
-#~ msgid "Shift+CapsLock changes group"
-#~ msgstr "Skift+CapsLock byter grupp"
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Urdu (Pakistan, CRULP)"
-#~ msgid "Slovak"
-#~ msgstr "Slovakisk"
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Urdu (Pakistan, NLA)"
-#~ msgid "Spanish"
-#~ msgstr "Spansk"
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Urdu (Windows-tangenter)"
-#~ msgid "Sun Type 4"
-#~ msgstr "Sun Type 4"
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Urdu (alternativ fonetisk)"
-#~ msgid "Sun Type 5 European"
-#~ msgstr "Sun Type 5 europeisk"
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Urdu (fonetisk)"
-#~ msgid "Sun Type 5 Unix"
-#~ msgstr "Sun Type 5 Unix"
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Använd tangentbordslampa för att visa alternativ layout"
-#~ msgid "Sun Type 6"
-#~ msgstr "Sun Type 6"
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Använder blankstegstangenten för att mata in icke-brytande blankstegstecken"
-#~ msgid "Sun Type 6 Unix"
-#~ msgstr "Sun Type 6 Unix"
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Vanligt blanksteg på alla nivåer"
-#~ msgid "Sun Type 6 with Euro key"
-#~ msgstr "Sun Type 6 med eurotangent"
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Uzbekisk"
-#~ msgid "Swap Control and Caps Lock"
-#~ msgstr "Byt Control och Caps Lock"
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Uzbekisk (Afganistan)"
-#~ msgid "Swedish"
-#~ msgstr "Svensk"
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Uzbekisk (Afganistan, OLPC)"
-#~ msgid "Swiss French"
-#~ msgstr "Franskschweizisk"
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Uzbekisk (Krimtatarisk turkisk Alt-Q)"
-#~ msgid "Swiss German"
-#~ msgstr "Schweizertysk"
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Uzbekisk (Krimtatarisk turkisk F)"
-#~ msgid "Turkish"
-#~ msgstr "Turkisk"
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Uzbekisk (Krimtatarisk turkisk Q)"
-#~ msgid "Turkish (F)"
-#~ msgstr "Turkisk (F)"
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Uzbekisk (Latin)"
-#~ msgid "Turkish Alt-Q Layout"
-#~ msgstr "Turkisk Alt-Q-layout"
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "Vietnamesisk"
-#~ msgid "U.S. English w/ ISO9995-3"
-#~ msgstr "Engelskamerikansk med ISO9995-3"
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 internettangentbord"
-#~ msgid "Use keyboard LED to show alternative group"
-#~ msgstr "Använd tangentbordslampa för att visa alternativ grupp"
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Wang 724 numeriskt tangentbord med unicode-tillägg (pilar och matematikoperatorer)"
-#~ msgid "Uses internal capitalization. Shift cancels Caps."
-#~ msgstr "Använder intern skiftlägesstyrning. Skift \"pausar\" CapsLock."
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Wang 724 numeriskt tangentbord med unicode-tillägg (pilar och matematikoperatorer). Matematikoperatorer på standardnivå"
-#~ msgid "Uses internal capitalization. Shift doesn't cancel Caps."
-#~ msgstr "Använder intern skiftlägesstyrning. Skift påverkar inte CapsLock."
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
-#~ msgid "bksl"
-#~ msgstr "bksl"
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Wolofsk"
-#~ msgid "type4"
-#~ msgstr "type4"
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! Internettangentbord"
-#~ msgid "Kotoistus"
-#~ msgstr "Kotoistus"
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Yoruba"
-#~ msgid "SCG"
-#~ msgstr "SCG"
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån"
-#~ msgid "Acer TravelMate 800"
-#~ msgstr "Acer TravelMate 800"
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, icke-brytande blankstegstecken på tredje nivån"
-#~ msgid "Dell SK-8125 USB Multimedia Keybard"
-#~ msgstr "Dell SK-8125 USB Multimedia-tangentbord"
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, icke-brytande blankstegstecken på tredje nivån, ingenting på fjärde nivån"
-#~ msgid "Dell SK-8135 USB Multimedia Keybard"
-#~ msgstr "Dell SK-8135 USB Multimedia-tangentbord"
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, icke-brytande blankstegstecken på tredje nivån, tunt icke-brytande blanksteg på fjärde nivån"
-#~ msgid "Force standard legacy keypad"
-#~ msgstr "Tvinga ursprungligt standard numeriskt tangentbord"
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, icke-brytande blankstegstecken på tredje nivån, noll-bredd sammanfogande på fjärde nivån"
-#~ msgid "Adding the nobreakspace keysym to space key"
-#~ msgstr "Lägger till den icke-brytande blankstegstangentsymbolen till blankstegstangenten"
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, noll-bredd, sammanfogande tecken på tredje nivån"
-#~ msgid "PowerPC PS/2"
-#~ msgstr "PowerPC PS/2"
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Noll-bredd, icke-sammanfogande tecken på andra nivån, noll-bredd, sammanfogande tecken på tredje nivån, icke-brytande blankstegstecken på fjärde nivån"
-#~ msgid "\"Standard\""
-#~ msgstr "\"Standard\""
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Noll-bredd, icke-sammanfogande tecken på tredje nivån, noll-bredd, sammanfogande på fjärde nivån"
-#~ msgid "Dhivehi"
-#~ msgstr "Dhivehi"
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
-#~ msgid "Div"
-#~ msgstr "Div"
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
-#~ msgid "Logitech Deluxe Access Keyboard"
-#~ msgstr "Logitech Deluxe Access-tangentbord"
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
-#~ msgid "Logitech iTouch keyboard Internet Navigator"
-#~ msgstr "Logitech iTouch-tangentbord Internet Navigator"
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
-#~ msgid "Srp"
-#~ msgstr "Srp"
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
-#~ msgid "Tamil INSCRIPT"
-#~ msgstr "Tamil INSCRIPT"
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
-#~ msgid "si1452"
-#~ msgstr "si1452"
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
-#~ msgid "A Tamil typewrite-style keymap; TAB encoding"
-#~ msgstr "En tamilsk tangentbordstabell i skrivmaskinsstil; TAB-kodning"
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
-#~ msgid "A Tamil typewrite-style keymap; TSCII encoding"
-#~ msgstr "En tamilsk tangentbordstabell i skrivmaskinsstil; TSCII-kodning"
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
-#~ msgid "A Tamil typewrite-style keymap; Unicode encoding"
-#~ msgstr "En tamilsk tangentbordstabell i skrivmaskinsstil; Unicode-kodning"
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
-#~ msgid "Arb"
-#~ msgstr "Arb"
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
-#~ msgid "Bosnian"
-#~ msgstr "Bosnisk"
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
-#~ msgid "Burmese"
-#~ msgstr "Burmesisk"
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
-#~ msgid "CloGaelach Laptop"
-#~ msgstr "CloGaelach-laptop"
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
-#~ msgid "Czech (qwerty)"
-#~ msgstr "Tjeckisk (qwerty)"
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
-#~ msgid "Dutch"
-#~ msgstr "Nederländsk"
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
-#~ msgid "French Canadian"
-#~ msgstr "Franskkanadensisk"
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
-#~ msgid "Georgian (latin)"
-#~ msgstr "Georgisk (latin)"
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
-#~ msgid "Georgian (russian)"
-#~ msgstr "Georgisk (rysk)"
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
-#~ msgid "Grc"
-#~ msgstr "Grc"
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
-#~ msgid "Hin"
-#~ msgstr "Hin"
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
-#~ msgid "INSCRIPT layout"
-#~ msgstr "INSCRIPT-layout"
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
-#~ msgid "IS434 laptop"
-#~ msgstr "IS434-laptop"
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
-#~ msgid "Iku"
-#~ msgstr "Iku"
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
-#~ msgid "Irish"
-#~ msgstr "Irländsk"
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
-#~ msgid "Lithuanian azerty standard"
-#~ msgstr "Litauisk azerty-standard"
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
-#~ msgid "Lithuanian qwerty \"numeric\""
-#~ msgstr "Litauisk qwerty \"numerisk\""
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
-#~ msgid "Northern Saami (Finland)"
-#~ msgstr "Nordsamisk (Finland)"
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
-#~ msgid "Northern Saami (Norway)"
-#~ msgstr "Nordsamisk (Norge)"
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
-#~ msgid "Northern Saami (Sweden)"
-#~ msgstr "Nordsamisk (Sverige)"
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
-#~ msgid "Ogh"
-#~ msgstr "Ogh"
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
-#~ msgid "Ori"
-#~ msgstr "Ori"
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
-#~ msgid "PC104"
-#~ msgstr "PC104"
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
-#~ msgid "Polish (qwertz)"
-#~ msgstr "Polsk (qwertz)"
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
-#~ msgid "Sapmi"
-#~ msgstr "Sapmi"
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
-#~ msgid "Scg"
-#~ msgstr "Scg"
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
-#~ msgid "Slovak (qwerty)"
-#~ msgstr "Slovakisk (qwerty)"
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
-#~ msgid "Sv"
-#~ msgstr "Sv"
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
-#~ msgid "Tel"
-#~ msgstr "Tel"
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
-#~ msgid "Thai (Kedmanee)"
-#~ msgstr "Thailändsk (Kedmanee)"
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
-#~ msgid "Tml"
-#~ msgstr "Tml"
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
-#~ msgid "U.S. English w/ dead keys"
-#~ msgstr "Engelskamerikansk med stumma tangenter"
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
-#~ msgid "US"
-#~ msgstr "USA"
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
-#~ msgid "Yug"
-#~ msgstr "Yug"
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
-#~ msgid "Yugoslavian"
-#~ msgstr "Jugoslavisk"
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
-#~ msgid "abnt2"
-#~ msgstr "abnt2"
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
-#~ msgid "sefi"
-#~ msgstr "sefi"
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
-#~ msgid "uni/101/qwerty/comma"
-#~ msgstr "uni/101/qwerty/komma"
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
-#~ msgid "uni/101/qwerty/dot"
-#~ msgstr "uni/101/qwerty/punkt"
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
-#~ msgid "uni/101/qwertz/comma"
-#~ msgstr "uni/101/qwertz/komma"
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
-#~ msgid "uni/101/qwertz/dot"
-#~ msgstr "uni/101/qwertz/punkt"
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
-#~ msgid "uni/102/qwerty/comma"
-#~ msgstr "uni/102/qwerty/komma"
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
-#~ msgid "uni/102/qwerty/dot"
-#~ msgstr "uni/102/qwerty/punkt"
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
-#~ msgid "uni/102/qwertz/comma"
-#~ msgstr "uni/102/qwertz/komma"
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
-#~ msgid "uni/102/qwertz/dot"
-#~ msgstr "uni/102/qwertz/punkt"
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
-#~ msgid "Brazilian (ABNT2)"
-#~ msgstr "Brasiliansk (ABNT2)"
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
-#~ msgid "Caps Lock key behavior"
-#~ msgstr "Beteende för Caps Lock-tangenten"
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
-#~ msgid "Caps Lock LED shows alternative group"
-#~ msgstr "Caps Lock-lampan visar alternativ grupp"
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
-#~ msgid "Logitech"
-#~ msgstr "Logitech"
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
-#~ msgid "Microsoft"
-#~ msgstr "Microsoft"
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
-#~ msgid "Miscellaneous options"
-#~ msgstr "Diverse alternativ"
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
-#~ msgid "Win-keys"
-#~ msgstr "Win-tangenter"
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
-#~ msgid "Utility"
-#~ msgstr "Verktyg"
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
-#~ msgid "_About..."
-#~ msgstr "_Om..."
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
-#~ msgid "_Groups"
-#~ msgstr "_Grupper"
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
-#~ msgid "_Help"
-#~ msgstr "_Hjälp"
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
-#~ msgid "_Plugins..."
-#~ msgstr "_Insticksmoduler..."
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
-#~ msgid "_Properties..."
-#~ msgstr "_Egenskaper..."
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
-#~ msgid "Keyboard switcher (%s)"
-#~ msgstr "Tangentbordsväxlare (%s)"
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
-#~ msgid "translator_credits"
-#~ msgstr ""
-#~ "Christian Rose\n"
-#~ "Skicka synpunkter på översättningen till sv@li.org"
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
-#~ msgid "XKB initialization error"
-#~ msgstr "XKB-initieringsfel"
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
-#~ msgid "Error loading XKB configuration registry"
-#~ msgstr "Fel vid inläsning av XKB-konfigurationsregistret"
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
-#~ msgid ""
-#~ "Make the layout accessible from the applet popup menu ONLY.\n"
-#~ "No way to switch to this layout using the keyboard."
-#~ msgstr ""
-#~ "Gör layouten tillgänglig ENDAST från panelpopupmenyn.\n"
-#~ "Ingen möjlighet att byta denna layout genom användning av tangentbordet."
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
-#~ msgid "Exclude from keyboard switching"
-#~ msgstr "Exkludera från tangentbordsväxling"
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
-#~ msgid "not used"
-#~ msgstr "används inte"
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
-#~ msgid "Activate more plugins"
-#~ msgstr "Aktivera fler insticksmoduler"
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
-#~ msgid "Add plugin"
-#~ msgstr "Lägg till insticksmodul"
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
-#~ msgid "Close the dialog"
-#~ msgstr "Stäng dialogfönstret"
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
-#~ msgid "Configure the selected plugin"
-#~ msgstr "Konfigurera den markerade insticksmodulen"
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
-#~ msgid "Deactivate selected plugin"
-#~ msgstr "Inaktivera den markerade insticksmodulen"
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
-#~ msgid "Decrease the plugin priority"
-#~ msgstr "Minska insticksmodulprioriteten"
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
-#~ msgid "Increase the plugin priority"
-#~ msgstr "Öka insticksmodulprioriteten"
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
-#~ msgid "The list of active plugins"
-#~ msgstr "Listan med aktiva insticksmoduler"
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
-#~ msgid "_Active plugins"
-#~ msgstr "_Aktiva insticksmoduler"
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
-#~ msgid "_Available plugins:"
-#~ msgstr "_Tillgängliga insticksmoduler:"
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
-#~ msgid "Choose the default group (for newly created windows)."
-#~ msgstr "Välj standardgrupp (för nyligen skapade fönster)."
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
-#~ msgid "Keep separate group for each application window."
-#~ msgstr "Behåll separat grupp för varje programfönster."
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
-#~ msgid "Keep the state of indicators separately for each application window."
-#~ msgstr "Behåll tillståndet för indikatorerna separat för varje programfönster."
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
-#~ msgid "Save/restore _indicators with group"
-#~ msgstr "Spara/återställ _indikatorer med grupp"
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
-#~ msgid "Separate _group for each window"
-#~ msgstr "Separat _grupp för varje fönster"
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
-#~ msgid "Show national flags as indicators of corresponding layouts"
-#~ msgstr "Visa nationsflaggor som indikatorer för motsvarande layout"
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
-#~ msgid "Use _flags as indicators"
-#~ msgstr "Använd _flaggor som indikatorer"
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
-#~ msgid "_Default group:"
-#~ msgstr "_Standardgrupp:"
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
-#~ msgid "_Default group"
-#~ msgstr "_Standardgrupp"
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
-#~ msgid "Apply XKB configuration and quit"
-#~ msgstr "Verkställ XKB-konfiguration och avsluta"
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
-#~ msgid "..."
-#~ msgstr "..."
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
-#~ msgid "Postscript preview component is not available"
-#~ msgstr "Postscript-förhandsvisningskomponent är inte tillgänglig"
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
-#~ msgid "Keyboard layout preview"
-#~ msgstr "Förhandsvisning av tangentbordslayout"
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
-#~ msgid "Configure keyboard layouts"
-#~ msgstr "Konfigurera tangentbordslayouter"
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
-#~ msgid "Keyboard layouts"
-#~ msgstr "Tangentbordslayouter"
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
-#~ msgid "Choose the layout."
-#~ msgstr "Välj layout."
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
-#~ msgid "Choose the layout. Note: one layout can provide several groups."
-#~ msgstr "Välj layouten. Observera att en layout kan tillhandahålla flera grupper."
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
-#~ msgid "Choose the model of the keyboard (brand, number of keys, etc.)."
-#~ msgstr "Välj modellen på tangentbordet (märke, antal tangenter, osv.)."
+#: ../rules/base.extras.xml.in.h:1
+msgid "APL"
+msgstr "APL"
-#~ msgid "Clear."
-#~ msgstr "Töm."
+#: ../rules/base.extras.xml.in.h:2
+msgid "Iran"
+msgstr "Iran"
-#~ msgid "Extra"
-#~ msgstr "Extra"
+#: ../rules/base.extras.xml.in.h:3
+msgid "Iran - Avestan"
+msgstr "Iran - Avestan"
-#~ msgid "Keyboard _model:"
-#~ msgstr "Tangentbords_modell:"
+#: ../rules/base.extras.xml.in.h:4
+msgid "Lithuania"
+msgstr "Litauen"
-#~ msgid "Keyboard layouts' settings: "
-#~ msgstr "Inställningar för tangentbordslayouter: "
+#: ../rules/base.extras.xml.in.h:5
+msgid "Lithuania - Dvorak"
+msgstr "Litauen - Dvorak"
-#~ msgid "Options 1"
-#~ msgstr "Alternativ 1"
+#: ../rules/base.extras.xml.in.h:6
+msgid "Ltu"
+msgstr "Ltu"
-#~ msgid "Options 2"
-#~ msgstr "Alternativ 2"
+#: ../rules/base.extras.xml.in.h:7
+msgid "Romania"
+msgstr "Rumänien"
-#~ msgid "Show _advanced parameters"
-#~ msgstr "Visa _avancerade parametrar"
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Rumänien - Ergonomisk Touchtype"
-#~ msgid "Show tabs with advanced keyboard parameters (for power users)."
-#~ msgstr "Visa flikar med avancerade tangentbordsparametrar (för avancerade användare)."
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rou"
-#~ msgid "This version of XFree86 does not support multiple layouts, so only one layout can be choosen."
-#~ msgstr "Denna version av XFree86 stöder inte flera layouter, så endast en layout kan väljas."
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
-#~ msgid "Use custom settings, ignore global configuration set in XF86Config."
-#~ msgstr "Använd anpassade inställningar, ignorera global konfiguration som är angiven i XF86Config."
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Ryssland"
-#~ msgid "Use global configuration set in XF86Config."
-#~ msgstr "Använd global konfiguration som är angiven i XF86Config."
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Serbien"
-#~ msgid "_Custom"
-#~ msgstr "_Anpassad"
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Serbien - Kombinerade accenter istället för stumma tangenter"
-#~ msgid "_Global Preconfigured"
-#~ msgstr "_Global förkonfigurerad"
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
-#~ msgid "_Layouts:"
-#~ msgstr "_Layouter:"
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "USA"
-#~ msgid "_Preview"
-#~ msgstr "_Förhandsgranska"
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "USA - Atsina"
-#~ msgid "_Switch shortcut"
-#~ msgstr "_Växlingsgenväg"
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "USA - Couer D'alene Salish"
-#~ msgid "Default XKB setting"
-#~ msgstr "XKB-standardinställning"
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "USA - Internationell (AltGr med kombinerad Unicode)"
-#~ msgid "Grave"
-#~ msgstr "Allvarlig"
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "USA - Internationell (AltGr med kombinerad Unicode, alternativ)"
-#~ msgid "Beep on group switch"
-#~ msgstr "Pip vid gruppbyte"
+#~ msgid "(F)"
+#~ msgstr "(F)"
-#~ msgid "Debug level"
-#~ msgstr "Felsökningsnivå"
+#~ msgid "2"
+#~ msgstr "2"
-#~ msgid "Default group, assigned on window creation"
-#~ msgstr "Standardgrupp som tilldelas vid fönsterskapande"
+#~ msgid "4"
+#~ msgstr "4"
-#~ msgid "Keep and manage separate group per window"
-#~ msgstr "Behåll och hantera separata grupper per fönster"
+#~ msgid "5"
+#~ msgstr "5"
-#~ msgid "Save/restore indicators together with layout groups"
-#~ msgstr "Spara/återställ indikatorer tillsammans med layoutgrupper"
+#~ msgid "ACPI Standard"
+#~ msgstr "ACPI-standard"
-#~ msgid "Secondary groups"
-#~ msgstr "Sekundära grupper"
+#~ msgid "Alb"
+#~ msgstr "Alb"
-#~ msgid "Show flags in the applet"
-#~ msgstr "Visa flaggor i panelprogrammet"
+#~ msgid "Alt-Q"
+#~ msgstr "Alt-Q"
-#~ msgid "Show flags in the applet to indicate the current layout"
-#~ msgstr "Visa flaggor i panelprogrammet för att indikera aktuell layout"
+#~ msgid "Alternative"
+#~ msgstr "Alternativ"
-#~ msgid "Show layout names instead of group names"
-#~ msgstr "Visa layoutnamn istället för gruppnamn"
+#~ msgid "And"
+#~ msgstr "And"
-#~ msgid "Show layout names instead of group names (only for versions of XFree supporting multiple layouts)"
-#~ msgstr "Visa layoutnamn istället för gruppnamn (endast för versioner av XFree som stöder flera layouter)"
+#~ msgid "Andorra"
+#~ msgstr "Andorra"
-#~ msgid "The id of active switchcut"
-#~ msgstr "Id för den aktiva genvägen"
+#~ msgid "Ara"
+#~ msgstr "Ara"
-#~ msgid "XKB keyboard layout"
-#~ msgstr "XKB-tangentbordslayout"
+#~ msgid "Arm"
+#~ msgstr "Arm"
-#~ msgid "XKB keyboard model"
-#~ msgstr "XKB-tangentbordsmodell"
+#~ msgid "Aze"
+#~ msgstr "Aze"
-#~ msgid "XKB options"
-#~ msgstr "XKB-alternativ"
+#~ msgid "Bangladesh"
+#~ msgstr "Bangladesh"
-#~ msgid "XKB settings should be overridden"
-#~ msgstr "XKB-inställningar ska åsidosättas"
+#~ msgid "Bel"
+#~ msgstr "Bel"
-#~ msgid "[us]"
-#~ msgstr "[se]"
+#~ msgid "Belgium"
+#~ msgstr "Belgien"
-#~ msgid "Choose the color"
-#~ msgstr "Välj färg"
+#~ msgid "Bhutan"
+#~ msgstr "Bhutan"
-#~ msgid "Highlighter"
-#~ msgstr "Färgmarkör"
+#~ msgid "Bih"
+#~ msgstr "Bih"
-#~ msgid " "
-#~ msgstr " "
+#~ msgid "Blr"
+#~ msgstr "Blr"
-#~ msgid "Highlighter plugin properties"
-#~ msgstr "Egenskaper för färgmarkörsinsticksmodul"
+#~ msgid "Bosnia and Herzegovina"
+#~ msgstr "Bosnien och Herzegovina"
-#~ msgid "_Background color"
-#~ msgstr "_Bakgrundsfärg"
+#~ msgid "Bra"
+#~ msgstr "Bra"
-#~ msgid "_Text color"
-#~ msgstr "_Textfärg"
+#~ msgid "Brazil"
+#~ msgstr "Brasilien"
-#~ msgid "Keyboard events"
-#~ msgstr "Tangentbordshändelser"
+#~ msgid "Breton"
+#~ msgstr "Breton"
-#~ msgid "Switching to group 2"
-#~ msgstr "Växlar till grupp 2"
+#~ msgid "Bulgaria"
+#~ msgstr "Bulgarien"
-#~ msgid "Switching to group 3"
-#~ msgstr "Växlar till grupp 3"
+#~ msgid "CRULP"
+#~ msgstr "CRULP"
-#~ msgid "Switching to group 4"
-#~ msgstr "Växlar till grupp 4"
+#~ msgid "Can"
+#~ msgstr "Can"
-#~ msgid "Sound plugin"
-#~ msgstr "Ljudinsticksmodul"
+#~ msgid "Canada"
+#~ msgstr "Kanada"
-#~ msgid "Test plugin"
-#~ msgstr "Testinsticksmodul"
+#~ msgid "CapsLock"
+#~ msgstr "CapsLock"
-#~ msgid "Choose color"
-#~ msgstr "Välj färg"
+#~ msgid "CapsLock key behavior"
+#~ msgstr "Beteende för CapsLock-tangenten"
-#~ msgid "Background color"
-#~ msgstr "Bakgrundsfärg"
+#~ msgid "Cedilla"
+#~ msgstr "Cedilj"
-#~ msgid "Text color"
-#~ msgstr "Textfärg"
+#~ msgid "Chuvash"
+#~ msgstr "Tjuvasjiska"
-#~ msgid "_Available plugins"
-#~ msgstr "_Tillgängliga insticksmoduler"
+#~ msgid "Classic"
+#~ msgstr "Klassisk"
-#~ msgid "Plugins"
-#~ msgstr "Insticksmoduler"
+#~ msgid "Colemak"
+#~ msgstr "Colemak"
-#~ msgid "Plugin"
-#~ msgstr "Insticksmodul"
+#~ msgid "Cyrillic"
+#~ msgstr "Kyrillisk"
-#~ msgid "Enable _beep"
-#~ msgstr "Aktivera _pip"
+#~ msgid "Cze"
+#~ msgstr "Cze"
-#~ msgid "Use the system beep to indicate the switch."
-#~ msgstr "Använd systempipet för indikation av bytet."
+#~ msgid "Czechia"
+#~ msgstr "Tjeckien"
-#~ msgid "Secondary"
-#~ msgstr "Sekundär"
+#~ msgid "DOS"
+#~ msgstr "DOS"
-#~ msgid "Use _flags"
-#~ msgstr "Använd _flaggor"
+#~ msgid "DRC"
+#~ msgstr "DRC"
-#~ msgid "Use flags as indicators"
-#~ msgstr "Använd flaggor som indikatorer"
+#~ msgid "Dan"
+#~ msgstr "Dan"
-#~ msgid "Use flags"
-#~ msgstr "Använd flaggor"
+#~ msgid "Dead acute"
+#~ msgstr "Stum akut accent"
-#~ msgid "Keyboard switcher"
-#~ msgstr "Tangentbordsväxlare"
+#~ msgid "Denmark"
+#~ msgstr "Danmark"
-#~ msgid "Keyboard Switcher"
-#~ msgstr "Tangentbordsväxlare"
+#~ msgid "Deu"
+#~ msgstr "Deu"
-#~ msgid "Configure keyboard layout"
-#~ msgstr "Konfigurera tangentbordslayout"
+#~ msgid "Dvorak"
+#~ msgstr "Dvorak"
-#~ msgid "Keyboard layout"
-#~ msgstr "Tangentbordslayout"
+#~ msgid "Dvorak international"
+#~ msgstr "Dvorak internationell"
-#~ msgid "Keyboard layout settings: "
-#~ msgstr "Inställningar för tangentbordslayouter: "
+#~ msgid "E"
+#~ msgstr "E"
-#~ msgid "General XKB Properties"
-#~ msgstr "Allmänna XKB-genskaper"
+#~ msgid "Eastern"
+#~ msgstr "Östlig"
-#~ msgid "XKB Properties"
-#~ msgstr "XKB-egenskaper"
+#~ msgid "Epo"
+#~ msgstr "Epo"
-#~ msgid "XKB settings: "
-#~ msgstr "XKB-inställningar: "
+#~ msgid "Ergonomic"
+#~ msgstr "Ergonomisk"
-#~ msgid "Preview"
-#~ msgstr "Förhandsgranska"
+#~ msgid "Est"
+#~ msgstr "Est"
-#~ msgid "To _default"
-#~ msgstr "Till _standard"
+#~ msgid "Ethiopia"
+#~ msgstr "Etiopien"
-#~ msgid "To _fit"
-#~ msgstr "Så att det _passar"
+#~ msgid "Evdev-managed keyboard"
+#~ msgstr "Evdev-hanterat tangentbord"
-#~ msgid "Update the preview. Can take some time."
-#~ msgstr "Uppdatera förhandsgranskningen. Kan ta lite tid."
+#~ msgid "Extended"
+#~ msgstr "Utökad"
-#~ msgid "Zoom"
-#~ msgstr "Zooma"
+#~ msgid "Fao"
+#~ msgstr "Fao"
-#~ msgid "Zoom in."
-#~ msgstr "Zooma in."
+#~ msgid "Finland"
+#~ msgstr "Finland"
-#~ msgid "Zoom out."
-#~ msgstr "Zooma ut."
+#~ msgid "Fra"
+#~ msgstr "Fra"
-#~ msgid "Zoom to default."
-#~ msgstr "Zooma till standard."
+#~ msgid "France"
+#~ msgstr "Frankrike"
-#~ msgid "Zoom to fit."
-#~ msgstr "Zooma så att det passar."
+#~ msgid "Georgia"
+#~ msgstr "Georgien"
-#~ msgid "_Out"
-#~ msgstr "_Ut"
+#~ msgid "Germany"
+#~ msgstr "Tyskland"
-#~ msgid "_Update preview"
-#~ msgstr "_Uppdatera förghandsgranskning"
+#~ msgid "Ghana"
+#~ msgstr "Ghana"
-#~ msgid "About..."
-#~ msgstr "Om..."
+#~ msgid "Gre"
+#~ msgstr "Gre"
-#~ msgid "Left Control - Right Control"
-#~ msgstr "Vänster ctrl - höger ctrl"
+#~ msgid "Gui"
+#~ msgstr "Gui"
-#~ msgid "Left Shift - Right Shift"
-#~ msgstr "Vänster skift - höger skift"
+#~ msgid "Guinea"
+#~ msgstr "Guinea"
-#~ msgid "Alt - Left Control"
-#~ msgstr "Alt - vänster ctrl"
+#~ msgid "Homophonic"
+#~ msgstr "Homofonisk"
-#~ msgid "Alt - Right Control"
-#~ msgstr "Alt - höger ctrl"
+#~ msgid "Hrv"
+#~ msgstr "Hrv"
-#~ msgid "Alt - Right Shift"
-#~ msgstr "Alt - höger skift"
+#~ msgid "Hun"
+#~ msgstr "Hun"
-#~ msgid "Control - Right Shift"
-#~ msgstr "Ctrl - höger skift"
+#~ msgid "Hungary"
+#~ msgstr "Ungern"
-#~ msgid "None"
-#~ msgstr "Ingen"
+#~ msgid "Ind"
+#~ msgstr "Ind"
-#~ msgid "User defined:"
-#~ msgstr "Användardefinierad:"
+#~ msgid "Ireland"
+#~ msgstr "Irland"
-#~ msgid "_Layouts"
-#~ msgstr "_Layouter"
+#~ msgid "Irl"
+#~ msgstr "Irl"
-#~ msgid "DLEVEL"
-#~ msgstr "FNIVÅ"
+#~ msgid "Irn"
+#~ msgstr "Irn"
-#~ msgid "H_ome page..."
-#~ msgstr "H_emsida..."
+#~ msgid "Israel"
+#~ msgstr "Israel"
-#~ msgid "Clear the setting"
-#~ msgstr "Töm inställningen"
+#~ msgid "Italy"
+#~ msgstr "Italien"
-#~ msgid "Use _custom XKB settings"
-#~ msgstr "Använd _anpassade XKB-inställningar"
+#~ msgid "Japan"
+#~ msgstr "Japan"
-#~ msgid "Enable Beep"
-#~ msgstr "Aktivera pip"
+#~ msgid "Jpn"
+#~ msgstr "Jpn"
-#~ msgid "Layout:"
-#~ msgstr "Layout:"
+#~ msgid "Kalmyk"
+#~ msgstr "Kalmyk"
diff --git a/xorg-server/xkeyboard-config/po/uk.po b/xorg-server/xkeyboard-config/po/uk.po
index f1acb56ad..0074e32f3 100644
--- a/xorg-server/xkeyboard-config/po/uk.po
+++ b/xorg-server/xkeyboard-config/po/uk.po
@@ -1,2802 +1,3758 @@
-# translation of xkeyboard-config-1.8.po to Ukrainian
-# Ukrainian translation to xkeyboard-config
-# Copyright (C) 2002, 2007, 2008 Free Software Foundation, Inc.
-# Sergey V. Udaltsov <svu@users.sourceforge.net>
-#
-# This file is distributed under the same license as the xkeyboard-config package.
-# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2010.
-# Andriy Rysin <arysin@bcsii.com>, 2007, 2008.
-# Andriy Rysin <arysin@gmail.com>, 2008.
-msgid ""
-msgstr ""
-"Project-Id-Version: xkeyboard-config-1.8\n"
-"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2010-01-16 18:08+0000\n"
-"PO-Revision-Date: 2010-04-14 18:57-0400\n"
-"Last-Translator: Maxim V. Dziumanenko <dziumanenko@gmail.com>\n"
-"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
-#: ../rules/base.xml.in.h:1
-msgid "(F)"
-msgstr "(F)"
-
-#: ../rules/base.xml.in.h:2
-msgid "(Legacy) Alternative"
-msgstr "(Застаріла) Альтернативна"
-
-#: ../rules/base.xml.in.h:3
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr "(Застаріла) Альтернативна, Sun dead keys"
-
-#: ../rules/base.xml.in.h:4
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr "(Застаріла) Альтернативна, вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:5
-msgid "101/104 key Compatible"
-msgstr "Сумісна з 101/104 клавішною"
-
-#: ../rules/base.xml.in.h:6
-msgid "101/qwerty/comma/Dead keys"
-msgstr "101/qwerty/comma/Сліпі клавіші"
-
-#: ../rules/base.xml.in.h:7
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr "101/qwerty/comma/Вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:8
-msgid "101/qwerty/dot/Dead keys"
-msgstr "101/qwerty/dot/Сліпі клавіші"
-
-#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr "101/qwerty/dot/Вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:10
-msgid "101/qwertz/comma/Dead keys"
-msgstr "101/qwertz/comma/Сліпі клавіші"
-
-#: ../rules/base.xml.in.h:11
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr "101/qwertz/comma/Вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:12
-msgid "101/qwertz/dot/Dead keys"
-msgstr "101/qwertz/dot/Сліпі клавіші"
-
-#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr "101/qwertz/dot/Вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:14
-msgid "102/qwerty/comma/Dead keys"
-msgstr "102/qwerty/comma/Сліпі клавіші"
-
-#: ../rules/base.xml.in.h:15
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr "102/qwerty/comma/Вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:16
-msgid "102/qwerty/dot/Dead keys"
-msgstr "102/qwerty/dot/Сліпі клавіші"
-
-#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr "102/qwerty/dot/Вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:18
-msgid "102/qwertz/comma/Dead keys"
-msgstr "102/qwertz/comma/Сліпі клавіші"
-
-#: ../rules/base.xml.in.h:19
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr "102/qwertz/comma/Вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:20
-msgid "102/qwertz/dot/Dead keys"
-msgstr "102/qwertz/dot/Сліпі клавіші"
-
-#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr "102/qwertz/dot/Вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:22
-msgid "2"
-msgstr "2"
-
-#: ../rules/base.xml.in.h:23
-msgid "4"
-msgstr "4"
-
-#: ../rules/base.xml.in.h:24
-msgid "5"
-msgstr "5"
-
-#: ../rules/base.xml.in.h:25
-msgid "A4Tech KB-21"
-msgstr "A4Tech KB-21"
-
-#: ../rules/base.xml.in.h:26
-msgid "A4Tech KBS-8"
-msgstr "A4Tech KBS-8"
-
-#: ../rules/base.xml.in.h:27
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr "A4Tech Wireless Desktop RFKB-23"
-
-#: ../rules/base.xml.in.h:28
-msgid "ACPI Standard"
-msgstr "Стандартна ACPI"
-
-#: ../rules/base.xml.in.h:29
-msgid "ATM/phone-style"
-msgstr "У стилі банкоматної/телефонної"
-
-#: ../rules/base.xml.in.h:30
-msgid "Acer AirKey V"
-msgstr "Acer AirKey V"
-
-#: ../rules/base.xml.in.h:31
-msgid "Acer C300"
-msgstr "Acer C300"
-
-#: ../rules/base.xml.in.h:32
-msgid "Acer Ferrari 4000"
-msgstr "Acer Ferrari 4000"
-
-#: ../rules/base.xml.in.h:33
-msgid "Acer Laptop"
-msgstr "Acer Laptop"
-
-#: ../rules/base.xml.in.h:34
-msgid "Add the standard behavior to Menu key"
-msgstr "Додати звичайну поведінку на клавішу Menu"
-
-#: ../rules/base.xml.in.h:35
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr "Додавання діакритичних знаків есперанто"
-
-#: ../rules/base.xml.in.h:36
-msgid "Adding EuroSign to certain keys"
-msgstr "Додавання знаку євро до деяких клавіш"
-
-#: ../rules/base.xml.in.h:37
-msgid "Advance Scorpius KI"
-msgstr "Advance Scorpius KI"
-
-#: ../rules/base.xml.in.h:38
-msgid "Afg"
-msgstr "Афг"
-
-#: ../rules/base.xml.in.h:39
-msgid "Afghanistan"
-msgstr "Афганістан"
-
-#: ../rules/base.xml.in.h:40
-msgid "Akan"
-msgstr "Акан"
-
-#: ../rules/base.xml.in.h:41
-msgid "Alb"
-msgstr "Алб"
-
-#: ../rules/base.xml.in.h:42
-msgid "Albania"
-msgstr "Албанія"
-
-#: ../rules/base.xml.in.h:43
-msgid "Alt and Meta are on Alt keys"
-msgstr "Alt та Meta на клавішах Alt"
-
-#: ../rules/base.xml.in.h:44
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr "Клавіша Alt відповідає правій клавіші Win, а Super - клавіші Menu."
-
-#: ../rules/base.xml.in.h:45
-msgid "Alt+CapsLock"
-msgstr "Alt+CapsLock"
-
-#: ../rules/base.xml.in.h:46
-msgid "Alt+Ctrl"
-msgstr "Alt+Ctrl"
-
-#: ../rules/base.xml.in.h:47
-msgid "Alt+Shift"
-msgstr "Alt+Shift"
-
-#: ../rules/base.xml.in.h:48
-msgid "Alt+Space"
-msgstr "Alt+Пробіл"
-
-#: ../rules/base.xml.in.h:49
-msgid "Alt-Q"
-msgstr "Alt-Q"
-
-#: ../rules/base.xml.in.h:50
-msgid "Alt/Win key behavior"
-msgstr "Поведінка клавіш Alt/Win"
-
-#: ../rules/base.xml.in.h:51
-msgid "Alternative"
-msgstr "Альтернативна"
-
-#: ../rules/base.xml.in.h:52
-msgid "Alternative Eastern"
-msgstr "Альтернативна східна"
-
-#: ../rules/base.xml.in.h:53
-msgid "Alternative Phonetic"
-msgstr "Альтернативна фонетична"
-
-#: ../rules/base.xml.in.h:54
-msgid "Alternative international (former us_intl)"
-msgstr "Альтернативна інтернаціональна (колишня us_intl)"
-
-#: ../rules/base.xml.in.h:55
-msgid "Alternative, Sun dead keys"
-msgstr "Альтернативна, Sun dead keys"
-
-#: ../rules/base.xml.in.h:56
-msgid "Alternative, eliminate dead keys"
-msgstr "Альтернативна, вимикати сліпі клавіші"
-
-#: ../rules/base.xml.in.h:57
-msgid "Alternative, latin-9 only"
-msgstr "Альтернативна, лише latin-9"
-
-#: ../rules/base.xml.in.h:58
-msgid "And"
-msgstr "Анд"
-
-#: ../rules/base.xml.in.h:59
-msgid "Andorra"
-msgstr "Андорра"
-
-#: ../rules/base.xml.in.h:60
-msgid "Any Alt key"
-msgstr "Будь-яка клавіша Alt"
-
-#: ../rules/base.xml.in.h:61
-msgid "Any Win key"
-msgstr "Будь-яка клавіша Win"
-
-#: ../rules/base.xml.in.h:62
-msgid "Any Win key (while pressed)"
-msgstr "Будь-яка клавіша Win (на час натискання)"
-
-#: ../rules/base.xml.in.h:63
-msgid "Apostrophe (') variant"
-msgstr "Варіант з апострофом (')"
-
-#: ../rules/base.xml.in.h:64
-msgid "Apple"
-msgstr "Apple"
-
-#: ../rules/base.xml.in.h:65
-msgid "Apple Laptop"
-msgstr "Ноутбук Apple"
-
-#: ../rules/base.xml.in.h:66
-msgid "Ara"
-msgstr "Араб"
-
-#: ../rules/base.xml.in.h:67
-msgid "Arabic"
-msgstr "Арабська"
-
-#: ../rules/base.xml.in.h:68
-msgid "Arm"
-msgstr "Вірм"
-
-#: ../rules/base.xml.in.h:69
-msgid "Armenia"
-msgstr "Вірменія"
-
-#: ../rules/base.xml.in.h:70
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr "Астурійський варіант, де H та L з нижньою крапкою"
-
-#: ../rules/base.xml.in.h:71
-msgid "Asus Laptop"
-msgstr "Ноутбук Asus"
-
-#: ../rules/base.xml.in.h:72
-msgid "At bottom left"
-msgstr "Знизу ліворуч"
-
-#: ../rules/base.xml.in.h:73
-msgid "At left of 'A'"
-msgstr "Ліворуч від 'A'"
-
-#: ../rules/base.xml.in.h:74
-msgid "Aze"
-msgstr "Азер"
-
-#: ../rules/base.xml.in.h:75
-msgid "Azerbaijan"
-msgstr "Азербайджан"
-
-#: ../rules/base.xml.in.h:76
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr "Azona RF2300 бездротова Інтернет-клавіатура"
-
-#: ../rules/base.xml.in.h:77
-msgid "BTC 5090"
-msgstr "BTC 5090"
-
-#: ../rules/base.xml.in.h:78
-msgid "BTC 5113RF Multimedia"
-msgstr "BTC 5113RF мультимедійна"
-
-#: ../rules/base.xml.in.h:79
-msgid "BTC 5126T"
-msgstr "BTC 5126T"
-
-#: ../rules/base.xml.in.h:80
-msgid "BTC 6301URF"
-msgstr "BTC 6301URF"
-
-#: ../rules/base.xml.in.h:81
-msgid "BTC 9000"
-msgstr "BTC 9000"
-
-#: ../rules/base.xml.in.h:82
-msgid "BTC 9000A"
-msgstr "BTC 9000A"
-
-#: ../rules/base.xml.in.h:83
-msgid "BTC 9001AH"
-msgstr "BTC 9001AH"
-
-#: ../rules/base.xml.in.h:84
-msgid "BTC 9019U"
-msgstr "BTC 9019U"
-
-#: ../rules/base.xml.in.h:85
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr "BTC 9116U Mini Wireless Internet and Gaming"
-
-#: ../rules/base.xml.in.h:86
-msgid "Ban"
-msgstr "Банг"
-
-#: ../rules/base.xml.in.h:87
-msgid "Bangladesh"
-msgstr "Бангладеська"
-
-#: ../rules/base.xml.in.h:88
-msgid "Bashkirian"
-msgstr "Башкирська"
-
-#: ../rules/base.xml.in.h:89
-msgid "Bel"
-msgstr "Бельг"
-
-#: ../rules/base.xml.in.h:90
-msgid "Belarus"
-msgstr "Білоруська"
-
-#: ../rules/base.xml.in.h:91
-msgid "Belgium"
-msgstr "Бельгія"
-
-#: ../rules/base.xml.in.h:92
-msgid "BenQ X-Touch"
-msgstr "BenQ X-Touch"
-
-#: ../rules/base.xml.in.h:93
-msgid "BenQ X-Touch 730"
-msgstr "BenQ X-Touch 730"
-
-#: ../rules/base.xml.in.h:94
-msgid "BenQ X-Touch 800"
-msgstr "BenQ X-Touch 800"
-
-#: ../rules/base.xml.in.h:95
-msgid "Bengali"
-msgstr "Бенгальська"
-
-#: ../rules/base.xml.in.h:96
-msgid "Bengali Probhat"
-msgstr "Бенгальська (Probhat)"
-
-#: ../rules/base.xml.in.h:97
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr "Bepo, ергономічна, Дворак"
-
-#: ../rules/base.xml.in.h:98
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr "Bepo, ергономічна, Дворак, лише latin-9"
-
-#: ../rules/base.xml.in.h:99
-msgid "Bgr"
-msgstr "Болг"
-
-#: ../rules/base.xml.in.h:100
-msgid "Bhu"
-msgstr "Бут"
-
-#: ../rules/base.xml.in.h:101
-msgid "Bhutan"
-msgstr "Бутанська"
-
-#: ../rules/base.xml.in.h:102
-msgid "Biblical Hebrew (Tiro)"
-msgstr "Біблейська єврейська (Tiro)"
-
-#: ../rules/base.xml.in.h:103
-msgid "Bih"
-msgstr "Босн"
-
-#: ../rules/base.xml.in.h:104
-msgid "Blr"
-msgstr "Біл"
-
-#: ../rules/base.xml.in.h:105
-msgid "Bosnia and Herzegovina"
-msgstr "Боснія та Герцеговина"
-
-#: ../rules/base.xml.in.h:106
-msgid "Both Alt keys together"
-msgstr "Обидві клавіші Alt разом"
-
-#: ../rules/base.xml.in.h:107
-msgid "Both Ctrl keys together"
-msgstr "Обидві клавіші Ctrl разом"
-
-#: ../rules/base.xml.in.h:108
-msgid "Both Shift keys together"
-msgstr "Обидві клавіші Shift разом"
-
-#: ../rules/base.xml.in.h:109
-msgid "Bra"
-msgstr "Браз"
-
-#: ../rules/base.xml.in.h:110
-msgid "Braille"
-msgstr "Брайля"
-
-#: ../rules/base.xml.in.h:111
-msgid "Brazil"
-msgstr "Бразильська"
-
-#: ../rules/base.xml.in.h:112
-msgid "Breton"
-msgstr "Бретонська"
-
-#: ../rules/base.xml.in.h:113
-msgid "Brl"
-msgstr "Брйл"
-
-#: ../rules/base.xml.in.h:114
-msgid "Brother Internet Keyboard"
-msgstr "Brother Internet Keyboard"
-
-#: ../rules/base.xml.in.h:115
-msgid "Buckwalter"
-msgstr "Buckwalter"
-
-#: ../rules/base.xml.in.h:116
-msgid "Bulgaria"
-msgstr "Болгарія"
-
-#: ../rules/base.xml.in.h:117
-msgid "CRULP"
-msgstr "CRULP"
-
-#: ../rules/base.xml.in.h:118
-msgid "Cambodia"
-msgstr "Камбоджа"
-
-#: ../rules/base.xml.in.h:119
-msgid "Can"
-msgstr "Кан"
-
-#: ../rules/base.xml.in.h:120
-msgid "Canada"
-msgstr "Канада"
-
-#: ../rules/base.xml.in.h:121
-msgid "Caps Lock"
-msgstr "Caps Lock"
-
-#: ../rules/base.xml.in.h:122
-msgid "CapsLock"
-msgstr "CapsLock"
-
-#: ../rules/base.xml.in.h:123
-msgid "CapsLock (to first layout), Shift+CapsLock (to last layout)"
-msgstr "CapsLock (на першу розкладку), Shift+CapsLock (на останню розкладку)"
-
-#: ../rules/base.xml.in.h:124
-msgid "CapsLock (while pressed), Alt+CapsLock does the original capslock action"
-msgstr "CapsLock (поки натиснена), Alt+CapsLock виконує оригінальну функцію capslock"
-
-#: ../rules/base.xml.in.h:125
-msgid "CapsLock acts as Shift with locking. Shift \"pauses\" CapsLock"
-msgstr "CapsLock дія як Shift з блокуванням. Shift призупиняє дію CapsLock"
-
-#: ../rules/base.xml.in.h:126
-msgid "CapsLock acts as Shift with locking. Shift doesn't affect CapsLock"
-msgstr "CapsLock діє як Shift з блокуванням. Shift не впливає на CapsLock"
-
-#: ../rules/base.xml.in.h:127
-msgid "CapsLock is disabled"
-msgstr "CapsLock вимкнено"
-
-#: ../rules/base.xml.in.h:128
-msgid "CapsLock key behavior"
-msgstr "Клавіша CapsLock"
-
-#: ../rules/base.xml.in.h:129
-msgid "CapsLock toggles Shift so all keys are affected"
-msgstr "CapsLock вмикає Shift, таким чином він діє одразу на всі клавіши"
-
-#: ../rules/base.xml.in.h:130
-msgid "CapsLock toggles normal capitalization of alphabetic characters"
-msgstr "CapsLock включає звичайну капіталізацію символів алфавіту"
-
-#: ../rules/base.xml.in.h:131
-msgid "CapsLock uses internal capitalization. Shift \"pauses\" CapsLock"
-msgstr "CapsLock вмикає внутрішню капіталізацію. Shift призупиняє дію CapsLock"
-
-#: ../rules/base.xml.in.h:132
-msgid "CapsLock uses internal capitalization. Shift doesn't affect CapsLock"
-msgstr "CapsLock вмикає внутрішню капіталізацію. Shift не впливає на CapsLock"
-
-#: ../rules/base.xml.in.h:133
-msgid "Catalan variant with middle-dot L"
-msgstr "Каталонський варіант з L із середньою точкою"
-
-#: ../rules/base.xml.in.h:134
-msgid "Cedilla"
-msgstr "Седиль"
-
-#: ../rules/base.xml.in.h:135
-msgid "Che"
-msgstr "Швей"
-
-#: ../rules/base.xml.in.h:136
-msgid "Cherokee"
-msgstr "Cherokee"
-
-#: ../rules/base.xml.in.h:137
-msgid "Cherry B.UNLIMITED"
-msgstr "Cherry B.UNLIMITED"
-
-#: ../rules/base.xml.in.h:138
-msgid "Cherry Blue Line CyBo@rd"
-msgstr "Cherry Blue Line CyBo@rd"
-
-#: ../rules/base.xml.in.h:139
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr "Cherry Blue Line CyBo@rd (альтернативний варіант)"
-
-#: ../rules/base.xml.in.h:140
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr "Cherry CyBo@rd USB-Hub"
-
-#: ../rules/base.xml.in.h:141
-msgid "Cherry CyMotion Expert"
-msgstr "Cherry CyMotion Expert"
-
-#: ../rules/base.xml.in.h:142
-msgid "Cherry CyMotion Master Linux"
-msgstr "Cherry CyMotion Master Linux"
-
-#: ../rules/base.xml.in.h:143
-msgid "Cherry CyMotion Master XPress"
-msgstr "Cherry CyMotion Master XPress"
-
-#: ../rules/base.xml.in.h:144
-msgid "Chicony Internet Keyboard"
-msgstr "Інтернет-клавіатура Chicony"
-
-#: ../rules/base.xml.in.h:145
-msgid "Chicony KB-9885"
-msgstr "Chicony KB-9885"
-
-#: ../rules/base.xml.in.h:146
-msgid "Chicony KU-0108"
-msgstr "Chicony KU-0108"
-
-#: ../rules/base.xml.in.h:147
-msgid "Chicony KU-0420"
-msgstr "Chicony KU-0420"
-
-#: ../rules/base.xml.in.h:148
-msgid "China"
-msgstr "Китайська"
-
-#: ../rules/base.xml.in.h:149
-msgid "Chuvash"
-msgstr "Чуваська"
-
-#: ../rules/base.xml.in.h:150
-msgid "Chuvash Latin"
-msgstr "Чуваська латинська"
-
-#: ../rules/base.xml.in.h:151
-msgid "Classic"
-msgstr "Класична"
-
-#: ../rules/base.xml.in.h:152
-msgid "Classic Dvorak"
-msgstr "Класична Дворак"
-
-#: ../rules/base.xml.in.h:153
-msgid "Classmate PC"
-msgstr "Classmate PC"
-
-#: ../rules/base.xml.in.h:154
-msgid "CloGaelach"
-msgstr "CloGaelach"
-
-#: ../rules/base.xml.in.h:155
-msgid "Colemak"
-msgstr "Colemak"
-
-#: ../rules/base.xml.in.h:156
-msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access Keyboard"
-
-#: ../rules/base.xml.in.h:157
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq Internet Keyboard (13 клавіш)"
-
-#: ../rules/base.xml.in.h:158
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq Internet Keyboard (18 клавіш)"
-
-#: ../rules/base.xml.in.h:159
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq Internet Keyboard (7 клавіш)"
-
-#: ../rules/base.xml.in.h:160
-msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq Keyboard"
-
-#: ../rules/base.xml.in.h:161
-msgid "Compose key position"
-msgstr "Розташування клавіші Compose"
-
-#: ../rules/base.xml.in.h:162
-msgid "Congo, Democratic Republic of the"
-msgstr "Конго, Демократична республіка"
-
-#: ../rules/base.xml.in.h:163
-msgid "Control + Alt + Backspace"
-msgstr "Control + Alt + Backspace"
-
-#: ../rules/base.xml.in.h:164
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr "Control використовується у якості клавіш Alt, Alt використовується у якості клавіш Win"
-
-#: ../rules/base.xml.in.h:165
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr "Control використовується у якості клавіш Win (і як звичайний Control)"
-
-#: ../rules/base.xml.in.h:166
-msgid "Creative Desktop Wireless 7000"
-msgstr "Creative Desktop Wireless 7000"
-
-#: ../rules/base.xml.in.h:167
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr "Кримськотатарська (Dobruca-1 Q)"
-
-#: ../rules/base.xml.in.h:168
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr "Кримськотатарська (Dobruca-2 Q)"
-
-#: ../rules/base.xml.in.h:169
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr "Кримськотатарська (турецька Alt-Q)"
-
-#: ../rules/base.xml.in.h:170
-msgid "Crimean Tatar (Turkish F)"
-msgstr "Кримськотатарська (турецька F)"
-
-#: ../rules/base.xml.in.h:171
-msgid "Crimean Tatar (Turkish Q)"
-msgstr "Кримськотатарська (турецька Q)"
-
-#: ../rules/base.xml.in.h:172
-msgid "Croatia"
-msgstr "Хорватська"
-
-#: ../rules/base.xml.in.h:173
-msgid "Ctrl key position"
-msgstr "Розташування клавіші Ctrl"
-
-#: ../rules/base.xml.in.h:174
-msgid "Ctrl+Shift"
-msgstr "Ctrl+Shift"
-
-#: ../rules/base.xml.in.h:175
-msgid "Cyrillic"
-msgstr "Кирилічна"
-
-#: ../rules/base.xml.in.h:176
-msgid "Cyrillic with guillemets"
-msgstr "Кирилічна з кутовими лапками"
-
-#: ../rules/base.xml.in.h:177
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr "Кирилічна, Z та ZHE поміняні місцями"
-
-#: ../rules/base.xml.in.h:178
-msgid "Cze"
-msgstr "Чес"
-
-#: ../rules/base.xml.in.h:179
-msgid "Czechia"
-msgstr "Чехія"
-
-#: ../rules/base.xml.in.h:180
-msgid "DOS"
-msgstr "DOS"
-
-#: ../rules/base.xml.in.h:181
-msgid "DRC"
-msgstr "DRC"
-
-#: ../rules/base.xml.in.h:182
-msgid "DTK2000"
-msgstr "DTK2000"
-
-#: ../rules/base.xml.in.h:183
-msgid "Dan"
-msgstr "Дан"
-
-#: ../rules/base.xml.in.h:184
-msgid "Dead acute"
-msgstr "Dead acute"
-
-#: ../rules/base.xml.in.h:185
-msgid "Dead grave acute"
-msgstr "Dead grave acute"
-
-#: ../rules/base.xml.in.h:186
-msgid "Default numeric keypad keys"
-msgstr "Типові клавіші цифрової клавіатури"
-
-#: ../rules/base.xml.in.h:187
-msgid "Dell"
-msgstr "Dell"
-
-#: ../rules/base.xml.in.h:188
-msgid "Dell 101-key PC"
-msgstr "Dell 101-клавішна для ПК"
-
-#: ../rules/base.xml.in.h:189
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr "Dell, ноутбуки Inspiron 6xxx/8xxx"
-
-#: ../rules/base.xml.in.h:190
-msgid "Dell Laptop/notebook Precision M series"
-msgstr "Dell, ноутбуки Precision M"
-
-#: ../rules/base.xml.in.h:191
-msgid "Dell Latitude series laptop"
-msgstr "Dell, ноутбук Latitude"
-
-#: ../rules/base.xml.in.h:192
-msgid "Dell Precision M65"
-msgstr "Dell Precision M65"
-
-#: ../rules/base.xml.in.h:193
-msgid "Dell SK-8125"
-msgstr "Dell SK-8125"
-
-#: ../rules/base.xml.in.h:194
-msgid "Dell SK-8135"
-msgstr "Dell SK-8135"
-
-#: ../rules/base.xml.in.h:195
-msgid "Dell USB Multimedia Keyboard"
-msgstr "Dell USB Multimedia Keyboard"
-
-#: ../rules/base.xml.in.h:196
-msgid "Denmark"
-msgstr "Данія"
-
-#: ../rules/base.xml.in.h:197
-msgid "Deu"
-msgstr "Нім"
-
-#: ../rules/base.xml.in.h:198
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr "Dexxa Wireless Desktop Keyboard"
-
-#: ../rules/base.xml.in.h:199
-msgid "Diamond 9801 / 9802 series"
-msgstr "Моделі Diamond 9801/9802"
-
-#: ../rules/base.xml.in.h:200
-msgid "Dvorak"
-msgstr "Дворак"
-
-#: ../rules/base.xml.in.h:201
-msgid "Dvorak (UK Punctuation)"
-msgstr "Dvorak (UK інтернаціональна)"
-
-#: ../rules/base.xml.in.h:202
-msgid "Dvorak international"
-msgstr "Dvorak (інтернаціональна)"
-
-#: ../rules/base.xml.in.h:203
-msgid "Dvorak, Polish quotes on key 1"
-msgstr "Дворак, польські лапки на клавіші 1"
-
-#: ../rules/base.xml.in.h:204
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr "Дворак, польські лапки на знаку лапки"
-
-#: ../rules/base.xml.in.h:205
-msgid "E"
-msgstr "E"
-
-#: ../rules/base.xml.in.h:206
-msgid "Eastern"
-msgstr "Східна"
-
-#: ../rules/base.xml.in.h:207
-msgid "Eliminate dead keys"
-msgstr "Вилучити сліпі клавіші"
-
-#: ../rules/base.xml.in.h:208
-msgid "Enable extra typographic characters"
-msgstr "Увімкнути додаткові типографські символи"
-
-#: ../rules/base.xml.in.h:209
-msgid "English"
-msgstr "Англійська"
-
-#: ../rules/base.xml.in.h:210
-msgid "Ennyah DKB-1008"
-msgstr "Ennyah DKB-1008"
-
-#: ../rules/base.xml.in.h:211
-msgid "Enter on keypad"
-msgstr "Enter на цифровій клавіатурі"
-
-#: ../rules/base.xml.in.h:212
-msgid "Epo"
-msgstr "Епо"
-
-#: ../rules/base.xml.in.h:213
-msgid "Ergonomic"
-msgstr "Ергономічна"
-
-#: ../rules/base.xml.in.h:214
-msgid "Esp"
-msgstr "Ісп"
-
-#: ../rules/base.xml.in.h:215
-msgid "Esperanto"
-msgstr "Есперанто"
-
-#: ../rules/base.xml.in.h:216
-msgid "Est"
-msgstr "Ест"
-
-#: ../rules/base.xml.in.h:217
-msgid "Estonia"
-msgstr "Естонська"
-
-#: ../rules/base.xml.in.h:218
-msgid "Eth"
-msgstr "Ефі"
-
-#: ../rules/base.xml.in.h:219
-msgid "Ethiopia"
-msgstr "Ефіопська"
-
-#: ../rules/base.xml.in.h:220
-msgid "Evdev-managed keyboard"
-msgstr "Клавіатура, керована Evdev"
-
-#: ../rules/base.xml.in.h:221
-msgid "Everex STEPnote"
-msgstr "Everex STEPnote"
-
-#: ../rules/base.xml.in.h:222
-msgid "Ewe"
-msgstr "Ewe"
-
-#: ../rules/base.xml.in.h:223
-msgid "Extended"
-msgstr "Розширена"
-
-#: ../rules/base.xml.in.h:224
-msgid "Extended - Winkeys"
-msgstr "Розширена - Winkeys"
-
-#: ../rules/base.xml.in.h:225
-msgid "Extended Backslash"
-msgstr "Розширена Backslash"
-
-#: ../rules/base.xml.in.h:226
-msgid "F-letter (F) variant"
-msgstr "Варіант з літерою F"
-
-#: ../rules/base.xml.in.h:227
-msgid "FL90"
-msgstr "FL90"
-
-#: ../rules/base.xml.in.h:228
-msgid "Fao"
-msgstr "Фарер"
-
-#: ../rules/base.xml.in.h:229
-msgid "Faroe Islands"
-msgstr "Фарерські о-ви"
-
-#: ../rules/base.xml.in.h:230
-msgid "Fin"
-msgstr "Фін"
-
-#: ../rules/base.xml.in.h:231
-msgid "Finland"
-msgstr "Фінляндія"
-
-#. This assumes the KP_ abstract symbols are actually useful for some apps
-#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:234
-msgid "Four-level key with abstract separators"
-msgstr "Клавіша четвертого рівня з абстрактним розділювачем "
-
-#: ../rules/base.xml.in.h:235
-msgid "Four-level key with comma"
-msgstr "Клавіша четвертого рівня з комою"
-
-#: ../rules/base.xml.in.h:236
-msgid "Four-level key with dot"
-msgstr "Клавіша четвертого рівня з крапкою"
-
-#: ../rules/base.xml.in.h:237
-msgid "Four-level key with dot, latin-9 restriction"
-msgstr "Клавіша четвертого рівня з крапкою, обмежена latin-9"
-
-#: ../rules/base.xml.in.h:238
-msgid "Four-level key with momayyez"
-msgstr "Клавіша четвертого рівня з momayyez"
-
-#: ../rules/base.xml.in.h:239
-msgid "Fra"
-msgstr "Фра"
-
-#: ../rules/base.xml.in.h:240
-msgid "France"
-msgstr "Франція"
-
-#: ../rules/base.xml.in.h:241
-msgid "French"
-msgstr "Французька"
-
-#: ../rules/base.xml.in.h:242
-msgid "French (Macintosh)"
-msgstr "Французька (Macintosh)"
-
-#: ../rules/base.xml.in.h:243
-msgid "French (legacy)"
-msgstr "Французька (застаріла)"
-
-#: ../rules/base.xml.in.h:244
-msgid "French Dvorak"
-msgstr "Французький Дворак"
-
-#: ../rules/base.xml.in.h:245
-msgid "French, Sun dead keys"
-msgstr "Французька, Sun зі сліпими клавішами"
-
-#: ../rules/base.xml.in.h:246
-msgid "French, eliminate dead keys"
-msgstr "Французька, вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:247
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr "Ноутбук Fujitsu-Siemens Computers AMILO"
-
-#: ../rules/base.xml.in.h:248
-msgid "Fula"
-msgstr "Фула"
-
-#: ../rules/base.xml.in.h:249
-msgid "GBr"
-msgstr "Брит"
-
-#: ../rules/base.xml.in.h:250
-msgid "Ga"
-msgstr "Га"
-
-#: ../rules/base.xml.in.h:251
-msgid "Generic 101-key PC"
-msgstr "Звичайна 101-клавішна для ПК"
-
-#: ../rules/base.xml.in.h:252
-msgid "Generic 102-key (Intl) PC"
-msgstr "Звичайна 102-клавішна для ПК"
-
-#: ../rules/base.xml.in.h:253
-msgid "Generic 104-key PC"
-msgstr "Звичайна 104-клавішна для ПК"
-
-#: ../rules/base.xml.in.h:254
-msgid "Generic 105-key (Intl) PC"
-msgstr "Звичайна 105-клавішна для ПК"
-
-#: ../rules/base.xml.in.h:255
-msgid "Genius Comfy KB-12e"
-msgstr "Genius Comfy KB-21e"
-
-#: ../rules/base.xml.in.h:256
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-
-#: ../rules/base.xml.in.h:257
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr "Genius Comfy KB-21e-Scroll"
-
-#: ../rules/base.xml.in.h:258
-msgid "Genius KB-19e NB"
-msgstr "Genius KB-19e NB"
-
-#: ../rules/base.xml.in.h:259
-msgid "Genius KKB-2050HS"
-msgstr "Genius KKB-2050HS"
-
-#: ../rules/base.xml.in.h:260
-msgid "Geo"
-msgstr "Груз"
-
-#: ../rules/base.xml.in.h:261
-msgid "Georgia"
-msgstr "Грузія"
-
-#: ../rules/base.xml.in.h:262
-msgid "Georgian"
-msgstr "Грузинська"
-
-#: ../rules/base.xml.in.h:263
-msgid "Georgian AZERTY Tskapo"
-msgstr "Грузинська AZERTY Tskapo"
-
-#: ../rules/base.xml.in.h:264
-msgid "German (Macintosh)"
-msgstr "Німецька (Macintosh)"
-
-#: ../rules/base.xml.in.h:265
-msgid "German, Sun dead keys"
-msgstr "Німецька Sun зі сліпими клавішами"
-
-#: ../rules/base.xml.in.h:266
-msgid "German, eliminate dead keys"
-msgstr "Німецька, вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:267
-msgid "Germany"
-msgstr "Німеччина"
-
-#: ../rules/base.xml.in.h:268
-msgid "Gha"
-msgstr "Ган"
-
-#: ../rules/base.xml.in.h:269
-msgid "Ghana"
-msgstr "Гана"
-
-#: ../rules/base.xml.in.h:270
-msgid "Gre"
-msgstr "Гре"
-
-#: ../rules/base.xml.in.h:271
-msgid "Greece"
-msgstr "Греція"
-
-#: ../rules/base.xml.in.h:272
-msgid "Group toggle on multiply/divide key"
-msgstr "Перемикати групу на клавішах «помножити/ділити»"
-
-#: ../rules/base.xml.in.h:273
-msgid "Gui"
-msgstr "Гві"
-
-#: ../rules/base.xml.in.h:274
-msgid "Guinea"
-msgstr "Гвінея"
-
-#: ../rules/base.xml.in.h:275
-msgid "Gujarati"
-msgstr "Гуджараті"
-
-#: ../rules/base.xml.in.h:276
-msgid "Gurmukhi"
-msgstr "Гурмухі"
-
-#: ../rules/base.xml.in.h:277
-msgid "Gurmukhi Jhelum"
-msgstr "Гурмухі Джелум"
-
-#: ../rules/base.xml.in.h:278
-msgid "Gyration"
-msgstr "Gyration"
-
-#: ../rules/base.xml.in.h:279
-msgid "Happy Hacking Keyboard"
-msgstr "Happy Hacking Keyboard"
-
-#: ../rules/base.xml.in.h:280
-msgid "Happy Hacking Keyboard for Mac"
-msgstr "Happy Hacking Keyboard для Mac"
-
-#: ../rules/base.xml.in.h:281
-msgid "Hausa"
-msgstr "Hausa"
-
-#: ../rules/base.xml.in.h:282
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr "Hewlett-Packard Internet Keyboard"
-
-#: ../rules/base.xml.in.h:283
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr "Hewlett-Packard Mini 110 Notebook"
-
-#: ../rules/base.xml.in.h:284
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr "Hewlett-Packard Omnibook 500 FA"
-
-#: ../rules/base.xml.in.h:285
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr "Hewlett-Packard Omnibook 5xx"
-
-#: ../rules/base.xml.in.h:286
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr "Hewlett-Packard Omnibook 6000/6100"
-
-#: ../rules/base.xml.in.h:287
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr "Hewlett-Packard Omnibook XE3 GC"
-
-#: ../rules/base.xml.in.h:288
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr "Hewlett-Packard Omnibook XE3 GF"
-
-#: ../rules/base.xml.in.h:289
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr "Hewlett-Packard Omnibook XT1000"
-
-#: ../rules/base.xml.in.h:290
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr "Hewlett-Packard Pavilion ZT11xx"
-
-#: ../rules/base.xml.in.h:291
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr "Hewlett-Packard Pavilion dv5"
-
-#: ../rules/base.xml.in.h:292
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
-
-#: ../rules/base.xml.in.h:293
-msgid "Hewlett-Packard nx9020"
-msgstr "Hewlett-Packard nx9020"
-
-#: ../rules/base.xml.in.h:294
-msgid "Hexadecimal"
-msgstr "Шістнадцяткова"
-
-#: ../rules/base.xml.in.h:295
-msgid "Hindi Bolnagri"
-msgstr "Хінді Болнагрі"
-
-#: ../rules/base.xml.in.h:296
-msgid "Hindi Wx"
-msgstr "Хінді Wx"
-
-#: ../rules/base.xml.in.h:297
-msgid "Homophonic"
-msgstr "Гомофонний"
-
-#: ../rules/base.xml.in.h:298
-msgid "Honeywell Euroboard"
-msgstr "Honeywell Euroboard"
-
-#: ../rules/base.xml.in.h:299
-msgid "Hrv"
-msgstr "Хорв"
-
-#: ../rules/base.xml.in.h:300
-msgid "Hun"
-msgstr "Уго"
-
-#: ../rules/base.xml.in.h:301
-msgid "Hungary"
-msgstr "Угорщина"
-
-#: ../rules/base.xml.in.h:302
-msgid "Hyper is mapped to Win-keys"
-msgstr "Hyper відповідає клавішам Win"
-
-#: ../rules/base.xml.in.h:303
-msgid "IBM (LST 1205-92)"
-msgstr "IBM (LST 1205-92)"
-
-#: ../rules/base.xml.in.h:304
-msgid "IBM Rapid Access"
-msgstr "IBM Rapid Access"
-
-#: ../rules/base.xml.in.h:305
-msgid "IBM Rapid Access II"
-msgstr "IBM Rapid Access II"
-
-#: ../rules/base.xml.in.h:306
-msgid "IBM Space Saver"
-msgstr "IBM Space Saver"
-
-#: ../rules/base.xml.in.h:307
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr "IBM ThinkPad 560Z/600/600E/A22E"
-
-#: ../rules/base.xml.in.h:308
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr "IBM ThinkPad R60/T60/R61/T61"
-
-#: ../rules/base.xml.in.h:309
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-
-#: ../rules/base.xml.in.h:310
-msgid "ISO Alternate"
-msgstr "Додаткова ISO"
-
-#: ../rules/base.xml.in.h:311
-msgid "Iceland"
-msgstr "Ісландія"
-
-#: ../rules/base.xml.in.h:312
-msgid "Igbo"
-msgstr "Igbo"
-
-#: ../rules/base.xml.in.h:313
-msgid "Include dead tilde"
-msgstr "Увімкнути \"спеціальну\" тильду"
-
-#: ../rules/base.xml.in.h:314
-msgid "Ind"
-msgstr "Інд"
-
-#: ../rules/base.xml.in.h:315
-msgid "India"
-msgstr "Індія"
-
-#: ../rules/base.xml.in.h:316
-msgid "International (AltGr dead keys)"
-msgstr "Інтернаціональна (зі сліпими клавішами AltGr)"
-
-#: ../rules/base.xml.in.h:317
-msgid "International (with dead keys)"
-msgstr "Інтернаціональна (зі сліпими клавішами)"
-
-#: ../rules/base.xml.in.h:318
-msgid "Inuktitut"
-msgstr "Інуктітут"
-
-#: ../rules/base.xml.in.h:319
-msgid "Iran"
-msgstr "Іран"
-
-#: ../rules/base.xml.in.h:320
-msgid "Iraq"
-msgstr "Ірак"
-
-#: ../rules/base.xml.in.h:321
-msgid "Ireland"
-msgstr "Ірландія"
-
-#: ../rules/base.xml.in.h:322
-msgid "Irl"
-msgstr "Ірл"
-
-#: ../rules/base.xml.in.h:323
-msgid "Irn"
-msgstr "Ірн"
-
-#: ../rules/base.xml.in.h:324
-msgid "Irq"
-msgstr "Ірк"
-
-#: ../rules/base.xml.in.h:325
-msgid "Isl"
-msgstr "Ісл"
-
-#: ../rules/base.xml.in.h:326
-msgid "Isr"
-msgstr "Івр"
-
-#: ../rules/base.xml.in.h:327
-msgid "Israel"
-msgstr "Ізраїль"
-
-#: ../rules/base.xml.in.h:328
-msgid "Ita"
-msgstr "Іта"
-
-#: ../rules/base.xml.in.h:329
-msgid "Italy"
-msgstr "Італія"
-
-#: ../rules/base.xml.in.h:330
-msgid "Japan"
-msgstr "Японія"
-
-#: ../rules/base.xml.in.h:331
-msgid "Japan (PC-98xx Series)"
-msgstr "Японська (родина PC-98xx)"
-
-#: ../rules/base.xml.in.h:332
-msgid "Japanese keyboard options"
-msgstr "Параметри японської клавіатури"
-
-#: ../rules/base.xml.in.h:333
-msgid "Jpn"
-msgstr "Япо"
-
-#: ../rules/base.xml.in.h:334
-msgid "Kalmyk"
-msgstr "Калмицька"
-
-#: ../rules/base.xml.in.h:335
-msgid "Kana"
-msgstr "Кана"
-
-#: ../rules/base.xml.in.h:336
-msgid "Kana Lock key is locking"
-msgstr "Клавіша Kana Lock фіксується"
-
-#: ../rules/base.xml.in.h:337
-msgid "Kannada"
-msgstr "Канадська"
-
-#: ../rules/base.xml.in.h:338
-msgid "Kashubian"
-msgstr "Кашубська"
-
-#: ../rules/base.xml.in.h:339
-msgid "Kaz"
-msgstr "Каз"
-
-#: ../rules/base.xml.in.h:340
-msgid "Kazakh with Russian"
-msgstr "Казахська з російськими"
-
-#: ../rules/base.xml.in.h:341
-msgid "Kazakhstan"
-msgstr "Казахстан"
-
-#: ../rules/base.xml.in.h:342
-msgid "Key sequence to kill the X server"
-msgstr "Комбінація клавіш для переривання роботи X-сервера"
-
-#: ../rules/base.xml.in.h:343
-msgid "Key to choose 3rd level"
-msgstr "Клавіша для вибору 3-го ряду"
-
-#: ../rules/base.xml.in.h:344
-msgid "Key(s) to change layout"
-msgstr "Клавіші для зміни розкладки"
-
-#: ../rules/base.xml.in.h:345
-msgid "Keytronic FlexPro"
-msgstr "Keytronic FlexPro"
-
-#: ../rules/base.xml.in.h:346
-msgid "Kgz"
-msgstr "Кир"
-
-#: ../rules/base.xml.in.h:347
-msgid "Khm"
-msgstr "Khm"
-
-#: ../rules/base.xml.in.h:348
-msgid "Komi"
-msgstr "Комі"
-
-#: ../rules/base.xml.in.h:349
-msgid "Kor"
-msgstr "Кор"
-
-#: ../rules/base.xml.in.h:350
-msgid "Korea, Republic of"
-msgstr "Корея, республіка"
-
-#: ../rules/base.xml.in.h:351
-msgid "Ktunaxa"
-msgstr "Кутенай"
-
-#: ../rules/base.xml.in.h:352
-msgid "Kurdish, (F)"
-msgstr "Курдська, (F)"
-
-#: ../rules/base.xml.in.h:353
-msgid "Kurdish, Arabic-Latin"
-msgstr "Курдська, арабсько-латинська"
-
-#: ../rules/base.xml.in.h:354
-msgid "Kurdish, Latin Alt-Q"
-msgstr "Курдська, Latin Alt-Q"
-
-#: ../rules/base.xml.in.h:355
-msgid "Kurdish, Latin Q"
-msgstr "Курдська, Latin Q"
-
-#: ../rules/base.xml.in.h:356
-msgid "Kyrgyzstan"
-msgstr "Киргизстан"
-
-#: ../rules/base.xml.in.h:357
-msgid "LAm"
-msgstr "ЛатАм"
-
-#: ../rules/base.xml.in.h:358
-msgid "LEKP"
-msgstr "LEKP"
-
-#: ../rules/base.xml.in.h:359
-msgid "LEKPa"
-msgstr "LEKPa"
-
-#: ../rules/base.xml.in.h:360
-msgid "Lao"
-msgstr "Лао"
-
-#: ../rules/base.xml.in.h:361
-msgid "Laos"
-msgstr "Лаос"
-
-#: ../rules/base.xml.in.h:362
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr "Клавіатура для ноутбуків Compaq (напр., Armada)"
-
-#: ../rules/base.xml.in.h:363
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr "Інтернет-клавіатура для ноутбуків Compaq (напр., Presario)"
-
-#: ../rules/base.xml.in.h:364
-msgid "Laptop/notebook eMachines m68xx"
-msgstr "Ноутбуки eMachines m68xx"
-
-#: ../rules/base.xml.in.h:365
-msgid "Latin"
-msgstr "Латинська"
-
-#: ../rules/base.xml.in.h:366
-msgid "Latin American"
-msgstr "Латиноамериканська"
-
-#: ../rules/base.xml.in.h:367
-msgid "Latin Unicode"
-msgstr "Латинська Unicode"
-
-#: ../rules/base.xml.in.h:368
-msgid "Latin Unicode qwerty"
-msgstr "Латинська Unicode (qwerty)"
-
-#: ../rules/base.xml.in.h:369
-msgid "Latin qwerty"
-msgstr "Латинська (qwerty)"
-
-#: ../rules/base.xml.in.h:370
-msgid "Latin unicode"
-msgstr "Латинська Unicode"
-
-#: ../rules/base.xml.in.h:371
-msgid "Latin unicode qwerty"
-msgstr "Латинська Unicode (qwerty)"
-
-#: ../rules/base.xml.in.h:372
-msgid "Latin with guillemets"
-msgstr "Латинська з кутовими лапками"
-
-#: ../rules/base.xml.in.h:373
-msgid "Latvia"
-msgstr "Латвія"
-
-#: ../rules/base.xml.in.h:374
-msgid "Lav"
-msgstr "Лат"
-
-#: ../rules/base.xml.in.h:375
-msgid "Left Alt"
-msgstr "Ліва клавіша Alt"
-
-#: ../rules/base.xml.in.h:376
-msgid "Left Alt (while pressed)"
-msgstr "Ліва клавіша Alt (поки натиснена)"
-
-#: ../rules/base.xml.in.h:377
-msgid "Left Alt is swapped with Left Win"
-msgstr "Ліва Alt міняється з лівою клавішею Win"
-
-#: ../rules/base.xml.in.h:378
-msgid "Left Ctrl"
-msgstr "Ліва клавіша Ctrl"
-
-#: ../rules/base.xml.in.h:379
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr "Ліва Ctrl (на першу розкладку), Правий Ctrl (на останню розкладку)"
-
-#: ../rules/base.xml.in.h:380
-msgid "Left Ctrl+Left Shift"
-msgstr "Лівий Ctrl+Левый Shift"
-
-#: ../rules/base.xml.in.h:381
-msgid "Left Shift"
-msgstr "Ліва клавіша Shift"
-
-#: ../rules/base.xml.in.h:382
-msgid "Left Win"
-msgstr "Ліва клавіша Win"
-
-#: ../rules/base.xml.in.h:383
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr "Ліва Win (на першу розкладку), Права Win/Menu (на останню розкладку)"
-
-#: ../rules/base.xml.in.h:384
-msgid "Left Win (while pressed)"
-msgstr "Ліва клавіша Win (поки натиснута)"
-
-#: ../rules/base.xml.in.h:385
-msgid "Left hand"
-msgstr "Для лівші"
-
-#: ../rules/base.xml.in.h:386
-msgid "Left handed Dvorak"
-msgstr "Дворак для лівші"
-
-#: ../rules/base.xml.in.h:387
-msgid "Legacy"
-msgstr "Застаріла"
-
-#: ../rules/base.xml.in.h:388
-msgid "Legacy Wang 724"
-msgstr "Стара Wang 724"
-
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:390
-msgid "Legacy key with comma"
-msgstr "Застаріла клавіша з комою"
-
-#: ../rules/base.xml.in.h:391
-msgid "Legacy key with dot"
-msgstr "Застаріла клавіша з крапкою"
-
-#: ../rules/base.xml.in.h:392
-msgid "Less-than/Greater-than"
-msgstr "Менше ніж/Більше ніж"
-
-#: ../rules/base.xml.in.h:393
-msgid "Lithuania"
-msgstr "Литовська"
-
-#: ../rules/base.xml.in.h:394
-msgid "Logitech Access Keyboard"
-msgstr "Logitech Access Keyboard"
-
-#: ../rules/base.xml.in.h:395
-msgid "Logitech Cordless Desktop"
-msgstr "Logitech Cordless Desktop"
-
-#: ../rules/base.xml.in.h:396
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr "Logitech Cordless Desktop (альтернативний варіант)"
-
-#: ../rules/base.xml.in.h:397
-msgid "Logitech Cordless Desktop EX110"
-msgstr "Logitech Cordless Desktop EX110"
-
-#: ../rules/base.xml.in.h:398
-msgid "Logitech Cordless Desktop LX-300"
-msgstr "Logitech Cordless Desktop LX-300"
-
-#: ../rules/base.xml.in.h:399
-msgid "Logitech Cordless Desktop Navigator"
-msgstr "Logitech Cordless Desktop Navigator"
-
-#: ../rules/base.xml.in.h:400
-msgid "Logitech Cordless Desktop Optical"
-msgstr "Logitech Cordless Desktop Optical"
-
-#: ../rules/base.xml.in.h:401
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr "Logitech Cordless Desktop Pro (альтернативний варіант 2)"
-
-#: ../rules/base.xml.in.h:402
-msgid "Logitech Cordless Desktop iTouch"
-msgstr "Logitech Cordless Desktop iTouch"
-
-#: ../rules/base.xml.in.h:403
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr "Logitech Cordless Freedom/Desktop Navigator"
-
-#: ../rules/base.xml.in.h:404
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr "Logitech G15 з додатковими клавішами через G15daemon"
-
-#: ../rules/base.xml.in.h:405
-msgid "Logitech Generic Keyboard"
-msgstr "Logitech Generic Keyboard"
-
-#: ../rules/base.xml.in.h:406
-msgid "Logitech Internet 350 Keyboard"
-msgstr "Logitech Internet 350 Keyboard"
-
-#: ../rules/base.xml.in.h:407
-msgid "Logitech Internet Keyboard"
-msgstr "Logitech Internet Keyboard"
-
-#: ../rules/base.xml.in.h:408
-msgid "Logitech Internet Navigator Keyboard"
-msgstr "Logitech Internet Navigator Keyboard"
-
-#: ../rules/base.xml.in.h:409
-msgid "Logitech Media Elite Keyboard"
-msgstr "Logitech Media Elite Keyboard"
-
-#: ../rules/base.xml.in.h:410
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
-
-#: ../rules/base.xml.in.h:411
-msgid "Logitech Ultra-X Keyboard"
-msgstr "Logitech Ultra-X Keyboard"
-
-#: ../rules/base.xml.in.h:412
-msgid "Logitech diNovo Edge Keyboard"
-msgstr "Logitech diNovo Edge Keyboard"
-
-#: ../rules/base.xml.in.h:413
-msgid "Logitech diNovo Keyboard"
-msgstr "Logitech diNovo Keyboard"
-
-#: ../rules/base.xml.in.h:414
-msgid "Logitech iTouch"
-msgstr "Logitech iTouch"
-
-#: ../rules/base.xml.in.h:415
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr "Logitech iTouch Cordless Keyboard (модель Y-RB6)"
-
-#: ../rules/base.xml.in.h:416
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE"
-
-#: ../rules/base.xml.in.h:417
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-
-#: ../rules/base.xml.in.h:418
-msgid "Lower Sorbian"
-msgstr "Нижньолужицька"
-
-#: ../rules/base.xml.in.h:419
-msgid "Lower Sorbian (qwertz)"
-msgstr "Нижньолужицька (qwertz)"
-
-#: ../rules/base.xml.in.h:420
-msgid "Ltu"
-msgstr "Лит"
-
-#: ../rules/base.xml.in.h:421
-msgid "MESS"
-msgstr "MESS"
-
-#: ../rules/base.xml.in.h:422
-msgid "MNE"
-msgstr "MNE"
-
-#: ../rules/base.xml.in.h:423
-msgid "MacBook/MacBook Pro"
-msgstr "MacBook/MacBook Pro"
-
-#: ../rules/base.xml.in.h:424
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr "MacBook/MacBook Pro (Intl)"
-
-#: ../rules/base.xml.in.h:425
-msgid "Macedonia"
-msgstr "Македонська"
-
-#: ../rules/base.xml.in.h:426
-msgid "Macintosh"
-msgstr "Macintosh"
-
-#: ../rules/base.xml.in.h:427
-msgid "Macintosh Old"
-msgstr "Старий Macintosh"
-
-#: ../rules/base.xml.in.h:428
-msgid "Macintosh, Sun dead keys"
-msgstr "Macintosh, Sun зі сліпими клавішами"
-
-#: ../rules/base.xml.in.h:429
-msgid "Macintosh, eliminate dead keys"
-msgstr "Macintosh, вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:430
-msgid "Make CapsLock an additional Backspace"
-msgstr "Caps Lock як додаткова клавіша Backspace"
-
-#: ../rules/base.xml.in.h:431
-msgid "Make CapsLock an additional Ctrl"
-msgstr "Caps Lock як додаткова клавіша Ctrl"
-
-#: ../rules/base.xml.in.h:432
-msgid "Make CapsLock an additional ESC"
-msgstr "Caps Lock як додаткова клавіша ESC"
-
-#: ../rules/base.xml.in.h:433
-msgid "Make CapsLock an additional Hyper"
-msgstr "Caps Lock як додаткова клавіша Hyper"
-
-#: ../rules/base.xml.in.h:434
-msgid "Make CapsLock an additional NumLock"
-msgstr "Caps Lock як додаткова клавіша NumLock"
-
-#: ../rules/base.xml.in.h:435
-msgid "Make CapsLock an additional Super"
-msgstr "Caps Lock як додаткова клавіша Super"
-
-#: ../rules/base.xml.in.h:436
-msgid "Mal"
-msgstr "Мальд"
-
-#: ../rules/base.xml.in.h:437
-msgid "Malayalam"
-msgstr "Малайська"
-
-#: ../rules/base.xml.in.h:438
-msgid "Malayalam Lalitha"
-msgstr "Малайська Лаліта"
-
-#: ../rules/base.xml.in.h:439
-msgid "Maldives"
-msgstr "Мальдиви"
-
-#: ../rules/base.xml.in.h:440
-msgid "Malta"
-msgstr "Мальта"
-
-#: ../rules/base.xml.in.h:441
-msgid "Maltese keyboard with US layout"
-msgstr "Мальтійська клавіатура з розкладкою США"
-
-#: ../rules/base.xml.in.h:442
-msgid "Mao"
-msgstr "Мао"
-
-#: ../rules/base.xml.in.h:443
-msgid "Maori"
-msgstr "Маорі"
-
-#: ../rules/base.xml.in.h:444
-msgid "Memorex MX1998"
-msgstr "Memorex MX1998"
-
-#: ../rules/base.xml.in.h:445
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr "Memorex MX2500 EZ-Access Keyboard"
-
-#: ../rules/base.xml.in.h:446
-msgid "Memorex MX2750"
-msgstr "Memorex MX2750"
-
-#: ../rules/base.xml.in.h:447
-msgid "Menu"
-msgstr "Menu"
-
-#: ../rules/base.xml.in.h:448
-msgid "Meta is mapped to Left Win"
-msgstr "Meta відповідає лівій клавіші Win"
-
-#: ../rules/base.xml.in.h:449
-msgid "Meta is mapped to Win keys"
-msgstr "Meta відповідає клавішам Win"
-
-#: ../rules/base.xml.in.h:450
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr "Microsoft Comfort Curve Keyboard 2000"
-
-#: ../rules/base.xml.in.h:451
-msgid "Microsoft Internet Keyboard"
-msgstr "Microsoft Internet Keyboard"
-
-#: ../rules/base.xml.in.h:452
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr "Microsoft Internet Keyboard Pro, шведська"
-
-#: ../rules/base.xml.in.h:453
-msgid "Microsoft Natural"
-msgstr "Microsoft Natural"
-
-#: ../rules/base.xml.in.h:454
-msgid "Microsoft Natural Keyboard Elite"
-msgstr "Microsoft Natural Keyboard Elite"
-
-#: ../rules/base.xml.in.h:455
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-
-#: ../rules/base.xml.in.h:456
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr "Microsoft Natural Keyboard Pro OEM"
-
-#: ../rules/base.xml.in.h:457
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-
-#: ../rules/base.xml.in.h:458
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-
-#: ../rules/base.xml.in.h:459
-msgid "Microsoft Office Keyboard"
-msgstr "Microsoft Office Keyboard"
-
-#: ../rules/base.xml.in.h:460
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
-
-#: ../rules/base.xml.in.h:461
-msgid "Miscellaneous compatibility options"
-msgstr "Різні параметри сумісності"
-
-#: ../rules/base.xml.in.h:462
-msgid "Mkd"
-msgstr "Мкд"
-
-#: ../rules/base.xml.in.h:463
-msgid "Mlt"
-msgstr "Мальт"
-
-#: ../rules/base.xml.in.h:464
-msgid "Mmr"
-msgstr "М'янм"
-
-#: ../rules/base.xml.in.h:465
-msgid "Mng"
-msgstr "Монг"
-
-#: ../rules/base.xml.in.h:466
-msgid "Mongolia"
-msgstr "Монголія"
-
-#: ../rules/base.xml.in.h:467
-msgid "Montenegro"
-msgstr "Чорногорія"
-
-#: ../rules/base.xml.in.h:468
-msgid "Morocco"
-msgstr "Марокканська"
-
-#: ../rules/base.xml.in.h:469
-msgid "Multilingual"
-msgstr "Багатомовна"
-
-#: ../rules/base.xml.in.h:470
-msgid "Multilingual, first part"
-msgstr "Багатомовна, перша частина"
-
-#: ../rules/base.xml.in.h:471
-msgid "Multilingual, second part"
-msgstr "Багатомовна, друга частина"
-
-#: ../rules/base.xml.in.h:472
-msgid "Myanmar"
-msgstr "М'янма"
-
-#: ../rules/base.xml.in.h:473
-msgid "NICOLA-F style Backspace"
-msgstr "NICOLA-F style Backspace"
-
-#: ../rules/base.xml.in.h:474
-msgid "NLA"
-msgstr "NLA"
-
-#: ../rules/base.xml.in.h:475
-msgid "Nativo"
-msgstr "Nativo"
-
-#: ../rules/base.xml.in.h:476
-msgid "Nativo for Esperanto"
-msgstr "Nativo для есперанто"
-
-#: ../rules/base.xml.in.h:477
-msgid "Nativo for USA keyboards"
-msgstr "Nativo для клавіатур у США"
-
-#: ../rules/base.xml.in.h:478
-msgid "Neo 2"
-msgstr "Neo 2"
-
-#: ../rules/base.xml.in.h:479
-msgid "Nep"
-msgstr "Неп"
-
-#: ../rules/base.xml.in.h:480
-msgid "Nepal"
-msgstr "Непал"
-
-#: ../rules/base.xml.in.h:481
-msgid "Netherlands"
-msgstr "Нідерландська"
-
-#: ../rules/base.xml.in.h:482
-msgid "New phonetic"
-msgstr "Нова фонетична"
-
-#: ../rules/base.xml.in.h:483
-msgid "Nig"
-msgstr "Ніг"
-
-#: ../rules/base.xml.in.h:484
-msgid "Nigeria"
-msgstr "Нігерія"
-
-#: ../rules/base.xml.in.h:485
-msgid "Nld"
-msgstr "Флам"
-
-#: ../rules/base.xml.in.h:486
-msgid "Non-breakable space character at fourth level"
-msgstr "Символ нерозривного пробілу на четвертому рівні"
-
-#: ../rules/base.xml.in.h:487
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
-msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні"
-
-#: ../rules/base.xml.in.h:488
-msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
-msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні (через Ctrl+Shift)"
-
-#: ../rules/base.xml.in.h:489
-msgid "Non-breakable space character at second level"
-msgstr "Символ нерозривного пробілу на другому рівні"
-
-#: ../rules/base.xml.in.h:490
-msgid "Non-breakable space character at third level"
-msgstr "Символ нерозривного пробілу на третьому рівні"
-
-#: ../rules/base.xml.in.h:491
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr "Символ нерозривного пробілу на третьому рівні, нічого на четвертому"
-
-#: ../rules/base.xml.in.h:492
-msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
-msgstr "Символ нерозривного пробілу на третьому рівні, символ тонкого нерозривного пробілу на четвертому рівні"
-
-#: ../rules/base.xml.in.h:493
-msgid "Nor"
-msgstr "Нор"
-
-#: ../rules/base.xml.in.h:494
-msgid "Northern Saami"
-msgstr "Північне Саамі"
-
-#: ../rules/base.xml.in.h:495
-msgid "Northern Saami, eliminate dead keys"
-msgstr "Північне Саамі, вилучити сліпі клавіші (dead keys)"
-
-#: ../rules/base.xml.in.h:496
-msgid "Northgate OmniKey 101"
-msgstr "Northgate OmniKey 101"
-
-#: ../rules/base.xml.in.h:497
-msgid "Norway"
-msgstr "Норвегія"
-
-#: ../rules/base.xml.in.h:498
-msgid "NumLock"
-msgstr "NumLock"
-
-#: ../rules/base.xml.in.h:499
-msgid "Numeric keypad delete key behaviour"
-msgstr "Вибір поведінки клавіші del на цифровій клавіатурі"
-
-#: ../rules/base.xml.in.h:500
-msgid "Numeric keypad keys work as with Mac"
-msgstr "Цифрова клавіатура працює як у Mac"
-
-#: ../rules/base.xml.in.h:501
-msgid "Numeric keypad layout selection"
-msgstr "Вибір розкладки цифрової клавіатури"
-
-#: ../rules/base.xml.in.h:502
-msgid "OADG 109A"
-msgstr "OADG 109A"
-
-#: ../rules/base.xml.in.h:503
-msgid "OLPC"
-msgstr "OLPC"
-
-#: ../rules/base.xml.in.h:504
-msgid "OLPC Dari"
-msgstr "OLPC Дарі"
-
-#: ../rules/base.xml.in.h:505
-msgid "OLPC Pashto"
-msgstr "OLPC Пушту"
-
-#: ../rules/base.xml.in.h:506
-msgid "OLPC Southern Uzbek"
-msgstr "OLPC південноузбецька"
-
-#: ../rules/base.xml.in.h:507
-msgid "Occitan"
-msgstr "Окситанська"
-
-#: ../rules/base.xml.in.h:508
-msgid "Ogham"
-msgstr "Огхам (давньоірландська)"
-
-#: ../rules/base.xml.in.h:509
-msgid "Ogham IS434"
-msgstr "Ogham IS434"
-
-#: ../rules/base.xml.in.h:510
-msgid "Oriya"
-msgstr "Орія"
-
-#: ../rules/base.xml.in.h:511
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr "Ortek MCK-800 MM/Internet keyboard"
-
-#: ../rules/base.xml.in.h:512
-msgid "Ossetian"
-msgstr "Осетинська"
-
-#: ../rules/base.xml.in.h:513
-msgid "Ossetian, Winkeys"
-msgstr "Осетинська, Winkeys"
-
-#: ../rules/base.xml.in.h:514
-msgid "Ossetian, legacy"
-msgstr "Осетинська, застаріла"
-
-#: ../rules/base.xml.in.h:515
-msgid "PC-98xx Series"
-msgstr "Моделі PC-98xx"
-
-#: ../rules/base.xml.in.h:516
-msgid "Pak"
-msgstr "Пак"
-
-#: ../rules/base.xml.in.h:517
-msgid "Pakistan"
-msgstr "Пакистан"
-
-#: ../rules/base.xml.in.h:518
-msgid "Pashto"
-msgstr "Пушту"
-
-#: ../rules/base.xml.in.h:519
-msgid "Pattachote"
-msgstr "Тайська (Паттачот)"
-
-#: ../rules/base.xml.in.h:520
-msgid "Persian, with Persian Keypad"
-msgstr "Перська, з перською дод. панеллю"
-
-#: ../rules/base.xml.in.h:521
-msgid "Phonetic"
-msgstr "Фонетична"
-
-#: ../rules/base.xml.in.h:522
-msgid "Phonetic Winkeys"
-msgstr "Фонетична з клавішами Win"
-
-#: ../rules/base.xml.in.h:523
-msgid "Pol"
-msgstr "Пол"
-
-#: ../rules/base.xml.in.h:524
-msgid "Poland"
-msgstr "Польща"
-
-#: ../rules/base.xml.in.h:525
-msgid "Polytonic"
-msgstr "Поліфонічна"
-
-#: ../rules/base.xml.in.h:526
-msgid "Portugal"
-msgstr "Португалія"
-
-#: ../rules/base.xml.in.h:527
-msgid "Probhat"
-msgstr "Probhat"
-
-#: ../rules/base.xml.in.h:528
-msgid "Programmer Dvorak"
-msgstr "Програмістський Дворак"
-
-#: ../rules/base.xml.in.h:529
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr "Propeller Voyager (KTEZ-1000)"
-
-#: ../rules/base.xml.in.h:530
-msgid "Prt"
-msgstr "Порт"
-
-#: ../rules/base.xml.in.h:531
-msgid "QTronix Scorpius 98N+"
-msgstr "QTronix Scorpius 98N+"
-
-#: ../rules/base.xml.in.h:532
-msgid "Right Alt"
-msgstr "Права клавіша Alt"
-
-#: ../rules/base.xml.in.h:533
-msgid "Right Alt (while pressed)"
-msgstr "Права клавіша Alt (поки натиснена)"
-
-#: ../rules/base.xml.in.h:534
-msgid "Right Alt key never chooses 3rd level"
-msgstr "Права клавіша Alt ніколи не обирає 3-й рівень"
-
-#: ../rules/base.xml.in.h:535
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr "Вибір 3-го рівня натисненням правої клавіші Alt, Shift+права клавіша Alt діє як Multi_Key"
-
-#: ../rules/base.xml.in.h:536
-msgid "Right Ctrl"
-msgstr "Права клавіша Ctrl"
-
-#: ../rules/base.xml.in.h:537
-msgid "Right Ctrl (while pressed)"
-msgstr "Права клавіша Ctrl (поки натиснута)"
-
-#: ../rules/base.xml.in.h:538
-msgid "Right Ctrl as Right Alt"
-msgstr "Права клавіша Ctrl працює як права клавіша Alt"
-
-#: ../rules/base.xml.in.h:539
-msgid "Right Ctrl+Right Shift"
-msgstr "Права Ctrl+Права Shift"
-
-#: ../rules/base.xml.in.h:540
-msgid "Right Shift"
-msgstr "Права клавіша Shift"
-
-#: ../rules/base.xml.in.h:541
-msgid "Right Win"
-msgstr "Права клавіша Win"
-
-#: ../rules/base.xml.in.h:542
-msgid "Right Win (while pressed)"
-msgstr "Права клавіша Win (поки натиснена)"
-
-#: ../rules/base.xml.in.h:543
-msgid "Right hand"
-msgstr "Для правші"
-
-#: ../rules/base.xml.in.h:544
-msgid "Right handed Dvorak"
-msgstr "Дворак для правші"
-
-#: ../rules/base.xml.in.h:545
-msgid "Romania"
-msgstr "Румунія"
-
-#: ../rules/base.xml.in.h:546
-msgid "Romanian keyboard with German letters"
-msgstr "Румунська клавіатура з німецькими літерами"
-
-#: ../rules/base.xml.in.h:547
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr "Румунська клавіатура з німецькими літерами, вимкнути сліпі клавіші"
-
-#: ../rules/base.xml.in.h:548
-msgid "Rou"
-msgstr "Рум"
-
-#: ../rules/base.xml.in.h:549
-msgid "Rus"
-msgstr "Рос"
-
-#: ../rules/base.xml.in.h:550
-msgid "Russia"
-msgstr "Росія"
-
-#: ../rules/base.xml.in.h:551
-msgid "Russian"
-msgstr "Російська"
-
-#: ../rules/base.xml.in.h:552
-msgid "Russian phonetic"
-msgstr "Російська (фонетична)"
-
-#: ../rules/base.xml.in.h:553
-msgid "Russian phonetic Dvorak"
-msgstr "Російський фонетичний Dvorak"
-
-#: ../rules/base.xml.in.h:554
-msgid "Russian phonetic, eliminate dead keys"
-msgstr "Російська фонетична, вилучити сліпі клавіші"
-
-#: ../rules/base.xml.in.h:555
-msgid "Russian with Kazakh"
-msgstr "Російська з казахською"
-
-#: ../rules/base.xml.in.h:556
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr "SILVERCREST Multimedia Wireless Keyboard"
-
-#: ../rules/base.xml.in.h:557
-msgid "SK-1300"
-msgstr "SK-1300"
-
-#: ../rules/base.xml.in.h:558
-msgid "SK-2500"
-msgstr "SK-2500"
-
-#: ../rules/base.xml.in.h:559
-msgid "SK-6200"
-msgstr "SK-6200"
-
-#: ../rules/base.xml.in.h:560
-msgid "SK-7100"
-msgstr "SK-7100"
-
-#: ../rules/base.xml.in.h:561 ../rules/base.extras.xml.in.h:7
-msgid "SRB"
-msgstr "SRB"
-
-#: ../rules/base.xml.in.h:562
-msgid "SVEN Ergonomic 2500"
-msgstr "SVEN Ergonomic 2500"
-
-#: ../rules/base.xml.in.h:563
-msgid "SVEN Slim 303"
-msgstr "SVEN Slim 303"
-
-#: ../rules/base.xml.in.h:564
-msgid "Samsung SDM 4500P"
-msgstr "Samsung SDM 4500P"
-
-#: ../rules/base.xml.in.h:565
-msgid "Samsung SDM 4510P"
-msgstr "Samsung SDM 4510P"
-
-#: ../rules/base.xml.in.h:566
-msgid "Scroll Lock"
-msgstr "Scroll Lock"
-
-#: ../rules/base.xml.in.h:567
-msgid "ScrollLock"
-msgstr "ScrollLock"
-
-#: ../rules/base.xml.in.h:568
-msgid "Secwepemctsin"
-msgstr "Secwepemctsin"
-
-#: ../rules/base.xml.in.h:569
-msgid "Semi-colon on third level"
-msgstr "Крапка з комою на третьому рівні"
-
-#: ../rules/base.xml.in.h:570 ../rules/base.extras.xml.in.h:8
-msgid "Serbia"
-msgstr "Сербія"
-
-#: ../rules/base.xml.in.h:571
-msgid "Shift cancels CapsLock"
-msgstr "Shift скасовує Caps Lock"
-
-#: ../rules/base.xml.in.h:572
-msgid "Shift does not cancel NumLock, chooses 3d level instead"
-msgstr "Shift не скасовує NumLock, а обирає третій ряд"
-
-#: ../rules/base.xml.in.h:573
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr "Shift з цифровою клавіатурою працює як у Microsoft Windows"
-
-#: ../rules/base.xml.in.h:574
-msgid "Shift+CapsLock"
-msgstr "Shift+CapsLock"
-
-#: ../rules/base.xml.in.h:575
-msgid "Simple"
-msgstr "Проста"
-
-#: ../rules/base.xml.in.h:576
-msgid "Slovakia"
-msgstr "Словаччина"
-
-#: ../rules/base.xml.in.h:577
-msgid "Slovenia"
-msgstr "Словенія"
-
-#: ../rules/base.xml.in.h:578
-msgid "South Africa"
-msgstr "Південна Африка"
-
-#: ../rules/base.xml.in.h:579
-msgid "Southern Uzbek"
-msgstr "Південний Узбекистан"
-
-#: ../rules/base.xml.in.h:580
-msgid "Spain"
-msgstr "Іспанія"
-
-#: ../rules/base.xml.in.h:581
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr "Сліпі клавіші (Ctrl+Alt+&lt;key&gt;) обробляються на сервері"
-
-#: ../rules/base.xml.in.h:582
-msgid "SrL"
-msgstr "ШріЛ"
-
-#: ../rules/base.xml.in.h:583
-msgid "Sri Lanka"
-msgstr "Шрі-Ланка"
-
-#: ../rules/base.xml.in.h:584
-msgid "Standard"
-msgstr "Стандартна"
-
-#: ../rules/base.xml.in.h:585
-msgid "Standard (Cedilla)"
-msgstr "Стандартна (Седиль)"
-
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:587
-msgid "Standard RSTU"
-msgstr "Стандартна RSTU"
-
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:589
-msgid "Standard RSTU on Russian layout"
-msgstr "Стандартна RSTU на російській розкладці"
-
-#: ../rules/base.xml.in.h:590
-msgid "Sun Type 5/6"
-msgstr "Sun Type 5/6"
-
-#: ../rules/base.xml.in.h:591
-msgid "Sun dead keys"
-msgstr "Sun dead keys"
-
-#: ../rules/base.xml.in.h:592
-msgid "Super Power Multimedia Keyboard"
-msgstr "Super Power Multimedia Keyboard"
-
-#: ../rules/base.xml.in.h:593
-msgid "Svdvorak"
-msgstr "Svdvorak"
-
-#: ../rules/base.xml.in.h:594
-msgid "Svk"
-msgstr "Словац"
-
-#: ../rules/base.xml.in.h:595
-msgid "Svn"
-msgstr "Слвн"
-
-#: ../rules/base.xml.in.h:596
-msgid "Swap Ctrl and CapsLock"
-msgstr "Поміняти місцями клавіші Control та Caps Lock"
-
-#: ../rules/base.xml.in.h:597
-msgid "Swap ESC and CapsLock"
-msgstr "Поміняти місцями клавіші ESC та Caps Lock"
-
-#: ../rules/base.xml.in.h:598
-msgid "Swe"
-msgstr "Швед"
-
-#: ../rules/base.xml.in.h:599
-msgid "Sweden"
-msgstr "Швеція"
-
-#: ../rules/base.xml.in.h:600
-msgid "Switzerland"
-msgstr "Швейцарія"
-
-#: ../rules/base.xml.in.h:601
-msgid "Symplon PaceBook (tablet PC)"
-msgstr "Symplon PaceBook (планшетний ПК)"
-
-#: ../rules/base.xml.in.h:602
-msgid "Syr"
-msgstr "Сир"
-
-#: ../rules/base.xml.in.h:603
-msgid "Syria"
-msgstr "Сирія"
-
-#: ../rules/base.xml.in.h:604
-msgid "Syriac"
-msgstr "Сирійська"
-
-#: ../rules/base.xml.in.h:605
-msgid "Syriac phonetic"
-msgstr "Сирійська фонетична"
-
-#: ../rules/base.xml.in.h:606
-msgid "TIS-820.2538"
-msgstr "TIS-820.2538"
-
-#: ../rules/base.xml.in.h:607
-msgid "Tajikistan"
-msgstr "Таджикистан"
-
-#: ../rules/base.xml.in.h:608
-msgid "Tamil"
-msgstr "Тамільська"
-
-#: ../rules/base.xml.in.h:609
-msgid "Tamil TAB Typewriter"
-msgstr "Тамільська TAB (Машинописна)"
-
-#: ../rules/base.xml.in.h:610
-msgid "Tamil TSCII Typewriter"
-msgstr "Тамільська TSCII (Машинописна)"
-
-#: ../rules/base.xml.in.h:611
-msgid "Tamil Unicode"
-msgstr "Тамільська Unicode"
-
-#: ../rules/base.xml.in.h:612
-msgid "Targa Visionary 811"
-msgstr "Targa Visionary 811"
-
-#: ../rules/base.xml.in.h:613
-msgid "Tatar"
-msgstr "Татарська"
-
-#: ../rules/base.xml.in.h:614
-msgid "Telugu"
-msgstr "Телугу"
-
-#: ../rules/base.xml.in.h:615
-msgid "Tha"
-msgstr "Тай"
-
-#: ../rules/base.xml.in.h:616
-msgid "Thailand"
-msgstr "Таїланд"
-
-#: ../rules/base.xml.in.h:617
-msgid "Tibetan"
-msgstr "Тибетська"
-
-#: ../rules/base.xml.in.h:618
-msgid "Tibetan (with ASCII numerals)"
-msgstr "Тибетська (з ASCII числами)"
-
-#: ../rules/base.xml.in.h:619
-msgid "Tifinagh"
-msgstr "Тифіна"
-
-#: ../rules/base.xml.in.h:620
-msgid "Tifinagh Alternative"
-msgstr "Тифіна альтернативна"
-
-#: ../rules/base.xml.in.h:621
-msgid "Tifinagh Alternative Phonetic"
-msgstr "Тифіна альтернативна фонетична"
-
-#: ../rules/base.xml.in.h:622
-msgid "Tifinagh Extended"
-msgstr "Тифіна розширена"
-
-#: ../rules/base.xml.in.h:623
-msgid "Tifinagh Extended Phonetic"
-msgstr "Тифіна розширена фонетична"
-
-#: ../rules/base.xml.in.h:624
-msgid "Tifinagh Phonetic"
-msgstr "Тифіна фонетична"
-
-#: ../rules/base.xml.in.h:625
-msgid "Tilde (~) variant"
-msgstr "Варіант з тильдою (~)"
-
-#: ../rules/base.xml.in.h:626
-msgid "Tjk"
-msgstr "Тдж"
-
-#: ../rules/base.xml.in.h:627
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr "На відповідну клавішу на клавіатурі Дворак."
-
-#: ../rules/base.xml.in.h:628
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr "На відповідну клавішу на клавіатурі Qwerty."
-
-#: ../rules/base.xml.in.h:629
-msgid "Toshiba Satellite S3000"
-msgstr "Toshiba Satellite S3000"
-
-#: ../rules/base.xml.in.h:630
-msgid "Traditional phonetic"
-msgstr "Традиційна фонетична"
-
-#: ../rules/base.xml.in.h:631
-msgid "Trust Direct Access Keyboard"
-msgstr "Trust Direct Access Keyboard"
-
-#: ../rules/base.xml.in.h:632
-msgid "Trust Slimline"
-msgstr "Trust Slimline"
-
-#: ../rules/base.xml.in.h:633
-msgid "Trust Wireless Keyboard Classic"
-msgstr "Trust Wireless Keyboard Classic"
-
-#: ../rules/base.xml.in.h:634
-msgid "Tur"
-msgstr "Тур"
-
-#: ../rules/base.xml.in.h:635
-msgid "Turkey"
-msgstr "Туреччина"
-
-#: ../rules/base.xml.in.h:636
-msgid "Turkmenistan"
-msgstr "Туркменістан"
-
-#: ../rules/base.xml.in.h:637
-msgid "Typewriter"
-msgstr "Машинописна"
-
-#: ../rules/base.xml.in.h:638
-msgid "Typewriter, legacy"
-msgstr "Машинописна, застаріла"
-
-#: ../rules/base.xml.in.h:639
-msgid "UCW layout (accented letters only)"
-msgstr "UCW-розкладка (лише літери з акцентами)"
-
-#: ../rules/base.xml.in.h:640
-msgid "US keyboard with Bosnian digraphs"
-msgstr "Клавіатура США з боснійськими диграфами"
-
-#: ../rules/base.xml.in.h:641
-msgid "US keyboard with Bosnian letters"
-msgstr "Клавіатура США з боснійськими літерами"
-
-#: ../rules/base.xml.in.h:642
-msgid "US keyboard with Croatian digraphs"
-msgstr "Клавіатура США з хорватськими диграфами"
-
-#: ../rules/base.xml.in.h:643
-msgid "US keyboard with Croatian letters"
-msgstr "Клавіатура США з хорватськими літерами"
-
-#: ../rules/base.xml.in.h:644
-msgid "US keyboard with Estonian letters"
-msgstr "Клавіатура США з естонськими літерами"
-
-#: ../rules/base.xml.in.h:645
-msgid "US keyboard with Italian letters"
-msgstr "Клавіатура США з італійськими буквами"
-
-#: ../rules/base.xml.in.h:646
-msgid "US keyboard with Lithuanian letters"
-msgstr "Клавіатура США з литовськими буквами"
-
-#: ../rules/base.xml.in.h:647
-msgid "US keyboard with Slovenian letters"
-msgstr "Клавіатура США із словенськими буквами"
-
-#: ../rules/base.xml.in.h:648 ../rules/base.extras.xml.in.h:9
-msgid "USA"
-msgstr "США"
-
-#: ../rules/base.xml.in.h:649
-msgid "Udmurt"
-msgstr "Удмуртська"
-
-#: ../rules/base.xml.in.h:650
-msgid "Ukr"
-msgstr "Укр"
-
-#: ../rules/base.xml.in.h:651
-msgid "Ukraine"
-msgstr "Україна"
-
-#: ../rules/base.xml.in.h:652
-msgid "Unicode additions (arrows and math operators)"
-msgstr "Доповнення Unicode (стрілки та математичні оператори)"
-
-#: ../rules/base.xml.in.h:653
-msgid "Unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Доповнення Unicode (стрілки та математичні оператори). Математичні оператори на типовому рівні."
-
-#: ../rules/base.xml.in.h:654
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
-
-#: ../rules/base.xml.in.h:655
-msgid "United Kingdom"
-msgstr "Англійська (Великобританія)"
-
-#: ../rules/base.xml.in.h:656
-msgid "Unitek KB-1925"
-msgstr "Unitek KB-1925"
-
-#: ../rules/base.xml.in.h:657
-msgid "Urdu, Alternative phonetic"
-msgstr "Урду, альтернативна фонетична"
-
-#: ../rules/base.xml.in.h:658
-msgid "Urdu, Phonetic"
-msgstr "Урду, фонетична"
-
-#: ../rules/base.xml.in.h:659
-msgid "Urdu, Winkeys"
-msgstr "Урду, з клавішами Win"
-
-#: ../rules/base.xml.in.h:660
-msgid "Use Bosnian digraphs"
-msgstr "З боснійськими диграфами"
-
-#: ../rules/base.xml.in.h:661
-msgid "Use Croatian digraphs"
-msgstr "З хорватськими диграфами"
-
-#: ../rules/base.xml.in.h:662
-msgid "Use guillemets for quotes"
-msgstr "Кутові лапки у якості лапок"
-
-#: ../rules/base.xml.in.h:663
-msgid "Use keyboard LED to show alternative layout"
-msgstr "Використовувати клавіатурні індикатори для індикації альтернативних розкладок"
-
-#: ../rules/base.xml.in.h:664
-msgid "Using space key to input non-breakable space character"
-msgstr "Клавіша пробіл генерує символ нерозривного пробілу"
-
-#: ../rules/base.xml.in.h:665
-msgid "Usual space at any level"
-msgstr "Звичайний пробіл на будь-якому рівні"
-
-#: ../rules/base.xml.in.h:666
-msgid "Uzb"
-msgstr "Узб"
-
-#: ../rules/base.xml.in.h:667
-msgid "Uzbekistan"
-msgstr "Узбекистан"
-
-#: ../rules/base.xml.in.h:668
-msgid "Vietnam"
-msgstr "В'єтнам"
-
-#: ../rules/base.xml.in.h:669
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr "ViewSonic KU-306 Internet Keyboard"
-
-#: ../rules/base.xml.in.h:670
-msgid "Vnm"
-msgstr "В'єт"
-
-#: ../rules/base.xml.in.h:671
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори)"
-
-#: ../rules/base.xml.in.h:672
-msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
-msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори). Математичні операції на типовому рівні"
-
-#: ../rules/base.xml.in.h:673
-msgid "Wang model 724 azerty"
-msgstr "Wang model 724 azerty"
-
-#: ../rules/base.xml.in.h:674
-msgid "Western"
-msgstr "Західна"
-
-#: ../rules/base.xml.in.h:675
-msgid "Winbook Model XP5"
-msgstr "Winbook Model XP5"
-
-#: ../rules/base.xml.in.h:676
-msgid "Winkeys"
-msgstr "Розкладка Windows"
-
-#: ../rules/base.xml.in.h:677
-msgid "With &lt;\\|&gt; key"
-msgstr "З клавішею &lt;\\|&gt;"
-
-#: ../rules/base.xml.in.h:678
-msgid "With EuroSign on 5"
-msgstr "Призначити знак євро на клавішу 5"
-
-#: ../rules/base.xml.in.h:679
-msgid "With guillemets"
-msgstr "З кутовими лапками"
-
-#: ../rules/base.xml.in.h:680
-msgid "Yahoo! Internet Keyboard"
-msgstr "Yahoo! Internet Keyboard"
-
-#: ../rules/base.xml.in.h:681
-msgid "Yakut"
-msgstr "Якутська"
-
-#: ../rules/base.xml.in.h:682
-msgid "Yoruba"
-msgstr "Йоруба"
-
-#: ../rules/base.xml.in.h:683
-msgid "Z and ZHE swapped"
-msgstr "Z та ZHE поміняні місцями"
-
-#: ../rules/base.xml.in.h:684
-msgid "Zar"
-msgstr "Зар"
-
-#: ../rules/base.xml.in.h:685
-msgid "azerty"
-msgstr "azerty"
-
-#: ../rules/base.xml.in.h:686
-msgid "azerty/digits"
-msgstr "azerty/цифри"
-
-#: ../rules/base.xml.in.h:687
-msgid "digits"
-msgstr "цифри"
-
-#: ../rules/base.xml.in.h:688
-msgid "displaced semicolon and quote (obsolete)"
-msgstr "посунута крапка з комою та лапки (застаріло)"
-
-#: ../rules/base.xml.in.h:689
-msgid "lyx"
-msgstr "lyx"
-
-#: ../rules/base.xml.in.h:690
-msgid "qwerty"
-msgstr "qwerty"
-
-#: ../rules/base.xml.in.h:691
-msgid "qwerty, extended Backslash"
-msgstr "qwerty, розширений Backslash"
-
-#: ../rules/base.xml.in.h:692
-msgid "qwerty/digits"
-msgstr "qwerty/цифри"
-
-#: ../rules/base.xml.in.h:693
-msgid "qwertz"
-msgstr "qwertz"
-
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL"
-msgstr "APL"
-
-#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr "Атсінська"
-
-#: ../rules/base.extras.xml.in.h:3
-msgid "Combining accents instead of dead keys"
-msgstr "Об'єднані надбуквені знаки разом спец. клавіш (dead keys)"
-
-#: ../rules/base.extras.xml.in.h:4
-msgid "Couer D'alene Salish"
-msgstr "Салішська кер-д’ален"
-
-#: ../rules/base.extras.xml.in.h:5
-msgid "International (AltGr Unicode combining)"
-msgstr "Інтернаціональна (об'єднана з AltGr)"
-
-#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr "Інтернаціональна (об'єднана з AltGr, альтернативна)"
+# translation of xkeyboard-config to Ukrainian
+# Ukrainian translation to xkeyboard-config
+# Copyright (C) 2002, 2007, 2008 Free Software Foundation, Inc.
+# Sergey V. Udaltsov <svu@users.sourceforge.net>
+#
+# This file is distributed under the same license as the xkeyboard-config package.
+# Andriy Rysin <arysin@bcsii.com>, 2007, 2008.
+# Andriy Rysin <arysin@gmail.com>, 2008.
+# Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2011.
+msgid ""
+msgstr ""
+"Project-Id-Version: xkeyboard-config-2.1.99\n"
+"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-03-31 19:48+0300\n"
+"Last-Translator: Maxim V. Dziumanenko <dziumanenko@gmail.com>\n"
+"Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+"X-Generator: Lokalize 1.2\n"
+
+#: ../rules/base.xml.in.h:1
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;Менше ніж/Більше ніж&gt;"
+
+#: ../rules/base.xml.in.h:2
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "&lt;Менше ніж/Більше ніж&gt; (вибирає 3-ій рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня)"
+
+#: ../rules/base.xml.in.h:3
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Менше ніж/Більше ніж&gt; вибирає 5-ий рівень і активує блокування рівня 5, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:4
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "&lt;Менше ніж/Більше ніж&gt; вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:5
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "&lt;Менше ніж/Більше ніж&gt; вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:6
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
+
+#: ../rules/base.xml.in.h:7
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
+
+#: ../rules/base.xml.in.h:8
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "A4Tech Wireless Desktop RFKB-23"
+
+#: ../rules/base.xml.in.h:9
+msgid "ATM/phone-style"
+msgstr "У стилі банкоматної/телефонної"
+
+#: ../rules/base.xml.in.h:10
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
+
+#: ../rules/base.xml.in.h:11
+msgid "Acer C300"
+msgstr "Acer C300"
+
+#: ../rules/base.xml.in.h:12
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
+
+#: ../rules/base.xml.in.h:13
+msgid "Acer Laptop"
+msgstr "Acer Laptop"
+
+#: ../rules/base.xml.in.h:14
+msgid "Add the standard behavior to Menu key"
+msgstr "Додати звичайну поведінку на клавішу Menu"
+
+#: ../rules/base.xml.in.h:15
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr "Додавання діакритичних знаків есперанто"
+
+#: ../rules/base.xml.in.h:16
+msgid "Adding currency signs to certain keys"
+msgstr "Додавання знаків валюти до деяких клавіш"
+
+#: ../rules/base.xml.in.h:17
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
+
+#: ../rules/base.xml.in.h:18
+msgid "Afg"
+msgstr "Афг"
+
+#: ../rules/base.xml.in.h:19
+msgid "Afghani"
+msgstr "Афгані"
+
+#: ../rules/base.xml.in.h:20
+msgid "Akan"
+msgstr "Акан"
+
+#: ../rules/base.xml.in.h:21
+msgid "Albanian"
+msgstr "Албанська"
+
+#: ../rules/base.xml.in.h:22
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt та Meta на клавішах Alt"
+
+#: ../rules/base.xml.in.h:23
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Клавіша Alt відповідає правій клавіші Win, а Super - клавіші Menu."
+
+#: ../rules/base.xml.in.h:24
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
+
+#: ../rules/base.xml.in.h:25
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
+
+#: ../rules/base.xml.in.h:26
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
+
+#: ../rules/base.xml.in.h:27
+msgid "Alt+Space"
+msgstr "Alt+Пробіл"
+
+#: ../rules/base.xml.in.h:28
+msgid "Alt/Win key behavior"
+msgstr "Поведінка клавіш Alt/Win"
+
+#: ../rules/base.xml.in.h:29
+msgid "Amharic"
+msgstr "Амхарська"
+
+#: ../rules/base.xml.in.h:30
+msgid "Any Alt key"
+msgstr "Будь-яка клавіша Alt"
+
+#: ../rules/base.xml.in.h:31
+msgid "Any Win key"
+msgstr "Будь-яка клавіша Win"
+
+#: ../rules/base.xml.in.h:32
+msgid "Any Win key (while pressed)"
+msgstr "Будь-яка клавіша Win (на час натискання)"
+
+#: ../rules/base.xml.in.h:33
+msgid "Apple"
+msgstr "Apple"
+
+#: ../rules/base.xml.in.h:34
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "Клавіатура Apple Aluminium (ANSI)"
+
+#: ../rules/base.xml.in.h:35
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "Клавіатура Apple Aluminium (ISO)"
+
+#: ../rules/base.xml.in.h:36
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "Клавіатура Apple Aluminium (JIS)"
+
+#: ../rules/base.xml.in.h:37
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "Клавіатура Apple Aluminium (емуляція клавіш ПК: Print, Scroll Lock, Pause, Num Lock)"
+
+#: ../rules/base.xml.in.h:38
+msgid "Apple Laptop"
+msgstr "Ноутбук Apple"
+
+#: ../rules/base.xml.in.h:39
+msgid "Arabic"
+msgstr "Арабська"
+
+#: ../rules/base.xml.in.h:40
+msgid "Arabic (Buckwalter)"
+msgstr "Арабська (Бакволтера)"
+
+#: ../rules/base.xml.in.h:41
+msgid "Arabic (Morocco)"
+msgstr "Арабська (Марокко)"
+
+#: ../rules/base.xml.in.h:42
+msgid "Arabic (Pakistan)"
+msgstr "Арабська (Пакистан)"
+
+#: ../rules/base.xml.in.h:43
+msgid "Arabic (Syria)"
+msgstr "Арабська (Сирія)"
+
+#: ../rules/base.xml.in.h:44
+msgid "Arabic (azerty)"
+msgstr "Арабська (azerty)"
+
+#: ../rules/base.xml.in.h:45
+msgid "Arabic (azerty/digits)"
+msgstr "Арабська (azerty/цифри)"
+
+#: ../rules/base.xml.in.h:46
+msgid "Arabic (digits)"
+msgstr "Арабська (цифри)"
+
+#: ../rules/base.xml.in.h:47
+msgid "Arabic (qwerty)"
+msgstr "Арабська (qwerty)"
+
+#: ../rules/base.xml.in.h:48
+msgid "Arabic (qwerty/digits)"
+msgstr "Арабська (qwerty/цифри)"
+
+#: ../rules/base.xml.in.h:49
+msgid "Armenian"
+msgstr "Вірменська"
+
+#: ../rules/base.xml.in.h:50
+msgid "Armenian (alternative eastern)"
+msgstr "Вірменська (альтернативна східна)"
+
+#: ../rules/base.xml.in.h:51
+msgid "Armenian (alternative phonetic)"
+msgstr "Вірменська (альтернативна фонетична)"
+
+#: ../rules/base.xml.in.h:52
+msgid "Armenian (eastern)"
+msgstr "Вірменська (східна)"
+
+#: ../rules/base.xml.in.h:53
+msgid "Armenian (phonetic)"
+msgstr "Вірменська (фонетична)"
+
+#: ../rules/base.xml.in.h:54
+msgid "Armenian (western)"
+msgstr "Вірменська (західна)"
+
+#: ../rules/base.xml.in.h:55
+msgid "Asus Laptop"
+msgstr "Ноутбук Asus"
+
+#: ../rules/base.xml.in.h:56
+msgid "At bottom left"
+msgstr "Знизу ліворуч"
+
+#: ../rules/base.xml.in.h:57
+msgid "At left of 'A'"
+msgstr "Ліворуч від 'A'"
+
+#: ../rules/base.xml.in.h:58
+msgid "Avatime"
+msgstr "Аватіме"
+
+#: ../rules/base.xml.in.h:59
+msgid "Azerbaijan (Cyrillic)"
+msgstr "Азербайджанська (кирилиця)"
+
+#: ../rules/base.xml.in.h:60
+msgid "Azerbaijani"
+msgstr "Азербайджанська"
+
+#: ../rules/base.xml.in.h:61
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "Azona RF2300 бездротова Інтернет-клавіатура"
+
+#: ../rules/base.xml.in.h:62
+msgid "BTC 5090"
+msgstr "BTC 5090"
+
+#: ../rules/base.xml.in.h:63
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF мультимедійна"
+
+#: ../rules/base.xml.in.h:64
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
+
+#: ../rules/base.xml.in.h:65
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
+
+#: ../rules/base.xml.in.h:66
+msgid "BTC 9000"
+msgstr "BTC 9000"
+
+#: ../rules/base.xml.in.h:67
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
+
+#: ../rules/base.xml.in.h:68
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
+
+#: ../rules/base.xml.in.h:69
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
+
+#: ../rules/base.xml.in.h:70
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+
+#: ../rules/base.xml.in.h:71
+msgid "Backslash"
+msgstr "Зворотна риска"
+
+#: ../rules/base.xml.in.h:72
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Зворотна похила риска, «/» (вибирає 3-ій рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня)"
+
+#: ../rules/base.xml.in.h:73
+msgid "Bambara"
+msgstr "Бамбара"
+
+#: ../rules/base.xml.in.h:74
+msgid "Belarusian"
+msgstr "Білоруська"
+
+#: ../rules/base.xml.in.h:75
+msgid "Belarusian (Latin)"
+msgstr "Білоруська (латиниця)"
+
+#: ../rules/base.xml.in.h:76
+msgid "Belarusian (legacy)"
+msgstr "Білоруська (застаріла)"
+
+#: ../rules/base.xml.in.h:77
+msgid "Belgian"
+msgstr "Бельгійська"
+
+#: ../rules/base.xml.in.h:78
+msgid "Belgian (ISO alternate)"
+msgstr "Бельгійська (додаткова ISO)"
+
+#: ../rules/base.xml.in.h:79
+msgid "Belgian (Sun dead keys)"
+msgstr "Бельгійська (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:80
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "Бельгійська (модель Wang 724, azerty)"
+
+#: ../rules/base.xml.in.h:81
+msgid "Belgian (alternative)"
+msgstr "Бельгійська (альтернативна)"
+
+#: ../rules/base.xml.in.h:82
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "Бельгійська (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:83
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "Бельгійська (альтернативна, лише latin-9)"
+
+#: ../rules/base.xml.in.h:84
+msgid "Belgian (eliminate dead keys)"
+msgstr "Бельгійська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:85
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
+
+#: ../rules/base.xml.in.h:86
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
+
+#: ../rules/base.xml.in.h:87
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
+
+#: ../rules/base.xml.in.h:88
+msgid "Bengali"
+msgstr "Бенгальська"
+
+#: ../rules/base.xml.in.h:89
+msgid "Bengali (Probhat)"
+msgstr "Бенгальська (пробхат)"
+
+#: ../rules/base.xml.in.h:90
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr "Берберська (Марокко, тифінаг, альтернативна фонетична)"
+
+#: ../rules/base.xml.in.h:91
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr "Берберська (Марокко, тифінаг, альтернативна)"
+
+#: ../rules/base.xml.in.h:92
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "Берберська (Марокко, тифінаг, розширена фонетична)"
+
+#: ../rules/base.xml.in.h:93
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Берберська (Марокко, тифінаг, розширена)"
+
+#: ../rules/base.xml.in.h:94
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Берберська (Марокко, тифінаг, фонетична)"
+
+#: ../rules/base.xml.in.h:95
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Берберська (Марокко, давньолівійська)"
+
+#: ../rules/base.xml.in.h:96
+msgid "Bosnian"
+msgstr "Боснійська"
+
+#: ../rules/base.xml.in.h:97
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "Боснійська (клавіатура США з боснійськими диграфами)"
+
+#: ../rules/base.xml.in.h:98
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "Боснійська (клавіатура США з боснійськими літерами)"
+
+#: ../rules/base.xml.in.h:99
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "Боснійська (з боснійськими диграфами)"
+
+#: ../rules/base.xml.in.h:100
+msgid "Bosnian (use guillemets for quotes)"
+msgstr "Боснійська (кутові лапки)"
+
+#: ../rules/base.xml.in.h:101
+msgid "Both Alt keys together"
+msgstr "Обидві клавіші Alt разом"
+
+#: ../rules/base.xml.in.h:102
+msgid "Both Ctrl keys together"
+msgstr "Обидві клавіші Ctrl разом"
+
+#: ../rules/base.xml.in.h:103
+msgid "Both Shift keys together"
+msgstr "Обидві клавіші Shift разом"
+
+#: ../rules/base.xml.in.h:104
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "Натискання обох клавіш Shift вмикають Caps Lock, одна клавіша Shift — вимикає"
+
+#: ../rules/base.xml.in.h:105
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "Обидві клавіші Shift разом перемикають стан Caps Lock"
+
+#: ../rules/base.xml.in.h:106
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "Обидві клавіші Shift разом перемикають стан Shift"
+
+#: ../rules/base.xml.in.h:107
+msgid "Braille"
+msgstr "Брайля"
+
+#: ../rules/base.xml.in.h:108
+msgid "Braille (left hand)"
+msgstr "Брайля (для шульги)"
+
+#: ../rules/base.xml.in.h:109
+msgid "Braille (right hand)"
+msgstr "Брайль (для правші)"
+
+#: ../rules/base.xml.in.h:110
+msgid "Brother Internet Keyboard"
+msgstr "Brother Internet Keyboard"
+
+#: ../rules/base.xml.in.h:111
+msgid "Bulgarian"
+msgstr "Болгарська"
+
+#: ../rules/base.xml.in.h:112
+msgid "Bulgarian (new phonetic)"
+msgstr "Болгарська (нова фонетична)"
+
+#: ../rules/base.xml.in.h:113
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Болгарська (традиційна фонетична)"
+
+#: ../rules/base.xml.in.h:114
+msgid "Burmese"
+msgstr "Бірманська"
+
+#: ../rules/base.xml.in.h:115
+msgid "Canadian Multilingual"
+msgstr "Канадська (багатомовна)"
+
+#: ../rules/base.xml.in.h:116
+msgid "Canadian Multilingual (first part)"
+msgstr "Канадська (багатомовна, перша частина)"
+
+#: ../rules/base.xml.in.h:117
+msgid "Canadian Multilingual (second part)"
+msgstr "Канадська (багатомовна, друга частина)"
+
+#: ../rules/base.xml.in.h:118
+msgid "Caps Lock"
+msgstr "Caps Lock"
+
+#: ../rules/base.xml.in.h:119
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr "Caps Lock (вибирає 3-ій рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня)"
+
+#: ../rules/base.xml.in.h:120
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr "Caps Lock (на першу розкладку), Shift+Caps Lock (на останню розкладку)"
+
+#: ../rules/base.xml.in.h:121
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr "Caps Lock (поки натиснена), Alt+Caps Lock виконує оригінальну функцію capslock"
+
+#: ../rules/base.xml.in.h:122
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock дія як Shift з блокуванням. Shift призупиняє дію Caps Lock"
+
+#: ../rules/base.xml.in.h:123
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock діє як Shift з блокуванням. Shift не впливає на Caps Lock"
+
+#: ../rules/base.xml.in.h:124
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock вимкнено"
+
+#: ../rules/base.xml.in.h:125
+msgid "Caps Lock key behavior"
+msgstr "Поведінка клавіші Caps Lock"
+
+#: ../rules/base.xml.in.h:126
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr "Caps Lock вмикає Shift, таким чином, він діє одразу на всі клавіші"
+
+#: ../rules/base.xml.in.h:127
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Caps Lock вмикає звичайну капіталізацію символів алфавіту"
+
+#: ../rules/base.xml.in.h:128
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift призупиняє дію Caps Lock"
+
+#: ../rules/base.xml.in.h:129
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift не впливає на Caps Lock"
+
+#: ../rules/base.xml.in.h:130
+msgid "Catalan"
+msgstr "Каталонська"
+
+#: ../rules/base.xml.in.h:131
+msgid "Cherokee"
+msgstr "Cherokee"
+
+#: ../rules/base.xml.in.h:132
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
+
+#: ../rules/base.xml.in.h:133
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
+
+#: ../rules/base.xml.in.h:134
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr "Cherry Blue Line CyBo@rd (альтернативний варіант)"
+
+#: ../rules/base.xml.in.h:135
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry CyBo@rd USB-Hub"
+
+#: ../rules/base.xml.in.h:136
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
+
+#: ../rules/base.xml.in.h:137
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
+
+#: ../rules/base.xml.in.h:138
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
+
+#: ../rules/base.xml.in.h:139
+msgid "Chicony Internet Keyboard"
+msgstr "Інтернет-клавіатура Chicony"
+
+#: ../rules/base.xml.in.h:140
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
+
+#: ../rules/base.xml.in.h:141
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
+
+#: ../rules/base.xml.in.h:142
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
+
+#: ../rules/base.xml.in.h:143
+msgid "Chinese"
+msgstr "Китайська"
+
+#: ../rules/base.xml.in.h:144
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "Китайська (тибетська з ASCII числами)"
+
+#: ../rules/base.xml.in.h:145
+msgid "Chinese (Tibetan)"
+msgstr "Китайська (тибетська)"
+
+#: ../rules/base.xml.in.h:146
+msgid "Chinese (Uyghur)"
+msgstr "Китайська (уйгурська)"
+
+#: ../rules/base.xml.in.h:147
+msgid "Classmate PC"
+msgstr "Classmate PC"
+
+#: ../rules/base.xml.in.h:148
+msgid "Compaq Easy Access Keyboard"
+msgstr "Compaq Easy Access Keyboard"
+
+#: ../rules/base.xml.in.h:149
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr "Compaq Internet Keyboard (13 клавіш)"
+
+#: ../rules/base.xml.in.h:150
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr "Compaq Internet Keyboard (18 клавіш)"
+
+#: ../rules/base.xml.in.h:151
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr "Compaq Internet Keyboard (7 клавіш)"
+
+#: ../rules/base.xml.in.h:152
+msgid "Compaq iPaq Keyboard"
+msgstr "Compaq iPaq Keyboard"
+
+#: ../rules/base.xml.in.h:153
+msgid "Compose key position"
+msgstr "Розташування клавіші Compose"
+
+#: ../rules/base.xml.in.h:154
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Backspace"
+
+#: ../rules/base.xml.in.h:155
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Control використовується як клавіші Alt, Alt використовується як Win"
+
+#: ../rules/base.xml.in.h:156
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Control використовується як Win (і як звичайний Control)"
+
+#: ../rules/base.xml.in.h:157
+msgid "Creative Desktop Wireless 7000"
+msgstr "Creative Desktop Wireless 7000"
+
+#: ../rules/base.xml.in.h:158
+msgid "Croatian"
+msgstr "Хорватська"
+
+#: ../rules/base.xml.in.h:159
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "Хорватська (клавіатура США з хорватськими диграфами)"
+
+#: ../rules/base.xml.in.h:160
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "Хорватська (клавіатура США з хорватськими літерами)"
+
+#: ../rules/base.xml.in.h:161
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "Хорватська (з хорватськими диграфами)"
+
+#: ../rules/base.xml.in.h:162
+msgid "Croatian (Use guillemets for quotes)"
+msgstr "Хорватська (кутові лапки)"
+
+#: ../rules/base.xml.in.h:163
+msgid "Ctrl key position"
+msgstr "Розташування клавіші Ctrl"
+
+#: ../rules/base.xml.in.h:164
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
+
+#: ../rules/base.xml.in.h:165
+msgid "Czech"
+msgstr "Чеська"
+
+#: ../rules/base.xml.in.h:166
+msgid "Czech (UCW layout accented letters only)"
+msgstr "Чеська (UCW-розкладка, лише літери з акцентами)"
+
+#: ../rules/base.xml.in.h:167
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "Чеська (Дворак-США з підтримкою CZ UCW)"
+
+#: ../rules/base.xml.in.h:168
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "Чеська (з клавішею &lt;\\|&gt;)"
+
+#: ../rules/base.xml.in.h:169
+msgid "Czech (qwerty)"
+msgstr "Чеська (qwerty)"
+
+#: ../rules/base.xml.in.h:170
+msgid "Czech (qwerty, extended Backslash)"
+msgstr "Чеська (qwerty, розширені функції Backslash)"
+
+#: ../rules/base.xml.in.h:171
+msgid "DTK2000"
+msgstr "DTK2000"
+
+#: ../rules/base.xml.in.h:172
+msgid "Danish"
+msgstr "Данська"
+
+#: ../rules/base.xml.in.h:173
+msgid "Danish (Dvorak)"
+msgstr "Данська (Дворака)"
+
+#: ../rules/base.xml.in.h:174
+msgid "Danish (Mac)"
+msgstr "Данська (Mac)"
+
+#: ../rules/base.xml.in.h:175
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "Данська (Mac, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:176
+msgid "Danish (eliminate dead keys)"
+msgstr "Данська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:177
+msgid "Default numeric keypad keys"
+msgstr "Типові клавіші цифрової клавіатури"
+
+#: ../rules/base.xml.in.h:178
+msgid "Dell"
+msgstr "Dell"
+
+#: ../rules/base.xml.in.h:179
+msgid "Dell 101-key PC"
+msgstr "Dell 101-клавішна для ПК"
+
+#: ../rules/base.xml.in.h:180
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "Dell, ноутбуки Inspiron 6xxx/8xxx"
+
+#: ../rules/base.xml.in.h:181
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "Dell, ноутбуки Precision M"
+
+#: ../rules/base.xml.in.h:182
+msgid "Dell Latitude series laptop"
+msgstr "Dell, ноутбук Latitude"
+
+#: ../rules/base.xml.in.h:183
+msgid "Dell Precision M65"
+msgstr "Dell Precision M65"
+
+#: ../rules/base.xml.in.h:184
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
+
+#: ../rules/base.xml.in.h:185
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
+
+#: ../rules/base.xml.in.h:186
+msgid "Dell USB Multimedia Keyboard"
+msgstr "Dell USB Multimedia Keyboard"
+
+#: ../rules/base.xml.in.h:187
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr "Dexxa Wireless Desktop Keyboard"
+
+#: ../rules/base.xml.in.h:188
+msgid "Dhivehi"
+msgstr "Мальдивська"
+
+#: ../rules/base.xml.in.h:189
+msgid "Diamond 9801 / 9802 series"
+msgstr "Моделі Diamond 9801/9802"
+
+#: ../rules/base.xml.in.h:190
+msgid "Dutch"
+msgstr "Голландська"
+
+#: ../rules/base.xml.in.h:191
+msgid "Dutch (Mac)"
+msgstr "Голландська (Mac)"
+
+#: ../rules/base.xml.in.h:192
+msgid "Dutch (Sun dead keys)"
+msgstr "Голландська (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:193
+msgid "Dutch (standard)"
+msgstr "Голландська (стандартна)"
+
+#: ../rules/base.xml.in.h:194
+msgid "Dzongkha"
+msgstr "Дзонг-ке"
+
+#: ../rules/base.xml.in.h:195
+msgid "Enable extra typographic characters"
+msgstr "Увімкнути додаткові типографські символи"
+
+#: ../rules/base.xml.in.h:196
+msgid "English (Canada)"
+msgstr "Англійська (Канада)"
+
+#: ../rules/base.xml.in.h:197
+msgid "English (Colemak)"
+msgstr "Англійська (Коулмак)"
+
+#: ../rules/base.xml.in.h:198
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "Англійська (альтернативна інтернаціональна Дворака без сліпих клавіш)"
+
+#: ../rules/base.xml.in.h:199
+msgid "English (Dvorak international with dead keys)"
+msgstr "Англійська (інтернаціональна Дворака зі сліпими клавішами)"
+
+#: ../rules/base.xml.in.h:200
+msgid "English (Dvorak)"
+msgstr "Англійська (Дворак)"
+
+#: ../rules/base.xml.in.h:201
+msgid "English (Ghana)"
+msgstr "Англійська (Гана)"
+
+#: ../rules/base.xml.in.h:202
+msgid "English (Ghana, GILLBT)"
+msgstr "Англійська (Гана, GILLBT)"
+
+#: ../rules/base.xml.in.h:203
+msgid "English (Ghana, multilingual)"
+msgstr "Англійська (Гана, інтернаціональна)"
+
+#: ../rules/base.xml.in.h:204
+msgid "English (India, with RupeeSign)"
+msgstr "Англійська (Індія, з підтримкою символу рупії)"
+
+#: ../rules/base.xml.in.h:205
+msgid "English (Macintosh)"
+msgstr "Англійська (Macintosh)"
+
+#: ../rules/base.xml.in.h:206
+msgid "English (Mali, USA Mac)"
+msgstr "Англійська (Малі, Mac США)"
+
+#: ../rules/base.xml.in.h:207
+msgid "English (Mali, USA international)"
+msgstr "Англійська (Малі, інтернаціональна США)"
+
+#: ../rules/base.xml.in.h:208
+msgid "English (Nigeria)"
+msgstr "Англійська (Нігерія)"
+
+#: ../rules/base.xml.in.h:209
+msgid "English (South Africa)"
+msgstr "Англійська (ПАР)"
+
+#: ../rules/base.xml.in.h:210
+msgid "English (UK)"
+msgstr "Англійська (Великобританія)"
+
+#: ../rules/base.xml.in.h:211
+msgid "English (UK, Colemak)"
+msgstr "Англійська (США, Коулмак)"
+
+#: ../rules/base.xml.in.h:212
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr "Англійська (Великобританія, Дворак з британською пунктуацією)"
+
+#: ../rules/base.xml.in.h:213
+msgid "English (UK, Dvorak)"
+msgstr "Англійська (Великобританія, Дворак)"
+
+#: ../rules/base.xml.in.h:214
+msgid "English (UK, Mac international)"
+msgstr "Англійська (Великобританія, інтернаціональна Mac)"
+
+#: ../rules/base.xml.in.h:215
+msgid "English (UK, Mac)"
+msgstr "Англійська (Великобританія, Mac)"
+
+#: ../rules/base.xml.in.h:216
+msgid "English (UK, extended, WinKeys)"
+msgstr "Англійська (Великобританія, розширена, з клавішами Win)"
+
+#: ../rules/base.xml.in.h:217
+msgid "English (UK, international with dead keys)"
+msgstr "Англійська (Великобританія, інтернаціональна зі сліпими клавішами)"
+
+#: ../rules/base.xml.in.h:218
+msgid "English (US)"
+msgstr "Англійська (США)"
+
+#: ../rules/base.xml.in.h:219
+msgid "English (US, alternative international)"
+msgstr "Англійська (США, альтернативна інтернаціональна)"
+
+#: ../rules/base.xml.in.h:220
+msgid "English (US, international with dead keys)"
+msgstr "Англійська (США, інтернаціональна зі сліпими клавішами)"
+
+#: ../rules/base.xml.in.h:221
+msgid "English (US, with euro on 5)"
+msgstr "Англійська (США, з символом євро на клавіші 5)"
+
+#: ../rules/base.xml.in.h:222
+msgid "English (classic Dvorak)"
+msgstr "Англійська (класична Дворака)"
+
+#: ../rules/base.xml.in.h:223
+msgid "English (international AltGr dead keys)"
+msgstr "Англійська (інтернаціональна зі сліпими клавішами AltGr)"
+
+#: ../rules/base.xml.in.h:224
+msgid "English (layout toggle on multiply/divide key)"
+msgstr "Англійська (перемикання розкладки клавішею «помножити/ділити»)"
+
+#: ../rules/base.xml.in.h:225
+msgid "English (left handed Dvorak)"
+msgstr "Англійська (Дворака для шульги)"
+
+#: ../rules/base.xml.in.h:226
+msgid "English (programmer Dvorak)"
+msgstr "Англійська (програмістський Дворак)"
+
+#: ../rules/base.xml.in.h:227
+msgid "English (right handed Dvorak)"
+msgstr "Англійська (Дворак для правші)"
+
+#: ../rules/base.xml.in.h:228
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
+
+#: ../rules/base.xml.in.h:229
+msgid "Enter on keypad"
+msgstr "Enter на цифровій клавіатурі"
+
+#: ../rules/base.xml.in.h:230
+msgid "Esperanto"
+msgstr "Есперанто"
+
+#: ../rules/base.xml.in.h:231
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr "Есперанто (посунута крапка з комою та лапки, застаріла)"
+
+#: ../rules/base.xml.in.h:232
+msgid "Estonian"
+msgstr "Естонська"
+
+#: ../rules/base.xml.in.h:233
+msgid "Estonian (Dvorak)"
+msgstr "Естонська (Дворака)"
+
+#: ../rules/base.xml.in.h:234
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "Естонська (клавіатура США з естонськими літерами)"
+
+#: ../rules/base.xml.in.h:235
+msgid "Estonian (eliminate dead keys)"
+msgstr "Естонська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:236
+msgid "Euro on 2"
+msgstr "Євро на 2"
+
+#: ../rules/base.xml.in.h:237
+msgid "Euro on 4"
+msgstr "Євро на 4"
+
+#: ../rules/base.xml.in.h:238
+msgid "Euro on 5"
+msgstr "Євро на 5"
+
+#: ../rules/base.xml.in.h:239
+msgid "Euro on E"
+msgstr "Євро на E"
+
+#: ../rules/base.xml.in.h:240
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
+
+#: ../rules/base.xml.in.h:241
+msgid "Ewe"
+msgstr "Ewe"
+
+#: ../rules/base.xml.in.h:242
+msgid "FL90"
+msgstr "FL90"
+
+#: ../rules/base.xml.in.h:243
+msgid "Faroese"
+msgstr "Фарерська"
+
+#: ../rules/base.xml.in.h:244
+msgid "Faroese (eliminate dead keys)"
+msgstr "Фарерська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:245
+msgid "Filipino"
+msgstr "Філіппінська"
+
+#: ../rules/base.xml.in.h:246
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr "Філіппінська (Кейпвелл-Дворак, байбаїн)"
+
+#: ../rules/base.xml.in.h:247
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr "Філіппінська (Кейпвелл-Дворак, латиниця)"
+
+#: ../rules/base.xml.in.h:248
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr "Філіппінська (Кейпвелл-QWERF 2006, байбаїн)"
+
+#: ../rules/base.xml.in.h:249
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr "Філіппінська (Кейпвелл-QWERF 2006, латиниця)"
+
+#: ../rules/base.xml.in.h:250
+msgid "Filipino (Colemak Baybayin)"
+msgstr "Філіппінська (Коулмак, байбаїн)"
+
+#: ../rules/base.xml.in.h:251
+msgid "Filipino (Colemak Latin)"
+msgstr "Філіппінська (Коулмак, латиниця)"
+
+#: ../rules/base.xml.in.h:252
+msgid "Filipino (Dvorak Latin)"
+msgstr "Філіппінська (Дворак, латиниця)"
+
+#: ../rules/base.xml.in.h:253
+msgid "Filipino (QWERTY Baybayin)"
+msgstr "Філіппінська (QWERTY, байбаїн)"
+
+#: ../rules/base.xml.in.h:254
+msgid "Finnish"
+msgstr "Фінська"
+
+#: ../rules/base.xml.in.h:255
+msgid "Finnish (Mac)"
+msgstr "Фінська (Mac)"
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "Фінська (класична)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "Фінська (класична, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr "Фінська (північно-саамська)"
+
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
+#: ../rules/base.xml.in.h:261
+msgid "Four-level key with abstract separators"
+msgstr "Клавіша четвертого рівня з абстрактним розділювачем "
+
+#: ../rules/base.xml.in.h:262
+msgid "Four-level key with comma"
+msgstr "Клавіша четвертого рівня з комою"
+
+#: ../rules/base.xml.in.h:263
+msgid "Four-level key with dot"
+msgstr "Клавіша четвертого рівня з крапкою"
+
+#: ../rules/base.xml.in.h:264
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr "Клавіша четвертого рівня з крапкою, обмежена latin-9"
+
+#: ../rules/base.xml.in.h:265
+msgid "Four-level key with momayyez"
+msgstr "Клавіша четвертого рівня з momayyez"
+
+#: ../rules/base.xml.in.h:266
+msgid "French"
+msgstr "Французька"
+
+#: ../rules/base.xml.in.h:267
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr "Французька (Bepo, ергономічна, варіант Дворак)"
+
+#: ../rules/base.xml.in.h:268
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr "Французька (Bepo, ергономічна, варіант Дворак, лише latin-9)"
+
+#: ../rules/base.xml.in.h:269
+msgid "French (Breton)"
+msgstr "Французька (бретонська)"
+
+#: ../rules/base.xml.in.h:270
+msgid "French (Canada, Dvorak)"
+msgstr "Французька (Канада, Дворак)"
+
+#: ../rules/base.xml.in.h:271
+msgid "French (Canada, legacy)"
+msgstr "Французька (Канада, застаріла)"
+
+#: ../rules/base.xml.in.h:272
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Французька (Демократична республіка Конго)"
+
+#: ../rules/base.xml.in.h:273
+msgid "French (Dvorak)"
+msgstr "Французька (Дворак)"
+
+#: ../rules/base.xml.in.h:274
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr "Французька (грузинська AZERTY Tskapo)"
+
+#: ../rules/base.xml.in.h:275
+msgid "French (Guinea)"
+msgstr "Французька (Гвінея)"
+
+#: ../rules/base.xml.in.h:276
+msgid "French (Mac)"
+msgstr "Французька (Mac)"
+
+#: ../rules/base.xml.in.h:277
+msgid "French (Mali, alternative)"
+msgstr "Французька (Малі, альтернативна)"
+
+#: ../rules/base.xml.in.h:278
+msgid "French (Morocco)"
+msgstr "Французька (Марокко)"
+
+#: ../rules/base.xml.in.h:279
+msgid "French (Occitan)"
+msgstr "Французька (окситанська)"
+
+#: ../rules/base.xml.in.h:280
+msgid "French (Sun dead keys)"
+msgstr "Французька (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:281
+msgid "French (Switzerland)"
+msgstr "Французька (Швейцарія)"
+
+#: ../rules/base.xml.in.h:282
+msgid "French (Switzerland, Mac)"
+msgstr "Французька (Швейцарія, Mac)"
+
+#: ../rules/base.xml.in.h:283
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "Французька (Швейцарія, сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:284
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "Французька (Швейцарія, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:285
+msgid "French (alternative)"
+msgstr "Французька (альтернативна)"
+
+#: ../rules/base.xml.in.h:286
+msgid "French (alternative, Sun dead keys)"
+msgstr "Французька (альтернативна, сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:287
+msgid "French (alternative, eliminate dead keys)"
+msgstr "Французька (альтернативна, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:288
+msgid "French (alternative, latin-9 only)"
+msgstr "Французька (альтернативна, лише latin-9)"
+
+#: ../rules/base.xml.in.h:289
+msgid "French (eliminate dead keys)"
+msgstr "Французька (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:290
+msgid "French (legacy alternative)"
+msgstr "Французька (застаріла альтернативна)"
+
+#: ../rules/base.xml.in.h:291
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "Французька (застаріла, альтернативна, сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:292
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "Французька (застаріла, альтернативна, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:293
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "Ноутбук Fujitsu-Siemens Computers AMILO"
+
+#: ../rules/base.xml.in.h:294
+msgid "Fula"
+msgstr "Фула"
+
+#: ../rules/base.xml.in.h:295
+msgid "GBr"
+msgstr "Брит"
+
+#: ../rules/base.xml.in.h:296
+msgid "Ga"
+msgstr "Га"
+
+#: ../rules/base.xml.in.h:297
+msgid "Generic 101-key PC"
+msgstr "Звичайна 101-клавішна для ПК"
+
+#: ../rules/base.xml.in.h:298
+msgid "Generic 102-key (Intl) PC"
+msgstr "Звичайна 102-клавішна для ПК"
+
+#: ../rules/base.xml.in.h:299
+msgid "Generic 104-key PC"
+msgstr "Звичайна 104-клавішна для ПК"
+
+#: ../rules/base.xml.in.h:300
+msgid "Generic 105-key (Intl) PC"
+msgstr "Звичайна 105-клавішна для ПК"
+
+#: ../rules/base.xml.in.h:301
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-21e"
+
+#: ../rules/base.xml.in.h:302
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+
+#: ../rules/base.xml.in.h:303
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
+
+#: ../rules/base.xml.in.h:304
+msgid "Genius KB-19e NB"
+msgstr "Genius KB-19e NB"
+
+#: ../rules/base.xml.in.h:305
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
+
+#: ../rules/base.xml.in.h:306
+msgid "Georgian"
+msgstr "Грузинська"
+
+#: ../rules/base.xml.in.h:307
+msgid "Georgian (MESS)"
+msgstr "Грузинська (MESS)"
+
+#: ../rules/base.xml.in.h:308
+msgid "Georgian (Ossetian)"
+msgstr "Грузинська (осетинська)"
+
+#: ../rules/base.xml.in.h:309
+msgid "Georgian (ergonomic)"
+msgstr "Грузинська (ергономічна)"
+
+#: ../rules/base.xml.in.h:310
+msgid "German"
+msgstr "Німецька"
+
+#: ../rules/base.xml.in.h:311
+msgid "German (Austria)"
+msgstr "Німецька (Австрія)"
+
+#: ../rules/base.xml.in.h:312
+msgid "German (Austria, Mac)"
+msgstr "Німецька (Австрія, Mac)"
+
+#: ../rules/base.xml.in.h:313
+msgid "German (Austria, Sun dead keys)"
+msgstr "Німецька (Австрія, сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:314
+msgid "German (Austria, eliminate dead keys)"
+msgstr "Німецька (Австрія, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:315
+msgid "German (Dvorak)"
+msgstr "Німецька (Дворак)"
+
+#: ../rules/base.xml.in.h:316
+msgid "German (Mac)"
+msgstr "Німецька (Mac)"
+
+#: ../rules/base.xml.in.h:317
+msgid "German (Mac, eliminate dead keys)"
+msgstr "Німецька (Mac, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:318
+msgid "German (Neo 2)"
+msgstr "Німецька (Neo 2)"
+
+#: ../rules/base.xml.in.h:319
+msgid "German (Romanian keyboard with German letters)"
+msgstr "Німецька (румунська клавіатура з німецькими літерами)"
+
+#: ../rules/base.xml.in.h:320
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "Німецька (румунська клавіатура з німецькими літерами, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:321
+msgid "German (Sun dead keys)"
+msgstr "Німецька (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:322
+msgid "German (Switzerland, Mac)"
+msgstr "Німецька (Швейцарія, Mac)"
+
+#: ../rules/base.xml.in.h:323
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "Німецька (Швейцарія, сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:324
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "Німецька (Швейцарія, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:325
+msgid "German (dead acute)"
+msgstr "Німецька (сліпий акут)"
+
+#: ../rules/base.xml.in.h:326
+msgid "German (dead grave acute)"
+msgstr "Німецька (сліпий наголос-акут)"
+
+#: ../rules/base.xml.in.h:327
+msgid "German (eliminate dead keys)"
+msgstr "Німецька (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:328
+msgid "German (lower Sorbian qwertz)"
+msgstr "Німецька (нижньолужицька, qwertz)"
+
+#: ../rules/base.xml.in.h:329
+msgid "German (lower Sorbian)"
+msgstr "Німецька (нижньолужицька)"
+
+#: ../rules/base.xml.in.h:330
+msgid "German (qwerty)"
+msgstr "Німецька (qwerty)"
+
+#: ../rules/base.xml.in.h:331
+msgid "Greek"
+msgstr "Грецька"
+
+#: ../rules/base.xml.in.h:332
+msgid "Greek (eliminate dead keys)"
+msgstr "Грецька (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:333
+msgid "Greek (extended)"
+msgstr "Грецька (розширена)"
+
+#: ../rules/base.xml.in.h:334
+msgid "Greek (polytonic)"
+msgstr "Грецька (поліфонічна)"
+
+#: ../rules/base.xml.in.h:335
+msgid "Greek (simple)"
+msgstr "Грецька (проста)"
+
+#: ../rules/base.xml.in.h:336
+msgid "Gujarati"
+msgstr "Гуджараті"
+
+#: ../rules/base.xml.in.h:337
+msgid "Gyration"
+msgstr "Gyration"
+
+#: ../rules/base.xml.in.h:338
+msgid "HTC Dream"
+msgstr "HTC Dream"
+
+#: ../rules/base.xml.in.h:339
+msgid "Happy Hacking Keyboard"
+msgstr "Happy Hacking Keyboard"
+
+#: ../rules/base.xml.in.h:340
+msgid "Happy Hacking Keyboard for Mac"
+msgstr "Happy Hacking Keyboard для Mac"
+
+#: ../rules/base.xml.in.h:341
+msgid "Hausa"
+msgstr "Hausa"
+
+#: ../rules/base.xml.in.h:342
+msgid "Hebrew"
+msgstr "Іврит"
+
+#: ../rules/base.xml.in.h:343
+msgid "Hebrew (Phonetic)"
+msgstr "Іврит (фонетична)"
+
+#: ../rules/base.xml.in.h:344
+msgid "Hebrew (Tiro)"
+msgstr "Іврит (Tiro)"
+
+#: ../rules/base.xml.in.h:345
+msgid "Hebrew (lyx)"
+msgstr "Іврит (lyx)"
+
+#: ../rules/base.xml.in.h:346
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr "Hewlett-Packard Internet Keyboard"
+
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "Hewlett-Packard Mini 110 Notebook"
+
+#: ../rules/base.xml.in.h:348
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
+
+#: ../rules/base.xml.in.h:349
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr "Hewlett-Packard Omnibook 5xx"
+
+#: ../rules/base.xml.in.h:350
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
+
+#: ../rules/base.xml.in.h:351
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
+
+#: ../rules/base.xml.in.h:352
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
+
+#: ../rules/base.xml.in.h:353
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
+
+#: ../rules/base.xml.in.h:354
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr "Hewlett-Packard Pavilion ZT11xx"
+
+#: ../rules/base.xml.in.h:355
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
+
+#: ../rules/base.xml.in.h:356
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "Hewlett-Packard SK-250x Multimedia Keyboard"
+
+#: ../rules/base.xml.in.h:357
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
+
+#: ../rules/base.xml.in.h:358
+msgid "Hexadecimal"
+msgstr "Шістнадцяткова"
+
+#: ../rules/base.xml.in.h:359
+msgid "Hindi (Bolnagri)"
+msgstr "Хінді (болнагрі)"
+
+#: ../rules/base.xml.in.h:360
+msgid "Hindi (Wx)"
+msgstr "Хінді (Wx)"
+
+#: ../rules/base.xml.in.h:361
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
+
+#: ../rules/base.xml.in.h:362
+msgid "Htc Dream phone"
+msgstr "Телефон HTC Dream"
+
+#: ../rules/base.xml.in.h:363
+msgid "Hungarian"
+msgstr "Угорська"
+
+#: ../rules/base.xml.in.h:364
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "Угорська (101/qwerty/кома/сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:365
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "Угорська (101/qwerty/кома/вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:366
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "Угорська (101/qwerty/крапка/сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:367
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "Угорська (101/qwerty/крапка/вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:368
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "Угорська (101/qwertz/кома/сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:369
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:370
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "Угорська (101/qwertz/крапка/сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:371
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:372
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "Угорська (102/qwerty/кома/сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:373
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "Угорська (102/qwerty/кома/вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:374
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "Угорська (102/qwerty/крапка/сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:375
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "Угорська (102/qwerty/крапка/вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:376
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "Угорська (102/qwertz/кома/сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:377
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:378
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "Угорська (102/qwertz/крапка/сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:379
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:380
+msgid "Hungarian (eliminate dead keys)"
+msgstr "Угорська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:381
+msgid "Hungarian (qwerty)"
+msgstr "Угорська (qwerty)"
+
+#: ../rules/base.xml.in.h:382
+msgid "Hungarian (standard)"
+msgstr "Угорська (стандартна)"
+
+#: ../rules/base.xml.in.h:383
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper відповідає клавішам Win"
+
+#: ../rules/base.xml.in.h:384
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
+
+#: ../rules/base.xml.in.h:385
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
+
+#: ../rules/base.xml.in.h:386
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
+
+#: ../rules/base.xml.in.h:387
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+
+#: ../rules/base.xml.in.h:388
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
+
+#: ../rules/base.xml.in.h:389
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+
+#: ../rules/base.xml.in.h:390
+msgid "Icelandic"
+msgstr "Ісландська"
+
+#: ../rules/base.xml.in.h:391
+msgid "Icelandic (Dvorak)"
+msgstr "Ісландська (Дворак)"
+
+#: ../rules/base.xml.in.h:392
+msgid "Icelandic (Mac)"
+msgstr "Ісландська (Mac)"
+
+#: ../rules/base.xml.in.h:393
+msgid "Icelandic (Sun dead keys)"
+msgstr "Ісландська (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:394
+msgid "Icelandic (eliminate dead keys)"
+msgstr "Ісландська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:395
+msgid "Igbo"
+msgstr "Igbo"
+
+#: ../rules/base.xml.in.h:396
+msgid "Indian"
+msgstr "Індійська"
+
+#: ../rules/base.xml.in.h:397
+msgid "Inuktitut"
+msgstr "Інуктитут"
+
+#: ../rules/base.xml.in.h:398
+msgid "Iraqi"
+msgstr "Іракська"
+
+#: ../rules/base.xml.in.h:399
+msgid "Irish"
+msgstr "Ірландська"
+
+#: ../rules/base.xml.in.h:400
+msgid "Irish (CloGaelach)"
+msgstr "Ірландська (гаельський шрифт)"
+
+#: ../rules/base.xml.in.h:401
+msgid "Irish (Ogham IS434)"
+msgstr "Ірландська (огам IS434)"
+
+#: ../rules/base.xml.in.h:402
+msgid "Irish (Ogham)"
+msgstr "Ірландська (огам)"
+
+#: ../rules/base.xml.in.h:403
+msgid "Irish (UnicodeExpert)"
+msgstr "Ірландська (UnicodeExpert)"
+
+#: ../rules/base.xml.in.h:404
+msgid "Italian"
+msgstr "Італійська"
+
+#: ../rules/base.xml.in.h:405
+msgid "Italian (Georgian)"
+msgstr "Італійська (грузинська)"
+
+#: ../rules/base.xml.in.h:406
+msgid "Italian (Mac)"
+msgstr "Італійська (Mac)"
+
+#: ../rules/base.xml.in.h:407
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "Італійська (клавіатура США з італійськими літерами)"
+
+#: ../rules/base.xml.in.h:408
+msgid "Italian (eliminate dead keys)"
+msgstr "Італійська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:409
+msgid "Japanese"
+msgstr "Японська"
+
+#: ../rules/base.xml.in.h:410
+msgid "Japanese (Kana 86)"
+msgstr "Японська (кана 86)"
+
+#: ../rules/base.xml.in.h:411
+msgid "Japanese (Kana)"
+msgstr "Японська (кана)"
+
+#: ../rules/base.xml.in.h:412
+msgid "Japanese (Mac)"
+msgstr "Японська (Mac)"
+
+#: ../rules/base.xml.in.h:413
+msgid "Japanese (OADG 109A)"
+msgstr "Японська (OADG 109A)"
+
+#: ../rules/base.xml.in.h:414
+msgid "Japanese (PC-98xx Series)"
+msgstr "Японська (родина PC-98xx)"
+
+#: ../rules/base.xml.in.h:415
+msgid "Japanese keyboard options"
+msgstr "Параметри японської клавіатури"
+
+#: ../rules/base.xml.in.h:416
+msgid "Kana Lock key is locking"
+msgstr "Клавіша Kana Lock фіксується"
+
+#: ../rules/base.xml.in.h:417
+msgid "Kannada"
+msgstr "Канадська"
+
+#: ../rules/base.xml.in.h:418
+msgid "Kazakh"
+msgstr "Казахська"
+
+#: ../rules/base.xml.in.h:419
+msgid "Kazakh (with Russian)"
+msgstr "Казахська (з російськими)"
+
+#: ../rules/base.xml.in.h:420
+msgid "Key sequence to kill the X server"
+msgstr "Комбінація клавіш для переривання роботи X-сервера"
+
+#: ../rules/base.xml.in.h:421
+msgid "Key to choose 3rd level"
+msgstr "Клавіша для вибору 3-го ряду"
+
+#: ../rules/base.xml.in.h:422
+msgid "Key to choose 5th level"
+msgstr "Клавіша для вибору 5-го ряду"
+
+#: ../rules/base.xml.in.h:423
+msgid "Key(s) to change layout"
+msgstr "Клавіші для зміни розкладки"
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
+
+#: ../rules/base.xml.in.h:425
+msgid "Khmer (Cambodian)"
+msgstr "Кхмерська (камбоджійська)"
+
+#: ../rules/base.xml.in.h:426
+msgid "Kikuyu"
+msgstr "Кікуйю"
+
+#: ../rules/base.xml.in.h:427
+msgid "Kinesis"
+msgstr "Kinesis"
+
+#: ../rules/base.xml.in.h:428
+msgid "Korean"
+msgstr "Корейська"
+
+#: ../rules/base.xml.in.h:429
+msgid "Korean (101/104 key compatible)"
+msgstr "Корейська (сумісна з 101/104 клавішною)"
+
+#: ../rules/base.xml.in.h:430
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Курдська (Іран, арабсько-латинська)"
+
+#: ../rules/base.xml.in.h:431
+msgid "Kurdish (Iran, F)"
+msgstr "Курдська (Іран, F)"
+
+#: ../rules/base.xml.in.h:432
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Курдська (Іран, латиниця Q)"
+
+#: ../rules/base.xml.in.h:433
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "Курдська (Іран, латиниця alt-Q)"
+
+#: ../rules/base.xml.in.h:434
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Курдська (Ірак, арабсько-латинська)"
+
+#: ../rules/base.xml.in.h:435
+msgid "Kurdish (Iraq, F)"
+msgstr "Курдська (Ірак, F)"
+
+#: ../rules/base.xml.in.h:436
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Курдська (Ірак, латиниця Alt-Q)"
+
+#: ../rules/base.xml.in.h:437
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Курдська (Ірак, латиниця Q)"
+
+#: ../rules/base.xml.in.h:438
+msgid "Kurdish (Syria, F)"
+msgstr "Курдська (Сирія, F)"
+
+#: ../rules/base.xml.in.h:439
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Курдська (Сирія, латиниця Alt-Q)"
+
+#: ../rules/base.xml.in.h:440
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Курдська (Сирія, латиниця Q)"
+
+#: ../rules/base.xml.in.h:441
+msgid "Kurdish (Turkey, F)"
+msgstr "Курдська (Туреччина, F)"
+
+#: ../rules/base.xml.in.h:442
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Курдська (Туреччина, латиниця Alt-Q)"
+
+#: ../rules/base.xml.in.h:443
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Курдська (Туреччина, латиниця Q)"
+
+#: ../rules/base.xml.in.h:444
+msgid "Kutenai"
+msgstr "Кутенай"
+
+#: ../rules/base.xml.in.h:445
+msgid "Kyrgyz"
+msgstr "Киргизька"
+
+#: ../rules/base.xml.in.h:446
+msgid "Kyrgyz (phonetic)"
+msgstr "Киргизька (фонетична)"
+
+#: ../rules/base.xml.in.h:447
+msgid "Lao"
+msgstr "Лаоська"
+
+#: ../rules/base.xml.in.h:448
+msgid "Lao (STEA proposed standard layout)"
+msgstr "Лаоська (стандартна розкладка, запропонована STEA)"
+
+#: ../rules/base.xml.in.h:449
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr "Клавіатура для ноутбуків Compaq (напр., Armada)"
+
+#: ../rules/base.xml.in.h:450
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr "Інтернет-клавіатура для ноутбуків Compaq (напр., Presario)"
+
+#: ../rules/base.xml.in.h:451
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "Ноутбуки eMachines m68xx"
+
+#: ../rules/base.xml.in.h:452
+msgid "Latvian"
+msgstr "Латвійська"
+
+#: ../rules/base.xml.in.h:453
+msgid "Latvian (Apostrophe ' variant)"
+msgstr "Латвійська (варіант з апострофом ('))"
+
+#: ../rules/base.xml.in.h:454
+msgid "Latvian (F variant)"
+msgstr "Латвійська (варіант з літерою F)"
+
+#: ../rules/base.xml.in.h:455
+msgid "Latvian (Tilde ~ variant)"
+msgstr "Латвійська (варіант з тильдою (~))"
+
+#: ../rules/base.xml.in.h:456
+msgid "Left Alt"
+msgstr "Ліва клавіша Alt"
+
+#: ../rules/base.xml.in.h:457
+msgid "Left Alt (while pressed)"
+msgstr "Ліва клавіша Alt (поки натиснена)"
+
+#: ../rules/base.xml.in.h:458
+msgid "Left Alt is swapped with Left Win"
+msgstr "Ліва Alt міняється з лівою клавішею Win"
+
+#: ../rules/base.xml.in.h:459
+msgid "Left Ctrl"
+msgstr "Ліва клавіша Ctrl"
+
+#: ../rules/base.xml.in.h:460
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr "Ліва Ctrl (на першу розкладку), Правий Ctrl (на останню розкладку)"
+
+#: ../rules/base.xml.in.h:461
+msgid "Left Ctrl+Left Shift"
+msgstr "Лівий Ctrl+Лівий Shift"
+
+#: ../rules/base.xml.in.h:462
+msgid "Left Shift"
+msgstr "Ліва клавіша Shift"
+
+#: ../rules/base.xml.in.h:463
+msgid "Left Win"
+msgstr "Ліва клавіша Win"
+
+#: ../rules/base.xml.in.h:464
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr "Ліва Win (на першу розкладку), Права Win/Menu (на останню розкладку)"
+
+#: ../rules/base.xml.in.h:465
+msgid "Left Win (while pressed)"
+msgstr "Ліва клавіша Win (поки натиснута)"
+
+#: ../rules/base.xml.in.h:466
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Ліва клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:467
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Ліва клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:468
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr "Ліва Ctrl+ліва Win (на першу розкладку), правий Ctrl+Menu (на другу розкладку)"
+
+#: ../rules/base.xml.in.h:469
+msgid "Legacy"
+msgstr "Застаріла"
+
+#: ../rules/base.xml.in.h:470
+msgid "Legacy Wang 724"
+msgstr "Стара Wang 724"
+
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
+#: ../rules/base.xml.in.h:472
+msgid "Legacy key with comma"
+msgstr "Застаріла клавіша з комою"
+
+#: ../rules/base.xml.in.h:473
+msgid "Legacy key with dot"
+msgstr "Застаріла клавіша з крапкою"
+
+#: ../rules/base.xml.in.h:474
+msgid "Lithuanian"
+msgstr "Литовська"
+
+#: ../rules/base.xml.in.h:475
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "Литовська (IBM LST 1205-92)"
+
+#: ../rules/base.xml.in.h:476
+msgid "Lithuanian (LEKP)"
+msgstr "Литовська (LEKP)"
+
+#: ../rules/base.xml.in.h:477
+msgid "Lithuanian (LEKPa)"
+msgstr "Литовська (LEKPa)"
+
+#: ../rules/base.xml.in.h:478
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "Литовська (клавіатура США з литовськими літерами)"
+
+#: ../rules/base.xml.in.h:479
+msgid "Lithuanian (standard)"
+msgstr "Литовська (стандартна)"
+
+#: ../rules/base.xml.in.h:480
+msgid "Logitech Access Keyboard"
+msgstr "Logitech Access Keyboard"
+
+#: ../rules/base.xml.in.h:481
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
+
+#: ../rules/base.xml.in.h:482
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "Logitech Cordless Desktop (альтернативний варіант)"
+
+#: ../rules/base.xml.in.h:483
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
+
+#: ../rules/base.xml.in.h:484
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
+
+#: ../rules/base.xml.in.h:485
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
+
+#: ../rules/base.xml.in.h:486
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
+
+#: ../rules/base.xml.in.h:487
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "Logitech Cordless Desktop Pro (альтернативний варіант 2)"
+
+#: ../rules/base.xml.in.h:488
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
+
+#: ../rules/base.xml.in.h:489
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr "Logitech Cordless Freedom/Desktop Navigator"
+
+#: ../rules/base.xml.in.h:490
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Logitech G15 з додатковими клавішами через G15daemon"
+
+#: ../rules/base.xml.in.h:491
+msgid "Logitech Generic Keyboard"
+msgstr "Logitech Generic Keyboard"
+
+#: ../rules/base.xml.in.h:492
+msgid "Logitech Internet 350 Keyboard"
+msgstr "Logitech Internet 350 Keyboard"
+
+#: ../rules/base.xml.in.h:493
+msgid "Logitech Internet Keyboard"
+msgstr "Logitech Internet Keyboard"
+
+#: ../rules/base.xml.in.h:494
+msgid "Logitech Internet Navigator Keyboard"
+msgstr "Logitech Internet Navigator Keyboard"
+
+#: ../rules/base.xml.in.h:495
+msgid "Logitech Media Elite Keyboard"
+msgstr "Logitech Media Elite Keyboard"
+
+#: ../rules/base.xml.in.h:496
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard"
+
+#: ../rules/base.xml.in.h:497
+msgid "Logitech Ultra-X Keyboard"
+msgstr "Logitech Ultra-X Keyboard"
+
+#: ../rules/base.xml.in.h:498
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "Logitech diNovo Edge Keyboard"
+
+#: ../rules/base.xml.in.h:499
+msgid "Logitech diNovo Keyboard"
+msgstr "Logitech diNovo Keyboard"
+
+#: ../rules/base.xml.in.h:500
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
+
+#: ../rules/base.xml.in.h:501
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr "Logitech iTouch Cordless Keyboard (модель Y-RB6)"
+
+#: ../rules/base.xml.in.h:502
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE"
+
+#: ../rules/base.xml.in.h:503
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+
+#: ../rules/base.xml.in.h:504
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
+
+#: ../rules/base.xml.in.h:505
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
+
+#: ../rules/base.xml.in.h:506
+msgid "Macedonian"
+msgstr "Македонська"
+
+#: ../rules/base.xml.in.h:507
+msgid "Macedonian (eliminate dead keys)"
+msgstr "Македонська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:508
+msgid "Macintosh"
+msgstr "Macintosh"
+
+#: ../rules/base.xml.in.h:509
+msgid "Macintosh Old"
+msgstr "Старий Macintosh"
+
+#: ../rules/base.xml.in.h:510
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Caps Lock — додаткова клавіша Backspace"
+
+#: ../rules/base.xml.in.h:511
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "Caps Lock — додаткова клавіша Ctrl, але зі збереженням символу клавіші Caps_Lock"
+
+#: ../rules/base.xml.in.h:512
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Caps Lock — додаткова клавіша Ctrl"
+
+#: ../rules/base.xml.in.h:513
+msgid "Make Caps Lock an additional ESC"
+msgstr "Caps Lock — додаткова клавіша ESC"
+
+#: ../rules/base.xml.in.h:514
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Caps Lock — додаткова клавіша Hyper"
+
+#: ../rules/base.xml.in.h:515
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Caps Lock — додаткова клавіша Num Lock"
+
+#: ../rules/base.xml.in.h:516
+msgid "Make Caps Lock an additional Super"
+msgstr "Caps Lock — додаткова клавіша Super"
+
+#: ../rules/base.xml.in.h:517
+msgid "Malayalam"
+msgstr "Малаяламська"
+
+#: ../rules/base.xml.in.h:518
+msgid "Malayalam (Lalitha)"
+msgstr "Малаяламська (лаліта)"
+
+#: ../rules/base.xml.in.h:519
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr "Малаяламська (покращений запис індійських мов з символом рупії)"
+
+#: ../rules/base.xml.in.h:520
+msgid "Maltese"
+msgstr "Мальтійська"
+
+#: ../rules/base.xml.in.h:521
+msgid "Maltese (with US layout)"
+msgstr "Мальтійська (клавіатура з розкладкою США)"
+
+#: ../rules/base.xml.in.h:522
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
+
+#: ../rules/base.xml.in.h:523
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr "Memorex MX2500 EZ-Access Keyboard"
+
+#: ../rules/base.xml.in.h:524
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
+
+#: ../rules/base.xml.in.h:525
+msgid "Menu"
+msgstr "Menu"
+
+#: ../rules/base.xml.in.h:526
+msgid "Meta is mapped to Left Win"
+msgstr "Meta відповідає лівій клавіші Win"
+
+#: ../rules/base.xml.in.h:527
+msgid "Meta is mapped to Win keys"
+msgstr "Meta відповідає клавішам Win"
+
+#: ../rules/base.xml.in.h:528
+msgid "Meta on Left Ctrl"
+msgstr "Meta на лівій клавіші Ctrl"
+
+#: ../rules/base.xml.in.h:529
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "Microsoft Comfort Curve Keyboard 2000"
+
+#: ../rules/base.xml.in.h:530
+msgid "Microsoft Internet Keyboard"
+msgstr "Microsoft Internet Keyboard"
+
+#: ../rules/base.xml.in.h:531
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr "Microsoft Internet Keyboard Pro, шведська"
+
+#: ../rules/base.xml.in.h:532
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
+
+#: ../rules/base.xml.in.h:533
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "Microsoft Natural Keyboard Elite"
+
+#: ../rules/base.xml.in.h:534
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+
+#: ../rules/base.xml.in.h:535
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr "Microsoft Natural Keyboard Pro OEM"
+
+#: ../rules/base.xml.in.h:536
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+
+#: ../rules/base.xml.in.h:537
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+
+#: ../rules/base.xml.in.h:538
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+
+#: ../rules/base.xml.in.h:539
+msgid "Microsoft Office Keyboard"
+msgstr "Microsoft Office Keyboard"
+
+#: ../rules/base.xml.in.h:540
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "Microsoft Wireless Multimedia Keyboard 1.0A"
+
+#: ../rules/base.xml.in.h:541
+msgid "Miscellaneous compatibility options"
+msgstr "Різні параметри сумісності"
+
+#: ../rules/base.xml.in.h:542
+msgid "Mongolian"
+msgstr "Монгольська"
+
+#: ../rules/base.xml.in.h:543
+msgid "Montenegrin"
+msgstr "Чорногорська"
+
+#: ../rules/base.xml.in.h:544
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr "Чорногорська (кирилиця з кутовими лапками)"
+
+#: ../rules/base.xml.in.h:545
+msgid "Montenegrin (Cyrillic)"
+msgstr "Чорногорська (кирилиця)"
+
+#: ../rules/base.xml.in.h:546
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr "Чорногорська (кирилиця, З та Ж поміняні місцями)"
+
+#: ../rules/base.xml.in.h:547
+msgid "Montenegrin (Latin qwerty)"
+msgstr "Чорногорська (латиниця, qwerty)"
+
+#: ../rules/base.xml.in.h:548
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "Чорногорська (латиниця Unicode, qwerty)"
+
+#: ../rules/base.xml.in.h:549
+msgid "Montenegrin (Latin unicode)"
+msgstr "Чорногорська (латиниця Unicode)"
+
+#: ../rules/base.xml.in.h:550
+msgid "Montenegrin (Latin with guillemets)"
+msgstr "Чорногорська (латиниця з кутовими лапками)"
+
+#: ../rules/base.xml.in.h:551
+msgid "Māori"
+msgstr "Маорійська"
+
+#: ../rules/base.xml.in.h:552
+msgid "NICOLA-F style Backspace"
+msgstr "NICOLA-F style Backspace"
+
+#: ../rules/base.xml.in.h:553
+msgid "Nepali"
+msgstr "Непальська"
+
+#: ../rules/base.xml.in.h:554
+msgid "Non-breakable space character at fourth level"
+msgstr "Символ нерозривного пробілу на четвертому рівні"
+
+#: ../rules/base.xml.in.h:555
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні"
+
+#: ../rules/base.xml.in.h:556
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні (через Ctrl+Shift)"
+
+#: ../rules/base.xml.in.h:557
+msgid "Non-breakable space character at second level"
+msgstr "Символ нерозривного пробілу на другому рівні"
+
+#: ../rules/base.xml.in.h:558
+msgid "Non-breakable space character at third level"
+msgstr "Символ нерозривного пробілу на третьому рівні"
+
+#: ../rules/base.xml.in.h:559
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr "Символ нерозривного пробілу на третьому рівні, нічого на четвертому"
+
+#: ../rules/base.xml.in.h:560
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr "Символ нерозривного пробілу на третьому рівні, символ тонкого нерозривного пробілу на четвертому рівні"
+
+#: ../rules/base.xml.in.h:561
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
+
+#: ../rules/base.xml.in.h:562
+msgid "Norwegian"
+msgstr "Норвезька"
+
+#: ../rules/base.xml.in.h:563
+msgid "Norwegian (Dvorak)"
+msgstr "Норвезька (Дворак)"
+
+#: ../rules/base.xml.in.h:564
+msgid "Norwegian (Mac)"
+msgstr "Норвезька (Mac)"
+
+#: ../rules/base.xml.in.h:565
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "Норвезька (Mac, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:566
+msgid "Norwegian (Northern Saami"
+msgstr "Норвезька (північно-саамська)"
+
+#: ../rules/base.xml.in.h:567
+msgid "Norwegian (eliminate dead keys)"
+msgstr "Норвезька (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:568
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr "Норвезька (північно-саамська, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:569
+msgid "Num Lock"
+msgstr "Num Lock"
+
+#: ../rules/base.xml.in.h:570
+msgid "Numeric keypad delete key behaviour"
+msgstr "Вибір поведінки клавіші del на цифровій клавіатурі"
+
+#: ../rules/base.xml.in.h:571
+msgid "Numeric keypad keys work as with Mac"
+msgstr "Цифрова клавіатура працює як у Mac"
+
+#: ../rules/base.xml.in.h:572
+msgid "Numeric keypad layout selection"
+msgstr "Вибір розкладки цифрової клавіатури"
+
+#: ../rules/base.xml.in.h:573
+msgid "OLPC"
+msgstr "OLPC"
+
+#: ../rules/base.xml.in.h:574
+msgid "Oriya"
+msgstr "Орія"
+
+#: ../rules/base.xml.in.h:575
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Ortek MCK-800 MM/Internet keyboard"
+
+#: ../rules/base.xml.in.h:576
+msgid "PC-98xx Series"
+msgstr "Моделі PC-98xx"
+
+#: ../rules/base.xml.in.h:577
+msgid "Pashto"
+msgstr "Пушту"
+
+#: ../rules/base.xml.in.h:578
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Пушту (Афганістан, OLPC)"
+
+#: ../rules/base.xml.in.h:579
+msgid "Pause"
+msgstr "Pause"
+
+#: ../rules/base.xml.in.h:580
+msgid "Persian"
+msgstr "Перська"
+
+#: ../rules/base.xml.in.h:581
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr "Перська (Афганістан, дарі OLPC)"
+
+#: ../rules/base.xml.in.h:582
+msgid "Persian (with Persian Keypad)"
+msgstr "Перська (з перською дод. панеллю)"
+
+#: ../rules/base.xml.in.h:583
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr "Філіппінська (Дворак, байбаїн)"
+
+#: ../rules/base.xml.in.h:584
+msgid "Polish"
+msgstr "Польська"
+
+#: ../rules/base.xml.in.h:585
+msgid "Polish (Dvorak)"
+msgstr "Польська (Дворак)"
+
+#: ../rules/base.xml.in.h:586
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "Польська (Дворак, польські лапки на клавіші 1)"
+
+#: ../rules/base.xml.in.h:587
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "Польська (Дворак, польські лапки на знаку лапки)"
+
+#: ../rules/base.xml.in.h:588
+msgid "Polish (Kashubian)"
+msgstr "Польська (кашубська)"
+
+#: ../rules/base.xml.in.h:589
+msgid "Polish (programmer Dvorak)"
+msgstr "Польська (програмістський Дворак)"
+
+#: ../rules/base.xml.in.h:590
+msgid "Polish (qwertz)"
+msgstr "Польська (qwertz)"
+
+#: ../rules/base.xml.in.h:591
+msgid "Portuguese"
+msgstr "Португальська"
+
+#: ../rules/base.xml.in.h:592
+msgid "Portuguese (Brazil)"
+msgstr "Португальська (Бразилія)"
+
+#: ../rules/base.xml.in.h:593
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Португальська (Бразилія, Дворак)"
+
+#: ../rules/base.xml.in.h:594
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "Португальська (Бразилія, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:595
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr "Португальська (Бразилія, nativo для есперанто)"
+
+#: ../rules/base.xml.in.h:596
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr "Португальська (Бразилія, nativo для клавіатур США)"
+
+#: ../rules/base.xml.in.h:597
+msgid "Portuguese (Brazil, nativo)"
+msgstr "Португальська (Бразилія, nativo)"
+
+#: ../rules/base.xml.in.h:598
+msgid "Portuguese (Mac)"
+msgstr "Португальська (Mac)"
+
+#: ../rules/base.xml.in.h:599
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "Португальська (Mac, сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:600
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "Португальська (Mac, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:601
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr "Португальська (nativo для есперанто)"
+
+#: ../rules/base.xml.in.h:602
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr "Португальська (nativo для клавіатур у США)"
+
+#: ../rules/base.xml.in.h:603
+msgid "Portuguese (Nativo)"
+msgstr "Португальська (Nativo)"
+
+#: ../rules/base.xml.in.h:604
+msgid "Portuguese (Sun dead keys)"
+msgstr "Португальська (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:605
+msgid "Portuguese (eliminate dead keys)"
+msgstr "Португальська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:606
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr "Propeller Voyager (KTEZ-1000)"
+
+#: ../rules/base.xml.in.h:607
+msgid "PrtSc"
+msgstr "PrtSc"
+
+#: ../rules/base.xml.in.h:608
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Пенджабська (гурмухі, джелум)"
+
+#: ../rules/base.xml.in.h:609
+msgid "Punjabi (Gurmukhi)"
+msgstr "Пенджабська (гурмухі)"
+
+#: ../rules/base.xml.in.h:610
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
+
+#: ../rules/base.xml.in.h:611
+msgid "Right Alt"
+msgstr "Права клавіша Alt"
+
+#: ../rules/base.xml.in.h:612
+msgid "Right Alt (while pressed)"
+msgstr "Права клавіша Alt (поки натиснена)"
+
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Права клавіша Alt вибирає 5-ий рівень і активує блокування рівня 5, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:614
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Права клавіша Alt вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:615
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Права клавіша Alt вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:616
+msgid "Right Alt key never chooses 3rd level"
+msgstr "Права клавіша Alt ніколи не обирає 3-й рівень"
+
+#: ../rules/base.xml.in.h:617
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr "Вибір 3-го рівня натисненням правої клавіші Alt, Shift+права клавіша Alt діє як Multi_Key"
+
+#: ../rules/base.xml.in.h:618
+msgid "Right Ctrl"
+msgstr "Права клавіша Ctrl"
+
+#: ../rules/base.xml.in.h:619
+msgid "Right Ctrl (while pressed)"
+msgstr "Права клавіша Ctrl (поки натиснута)"
+
+#: ../rules/base.xml.in.h:620
+msgid "Right Ctrl as Right Alt"
+msgstr "Права клавіша Ctrl працює як права клавіша Alt"
+
+#: ../rules/base.xml.in.h:621
+msgid "Right Ctrl is mapped to Menu"
+msgstr "Права Ctrl відповідає клавіші Menu"
+
+#: ../rules/base.xml.in.h:622
+msgid "Right Ctrl+Right Shift"
+msgstr "Права Ctrl+Права Shift"
+
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "Права клавіша Shift"
+
+#: ../rules/base.xml.in.h:624
+msgid "Right Win"
+msgstr "Права клавіша Win"
+
+#: ../rules/base.xml.in.h:625
+msgid "Right Win (while pressed)"
+msgstr "Права клавіша Win (поки натиснена)"
+
+#: ../rules/base.xml.in.h:626
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr "Права клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:627
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr "Права клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня"
+
+#: ../rules/base.xml.in.h:628
+msgid "Romanian"
+msgstr "Румунська"
+
+#: ../rules/base.xml.in.h:629
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr "Румунська (кримськотатарська Dobruca-1 Q)"
+
+#: ../rules/base.xml.in.h:630
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr "Румунська (кримськотатарська Dobruca-2 Q)"
+
+#: ../rules/base.xml.in.h:631
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Румунська (кримськотатарська турецька Alt-Q)"
+
+#: ../rules/base.xml.in.h:632
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr "Румунська (кримськотатарська турецька F)"
+
+#: ../rules/base.xml.in.h:633
+msgid "Romanian (WinKeys)"
+msgstr "Румунська (з клавішами Win)"
+
+#: ../rules/base.xml.in.h:634
+msgid "Romanian (cedilla)"
+msgstr "Румунська (седиль)"
+
+#: ../rules/base.xml.in.h:635
+msgid "Romanian (standard cedilla)"
+msgstr "Румунська (стандартна седиль)"
+
+#: ../rules/base.xml.in.h:636
+msgid "Romanian (standard)"
+msgstr "Румунська (стандартна)"
+
+#: ../rules/base.xml.in.h:637
+msgid "Rupee on 4"
+msgstr "Символ рупії на 4"
+
+#: ../rules/base.xml.in.h:638
+msgid "Russian"
+msgstr "Російська"
+
+#: ../rules/base.xml.in.h:639
+msgid "Russian (Bashkirian)"
+msgstr "Російська (башкирська)"
+
+#: ../rules/base.xml.in.h:640
+msgid "Russian (Chuvash Latin)"
+msgstr "Російська (чуваська, латиниця)"
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr "Російська (чуваська)"
+
+#: ../rules/base.xml.in.h:642
+msgid "Russian (DOS)"
+msgstr "Російська (DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr "Російська (Грузія)"
+
+#: ../rules/base.xml.in.h:644
+msgid "Russian (Germany, phonetic)"
+msgstr "Російська (Німеччина, фонетична)"
+
+#: ../rules/base.xml.in.h:645
+msgid "Russian (Kalmyk)"
+msgstr "Російська (калмицька)"
+
+#: ../rules/base.xml.in.h:646
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Російська (Казахстан, з казахською)"
+
+#: ../rules/base.xml.in.h:647
+msgid "Russian (Komi)"
+msgstr "Російська (Комі)"
+
+#: ../rules/base.xml.in.h:648
+msgid "Russian (Mari)"
+msgstr "Російська (Марі)"
+
+#: ../rules/base.xml.in.h:649
+msgid "Russian (Ossetian, WinKeys)"
+msgstr "Російська (осетинська, з клавішами Win)"
+
+#: ../rules/base.xml.in.h:650
+msgid "Russian (Ossetian, legacy)"
+msgstr "Російська (осетинська, застаріла)"
+
+#: ../rules/base.xml.in.h:651
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Російська (Польща, фонетична Дворака)"
+
+#: ../rules/base.xml.in.h:652
+msgid "Russian (Serbian)"
+msgstr "Російська (сербська)"
+
+#: ../rules/base.xml.in.h:653
+msgid "Russian (Sweden, phonetic)"
+msgstr "Російська (шведська, фонетична)"
+
+#: ../rules/base.xml.in.h:654
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr "Російська (шведська, фонетична, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:655
+msgid "Russian (Tatar)"
+msgstr "Російська (татарська)"
+
+#: ../rules/base.xml.in.h:656
+msgid "Russian (US, phonetic)"
+msgstr "Російська (США, фонетична)"
+
+#: ../rules/base.xml.in.h:657
+msgid "Russian (Udmurt)"
+msgstr "Російська (удмуртська)"
+
+#: ../rules/base.xml.in.h:658
+msgid "Russian (Yakut)"
+msgstr "Російська (якутська)"
+
+#: ../rules/base.xml.in.h:659
+msgid "Russian (legacy)"
+msgstr "Російська (застаріла)"
+
+#: ../rules/base.xml.in.h:660
+msgid "Russian (phonetic WinKeys)"
+msgstr "Російська (фонетична з клавішами Win)"
+
+#: ../rules/base.xml.in.h:661
+msgid "Russian (phonetic)"
+msgstr "Російська (фонетична)"
+
+#: ../rules/base.xml.in.h:662
+msgid "Russian (typewriter)"
+msgstr "Російська (машинопис)"
+
+#: ../rules/base.xml.in.h:663
+msgid "Russian (typewriter, legacy)"
+msgstr "Російська (машинопис, застаріла)"
+
+#: ../rules/base.xml.in.h:664
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST Multimedia Wireless Keyboard"
+
+#: ../rules/base.xml.in.h:665
+msgid "SK-1300"
+msgstr "SK-1300"
+
+#: ../rules/base.xml.in.h:666
+msgid "SK-2500"
+msgstr "SK-2500"
+
+#: ../rules/base.xml.in.h:667
+msgid "SK-6200"
+msgstr "SK-6200"
+
+#: ../rules/base.xml.in.h:668
+msgid "SK-7100"
+msgstr "SK-7100"
+
+#: ../rules/base.xml.in.h:669
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
+
+#: ../rules/base.xml.in.h:670
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
+
+#: ../rules/base.xml.in.h:671
+msgid "Saisiyat (Taiwan)"
+msgstr "Сайсіят (Тайвань)"
+
+#: ../rules/base.xml.in.h:672
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
+
+#: ../rules/base.xml.in.h:673
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
+
+#: ../rules/base.xml.in.h:674
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
+
+#: ../rules/base.xml.in.h:675
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
+
+#: ../rules/base.xml.in.h:676
+msgid "Secwepemctsin"
+msgstr "Secwepemctsin"
+
+#: ../rules/base.xml.in.h:677
+msgid "Semi-colon on third level"
+msgstr "Крапка з комою на третьому рівні"
+
+#: ../rules/base.xml.in.h:678
+msgid "Serbian"
+msgstr "Сербська"
+
+#: ../rules/base.xml.in.h:679
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "Сербська (латиниця, Unicode qwerty)"
+
+#: ../rules/base.xml.in.h:680
+msgid "Serbian (Latin Unicode)"
+msgstr "Сербська (латиниця Unicode)"
+
+#: ../rules/base.xml.in.h:681
+msgid "Serbian (Latin qwerty)"
+msgstr "Сербська (латиниця, qwerty)"
+
+#: ../rules/base.xml.in.h:682
+msgid "Serbian (Latin with guillemets)"
+msgstr "Сербська (латиниця з кутовими лапками)"
+
+#: ../rules/base.xml.in.h:683
+msgid "Serbian (Latin)"
+msgstr "Сербська (латиниця)"
+
+#: ../rules/base.xml.in.h:684
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr "Сербська (паннонська русинська гомофонна)"
+
+#: ../rules/base.xml.in.h:685
+msgid "Serbian (Z and ZHE swapped)"
+msgstr "Сербська (З та Ж поміняні місцями)"
+
+#: ../rules/base.xml.in.h:686
+msgid "Serbian (with guillemets)"
+msgstr "Сербська (з кутовими лапками)"
+
+#: ../rules/base.xml.in.h:687
+msgid "Serbo-Croatian (US)"
+msgstr "Сербо-хорватська (США)"
+
+#: ../rules/base.xml.in.h:688
+msgid "Shift cancels Caps Lock"
+msgstr "Shift скасовує Caps Lock"
+
+#: ../rules/base.xml.in.h:689
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr "Shift не скасовує Num Lock, а вибирає третій рівень"
+
+#: ../rules/base.xml.in.h:690
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr "Shift з цифровою клавіатурою працює як у Microsoft Windows"
+
+#: ../rules/base.xml.in.h:691
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
+
+#: ../rules/base.xml.in.h:692
+msgid "Sindhi"
+msgstr "Синдхі"
+
+#: ../rules/base.xml.in.h:693
+msgid "Sinhala"
+msgstr "Сингальська"
+
+#: ../rules/base.xml.in.h:694
+msgid "Slovak"
+msgstr "Словацька"
+
+#: ../rules/base.xml.in.h:695
+msgid "Slovak (extended Backslash)"
+msgstr "Словацька (розширені функції Backslash)"
+
+#: ../rules/base.xml.in.h:696
+msgid "Slovak (qwerty)"
+msgstr "Словацька (qwerty)"
+
+#: ../rules/base.xml.in.h:697
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "Словацька (qwerty, розширені функції Backslash)"
+
+#: ../rules/base.xml.in.h:698
+msgid "Slovene"
+msgstr "Словенська"
+
+#: ../rules/base.xml.in.h:699
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "Клавіатура (США із словенськими літерами)"
+
+#: ../rules/base.xml.in.h:700
+msgid "Slovene (use guillemets for quotes)"
+msgstr "Словенська (кутові лапки)"
+
+#: ../rules/base.xml.in.h:701
+msgid "Spanish"
+msgstr "Іспанська"
+
+#: ../rules/base.xml.in.h:702
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr "Іспанська (Астурійський варіант з H та L з нижньою крапкою)"
+
+#: ../rules/base.xml.in.h:703
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr "Іспанська (каталонський варіант з L із середньою точкою)"
+
+#: ../rules/base.xml.in.h:704
+msgid "Spanish (Dvorak)"
+msgstr "Іспанська (Дворак)"
+
+#: ../rules/base.xml.in.h:705
+msgid "Spanish (Latin American)"
+msgstr "Іспанська (латиноамериканська)"
+
+#: ../rules/base.xml.in.h:706
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "Іспанська (латиноамериканська, вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr "Іспанська (латиноамериканська зі «спеціальною» тильдою)"
+
+#: ../rules/base.xml.in.h:708
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "Іспанська (латиноамериканська, сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:709
+msgid "Spanish (Mac)"
+msgstr "Іспанська (Mac)"
+
+#: ../rules/base.xml.in.h:710
+msgid "Spanish (Sun dead keys)"
+msgstr "Іспанська (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:711
+msgid "Spanish (eliminate dead keys)"
+msgstr "Іспанська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:712
+msgid "Spanish (include dead tilde)"
+msgstr "Іспанська (зі «спеціальною» тильдою)"
+
+#: ../rules/base.xml.in.h:713
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "Сліпі клавіші (Ctrl+Alt+&lt;key&gt;) обробляються на сервері"
+
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Type 5/6"
+
+#: ../rules/base.xml.in.h:715
+msgid "Super Power Multimedia Keyboard"
+msgstr "Super Power Multimedia Keyboard"
+
+#: ../rules/base.xml.in.h:716
+msgid "Swahili (Kenya)"
+msgstr "Суахілі (Кенія)"
+
+#: ../rules/base.xml.in.h:717
+msgid "Swahili (Tanzania)"
+msgstr "Суахілі (Танзанія)"
+
+#: ../rules/base.xml.in.h:718
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Поміняти місцями клавіші Ctrl та Caps Lock"
+
+#: ../rules/base.xml.in.h:719
+msgid "Swap ESC and Caps Lock"
+msgstr "Поміняти місцями клавіші ESC та Caps Lock"
+
+#: ../rules/base.xml.in.h:720
+msgid "Swedish"
+msgstr "Шведська"
+
+#: ../rules/base.xml.in.h:721
+msgid "Swedish (Dvorak)"
+msgstr "Шведська (Дворак)"
+
+#: ../rules/base.xml.in.h:722
+msgid "Swedish (Mac)"
+msgstr "Шведська (Mac)"
+
+#: ../rules/base.xml.in.h:723
+msgid "Swedish (Svdvorak)"
+msgstr "Шведська (Svdvorak)"
+
+#: ../rules/base.xml.in.h:724
+msgid "Swedish (eliminate dead keys)"
+msgstr "Шведська (вимкнути сліпі клавіші)"
+
+#: ../rules/base.xml.in.h:725
+msgid "Swedish (northern Saami)"
+msgstr "Шведська (північно-саамська)"
+
+#: ../rules/base.xml.in.h:726
+msgid "Swiss"
+msgstr "Швейцарська"
+
+#: ../rules/base.xml.in.h:727
+msgid "Swiss (legacy)"
+msgstr "Швейцарська (застаріла)"
+
+#: ../rules/base.xml.in.h:728
+msgid "Symplon PaceBook (tablet PC)"
+msgstr "Symplon PaceBook (планшетний ПК)"
+
+#: ../rules/base.xml.in.h:729
+msgid "Syriac"
+msgstr "Сирійська"
+
+#: ../rules/base.xml.in.h:730
+msgid "Syriac (phonetic)"
+msgstr "Сирійська (фонетична)"
+
+#: ../rules/base.xml.in.h:731
+msgid "Taiwanese"
+msgstr "Тайванська"
+
+#: ../rules/base.xml.in.h:732
+msgid "Taiwanese (indigenous)"
+msgstr "Тайванська (місцева)"
+
+#: ../rules/base.xml.in.h:733
+msgid "Tajik"
+msgstr "Таджицька"
+
+#: ../rules/base.xml.in.h:734
+msgid "Tajik (legacy)"
+msgstr "Таджицька (застаріла)"
+
+#: ../rules/base.xml.in.h:735
+msgid "Tamil"
+msgstr "Тамільська"
+
+#: ../rules/base.xml.in.h:736
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr "Тамільська (Шрі-Ланка, TAB, машинопис)"
+
+#: ../rules/base.xml.in.h:737
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "Тамільська (Шрі-Ланка, Unicode)"
+
+#: ../rules/base.xml.in.h:738
+msgid "Tamil (TAB typewriter)"
+msgstr "Тамільська (TAB, машинопис)"
+
+#: ../rules/base.xml.in.h:739
+msgid "Tamil (TSCII typewriter)"
+msgstr "Тамільська (TSCII, машинопис)"
+
+#: ../rules/base.xml.in.h:740
+msgid "Tamil (Unicode)"
+msgstr "Тамільська (Unicode)"
+
+#: ../rules/base.xml.in.h:741
+msgid "Tamil (keyboard with numerals)"
+msgstr "Тамільська (клавіатура з цифрами)"
+
+#: ../rules/base.xml.in.h:742
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
+
+#: ../rules/base.xml.in.h:743
+msgid "Telugu"
+msgstr "Телугу"
+
+#: ../rules/base.xml.in.h:744
+msgid "Thai"
+msgstr "Тайська"
+
+#: ../rules/base.xml.in.h:745
+msgid "Thai (Pattachote)"
+msgstr "Тайська (паттачот)"
+
+#: ../rules/base.xml.in.h:746
+msgid "Thai (TIS-820.2538)"
+msgstr "Тайська (TIS-820.2538)"
+
+#: ../rules/base.xml.in.h:747
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "На відповідну клавішу на клавіатурі Дворак."
+
+#: ../rules/base.xml.in.h:748
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr "На відповідну клавішу на клавіатурі Qwerty."
+
+#: ../rules/base.xml.in.h:749
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr "Вмикати або вимикати PointerKeys за допомогою Shift + NumLock."
+
+#: ../rules/base.xml.in.h:750
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
+
+#: ../rules/base.xml.in.h:751
+msgid "Trust Direct Access Keyboard"
+msgstr "Trust Direct Access Keyboard"
+
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
+
+#: ../rules/base.xml.in.h:753
+msgid "Trust Wireless Keyboard Classic"
+msgstr "Trust Wireless Keyboard Classic"
+
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr "Тсвана"
+
+#: ../rules/base.xml.in.h:755
+msgid "Turkish"
+msgstr "Турецька"
+
+#: ../rules/base.xml.in.h:756
+msgid "Turkish (Alt-Q)"
+msgstr "Турецька (Alt-Q)"
+
+#: ../rules/base.xml.in.h:757
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "Турецька (кримськотатарська турецька Alt-Q)"
+
+#: ../rules/base.xml.in.h:758
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "Турецька (кримськотатарська турецька F)"
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "Турецька (кримськотатарська турецька Q)"
+
+#: ../rules/base.xml.in.h:760
+msgid "Turkish (F)"
+msgstr "Турецька (F)"
+
+#: ../rules/base.xml.in.h:761
+msgid "Turkish (Sun dead keys)"
+msgstr "Турецька (сліпі клавіші Sun)"
+
+#: ../rules/base.xml.in.h:762
+msgid "Turkish (international with dead keys)"
+msgstr "Турецька (інтернаціональна зі сліпими клавішами)"
+
+#: ../rules/base.xml.in.h:763
+msgid "Turkmen"
+msgstr "Туркменська"
+
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr "Туркменська (Alt-Q)"
+
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
+
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
+
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:режим ЄС)"
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106:режим Японії)"
+
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr "Українська"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "Українська (кримськотатарська турецька Alt-Q)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "Українська (кримськотатарська турецька F)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "Українська (кримськотатарська турецька Q)"
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr "Українська (з клавішами Win)"
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr "Українська (гомофонна)"
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "Українська (застаріла)"
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "Українська (фонетична)"
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr "Українська (стандартна RSTU на російській розкладці)"
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr "Українська (стандартна RSTU)"
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr "Українська (друкарська машинка)"
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Доповнення Unicode (стрілки та математичні оператори)"
+
+#: ../rules/base.xml.in.h:782
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Доповнення Unicode (стрілки та математичні оператори). Математичні оператори на типовому рівні."
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "Урду (Пакистан)"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Урду (Пакистан, CRULP)"
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Урду (Пакистан, NLA)"
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr "Урду (з клавішами Win)"
+
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "Урду (альтернативна фонетична)"
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "Урду (фонетична)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "Використовувати клавіатурні індикатори для індикації альтернативних розкладок"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "Клавіша пробіл генерує символ нерозривного пробілу"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr "Звичайний пробіл на будь-якому рівні"
+
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr "Узбецька"
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "Узбецька (Афганістан)"
+
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Узбецька (Афганістан, OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "Узбецька (кримськотатарська турецька Alt-Q)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "Узбецька (кримськотатарська турецька F)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "Узбецька (кримськотатарська турецька Q)"
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "Узбецька (латиниця)"
+
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr "В'єтнамська"
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "ViewSonic KU-306 Internet Keyboard"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори). Математичні операції на типовому рівні"
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr "Winbook Model XP5"
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr "Волоф"
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr "Yahoo! Internet Keyboard"
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr "Йоруба"
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr "Незв’язувальний символ нульової ширини на другому рівні"
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні"
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні, нічого на четвертому рівні"
+
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні, вузький нерозривний пробіл на четвертому рівні"
+
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr "Незв’язувальний символ нульової ширини на другому рівні, символ нерозривного пробілу на третьому рівні, зв’язувальний символ нульової ширини на четвертому"
+
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr "Незв’язувальний символ нульової ширини на другому рівні, зв’язувальний символ нульової ширини на третьому рівні"
+
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr "Незв’язувальний символ нульової ширини на другому рівні, зв’язувальний символ нульової ширини на третьому рівні, символ нерозривного пробілу на четвертому рівні"
+
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr "Незв’язувальний символ нульової ширини на третьому рівні, зв’язувальний символ нульової ширини на четвертому"
+
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
+
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
+
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
+
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
+
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
+
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
+
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "APL"
+msgstr "APL"
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "Iran"
+msgstr "Іран"
+
+#: ../rules/base.extras.xml.in.h:3
+msgid "Iran - Avestan"
+msgstr "Іран — авестійська"
+
+#: ../rules/base.extras.xml.in.h:4
+msgid "Lithuania"
+msgstr "Литовська"
+
+#: ../rules/base.extras.xml.in.h:5
+msgid "Lithuania - Dvorak"
+msgstr "Литва — Дворака"
+
+#: ../rules/base.extras.xml.in.h:6
+msgid "Ltu"
+msgstr "Лит"
+
+#: ../rules/base.extras.xml.in.h:7
+msgid "Romania"
+msgstr "Румунська"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr "Румунська — ергономічна для друку наосліп"
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Рум"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Рос"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "Росія"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "Сербія"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr "Сербія — об'єднані надбуквені знаки разом спец. клавіш"
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Срб"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "США"
+
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr "США — атсінська"
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr "США — салішська кер-д’ален"
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr "США (інтернаціональна, об'єднана з AltGr)"
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr "США — інтернаціональна (об'єднана з AltGr, альтернативна)"
diff --git a/xorg-server/xkeyboard-config/po/xkeyboard-config.pot b/xorg-server/xkeyboard-config/po/xkeyboard-config.pot
index be8933bf0..8d1585be4 100644
--- a/xorg-server/xkeyboard-config/po/xkeyboard-config.pot
+++ b/xorg-server/xkeyboard-config/po/xkeyboard-config.pot
@@ -1,3066 +1,3806 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
-"POT-Creation-Date: 2010-09-15 21:57+0100\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-
-#: ../rules/base.xml.in.h:1
-msgid "&lt;Less/Greater&gt;"
-msgstr ""
-
-#: ../rules/base.xml.in.h:2
-msgid ""
-"&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with "
-"another 5th-level-chooser"
-msgstr ""
-
-#: ../rules/base.xml.in.h:3
-msgid ""
-"&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with "
-"another 5th-level-chooser, one press releases the lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:4
-msgid "(F)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:5
-msgid "(Legacy) Alternative"
-msgstr ""
-
-#: ../rules/base.xml.in.h:6
-msgid "(Legacy) Alternative, Sun dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:7
-msgid "(Legacy) Alternative, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:8
-msgid "101/104 key Compatible"
-msgstr ""
-
-#: ../rules/base.xml.in.h:9
-msgid "101/qwerty/comma/Dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:10
-msgid "101/qwerty/comma/Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:11
-msgid "101/qwerty/dot/Dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:12
-msgid "101/qwerty/dot/Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:13
-msgid "101/qwertz/comma/Dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:14
-msgid "101/qwertz/comma/Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:15
-msgid "101/qwertz/dot/Dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:16
-msgid "101/qwertz/dot/Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:17
-msgid "102/qwerty/comma/Dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:18
-msgid "102/qwerty/comma/Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:19
-msgid "102/qwerty/dot/Dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:20
-msgid "102/qwerty/dot/Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:21
-msgid "102/qwertz/comma/Dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:22
-msgid "102/qwertz/comma/Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:23
-msgid "102/qwertz/dot/Dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:24
-msgid "102/qwertz/dot/Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:25
-msgid "2"
-msgstr ""
-
-#: ../rules/base.xml.in.h:26
-msgid "4"
-msgstr ""
-
-#: ../rules/base.xml.in.h:27
-msgid "5"
-msgstr ""
-
-#: ../rules/base.xml.in.h:28
-msgid "A4Tech KB-21"
-msgstr ""
-
-#: ../rules/base.xml.in.h:29
-msgid "A4Tech KBS-8"
-msgstr ""
-
-#: ../rules/base.xml.in.h:30
-msgid "A4Tech Wireless Desktop RFKB-23"
-msgstr ""
-
-#: ../rules/base.xml.in.h:31
-msgid "ATM/phone-style"
-msgstr ""
-
-#: ../rules/base.xml.in.h:32
-msgid "Acer AirKey V"
-msgstr ""
-
-#: ../rules/base.xml.in.h:33
-msgid "Acer C300"
-msgstr ""
-
-#: ../rules/base.xml.in.h:34
-msgid "Acer Ferrari 4000"
-msgstr ""
-
-#: ../rules/base.xml.in.h:35
-msgid "Acer Laptop"
-msgstr ""
-
-#: ../rules/base.xml.in.h:36
-msgid "Add the standard behavior to Menu key"
-msgstr ""
-
-#: ../rules/base.xml.in.h:37
-msgid "Adding Esperanto circumflexes (supersigno)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:38
-msgid "Adding EuroSign to certain keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:39
-msgid "Advance Scorpius KI"
-msgstr ""
-
-#: ../rules/base.xml.in.h:40
-msgid "Afg"
-msgstr ""
-
-#: ../rules/base.xml.in.h:41
-msgid "Afghanistan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:42
-msgid "Akan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:43
-msgid "Alb"
-msgstr ""
-
-#: ../rules/base.xml.in.h:44
-msgid "Albania"
-msgstr ""
-
-#: ../rules/base.xml.in.h:45
-msgid "Alt and Meta are on Alt keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:46
-msgid "Alt is mapped to Right Win, Super to Menu"
-msgstr ""
-
-#: ../rules/base.xml.in.h:47
-msgid "Alt+Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:48
-msgid "Alt+Ctrl"
-msgstr ""
-
-#: ../rules/base.xml.in.h:49
-msgid "Alt+Shift"
-msgstr ""
-
-#: ../rules/base.xml.in.h:50
-msgid "Alt+Space"
-msgstr ""
-
-#: ../rules/base.xml.in.h:51
-msgid "Alt-Q"
-msgstr ""
-
-#: ../rules/base.xml.in.h:52
-msgid "Alt/Win key behavior"
-msgstr ""
-
-#: ../rules/base.xml.in.h:53
-msgid "Alternative"
-msgstr ""
-
-#: ../rules/base.xml.in.h:54
-msgid "Alternative Eastern"
-msgstr ""
-
-#: ../rules/base.xml.in.h:55
-msgid "Alternative Phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:56
-msgid "Alternative international"
-msgstr ""
-
-#: ../rules/base.xml.in.h:57
-msgid "Alternative, Sun dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:58
-msgid "Alternative, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:59
-msgid "Alternative, latin-9 only"
-msgstr ""
-
-#: ../rules/base.xml.in.h:60
-msgid "And"
-msgstr ""
-
-#: ../rules/base.xml.in.h:61
-msgid "Andorra"
-msgstr ""
-
-#: ../rules/base.xml.in.h:62
-msgid "Any Alt key"
-msgstr ""
-
-#: ../rules/base.xml.in.h:63
-msgid "Any Win key"
-msgstr ""
-
-#: ../rules/base.xml.in.h:64
-msgid "Any Win key (while pressed)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:65
-msgid "Apostrophe (') variant"
-msgstr ""
-
-#: ../rules/base.xml.in.h:66
-msgid "Apple"
-msgstr ""
-
-#: ../rules/base.xml.in.h:67
-msgid "Apple Aluminium Keyboard (ANSI)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:68
-msgid "Apple Aluminium Keyboard (ISO)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:69
-msgid "Apple Aluminium Keyboard (JIS)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:70
-msgid ""
-"Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num "
-"Lock)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:71
-msgid "Apple Laptop"
-msgstr ""
-
-#: ../rules/base.xml.in.h:72
-msgid "Ara"
-msgstr ""
-
-#: ../rules/base.xml.in.h:73
-msgid "Arabic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:74
-msgid "Arm"
-msgstr ""
-
-#: ../rules/base.xml.in.h:75
-msgid "Armenia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:76
-msgid "Asturian variant with bottom-dot H and bottom-dot L"
-msgstr ""
-
-#: ../rules/base.xml.in.h:77
-msgid "Asus Laptop"
-msgstr ""
-
-#: ../rules/base.xml.in.h:78
-msgid "At bottom left"
-msgstr ""
-
-#: ../rules/base.xml.in.h:79
-msgid "At left of 'A'"
-msgstr ""
-
-#: ../rules/base.xml.in.h:80
-msgid "Austria"
-msgstr ""
-
-#: ../rules/base.xml.in.h:81
-msgid "Aut"
-msgstr ""
-
-#: ../rules/base.xml.in.h:82
-msgid "Avatime"
-msgstr ""
-
-#: ../rules/base.xml.in.h:83
-msgid "Aze"
-msgstr ""
-
-#: ../rules/base.xml.in.h:84
-msgid "Azerbaijan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:85
-msgid "Azona RF2300 wireless Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:86
-msgid "BTC 5090"
-msgstr ""
-
-#: ../rules/base.xml.in.h:87
-msgid "BTC 5113RF Multimedia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:88
-msgid "BTC 5126T"
-msgstr ""
-
-#: ../rules/base.xml.in.h:89
-msgid "BTC 6301URF"
-msgstr ""
-
-#: ../rules/base.xml.in.h:90
-msgid "BTC 9000"
-msgstr ""
-
-#: ../rules/base.xml.in.h:91
-msgid "BTC 9000A"
-msgstr ""
-
-#: ../rules/base.xml.in.h:92
-msgid "BTC 9001AH"
-msgstr ""
-
-#: ../rules/base.xml.in.h:93
-msgid "BTC 9019U"
-msgstr ""
-
-#: ../rules/base.xml.in.h:94
-msgid "BTC 9116U Mini Wireless Internet and Gaming"
-msgstr ""
-
-#: ../rules/base.xml.in.h:95
-msgid "Backslash"
-msgstr ""
-
-#: ../rules/base.xml.in.h:96
-msgid "Bangladesh"
-msgstr ""
-
-#: ../rules/base.xml.in.h:97
-msgid "Bashkirian"
-msgstr ""
-
-#: ../rules/base.xml.in.h:98
-msgid "Bel"
-msgstr ""
-
-#: ../rules/base.xml.in.h:99
-msgid "Belarus"
-msgstr ""
-
-#: ../rules/base.xml.in.h:100
-msgid "Belgium"
-msgstr ""
-
-#: ../rules/base.xml.in.h:101
-msgid "BenQ X-Touch"
-msgstr ""
-
-#: ../rules/base.xml.in.h:102
-msgid "BenQ X-Touch 730"
-msgstr ""
-
-#: ../rules/base.xml.in.h:103
-msgid "BenQ X-Touch 800"
-msgstr ""
-
-#: ../rules/base.xml.in.h:104
-msgid "Bengali"
-msgstr ""
-
-#: ../rules/base.xml.in.h:105
-msgid "Bengali Probhat"
-msgstr ""
-
-#: ../rules/base.xml.in.h:106
-msgid "Bepo, ergonomic, Dvorak way"
-msgstr ""
-
-#: ../rules/base.xml.in.h:107
-msgid "Bepo, ergonomic, Dvorak way, latin-9 only"
-msgstr ""
-
-#: ../rules/base.xml.in.h:108
-msgid "Bgd"
-msgstr ""
-
-#: ../rules/base.xml.in.h:109
-msgid "Bgr"
-msgstr ""
-
-#: ../rules/base.xml.in.h:110
-msgid "Bhutan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:111
-msgid "Biblical Hebrew (Tiro)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:112
-msgid "Bih"
-msgstr ""
-
-#: ../rules/base.xml.in.h:113
-msgid "Blr"
-msgstr ""
-
-#: ../rules/base.xml.in.h:114
-msgid "Bosnia and Herzegovina"
-msgstr ""
-
-#: ../rules/base.xml.in.h:115
-msgid "Both Alt keys together"
-msgstr ""
-
-#: ../rules/base.xml.in.h:116
-msgid "Both Ctrl keys together"
-msgstr ""
-
-#: ../rules/base.xml.in.h:117
-msgid "Both Shift keys together"
-msgstr ""
-
-#: ../rules/base.xml.in.h:118
-msgid "Both Shift-Keys together toggle Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:119
-msgid "Botswana"
-msgstr ""
-
-#: ../rules/base.xml.in.h:120
-msgid "Bra"
-msgstr ""
-
-#: ../rules/base.xml.in.h:121
-msgid "Braille"
-msgstr ""
-
-#: ../rules/base.xml.in.h:122
-msgid "Brazil"
-msgstr ""
-
-#: ../rules/base.xml.in.h:123
-msgid "Breton"
-msgstr ""
-
-#: ../rules/base.xml.in.h:124
-msgid "Brl"
-msgstr ""
-
-#: ../rules/base.xml.in.h:125
-msgid "Brother Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:126
-msgid "Btn"
-msgstr ""
-
-#: ../rules/base.xml.in.h:127
-msgid "Buckwalter"
-msgstr ""
-
-#: ../rules/base.xml.in.h:128
-msgid "Bulgaria"
-msgstr ""
-
-#: ../rules/base.xml.in.h:129
-msgid "Bwa"
-msgstr ""
-
-#: ../rules/base.xml.in.h:130
-msgid "COD"
-msgstr ""
-
-#: ../rules/base.xml.in.h:131
-msgid "CRULP"
-msgstr ""
-
-#: ../rules/base.xml.in.h:132
-msgid "Cambodia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:133
-msgid "Can"
-msgstr ""
-
-#: ../rules/base.xml.in.h:134
-msgid "Canada"
-msgstr ""
-
-#: ../rules/base.xml.in.h:135
-msgid "Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:136
-msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:137
-msgid ""
-"Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
-msgstr ""
-
-#: ../rules/base.xml.in.h:138
-msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:139
-msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:140
-msgid "Caps Lock is disabled"
-msgstr ""
-
-#: ../rules/base.xml.in.h:141
-msgid "Caps Lock key behavior"
-msgstr ""
-
-#: ../rules/base.xml.in.h:142
-msgid "Caps Lock toggles Shift so all keys are affected"
-msgstr ""
-
-#: ../rules/base.xml.in.h:143
-msgid "Caps Lock toggles normal capitalization of alphabetic characters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:144
-msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:145
-msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:146
-msgid "Catalan variant with middle-dot L"
-msgstr ""
-
-#: ../rules/base.xml.in.h:147
-msgid "Cedilla"
-msgstr ""
-
-#: ../rules/base.xml.in.h:148
-msgid "Che"
-msgstr ""
-
-#: ../rules/base.xml.in.h:149
-msgid "Cherokee"
-msgstr ""
-
-#: ../rules/base.xml.in.h:150
-msgid "Cherry B.UNLIMITED"
-msgstr ""
-
-#: ../rules/base.xml.in.h:151
-msgid "Cherry Blue Line CyBo@rd"
-msgstr ""
-
-#: ../rules/base.xml.in.h:152
-msgid "Cherry Blue Line CyBo@rd (alternate option)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:153
-msgid "Cherry CyBo@rd USB-Hub"
-msgstr ""
-
-#: ../rules/base.xml.in.h:154
-msgid "Cherry CyMotion Expert"
-msgstr ""
-
-#: ../rules/base.xml.in.h:155
-msgid "Cherry CyMotion Master Linux"
-msgstr ""
-
-#: ../rules/base.xml.in.h:156
-msgid "Cherry CyMotion Master XPress"
-msgstr ""
-
-#: ../rules/base.xml.in.h:157
-msgid "Chicony Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:158
-msgid "Chicony KB-9885"
-msgstr ""
-
-#: ../rules/base.xml.in.h:159
-msgid "Chicony KU-0108"
-msgstr ""
-
-#: ../rules/base.xml.in.h:160
-msgid "Chicony KU-0420"
-msgstr ""
-
-#: ../rules/base.xml.in.h:161
-msgid "China"
-msgstr ""
-
-#: ../rules/base.xml.in.h:162
-msgid "Chn"
-msgstr ""
-
-#: ../rules/base.xml.in.h:163
-msgid "Chuvash"
-msgstr ""
-
-#: ../rules/base.xml.in.h:164
-msgid "Chuvash Latin"
-msgstr ""
-
-#: ../rules/base.xml.in.h:165
-msgid "Classic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:166
-msgid "Classic Dvorak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:167
-msgid "Classic, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:168
-msgid "Classmate PC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:169
-msgid "CloGaelach"
-msgstr ""
-
-#: ../rules/base.xml.in.h:170
-msgid "Colemak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:171
-msgid "Compaq Easy Access Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:172
-msgid "Compaq Internet Keyboard (13 keys)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:173
-msgid "Compaq Internet Keyboard (18 keys)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:174
-msgid "Compaq Internet Keyboard (7 keys)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:175
-msgid "Compaq iPaq Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:176
-msgid "Compose key position"
-msgstr ""
-
-#: ../rules/base.xml.in.h:177
-msgid "Congo, Democratic Republic of the"
-msgstr ""
-
-#: ../rules/base.xml.in.h:178
-msgid "Control + Alt + Backspace"
-msgstr ""
-
-#: ../rules/base.xml.in.h:179
-msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:180
-msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:181
-msgid "Creative Desktop Wireless 7000"
-msgstr ""
-
-#: ../rules/base.xml.in.h:182
-msgid "Crimean Tatar (Dobruca-1 Q)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:183
-msgid "Crimean Tatar (Dobruca-2 Q)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:184
-msgid "Crimean Tatar (Turkish Alt-Q)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:185
-msgid "Crimean Tatar (Turkish F)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:186
-msgid "Crimean Tatar (Turkish Q)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:187
-msgid "Croatia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:188
-msgid "Ctrl key position"
-msgstr ""
-
-#: ../rules/base.xml.in.h:189
-msgid "Ctrl+Shift"
-msgstr ""
-
-#: ../rules/base.xml.in.h:190
-msgid "Cyrillic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:191
-msgid "Cyrillic with guillemets"
-msgstr ""
-
-#: ../rules/base.xml.in.h:192
-msgid "Cyrillic, Z and ZHE swapped"
-msgstr ""
-
-#: ../rules/base.xml.in.h:193
-msgid "Cze"
-msgstr ""
-
-#: ../rules/base.xml.in.h:194
-msgid "Czechia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:195
-msgid "DOS"
-msgstr ""
-
-#: ../rules/base.xml.in.h:196
-msgid "DTK2000"
-msgstr ""
-
-#: ../rules/base.xml.in.h:197
-msgid "Dead acute"
-msgstr ""
-
-#: ../rules/base.xml.in.h:198
-msgid "Dead grave acute"
-msgstr ""
-
-#: ../rules/base.xml.in.h:199
-msgid "Default numeric keypad keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:200
-msgid "Dell"
-msgstr ""
-
-#: ../rules/base.xml.in.h:201
-msgid "Dell 101-key PC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:202
-msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
-msgstr ""
-
-#: ../rules/base.xml.in.h:203
-msgid "Dell Laptop/notebook Precision M series"
-msgstr ""
-
-#: ../rules/base.xml.in.h:204
-msgid "Dell Latitude series laptop"
-msgstr ""
-
-#: ../rules/base.xml.in.h:205
-msgid "Dell Precision M65"
-msgstr ""
-
-#: ../rules/base.xml.in.h:206
-msgid "Dell SK-8125"
-msgstr ""
-
-#: ../rules/base.xml.in.h:207
-msgid "Dell SK-8135"
-msgstr ""
-
-#: ../rules/base.xml.in.h:208
-msgid "Dell USB Multimedia Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:209
-msgid "Denmark"
-msgstr ""
-
-#: ../rules/base.xml.in.h:210
-msgid "Deu"
-msgstr ""
-
-#: ../rules/base.xml.in.h:211
-msgid "Dexxa Wireless Desktop Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:212
-msgid "Diamond 9801 / 9802 series"
-msgstr ""
-
-#: ../rules/base.xml.in.h:213
-msgid "Dnk"
-msgstr ""
-
-#: ../rules/base.xml.in.h:214
-msgid "Dvorak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:215
-msgid "Dvorak (UK Punctuation)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:216
-msgid "Dvorak alternative international (no dead keys)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:217
-msgid "Dvorak international (with dead keys)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:218
-msgid "Dvorak, Polish quotes on key 1"
-msgstr ""
-
-#: ../rules/base.xml.in.h:219
-msgid "Dvorak, Polish quotes on quotemark key"
-msgstr ""
-
-#: ../rules/base.xml.in.h:220
-msgid "E"
-msgstr ""
-
-#: ../rules/base.xml.in.h:221
-msgid "Eastern"
-msgstr ""
-
-#: ../rules/base.xml.in.h:222
-msgid "Eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:223
-msgid "Enable extra typographic characters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:224
-msgid "English"
-msgstr ""
-
-#: ../rules/base.xml.in.h:225
-msgid "English (USA International)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:226
-msgid "English (USA Macintosh)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:227
-msgid "Ennyah DKB-1008"
-msgstr ""
-
-#: ../rules/base.xml.in.h:228
-msgid "Enter on keypad"
-msgstr ""
-
-#: ../rules/base.xml.in.h:229
-msgid "Epo"
-msgstr ""
-
-#: ../rules/base.xml.in.h:230
-msgid "Ergonomic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:231
-msgid "Esp"
-msgstr ""
-
-#: ../rules/base.xml.in.h:232
-msgid "Esperanto"
-msgstr ""
-
-#: ../rules/base.xml.in.h:233
-msgid "Est"
-msgstr ""
-
-#: ../rules/base.xml.in.h:234
-msgid "Estonia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:235
-msgid "Eth"
-msgstr ""
-
-#: ../rules/base.xml.in.h:236
-msgid "Ethiopia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:237
-msgid "Everex STEPnote"
-msgstr ""
-
-#: ../rules/base.xml.in.h:238
-msgid "Ewe"
-msgstr ""
-
-#: ../rules/base.xml.in.h:239
-msgid "Extended"
-msgstr ""
-
-#: ../rules/base.xml.in.h:240
-msgid "Extended - Winkeys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:241
-msgid "Extended Backslash"
-msgstr ""
-
-#: ../rules/base.xml.in.h:242
-msgid "F-letter (F) variant"
-msgstr ""
-
-#: ../rules/base.xml.in.h:243
-msgid "FL90"
-msgstr ""
-
-#: ../rules/base.xml.in.h:244
-msgid "Faroe Islands"
-msgstr ""
-
-#: ../rules/base.xml.in.h:245
-msgid "Fin"
-msgstr ""
-
-#: ../rules/base.xml.in.h:246
-msgid "Finland"
-msgstr ""
-
-#. This assumes the KP_ abstract symbols are actually useful for some apps
-#. The description needs to be rewritten
-#: ../rules/base.xml.in.h:249
-msgid "Four-level key with abstract separators"
-msgstr ""
-
-#: ../rules/base.xml.in.h:250
-msgid "Four-level key with comma"
-msgstr ""
-
-#: ../rules/base.xml.in.h:251
-msgid "Four-level key with dot"
-msgstr ""
-
-#: ../rules/base.xml.in.h:252
-msgid "Four-level key with dot, latin-9 restriction"
-msgstr ""
-
-#: ../rules/base.xml.in.h:253
-msgid "Four-level key with momayyez"
-msgstr ""
-
-#: ../rules/base.xml.in.h:254
-msgid "Fra"
-msgstr ""
-
-#: ../rules/base.xml.in.h:255
-msgid "France"
-msgstr ""
-
-#: ../rules/base.xml.in.h:256
-msgid "Français (France Alternative)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:257
-msgid "French"
-msgstr ""
-
-#: ../rules/base.xml.in.h:258
-msgid "French (Macintosh)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:259
-msgid "French (legacy)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:260
-msgid "French Dvorak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:261
-msgid "French, Sun dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:262
-msgid "French, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:263
-msgid "Fro"
-msgstr ""
-
-#: ../rules/base.xml.in.h:264
-msgid "Fujitsu-Siemens Computers AMILO laptop"
-msgstr ""
-
-#: ../rules/base.xml.in.h:265
-msgid "Fula"
-msgstr ""
-
-#: ../rules/base.xml.in.h:266
-msgid "GBr"
-msgstr ""
-
-#: ../rules/base.xml.in.h:267
-msgid "GILLBT"
-msgstr ""
-
-#: ../rules/base.xml.in.h:268
-msgid "Ga"
-msgstr ""
-
-#: ../rules/base.xml.in.h:269
-msgid "Generic 101-key PC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:270
-msgid "Generic 102-key (Intl) PC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:271
-msgid "Generic 104-key PC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:272
-msgid "Generic 105-key (Intl) PC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:273
-msgid "Genius Comfy KB-12e"
-msgstr ""
-
-#: ../rules/base.xml.in.h:274
-msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
-msgstr ""
-
-#: ../rules/base.xml.in.h:275
-msgid "Genius Comfy KB-21e-Scroll"
-msgstr ""
-
-#: ../rules/base.xml.in.h:276
-msgid "Genius KB-19e NB"
-msgstr ""
-
-#: ../rules/base.xml.in.h:277
-msgid "Genius KKB-2050HS"
-msgstr ""
-
-#: ../rules/base.xml.in.h:278
-msgid "Geo"
-msgstr ""
-
-#: ../rules/base.xml.in.h:279
-msgid "Georgia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:280
-msgid "Georgian"
-msgstr ""
-
-#: ../rules/base.xml.in.h:281
-msgid "Georgian AZERTY Tskapo"
-msgstr ""
-
-#: ../rules/base.xml.in.h:282
-msgid "German (Macintosh)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:283
-msgid "German, Sun dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:284
-msgid "German, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:285
-msgid "Germany"
-msgstr ""
-
-#: ../rules/base.xml.in.h:286
-msgid "Gha"
-msgstr ""
-
-#: ../rules/base.xml.in.h:287
-msgid "Ghana"
-msgstr ""
-
-#: ../rules/base.xml.in.h:288
-msgid "Gin"
-msgstr ""
-
-#: ../rules/base.xml.in.h:289
-msgid "Grc"
-msgstr ""
-
-#: ../rules/base.xml.in.h:290
-msgid "Greece"
-msgstr ""
-
-#: ../rules/base.xml.in.h:291
-msgid "Guinea"
-msgstr ""
-
-#: ../rules/base.xml.in.h:292
-msgid "Gujarati"
-msgstr ""
-
-#: ../rules/base.xml.in.h:293
-msgid "Gurmukhi"
-msgstr ""
-
-#: ../rules/base.xml.in.h:294
-msgid "Gurmukhi Jhelum"
-msgstr ""
-
-#: ../rules/base.xml.in.h:295
-msgid "Gyration"
-msgstr ""
-
-#: ../rules/base.xml.in.h:296
-msgid "Happy Hacking Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:297
-msgid "Happy Hacking Keyboard for Mac"
-msgstr ""
-
-#: ../rules/base.xml.in.h:298
-msgid "Hausa"
-msgstr ""
-
-#: ../rules/base.xml.in.h:299
-msgid "Hewlett-Packard Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:300
-msgid "Hewlett-Packard Mini 110 Notebook"
-msgstr ""
-
-#: ../rules/base.xml.in.h:301
-msgid "Hewlett-Packard Omnibook 500 FA"
-msgstr ""
-
-#: ../rules/base.xml.in.h:302
-msgid "Hewlett-Packard Omnibook 5xx"
-msgstr ""
-
-#: ../rules/base.xml.in.h:303
-msgid "Hewlett-Packard Omnibook 6000/6100"
-msgstr ""
-
-#: ../rules/base.xml.in.h:304
-msgid "Hewlett-Packard Omnibook XE3 GC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:305
-msgid "Hewlett-Packard Omnibook XE3 GF"
-msgstr ""
-
-#: ../rules/base.xml.in.h:306
-msgid "Hewlett-Packard Omnibook XT1000"
-msgstr ""
-
-#: ../rules/base.xml.in.h:307
-msgid "Hewlett-Packard Pavilion ZT11xx"
-msgstr ""
-
-#: ../rules/base.xml.in.h:308
-msgid "Hewlett-Packard Pavilion dv5"
-msgstr ""
-
-#: ../rules/base.xml.in.h:309
-msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:310
-msgid "Hewlett-Packard nx9020"
-msgstr ""
-
-#: ../rules/base.xml.in.h:311
-msgid "Hexadecimal"
-msgstr ""
-
-#: ../rules/base.xml.in.h:312
-msgid "Hindi Bolnagri"
-msgstr ""
-
-#: ../rules/base.xml.in.h:313
-msgid "Hindi Wx"
-msgstr ""
-
-#: ../rules/base.xml.in.h:314
-msgid "Homophonic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:315
-msgid "Honeywell Euroboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:316
-msgid "Hrv"
-msgstr ""
-
-#: ../rules/base.xml.in.h:317
-msgid "Hun"
-msgstr ""
-
-#: ../rules/base.xml.in.h:318
-msgid "Hungary"
-msgstr ""
-
-#: ../rules/base.xml.in.h:319
-msgid "Hyper is mapped to Win-keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:320
-msgid "IBM (LST 1205-92)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:321
-msgid "IBM Rapid Access"
-msgstr ""
-
-#: ../rules/base.xml.in.h:322
-msgid "IBM Rapid Access II"
-msgstr ""
-
-#: ../rules/base.xml.in.h:323
-msgid "IBM Space Saver"
-msgstr ""
-
-#: ../rules/base.xml.in.h:324
-msgid "IBM ThinkPad 560Z/600/600E/A22E"
-msgstr ""
-
-#: ../rules/base.xml.in.h:325
-msgid "IBM ThinkPad R60/T60/R61/T61"
-msgstr ""
-
-#: ../rules/base.xml.in.h:326
-msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-msgstr ""
-
-#: ../rules/base.xml.in.h:327
-msgid "ISO Alternate"
-msgstr ""
-
-#: ../rules/base.xml.in.h:328
-msgid "Iceland"
-msgstr ""
-
-#: ../rules/base.xml.in.h:329
-msgid "Igbo"
-msgstr ""
-
-#: ../rules/base.xml.in.h:330
-msgid "Include dead tilde"
-msgstr ""
-
-#: ../rules/base.xml.in.h:331
-msgid "Ind"
-msgstr ""
-
-#: ../rules/base.xml.in.h:332
-msgid "India"
-msgstr ""
-
-#: ../rules/base.xml.in.h:333
-msgid "International (AltGr dead keys)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:334
-msgid "International (with dead keys)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:335
-msgid "Inuktitut"
-msgstr ""
-
-#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:8
-msgid "Iran"
-msgstr ""
-
-#: ../rules/base.xml.in.h:337
-msgid "Iraq"
-msgstr ""
-
-#: ../rules/base.xml.in.h:338
-msgid "Ireland"
-msgstr ""
-
-#: ../rules/base.xml.in.h:339
-msgid "Irl"
-msgstr ""
-
-#: ../rules/base.xml.in.h:340
-msgid "Irn"
-msgstr ""
-
-#: ../rules/base.xml.in.h:341
-msgid "Irq"
-msgstr ""
-
-#: ../rules/base.xml.in.h:342
-msgid "Isl"
-msgstr ""
-
-#: ../rules/base.xml.in.h:343
-msgid "Isr"
-msgstr ""
-
-#: ../rules/base.xml.in.h:344
-msgid "Israel"
-msgstr ""
-
-#: ../rules/base.xml.in.h:345
-msgid "Ita"
-msgstr ""
-
-#: ../rules/base.xml.in.h:346
-msgid "Italy"
-msgstr ""
-
-#: ../rules/base.xml.in.h:347
-msgid "Japan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:348
-msgid "Japan (PC-98xx Series)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:349
-msgid "Japanese keyboard options"
-msgstr ""
-
-#: ../rules/base.xml.in.h:350
-msgid "Jpn"
-msgstr ""
-
-#: ../rules/base.xml.in.h:351
-msgid "Kalmyk"
-msgstr ""
-
-#: ../rules/base.xml.in.h:352
-msgid "Kana"
-msgstr ""
-
-#: ../rules/base.xml.in.h:353
-msgid "Kana Lock key is locking"
-msgstr ""
-
-#: ../rules/base.xml.in.h:354
-msgid "Kannada"
-msgstr ""
-
-#: ../rules/base.xml.in.h:355
-msgid "Kashubian"
-msgstr ""
-
-#: ../rules/base.xml.in.h:356
-msgid "Kaz"
-msgstr ""
-
-#: ../rules/base.xml.in.h:357
-msgid "Kazakh with Russian"
-msgstr ""
-
-#: ../rules/base.xml.in.h:358
-msgid "Kazakhstan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:359
-msgid "Ken"
-msgstr ""
-
-#: ../rules/base.xml.in.h:360
-msgid "Kenya"
-msgstr ""
-
-#: ../rules/base.xml.in.h:361
-msgid "Key sequence to kill the X server"
-msgstr ""
-
-#: ../rules/base.xml.in.h:362
-msgid "Key to choose 3rd level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:363
-msgid "Key to choose 5th level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:364
-msgid "Key(s) to change layout"
-msgstr ""
-
-#: ../rules/base.xml.in.h:365
-msgid "Keytronic FlexPro"
-msgstr ""
-
-#: ../rules/base.xml.in.h:366
-msgid "Kgz"
-msgstr ""
-
-#: ../rules/base.xml.in.h:367
-msgid "Khm"
-msgstr ""
-
-#: ../rules/base.xml.in.h:368
-msgid "Kikuyu"
-msgstr ""
-
-#: ../rules/base.xml.in.h:369
-msgid "Kinesis"
-msgstr ""
-
-#: ../rules/base.xml.in.h:370
-msgid "Komi"
-msgstr ""
-
-#: ../rules/base.xml.in.h:371
-msgid "Kor"
-msgstr ""
-
-#: ../rules/base.xml.in.h:372
-msgid "Korea, Republic of"
-msgstr ""
-
-#: ../rules/base.xml.in.h:373
-msgid "Ktunaxa"
-msgstr ""
-
-#: ../rules/base.xml.in.h:374
-msgid "Kurdish, (F)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:375
-msgid "Kurdish, Arabic-Latin"
-msgstr ""
-
-#: ../rules/base.xml.in.h:376
-msgid "Kurdish, Latin Alt-Q"
-msgstr ""
-
-#: ../rules/base.xml.in.h:377
-msgid "Kurdish, Latin Q"
-msgstr ""
-
-#: ../rules/base.xml.in.h:378
-msgid "Kyrgyzstan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:379
-msgid "LAm"
-msgstr ""
-
-#: ../rules/base.xml.in.h:380
-msgid "LEKP"
-msgstr ""
-
-#: ../rules/base.xml.in.h:381
-msgid "LEKPa"
-msgstr ""
-
-#: ../rules/base.xml.in.h:382
-msgid "Lao"
-msgstr ""
-
-#: ../rules/base.xml.in.h:383
-msgid "Laos"
-msgstr ""
-
-#: ../rules/base.xml.in.h:384
-msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:385
-msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:386
-msgid "Laptop/notebook eMachines m68xx"
-msgstr ""
-
-#: ../rules/base.xml.in.h:387
-msgid "Latin"
-msgstr ""
-
-#: ../rules/base.xml.in.h:388
-msgid "Latin American"
-msgstr ""
-
-#: ../rules/base.xml.in.h:389
-msgid "Latin Unicode"
-msgstr ""
-
-#: ../rules/base.xml.in.h:390
-msgid "Latin Unicode qwerty"
-msgstr ""
-
-#: ../rules/base.xml.in.h:391
-msgid "Latin qwerty"
-msgstr ""
-
-#: ../rules/base.xml.in.h:392
-msgid "Latin unicode"
-msgstr ""
-
-#: ../rules/base.xml.in.h:393
-msgid "Latin unicode qwerty"
-msgstr ""
-
-#: ../rules/base.xml.in.h:394
-msgid "Latin with guillemets"
-msgstr ""
-
-#: ../rules/base.xml.in.h:395
-msgid "Latvia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:396
-msgid "Layout toggle on multiply/divide key"
-msgstr ""
-
-#: ../rules/base.xml.in.h:397
-msgid "Left Alt"
-msgstr ""
-
-#: ../rules/base.xml.in.h:398
-msgid "Left Alt (while pressed)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:399
-msgid "Left Alt is swapped with Left Win"
-msgstr ""
-
-#: ../rules/base.xml.in.h:400
-msgid "Left Ctrl"
-msgstr ""
-
-#: ../rules/base.xml.in.h:401
-msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:402
-msgid "Left Ctrl+Left Shift"
-msgstr ""
-
-#: ../rules/base.xml.in.h:403
-msgid "Left Shift"
-msgstr ""
-
-#: ../rules/base.xml.in.h:404
-msgid "Left Win"
-msgstr ""
-
-#: ../rules/base.xml.in.h:405
-msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:406
-msgid "Left Win (while pressed)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:407
-msgid ""
-"Left Win chooses 5th level, locks when pressed together with another 5th-"
-"level-chooser"
-msgstr ""
-
-#: ../rules/base.xml.in.h:408
-msgid ""
-"Left Win chooses 5th level, locks when pressed together with another 5th-"
-"level-chooser, one press releases the lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:409
-msgid "Left hand"
-msgstr ""
-
-#: ../rules/base.xml.in.h:410
-msgid "Left handed Dvorak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:411
-msgid "Legacy"
-msgstr ""
-
-#: ../rules/base.xml.in.h:412
-msgid "Legacy Wang 724"
-msgstr ""
-
-#. Actually, with KP_SEPARATOR, as the old keypad(comma)
-#: ../rules/base.xml.in.h:414
-msgid "Legacy key with comma"
-msgstr ""
-
-#: ../rules/base.xml.in.h:415
-msgid "Legacy key with dot"
-msgstr ""
-
-#: ../rules/base.xml.in.h:416
-msgid "Lithuania"
-msgstr ""
-
-#: ../rules/base.xml.in.h:417
-msgid "Lka"
-msgstr ""
-
-#: ../rules/base.xml.in.h:418
-msgid "Logitech Access Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:419
-msgid "Logitech Cordless Desktop"
-msgstr ""
-
-#: ../rules/base.xml.in.h:420
-msgid "Logitech Cordless Desktop (alternate option)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:421
-msgid "Logitech Cordless Desktop EX110"
-msgstr ""
-
-#: ../rules/base.xml.in.h:422
-msgid "Logitech Cordless Desktop LX-300"
-msgstr ""
-
-#: ../rules/base.xml.in.h:423
-msgid "Logitech Cordless Desktop Navigator"
-msgstr ""
-
-#: ../rules/base.xml.in.h:424
-msgid "Logitech Cordless Desktop Optical"
-msgstr ""
-
-#: ../rules/base.xml.in.h:425
-msgid "Logitech Cordless Desktop Pro (alternate option 2)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:426
-msgid "Logitech Cordless Desktop iTouch"
-msgstr ""
-
-#: ../rules/base.xml.in.h:427
-msgid "Logitech Cordless Freedom/Desktop Navigator"
-msgstr ""
-
-#: ../rules/base.xml.in.h:428
-msgid "Logitech G15 extra keys via G15daemon"
-msgstr ""
-
-#: ../rules/base.xml.in.h:429
-msgid "Logitech Generic Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:430
-msgid "Logitech Internet 350 Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:431
-msgid "Logitech Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:432
-msgid "Logitech Internet Navigator Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:433
-msgid "Logitech Media Elite Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:434
-msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:435
-msgid "Logitech Ultra-X Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:436
-msgid "Logitech diNovo Edge Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:437
-msgid "Logitech diNovo Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:438
-msgid "Logitech iTouch"
-msgstr ""
-
-#: ../rules/base.xml.in.h:439
-msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:440
-msgid "Logitech iTouch Internet Navigator Keyboard SE"
-msgstr ""
-
-#: ../rules/base.xml.in.h:441
-msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:442
-msgid "Lower Sorbian"
-msgstr ""
-
-#: ../rules/base.xml.in.h:443
-msgid "Lower Sorbian (qwertz)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:444
-msgid "Ltu"
-msgstr ""
-
-#: ../rules/base.xml.in.h:445
-msgid "Lva"
-msgstr ""
-
-#: ../rules/base.xml.in.h:446
-msgid "MESS"
-msgstr ""
-
-#: ../rules/base.xml.in.h:447
-msgid "MNE"
-msgstr ""
-
-#: ../rules/base.xml.in.h:448
-msgid "MacBook/MacBook Pro"
-msgstr ""
-
-#: ../rules/base.xml.in.h:449
-msgid "MacBook/MacBook Pro (Intl)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:450
-msgid "Macedonia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:451
-msgid "Macintosh"
-msgstr ""
-
-#: ../rules/base.xml.in.h:452
-msgid "Macintosh (International)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:453
-msgid "Macintosh Old"
-msgstr ""
-
-#: ../rules/base.xml.in.h:454
-msgid "Macintosh, Sun dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:455
-msgid "Macintosh, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:456
-msgid "Make Caps Lock an additional Backspace"
-msgstr ""
-
-#: ../rules/base.xml.in.h:457
-msgid "Make Caps Lock an additional Ctrl"
-msgstr ""
-
-#: ../rules/base.xml.in.h:458
-msgid "Make Caps Lock an additional ESC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:459
-msgid "Make Caps Lock an additional Hyper"
-msgstr ""
-
-#: ../rules/base.xml.in.h:460
-msgid "Make Caps Lock an additional Num Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:461
-msgid "Make Caps Lock an additional Super"
-msgstr ""
-
-#: ../rules/base.xml.in.h:462
-msgid "Malayalam"
-msgstr ""
-
-#: ../rules/base.xml.in.h:463
-msgid "Malayalam Lalitha"
-msgstr ""
-
-#: ../rules/base.xml.in.h:464
-msgid "Maldives"
-msgstr ""
-
-#: ../rules/base.xml.in.h:465
-msgid "Mali"
-msgstr ""
-
-#: ../rules/base.xml.in.h:466
-msgid "Malta"
-msgstr ""
-
-#: ../rules/base.xml.in.h:467
-msgid "Maltese keyboard with US layout"
-msgstr ""
-
-#: ../rules/base.xml.in.h:468
-msgid "Mao"
-msgstr ""
-
-#: ../rules/base.xml.in.h:469
-msgid "Maori"
-msgstr ""
-
-#: ../rules/base.xml.in.h:470
-msgid "Mdv"
-msgstr ""
-
-#: ../rules/base.xml.in.h:471
-msgid "Memorex MX1998"
-msgstr ""
-
-#: ../rules/base.xml.in.h:472
-msgid "Memorex MX2500 EZ-Access Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:473
-msgid "Memorex MX2750"
-msgstr ""
-
-#: ../rules/base.xml.in.h:474
-msgid "Menu"
-msgstr ""
-
-#: ../rules/base.xml.in.h:475
-msgid "Meta is mapped to Left Win"
-msgstr ""
-
-#: ../rules/base.xml.in.h:476
-msgid "Meta is mapped to Win keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:477
-msgid "Microsoft Comfort Curve Keyboard 2000"
-msgstr ""
-
-#: ../rules/base.xml.in.h:478
-msgid "Microsoft Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:479
-msgid "Microsoft Internet Keyboard Pro, Swedish"
-msgstr ""
-
-#: ../rules/base.xml.in.h:480
-msgid "Microsoft Natural"
-msgstr ""
-
-#: ../rules/base.xml.in.h:481
-msgid "Microsoft Natural Keyboard Elite"
-msgstr ""
-
-#: ../rules/base.xml.in.h:482
-msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr ""
-
-#: ../rules/base.xml.in.h:483
-msgid "Microsoft Natural Keyboard Pro OEM"
-msgstr ""
-
-#: ../rules/base.xml.in.h:484
-msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
-msgstr ""
-
-#: ../rules/base.xml.in.h:485
-msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
-msgstr ""
-
-#: ../rules/base.xml.in.h:486
-msgid "Microsoft Office Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:487
-msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
-msgstr ""
-
-#: ../rules/base.xml.in.h:488
-msgid "Miscellaneous compatibility options"
-msgstr ""
-
-#: ../rules/base.xml.in.h:489
-msgid "Mkd"
-msgstr ""
-
-#: ../rules/base.xml.in.h:490
-msgid "Mli"
-msgstr ""
-
-#: ../rules/base.xml.in.h:491
-msgid "Mlt"
-msgstr ""
-
-#: ../rules/base.xml.in.h:492
-msgid "Mmr"
-msgstr ""
-
-#: ../rules/base.xml.in.h:493
-msgid "Mng"
-msgstr ""
-
-#: ../rules/base.xml.in.h:494
-msgid "Mongolia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:495
-msgid "Montenegro"
-msgstr ""
-
-#: ../rules/base.xml.in.h:496
-msgid "Morocco"
-msgstr ""
-
-#: ../rules/base.xml.in.h:497
-msgid "Multilingual"
-msgstr ""
-
-#: ../rules/base.xml.in.h:498
-msgid "Multilingual, first part"
-msgstr ""
-
-#: ../rules/base.xml.in.h:499
-msgid "Multilingual, second part"
-msgstr ""
-
-#: ../rules/base.xml.in.h:500
-msgid "Myanmar"
-msgstr ""
-
-#: ../rules/base.xml.in.h:501
-msgid "NICOLA-F style Backspace"
-msgstr ""
-
-#: ../rules/base.xml.in.h:502
-msgid "NLA"
-msgstr ""
-
-#: ../rules/base.xml.in.h:503
-msgid "Nativo"
-msgstr ""
-
-#: ../rules/base.xml.in.h:504
-msgid "Nativo for Esperanto"
-msgstr ""
-
-#: ../rules/base.xml.in.h:505
-msgid "Nativo for USA keyboards"
-msgstr ""
-
-#: ../rules/base.xml.in.h:506
-msgid "Neo 2"
-msgstr ""
-
-#: ../rules/base.xml.in.h:507
-msgid "Nepal"
-msgstr ""
-
-#: ../rules/base.xml.in.h:508
-msgid "Netherlands"
-msgstr ""
-
-#: ../rules/base.xml.in.h:509
-msgid "New phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:510
-msgid "Nga"
-msgstr ""
-
-#: ../rules/base.xml.in.h:511
-msgid "Nigeria"
-msgstr ""
-
-#: ../rules/base.xml.in.h:512
-msgid "Nld"
-msgstr ""
-
-#: ../rules/base.xml.in.h:513
-msgid "Non-breakable space character at fourth level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:514
-msgid ""
-"Non-breakable space character at fourth level, thin non-breakable space "
-"character at sixth level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:515
-msgid ""
-"Non-breakable space character at fourth level, thin non-breakable space "
-"character at sixth level (via Ctrl+Shift)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:516
-msgid "Non-breakable space character at second level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:517
-msgid "Non-breakable space character at third level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:518
-msgid "Non-breakable space character at third level, nothing at fourth level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:519
-msgid ""
-"Non-breakable space character at third level, thin non-breakable space "
-"character at fourth level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:520
-msgid "Nor"
-msgstr ""
-
-#: ../rules/base.xml.in.h:521
-msgid "Northern Saami"
-msgstr ""
-
-#: ../rules/base.xml.in.h:522
-msgid "Northern Saami, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:523
-msgid "Northgate OmniKey 101"
-msgstr ""
-
-#: ../rules/base.xml.in.h:524
-msgid "Norway"
-msgstr ""
-
-#: ../rules/base.xml.in.h:525
-msgid "Npl"
-msgstr ""
-
-#: ../rules/base.xml.in.h:526
-msgid "Num Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:527
-msgid "Numeric keypad delete key behaviour"
-msgstr ""
-
-#: ../rules/base.xml.in.h:528
-msgid "Numeric keypad keys work as with Mac"
-msgstr ""
-
-#: ../rules/base.xml.in.h:529
-msgid "Numeric keypad layout selection"
-msgstr ""
-
-#: ../rules/base.xml.in.h:530
-msgid "OADG 109A"
-msgstr ""
-
-#: ../rules/base.xml.in.h:531
-msgid "OLPC"
-msgstr ""
-
-#: ../rules/base.xml.in.h:532
-msgid "OLPC Dari"
-msgstr ""
-
-#: ../rules/base.xml.in.h:533
-msgid "OLPC Pashto"
-msgstr ""
-
-#: ../rules/base.xml.in.h:534
-msgid "OLPC Southern Uzbek"
-msgstr ""
-
-#: ../rules/base.xml.in.h:535
-msgid "Occitan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:536
-msgid "Ogham"
-msgstr ""
-
-#: ../rules/base.xml.in.h:537
-msgid "Ogham IS434"
-msgstr ""
-
-#: ../rules/base.xml.in.h:538
-msgid "Oriya"
-msgstr ""
-
-#: ../rules/base.xml.in.h:539
-msgid "Ortek MCK-800 MM/Internet keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:540
-msgid "Ossetian"
-msgstr ""
-
-#: ../rules/base.xml.in.h:541
-msgid "Ossetian, Winkeys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:542
-msgid "Ossetian, legacy"
-msgstr ""
-
-#: ../rules/base.xml.in.h:543
-msgid "PC-98xx Series"
-msgstr ""
-
-#: ../rules/base.xml.in.h:544
-msgid "Pak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:545
-msgid "Pakistan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:546
-msgid "Pannonian Rusyn Homophonic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:547
-msgid "Pashto"
-msgstr ""
-
-#: ../rules/base.xml.in.h:548
-msgid "Pattachote"
-msgstr ""
-
-#: ../rules/base.xml.in.h:549
-msgid "Pause"
-msgstr ""
-
-#: ../rules/base.xml.in.h:550
-msgid "Persian, with Persian Keypad"
-msgstr ""
-
-#: ../rules/base.xml.in.h:551
-msgid "Phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:552
-msgid "Phonetic Winkeys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:553
-msgid "Pol"
-msgstr ""
-
-#: ../rules/base.xml.in.h:554
-msgid "Poland"
-msgstr ""
-
-#: ../rules/base.xml.in.h:555
-msgid "Polytonic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:556
-msgid "Portugal"
-msgstr ""
-
-#: ../rules/base.xml.in.h:557
-msgid "Probhat"
-msgstr ""
-
-#: ../rules/base.xml.in.h:558
-msgid "Programmer Dvorak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:559
-msgid "Propeller Voyager (KTEZ-1000)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:560
-msgid "Prt"
-msgstr ""
-
-#: ../rules/base.xml.in.h:561
-msgid "PrtSc"
-msgstr ""
-
-#: ../rules/base.xml.in.h:562
-msgid "QTronix Scorpius 98N+"
-msgstr ""
-
-#: ../rules/base.xml.in.h:563
-msgid "Right Alt"
-msgstr ""
-
-#: ../rules/base.xml.in.h:564
-msgid "Right Alt (while pressed)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:565
-msgid ""
-"Right Alt chooses 5th level, locks when pressed together with another 5th-"
-"level-chooser"
-msgstr ""
-
-#: ../rules/base.xml.in.h:566
-msgid ""
-"Right Alt chooses 5th level, locks when pressed together with another 5th-"
-"level-chooser, one press releases the lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:567
-msgid "Right Alt key never chooses 3rd level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:568
-msgid "Right Alt, Shift+Right Alt key is Multi_Key"
-msgstr ""
-
-#: ../rules/base.xml.in.h:569
-msgid "Right Ctrl"
-msgstr ""
-
-#: ../rules/base.xml.in.h:570
-msgid "Right Ctrl (while pressed)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:571
-msgid "Right Ctrl as Right Alt"
-msgstr ""
-
-#: ../rules/base.xml.in.h:572
-msgid "Right Ctrl+Right Shift"
-msgstr ""
-
-#: ../rules/base.xml.in.h:573
-msgid "Right Shift"
-msgstr ""
-
-#: ../rules/base.xml.in.h:574
-msgid "Right Win"
-msgstr ""
-
-#: ../rules/base.xml.in.h:575
-msgid "Right Win (while pressed)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:576
-msgid ""
-"Right Win chooses 5th level, locks when pressed together with another 5th-"
-"level-chooser"
-msgstr ""
-
-#: ../rules/base.xml.in.h:577
-msgid ""
-"Right Win chooses 5th level, locks when pressed together with another 5th-"
-"level-chooser, one press releases the lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:578
-msgid "Right hand"
-msgstr ""
-
-#: ../rules/base.xml.in.h:579
-msgid "Right handed Dvorak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:580
-msgid "Romania"
-msgstr ""
-
-#: ../rules/base.xml.in.h:581
-msgid "Romanian keyboard with German letters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:582
-msgid "Romanian keyboard with German letters, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:583
-msgid "Rou"
-msgstr ""
-
-#: ../rules/base.xml.in.h:584
-msgid "Rus"
-msgstr ""
-
-#: ../rules/base.xml.in.h:585
-msgid "Russia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:586
-msgid "Russian"
-msgstr ""
-
-#: ../rules/base.xml.in.h:587
-msgid "Russian phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:588
-msgid "Russian phonetic Dvorak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:589
-msgid "Russian phonetic, eliminate dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:590
-msgid "Russian with Kazakh"
-msgstr ""
-
-#: ../rules/base.xml.in.h:591
-msgid "SILVERCREST Multimedia Wireless Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:592
-msgid "SK-1300"
-msgstr ""
-
-#: ../rules/base.xml.in.h:593
-msgid "SK-2500"
-msgstr ""
-
-#: ../rules/base.xml.in.h:594
-msgid "SK-6200"
-msgstr ""
-
-#: ../rules/base.xml.in.h:595
-msgid "SK-7100"
-msgstr ""
-
-#: ../rules/base.xml.in.h:596 ../rules/base.extras.xml.in.h:9
-msgid "SRB"
-msgstr ""
-
-#: ../rules/base.xml.in.h:597
-msgid "SVEN Ergonomic 2500"
-msgstr ""
-
-#: ../rules/base.xml.in.h:598
-msgid "SVEN Slim 303"
-msgstr ""
-
-#: ../rules/base.xml.in.h:599
-msgid "Samsung SDM 4500P"
-msgstr ""
-
-#: ../rules/base.xml.in.h:600
-msgid "Samsung SDM 4510P"
-msgstr ""
-
-#: ../rules/base.xml.in.h:601
-msgid "Scroll Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:602
-msgid "Secwepemctsin"
-msgstr ""
-
-#: ../rules/base.xml.in.h:603
-msgid "Semi-colon on third level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:604
-msgid "Sen"
-msgstr ""
-
-#: ../rules/base.xml.in.h:605
-msgid "Senegal"
-msgstr ""
-
-#: ../rules/base.xml.in.h:606 ../rules/base.extras.xml.in.h:10
-msgid "Serbia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:607
-msgid "Serbian"
-msgstr ""
-
-#: ../rules/base.xml.in.h:608
-msgid "Shift cancels Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:609
-msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
-msgstr ""
-
-#: ../rules/base.xml.in.h:610
-msgid "Shift with numeric keypad keys works as in MS Windows"
-msgstr ""
-
-#: ../rules/base.xml.in.h:611
-msgid "Shift+Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:612
-msgid "Simple"
-msgstr ""
-
-#: ../rules/base.xml.in.h:613
-msgid "Sindhi"
-msgstr ""
-
-#: ../rules/base.xml.in.h:614
-msgid "Slovakia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:615
-msgid "Slovenia"
-msgstr ""
-
-#: ../rules/base.xml.in.h:616
-msgid "South Africa"
-msgstr ""
-
-#: ../rules/base.xml.in.h:617
-msgid "Southern Uzbek"
-msgstr ""
-
-#: ../rules/base.xml.in.h:618
-msgid "Spain"
-msgstr ""
-
-#: ../rules/base.xml.in.h:619
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
-msgstr ""
-
-#: ../rules/base.xml.in.h:620
-msgid "Sri Lanka"
-msgstr ""
-
-#: ../rules/base.xml.in.h:621
-msgid "Standard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:622
-msgid "Standard (Cedilla)"
-msgstr ""
-
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:624
-msgid "Standard RSTU"
-msgstr ""
-
-#. RSTU 2019-91
-#: ../rules/base.xml.in.h:626
-msgid "Standard RSTU on Russian layout"
-msgstr ""
-
-#: ../rules/base.xml.in.h:627
-msgid "Sun Type 5/6"
-msgstr ""
-
-#: ../rules/base.xml.in.h:628
-msgid "Sun dead keys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:629
-msgid "Super Power Multimedia Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:630
-msgid "Svdvorak"
-msgstr ""
-
-#: ../rules/base.xml.in.h:631
-msgid "Svk"
-msgstr ""
-
-#: ../rules/base.xml.in.h:632
-msgid "Svn"
-msgstr ""
-
-#: ../rules/base.xml.in.h:633
-msgid "Swap Ctrl and Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:634
-msgid "Swap ESC and Caps Lock"
-msgstr ""
-
-#: ../rules/base.xml.in.h:635
-msgid "Swe"
-msgstr ""
-
-#: ../rules/base.xml.in.h:636
-msgid "Sweden"
-msgstr ""
-
-#: ../rules/base.xml.in.h:637
-msgid "Switzerland"
-msgstr ""
-
-#: ../rules/base.xml.in.h:638
-msgid "Symplon PaceBook (tablet PC)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:639
-msgid "Syr"
-msgstr ""
-
-#: ../rules/base.xml.in.h:640
-msgid "Syria"
-msgstr ""
-
-#: ../rules/base.xml.in.h:641
-msgid "Syriac"
-msgstr ""
-
-#: ../rules/base.xml.in.h:642
-msgid "Syriac phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:643
-msgid "TIS-820.2538"
-msgstr ""
-
-#: ../rules/base.xml.in.h:644
-msgid "Tajikistan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:645
-msgid "Tamil"
-msgstr ""
-
-#: ../rules/base.xml.in.h:646
-msgid "Tamil Keyboard with Numerals"
-msgstr ""
-
-#: ../rules/base.xml.in.h:647
-msgid "Tamil TAB Typewriter"
-msgstr ""
-
-#: ../rules/base.xml.in.h:648
-msgid "Tamil TSCII Typewriter"
-msgstr ""
-
-#: ../rules/base.xml.in.h:649
-msgid "Tamil Unicode"
-msgstr ""
-
-#: ../rules/base.xml.in.h:650
-msgid "Tanzania"
-msgstr ""
-
-#: ../rules/base.xml.in.h:651
-msgid "Targa Visionary 811"
-msgstr ""
-
-#: ../rules/base.xml.in.h:652
-msgid "Tatar"
-msgstr ""
-
-#: ../rules/base.xml.in.h:653
-msgid "Telugu"
-msgstr ""
-
-#: ../rules/base.xml.in.h:654
-msgid "Tha"
-msgstr ""
-
-#: ../rules/base.xml.in.h:655
-msgid "Thailand"
-msgstr ""
-
-#: ../rules/base.xml.in.h:656
-msgid "Tibetan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:657
-msgid "Tibetan (with ASCII numerals)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:658
-msgid "Tifinagh"
-msgstr ""
-
-#: ../rules/base.xml.in.h:659
-msgid "Tifinagh alternative"
-msgstr ""
-
-#: ../rules/base.xml.in.h:660
-msgid "Tifinagh alternative phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:661
-msgid "Tifinagh extended"
-msgstr ""
-
-#: ../rules/base.xml.in.h:662
-msgid "Tifinagh extended phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:663
-msgid "Tifinagh phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:664
-msgid "Tilde (~) variant"
-msgstr ""
-
-#: ../rules/base.xml.in.h:665
-msgid "Tjk"
-msgstr ""
-
-#: ../rules/base.xml.in.h:666
-msgid "Tkm"
-msgstr ""
-
-#: ../rules/base.xml.in.h:667
-msgid "To the corresponding key in a Dvorak keyboard."
-msgstr ""
-
-#: ../rules/base.xml.in.h:668
-msgid "To the corresponding key in a Qwerty keyboard."
-msgstr ""
-
-#: ../rules/base.xml.in.h:669
-msgid "Toshiba Satellite S3000"
-msgstr ""
-
-#: ../rules/base.xml.in.h:670
-msgid "Traditional phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:671
-msgid "Trust Direct Access Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:672
-msgid "Trust Slimline"
-msgstr ""
-
-#: ../rules/base.xml.in.h:673
-msgid "Trust Wireless Keyboard Classic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:674
-msgid "Tur"
-msgstr ""
-
-#: ../rules/base.xml.in.h:675
-msgid "Turkey"
-msgstr ""
-
-#: ../rules/base.xml.in.h:676
-msgid "Turkmenistan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:677
-msgid "TypeMatrix EZ-Reach 2020"
-msgstr ""
-
-#: ../rules/base.xml.in.h:678
-msgid "TypeMatrix EZ-Reach 2030 PS2"
-msgstr ""
-
-#: ../rules/base.xml.in.h:679
-msgid "TypeMatrix EZ-Reach 2030 USB"
-msgstr ""
-
-#: ../rules/base.xml.in.h:680
-msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:681
-msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:682
-msgid "Typewriter"
-msgstr ""
-
-#: ../rules/base.xml.in.h:683
-msgid "Typewriter, legacy"
-msgstr ""
-
-#: ../rules/base.xml.in.h:684
-msgid "Tza"
-msgstr ""
-
-#: ../rules/base.xml.in.h:685
-msgid "UCW layout (accented letters only)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:686
-msgid "US Dvorak with CZ UCW support"
-msgstr ""
-
-#: ../rules/base.xml.in.h:687
-msgid "US keyboard with Bosnian digraphs"
-msgstr ""
-
-#: ../rules/base.xml.in.h:688
-msgid "US keyboard with Bosnian letters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:689
-msgid "US keyboard with Croatian digraphs"
-msgstr ""
-
-#: ../rules/base.xml.in.h:690
-msgid "US keyboard with Croatian letters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:691
-msgid "US keyboard with Estonian letters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:692
-msgid "US keyboard with Italian letters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:693
-msgid "US keyboard with Lithuanian letters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:694
-msgid "US keyboard with Slovenian letters"
-msgstr ""
-
-#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:11
-msgid "USA"
-msgstr ""
-
-#: ../rules/base.xml.in.h:696
-msgid "Udmurt"
-msgstr ""
-
-#: ../rules/base.xml.in.h:697
-msgid "Ukr"
-msgstr ""
-
-#: ../rules/base.xml.in.h:698
-msgid "Ukraine"
-msgstr ""
-
-#: ../rules/base.xml.in.h:699
-msgid "Unicode additions (arrows and math operators)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:700
-msgid ""
-"Unicode additions (arrows and math operators). Math operators on default "
-"level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:701
-msgid "UnicodeExpert"
-msgstr ""
-
-#: ../rules/base.xml.in.h:702
-msgid "United Kingdom"
-msgstr ""
-
-#: ../rules/base.xml.in.h:703
-msgid "Unitek KB-1925"
-msgstr ""
-
-#: ../rules/base.xml.in.h:704
-msgid "Urdu, Alternative phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:705
-msgid "Urdu, Phonetic"
-msgstr ""
-
-#: ../rules/base.xml.in.h:706
-msgid "Urdu, Winkeys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:707
-msgid "Use Bosnian digraphs"
-msgstr ""
-
-#: ../rules/base.xml.in.h:708
-msgid "Use Croatian digraphs"
-msgstr ""
-
-#: ../rules/base.xml.in.h:709
-msgid "Use guillemets for quotes"
-msgstr ""
-
-#: ../rules/base.xml.in.h:710
-msgid "Use keyboard LED to show alternative layout"
-msgstr ""
-
-#: ../rules/base.xml.in.h:711
-msgid "Using space key to input non-breakable space character"
-msgstr ""
-
-#: ../rules/base.xml.in.h:712
-msgid "Usual space at any level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:713
-msgid "Uzb"
-msgstr ""
-
-#: ../rules/base.xml.in.h:714
-msgid "Uzbekistan"
-msgstr ""
-
-#: ../rules/base.xml.in.h:715
-msgid "Vietnam"
-msgstr ""
-
-#: ../rules/base.xml.in.h:716
-msgid "ViewSonic KU-306 Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:717
-msgid "Vnm"
-msgstr ""
-
-#: ../rules/base.xml.in.h:718
-msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:719
-msgid ""
-"Wang 724 keypad with unicode additions (arrows and math operators). Math "
-"operators on default level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:720
-msgid "Wang model 724 azerty"
-msgstr ""
-
-#: ../rules/base.xml.in.h:721
-msgid "Western"
-msgstr ""
-
-#: ../rules/base.xml.in.h:722
-msgid "Winbook Model XP5"
-msgstr ""
-
-#: ../rules/base.xml.in.h:723
-msgid "Winkeys"
-msgstr ""
-
-#: ../rules/base.xml.in.h:724
-msgid "With &lt;\\|&gt; key"
-msgstr ""
-
-#: ../rules/base.xml.in.h:725
-msgid "With EuroSign on 5"
-msgstr ""
-
-#: ../rules/base.xml.in.h:726
-msgid "With guillemets"
-msgstr ""
-
-#: ../rules/base.xml.in.h:727
-msgid "Yahoo! Internet Keyboard"
-msgstr ""
-
-#: ../rules/base.xml.in.h:728
-msgid "Yakut"
-msgstr ""
-
-#: ../rules/base.xml.in.h:729
-msgid "Yoruba"
-msgstr ""
-
-#: ../rules/base.xml.in.h:730
-msgid "Z and ZHE swapped"
-msgstr ""
-
-#: ../rules/base.xml.in.h:731
-msgid "Zaf"
-msgstr ""
-
-#: ../rules/base.xml.in.h:732
-msgid "Zero-width non-joiner character at second level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:733
-msgid ""
-"Zero-width non-joiner character at second level, non-breakable space "
-"character at third level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:734
-msgid ""
-"Zero-width non-joiner character at second level, non-breakable space "
-"character at third level, nothing at fourth level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:735
-msgid ""
-"Zero-width non-joiner character at second level, non-breakable space "
-"character at third level, thin non-breakable space at fourth level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:736
-msgid ""
-"Zero-width non-joiner character at second level, non-breakable space "
-"character at third level, zero-width joiner at fourth level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:737
-msgid ""
-"Zero-width non-joiner character at second level, zero-width joiner character "
-"at third level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:738
-msgid ""
-"Zero-width non-joiner character at second level, zero-width joiner character "
-"at third level, non-breakable space character at fourth level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:739
-msgid ""
-"Zero-width non-joiner character at third level, zero-width joiner at fourth "
-"level"
-msgstr ""
-
-#: ../rules/base.xml.in.h:740
-msgid "azerty"
-msgstr ""
-
-#: ../rules/base.xml.in.h:741
-msgid "azerty/digits"
-msgstr ""
-
-#: ../rules/base.xml.in.h:742
-msgid "digits"
-msgstr ""
-
-#: ../rules/base.xml.in.h:743
-msgid "displaced semicolon and quote (obsolete)"
-msgstr ""
-
-#: ../rules/base.xml.in.h:744
-msgid "lyx"
-msgstr ""
-
-#: ../rules/base.xml.in.h:745
-msgid "qwerty"
-msgstr ""
-
-#: ../rules/base.xml.in.h:746
-msgid "qwerty, extended Backslash"
-msgstr ""
-
-#: ../rules/base.xml.in.h:747
-msgid "qwerty/digits"
-msgstr ""
-
-#: ../rules/base.xml.in.h:748
-msgid "qwertz"
-msgstr ""
-
-#: ../rules/base.extras.xml.in.h:1
-msgid "APL"
-msgstr ""
-
-#: ../rules/base.extras.xml.in.h:2
-msgid "Atsina"
-msgstr ""
-
-#: ../rules/base.extras.xml.in.h:3
-msgid "Avestan"
-msgstr ""
-
-#: ../rules/base.extras.xml.in.h:4
-msgid "Combining accents instead of dead keys"
-msgstr ""
-
-#: ../rules/base.extras.xml.in.h:5
-msgid "Couer D'alene Salish"
-msgstr ""
-
-#: ../rules/base.extras.xml.in.h:6
-msgid "International (AltGr Unicode combining)"
-msgstr ""
-
-#: ../rules/base.extras.xml.in.h:7
-msgid "International (AltGr Unicode combining, alternative)"
-msgstr ""
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
+"POT-Creation-Date: 2011-04-03 20:43+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../rules/base.xml.in.h:1
+msgid "&lt;Less/Greater&gt;"
+msgstr ""
+
+#: ../rules/base.xml.in.h:2
+msgid ""
+"&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with "
+"another 3rd-level-chooser)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:3
+msgid ""
+"&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when "
+"pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:4
+msgid ""
+"&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with "
+"another 5th-level-chooser"
+msgstr ""
+
+#: ../rules/base.xml.in.h:5
+msgid ""
+"&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with "
+"another 5th-level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:6
+msgid "A4Tech KB-21"
+msgstr ""
+
+#: ../rules/base.xml.in.h:7
+msgid "A4Tech KBS-8"
+msgstr ""
+
+#: ../rules/base.xml.in.h:8
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr ""
+
+#: ../rules/base.xml.in.h:9
+msgid "ATM/phone-style"
+msgstr ""
+
+#: ../rules/base.xml.in.h:10
+msgid "Acer AirKey V"
+msgstr ""
+
+#: ../rules/base.xml.in.h:11
+msgid "Acer C300"
+msgstr ""
+
+#: ../rules/base.xml.in.h:12
+msgid "Acer Ferrari 4000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:13
+msgid "Acer Laptop"
+msgstr ""
+
+#: ../rules/base.xml.in.h:14
+msgid "Add the standard behavior to Menu key"
+msgstr ""
+
+#: ../rules/base.xml.in.h:15
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:16
+msgid "Adding currency signs to certain keys"
+msgstr ""
+
+#: ../rules/base.xml.in.h:17
+msgid "Advance Scorpius KI"
+msgstr ""
+
+#: ../rules/base.xml.in.h:18
+msgid "Afg"
+msgstr ""
+
+#: ../rules/base.xml.in.h:19
+msgid "Afghani"
+msgstr ""
+
+#: ../rules/base.xml.in.h:20
+msgid "Akan"
+msgstr ""
+
+#: ../rules/base.xml.in.h:21
+msgid "Albanian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:22
+msgid "Alt and Meta are on Alt keys"
+msgstr ""
+
+#: ../rules/base.xml.in.h:23
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:24
+msgid "Alt+Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:25
+msgid "Alt+Ctrl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:26
+msgid "Alt+Shift"
+msgstr ""
+
+#: ../rules/base.xml.in.h:27
+msgid "Alt+Space"
+msgstr ""
+
+#: ../rules/base.xml.in.h:28
+msgid "Alt/Win key behavior"
+msgstr ""
+
+#: ../rules/base.xml.in.h:29
+msgid "Amharic"
+msgstr ""
+
+#: ../rules/base.xml.in.h:30
+msgid "Any Alt key"
+msgstr ""
+
+#: ../rules/base.xml.in.h:31
+msgid "Any Win key"
+msgstr ""
+
+#: ../rules/base.xml.in.h:32
+msgid "Any Win key (while pressed)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:33
+msgid "Apple"
+msgstr ""
+
+#: ../rules/base.xml.in.h:34
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:35
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:36
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:37
+msgid ""
+"Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num "
+"Lock)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:38
+msgid "Apple Laptop"
+msgstr ""
+
+#: ../rules/base.xml.in.h:39
+msgid "Arabic"
+msgstr ""
+
+#: ../rules/base.xml.in.h:40
+msgid "Arabic (Buckwalter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:41
+msgid "Arabic (Morocco)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:42
+msgid "Arabic (Pakistan)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:43
+msgid "Arabic (Syria)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:44
+msgid "Arabic (azerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:45
+msgid "Arabic (azerty/digits)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:46
+msgid "Arabic (digits)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:47
+msgid "Arabic (qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:48
+msgid "Arabic (qwerty/digits)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:49
+msgid "Armenian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:50
+msgid "Armenian (alternative eastern)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:51
+msgid "Armenian (alternative phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:52
+msgid "Armenian (eastern)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:53
+msgid "Armenian (phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:54
+msgid "Armenian (western)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:55
+msgid "Asus Laptop"
+msgstr ""
+
+#: ../rules/base.xml.in.h:56
+msgid "At bottom left"
+msgstr ""
+
+#: ../rules/base.xml.in.h:57
+msgid "At left of 'A'"
+msgstr ""
+
+#: ../rules/base.xml.in.h:58
+msgid "Avatime"
+msgstr ""
+
+#: ../rules/base.xml.in.h:59
+msgid "Azerbaijan (Cyrillic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:60
+msgid "Azerbaijani"
+msgstr ""
+
+#: ../rules/base.xml.in.h:61
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:62
+msgid "BTC 5090"
+msgstr ""
+
+#: ../rules/base.xml.in.h:63
+msgid "BTC 5113RF Multimedia"
+msgstr ""
+
+#: ../rules/base.xml.in.h:64
+msgid "BTC 5126T"
+msgstr ""
+
+#: ../rules/base.xml.in.h:65
+msgid "BTC 6301URF"
+msgstr ""
+
+#: ../rules/base.xml.in.h:66
+msgid "BTC 9000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:67
+msgid "BTC 9000A"
+msgstr ""
+
+#: ../rules/base.xml.in.h:68
+msgid "BTC 9001AH"
+msgstr ""
+
+#: ../rules/base.xml.in.h:69
+msgid "BTC 9019U"
+msgstr ""
+
+#: ../rules/base.xml.in.h:70
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr ""
+
+#: ../rules/base.xml.in.h:71
+msgid "Backslash"
+msgstr ""
+
+#: ../rules/base.xml.in.h:72
+msgid ""
+"Backslash chooses 3rd level, latches when pressed together with another 3rd-"
+"level-chooser)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:73
+msgid "Bambara"
+msgstr ""
+
+#: ../rules/base.xml.in.h:74
+msgid "Belarusian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:75
+msgid "Belarusian (Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:76
+msgid "Belarusian (legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:77
+msgid "Belgian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:78
+msgid "Belgian (ISO alternate)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:79
+msgid "Belgian (Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:80
+msgid "Belgian (Wang model 724 azerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:81
+msgid "Belgian (alternative)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:82
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:83
+msgid "Belgian (alternative, latin-9 only)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:84
+msgid "Belgian (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:85
+msgid "BenQ X-Touch"
+msgstr ""
+
+#: ../rules/base.xml.in.h:86
+msgid "BenQ X-Touch 730"
+msgstr ""
+
+#: ../rules/base.xml.in.h:87
+msgid "BenQ X-Touch 800"
+msgstr ""
+
+#: ../rules/base.xml.in.h:88
+msgid "Bengali"
+msgstr ""
+
+#: ../rules/base.xml.in.h:89
+msgid "Bengali (Probhat)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:90
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:91
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:92
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:93
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:94
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:95
+msgid "Berber (Morocco, Tifinagh)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:96
+msgid "Bosnian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:97
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:98
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:99
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:100
+msgid "Bosnian (use guillemets for quotes)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:101
+msgid "Both Alt keys together"
+msgstr ""
+
+#: ../rules/base.xml.in.h:102
+msgid "Both Ctrl keys together"
+msgstr ""
+
+#: ../rules/base.xml.in.h:103
+msgid "Both Shift keys together"
+msgstr ""
+
+#: ../rules/base.xml.in.h:104
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr ""
+
+#: ../rules/base.xml.in.h:105
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:106
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:107
+msgid "Braille"
+msgstr ""
+
+#: ../rules/base.xml.in.h:108
+msgid "Braille (left hand)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:109
+msgid "Braille (right hand)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:110
+msgid "Brother Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:111
+msgid "Bulgarian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:112
+msgid "Bulgarian (new phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:113
+msgid "Bulgarian (traditional phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:114
+msgid "Burmese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:115
+msgid "Canadian Multilingual"
+msgstr ""
+
+#: ../rules/base.xml.in.h:116
+msgid "Canadian Multilingual (first part)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:117
+msgid "Canadian Multilingual (second part)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:118
+msgid "Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:119
+msgid ""
+"Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-"
+"level-chooser)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:120
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:121
+msgid ""
+"Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr ""
+
+#: ../rules/base.xml.in.h:122
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:123
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:124
+msgid "Caps Lock is disabled"
+msgstr ""
+
+#: ../rules/base.xml.in.h:125
+msgid "Caps Lock key behavior"
+msgstr ""
+
+#: ../rules/base.xml.in.h:126
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr ""
+
+#: ../rules/base.xml.in.h:127
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr ""
+
+#: ../rules/base.xml.in.h:128
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:129
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:130
+msgid "Catalan"
+msgstr ""
+
+#: ../rules/base.xml.in.h:131
+msgid "Cherokee"
+msgstr ""
+
+#: ../rules/base.xml.in.h:132
+msgid "Cherry B.UNLIMITED"
+msgstr ""
+
+#: ../rules/base.xml.in.h:133
+msgid "Cherry Blue Line CyBo@rd"
+msgstr ""
+
+#: ../rules/base.xml.in.h:134
+msgid "Cherry Blue Line CyBo@rd (alternate option)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:135
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr ""
+
+#: ../rules/base.xml.in.h:136
+msgid "Cherry CyMotion Expert"
+msgstr ""
+
+#: ../rules/base.xml.in.h:137
+msgid "Cherry CyMotion Master Linux"
+msgstr ""
+
+#: ../rules/base.xml.in.h:138
+msgid "Cherry CyMotion Master XPress"
+msgstr ""
+
+#: ../rules/base.xml.in.h:139
+msgid "Chicony Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:140
+msgid "Chicony KB-9885"
+msgstr ""
+
+#: ../rules/base.xml.in.h:141
+msgid "Chicony KU-0108"
+msgstr ""
+
+#: ../rules/base.xml.in.h:142
+msgid "Chicony KU-0420"
+msgstr ""
+
+#: ../rules/base.xml.in.h:143
+msgid "Chinese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:144
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:145
+msgid "Chinese (Tibetan)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:146
+msgid "Chinese (Uyghur)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:147
+msgid "Classmate PC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:148
+msgid "Compaq Easy Access Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:149
+msgid "Compaq Internet Keyboard (13 keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:150
+msgid "Compaq Internet Keyboard (18 keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:151
+msgid "Compaq Internet Keyboard (7 keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:152
+msgid "Compaq iPaq Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:153
+msgid "Compose key position"
+msgstr ""
+
+#: ../rules/base.xml.in.h:154
+msgid "Control + Alt + Backspace"
+msgstr ""
+
+#: ../rules/base.xml.in.h:155
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr ""
+
+#: ../rules/base.xml.in.h:156
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:157
+msgid "Creative Desktop Wireless 7000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:158
+msgid "Croatian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:159
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:160
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:161
+msgid "Croatian (Use Croatian digraphs)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:162
+msgid "Croatian (Use guillemets for quotes)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:163
+msgid "Ctrl key position"
+msgstr ""
+
+#: ../rules/base.xml.in.h:164
+msgid "Ctrl+Shift"
+msgstr ""
+
+#: ../rules/base.xml.in.h:165
+msgid "Czech"
+msgstr ""
+
+#: ../rules/base.xml.in.h:166
+msgid "Czech (UCW layout accented letters only)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:167
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:168
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:169
+msgid "Czech (qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:170
+msgid "Czech (qwerty, extended Backslash)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:171
+msgid "DTK2000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:172
+msgid "Danish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:173
+msgid "Danish (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:174
+msgid "Danish (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:175
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:176
+msgid "Danish (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:177
+msgid "Default numeric keypad keys"
+msgstr ""
+
+#: ../rules/base.xml.in.h:178
+msgid "Dell"
+msgstr ""
+
+#: ../rules/base.xml.in.h:179
+msgid "Dell 101-key PC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:180
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr ""
+
+#: ../rules/base.xml.in.h:181
+msgid "Dell Laptop/notebook Precision M series"
+msgstr ""
+
+#: ../rules/base.xml.in.h:182
+msgid "Dell Latitude series laptop"
+msgstr ""
+
+#: ../rules/base.xml.in.h:183
+msgid "Dell Precision M65"
+msgstr ""
+
+#: ../rules/base.xml.in.h:184
+msgid "Dell SK-8125"
+msgstr ""
+
+#: ../rules/base.xml.in.h:185
+msgid "Dell SK-8135"
+msgstr ""
+
+#: ../rules/base.xml.in.h:186
+msgid "Dell USB Multimedia Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:187
+msgid "Dexxa Wireless Desktop Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:188
+msgid "Dhivehi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:189
+msgid "Diamond 9801 / 9802 series"
+msgstr ""
+
+#: ../rules/base.xml.in.h:190
+msgid "Dutch"
+msgstr ""
+
+#: ../rules/base.xml.in.h:191
+msgid "Dutch (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:192
+msgid "Dutch (Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:193
+msgid "Dutch (standard)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:194
+msgid "Dzongkha"
+msgstr ""
+
+#: ../rules/base.xml.in.h:195
+msgid "Enable extra typographic characters"
+msgstr ""
+
+#: ../rules/base.xml.in.h:196
+msgid "English (Canada)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:197
+msgid "English (Colemak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:198
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:199
+msgid "English (Dvorak international with dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:200
+msgid "English (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:201
+msgid "English (Ghana)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:202
+msgid "English (Ghana, GILLBT)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:203
+msgid "English (Ghana, multilingual)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:204
+msgid "English (India, with RupeeSign)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:205
+msgid "English (Macintosh)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:206
+msgid "English (Mali, USA Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:207
+msgid "English (Mali, USA international)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:208
+msgid "English (Nigeria)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:209
+msgid "English (South Africa)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:210
+msgid "English (UK)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:211
+msgid "English (UK, Colemak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:212
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:213
+msgid "English (UK, Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:214
+msgid "English (UK, Mac international)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:215
+msgid "English (UK, Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:216
+msgid "English (UK, extended, WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:217
+msgid "English (UK, international with dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:218
+msgid "English (US)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:219
+msgid "English (US, alternative international)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:220
+msgid "English (US, international with dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:221
+msgid "English (US, with euro on 5)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:222
+msgid "English (classic Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:223
+msgid "English (international AltGr dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:224
+msgid "English (layout toggle on multiply/divide key)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:225
+msgid "English (left handed Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:226
+msgid "English (programmer Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:227
+msgid "English (right handed Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:228
+msgid "Ennyah DKB-1008"
+msgstr ""
+
+#: ../rules/base.xml.in.h:229
+msgid "Enter on keypad"
+msgstr ""
+
+#: ../rules/base.xml.in.h:230
+msgid "Esperanto"
+msgstr ""
+
+#: ../rules/base.xml.in.h:231
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:232
+msgid "Estonian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:233
+msgid "Estonian (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:234
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:235
+msgid "Estonian (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:236
+msgid "Euro on 2"
+msgstr ""
+
+#: ../rules/base.xml.in.h:237
+msgid "Euro on 4"
+msgstr ""
+
+#: ../rules/base.xml.in.h:238
+msgid "Euro on 5"
+msgstr ""
+
+#: ../rules/base.xml.in.h:239
+msgid "Euro on E"
+msgstr ""
+
+#: ../rules/base.xml.in.h:240
+msgid "Everex STEPnote"
+msgstr ""
+
+#: ../rules/base.xml.in.h:241
+msgid "Ewe"
+msgstr ""
+
+#: ../rules/base.xml.in.h:242
+msgid "FL90"
+msgstr ""
+
+#: ../rules/base.xml.in.h:243
+msgid "Faroese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:244
+msgid "Faroese (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:245
+msgid "Filipino"
+msgstr ""
+
+#: ../rules/base.xml.in.h:246
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:247
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:248
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:249
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:250
+msgid "Filipino (Colemak Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:251
+msgid "Filipino (Colemak Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:252
+msgid "Filipino (Dvorak Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:253
+msgid "Filipino (QWERTY Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:254
+msgid "Finnish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:255
+msgid "Finnish (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr ""
+
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
+#: ../rules/base.xml.in.h:261
+msgid "Four-level key with abstract separators"
+msgstr ""
+
+#: ../rules/base.xml.in.h:262
+msgid "Four-level key with comma"
+msgstr ""
+
+#: ../rules/base.xml.in.h:263
+msgid "Four-level key with dot"
+msgstr ""
+
+#: ../rules/base.xml.in.h:264
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr ""
+
+#: ../rules/base.xml.in.h:265
+msgid "Four-level key with momayyez"
+msgstr ""
+
+#: ../rules/base.xml.in.h:266
+msgid "French"
+msgstr ""
+
+#: ../rules/base.xml.in.h:267
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:268
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:269
+msgid "French (Breton)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:270
+msgid "French (Canada, Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:271
+msgid "French (Canada, legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:272
+msgid "French (Democratic Republic of the Congo)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:273
+msgid "French (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:274
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:275
+msgid "French (Guinea)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:276
+msgid "French (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:277
+msgid "French (Mali, alternative)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:278
+msgid "French (Morocco)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:279
+msgid "French (Occitan)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:280
+msgid "French (Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:281
+msgid "French (Switzerland)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:282
+msgid "French (Switzerland, Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:283
+msgid "French (Switzerland, Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:284
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:285
+msgid "French (alternative)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:286
+msgid "French (alternative, Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:287
+msgid "French (alternative, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:288
+msgid "French (alternative, latin-9 only)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:289
+msgid "French (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:290
+msgid "French (legacy alternative)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:291
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:292
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:293
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr ""
+
+#: ../rules/base.xml.in.h:294
+msgid "Fula"
+msgstr ""
+
+#: ../rules/base.xml.in.h:295
+msgid "GBr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:296
+msgid "Ga"
+msgstr ""
+
+#: ../rules/base.xml.in.h:297
+msgid "Generic 101-key PC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:298
+msgid "Generic 102-key (Intl) PC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:299
+msgid "Generic 104-key PC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:300
+msgid "Generic 105-key (Intl) PC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:301
+msgid "Genius Comfy KB-12e"
+msgstr ""
+
+#: ../rules/base.xml.in.h:302
+msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
+msgstr ""
+
+#: ../rules/base.xml.in.h:303
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr ""
+
+#: ../rules/base.xml.in.h:304
+msgid "Genius KB-19e NB"
+msgstr ""
+
+#: ../rules/base.xml.in.h:305
+msgid "Genius KKB-2050HS"
+msgstr ""
+
+#: ../rules/base.xml.in.h:306
+msgid "Georgian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:307
+msgid "Georgian (MESS)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:308
+msgid "Georgian (Ossetian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:309
+msgid "Georgian (ergonomic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:310
+msgid "German"
+msgstr ""
+
+#: ../rules/base.xml.in.h:311
+msgid "German (Austria)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:312
+msgid "German (Austria, Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:313
+msgid "German (Austria, Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:314
+msgid "German (Austria, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:315
+msgid "German (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:316
+msgid "German (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:317
+msgid "German (Mac, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:318
+msgid "German (Neo 2)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:319
+msgid "German (Romanian keyboard with German letters)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:320
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:321
+msgid "German (Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:322
+msgid "German (Switzerland, Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:323
+msgid "German (Switzerland, Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:324
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:325
+msgid "German (dead acute)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:326
+msgid "German (dead grave acute)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:327
+msgid "German (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:328
+msgid "German (lower Sorbian qwertz)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:329
+msgid "German (lower Sorbian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:330
+msgid "German (qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:331
+msgid "Greek"
+msgstr ""
+
+#: ../rules/base.xml.in.h:332
+msgid "Greek (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:333
+msgid "Greek (extended)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:334
+msgid "Greek (polytonic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:335
+msgid "Greek (simple)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:336
+msgid "Gujarati"
+msgstr ""
+
+#: ../rules/base.xml.in.h:337
+msgid "Gyration"
+msgstr ""
+
+#: ../rules/base.xml.in.h:338
+msgid "HTC Dream"
+msgstr ""
+
+#: ../rules/base.xml.in.h:339
+msgid "Happy Hacking Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:340
+msgid "Happy Hacking Keyboard for Mac"
+msgstr ""
+
+#: ../rules/base.xml.in.h:341
+msgid "Hausa"
+msgstr ""
+
+#: ../rules/base.xml.in.h:342
+msgid "Hebrew"
+msgstr ""
+
+#: ../rules/base.xml.in.h:343
+msgid "Hebrew (Phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:344
+msgid "Hebrew (Tiro)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:345
+msgid "Hebrew (lyx)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:346
+msgid "Hewlett-Packard Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr ""
+
+#: ../rules/base.xml.in.h:348
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr ""
+
+#: ../rules/base.xml.in.h:349
+msgid "Hewlett-Packard Omnibook 5xx"
+msgstr ""
+
+#: ../rules/base.xml.in.h:350
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr ""
+
+#: ../rules/base.xml.in.h:351
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:352
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr ""
+
+#: ../rules/base.xml.in.h:353
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:354
+msgid "Hewlett-Packard Pavilion ZT11xx"
+msgstr ""
+
+#: ../rules/base.xml.in.h:355
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr ""
+
+#: ../rules/base.xml.in.h:356
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:357
+msgid "Hewlett-Packard nx9020"
+msgstr ""
+
+#: ../rules/base.xml.in.h:358
+msgid "Hexadecimal"
+msgstr ""
+
+#: ../rules/base.xml.in.h:359
+msgid "Hindi (Bolnagri)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:360
+msgid "Hindi (Wx)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:361
+msgid "Honeywell Euroboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:362
+msgid "Htc Dream phone"
+msgstr ""
+
+#: ../rules/base.xml.in.h:363
+msgid "Hungarian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:364
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:365
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:366
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:367
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:368
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:369
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:370
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:371
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:372
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:373
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:374
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:375
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:376
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:377
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:378
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:379
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:380
+msgid "Hungarian (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:381
+msgid "Hungarian (qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:382
+msgid "Hungarian (standard)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:383
+msgid "Hyper is mapped to Win-keys"
+msgstr ""
+
+#: ../rules/base.xml.in.h:384
+msgid "IBM Rapid Access"
+msgstr ""
+
+#: ../rules/base.xml.in.h:385
+msgid "IBM Rapid Access II"
+msgstr ""
+
+#: ../rules/base.xml.in.h:386
+msgid "IBM Space Saver"
+msgstr ""
+
+#: ../rules/base.xml.in.h:387
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr ""
+
+#: ../rules/base.xml.in.h:388
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr ""
+
+#: ../rules/base.xml.in.h:389
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr ""
+
+#: ../rules/base.xml.in.h:390
+msgid "Icelandic"
+msgstr ""
+
+#: ../rules/base.xml.in.h:391
+msgid "Icelandic (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:392
+msgid "Icelandic (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:393
+msgid "Icelandic (Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:394
+msgid "Icelandic (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:395
+msgid "Igbo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:396
+msgid "Indian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:397
+msgid "Inuktitut"
+msgstr ""
+
+#: ../rules/base.xml.in.h:398
+msgid "Iraqi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:399
+msgid "Irish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:400
+msgid "Irish (CloGaelach)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:401
+msgid "Irish (Ogham IS434)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:402
+msgid "Irish (Ogham)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:403
+msgid "Irish (UnicodeExpert)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:404
+msgid "Italian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:405
+msgid "Italian (Georgian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:406
+msgid "Italian (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:407
+msgid "Italian (US keyboard with Italian letters)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:408
+msgid "Italian (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:409
+msgid "Japanese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:410
+msgid "Japanese (Kana 86)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:411
+msgid "Japanese (Kana)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:412
+msgid "Japanese (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:413
+msgid "Japanese (OADG 109A)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:414
+msgid "Japanese (PC-98xx Series)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:415
+msgid "Japanese keyboard options"
+msgstr ""
+
+#: ../rules/base.xml.in.h:416
+msgid "Kana Lock key is locking"
+msgstr ""
+
+#: ../rules/base.xml.in.h:417
+msgid "Kannada"
+msgstr ""
+
+#: ../rules/base.xml.in.h:418
+msgid "Kazakh"
+msgstr ""
+
+#: ../rules/base.xml.in.h:419
+msgid "Kazakh (with Russian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:420
+msgid "Key sequence to kill the X server"
+msgstr ""
+
+#: ../rules/base.xml.in.h:421
+msgid "Key to choose 3rd level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:422
+msgid "Key to choose 5th level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:423
+msgid "Key(s) to change layout"
+msgstr ""
+
+#: ../rules/base.xml.in.h:424
+msgid "Keytronic FlexPro"
+msgstr ""
+
+#: ../rules/base.xml.in.h:425
+msgid "Khmer (Cambodian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:426
+msgid "Kikuyu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:427
+msgid "Kinesis"
+msgstr ""
+
+#: ../rules/base.xml.in.h:428
+msgid "Korean"
+msgstr ""
+
+#: ../rules/base.xml.in.h:429
+msgid "Korean (101/104 key compatible)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:430
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:431
+msgid "Kurdish (Iran, F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:432
+msgid "Kurdish (Iran, Latin Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:433
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:434
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:435
+msgid "Kurdish (Iraq, F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:436
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:437
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:438
+msgid "Kurdish (Syria, F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:439
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:440
+msgid "Kurdish (Syria, Latin Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:441
+msgid "Kurdish (Turkey, F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:442
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:443
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:444
+msgid "Kutenai"
+msgstr ""
+
+#: ../rules/base.xml.in.h:445
+msgid "Kyrgyz"
+msgstr ""
+
+#: ../rules/base.xml.in.h:446
+msgid "Kyrgyz (phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:447
+msgid "Lao"
+msgstr ""
+
+#: ../rules/base.xml.in.h:448
+msgid "Lao (STEA proposed standard layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:449
+msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:450
+msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:451
+msgid "Laptop/notebook eMachines m68xx"
+msgstr ""
+
+#: ../rules/base.xml.in.h:452
+msgid "Latvian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:453
+msgid "Latvian (Apostrophe ' variant)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:454
+msgid "Latvian (F variant)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:455
+msgid "Latvian (Tilde ~ variant)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:456
+msgid "Left Alt"
+msgstr ""
+
+#: ../rules/base.xml.in.h:457
+msgid "Left Alt (while pressed)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:458
+msgid "Left Alt is swapped with Left Win"
+msgstr ""
+
+#: ../rules/base.xml.in.h:459
+msgid "Left Ctrl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:460
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:461
+msgid "Left Ctrl+Left Shift"
+msgstr ""
+
+#: ../rules/base.xml.in.h:462
+msgid "Left Shift"
+msgstr ""
+
+#: ../rules/base.xml.in.h:463
+msgid "Left Win"
+msgstr ""
+
+#: ../rules/base.xml.in.h:464
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:465
+msgid "Left Win (while pressed)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:466
+msgid ""
+"Left Win chooses 5th level, locks when pressed together with another 5th-"
+"level-chooser"
+msgstr ""
+
+#: ../rules/base.xml.in.h:467
+msgid ""
+"Left Win chooses 5th level, locks when pressed together with another 5th-"
+"level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:468
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:469
+msgid "Legacy"
+msgstr ""
+
+#: ../rules/base.xml.in.h:470
+msgid "Legacy Wang 724"
+msgstr ""
+
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
+#: ../rules/base.xml.in.h:472
+msgid "Legacy key with comma"
+msgstr ""
+
+#: ../rules/base.xml.in.h:473
+msgid "Legacy key with dot"
+msgstr ""
+
+#: ../rules/base.xml.in.h:474
+msgid "Lithuanian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:475
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:476
+msgid "Lithuanian (LEKP)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:477
+msgid "Lithuanian (LEKPa)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:478
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:479
+msgid "Lithuanian (standard)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:480
+msgid "Logitech Access Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:481
+msgid "Logitech Cordless Desktop"
+msgstr ""
+
+#: ../rules/base.xml.in.h:482
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:483
+msgid "Logitech Cordless Desktop EX110"
+msgstr ""
+
+#: ../rules/base.xml.in.h:484
+msgid "Logitech Cordless Desktop LX-300"
+msgstr ""
+
+#: ../rules/base.xml.in.h:485
+msgid "Logitech Cordless Desktop Navigator"
+msgstr ""
+
+#: ../rules/base.xml.in.h:486
+msgid "Logitech Cordless Desktop Optical"
+msgstr ""
+
+#: ../rules/base.xml.in.h:487
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:488
+msgid "Logitech Cordless Desktop iTouch"
+msgstr ""
+
+#: ../rules/base.xml.in.h:489
+msgid "Logitech Cordless Freedom/Desktop Navigator"
+msgstr ""
+
+#: ../rules/base.xml.in.h:490
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr ""
+
+#: ../rules/base.xml.in.h:491
+msgid "Logitech Generic Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:492
+msgid "Logitech Internet 350 Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:493
+msgid "Logitech Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:494
+msgid "Logitech Internet Navigator Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:495
+msgid "Logitech Media Elite Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:496
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:497
+msgid "Logitech Ultra-X Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:498
+msgid "Logitech diNovo Edge Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:499
+msgid "Logitech diNovo Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:500
+msgid "Logitech iTouch"
+msgstr ""
+
+#: ../rules/base.xml.in.h:501
+msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:502
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr ""
+
+#: ../rules/base.xml.in.h:503
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:504
+msgid "MacBook/MacBook Pro"
+msgstr ""
+
+#: ../rules/base.xml.in.h:505
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:506
+msgid "Macedonian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:507
+msgid "Macedonian (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:508
+msgid "Macintosh"
+msgstr ""
+
+#: ../rules/base.xml.in.h:509
+msgid "Macintosh Old"
+msgstr ""
+
+#: ../rules/base.xml.in.h:510
+msgid "Make Caps Lock an additional Backspace"
+msgstr ""
+
+#: ../rules/base.xml.in.h:511
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr ""
+
+#: ../rules/base.xml.in.h:512
+msgid "Make Caps Lock an additional Ctrl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:513
+msgid "Make Caps Lock an additional ESC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:514
+msgid "Make Caps Lock an additional Hyper"
+msgstr ""
+
+#: ../rules/base.xml.in.h:515
+msgid "Make Caps Lock an additional Num Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:516
+msgid "Make Caps Lock an additional Super"
+msgstr ""
+
+#: ../rules/base.xml.in.h:517
+msgid "Malayalam"
+msgstr ""
+
+#: ../rules/base.xml.in.h:518
+msgid "Malayalam (Lalitha)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:519
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:520
+msgid "Maltese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:521
+msgid "Maltese (with US layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:522
+msgid "Memorex MX1998"
+msgstr ""
+
+#: ../rules/base.xml.in.h:523
+msgid "Memorex MX2500 EZ-Access Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:524
+msgid "Memorex MX2750"
+msgstr ""
+
+#: ../rules/base.xml.in.h:525
+msgid "Menu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:526
+msgid "Meta is mapped to Left Win"
+msgstr ""
+
+#: ../rules/base.xml.in.h:527
+msgid "Meta is mapped to Win keys"
+msgstr ""
+
+#: ../rules/base.xml.in.h:528
+msgid "Meta on Left Ctrl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:529
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:530
+msgid "Microsoft Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:531
+msgid "Microsoft Internet Keyboard Pro, Swedish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:532
+msgid "Microsoft Natural"
+msgstr ""
+
+#: ../rules/base.xml.in.h:533
+msgid "Microsoft Natural Keyboard Elite"
+msgstr ""
+
+#: ../rules/base.xml.in.h:534
+msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
+msgstr ""
+
+#: ../rules/base.xml.in.h:535
+msgid "Microsoft Natural Keyboard Pro OEM"
+msgstr ""
+
+#: ../rules/base.xml.in.h:536
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr ""
+
+#: ../rules/base.xml.in.h:537
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:538
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:539
+msgid "Microsoft Office Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:540
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr ""
+
+#: ../rules/base.xml.in.h:541
+msgid "Miscellaneous compatibility options"
+msgstr ""
+
+#: ../rules/base.xml.in.h:542
+msgid "Mongolian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:543
+msgid "Montenegrin"
+msgstr ""
+
+#: ../rules/base.xml.in.h:544
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:545
+msgid "Montenegrin (Cyrillic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:546
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:547
+msgid "Montenegrin (Latin qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:548
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:549
+msgid "Montenegrin (Latin unicode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:550
+msgid "Montenegrin (Latin with guillemets)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:551
+msgid "Māori"
+msgstr ""
+
+#: ../rules/base.xml.in.h:552
+msgid "NICOLA-F style Backspace"
+msgstr ""
+
+#: ../rules/base.xml.in.h:553
+msgid "Nepali"
+msgstr ""
+
+#: ../rules/base.xml.in.h:554
+msgid "Non-breakable space character at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:555
+msgid ""
+"Non-breakable space character at fourth level, thin non-breakable space "
+"character at sixth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:556
+msgid ""
+"Non-breakable space character at fourth level, thin non-breakable space "
+"character at sixth level (via Ctrl+Shift)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:557
+msgid "Non-breakable space character at second level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:558
+msgid "Non-breakable space character at third level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:559
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:560
+msgid ""
+"Non-breakable space character at third level, thin non-breakable space "
+"character at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:561
+msgid "Northgate OmniKey 101"
+msgstr ""
+
+#: ../rules/base.xml.in.h:562
+msgid "Norwegian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:563
+msgid "Norwegian (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:564
+msgid "Norwegian (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:565
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:566
+msgid "Norwegian (Northern Saami"
+msgstr ""
+
+#: ../rules/base.xml.in.h:567
+msgid "Norwegian (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:568
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:569
+msgid "Num Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:570
+msgid "Numeric keypad delete key behaviour"
+msgstr ""
+
+#: ../rules/base.xml.in.h:571
+msgid "Numeric keypad keys work as with Mac"
+msgstr ""
+
+#: ../rules/base.xml.in.h:572
+msgid "Numeric keypad layout selection"
+msgstr ""
+
+#: ../rules/base.xml.in.h:573
+msgid "OLPC"
+msgstr ""
+
+#: ../rules/base.xml.in.h:574
+msgid "Oriya"
+msgstr ""
+
+#: ../rules/base.xml.in.h:575
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:576
+msgid "PC-98xx Series"
+msgstr ""
+
+#: ../rules/base.xml.in.h:577
+msgid "Pashto"
+msgstr ""
+
+#: ../rules/base.xml.in.h:578
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:579
+msgid "Pause"
+msgstr ""
+
+#: ../rules/base.xml.in.h:580
+msgid "Persian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:581
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:582
+msgid "Persian (with Persian Keypad)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:583
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:584
+msgid "Polish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:585
+msgid "Polish (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:586
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:587
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:588
+msgid "Polish (Kashubian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:589
+msgid "Polish (programmer Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:590
+msgid "Polish (qwertz)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:591
+msgid "Portuguese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:592
+msgid "Portuguese (Brazil)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:593
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:594
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:595
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:596
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:597
+msgid "Portuguese (Brazil, nativo)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:598
+msgid "Portuguese (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:599
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:600
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:601
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:602
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:603
+msgid "Portuguese (Nativo)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:604
+msgid "Portuguese (Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:605
+msgid "Portuguese (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:606
+msgid "Propeller Voyager (KTEZ-1000)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:607
+msgid "PrtSc"
+msgstr ""
+
+#: ../rules/base.xml.in.h:608
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:609
+msgid "Punjabi (Gurmukhi)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:610
+msgid "QTronix Scorpius 98N+"
+msgstr ""
+
+#: ../rules/base.xml.in.h:611
+msgid "Right Alt"
+msgstr ""
+
+#: ../rules/base.xml.in.h:612
+msgid "Right Alt (while pressed)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:613
+msgid ""
+"Right Alt chooses 5th level and activates level5-Lock when pressed together "
+"with another 5th-level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:614
+msgid ""
+"Right Alt chooses 5th level, locks when pressed together with another 5th-"
+"level-chooser"
+msgstr ""
+
+#: ../rules/base.xml.in.h:615
+msgid ""
+"Right Alt chooses 5th level, locks when pressed together with another 5th-"
+"level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:616
+msgid "Right Alt key never chooses 3rd level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:617
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr ""
+
+#: ../rules/base.xml.in.h:618
+msgid "Right Ctrl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:619
+msgid "Right Ctrl (while pressed)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:620
+msgid "Right Ctrl as Right Alt"
+msgstr ""
+
+#: ../rules/base.xml.in.h:621
+msgid "Right Ctrl is mapped to Menu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:622
+msgid "Right Ctrl+Right Shift"
+msgstr ""
+
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr ""
+
+#: ../rules/base.xml.in.h:624
+msgid "Right Win"
+msgstr ""
+
+#: ../rules/base.xml.in.h:625
+msgid "Right Win (while pressed)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:626
+msgid ""
+"Right Win chooses 5th level, locks when pressed together with another 5th-"
+"level-chooser"
+msgstr ""
+
+#: ../rules/base.xml.in.h:627
+msgid ""
+"Right Win chooses 5th level, locks when pressed together with another 5th-"
+"level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:628
+msgid "Romanian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:629
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:630
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:631
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:632
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:633
+msgid "Romanian (WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:634
+msgid "Romanian (cedilla)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:635
+msgid "Romanian (standard cedilla)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:636
+msgid "Romanian (standard)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:637
+msgid "Rupee on 4"
+msgstr ""
+
+#: ../rules/base.xml.in.h:638
+msgid "Russian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:639
+msgid "Russian (Bashkirian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:640
+msgid "Russian (Chuvash Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:642
+msgid "Russian (DOS)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:644
+msgid "Russian (Germany, phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:645
+msgid "Russian (Kalmyk)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:646
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:647
+msgid "Russian (Komi)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:648
+msgid "Russian (Mari)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:649
+msgid "Russian (Ossetian, WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:650
+msgid "Russian (Ossetian, legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:651
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:652
+msgid "Russian (Serbian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:653
+msgid "Russian (Sweden, phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:654
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:655
+msgid "Russian (Tatar)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:656
+msgid "Russian (US, phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:657
+msgid "Russian (Udmurt)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:658
+msgid "Russian (Yakut)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:659
+msgid "Russian (legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:660
+msgid "Russian (phonetic WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:661
+msgid "Russian (phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:662
+msgid "Russian (typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:663
+msgid "Russian (typewriter, legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:664
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:665
+msgid "SK-1300"
+msgstr ""
+
+#: ../rules/base.xml.in.h:666
+msgid "SK-2500"
+msgstr ""
+
+#: ../rules/base.xml.in.h:667
+msgid "SK-6200"
+msgstr ""
+
+#: ../rules/base.xml.in.h:668
+msgid "SK-7100"
+msgstr ""
+
+#: ../rules/base.xml.in.h:669
+msgid "SVEN Ergonomic 2500"
+msgstr ""
+
+#: ../rules/base.xml.in.h:670
+msgid "SVEN Slim 303"
+msgstr ""
+
+#: ../rules/base.xml.in.h:671
+msgid "Saisiyat (Taiwan)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:672
+msgid "Samsung SDM 4500P"
+msgstr ""
+
+#: ../rules/base.xml.in.h:673
+msgid "Samsung SDM 4510P"
+msgstr ""
+
+#: ../rules/base.xml.in.h:674
+msgid "Sanwa Supply SKB-KG3"
+msgstr ""
+
+#: ../rules/base.xml.in.h:675
+msgid "Scroll Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:676
+msgid "Secwepemctsin"
+msgstr ""
+
+#: ../rules/base.xml.in.h:677
+msgid "Semi-colon on third level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:678
+msgid "Serbian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:679
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:680
+msgid "Serbian (Latin Unicode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:681
+msgid "Serbian (Latin qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:682
+msgid "Serbian (Latin with guillemets)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:683
+msgid "Serbian (Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:684
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:685
+msgid "Serbian (Z and ZHE swapped)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:686
+msgid "Serbian (with guillemets)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:687
+msgid "Serbo-Croatian (US)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:688
+msgid "Shift cancels Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:689
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr ""
+
+#: ../rules/base.xml.in.h:690
+msgid "Shift with numeric keypad keys works as in MS Windows"
+msgstr ""
+
+#: ../rules/base.xml.in.h:691
+msgid "Shift+Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:692
+msgid "Sindhi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:693
+msgid "Sinhala"
+msgstr ""
+
+#: ../rules/base.xml.in.h:694
+msgid "Slovak"
+msgstr ""
+
+#: ../rules/base.xml.in.h:695
+msgid "Slovak (extended Backslash)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:696
+msgid "Slovak (qwerty)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:697
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:698
+msgid "Slovene"
+msgstr ""
+
+#: ../rules/base.xml.in.h:699
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:700
+msgid "Slovene (use guillemets for quotes)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:701
+msgid "Spanish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:702
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:703
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:704
+msgid "Spanish (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:705
+msgid "Spanish (Latin American)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:706
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:708
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:709
+msgid "Spanish (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:710
+msgid "Spanish (Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:711
+msgid "Spanish (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:712
+msgid "Spanish (include dead tilde)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:713
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr ""
+
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr ""
+
+#: ../rules/base.xml.in.h:715
+msgid "Super Power Multimedia Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:716
+msgid "Swahili (Kenya)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:717
+msgid "Swahili (Tanzania)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:718
+msgid "Swap Ctrl and Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:719
+msgid "Swap ESC and Caps Lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:720
+msgid "Swedish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:721
+msgid "Swedish (Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:722
+msgid "Swedish (Mac)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:723
+msgid "Swedish (Svdvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:724
+msgid "Swedish (eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:725
+msgid "Swedish (northern Saami)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:726
+msgid "Swiss"
+msgstr ""
+
+#: ../rules/base.xml.in.h:727
+msgid "Swiss (legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:728
+msgid "Symplon PaceBook (tablet PC)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:729
+msgid "Syriac"
+msgstr ""
+
+#: ../rules/base.xml.in.h:730
+msgid "Syriac (phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:731
+msgid "Taiwanese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:732
+msgid "Taiwanese (indigenous)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:733
+msgid "Tajik"
+msgstr ""
+
+#: ../rules/base.xml.in.h:734
+msgid "Tajik (legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:735
+msgid "Tamil"
+msgstr ""
+
+#: ../rules/base.xml.in.h:736
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:737
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:738
+msgid "Tamil (TAB typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:739
+msgid "Tamil (TSCII typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:740
+msgid "Tamil (Unicode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:741
+msgid "Tamil (keyboard with numerals)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:742
+msgid "Targa Visionary 811"
+msgstr ""
+
+#: ../rules/base.xml.in.h:743
+msgid "Telugu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:744
+msgid "Thai"
+msgstr ""
+
+#: ../rules/base.xml.in.h:745
+msgid "Thai (Pattachote)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:746
+msgid "Thai (TIS-820.2538)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:747
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr ""
+
+#: ../rules/base.xml.in.h:748
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr ""
+
+#: ../rules/base.xml.in.h:749
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr ""
+
+#: ../rules/base.xml.in.h:750
+msgid "Toshiba Satellite S3000"
+msgstr ""
+
+#: ../rules/base.xml.in.h:751
+msgid "Trust Direct Access Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr ""
+
+#: ../rules/base.xml.in.h:753
+msgid "Trust Wireless Keyboard Classic"
+msgstr ""
+
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr ""
+
+#: ../rules/base.xml.in.h:755
+msgid "Turkish"
+msgstr ""
+
+#: ../rules/base.xml.in.h:756
+msgid "Turkish (Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:757
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:758
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:760
+msgid "Turkish (F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:761
+msgid "Turkish (Sun dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:762
+msgid "Turkish (international with dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:763
+msgid "Turkmen"
+msgstr ""
+
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr ""
+
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr ""
+
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr ""
+
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:770
+msgid "Ukrainian"
+msgstr ""
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:774
+msgid "Ukrainian (WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:782
+msgid ""
+"Unicode additions (arrows and math operators). Math operators on default "
+"level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr ""
+
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr ""
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr ""
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:793
+msgid "Uzbek"
+msgstr ""
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:800
+msgid "Vietnamese"
+msgstr ""
+
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:803
+msgid ""
+"Wang 724 keypad with unicode additions (arrows and math operators). Math "
+"operators on default level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:804
+msgid "Winbook Model XP5"
+msgstr ""
+
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr ""
+
+#: ../rules/base.xml.in.h:806
+msgid "Yahoo! Internet Keyboard"
+msgstr ""
+
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr ""
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:809
+msgid ""
+"Zero-width non-joiner character at second level, non-breakable space "
+"character at third level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:810
+msgid ""
+"Zero-width non-joiner character at second level, non-breakable space "
+"character at third level, nothing at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:811
+msgid ""
+"Zero-width non-joiner character at second level, non-breakable space "
+"character at third level, thin non-breakable space at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:812
+msgid ""
+"Zero-width non-joiner character at second level, non-breakable space "
+"character at third level, zero-width joiner at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:813
+msgid ""
+"Zero-width non-joiner character at second level, zero-width joiner character "
+"at third level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:814
+msgid ""
+"Zero-width non-joiner character at second level, zero-width joiner character "
+"at third level, non-breakable space character at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:815
+msgid ""
+"Zero-width non-joiner character at third level, zero-width joiner at fourth "
+"level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr ""
+
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr ""
+
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr ""
+
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr ""
+
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr ""
+
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr ""
+
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr ""
+
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr ""
+
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr ""
+
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr ""
+
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr ""
+
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr ""
+
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr ""
+
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr ""
+
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr ""
+
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr ""
+
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr ""
+
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr ""
+
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr ""
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr ""
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr ""
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr ""
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr ""
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr ""
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr ""
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr ""
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr ""
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr ""
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr ""
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr ""
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr ""
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr ""
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr ""
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr ""
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr ""
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr ""
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr ""
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr ""
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr ""
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr ""
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr ""
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr ""
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr ""
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr ""
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr ""
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr ""
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr ""
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr ""
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr ""
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr ""
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr ""
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr ""
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr ""
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr ""
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr ""
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr ""
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr ""
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr ""
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr ""
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr ""
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr ""
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr ""
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr ""
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr ""
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr ""
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr ""
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr ""
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr ""
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr ""
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr ""
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr ""
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr ""
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr ""
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr ""
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr ""
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "APL"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "Iran"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:3
+msgid "Iran - Avestan"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:4
+msgid "Lithuania"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:5
+msgid "Lithuania - Dvorak"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:6
+msgid "Ltu"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:7
+msgid "Romania"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr ""
diff --git a/xorg-server/xkeyboard-config/po/zh_CN.po b/xorg-server/xkeyboard-config/po/zh_CN.po
index cacbf435c..d269e1676 100644
--- a/xorg-server/xkeyboard-config/po/zh_CN.po
+++ b/xorg-server/xkeyboard-config/po/zh_CN.po
@@ -1,1464 +1,3830 @@
-# SOME DESCRIPTIVE TITLE.
+# Chinese (simplified) translations of xkeyboard-config
# Copyright (C) 2003 xfree86_xkb_xml maintainers.
-# This file is distributed under the same license as the xfree86_xkb_xml package.
+# This file is distributed under the same license as the xkeyboard-config package.
# Funda Wang <fundawang@linux.net.cn>, 2003.
+# YunQiang Su <wzssyqa@gmail.com>, 2011.
#
msgid ""
msgstr ""
-"Project-Id-Version: xfree86_xkb_xml 4.4pre1\n"
-"POT-Creation-Date: 2003-11-25 23:38+0000\n"
-"PO-Revision-Date: 2003-11-28 22:36+0800\n"
-"Last-Translator: Funda Wang <fundawang@linux.net.cn>\n"
+"Project-Id-Version: xkeyboard-config 2.1.99\n"
+"Report-Msgid-Bugs-To: svu@users.sourceforge.net\n"
+"POT-Creation-Date: 2011-03-25 22:27+0000\n"
+"PO-Revision-Date: 2011-03-30 00:35+0800\n"
+"Last-Translator: Aron Xu <happyaron.xu@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\n"
+"Language: zh_CN\n"
"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=utf-8\n"
+"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Report-Msgid-Bugs-To: \n"
+"Plural-Forms: nplurals=1; plural=0;\n"
-#: xfree86.xml.in.h:1
-msgid "\"Typewriter\""
-msgstr "“打字机”"
+#: ../rules/base.xml.in.h:1
+msgid "&lt;Less/Greater&gt;"
+msgstr "&lt;小于/大于&gt;"
-#: xfree86.xml.in.h:2
-msgid "A Tamil typewrite-style keymap; TAB encoding"
-msgstr "泰米尔打字机风格的键映射;TAB 编码"
+#: ../rules/base.xml.in.h:2
+msgid "&lt;Less/Greater&gt; (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:3
+msgid "&lt;Less/Greater&gt; chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:4
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr ""
+
+#: ../rules/base.xml.in.h:5
+msgid "&lt;Less/Greater&gt; chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
-#: xfree86.xml.in.h:3
-msgid "A Tamil typewrite-style keymap; TSCII encoding"
-msgstr "泰米尔打字机风格的键映射;TSCII 编码"
+#: ../rules/base.xml.in.h:6
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
-#: xfree86.xml.in.h:4
-msgid "A Tamil typewrite-style keymap; Unicode encoding"
-msgstr "泰米尔打字机风格的键映射;Unicode 编码"
+#: ../rules/base.xml.in.h:7
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
-#: xfree86.xml.in.h:5
-msgid "ACPI Standard"
-msgstr "ACPI 标准"
+#: ../rules/base.xml.in.h:8
+#, fuzzy
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "Dexxa 无线桌面键盘"
-#: xfree86.xml.in.h:6
+#: ../rules/base.xml.in.h:9
+msgid "ATM/phone-style"
+msgstr ""
+
+#: ../rules/base.xml.in.h:10
msgid "Acer AirKey V"
msgstr "Acer AirKey V"
-#: xfree86.xml.in.h:7
-msgid "Acts as Shift with locking. Shift cancels Caps."
-msgstr "锁定时和 Shift 功能相同。Shift 取消大写。"
+#: ../rules/base.xml.in.h:11
+msgid "Acer C300"
+msgstr "宏碁 C300"
-#: xfree86.xml.in.h:8
-msgid "Acts as Shift with locking. Shift doesn't cancel Caps."
-msgstr "锁定时和 Shift 功能相同。Shift 不取消大写。"
+#: ../rules/base.xml.in.h:12
+msgid "Acer Ferrari 4000"
+msgstr "宏碁法拉利 4000"
-#: xfree86.xml.in.h:9
-msgid "Add the standard behavior to Menu key."
-msgstr "将标准行为添加到菜单键。"
+#: ../rules/base.xml.in.h:13
+msgid "Acer Laptop"
+msgstr "宏碁笔记本电脑"
+
+#: ../rules/base.xml.in.h:14
+msgid "Add the standard behavior to Menu key"
+msgstr "将标准行为添加到菜单键"
+
+#: ../rules/base.xml.in.h:15
+msgid "Adding Esperanto circumflexes (supersigno)"
+msgstr ""
-#: xfree86.xml.in.h:10
+#: ../rules/base.xml.in.h:16
+msgid "Adding currency signs to certain keys"
+msgstr "向特定键添加货币符号"
+
+#: ../rules/base.xml.in.h:17
msgid "Advance Scorpius KI"
msgstr "高级 Scorpius KI"
-#: xfree86.xml.in.h:11
-msgid "Alb"
-msgstr "Alb"
+#: ../rules/base.xml.in.h:18
+msgid "Afg"
+msgstr "阿富汗"
+
+#: ../rules/base.xml.in.h:19
+msgid "Afghani"
+msgstr "阿富汗"
-#: xfree86.xml.in.h:12
+#: ../rules/base.xml.in.h:20
+msgid "Akan"
+msgstr "阿肯"
+
+#: ../rules/base.xml.in.h:21
msgid "Albanian"
msgstr "阿尔巴尼亚"
-#: xfree86.xml.in.h:13
-msgid "Alt and Meta on the Alt keys (default)."
-msgstr "Alt 键同时代表 Alt 和 Meta(默认)。"
+#: ../rules/base.xml.in.h:22
+msgid "Alt and Meta are on Alt keys"
+msgstr "Alt 和 Meta 都是 Alt 键"
+
+#: ../rules/base.xml.in.h:23
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt 键映射到右 Win,Super 映射到菜单键"
-#: xfree86.xml.in.h:14
-msgid "Alt+Control changes group"
-msgstr "Alt+Ctrl 更改组"
+#: ../rules/base.xml.in.h:24
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
-#: xfree86.xml.in.h:15
-msgid "Alt+Shift changes group"
-msgstr "Alt+Shift 更改组"
+#: ../rules/base.xml.in.h:25
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
-#: xfree86.xml.in.h:16
+#: ../rules/base.xml.in.h:26
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
+
+#: ../rules/base.xml.in.h:27
+msgid "Alt+Space"
+msgstr "Alt+Space"
+
+#: ../rules/base.xml.in.h:28
msgid "Alt/Win key behavior"
msgstr "Alt/Win 键行为"
-#: xfree86.xml.in.h:17
-msgid "Alternate"
-msgstr "替代"
+#: ../rules/base.xml.in.h:29
+msgid "Amharic"
+msgstr "阿姆哈拉语"
+
+#: ../rules/base.xml.in.h:30
+msgid "Any Alt key"
+msgstr "任何 Alt 键"
+
+#: ../rules/base.xml.in.h:31
+msgid "Any Win key"
+msgstr "任何 Win 键"
+
+#: ../rules/base.xml.in.h:32
+#, fuzzy
+msgid "Any Win key (while pressed)"
+msgstr "按下两个 Windows 键可切换组"
+
+#: ../rules/base.xml.in.h:33
+msgid "Apple"
+msgstr "苹果"
+
+#: ../rules/base.xml.in.h:34
+msgid "Apple Aluminium Keyboard (ANSI)"
+msgstr "苹果铝键盘(ANSI)"
+
+#: ../rules/base.xml.in.h:35
+msgid "Apple Aluminium Keyboard (ISO)"
+msgstr "苹果铝键盘(ISO)"
+
+#: ../rules/base.xml.in.h:36
+msgid "Apple Aluminium Keyboard (JIS)"
+msgstr "苹果铝键盘(JIS)"
-#: xfree86.xml.in.h:18
+#: ../rules/base.xml.in.h:37
+msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)"
+msgstr "苹果铝键盘:模拟 PC 键(截屏、滚动锁定、暂停、数字锁定)"
+
+#: ../rules/base.xml.in.h:38
+msgid "Apple Laptop"
+msgstr "苹果笔记本电脑"
+
+#: ../rules/base.xml.in.h:39
msgid "Arabic"
-msgstr "阿拉伯"
+msgstr "阿拉伯语"
+
+#: ../rules/base.xml.in.h:40
+msgid "Arabic (Buckwalter)"
+msgstr "阿拉伯语(Buckwalter)"
+
+#: ../rules/base.xml.in.h:41
+msgid "Arabic (Morocco)"
+msgstr "阿拉伯语(摩洛哥)"
+
+#: ../rules/base.xml.in.h:42
+msgid "Arabic (Pakistan)"
+msgstr "阿拉伯语(巴基斯坦)"
+
+#: ../rules/base.xml.in.h:43
+msgid "Arabic (Syria)"
+msgstr "阿拉伯语(叙利亚)"
+
+#: ../rules/base.xml.in.h:44
+msgid "Arabic (azerty)"
+msgstr "阿拉伯语(azerty)"
+
+#: ../rules/base.xml.in.h:45
+msgid "Arabic (azerty/digits)"
+msgstr "阿拉伯语(azerty/数字)"
-#: xfree86.xml.in.h:19
-msgid "Arb"
-msgstr "Arb"
+#: ../rules/base.xml.in.h:46
+msgid "Arabic (digits)"
+msgstr "阿拉伯语(数字)"
-#: xfree86.xml.in.h:20
-msgid "Arm"
-msgstr "Arm"
+#: ../rules/base.xml.in.h:47
+msgid "Arabic (qwerty)"
+msgstr "阿拉伯语(qwerty)"
-#: xfree86.xml.in.h:21
+#: ../rules/base.xml.in.h:48
+msgid "Arabic (qwerty/digits)"
+msgstr "阿拉伯语(qwerty/数字)"
+
+#: ../rules/base.xml.in.h:49
msgid "Armenian"
+msgstr "亚美尼亚语"
+
+#: ../rules/base.xml.in.h:50
+#, fuzzy
+msgid "Armenian (alternative eastern)"
+msgstr "法语(替代)"
+
+#: ../rules/base.xml.in.h:51
+msgid "Armenian (alternative phonetic)"
+msgstr "亚美尼亚语(替代音标)"
+
+#: ../rules/base.xml.in.h:52
+#, fuzzy
+msgid "Armenian (eastern)"
msgstr "亚美尼亚"
-#: xfree86.xml.in.h:22
-msgid "Aze"
-msgstr "Aze"
+#: ../rules/base.xml.in.h:53
+msgid "Armenian (phonetic)"
+msgstr "亚美尼亚语(音标)"
+
+#: ../rules/base.xml.in.h:54
+#, fuzzy
+msgid "Armenian (western)"
+msgstr "亚美尼亚"
-#: xfree86.xml.in.h:23
+#: ../rules/base.xml.in.h:55
+msgid "Asus Laptop"
+msgstr "华硕笔记本电脑"
+
+#: ../rules/base.xml.in.h:56
+msgid "At bottom left"
+msgstr "在左下角"
+
+#: ../rules/base.xml.in.h:57
+msgid "At left of 'A'"
+msgstr "在“A”左侧"
+
+#: ../rules/base.xml.in.h:58
+msgid "Avatime"
+msgstr ""
+
+#: ../rules/base.xml.in.h:59
+msgid "Azerbaijan (Cyrillic)"
+msgstr "阿塞拜疆语(西里尔)"
+
+#: ../rules/base.xml.in.h:60
msgid "Azerbaijani"
-msgstr "阿塞拜疆"
+msgstr "阿塞拜疆语"
+
+#: ../rules/base.xml.in.h:61
+#, fuzzy
+msgid "Azona RF2300 wireless Internet Keyboard"
+msgstr "罗技网际键盘"
-#: xfree86.xml.in.h:24
+#: ../rules/base.xml.in.h:62
msgid "BTC 5090"
msgstr "BTC 5090"
-#: xfree86.xml.in.h:25
+#: ../rules/base.xml.in.h:63
msgid "BTC 5113RF Multimedia"
msgstr "BTC 5113RF 多媒体"
-#: xfree86.xml.in.h:26
+#: ../rules/base.xml.in.h:64
msgid "BTC 5126T"
msgstr "BTC 5126T"
-#: xfree86.xml.in.h:27
+#: ../rules/base.xml.in.h:65
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
+
+#: ../rules/base.xml.in.h:66
msgid "BTC 9000"
msgstr "BTC 9000"
-#: xfree86.xml.in.h:28
+#: ../rules/base.xml.in.h:67
msgid "BTC 9000A"
msgstr "BTC 9000A"
-#: xfree86.xml.in.h:29
+#: ../rules/base.xml.in.h:68
msgid "BTC 9001AH"
msgstr "BTC 9001AH"
-#: xfree86.xml.in.h:30
-msgid "Basic"
-msgstr "基本"
+#: ../rules/base.xml.in.h:69
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
+
+#: ../rules/base.xml.in.h:70
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr ""
+
+#: ../rules/base.xml.in.h:71
+msgid "Backslash"
+msgstr "反斜杠"
+
+#: ../rules/base.xml.in.h:72
+msgid "Backslash chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr ""
-#: xfree86.xml.in.h:31
-msgid "Bel"
-msgstr "Bel"
+#: ../rules/base.xml.in.h:73
+msgid "Bambara"
+msgstr "班巴拉语"
-#: xfree86.xml.in.h:32
+#: ../rules/base.xml.in.h:74
msgid "Belarusian"
-msgstr "白俄罗斯"
+msgstr "白俄罗斯语"
-#: xfree86.xml.in.h:33
+#: ../rules/base.xml.in.h:75
+msgid "Belarusian (Latin)"
+msgstr "白俄罗斯语(拉丁)"
+
+#: ../rules/base.xml.in.h:76
+#, fuzzy
+msgid "Belarusian (legacy)"
+msgstr "白俄罗斯语()"
+
+#: ../rules/base.xml.in.h:77
msgid "Belgian"
-msgstr "比利时"
+msgstr "比利时语"
+
+#: ../rules/base.xml.in.h:78
+msgid "Belgian (ISO alternate)"
+msgstr "比利时语(ISO 替代)"
+
+#: ../rules/base.xml.in.h:79
+msgid "Belgian (Sun dead keys)"
+msgstr "比利时语(Sun 死键)"
+
+#: ../rules/base.xml.in.h:80
+msgid "Belgian (Wang model 724 azerty)"
+msgstr "比利时语(王安 724 型 azerty)"
+
+#: ../rules/base.xml.in.h:81
+msgid "Belgian (alternative)"
+msgstr "比利时语(替代)"
+
+#: ../rules/base.xml.in.h:82
+msgid "Belgian (alternative, Sun dead keys)"
+msgstr "比利时语(替代,Sun 死键)"
+
+#: ../rules/base.xml.in.h:83
+msgid "Belgian (alternative, latin-9 only)"
+msgstr "比利时语(替代,只包含拉丁-9 字符)"
-#: xfree86.xml.in.h:34
-msgid "Ben"
-msgstr "Ben"
+#: ../rules/base.xml.in.h:84
+msgid "Belgian (eliminate dead keys)"
+msgstr "比利时语(除去死键)"
-#: xfree86.xml.in.h:35
+#: ../rules/base.xml.in.h:85
+msgid "BenQ X-Touch"
+msgstr "明基 X-Touch"
+
+#: ../rules/base.xml.in.h:86
+msgid "BenQ X-Touch 730"
+msgstr "明基 X-Touch 730"
+
+#: ../rules/base.xml.in.h:87
+msgid "BenQ X-Touch 800"
+msgstr "明基 X-Touch 800"
+
+#: ../rules/base.xml.in.h:88
msgid "Bengali"
msgstr "孟加拉"
-#: xfree86.xml.in.h:36
-msgid "Bgr"
-msgstr "Bgr"
+#: ../rules/base.xml.in.h:89
+msgid "Bengali (Probhat)"
+msgstr ""
-#: xfree86.xml.in.h:37
-msgid "Bih"
-msgstr "Bih"
+#: ../rules/base.xml.in.h:90
+msgid "Berber (Morocco, Tifinagh alternative phonetic)"
+msgstr ""
-#: xfree86.xml.in.h:38
-msgid "Blr"
-msgstr "Blr"
+#: ../rules/base.xml.in.h:91
+msgid "Berber (Morocco, Tifinagh alternative)"
+msgstr ""
-#: xfree86.xml.in.h:39
+#: ../rules/base.xml.in.h:92
+msgid "Berber (Morocco, Tifinagh extended phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:93
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:94
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:95
+msgid "Berber (Morocco, Tifinagh)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:96
msgid "Bosnian"
-msgstr "波斯尼亚"
+msgstr "波斯尼亚语"
-#: xfree86.xml.in.h:40
-msgid "Both Alt keys together change group"
-msgstr "两个 Alt 键可以更改组"
+#: ../rules/base.xml.in.h:97
+msgid "Bosnian (US keyboard with Bosnian digraphs)"
+msgstr "波斯尼亚语(带罗马尼亚二重字的美国键盘)"
-#: xfree86.xml.in.h:41
-msgid "Both Ctrl keys together change group"
-msgstr "两个 Ctrl 键更改组"
+#: ../rules/base.xml.in.h:98
+msgid "Bosnian (US keyboard with Bosnian letters)"
+msgstr "波斯尼亚语(带波斯尼亚字母的美国键盘)"
-#: xfree86.xml.in.h:42
-msgid "Both Shift keys together change group"
-msgstr "两个 Shift 键更改组"
+#: ../rules/base.xml.in.h:99
+msgid "Bosnian (use Bosnian digraphs)"
+msgstr "波斯尼亚语(使用波斯尼亚二重字)"
-#: xfree86.xml.in.h:43
-msgid "Both Win-keys switch group while pressed"
-msgstr "按下两个 Windows 键可切换组"
+#: ../rules/base.xml.in.h:100
+msgid "Bosnian (use guillemets for quotes)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:101
+msgid "Both Alt keys together"
+msgstr "同时按两个 Alt 键"
+
+#: ../rules/base.xml.in.h:102
+msgid "Both Ctrl keys together"
+msgstr "同时按两个 Ctrl 键"
-#: xfree86.xml.in.h:44
-msgid "Bra"
-msgstr "Bra"
+#: ../rules/base.xml.in.h:103
+msgid "Both Shift keys together"
+msgstr "同时按两个 Shift 键"
-#: xfree86.xml.in.h:45
-msgid "Brazilian"
-msgstr "巴西"
+#: ../rules/base.xml.in.h:104
+msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates"
+msgstr "同时按两个 Shift 键激活大写锁定,只按一个 Shift 键解锁"
-#: xfree86.xml.in.h:46
-msgid "Brazilian ABNT2"
-msgstr "巴西 ABNT2"
+#: ../rules/base.xml.in.h:105
+msgid "Both Shift-Keys together toggle Caps Lock"
+msgstr "同时按两个 Shift 键切换大写锁定"
+
+#: ../rules/base.xml.in.h:106
+msgid "Both Shift-Keys together toggle ShiftLock"
+msgstr "同时按两个 Shift 键切换 Shift 锁"
+
+#: ../rules/base.xml.in.h:107
+msgid "Braille"
+msgstr ""
-#: xfree86.xml.in.h:47
+#: ../rules/base.xml.in.h:108
+msgid "Braille (left hand)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:109
+msgid "Braille (right hand)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:110
msgid "Brother Internet Keyboard"
-msgstr "Brother 网际键盘"
+msgstr "兄弟网际键盘"
-#: xfree86.xml.in.h:48
+#: ../rules/base.xml.in.h:111
msgid "Bulgarian"
msgstr "保加利亚"
-#: xfree86.xml.in.h:49
+#: ../rules/base.xml.in.h:112
+msgid "Bulgarian (new phonetic)"
+msgstr "保加利亚(新音标)"
+
+#: ../rules/base.xml.in.h:113
+msgid "Bulgarian (traditional phonetic)"
+msgstr "保加利亚(传统音标)"
+
+#: ../rules/base.xml.in.h:114
msgid "Burmese"
msgstr "缅甸"
-#: xfree86.xml.in.h:50
-msgid "Can"
-msgstr "Can"
+#: ../rules/base.xml.in.h:115
+msgid "Canadian Multilingual"
+msgstr ""
+
+#: ../rules/base.xml.in.h:116
+msgid "Canadian Multilingual (first part)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:117
+msgid "Canadian Multilingual (second part)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:118
+msgid "Caps Lock"
+msgstr "大写锁定"
+
+#: ../rules/base.xml.in.h:119
+msgid "Caps Lock (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:120
+msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:121
+msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action"
+msgstr ""
+
+#: ../rules/base.xml.in.h:122
+#, fuzzy
+msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock"
+msgstr "锁定时和 Shift 功能相同。Shift 取消大写。"
+
+#: ../rules/base.xml.in.h:123
+#, fuzzy
+msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock"
+msgstr "锁定时和 Shift 功能相同。Shift 不取消大写。"
+
+#: ../rules/base.xml.in.h:124
+msgid "Caps Lock is disabled"
+msgstr "大写锁定被禁用"
+
+#: ../rules/base.xml.in.h:125
+msgid "Caps Lock key behavior"
+msgstr "大写锁定键行为"
+
+#: ../rules/base.xml.in.h:126
+msgid "Caps Lock toggles Shift so all keys are affected"
+msgstr ""
+
+#: ../rules/base.xml.in.h:127
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr ""
+
+#: ../rules/base.xml.in.h:128
+#, fuzzy
+msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock"
+msgstr "使用内部大写。Shift 取消大写。"
-#: xfree86.xml.in.h:51
-msgid "Canadian"
-msgstr "加拿大"
+#: ../rules/base.xml.in.h:129
+#, fuzzy
+msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock"
+msgstr "使用内部大写。Shift 不取消大写。"
-#: xfree86.xml.in.h:52
-msgid "Caps Lock key changes group"
-msgstr "CapsLock 键更改组"
+#: ../rules/base.xml.in.h:130
+msgid "Catalan"
+msgstr ""
-#: xfree86.xml.in.h:53
-msgid "CapsLock key behavior"
-msgstr "CapsLock 键行为"
+#: ../rules/base.xml.in.h:131
+msgid "Cherokee"
+msgstr ""
-#: xfree86.xml.in.h:54
-msgid "Caps_Lock LED shows alternative group"
-msgstr "CapsLock 灯显示替代组(_L)"
+#: ../rules/base.xml.in.h:132
+msgid "Cherry B.UNLIMITED"
+msgstr ""
-#: xfree86.xml.in.h:55
+#: ../rules/base.xml.in.h:133
msgid "Cherry Blue Line CyBo@rd"
msgstr "Cherry Blue Line CyBo@rd"
-#: xfree86.xml.in.h:56
+#: ../rules/base.xml.in.h:134
msgid "Cherry Blue Line CyBo@rd (alternate option)"
msgstr "Cherry Blue Line CyBo@rd (替代选项)"
-#: xfree86.xml.in.h:57
+#: ../rules/base.xml.in.h:135
+#, fuzzy
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "Cherry Blue Line CyBo@rd"
+
+#: ../rules/base.xml.in.h:136
+msgid "Cherry CyMotion Expert"
+msgstr ""
+
+#: ../rules/base.xml.in.h:137
+msgid "Cherry CyMotion Master Linux"
+msgstr ""
+
+#: ../rules/base.xml.in.h:138
+msgid "Cherry CyMotion Master XPress"
+msgstr ""
+
+#: ../rules/base.xml.in.h:139
msgid "Chicony Internet Keyboard"
msgstr "Chicony Internet 键盘"
-#: xfree86.xml.in.h:58
+#: ../rules/base.xml.in.h:140
msgid "Chicony KB-9885"
msgstr "Chicony KB-9885"
-#: xfree86.xml.in.h:59
-msgid "CloGaelach"
-msgstr "CloGaelach"
+#: ../rules/base.xml.in.h:141
+#, fuzzy
+msgid "Chicony KU-0108"
+msgstr "Chicony KB-9885"
+
+#: ../rules/base.xml.in.h:142
+#, fuzzy
+msgid "Chicony KU-0420"
+msgstr "Chicony KB-9885"
+
+#: ../rules/base.xml.in.h:143
+msgid "Chinese"
+msgstr "中国"
+
+#: ../rules/base.xml.in.h:144
+msgid "Chinese (Tibetan with ASCII numerals)"
+msgstr "中国(带有 ASCII 数字的藏语键盘)"
+
+#: ../rules/base.xml.in.h:145
+msgid "Chinese (Tibetan)"
+msgstr "中国(藏语)"
+
+#: ../rules/base.xml.in.h:146
+msgid "Chinese (Uyghur)"
+msgstr "中国(维吾尔语)"
-#: xfree86.xml.in.h:60
-msgid "CloGaelach Laptop"
-msgstr "CloGaelach 便携"
+#: ../rules/base.xml.in.h:147
+msgid "Classmate PC"
+msgstr "Classmate PC"
-#: xfree86.xml.in.h:61
+#: ../rules/base.xml.in.h:148
msgid "Compaq Easy Access Keyboard"
-msgstr "Compaq Easy Access 键盘"
+msgstr "康柏 Easy Access 键盘"
-#: xfree86.xml.in.h:62
+#: ../rules/base.xml.in.h:149
msgid "Compaq Internet Keyboard (13 keys)"
-msgstr "Compaq 网际键盘(13键)"
+msgstr "康柏网际键盘(13键)"
-#: xfree86.xml.in.h:63
+#: ../rules/base.xml.in.h:150
msgid "Compaq Internet Keyboard (18 keys)"
-msgstr "Compaq 网际键盘(18键)"
+msgstr "康柏网际键盘(18键)"
-#: xfree86.xml.in.h:64
+#: ../rules/base.xml.in.h:151
msgid "Compaq Internet Keyboard (7 keys)"
-msgstr "Compaq 网际键盘(7键)"
+msgstr "康柏网际键盘(7键)"
-#: xfree86.xml.in.h:65
+#: ../rules/base.xml.in.h:152
msgid "Compaq iPaq Keyboard"
-msgstr "Compaq iPaq 键盘"
+msgstr "康柏 iPaq 键盘"
-#: xfree86.xml.in.h:66
-msgid "Control Key Position"
-msgstr "Ctrl 键位置"
+#: ../rules/base.xml.in.h:153
+msgid "Compose key position"
+msgstr "Compose 键位置"
+
+#: ../rules/base.xml.in.h:154
+msgid "Control + Alt + Backspace"
+msgstr "Control + Alt + Backspace"
-#: xfree86.xml.in.h:67
-msgid "Control key at bottom left"
-msgstr "Ctrl 键在左下角"
+#: ../rules/base.xml.in.h:155
+#, fuzzy
+msgid "Control is mapped to Alt keys, Alt is mapped to Win keys"
+msgstr "Meta 被映射到左 Windows 键。"
-#: xfree86.xml.in.h:68
-msgid "Control key at left of 'A'"
-msgstr "Ctrl 键在“A”左侧"
+#: ../rules/base.xml.in.h:156
+#, fuzzy
+msgid "Control is mapped to Win keys (and the usual Ctrl keys)"
+msgstr "Super 被映射到 Windows 键(默认)。"
-#: xfree86.xml.in.h:69
-msgid "Control+Shift changes group"
-msgstr "Ctrl+Shift 更改组"
+#: ../rules/base.xml.in.h:157
+msgid "Creative Desktop Wireless 7000"
+msgstr "创新台式机无限键盘 7000"
-#: xfree86.xml.in.h:70
+#: ../rules/base.xml.in.h:158
msgid "Croatian"
msgstr "克罗地亚"
-#: xfree86.xml.in.h:71
-msgid "Cyrillic"
-msgstr "西里尔"
+#: ../rules/base.xml.in.h:159
+msgid "Croatian (US keyboard with Croatian digraphs)"
+msgstr "克罗地亚(带克罗地亚语二重字的美国键盘)"
+
+#: ../rules/base.xml.in.h:160
+msgid "Croatian (US keyboard with Croatian letters)"
+msgstr "克罗地亚(带罗马尼亚字母的美国键盘)"
+
+#: ../rules/base.xml.in.h:161
+msgid "Croatian (Use Croatian digraphs)"
+msgstr "克罗地亚(使用克罗地亚二重字)"
+
+#: ../rules/base.xml.in.h:162
+msgid "Croatian (Use guillemets for quotes)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:163
+msgid "Ctrl key position"
+msgstr "Ctrl 键位置"
-#: xfree86.xml.in.h:72
-msgid "Cze"
-msgstr "Cze"
+#: ../rules/base.xml.in.h:164
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
-#: xfree86.xml.in.h:73
+#: ../rules/base.xml.in.h:165
msgid "Czech"
msgstr "捷克"
-#: xfree86.xml.in.h:74
+#: ../rules/base.xml.in.h:166
+msgid "Czech (UCW layout accented letters only)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:167
+msgid "Czech (US Dvorak with CZ UCW support)"
+msgstr "捷克(带 CZ UCW 支持的美国德沃夏克布局键盘)"
+
+#: ../rules/base.xml.in.h:168
+msgid "Czech (With &lt;\\|&gt; key)"
+msgstr "捷克(带 &lt;\\|&gt; 键)"
+
+#: ../rules/base.xml.in.h:169
msgid "Czech (qwerty)"
msgstr "捷克(qwerty)"
-#: xfree86.xml.in.h:75
+#: ../rules/base.xml.in.h:170
+msgid "Czech (qwerty, extended Backslash)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:171
+msgid "DTK2000"
+msgstr "DTK2000"
+
+#: ../rules/base.xml.in.h:172
msgid "Danish"
-msgstr "丹麦"
+msgstr "丹麦语"
-#: xfree86.xml.in.h:76
-msgid "Dead acute"
-msgstr "Dead acute"
+#: ../rules/base.xml.in.h:173
+msgid "Danish (Dvorak)"
+msgstr "丹麦语(德沃夏克)"
-#: xfree86.xml.in.h:77
-msgid "Dead grave acute"
-msgstr "Dead grave acute"
+#: ../rules/base.xml.in.h:174
+msgid "Danish (Mac)"
+msgstr "丹麦语(Mac)"
+
+#: ../rules/base.xml.in.h:175
+msgid "Danish (Mac, eliminate dead keys)"
+msgstr "丹麦语(Mac,除去死键)"
+
+#: ../rules/base.xml.in.h:176
+msgid "Danish (eliminate dead keys)"
+msgstr "丹麦语(除去死键)"
+
+#: ../rules/base.xml.in.h:177
+msgid "Default numeric keypad keys"
+msgstr "默认数字小键盘键"
-#: xfree86.xml.in.h:78
+#: ../rules/base.xml.in.h:178
msgid "Dell"
-msgstr "Dell"
+msgstr "戴尔"
-#: xfree86.xml.in.h:79
+#: ../rules/base.xml.in.h:179
msgid "Dell 101-key PC"
msgstr "Dell 101 键电脑"
-#: xfree86.xml.in.h:80
-msgid "Deu"
-msgstr "Deu"
+#: ../rules/base.xml.in.h:180
+msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx"
+msgstr "戴尔笔记本电脑灵越 6xxx/8xxx"
-#: xfree86.xml.in.h:81
+#: ../rules/base.xml.in.h:181
+msgid "Dell Laptop/notebook Precision M series"
+msgstr "戴尔笔记本电脑 Precision M 系列"
+
+#: ../rules/base.xml.in.h:182
+msgid "Dell Latitude series laptop"
+msgstr "戴尔 Latitude 系列笔记本电脑"
+
+#: ../rules/base.xml.in.h:183
+msgid "Dell Precision M65"
+msgstr "戴尔 Precision M65"
+
+#: ../rules/base.xml.in.h:184
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
+
+#: ../rules/base.xml.in.h:185
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
+
+#: ../rules/base.xml.in.h:186
+msgid "Dell USB Multimedia Keyboard"
+msgstr "戴尔 USB 多媒体键盘"
+
+#: ../rules/base.xml.in.h:187
msgid "Dexxa Wireless Desktop Keyboard"
msgstr "Dexxa 无线桌面键盘"
-#: xfree86.xml.in.h:82
+#: ../rules/base.xml.in.h:188
+msgid "Dhivehi"
+msgstr "迪维希语"
+
+#: ../rules/base.xml.in.h:189
msgid "Diamond 9801 / 9802 series"
msgstr "Diamond 9801 / 9802 系列"
-#: xfree86.xml.in.h:83
-msgid "Dnk"
-msgstr "Dnk"
-
-#: xfree86.xml.in.h:84
+#: ../rules/base.xml.in.h:190
msgid "Dutch"
msgstr "荷兰"
-#: xfree86.xml.in.h:85
-msgid "Dvo"
-msgstr "Dvo"
+#: ../rules/base.xml.in.h:191
+msgid "Dutch (Mac)"
+msgstr "荷兰(Mac)"
-#: xfree86.xml.in.h:86
-msgid "Dvorak"
-msgstr "Dvorak"
+#: ../rules/base.xml.in.h:192
+msgid "Dutch (Sun dead keys)"
+msgstr "荷兰(Sun 死键)"
-#: xfree86.xml.in.h:87
-msgid "Eliminate dead keys"
-msgstr "除去死键"
+#: ../rules/base.xml.in.h:193
+msgid "Dutch (standard)"
+msgstr "荷兰(标准)"
-#: xfree86.xml.in.h:88
+#: ../rules/base.xml.in.h:194
+msgid "Dzongkha"
+msgstr "宗喀语"
+
+#: ../rules/base.xml.in.h:195
+msgid "Enable extra typographic characters"
+msgstr ""
+
+#: ../rules/base.xml.in.h:196
+msgid "English (Canada)"
+msgstr "英语(加拿大)"
+
+#: ../rules/base.xml.in.h:197
+msgid "English (Colemak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:198
+msgid "English (Dvorak alternative international no dead keys)"
+msgstr "英语(德沃夏克,替代,国际,无死键)"
+
+#: ../rules/base.xml.in.h:199
+msgid "English (Dvorak international with dead keys)"
+msgstr "英语(德沃夏克,国际,有死键)"
+
+#: ../rules/base.xml.in.h:200
+msgid "English (Dvorak)"
+msgstr "英语(德沃夏克布局)"
+
+#: ../rules/base.xml.in.h:201
+msgid "English (Ghana)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:202
+msgid "English (Ghana, GILLBT)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:203
+msgid "English (Ghana, multilingual)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:204
+msgid "English (India, with RupeeSign)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:205
+msgid "English (Macintosh)"
+msgstr "英语(Macintosh)"
+
+#: ../rules/base.xml.in.h:206
+msgid "English (Mali, USA Mac)"
+msgstr "英语(马里,美国 Mac)"
+
+#: ../rules/base.xml.in.h:207
+msgid "English (Mali, USA international)"
+msgstr "英语(马里,美国国际键盘)"
+
+#: ../rules/base.xml.in.h:208
+msgid "English (Nigeria)"
+msgstr "英语(尼日利亚)"
+
+#: ../rules/base.xml.in.h:209
+msgid "English (South Africa)"
+msgstr "英语(南非)"
+
+#: ../rules/base.xml.in.h:210
+msgid "English (UK)"
+msgstr "英语(英国)"
+
+#: ../rules/base.xml.in.h:211
+msgid "English (UK, Colemak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:212
+msgid "English (UK, Dvorak UK punctuation)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:213
+msgid "English (UK, Dvorak)"
+msgstr "英语(英国,德沃夏克布局)"
+
+#: ../rules/base.xml.in.h:214
+msgid "English (UK, Mac international)"
+msgstr "英语(英国,Mac 国际布局)"
+
+#: ../rules/base.xml.in.h:215
+msgid "English (UK, Mac)"
+msgstr "英语(应该,Mac)"
+
+#: ../rules/base.xml.in.h:216
+msgid "English (UK, extended, WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:217
+msgid "English (UK, international with dead keys)"
+msgstr "英语(英国,带死键的国际布局)"
+
+#: ../rules/base.xml.in.h:218
+msgid "English (US)"
+msgstr "英语(美国)"
+
+#: ../rules/base.xml.in.h:219
+msgid "English (US, alternative international)"
+msgstr "英语(美国,替代,国际)"
+
+#: ../rules/base.xml.in.h:220
+msgid "English (US, international with dead keys)"
+msgstr "英语(美国,国际,有死键)"
+
+#: ../rules/base.xml.in.h:221
+msgid "English (US, with euro on 5)"
+msgstr "英语(美国,5 键上是欧元符号)"
+
+#: ../rules/base.xml.in.h:222
+msgid "English (classic Dvorak)"
+msgstr "英语(经典德沃夏克布局)"
+
+#: ../rules/base.xml.in.h:223
+msgid "English (international AltGr dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:224
+msgid "English (layout toggle on multiply/divide key)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:225
+msgid "English (left handed Dvorak)"
+msgstr "英语(左手德沃夏克布局)"
+
+#: ../rules/base.xml.in.h:226
+msgid "English (programmer Dvorak)"
+msgstr "英语(适合程序员的德沃夏克布局)"
+
+#: ../rules/base.xml.in.h:227
+msgid "English (right handed Dvorak)"
+msgstr "英语(右手德沃夏克布局)"
+
+#: ../rules/base.xml.in.h:228
msgid "Ennyah DKB-1008"
msgstr "Ennyah DKB-1008"
-#: xfree86.xml.in.h:89
-msgid "Esp"
-msgstr "Esp"
+#: ../rules/base.xml.in.h:229
+msgid "Enter on keypad"
+msgstr "小键盘上的回车"
-#: xfree86.xml.in.h:90
-msgid "Est"
-msgstr "Est"
+#: ../rules/base.xml.in.h:230
+msgid "Esperanto"
+msgstr "世界语"
-#: xfree86.xml.in.h:91
+#: ../rules/base.xml.in.h:231
+msgid "Esperanto (displaced semicolon and quote, obsolete)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:232
msgid "Estonian"
msgstr "爱沙尼亚"
-#: xfree86.xml.in.h:92
+#: ../rules/base.xml.in.h:233
+msgid "Estonian (Dvorak)"
+msgstr "爱沙尼亚(德沃夏克)"
+
+#: ../rules/base.xml.in.h:234
+msgid "Estonian (US keyboard with Estonian letters)"
+msgstr "爱沙尼亚语(带爱沙尼亚字母的美国键盘)"
+
+#: ../rules/base.xml.in.h:235
+msgid "Estonian (eliminate dead keys)"
+msgstr "爱沙尼亚语(除去死键)"
+
+#: ../rules/base.xml.in.h:236
+msgid "Euro on 2"
+msgstr "欧元符号在 2 键上"
+
+#: ../rules/base.xml.in.h:237
+msgid "Euro on 4"
+msgstr "欧元符号在 4 键上"
+
+#: ../rules/base.xml.in.h:238
+msgid "Euro on 5"
+msgstr "欧元符号在 5 键上"
+
+#: ../rules/base.xml.in.h:239
+msgid "Euro on E"
+msgstr "欧元符号在 E 键上"
+
+#: ../rules/base.xml.in.h:240
msgid "Everex STEPnote"
msgstr "Everex STEPnote"
-#: xfree86.xml.in.h:93
-msgid "Extended"
-msgstr "扩展"
+#: ../rules/base.xml.in.h:241
+msgid "Ewe"
+msgstr "Ewe"
-#: xfree86.xml.in.h:94
-msgid "Fao"
-msgstr "Fao"
+#: ../rules/base.xml.in.h:242
+msgid "FL90"
+msgstr "FL90"
-#: xfree86.xml.in.h:95
+#: ../rules/base.xml.in.h:243
msgid "Faroese"
msgstr "法罗"
-#: xfree86.xml.in.h:96
-msgid "Farsi"
-msgstr "波斯"
+#: ../rules/base.xml.in.h:244
+msgid "Faroese (eliminate dead keys)"
+msgstr "法罗(除去死键)"
+
+#: ../rules/base.xml.in.h:245
+msgid "Filipino"
+msgstr "菲律宾语"
+
+#: ../rules/base.xml.in.h:246
+msgid "Filipino (Capewell-Dvorak Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:247
+msgid "Filipino (Capewell-Dvorak Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:248
+msgid "Filipino (Capewell-QWERF 2006 Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:249
+msgid "Filipino (Capewell-QWERF 2006 Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:250
+msgid "Filipino (Colemak Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:251
+msgid "Filipino (Colemak Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:252
+msgid "Filipino (Dvorak Latin)"
+msgstr "菲律宾语(德沃夏克拉丁)"
-#: xfree86.xml.in.h:97
-msgid "Fin"
-msgstr "Fin"
+#: ../rules/base.xml.in.h:253
+msgid "Filipino (QWERTY Baybayin)"
+msgstr ""
-#: xfree86.xml.in.h:98
+#: ../rules/base.xml.in.h:254
msgid "Finnish"
-msgstr "芬兰"
+msgstr "芬兰语"
+
+#: ../rules/base.xml.in.h:255
+msgid "Finnish (Mac)"
+msgstr "芬兰语(Mac)"
-#: xfree86.xml.in.h:99
-msgid "Fra"
-msgstr "Fra"
+#: ../rules/base.xml.in.h:256
+msgid "Finnish (classic)"
+msgstr "芬兰语(经典)"
+
+#: ../rules/base.xml.in.h:257
+msgid "Finnish (classic, eliminate dead keys)"
+msgstr "芬兰语(经典,除去死键)"
+
+#: ../rules/base.xml.in.h:258
+msgid "Finnish (northern Saami)"
+msgstr ""
+
+#. This assumes the KP_ abstract symbols are actually useful for some apps
+#. The description needs to be rewritten
+#: ../rules/base.xml.in.h:261
+msgid "Four-level key with abstract separators"
+msgstr ""
+
+#: ../rules/base.xml.in.h:262
+msgid "Four-level key with comma"
+msgstr ""
-#: xfree86.xml.in.h:100
+#: ../rules/base.xml.in.h:263
+msgid "Four-level key with dot"
+msgstr ""
+
+#: ../rules/base.xml.in.h:264
+msgid "Four-level key with dot, latin-9 restriction"
+msgstr ""
+
+#: ../rules/base.xml.in.h:265
+msgid "Four-level key with momayyez"
+msgstr ""
+
+#: ../rules/base.xml.in.h:266
msgid "French"
msgstr "法语"
-#: xfree86.xml.in.h:101
-msgid "French (alternative)"
+#: ../rules/base.xml.in.h:267
+msgid "French (Bepo, ergonomic, Dvorak way)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:268
+msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:269
+#, fuzzy
+msgid "French (Breton)"
+msgstr "法语(替代)"
+
+#: ../rules/base.xml.in.h:270
+msgid "French (Canada, Dvorak)"
+msgstr "法语(加拿大,德沃夏克)"
+
+#: ../rules/base.xml.in.h:271
+msgid "French (Canada, legacy)"
+msgstr "法语(加拿大,传统)"
+
+#: ../rules/base.xml.in.h:272
+msgid "French (Democratic Republic of the Congo)"
+msgstr "法语(刚果民主共和国,刚果(金))"
+
+#: ../rules/base.xml.in.h:273
+msgid "French (Dvorak)"
+msgstr "法语(德沃夏克)"
+
+#: ../rules/base.xml.in.h:274
+msgid "French (Georgian AZERTY Tskapo)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:275
+#, fuzzy
+msgid "French (Guinea)"
msgstr "法语(替代)"
-#: xfree86.xml.in.h:102
-msgid "French Canadian"
+#: ../rules/base.xml.in.h:276
+msgid "French (Mac)"
+msgstr "法语(Mac)"
+
+#: ../rules/base.xml.in.h:277
+msgid "French (Mali, alternative)"
+msgstr "法语(马里,替代)"
+
+#: ../rules/base.xml.in.h:278
+msgid "French (Morocco)"
+msgstr "法语(摩洛哥)"
+
+#: ../rules/base.xml.in.h:279
+#, fuzzy
+msgid "French (Occitan)"
msgstr "法裔加拿大"
-#: xfree86.xml.in.h:103
+#: ../rules/base.xml.in.h:280
+msgid "French (Sun dead keys)"
+msgstr "法语(Sun 死键)"
+
+#: ../rules/base.xml.in.h:281
+msgid "French (Switzerland)"
+msgstr "法语(瑞士)"
+
+#: ../rules/base.xml.in.h:282
+msgid "French (Switzerland, Mac)"
+msgstr "法语(瑞士,Mac)"
+
+#: ../rules/base.xml.in.h:283
+msgid "French (Switzerland, Sun dead keys)"
+msgstr "法语(瑞士,Sun 死键)"
+
+#: ../rules/base.xml.in.h:284
+msgid "French (Switzerland, eliminate dead keys)"
+msgstr "法语(瑞士,除去死键)"
+
+#: ../rules/base.xml.in.h:285
+msgid "French (alternative)"
+msgstr "法语(替代)"
+
+#: ../rules/base.xml.in.h:286
+msgid "French (alternative, Sun dead keys)"
+msgstr "法语(替代,Sun 死键)"
+
+#: ../rules/base.xml.in.h:287
+msgid "French (alternative, eliminate dead keys)"
+msgstr "法语(替代,除去死键)"
+
+#: ../rules/base.xml.in.h:288
+msgid "French (alternative, latin-9 only)"
+msgstr "法语(替代,只有拉丁-9)"
+
+#: ../rules/base.xml.in.h:289
+msgid "French (eliminate dead keys)"
+msgstr "法语(除去死键)"
+
+#: ../rules/base.xml.in.h:290
+msgid "French (legacy alternative)"
+msgstr "法语(传统,替代)"
+
+#: ../rules/base.xml.in.h:291
+msgid "French (legacy, alternative, Sun dead keys)"
+msgstr "法语(传统,替代,Sun 死键)"
+
+#: ../rules/base.xml.in.h:292
+msgid "French (legacy, alternative, eliminate dead keys)"
+msgstr "法语(传统,替代,除去死键)"
+
+#: ../rules/base.xml.in.h:293
+msgid "Fujitsu-Siemens Computers AMILO laptop"
+msgstr "富士通西门子计算机 AMILO 笔记本电脑"
+
+#: ../rules/base.xml.in.h:294
+msgid "Fula"
+msgstr ""
+
+#: ../rules/base.xml.in.h:295
msgid "GBr"
msgstr "GBr"
-#: xfree86.xml.in.h:104
+#: ../rules/base.xml.in.h:296
+msgid "Ga"
+msgstr ""
+
+#: ../rules/base.xml.in.h:297
msgid "Generic 101-key PC"
msgstr "通用 101 键电脑"
-#: xfree86.xml.in.h:105
+#: ../rules/base.xml.in.h:298
msgid "Generic 102-key (Intl) PC"
msgstr "通用 102 键(国际)电脑"
-#: xfree86.xml.in.h:106
+#: ../rules/base.xml.in.h:299
msgid "Generic 104-key PC"
msgstr "通用 104 键电脑"
-#: xfree86.xml.in.h:107
+#: ../rules/base.xml.in.h:300
msgid "Generic 105-key (Intl) PC"
msgstr "通用 105 键(国际)电脑"
-#: xfree86.xml.in.h:108
+#: ../rules/base.xml.in.h:301
+msgid "Genius Comfy KB-12e"
+msgstr "通用 Comfy KB-12e"
+
+#: ../rules/base.xml.in.h:302
msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910"
msgstr "通用 Comfy KB-16M / Genius MM 键盘 KWD-910"
-#: xfree86.xml.in.h:109
-msgid "Geo"
-msgstr "Geo"
+#: ../rules/base.xml.in.h:303
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr ""
+
+#: ../rules/base.xml.in.h:304
+msgid "Genius KB-19e NB"
+msgstr ""
+
+#: ../rules/base.xml.in.h:305
+msgid "Genius KKB-2050HS"
+msgstr ""
+
+#: ../rules/base.xml.in.h:306
+#, fuzzy
+msgid "Georgian"
+msgstr "挪威"
-#: xfree86.xml.in.h:110
-msgid "Georgian (latin)"
+#: ../rules/base.xml.in.h:307
+#, fuzzy
+msgid "Georgian (MESS)"
msgstr "乔治亚(拉丁)"
-#: xfree86.xml.in.h:111
-msgid "Georgian (russian)"
+#: ../rules/base.xml.in.h:308
+#, fuzzy
+msgid "Georgian (Ossetian)"
msgstr "乔治亚(俄语)"
-#: xfree86.xml.in.h:112
+#: ../rules/base.xml.in.h:309
+#, fuzzy
+msgid "Georgian (ergonomic)"
+msgstr "乔治亚(俄语)"
+
+#: ../rules/base.xml.in.h:310
msgid "German"
msgstr "德语"
-#: xfree86.xml.in.h:113
-msgid "Grc"
-msgstr "Grc"
+#: ../rules/base.xml.in.h:311
+msgid "German (Austria)"
+msgstr "德语(奥地利)"
+
+#: ../rules/base.xml.in.h:312
+msgid "German (Austria, Mac)"
+msgstr "德语(奥地利,Mac)"
+
+#: ../rules/base.xml.in.h:313
+msgid "German (Austria, Sun dead keys)"
+msgstr "德语(奥地利,Sun 死键)"
+
+#: ../rules/base.xml.in.h:314
+msgid "German (Austria, eliminate dead keys)"
+msgstr "德语(奥地利,除去死键)"
+
+#: ../rules/base.xml.in.h:315
+msgid "German (Dvorak)"
+msgstr "德语(德沃夏克)"
+
+#: ../rules/base.xml.in.h:316
+msgid "German (Mac)"
+msgstr "德语(Mac)"
+
+#: ../rules/base.xml.in.h:317
+msgid "German (Mac, eliminate dead keys)"
+msgstr "德语(Mac,除去死键)"
+
+#: ../rules/base.xml.in.h:318
+#, fuzzy
+msgid "German (Neo 2)"
+msgstr "德语"
+
+#: ../rules/base.xml.in.h:319
+msgid "German (Romanian keyboard with German letters)"
+msgstr "德语(带德语字母的罗马尼亚键盘)"
+
+#: ../rules/base.xml.in.h:320
+msgid "German (Romanian keyboard with German letters, eliminate dead keys)"
+msgstr "德语(带德语字母的罗马尼亚键盘,除去死键)"
+
+#: ../rules/base.xml.in.h:321
+msgid "German (Sun dead keys)"
+msgstr "德语(Sun 死键)"
+
+#: ../rules/base.xml.in.h:322
+msgid "German (Switzerland, Mac)"
+msgstr "德语(瑞士,Mac)"
+
+#: ../rules/base.xml.in.h:323
+msgid "German (Switzerland, Sun dead keys)"
+msgstr "德语(瑞士,Sun 死键)"
+
+#: ../rules/base.xml.in.h:324
+msgid "German (Switzerland, eliminate dead keys)"
+msgstr "德语(瑞士,除去死键)"
+
+#: ../rules/base.xml.in.h:325
+#, fuzzy
+msgid "German (dead acute)"
+msgstr "Dead acute"
+
+#: ../rules/base.xml.in.h:326
+#, fuzzy
+msgid "German (dead grave acute)"
+msgstr "Dead grave acute"
+
+#: ../rules/base.xml.in.h:327
+#, fuzzy
+msgid "German (eliminate dead keys)"
+msgstr "除去死键"
-#: xfree86.xml.in.h:114
+#: ../rules/base.xml.in.h:328
+msgid "German (lower Sorbian qwertz)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:329
+#, fuzzy
+msgid "German (lower Sorbian)"
+msgstr "乔治亚(俄语)"
+
+#: ../rules/base.xml.in.h:330
+msgid "German (qwerty)"
+msgstr "德语(qwerty)"
+
+#: ../rules/base.xml.in.h:331
msgid "Greek"
-msgstr "希腊"
+msgstr "希腊语"
+
+#: ../rules/base.xml.in.h:332
+msgid "Greek (eliminate dead keys)"
+msgstr "希腊语(除去死键)"
+
+#: ../rules/base.xml.in.h:333
+msgid "Greek (extended)"
+msgstr "希腊语(扩展)"
-#: xfree86.xml.in.h:115
-msgid "Group Shift/Lock behavior"
-msgstr "组切换/锁定行为"
+#: ../rules/base.xml.in.h:334
+#, fuzzy
+msgid "Greek (polytonic)"
+msgstr "Polytonic"
-#: xfree86.xml.in.h:116
-msgid "Guj"
-msgstr "Guj"
+#: ../rules/base.xml.in.h:335
+msgid "Greek (simple)"
+msgstr ""
-#: xfree86.xml.in.h:117
+#: ../rules/base.xml.in.h:336
msgid "Gujarati"
msgstr "古吉拉特"
-#: xfree86.xml.in.h:118
-msgid "Gurmukhi"
-msgstr "旁遮普"
+#: ../rules/base.xml.in.h:337
+#, fuzzy
+msgid "Gyration"
+msgstr "古吉拉特"
+
+#: ../rules/base.xml.in.h:338
+msgid "HTC Dream"
+msgstr "HTC Dream(Google G1)"
+
+#: ../rules/base.xml.in.h:339
+msgid "Happy Hacking Keyboard"
+msgstr ""
-#: xfree86.xml.in.h:119
+#: ../rules/base.xml.in.h:340
+msgid "Happy Hacking Keyboard for Mac"
+msgstr ""
+
+#: ../rules/base.xml.in.h:341
+msgid "Hausa"
+msgstr ""
+
+#: ../rules/base.xml.in.h:342
+msgid "Hebrew"
+msgstr ""
+
+#: ../rules/base.xml.in.h:343
+#, fuzzy
+msgid "Hebrew (Phonetic)"
+msgstr "Phonetic"
+
+#: ../rules/base.xml.in.h:344
+msgid "Hebrew (Tiro)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:345
+msgid "Hebrew (lyx)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:346
msgid "Hewlett-Packard Internet Keyboard"
msgstr "惠普网际键盘"
-#: xfree86.xml.in.h:120
+#: ../rules/base.xml.in.h:347
+msgid "Hewlett-Packard Mini 110 Notebook"
+msgstr "惠普 Mini 110 笔记本电脑"
+
+#: ../rules/base.xml.in.h:348
msgid "Hewlett-Packard Omnibook 500 FA"
msgstr "惠普 Omnibook 500 FA"
-#: xfree86.xml.in.h:121
+#: ../rules/base.xml.in.h:349
msgid "Hewlett-Packard Omnibook 5xx"
msgstr "惠普 Omnibook 5xx"
-#: xfree86.xml.in.h:122
+#: ../rules/base.xml.in.h:350
msgid "Hewlett-Packard Omnibook 6000/6100"
msgstr "惠普 Omnibook 6000/6100"
-#: xfree86.xml.in.h:123
+#: ../rules/base.xml.in.h:351
msgid "Hewlett-Packard Omnibook XE3 GC"
msgstr "惠普 Omnibook XE3 GC"
-#: xfree86.xml.in.h:124
+#: ../rules/base.xml.in.h:352
msgid "Hewlett-Packard Omnibook XE3 GF"
msgstr "惠普 Omnibook XE3 CF"
-#: xfree86.xml.in.h:125
+#: ../rules/base.xml.in.h:353
msgid "Hewlett-Packard Omnibook XT1000"
msgstr "惠普 Omnibook XT1000"
-#: xfree86.xml.in.h:126
+#: ../rules/base.xml.in.h:354
msgid "Hewlett-Packard Pavilion ZT11xx"
msgstr "惠普 Pavilion ZT11xx"
-#: xfree86.xml.in.h:127
-msgid "Hewlett-Packard SK-2501 Multimedia Keyboard"
-msgstr "惠普 SK-2501 多媒体键盘"
+#: ../rules/base.xml.in.h:355
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "惠普 Pavilion dv5"
-#: xfree86.xml.in.h:128
-msgid "Hewlett-Packard SK-2505 Internet Keyboard"
-msgstr "惠普 SK-2505 网际键盘"
+#: ../rules/base.xml.in.h:356
+msgid "Hewlett-Packard SK-250x Multimedia Keyboard"
+msgstr "惠普 SK-250x 多媒体键盘"
-#: xfree86.xml.in.h:129
-msgid "Hin"
-msgstr "Hin"
+#: ../rules/base.xml.in.h:357
+msgid "Hewlett-Packard nx9020"
+msgstr "惠普 nx9020"
-#: xfree86.xml.in.h:130
-msgid "Hindi"
+#: ../rules/base.xml.in.h:358
+msgid "Hexadecimal"
+msgstr ""
+
+#: ../rules/base.xml.in.h:359
+msgid "Hindi (Bolnagri)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:360
+#, fuzzy
+msgid "Hindi (Wx)"
msgstr "印地"
-#: xfree86.xml.in.h:131
+#: ../rules/base.xml.in.h:361
msgid "Honeywell Euroboard"
msgstr "Honeywell 欧洲键盘"
-#: xfree86.xml.in.h:132
-msgid "Hrv"
-msgstr "Hrv"
+#: ../rules/base.xml.in.h:362
+msgid "Htc Dream phone"
+msgstr "Htc Dream 电话(Google G1)"
-#: xfree86.xml.in.h:133
-msgid "Hun"
-msgstr "Hun"
-
-#: xfree86.xml.in.h:134
+#: ../rules/base.xml.in.h:363
msgid "Hungarian"
msgstr "匈牙利"
-#: xfree86.xml.in.h:135
+#: ../rules/base.xml.in.h:364
+msgid "Hungarian (101/qwerty/comma/dead keys)"
+msgstr "匈牙利语(101/qwerty/逗号/死键)"
+
+#: ../rules/base.xml.in.h:365
+msgid "Hungarian (101/qwerty/comma/eliminate dead keys)"
+msgstr "匈牙利语(101/qwerty/逗号/除去死键)"
+
+#: ../rules/base.xml.in.h:366
+msgid "Hungarian (101/qwerty/dot/dead keys)"
+msgstr "匈牙利语(101/qwerty/点/死键)"
+
+#: ../rules/base.xml.in.h:367
+msgid "Hungarian (101/qwerty/dot/eliminate dead keys)"
+msgstr "匈牙利语(101/qwerty/点/除去死键)"
+
+#: ../rules/base.xml.in.h:368
+msgid "Hungarian (101/qwertz/comma/dead keys)"
+msgstr "匈牙利语(101/qwertz/逗号/死键)"
+
+#: ../rules/base.xml.in.h:369
+msgid "Hungarian (101/qwertz/comma/eliminate dead keys)"
+msgstr "匈牙利语(101/qwertz/逗号/除去死键)"
+
+#: ../rules/base.xml.in.h:370
+msgid "Hungarian (101/qwertz/dot/dead keys)"
+msgstr "匈牙利语(101/qwertz/点/死键)"
+
+#: ../rules/base.xml.in.h:371
+msgid "Hungarian (101/qwertz/dot/eliminate dead keys)"
+msgstr "匈牙利语(101/qwertz/点/除去死键)"
+
+#: ../rules/base.xml.in.h:372
+msgid "Hungarian (102/qwerty/comma/dead keys)"
+msgstr "匈牙利语(102/qwerty/逗号/死键)"
+
+#: ../rules/base.xml.in.h:373
+msgid "Hungarian (102/qwerty/comma/eliminate dead keys)"
+msgstr "匈牙利语(102/qwerty/逗号/除去死键)"
+
+#: ../rules/base.xml.in.h:374
+msgid "Hungarian (102/qwerty/dot/dead keys)"
+msgstr "匈牙利语(102/qwerty/点/死键)"
+
+#: ../rules/base.xml.in.h:375
+msgid "Hungarian (102/qwerty/dot/eliminate dead keys)"
+msgstr "匈牙利语(102/qwerty/点/除去死键)"
+
+#: ../rules/base.xml.in.h:376
+msgid "Hungarian (102/qwertz/comma/dead keys)"
+msgstr "匈牙利语(102/qwertz/逗号/死键)"
+
+#: ../rules/base.xml.in.h:377
+msgid "Hungarian (102/qwertz/comma/eliminate dead keys)"
+msgstr "匈牙利语(102/qwertz/逗号/除去死键)"
+
+#: ../rules/base.xml.in.h:378
+msgid "Hungarian (102/qwertz/dot/dead keys)"
+msgstr "匈牙利语(102/qwertz/点/死键)"
+
+#: ../rules/base.xml.in.h:379
+msgid "Hungarian (102/qwertz/dot/eliminate dead keys)"
+msgstr "匈牙利语(102/qwertz/点/除去死键)"
+
+#: ../rules/base.xml.in.h:380
+msgid "Hungarian (eliminate dead keys)"
+msgstr "匈牙利语(除去死键)"
+
+#: ../rules/base.xml.in.h:381
msgid "Hungarian (qwerty)"
msgstr "匈牙利(qwerty)"
-#: xfree86.xml.in.h:136
-msgid "Hyper is mapped to the Win-keys."
-msgstr "Hyper 被映射到 Windows 键。"
+#: ../rules/base.xml.in.h:382
+msgid "Hungarian (standard)"
+msgstr "匈牙利(标准)"
-#: xfree86.xml.in.h:137
+#: ../rules/base.xml.in.h:383
+msgid "Hyper is mapped to Win-keys"
+msgstr "Hyper 被映射到 Win 键。"
+
+#: ../rules/base.xml.in.h:384
msgid "IBM Rapid Access"
msgstr "IBM Rapid Access"
-#: xfree86.xml.in.h:138
+#: ../rules/base.xml.in.h:385
msgid "IBM Rapid Access II"
msgstr "IBM Rapid Access II"
-#: xfree86.xml.in.h:139
-msgid "IBM Rapid Access II (alternate option)"
-msgstr "IBM Rapid Access II(替代选项)"
+#: ../rules/base.xml.in.h:386
+msgid "IBM Space Saver"
+msgstr ""
-#: xfree86.xml.in.h:140
+#: ../rules/base.xml.in.h:387
msgid "IBM ThinkPad 560Z/600/600E/A22E"
msgstr "IBM ThinkPad 560Z/600/600E/A22E"
-#: xfree86.xml.in.h:141
-msgid "INSCRIPT layout"
-msgstr "INSCRIPT layout"
-
-#: xfree86.xml.in.h:142
-msgid "IS434"
-msgstr "IS434"
-
-#: xfree86.xml.in.h:143
-msgid "IS434 laptop"
-msgstr "IS434 便携"
+#: ../rules/base.xml.in.h:388
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
-#: xfree86.xml.in.h:144
-msgid "ISO Alternate"
-msgstr "ISO 替代"
+#: ../rules/base.xml.in.h:389
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
-#: xfree86.xml.in.h:145
+#: ../rules/base.xml.in.h:390
msgid "Icelandic"
msgstr "冰岛"
-#: xfree86.xml.in.h:146
-msgid "Iku"
-msgstr "Iku"
+#: ../rules/base.xml.in.h:391
+msgid "Icelandic (Dvorak)"
+msgstr "冰岛(德沃夏克)"
+
+#: ../rules/base.xml.in.h:392
+msgid "Icelandic (Mac)"
+msgstr "冰岛(Mac)"
+
+#: ../rules/base.xml.in.h:393
+msgid "Icelandic (Sun dead keys)"
+msgstr "冰岛(Sun 死键)"
+
+#: ../rules/base.xml.in.h:394
+msgid "Icelandic (eliminate dead keys)"
+msgstr "冰岛(除去死键)"
-#: xfree86.xml.in.h:147
+#: ../rules/base.xml.in.h:395
+msgid "Igbo"
+msgstr "伊博语"
+
+#: ../rules/base.xml.in.h:396
+msgid "Indian"
+msgstr "印地语"
+
+#: ../rules/base.xml.in.h:397
msgid "Inuktitut"
-msgstr "因纽特"
+msgstr "因纽特语"
-#: xfree86.xml.in.h:148
+#: ../rules/base.xml.in.h:398
+msgid "Iraqi"
+msgstr "伊拉克"
+
+#: ../rules/base.xml.in.h:399
msgid "Irish"
msgstr "爱尔兰"
-#: xfree86.xml.in.h:149
-msgid "Irl"
-msgstr "Irl"
+#: ../rules/base.xml.in.h:400
+#, fuzzy
+msgid "Irish (CloGaelach)"
+msgstr "CloGaelach"
-#: xfree86.xml.in.h:150
-msgid "Irn"
-msgstr "Irn"
+#: ../rules/base.xml.in.h:401
+msgid "Irish (Ogham IS434)"
+msgstr ""
-#: xfree86.xml.in.h:151
-msgid "Isl"
-msgstr "Isl"
+#: ../rules/base.xml.in.h:402
+msgid "Irish (Ogham)"
+msgstr ""
-#: xfree86.xml.in.h:152
-msgid "Isr"
-msgstr "Isr"
+#: ../rules/base.xml.in.h:403
+#, fuzzy
+msgid "Irish (UnicodeExpert)"
+msgstr "UnicodeExpert"
-#: xfree86.xml.in.h:153
-msgid "Israeli"
-msgstr "以色列"
+#: ../rules/base.xml.in.h:404
+msgid "Italian"
+msgstr "意大利语"
-#: xfree86.xml.in.h:154
-msgid "Ita"
-msgstr "Ita"
+#: ../rules/base.xml.in.h:405
+msgid "Italian (Georgian)"
+msgstr ""
-#: xfree86.xml.in.h:155
-msgid "Italian"
-msgstr "意大利"
+#: ../rules/base.xml.in.h:406
+msgid "Italian (Mac)"
+msgstr "意大利语(Mac)"
+
+#: ../rules/base.xml.in.h:407
+msgid "Italian (US keyboard with Italian letters)"
+msgstr "意大利语(带意大利语字母的美国键盘)"
+
+#: ../rules/base.xml.in.h:408
+msgid "Italian (eliminate dead keys)"
+msgstr "意大利语(除去死键)"
-#: xfree86.xml.in.h:156
+#: ../rules/base.xml.in.h:409
msgid "Japanese"
msgstr "日语"
-#: xfree86.xml.in.h:157
-msgid "Japanese 106-key"
+#: ../rules/base.xml.in.h:410
+#, fuzzy
+msgid "Japanese (Kana 86)"
+msgstr "日语"
+
+#: ../rules/base.xml.in.h:411
+#, fuzzy
+msgid "Japanese (Kana)"
+msgstr "日语"
+
+#: ../rules/base.xml.in.h:412
+msgid "Japanese (Mac)"
+msgstr "日语(Mac)"
+
+#: ../rules/base.xml.in.h:413
+#, fuzzy
+msgid "Japanese (OADG 109A)"
msgstr "日语 106 键"
-#: xfree86.xml.in.h:158
-msgid "Jpn"
-msgstr "Jpn"
+#: ../rules/base.xml.in.h:414
+msgid "Japanese (PC-98xx Series)"
+msgstr "日语(PC-98xx 系列)"
-#: xfree86.xml.in.h:159
-msgid "Kan"
-msgstr "Kan"
+#: ../rules/base.xml.in.h:415
+msgid "Japanese keyboard options"
+msgstr "日语键盘选项"
+
+#: ../rules/base.xml.in.h:416
+msgid "Kana Lock key is locking"
+msgstr ""
-#: xfree86.xml.in.h:160
+#: ../rules/base.xml.in.h:417
msgid "Kannada"
msgstr "埃纳德"
-#: xfree86.xml.in.h:161
+#: ../rules/base.xml.in.h:418
+msgid "Kazakh"
+msgstr "哈萨克语"
+
+#: ../rules/base.xml.in.h:419
+msgid "Kazakh (with Russian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:420
+msgid "Key sequence to kill the X server"
+msgstr "杀死 X 服务器的按键序列"
+
+#: ../rules/base.xml.in.h:421
+#, fuzzy
+msgid "Key to choose 3rd level"
+msgstr "按菜单键选择第三级"
+
+#: ../rules/base.xml.in.h:422
+#, fuzzy
+msgid "Key to choose 5th level"
+msgstr "按菜单键选择第三级"
+
+#: ../rules/base.xml.in.h:423
+msgid "Key(s) to change layout"
+msgstr ""
+
+#: ../rules/base.xml.in.h:424
msgid "Keytronic FlexPro"
msgstr "Keytronic FlexPro"
-#: xfree86.xml.in.h:162
-msgid "LAm"
-msgstr "LAm"
+#: ../rules/base.xml.in.h:425
+msgid "Khmer (Cambodian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:426
+msgid "Kikuyu"
+msgstr ""
+
+#: ../rules/base.xml.in.h:427
+msgid "Kinesis"
+msgstr ""
+
+#: ../rules/base.xml.in.h:428
+msgid "Korean"
+msgstr "朝鲜语"
+
+#: ../rules/base.xml.in.h:429
+msgid "Korean (101/104 key compatible)"
+msgstr "朝鲜语(兼容 101/104 键)"
+
+#: ../rules/base.xml.in.h:430
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "库尔德语(伊朗,阿拉伯-拉丁)"
+
+#: ../rules/base.xml.in.h:431
+msgid "Kurdish (Iran, F)"
+msgstr "库尔德语(伊朗,F)"
+
+#: ../rules/base.xml.in.h:432
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "库尔德语(伊朗,拉丁 Q)"
+
+#: ../rules/base.xml.in.h:433
+msgid "Kurdish (Iran, latin alt-Q)"
+msgstr "库尔德语(伊朗,拉丁 alt-Q)"
+
+#: ../rules/base.xml.in.h:434
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "库尔德语(伊拉克,阿拉伯-拉丁)"
+
+#: ../rules/base.xml.in.h:435
+msgid "Kurdish (Iraq, F)"
+msgstr "库尔德语(伊拉克,F)"
+
+#: ../rules/base.xml.in.h:436
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "库尔德语(伊拉克,拉丁 Alt-Q)"
+
+#: ../rules/base.xml.in.h:437
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "库尔德语(伊拉克,拉丁 Q)"
-#: xfree86.xml.in.h:163
-msgid "Laptop"
-msgstr "便携"
+#: ../rules/base.xml.in.h:438
+msgid "Kurdish (Syria, F)"
+msgstr "库尔德语(叙利亚,F)"
-#: xfree86.xml.in.h:164
+#: ../rules/base.xml.in.h:439
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "库尔德语(叙利亚,拉丁 Alt-Q)"
+
+#: ../rules/base.xml.in.h:440
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "库尔德语(叙利亚,拉丁 Q)"
+
+#: ../rules/base.xml.in.h:441
+msgid "Kurdish (Turkey, F)"
+msgstr "库尔德语(土耳其,F)"
+
+#: ../rules/base.xml.in.h:442
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "库尔德语(土耳其,拉丁 Alt-Q)"
+
+#: ../rules/base.xml.in.h:443
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "库尔德语(土耳其,拉丁 Q)"
+
+#: ../rules/base.xml.in.h:444
+msgid "Kutenai"
+msgstr ""
+
+#: ../rules/base.xml.in.h:445
+msgid "Kyrgyz"
+msgstr "柯尔克孜语(吉尔吉斯语)"
+
+#: ../rules/base.xml.in.h:446
+msgid "Kyrgyz (phonetic)"
+msgstr "柯尔克孜语(吉尔吉斯语,音标)"
+
+#: ../rules/base.xml.in.h:447
+msgid "Lao"
+msgstr "老挝语(寮语)"
+
+#: ../rules/base.xml.in.h:448
+#, fuzzy
+msgid "Lao (STEA proposed standard layout)"
+msgstr "老挝语()"
+
+#: ../rules/base.xml.in.h:449
msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard"
msgstr "便携/笔记本 Compaq(如 Armada)便携键盘"
-#: xfree86.xml.in.h:165
+#: ../rules/base.xml.in.h:450
msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard"
msgstr "便携/笔记本 Compaq(如自由人)网际键盘"
-#: xfree86.xml.in.h:166
-msgid "Laptop/notebook Dell Inspiron 8xxx"
-msgstr "便携/笔记本 Dell Inspiron 8xxx"
+#: ../rules/base.xml.in.h:451
+msgid "Laptop/notebook eMachines m68xx"
+msgstr "笔记本电脑 eMachines m68xx"
-#: xfree86.xml.in.h:167
-msgid "Latin"
-msgstr "拉丁"
-
-#: xfree86.xml.in.h:168
-msgid "Latin America"
-msgstr "拉美"
-
-#: xfree86.xml.in.h:169
+#: ../rules/base.xml.in.h:452
msgid "Latvian"
msgstr "拉脱维亚"
-#: xfree86.xml.in.h:170
-msgid "Left Alt key changes group"
-msgstr "左 Alt 键更改组"
+#: ../rules/base.xml.in.h:453
+msgid "Latvian (Apostrophe ' variant)"
+msgstr ""
-#: xfree86.xml.in.h:171
-msgid "Left Ctrl key changes group"
-msgstr "左 Ctrl 键更改组"
+#: ../rules/base.xml.in.h:454
+msgid "Latvian (F variant)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:455
+msgid "Latvian (Tilde ~ variant)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:456
+msgid "Left Alt"
+msgstr "左 Alt"
+
+#: ../rules/base.xml.in.h:457
+#, fuzzy
+msgid "Left Alt (while pressed)"
+msgstr "按下左 Windows 键切换组"
+
+#: ../rules/base.xml.in.h:458
+msgid "Left Alt is swapped with Left Win"
+msgstr "左 Alt 和左 Win 对换"
-#: xfree86.xml.in.h:172
-msgid "Left Shift key changes group"
-msgstr "左 Shift 键更改组"
+#: ../rules/base.xml.in.h:459
+msgid "Left Ctrl"
+msgstr "左 Ctrl"
-#: xfree86.xml.in.h:173
-msgid "Left Win-key changes group"
-msgstr "左 Windows 键更改组"
+#: ../rules/base.xml.in.h:460
+msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:461
+msgid "Left Ctrl+Left Shift"
+msgstr "左 Ctrl+左 Shift"
+
+#: ../rules/base.xml.in.h:462
+msgid "Left Shift"
+msgstr "左 Shift"
+
+#: ../rules/base.xml.in.h:463
+msgid "Left Win"
+msgstr "左 Win"
-#: xfree86.xml.in.h:174
-msgid "Left Win-key switches group while pressed"
+#: ../rules/base.xml.in.h:464
+msgid "Left Win (to first layout), Right Win/Menu (to last layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:465
+#, fuzzy
+msgid "Left Win (while pressed)"
msgstr "按下左 Windows 键切换组"
-#: xfree86.xml.in.h:175
-msgid "Lithuanian azerty standard"
-msgstr "立陶宛 azerty 标准"
+#: ../rules/base.xml.in.h:466
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr ""
+
+#: ../rules/base.xml.in.h:467
+msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:468
+msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:469
+msgid "Legacy"
+msgstr "传统"
+
+#: ../rules/base.xml.in.h:470
+msgid "Legacy Wang 724"
+msgstr "传统王安 724"
+
+#. Actually, with KP_SEPARATOR, as the old keypad(comma)
+#: ../rules/base.xml.in.h:472
+msgid "Legacy key with comma"
+msgstr ""
+
+#: ../rules/base.xml.in.h:473
+msgid "Legacy key with dot"
+msgstr ""
+
+#: ../rules/base.xml.in.h:474
+msgid "Lithuanian"
+msgstr "立陶宛语"
+
+#: ../rules/base.xml.in.h:475
+msgid "Lithuanian (IBM LST 1205-92)"
+msgstr "立陶宛语 (IBM LST 1205-92)"
+
+#: ../rules/base.xml.in.h:476
+msgid "Lithuanian (LEKP)"
+msgstr "立陶宛语 (LEKP)"
+
+#: ../rules/base.xml.in.h:477
+msgid "Lithuanian (LEKPa)"
+msgstr "立陶宛语 (LEKPa)"
-#: xfree86.xml.in.h:176
-msgid "Lithuanian qwerty \"numeric\""
-msgstr "立陶宛 qwerty“数字式”"
+#: ../rules/base.xml.in.h:478
+msgid "Lithuanian (US keyboard with Lithuanian letters)"
+msgstr "立陶宛语(带立陶宛字母的美国键盘)"
-#: xfree86.xml.in.h:177
+#: ../rules/base.xml.in.h:479
+msgid "Lithuanian (standard)"
+msgstr "立陶宛语(标准)"
+
+#: ../rules/base.xml.in.h:480
+#, fuzzy
+msgid "Logitech Access Keyboard"
+msgstr "罗技强手键盘"
+
+#: ../rules/base.xml.in.h:481
msgid "Logitech Cordless Desktop"
msgstr "罗技无影手"
-#: xfree86.xml.in.h:178
+#: ../rules/base.xml.in.h:482
+msgid "Logitech Cordless Desktop (alternate option)"
+msgstr "罗技无影手(替代选项)"
+
+#: ../rules/base.xml.in.h:483
+msgid "Logitech Cordless Desktop EX110"
+msgstr "罗技无影手 EX110"
+
+#: ../rules/base.xml.in.h:484
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "罗技无影手 LX-300"
+
+#: ../rules/base.xml.in.h:485
msgid "Logitech Cordless Desktop Navigator"
msgstr "罗技无影手桌面导航器"
-#: xfree86.xml.in.h:179
+#: ../rules/base.xml.in.h:486
msgid "Logitech Cordless Desktop Optical"
msgstr "罗技无影手光学组合"
-#: xfree86.xml.in.h:180
-msgid "Logitech Cordless Desktop Pro"
-msgstr "罗技无影手高级版"
-
-#: xfree86.xml.in.h:181
-msgid "Logitech Cordless Desktop Pro (alternate option)"
-msgstr "罗技无影手高级版(替代选项)"
+#: ../rules/base.xml.in.h:487
+msgid "Logitech Cordless Desktop Pro (alternate option 2)"
+msgstr "罗技无影手专业版(替代选项 2)"
-#: xfree86.xml.in.h:182
-msgid "Logitech Cordless Desktop Pro (alternate option2)"
-msgstr "罗技无影手高级版(替代选项)"
-
-#: xfree86.xml.in.h:183
+#: ../rules/base.xml.in.h:488
msgid "Logitech Cordless Desktop iTouch"
-msgstr "罗技网际无影手"
+msgstr "罗技网际无影手 iTouch"
-#: xfree86.xml.in.h:184
+#: ../rules/base.xml.in.h:489
+#, fuzzy
msgid "Logitech Cordless Freedom/Desktop Navigator"
msgstr "罗技极光无影手组合/桌面导航器"
-#: xfree86.xml.in.h:185
-msgid "Logitech Deluxe Access Keyboard"
-msgstr "罗技强手键盘"
+#: ../rules/base.xml.in.h:490
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr ""
+
+#: ../rules/base.xml.in.h:491
+msgid "Logitech Generic Keyboard"
+msgstr "罗技通用键盘"
-#: xfree86.xml.in.h:186
+#: ../rules/base.xml.in.h:492
+msgid "Logitech Internet 350 Keyboard"
+msgstr "罗技网际 350 键盘"
+
+#: ../rules/base.xml.in.h:493
msgid "Logitech Internet Keyboard"
msgstr "罗技网际键盘"
-#: xfree86.xml.in.h:187
+#: ../rules/base.xml.in.h:494
msgid "Logitech Internet Navigator Keyboard"
msgstr "罗技网际导航键盘"
-#: xfree86.xml.in.h:188
+#: ../rules/base.xml.in.h:495
+msgid "Logitech Media Elite Keyboard"
+msgstr "罗技媒体增强键盘"
+
+#: ../rules/base.xml.in.h:496
+#, fuzzy
+msgid "Logitech Ultra-X Cordless Media Desktop Keyboard"
+msgstr "罗技无影手高级版"
+
+#: ../rules/base.xml.in.h:497
+msgid "Logitech Ultra-X Keyboard"
+msgstr "罗技 Ultra-X 键盘"
+
+#: ../rules/base.xml.in.h:498
+#, fuzzy
+msgid "Logitech diNovo Edge Keyboard"
+msgstr "罗技网际键盘"
+
+#: ../rules/base.xml.in.h:499
+#, fuzzy
+msgid "Logitech diNovo Keyboard"
+msgstr "罗技网际键盘"
+
+#: ../rules/base.xml.in.h:500
msgid "Logitech iTouch"
msgstr "罗技 iTouch"
-#: xfree86.xml.in.h:189
+#: ../rules/base.xml.in.h:501
msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)"
msgstr "罗技 iTouch 无影手键盘(型号 Y-RB6)"
-#: xfree86.xml.in.h:190
-msgid "Logitech iTouch keyboard Internet Navigator"
-msgstr "罗技 iTouch 键盘网际导航器"
+#: ../rules/base.xml.in.h:502
+#, fuzzy
+msgid "Logitech iTouch Internet Navigator Keyboard SE"
+msgstr "罗技网际导航键盘"
+
+#: ../rules/base.xml.in.h:503
+#, fuzzy
+msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)"
+msgstr "罗技网际导航键盘"
-#: xfree86.xml.in.h:191
-msgid "Ltu"
-msgstr "Ltu"
+#: ../rules/base.xml.in.h:504
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
-#: xfree86.xml.in.h:192
-msgid "Lva"
-msgstr "Lva"
+#: ../rules/base.xml.in.h:505
+msgid "MacBook/MacBook Pro (Intl)"
+msgstr "MacBook/MacBook Pro (Intl)"
-#: xfree86.xml.in.h:193
+#: ../rules/base.xml.in.h:506
msgid "Macedonian"
-msgstr "马其顿"
+msgstr "马其顿语"
-#: xfree86.xml.in.h:194
+#: ../rules/base.xml.in.h:507
+msgid "Macedonian (eliminate dead keys)"
+msgstr "马其顿语(除去死键)"
+
+#: ../rules/base.xml.in.h:508
msgid "Macintosh"
msgstr "Macintosh"
-#: xfree86.xml.in.h:195
+#: ../rules/base.xml.in.h:509
msgid "Macintosh Old"
-msgstr "Macintosh 旧产品"
+msgstr "Macintosh 旧款"
+
+#: ../rules/base.xml.in.h:510
+msgid "Make Caps Lock an additional Backspace"
+msgstr "将 CapsLock 作为额外的 Backspace"
+
+#: ../rules/base.xml.in.h:511
+#, fuzzy
+msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym"
+msgstr "将 CapsLock 作为额外的 Ctrl"
+
+#: ../rules/base.xml.in.h:512
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "将 CapsLock 作为额外的 Ctrl"
+
+#: ../rules/base.xml.in.h:513
+msgid "Make Caps Lock an additional ESC"
+msgstr "将 CapsLock 作为额外的 ESC"
-#: xfree86.xml.in.h:196
-msgid "Make CapsLock an additional Control"
+#: ../rules/base.xml.in.h:514
+#, fuzzy
+msgid "Make Caps Lock an additional Hyper"
msgstr "将 CapsLock 作为额外的 Ctrl"
-#: xfree86.xml.in.h:197
-msgid "Mal"
-msgstr "Mal"
+#: ../rules/base.xml.in.h:515
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "将 CapsLock 作为额外的 Num Lock"
-#: xfree86.xml.in.h:198
+#: ../rules/base.xml.in.h:516
+msgid "Make Caps Lock an additional Super"
+msgstr "将 CapsLock 作为额外的 Super"
+
+#: ../rules/base.xml.in.h:517
msgid "Malayalam"
msgstr "马来西亚"
-#: xfree86.xml.in.h:199
+#: ../rules/base.xml.in.h:518
+#, fuzzy
+msgid "Malayalam (Lalitha)"
+msgstr "马拉雅拉姆语()"
+
+#: ../rules/base.xml.in.h:519
+msgid "Malayalam (enhanced Inscript with Rupee Sign)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:520
msgid "Maltese"
-msgstr "马耳他"
+msgstr "马耳他语"
-#: xfree86.xml.in.h:200
-msgid "Maltese (US layout)"
-msgstr "马耳他(美国布局)"
+#: ../rules/base.xml.in.h:521
+msgid "Maltese (with US layout)"
+msgstr "马耳他语(美国布局)"
-#: xfree86.xml.in.h:201
+#: ../rules/base.xml.in.h:522
msgid "Memorex MX1998"
msgstr "Memorex MX1998"
-#: xfree86.xml.in.h:202
+#: ../rules/base.xml.in.h:523
msgid "Memorex MX2500 EZ-Access Keyboard"
msgstr "Memorex MX2500 EZ-Access 键盘"
-#: xfree86.xml.in.h:203
+#: ../rules/base.xml.in.h:524
msgid "Memorex MX2750"
msgstr "Memorex MX2750"
-#: xfree86.xml.in.h:204
-msgid "Menu is Compose"
-msgstr "菜单已编排"
+#: ../rules/base.xml.in.h:525
+msgid "Menu"
+msgstr "菜单"
-#: xfree86.xml.in.h:205
-msgid "Menu key changes group"
-msgstr "菜单键更改组"
+#: ../rules/base.xml.in.h:526
+msgid "Meta is mapped to Left Win"
+msgstr "Meta 被映射到左 Win 键。"
-#: xfree86.xml.in.h:206
-msgid "Meta is mapped to the Win-keys."
-msgstr "Meta 被映射到 Windows 键。"
+#: ../rules/base.xml.in.h:527
+msgid "Meta is mapped to Win keys"
+msgstr "Meta 被映射到 Win 键。"
-#: xfree86.xml.in.h:207
-msgid "Meta is mapped to the left Win-key."
-msgstr "Meta 被映射到左 Windows 键。"
+#: ../rules/base.xml.in.h:528
+msgid "Meta on Left Ctrl"
+msgstr "Meat 映射到左 Ctrl"
+
+#: ../rules/base.xml.in.h:529
+msgid "Microsoft Comfort Curve Keyboard 2000"
+msgstr "微软舒适曲线键盘 2000"
-#: xfree86.xml.in.h:208
+#: ../rules/base.xml.in.h:530
msgid "Microsoft Internet Keyboard"
msgstr "微软网际键盘"
-#: xfree86.xml.in.h:209
+#: ../rules/base.xml.in.h:531
msgid "Microsoft Internet Keyboard Pro, Swedish"
msgstr "微软网际键盘增强版,瑞典"
-#: xfree86.xml.in.h:210
+#: ../rules/base.xml.in.h:532
msgid "Microsoft Natural"
msgstr "微软自然键盘"
-#: xfree86.xml.in.h:211
+#: ../rules/base.xml.in.h:533
+msgid "Microsoft Natural Keyboard Elite"
+msgstr "微软自然键盘增强版"
+
+#: ../rules/base.xml.in.h:534
msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro"
-msgstr "微软自然键盘增强版/微软网际键盘增强版"
+msgstr "微软自然键盘增强版/微软网际键盘专业版"
-#: xfree86.xml.in.h:212
+#: ../rules/base.xml.in.h:535
msgid "Microsoft Natural Keyboard Pro OEM"
msgstr "微软自然键盘增强版 OEM"
-#: xfree86.xml.in.h:213
+#: ../rules/base.xml.in.h:536
+msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro"
+msgstr "微软自然键盘专业版 USB/微软网际键盘专业版"
+
+#: ../rules/base.xml.in.h:537
+#, fuzzy
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000"
+msgstr "微软自然键盘增强版 OEM"
+
+#: ../rules/base.xml.in.h:538
+#, fuzzy
+msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000"
+msgstr "微软自然键盘增强版 OEM"
+
+#: ../rules/base.xml.in.h:539
msgid "Microsoft Office Keyboard"
msgstr "微软 Office 键盘"
-#: xfree86.xml.in.h:214
+#: ../rules/base.xml.in.h:540
+msgid "Microsoft Wireless Multimedia Keyboard 1.0A"
+msgstr "微软无线多媒体键盘 1.0A"
+
+#: ../rules/base.xml.in.h:541
msgid "Miscellaneous compatibility options"
msgstr "其它兼容选项"
-#: xfree86.xml.in.h:215
-msgid "Mkd"
-msgstr "Mkd"
+#: ../rules/base.xml.in.h:542
+msgid "Mongolian"
+msgstr "蒙古"
-#: xfree86.xml.in.h:216
-msgid "Mlt"
-msgstr "Mlt"
+#: ../rules/base.xml.in.h:543
+msgid "Montenegrin"
+msgstr "黑山语"
-#: xfree86.xml.in.h:217
-msgid "Mmr"
-msgstr "Mmr"
+#: ../rules/base.xml.in.h:544
+msgid "Montenegrin (Cyrillic with guillemets)"
+msgstr ""
-#: xfree86.xml.in.h:218
-msgid "Mng"
-msgstr "Mng"
+#: ../rules/base.xml.in.h:545
+msgid "Montenegrin (Cyrillic)"
+msgstr "黑山语(西里尔)"
-#: xfree86.xml.in.h:219
-msgid "Mongolian"
-msgstr "蒙古"
+#: ../rules/base.xml.in.h:546
+msgid "Montenegrin (Cyrillic, Z and ZHE swapped)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:547
+msgid "Montenegrin (Latin qwerty)"
+msgstr "黑山语(拉丁 qwerty)"
-#: xfree86.xml.in.h:220
-msgid "Nld"
-msgstr "Nld"
+#: ../rules/base.xml.in.h:548
+msgid "Montenegrin (Latin unicode qwerty)"
+msgstr "黑山语(拉丁 unicode qwerty)"
-#: xfree86.xml.in.h:221
-msgid "Nor"
-msgstr "Nor"
+#: ../rules/base.xml.in.h:549
+msgid "Montenegrin (Latin unicode)"
+msgstr "黑山语(拉丁 unicode)"
+
+#: ../rules/base.xml.in.h:550
+msgid "Montenegrin (Latin with guillemets)"
+msgstr ""
-#: xfree86.xml.in.h:222
-msgid "Northern Saami (Finland)"
-msgstr "北部沙米(芬兰)"
+#: ../rules/base.xml.in.h:551
+msgid "Māori"
+msgstr ""
+
+#: ../rules/base.xml.in.h:552
+msgid "NICOLA-F style Backspace"
+msgstr ""
-#: xfree86.xml.in.h:223
-msgid "Northern Saami (Norway)"
-msgstr "北部沙米(挪威)"
+#: ../rules/base.xml.in.h:553
+msgid "Nepali"
+msgstr "尼泊尔语"
-#: xfree86.xml.in.h:224
-msgid "Northern Saami (Sweden)"
-msgstr "北部沙米(瑞典)"
+#: ../rules/base.xml.in.h:554
+msgid "Non-breakable space character at fourth level"
+msgstr "第四层的不可打断空白字符"
-#: xfree86.xml.in.h:225
+#: ../rules/base.xml.in.h:555
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:556
+msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:557
+msgid "Non-breakable space character at second level"
+msgstr "第二层的不可打断空白字符"
+
+#: ../rules/base.xml.in.h:558
+msgid "Non-breakable space character at third level"
+msgstr "第三层的不可打断空白字符"
+
+#: ../rules/base.xml.in.h:559
+msgid "Non-breakable space character at third level, nothing at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:560
+msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:561
msgid "Northgate OmniKey 101"
msgstr "Northgate OmniKey 101"
-#: xfree86.xml.in.h:226
+#: ../rules/base.xml.in.h:562
msgid "Norwegian"
-msgstr "挪威"
+msgstr "挪威语"
-#: xfree86.xml.in.h:227
-msgid "Num_Lock LED shows alternative group"
-msgstr "NumLock 灯显示替代组(_L)"
+#: ../rules/base.xml.in.h:563
+msgid "Norwegian (Dvorak)"
+msgstr "挪威语(德沃夏克)"
-#: xfree86.xml.in.h:228
-msgid "Ogh"
-msgstr "Ogh"
+#: ../rules/base.xml.in.h:564
+msgid "Norwegian (Mac)"
+msgstr "挪威(Mac)"
-#: xfree86.xml.in.h:229
-msgid "Ogham"
-msgstr "欧甘"
+#: ../rules/base.xml.in.h:565
+msgid "Norwegian (Mac, eliminate dead keys)"
+msgstr "挪威语(Mac,除去死键)"
-#: xfree86.xml.in.h:230
-msgid "Oretec MCK-800 MM/Internet keyboard"
-msgstr "Oretec MCK-800 MM/网际键盘"
+#: ../rules/base.xml.in.h:566
+msgid "Norwegian (Northern Saami"
+msgstr ""
+
+#: ../rules/base.xml.in.h:567
+msgid "Norwegian (eliminate dead keys)"
+msgstr "挪威语(除去死键)"
-#: xfree86.xml.in.h:231
-msgid "Ori"
-msgstr "Ori"
+#: ../rules/base.xml.in.h:568
+msgid "Norwegian (northern Saami, eliminate dead keys)"
+msgstr ""
-#: xfree86.xml.in.h:232
+#: ../rules/base.xml.in.h:569
+msgid "Num Lock"
+msgstr "数字锁定"
+
+#: ../rules/base.xml.in.h:570
+msgid "Numeric keypad delete key behaviour"
+msgstr "数字小键盘上删除键的行为"
+
+#: ../rules/base.xml.in.h:571
+msgid "Numeric keypad keys work as with Mac"
+msgstr "数字小键盘的行为跟 Mac 一样"
+
+#: ../rules/base.xml.in.h:572
+msgid "Numeric keypad layout selection"
+msgstr "数字小键盘布局选择"
+
+#: ../rules/base.xml.in.h:573
+msgid "OLPC"
+msgstr "OLPC"
+
+#: ../rules/base.xml.in.h:574
msgid "Oriya"
msgstr "Oriya"
-#: xfree86.xml.in.h:233
+#: ../rules/base.xml.in.h:575
+#, fuzzy
+msgid "Ortek MCK-800 MM/Internet keyboard"
+msgstr "Oretec MCK-800 MM/网际键盘"
+
+#: ../rules/base.xml.in.h:576
msgid "PC-98xx Series"
msgstr "PC-98xx 系列"
-#: xfree86.xml.in.h:234
-msgid "PC104"
-msgstr "PC104"
+#: ../rules/base.xml.in.h:577
+msgid "Pashto"
+msgstr ""
+
+#: ../rules/base.xml.in.h:578
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr ""
-#: xfree86.xml.in.h:235
-msgid "Pan"
-msgstr "Pan"
+#: ../rules/base.xml.in.h:579
+msgid "Pause"
+msgstr "暂停"
-#: xfree86.xml.in.h:236
-msgid "Phonetic"
-msgstr "Phonetic"
+#: ../rules/base.xml.in.h:580
+msgid "Persian"
+msgstr "波斯语"
-#: xfree86.xml.in.h:237
-msgid "Pol"
-msgstr "Pol"
+#: ../rules/base.xml.in.h:581
+msgid "Persian (Afghanistan, Dari OLPC)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:582
+msgid "Persian (with Persian Keypad)"
+msgstr ""
-#: xfree86.xml.in.h:238
+#: ../rules/base.xml.in.h:583
+msgid "Philippines - Dvorak (Baybayin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:584
msgid "Polish"
msgstr "波兰"
-#: xfree86.xml.in.h:239
+#: ../rules/base.xml.in.h:585
+msgid "Polish (Dvorak)"
+msgstr "波兰(德沃夏克)"
+
+#: ../rules/base.xml.in.h:586
+msgid "Polish (Dvorak, polish quotes on key 1)"
+msgstr "波兰语(德沃夏克,波兰语引号在 1 键上)"
+
+#: ../rules/base.xml.in.h:587
+msgid "Polish (Dvorak, polish quotes on quotemark key)"
+msgstr "波兰语(德沃夏克,波兰语引号在标记为引号的键上)"
+
+#: ../rules/base.xml.in.h:588
+msgid "Polish (Kashubian)"
+msgstr "波兰语(卡舒比方言)"
+
+#: ../rules/base.xml.in.h:589
+msgid "Polish (programmer Dvorak)"
+msgstr "波兰语(适合程序员的德沃夏克)"
+
+#: ../rules/base.xml.in.h:590
msgid "Polish (qwertz)"
msgstr "波兰(qwertz)"
-#: xfree86.xml.in.h:240
-msgid "Polytonic"
-msgstr "Polytonic"
-
-#: xfree86.xml.in.h:241
+#: ../rules/base.xml.in.h:591
msgid "Portuguese"
-msgstr "葡萄牙"
+msgstr "葡萄牙语"
-#: xfree86.xml.in.h:242
-msgid "PowerPC PS/2"
-msgstr "PowerPC PS/2"
+#: ../rules/base.xml.in.h:592
+msgid "Portuguese (Brazil)"
+msgstr "葡萄牙(巴西)"
-#: xfree86.xml.in.h:243
-msgid "Press Left Win-key to choose 3rd level"
-msgstr "按左 Windows 键选择第三级"
+#: ../rules/base.xml.in.h:593
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "葡萄牙语(巴西,德沃夏克)"
-#: xfree86.xml.in.h:244
-msgid "Press Menu key to choose 3rd level"
-msgstr "按菜单键选择第三级"
+#: ../rules/base.xml.in.h:594
+msgid "Portuguese (Brazil, eliminate dead keys)"
+msgstr "葡萄牙语(巴西,除去死键)"
-#: xfree86.xml.in.h:245
-msgid "Press Right Control to choose 3rd level"
-msgstr "按右 Ctrl 选择第三级"
+#: ../rules/base.xml.in.h:595
+msgid "Portuguese (Brazil, nativo for Esperanto)"
+msgstr ""
-#: xfree86.xml.in.h:246
-msgid "Press Right Win-key to choose 3rd level"
-msgstr "按右 Windows 键选择第三级"
+#: ../rules/base.xml.in.h:596
+msgid "Portuguese (Brazil, nativo for USA keyboards)"
+msgstr ""
-#: xfree86.xml.in.h:247
-msgid "Press any of Win-keys to choose 3rd level"
-msgstr "按任何 Windows 键选择第三级"
+#: ../rules/base.xml.in.h:597
+msgid "Portuguese (Brazil, nativo)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:598
+msgid "Portuguese (Mac)"
+msgstr "葡萄牙语(Mac)"
+
+#: ../rules/base.xml.in.h:599
+msgid "Portuguese (Mac, Sun dead keys)"
+msgstr "葡萄牙语(Mac,Sun 死键)"
+
+#: ../rules/base.xml.in.h:600
+msgid "Portuguese (Mac, eliminate dead keys)"
+msgstr "葡萄牙语(Mac,除去死键)"
+
+#: ../rules/base.xml.in.h:601
+msgid "Portuguese (Nativo for Esperanto)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:602
+msgid "Portuguese (Nativo for USA keyboards)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:603
+#, fuzzy
+msgid "Portuguese (Nativo)"
+msgstr "葡萄牙"
+
+#: ../rules/base.xml.in.h:604
+msgid "Portuguese (Sun dead keys)"
+msgstr "葡萄牙语(Sun 死键)"
-#: xfree86.xml.in.h:248
+#: ../rules/base.xml.in.h:605
+msgid "Portuguese (eliminate dead keys)"
+msgstr "葡萄牙语(除去死键)"
+
+#: ../rules/base.xml.in.h:606
msgid "Propeller Voyager (KTEZ-1000)"
msgstr "Propeller Voyager (KTEZ-1000)"
-#: xfree86.xml.in.h:249
-msgid "Prt"
-msgstr "Prt"
+#: ../rules/base.xml.in.h:607
+msgid "PrtSc"
+msgstr "截屏"
+
+#: ../rules/base.xml.in.h:608
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:609
+#, fuzzy
+msgid "Punjabi (Gurmukhi)"
+msgstr "旁遮普"
-#: xfree86.xml.in.h:250
+#: ../rules/base.xml.in.h:610
msgid "QTronix Scorpius 98N+"
msgstr "QTronix Scorpius 98N+"
-#: xfree86.xml.in.h:251
-msgid "R-Alt switches group while pressed"
-msgstr "按下右 Alt 切换组"
+#: ../rules/base.xml.in.h:611
+msgid "Right Alt"
+msgstr "右 Alt"
-#: xfree86.xml.in.h:252
-msgid "Right Alt is Compose"
+#: ../rules/base.xml.in.h:612
+#, fuzzy
+msgid "Right Alt (while pressed)"
msgstr "右 Alt 已编排"
-#: xfree86.xml.in.h:253
-msgid "Right Alt key changes group"
-msgstr "右 Alt 键更改组"
+#: ../rules/base.xml.in.h:613
+msgid "Right Alt chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
-#: xfree86.xml.in.h:254
-msgid "Right Control key works as Right Alt"
-msgstr "右 Ctrl 键等同于右 Alt"
+#: ../rules/base.xml.in.h:614
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr ""
-#: xfree86.xml.in.h:255
-msgid "Right Ctrl key changes group"
-msgstr "右 Ctrl 键更改组"
+#: ../rules/base.xml.in.h:615
+msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
-#: xfree86.xml.in.h:256
-msgid "Right Shift key changes group"
-msgstr "右 Shift 健更改组"
+#: ../rules/base.xml.in.h:616
+#, fuzzy
+msgid "Right Alt key never chooses 3rd level"
+msgstr "按右 Windows 键选择第三级"
-#: xfree86.xml.in.h:257
-msgid "Right Win-key changes group"
-msgstr "右 Windows 键更改组"
+#: ../rules/base.xml.in.h:617
+msgid "Right Alt, Shift+Right Alt key is Multi_Key"
+msgstr ""
-#: xfree86.xml.in.h:258
-msgid "Right Win-key is Compose"
-msgstr "右 Windows 键已编排"
+#: ../rules/base.xml.in.h:618
+msgid "Right Ctrl"
+msgstr "右 Ctrl"
-#: xfree86.xml.in.h:259
-msgid "Right Win-key switches group while pressed"
+#: ../rules/base.xml.in.h:619
+#, fuzzy
+msgid "Right Ctrl (while pressed)"
msgstr "按下右 Windows 键切换组"
-#: xfree86.xml.in.h:260
+#: ../rules/base.xml.in.h:620
+msgid "Right Ctrl as Right Alt"
+msgstr "右 Ctrl 作为 Alt"
+
+#: ../rules/base.xml.in.h:621
+msgid "Right Ctrl is mapped to Menu"
+msgstr "右 Alt 映射为菜单"
+
+#: ../rules/base.xml.in.h:622
+msgid "Right Ctrl+Right Shift"
+msgstr "右 Ctrl+右 Shift"
+
+#: ../rules/base.xml.in.h:623
+msgid "Right Shift"
+msgstr "右 Shift"
+
+#: ../rules/base.xml.in.h:624
+msgid "Right Win"
+msgstr "右 Win"
+
+#: ../rules/base.xml.in.h:625
+#, fuzzy
+msgid "Right Win (while pressed)"
+msgstr "按下右 Windows 键切换组"
+
+#: ../rules/base.xml.in.h:626
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser"
+msgstr ""
+
+#: ../rules/base.xml.in.h:627
+msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock"
+msgstr ""
+
+#: ../rules/base.xml.in.h:628
msgid "Romanian"
msgstr "罗马尼亚"
-#: xfree86.xml.in.h:261
-msgid "Rou"
-msgstr "Rou"
+#: ../rules/base.xml.in.h:629
+msgid "Romanian (Crimean Tatar Dobruca-1 Q)"
+msgstr ""
-#: xfree86.xml.in.h:262
-msgid "Rus"
-msgstr "Rus"
+#: ../rules/base.xml.in.h:630
+msgid "Romanian (Crimean Tatar Dobruca-2 Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:631
+msgid "Romanian (Crimean Tatar Turkish Alt-Q)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:632
+msgid "Romanian (Crimean Tatar Turkish F)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:633
+#, fuzzy
+msgid "Romanian (WinKeys)"
+msgstr "罗马尼亚"
+
+#: ../rules/base.xml.in.h:634
+#, fuzzy
+msgid "Romanian (cedilla)"
+msgstr "罗马尼亚"
+
+#: ../rules/base.xml.in.h:635
+msgid "Romanian (standard cedilla)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:636
+msgid "Romanian (standard)"
+msgstr "罗马尼亚(标准)"
+
+#: ../rules/base.xml.in.h:637
+msgid "Rupee on 4"
+msgstr ""
-#: xfree86.xml.in.h:263
+#: ../rules/base.xml.in.h:638
msgid "Russian"
msgstr "俄语"
-#: xfree86.xml.in.h:264
+#: ../rules/base.xml.in.h:639
+msgid "Russian (Bashkirian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:640
+msgid "Russian (Chuvash Latin)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:641
+msgid "Russian (Chuvash)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:642
+msgid "Russian (DOS)"
+msgstr "俄语(DOS)"
+
+#: ../rules/base.xml.in.h:643
+msgid "Russian (Georgia)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:644
+msgid "Russian (Germany, phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:645
+#, fuzzy
+msgid "Russian (Kalmyk)"
+msgstr "俄语"
+
+#: ../rules/base.xml.in.h:646
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:647
+#, fuzzy
+msgid "Russian (Komi)"
+msgstr "俄语"
+
+#: ../rules/base.xml.in.h:648
+#, fuzzy
+msgid "Russian (Mari)"
+msgstr "俄语"
+
+#: ../rules/base.xml.in.h:649
+msgid "Russian (Ossetian, WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:650
+msgid "Russian (Ossetian, legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:651
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:652
+msgid "Russian (Serbian)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:653
+msgid "Russian (Sweden, phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:654
+msgid "Russian (Sweden, phonetic, eliminate dead keys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:655
+#, fuzzy
+msgid "Russian (Tatar)"
+msgstr "俄语"
+
+#: ../rules/base.xml.in.h:656
+msgid "Russian (US, phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:657
+#, fuzzy
+msgid "Russian (Udmurt)"
+msgstr "俄语"
+
+#: ../rules/base.xml.in.h:658
+#, fuzzy
+msgid "Russian (Yakut)"
+msgstr "俄语"
+
+#: ../rules/base.xml.in.h:659
+msgid "Russian (legacy)"
+msgstr "俄语(传统)"
+
+#: ../rules/base.xml.in.h:660
+msgid "Russian (phonetic WinKeys)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:661
+msgid "Russian (phonetic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:662
+msgid "Russian (typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:663
+msgid "Russian (typewriter, legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:664
+msgid "SILVERCREST Multimedia Wireless Keyboard"
+msgstr "SILVERCREST 多媒体无线键盘"
+
+#: ../rules/base.xml.in.h:665
msgid "SK-1300"
msgstr "SK-1300"
-#: xfree86.xml.in.h:265
+#: ../rules/base.xml.in.h:666
msgid "SK-2500"
msgstr "SK-2500"
-#: xfree86.xml.in.h:266
+#: ../rules/base.xml.in.h:667
msgid "SK-6200"
msgstr "SK-6200"
-#: xfree86.xml.in.h:267
+#: ../rules/base.xml.in.h:668
msgid "SK-7100"
msgstr "SK-7100"
-#: xfree86.xml.in.h:268
+#: ../rules/base.xml.in.h:669
msgid "SVEN Ergonomic 2500"
msgstr "SVEN Ergonomic 2500"
-#: xfree86.xml.in.h:269
+#: ../rules/base.xml.in.h:670
+msgid "SVEN Slim 303"
+msgstr ""
+
+#: ../rules/base.xml.in.h:671
+msgid "Saisiyat (Taiwan)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:672
msgid "Samsung SDM 4500P"
msgstr "三星 SDM 4500P"
-#: xfree86.xml.in.h:270
+#: ../rules/base.xml.in.h:673
msgid "Samsung SDM 4510P"
msgstr "三星 SDM 4510P"
-#: xfree86.xml.in.h:271
-msgid "Sapmi"
-msgstr "Sapmi"
+#: ../rules/base.xml.in.h:674
+msgid "Sanwa Supply SKB-KG3"
+msgstr ""
-#: xfree86.xml.in.h:272
-msgid "Scg"
-msgstr "Scg"
+#: ../rules/base.xml.in.h:675
+msgid "Scroll Lock"
+msgstr "滚动锁定"
-#: xfree86.xml.in.h:273
-msgid "Scroll_Lock LED shows alternative group"
-msgstr "ScrollLock 灯显示替代组(_L)"
+#: ../rules/base.xml.in.h:676
+msgid "Secwepemctsin"
+msgstr ""
+
+#: ../rules/base.xml.in.h:677
+msgid "Semi-colon on third level"
+msgstr "第三层上的分号"
-#: xfree86.xml.in.h:274
+#: ../rules/base.xml.in.h:678
msgid "Serbian"
msgstr "塞尔维亚"
-#: xfree86.xml.in.h:275
-msgid "Shift with numpad keys works as in MS Windows"
+#: ../rules/base.xml.in.h:679
+msgid "Serbian (Latin Unicode qwerty)"
+msgstr "塞尔维亚(拉丁 Unicode qwerty)"
+
+#: ../rules/base.xml.in.h:680
+msgid "Serbian (Latin Unicode)"
+msgstr "塞尔维亚(拉丁 Unicode)"
+
+#: ../rules/base.xml.in.h:681
+msgid "Serbian (Latin qwerty)"
+msgstr "塞尔维亚(拉丁 qwerty)"
+
+#: ../rules/base.xml.in.h:682
+msgid "Serbian (Latin with guillemets)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:683
+msgid "Serbian (Latin)"
+msgstr "塞尔维亚(拉丁)"
+
+#: ../rules/base.xml.in.h:684
+msgid "Serbian (Pannonian Rusyn Homophonic)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:685
+msgid "Serbian (Z and ZHE swapped)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:686
+msgid "Serbian (with guillemets)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:687
+msgid "Serbo-Croatian (US)"
+msgstr "塞尔维亚-克罗地亚语(美国键盘)"
+
+#: ../rules/base.xml.in.h:688
+msgid "Shift cancels Caps Lock"
+msgstr "Shift 取消大写锁定"
+
+#: ../rules/base.xml.in.h:689
+msgid "Shift does not cancel Num Lock, chooses 3rd level instead"
+msgstr ""
+
+#: ../rules/base.xml.in.h:690
+#, fuzzy
+msgid "Shift with numeric keypad keys works as in MS Windows"
msgstr "Shift+数字键盘的功能等同于 MS Windows"
-#: xfree86.xml.in.h:276
+#: ../rules/base.xml.in.h:691
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
+
+#: ../rules/base.xml.in.h:692
+msgid "Sindhi"
+msgstr "信德语"
+
+#: ../rules/base.xml.in.h:693
+msgid "Sinhala"
+msgstr "僧伽罗语"
+
+#: ../rules/base.xml.in.h:694
msgid "Slovak"
-msgstr "斯洛伐克"
+msgstr "斯洛伐克语"
-#: xfree86.xml.in.h:277
+#: ../rules/base.xml.in.h:695
+msgid "Slovak (extended Backslash)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:696
msgid "Slovak (qwerty)"
-msgstr "斯洛伐克(qwerty)"
+msgstr "斯洛伐克语(qwerty)"
+
+#: ../rules/base.xml.in.h:697
+msgid "Slovak (qwerty, extended Backslash)"
+msgstr "斯洛伐克语(qwerty)"
-#: xfree86.xml.in.h:278
-msgid "Slovenian"
-msgstr "斯洛文尼亚"
+#: ../rules/base.xml.in.h:698
+msgid "Slovene"
+msgstr "斯洛文尼亚语"
-#: xfree86.xml.in.h:279
-msgid "Sme"
-msgstr "Sme"
+#: ../rules/base.xml.in.h:699
+msgid "Slovene (US keyboard with Slovenian letters)"
+msgstr "斯洛文尼亚语(带斯洛文尼亚字母的美国键盘)"
-#: xfree86.xml.in.h:280
+#: ../rules/base.xml.in.h:700
+msgid "Slovene (use guillemets for quotes)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:701
msgid "Spanish"
msgstr "西班牙"
-#: xfree86.xml.in.h:281
-msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server."
-msgstr "服务器处理的特殊键 (Ctrl+Alt+&lt;key&gt;)。"
+#: ../rules/base.xml.in.h:702
+msgid "Spanish (Asturian variant with bottom-dot H and bottom-dot L)"
+msgstr ""
-#: xfree86.xml.in.h:282
-msgid "Standard"
-msgstr "标准"
+#: ../rules/base.xml.in.h:703
+msgid "Spanish (Catalan variant with middle-dot L)"
+msgstr ""
-#: xfree86.xml.in.h:283
-msgid "Sun dead keys"
-msgstr "Sun 死键"
+#: ../rules/base.xml.in.h:704
+msgid "Spanish (Dvorak)"
+msgstr "西班牙语(德沃夏克)"
-#: xfree86.xml.in.h:284
-msgid "Super is mapped to the Win-keys (default)."
-msgstr "Super 被映射到 Windows 键(默认)。"
+#: ../rules/base.xml.in.h:705
+msgid "Spanish (Latin American)"
+msgstr "西班牙语(拉丁美洲)"
-#: xfree86.xml.in.h:285
-msgid "Sv"
-msgstr "Sv"
+#: ../rules/base.xml.in.h:706
+msgid "Spanish (Latin American, eliminate dead keys)"
+msgstr "西班牙语(拉丁美洲,除去死键)"
+
+#: ../rules/base.xml.in.h:707
+msgid "Spanish (Latin American, include dead tilde)"
+msgstr ""
-#: xfree86.xml.in.h:286
-msgid "Svk"
-msgstr "Svk"
+#: ../rules/base.xml.in.h:708
+msgid "Spanish (Latin American, sun dead keys)"
+msgstr "西班牙语(拉丁美洲,Sun 死键)"
-#: xfree86.xml.in.h:287
-msgid "Svn"
-msgstr "Svn"
+#: ../rules/base.xml.in.h:709
+msgid "Spanish (Mac)"
+msgstr "西班牙语(Mac)"
-#: xfree86.xml.in.h:288
-msgid "Swap Control and Caps Lock"
-msgstr "交换 Ctrl 和 CapsLock"
+#: ../rules/base.xml.in.h:710
+msgid "Spanish (Sun dead keys)"
+msgstr "西班牙语(Sun 死键)"
-#: xfree86.xml.in.h:289
-msgid "Swe"
-msgstr "Swe"
+#: ../rules/base.xml.in.h:711
+msgid "Spanish (eliminate dead keys)"
+msgstr "西班牙语(除去死键)"
+
+#: ../rules/base.xml.in.h:712
+msgid "Spanish (include dead tilde)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:713
+#, fuzzy
+msgid "Special keys (Ctrl+Alt+&lt;key&gt;) handled in a server"
+msgstr "服务器处理的特殊键 (Ctrl+Alt+&lt;key&gt;)。"
+
+#: ../rules/base.xml.in.h:714
+msgid "Sun Type 5/6"
+msgstr "Sun Type 5/6"
+
+#: ../rules/base.xml.in.h:715
+#, fuzzy
+msgid "Super Power Multimedia Keyboard"
+msgstr "惠普 SK-2501 多媒体键盘"
-#: xfree86.xml.in.h:290
+#: ../rules/base.xml.in.h:716
+msgid "Swahili (Kenya)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:717
+msgid "Swahili (Tanzania)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:718
+msgid "Swap Ctrl and Caps Lock"
+msgstr "交换 Ctrl 和大写锁定"
+
+#: ../rules/base.xml.in.h:719
+msgid "Swap ESC and Caps Lock"
+msgstr "交换 ESC 和大写锁定"
+
+#: ../rules/base.xml.in.h:720
msgid "Swedish"
-msgstr "瑞典"
+msgstr "瑞典语"
+
+#: ../rules/base.xml.in.h:721
+msgid "Swedish (Dvorak)"
+msgstr "瑞典语(德沃夏克)"
-#: xfree86.xml.in.h:291
-msgid "Swiss French"
-msgstr "瑞典法语"
+#: ../rules/base.xml.in.h:722
+msgid "Swedish (Mac)"
+msgstr "瑞典语(Mac)"
-#: xfree86.xml.in.h:292
-msgid "Swiss German"
-msgstr "瑞典德语"
+#: ../rules/base.xml.in.h:723
+msgid "Swedish (Svdvorak)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:724
+msgid "Swedish (eliminate dead keys)"
+msgstr "瑞典语(除去死键)"
+
+#: ../rules/base.xml.in.h:725
+msgid "Swedish (northern Saami)"
+msgstr ""
-#: xfree86.xml.in.h:293
+#: ../rules/base.xml.in.h:726
+msgid "Swiss"
+msgstr "瑞士语"
+
+#: ../rules/base.xml.in.h:727
+msgid "Swiss (legacy)"
+msgstr "瑞士语(传统)"
+
+#: ../rules/base.xml.in.h:728
msgid "Symplon PaceBook (tablet PC)"
msgstr "Symplon PaceBook(平板电脑)"
-#: xfree86.xml.in.h:294
-msgid "Syr"
-msgstr "Syr"
-
-#: xfree86.xml.in.h:295
+#: ../rules/base.xml.in.h:729
msgid "Syriac"
msgstr "叙利亚"
-#: xfree86.xml.in.h:296
+#: ../rules/base.xml.in.h:730
+msgid "Syriac (phonetic)"
+msgstr "叙利亚(音标)"
+
+#: ../rules/base.xml.in.h:731
+msgid "Taiwanese"
+msgstr "台言"
+
+#: ../rules/base.xml.in.h:732
+msgid "Taiwanese (indigenous)"
+msgstr "台湾原住民语言"
+
+#: ../rules/base.xml.in.h:733
msgid "Tajik"
msgstr "塔吉克"
-#: xfree86.xml.in.h:297
+#: ../rules/base.xml.in.h:734
+msgid "Tajik (legacy)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:735
msgid "Tamil"
msgstr "泰米尔"
-#: xfree86.xml.in.h:298
-msgid "Tel"
-msgstr "Tel"
+#: ../rules/base.xml.in.h:736
+msgid "Tamil (Sri Lanka, TAB Typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:737
+msgid "Tamil (Sri Lanka, Unicode)"
+msgstr "泰米尔语(斯里兰卡,Unicode)"
-#: xfree86.xml.in.h:299
+#: ../rules/base.xml.in.h:738
+msgid "Tamil (TAB typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:739
+msgid "Tamil (TSCII typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:740
+msgid "Tamil (Unicode)"
+msgstr "泰米尔语(Unicode)"
+
+#: ../rules/base.xml.in.h:741
+#, fuzzy
+msgid "Tamil (keyboard with numerals)"
+msgstr "美国键盘,带罗马尼亚字符"
+
+#: ../rules/base.xml.in.h:742
+msgid "Targa Visionary 811"
+msgstr ""
+
+#: ../rules/base.xml.in.h:743
msgid "Telugu"
msgstr "泰卢固"
-#: xfree86.xml.in.h:300
-msgid "Tha"
-msgstr "Tha"
-
-#: xfree86.xml.in.h:301
-msgid "Thai (Kedmanee)"
-msgstr "泰语(Kedmanee)"
+#: ../rules/base.xml.in.h:744
+msgid "Thai"
+msgstr "泰语"
-#: xfree86.xml.in.h:302
+#: ../rules/base.xml.in.h:745
+#, fuzzy
msgid "Thai (Pattachote)"
msgstr "泰语(Pattachote)"
-#: xfree86.xml.in.h:303
+#: ../rules/base.xml.in.h:746
msgid "Thai (TIS-820.2538)"
msgstr "泰语(TIS-820.2538)"
-#: xfree86.xml.in.h:304
-msgid "Third level choosers"
-msgstr "第三级选择"
+#: ../rules/base.xml.in.h:747
+msgid "To the corresponding key in a Dvorak keyboard."
+msgstr "德沃夏克键盘上的相应键"
-#: xfree86.xml.in.h:305
-msgid "Tjk"
-msgstr "Tjk"
+#: ../rules/base.xml.in.h:748
+msgid "To the corresponding key in a Qwerty keyboard."
+msgstr ""
-#: xfree86.xml.in.h:306
-msgid "Tml"
-msgstr "Tml"
+#: ../rules/base.xml.in.h:749
+msgid "Toggle PointerKeys with Shift + NumLock."
+msgstr ""
-#: xfree86.xml.in.h:307
+#: ../rules/base.xml.in.h:750
msgid "Toshiba Satellite S3000"
msgstr "东芝 Satellite S3000"
-#: xfree86.xml.in.h:308
+#: ../rules/base.xml.in.h:751
msgid "Trust Direct Access Keyboard"
msgstr "Trust Direct Access 键盘"
-#: xfree86.xml.in.h:309
+#: ../rules/base.xml.in.h:752
+msgid "Trust Slimline"
+msgstr ""
+
+#: ../rules/base.xml.in.h:753
msgid "Trust Wireless Keyboard Classic"
msgstr "Trust 无线经典键盘"
-#: xfree86.xml.in.h:310
-msgid "Tur"
-msgstr "Tur"
+#: ../rules/base.xml.in.h:754
+msgid "Tswana"
+msgstr ""
-#: xfree86.xml.in.h:311
+#: ../rules/base.xml.in.h:755
msgid "Turkish"
msgstr "土耳其"
-#: xfree86.xml.in.h:312
+#: ../rules/base.xml.in.h:756
+msgid "Turkish (Alt-Q)"
+msgstr "土耳其(Alt-Q)"
+
+#: ../rules/base.xml.in.h:757
+msgid "Turkish (Crimean Tatar Turkish Alt-Q)"
+msgstr "土耳其(克里米亚鞑靼语土耳其键盘 Alt-Q)"
+
+#: ../rules/base.xml.in.h:758
+msgid "Turkish (Crimean Tatar Turkish F)"
+msgstr "土耳其(克里米亚鞑靼语土耳其键盘 F)"
+
+#: ../rules/base.xml.in.h:759
+msgid "Turkish (Crimean Tatar Turkish Q)"
+msgstr "土耳其(克里米亚鞑靼语土耳其键盘 Q)"
+
+#: ../rules/base.xml.in.h:760
msgid "Turkish (F)"
msgstr "土耳其(F)"
-#: xfree86.xml.in.h:313
-msgid "Turkish Alt-Q Layout"
-msgstr "土耳其 ALt-Q 布局"
+#: ../rules/base.xml.in.h:761
+msgid "Turkish (Sun dead keys)"
+msgstr "土耳其语(Sun 死键)"
-#: xfree86.xml.in.h:314
-msgid "U.S. English"
-msgstr "美国英语"
+#: ../rules/base.xml.in.h:762
+msgid "Turkish (international with dead keys)"
+msgstr "土耳其语(国际,带死键)"
-#: xfree86.xml.in.h:315
-msgid "U.S. English w/ ISO9995-3"
-msgstr "美国英语 ISO9995-3"
+#: ../rules/base.xml.in.h:763
+msgid "Turkmen"
+msgstr ""
-#: xfree86.xml.in.h:316
-msgid "U.S. English w/ dead keys"
-msgstr "美国英语带死键"
+#: ../rules/base.xml.in.h:764
+msgid "Turkmen (Alt-Q)"
+msgstr ""
-#: xfree86.xml.in.h:317
-msgid "US"
-msgstr "US"
+#: ../rules/base.xml.in.h:765
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr ""
-#: xfree86.xml.in.h:318
-msgid "US keyboard with Romanian letters"
-msgstr "美国键盘,带罗马尼亚字符"
+#: ../rules/base.xml.in.h:766
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr ""
-#: xfree86.xml.in.h:319
-msgid "USA"
-msgstr "USA"
+#: ../rules/base.xml.in.h:767
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr ""
-#: xfree86.xml.in.h:320
-msgid "Ukr"
-msgstr "Ukr"
+#: ../rules/base.xml.in.h:768
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:769
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr ""
-#: xfree86.xml.in.h:321
+#: ../rules/base.xml.in.h:770
msgid "Ukrainian"
+msgstr "乌克兰语"
+
+#: ../rules/base.xml.in.h:771
+msgid "Ukrainian (Crimean Tatar Turkish Alt-Q)"
+msgstr "乌克兰语(克里米亚鞑靼土耳其 Alt-Q)"
+
+#: ../rules/base.xml.in.h:772
+msgid "Ukrainian (Crimean Tatar Turkish F)"
+msgstr "乌克兰语(克里米亚鞑靼土耳其 F)"
+
+#: ../rules/base.xml.in.h:773
+msgid "Ukrainian (Crimean Tatar Turkish Q)"
+msgstr "乌克兰语(克里米亚鞑靼土耳其 Q)"
+
+#: ../rules/base.xml.in.h:774
+#, fuzzy
+msgid "Ukrainian (WinKeys)"
msgstr "乌克兰"
-#: xfree86.xml.in.h:322
-msgid "UnicodeExpert"
-msgstr "UnicodeExpert"
+#: ../rules/base.xml.in.h:775
+msgid "Ukrainian (homophonic)"
+msgstr ""
-#: xfree86.xml.in.h:323
-msgid "United Kingdom"
-msgstr "英国"
+#: ../rules/base.xml.in.h:776
+msgid "Ukrainian (legacy)"
+msgstr "乌克兰语(传统)"
-#: xfree86.xml.in.h:324
-msgid "Use keyboard LED to show alternative group"
-msgstr "使用键盘灯显示替代组"
+#: ../rules/base.xml.in.h:777
+msgid "Ukrainian (phonetic)"
+msgstr "乌克兰语(音标)"
-#: xfree86.xml.in.h:325
-msgid "Uses internal capitalization. Shift cancels Caps."
-msgstr "使用内部大写。Shift 取消大写。"
+#: ../rules/base.xml.in.h:778
+msgid "Ukrainian (standard RSTU on Russian layout)"
+msgstr ""
-#: xfree86.xml.in.h:326
-msgid "Uses internal capitalization. Shift doesn't cancel Caps."
-msgstr "使用内部大写。Shift 不取消大写。"
+#: ../rules/base.xml.in.h:779
+msgid "Ukrainian (standard RSTU)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:780
+msgid "Ukrainian (typewriter)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:781
+msgid "Unicode additions (arrows and math operators)"
+msgstr "Unicode 扩展(箭头和数学操作符)"
+
+#: ../rules/base.xml.in.h:782
+#, fuzzy
+msgid "Unicode additions (arrows and math operators). Math operators on default level"
+msgstr "Unicode 扩展(箭头和数学操作符)。"
+
+#: ../rules/base.xml.in.h:783
+msgid "Unitek KB-1925"
+msgstr ""
+
+#: ../rules/base.xml.in.h:784
+msgid "Urdu (Pakistan)"
+msgstr "乌尔都语(巴基斯坦)"
+
+#: ../rules/base.xml.in.h:785
+msgid "Urdu (Pakistan, CRULP)"
+msgstr ""
-#: xfree86.xml.in.h:327
-msgid "Uzb"
-msgstr "Uzb"
+#: ../rules/base.xml.in.h:786
+msgid "Urdu (Pakistan, NLA)"
+msgstr ""
+
+#: ../rules/base.xml.in.h:787
+msgid "Urdu (WinKeys)"
+msgstr ""
-#: xfree86.xml.in.h:328
+#: ../rules/base.xml.in.h:788
+msgid "Urdu (alternative phonetic)"
+msgstr "乌尔都语(替代音标)"
+
+#: ../rules/base.xml.in.h:789
+msgid "Urdu (phonetic)"
+msgstr "乌尔都语(音标)"
+
+#: ../rules/base.xml.in.h:790
+msgid "Use keyboard LED to show alternative layout"
+msgstr "使用键盘灯显示替代布局"
+
+#: ../rules/base.xml.in.h:791
+msgid "Using space key to input non-breakable space character"
+msgstr "使用空格键输入不可打断空白字符"
+
+#: ../rules/base.xml.in.h:792
+msgid "Usual space at any level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:793
msgid "Uzbek"
-msgstr "乌兹别克"
+msgstr "乌兹别克语"
+
+#: ../rules/base.xml.in.h:794
+msgid "Uzbek (Afghanistan)"
+msgstr "乌兹别克语(阿富汗)"
-#: xfree86.xml.in.h:329
+#: ../rules/base.xml.in.h:795
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "乌兹别克语(阿富汗,OLPC)"
+
+#: ../rules/base.xml.in.h:796
+msgid "Uzbek (Crimean Tatar Turkish Alt-Q)"
+msgstr "乌兹别克语(克里米亚鞑靼土耳其 Alt-Q)"
+
+#: ../rules/base.xml.in.h:797
+msgid "Uzbek (Crimean Tatar Turkish F)"
+msgstr "乌兹别克语(克里米亚鞑靼土耳其 F)"
+
+#: ../rules/base.xml.in.h:798
+msgid "Uzbek (Crimean Tatar Turkish Q)"
+msgstr "乌兹别克语(克里米亚鞑靼土耳其 Q)"
+
+#: ../rules/base.xml.in.h:799
+msgid "Uzbek (Latin)"
+msgstr "乌兹别克语(拉丁)"
+
+#: ../rules/base.xml.in.h:800
msgid "Vietnamese"
msgstr "越南语"
-#: xfree86.xml.in.h:330
-msgid "Vnm"
-msgstr "Vnm"
+#: ../rules/base.xml.in.h:801
+msgid "ViewSonic KU-306 Internet Keyboard"
+msgstr "优派 KU-306 互联网键盘"
+
+#: ../rules/base.xml.in.h:802
+msgid "Wang 724 keypad with unicode additions (arrows and math operators)"
+msgstr "带 Unicode 扩展的王安 724 型小键盘(箭头和数学操作符)"
+
+#: ../rules/base.xml.in.h:803
+msgid "Wang 724 keypad with unicode additions (arrows and math operators). Math operators on default level"
+msgstr ""
-#: xfree86.xml.in.h:331
+#: ../rules/base.xml.in.h:804
msgid "Winbook Model XP5"
msgstr "Winbook Model XP5"
-#: xfree86.xml.in.h:332
-msgid "Winkeys"
-msgstr "Winkeys"
+#: ../rules/base.xml.in.h:805
+msgid "Wolof"
+msgstr ""
-#: xfree86.xml.in.h:333
+#: ../rules/base.xml.in.h:806
msgid "Yahoo! Internet Keyboard"
msgstr "雅虎网际键盘"
-#: xfree86.xml.in.h:334
-msgid "Yug"
-msgstr "Yug"
+#: ../rules/base.xml.in.h:807
+msgid "Yoruba"
+msgstr ""
+
+#: ../rules/base.xml.in.h:808
+msgid "Zero-width non-joiner character at second level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:809
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level"
+msgstr ""
+
+#: ../rules/base.xml.in.h:810
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level"
+msgstr ""
-#: xfree86.xml.in.h:335
-msgid "Yugoslavian"
-msgstr "南斯拉夫"
+#: ../rules/base.xml.in.h:811
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level"
+msgstr ""
-#: xfree86.xml.in.h:336
-msgid "abnt2"
-msgstr "abnt2"
+#: ../rules/base.xml.in.h:812
+msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level"
+msgstr ""
-#: xfree86.xml.in.h:337
-msgid "azerty"
-msgstr "azerty"
+#: ../rules/base.xml.in.h:813
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level"
+msgstr ""
-#: xfree86.xml.in.h:338
-msgid "azerty/digits"
-msgstr "azerty/数字"
+#: ../rules/base.xml.in.h:814
+msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level"
+msgstr ""
-#: xfree86.xml.in.h:339
-msgid "bksl"
-msgstr "bksl"
+#: ../rules/base.xml.in.h:815
+msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level"
+msgstr ""
-#: xfree86.xml.in.h:340
-msgid "digits"
-msgstr "数字"
+#: ../rules/base.xml.in.h:816
+msgid "ak"
+msgstr "ak"
-#: xfree86.xml.in.h:341
-msgid "l2/101/qwerty/comma"
-msgstr "l2/101/qwerty/comma"
+#: ../rules/base.xml.in.h:817
+msgid "am"
+msgstr "am"
-#: xfree86.xml.in.h:342
-msgid "l2/101/qwerty/dot"
-msgstr "l2/101/qwerty/dot"
+#: ../rules/base.xml.in.h:818
+msgid "ar"
+msgstr "ar"
-#: xfree86.xml.in.h:343
-msgid "l2/101/qwertz/comma"
-msgstr "l2/101/qwertz/comma"
+#: ../rules/base.xml.in.h:819
+msgid "avn"
+msgstr "avn"
-#: xfree86.xml.in.h:344
-msgid "l2/101/qwertz/dot"
-msgstr "l2/101/qwertz/dot"
+#: ../rules/base.xml.in.h:820
+msgid "az"
+msgstr "az"
-#: xfree86.xml.in.h:345
-msgid "l2/102/qwerty/comma"
-msgstr "l2/102/qwerty/comma"
+#: ../rules/base.xml.in.h:821
+msgid "be"
+msgstr "be"
-#: xfree86.xml.in.h:346
-msgid "l2/102/qwerty/dot"
-msgstr "l2/102/qwerty/dot"
+#: ../rules/base.xml.in.h:822
+msgid "ber"
+msgstr "ber"
-#: xfree86.xml.in.h:347
-msgid "l2/102/qwertz/comma"
-msgstr "l2/102/qwertz/comma"
+#: ../rules/base.xml.in.h:823
+msgid "bg"
+msgstr "bg"
-#: xfree86.xml.in.h:348
-msgid "l2/102/qwertz/dot"
-msgstr "l2/102/qwertz/dot"
+#: ../rules/base.xml.in.h:824
+msgid "bm"
+msgstr "bm"
-#: xfree86.xml.in.h:349
-msgid "laptop"
-msgstr "laptop"
+#: ../rules/base.xml.in.h:825
+msgid "bn"
+msgstr "bn"
-#: xfree86.xml.in.h:350
-msgid "lyx"
-msgstr "lyx"
+#: ../rules/base.xml.in.h:826
+msgid "brl"
+msgstr "brl"
-#: xfree86.xml.in.h:351
-msgid "qwerty"
-msgstr "qwerty"
+#: ../rules/base.xml.in.h:827
+msgid "bs"
+msgstr "bs"
-#: xfree86.xml.in.h:352
-msgid "qwerty/digits"
-msgstr "qwerty/digits"
+#: ../rules/base.xml.in.h:828
+msgid "ca"
+msgstr "ca"
-#: xfree86.xml.in.h:353
-msgid "sefi"
-msgstr "sefi"
+#: ../rules/base.xml.in.h:829
+msgid "che"
+msgstr "che"
-#: xfree86.xml.in.h:354
-msgid "si1452"
-msgstr "si1452"
+#: ../rules/base.xml.in.h:830
+msgid "chr"
+msgstr "chr"
-#: xfree86.xml.in.h:355
-msgid "uni/101/qwerty/comma"
-msgstr "uni/101/qwerty/comma"
+#: ../rules/base.xml.in.h:831
+msgid "cs"
+msgstr "cs"
-#: xfree86.xml.in.h:356
-msgid "uni/101/qwerty/dot"
-msgstr "uni/101/qwerty/dot"
+#: ../rules/base.xml.in.h:832
+msgid "da"
+msgstr "da"
-#: xfree86.xml.in.h:357
-msgid "uni/101/qwertz/comma"
-msgstr "uni/101/qwertz/comma"
+#: ../rules/base.xml.in.h:833
+msgid "de"
+msgstr "de"
-#: xfree86.xml.in.h:358
-msgid "uni/101/qwertz/dot"
-msgstr "uni/101/qwertz/dot"
+#: ../rules/base.xml.in.h:834
+msgid "dv"
+msgstr "dv"
-#: xfree86.xml.in.h:359
-msgid "uni/102/qwerty/comma"
-msgstr "uni/102/qwerty/comma"
+#: ../rules/base.xml.in.h:835
+msgid "dz"
+msgstr "dz"
-#: xfree86.xml.in.h:360
-msgid "uni/102/qwerty/dot"
-msgstr "uni/102/qwerty/dot"
+#: ../rules/base.xml.in.h:836
+msgid "ee"
+msgstr "ee"
-#: xfree86.xml.in.h:361
-msgid "uni/102/qwertz/comma"
-msgstr "uni/102/qwertz/comma"
+#: ../rules/base.xml.in.h:837
+msgid "en"
+msgstr "en"
-#: xfree86.xml.in.h:362
-msgid "uni/102/qwertz/dot"
-msgstr "uni/102/qwertz/dot"
+#: ../rules/base.xml.in.h:838
+msgid "eo"
+msgstr "eo"
+
+#: ../rules/base.xml.in.h:839
+msgid "es"
+msgstr "es"
+
+#: ../rules/base.xml.in.h:840
+msgid "et"
+msgstr "et"
+
+#: ../rules/base.xml.in.h:841
+msgid "fa"
+msgstr "fa"
+
+#: ../rules/base.xml.in.h:842
+msgid "ff"
+msgstr "ff"
+
+#: ../rules/base.xml.in.h:843
+msgid "fi"
+msgstr "fi"
+
+#: ../rules/base.xml.in.h:844
+msgid "fo"
+msgstr "fo"
+
+#: ../rules/base.xml.in.h:845
+msgid "fr"
+msgstr "fr"
+
+#: ../rules/base.xml.in.h:846
+msgid "gaa"
+msgstr "gaa"
+
+#: ../rules/base.xml.in.h:847
+msgid "gr"
+msgstr "gr"
+
+#: ../rules/base.xml.in.h:848
+msgid "gu"
+msgstr "gu"
+
+#: ../rules/base.xml.in.h:849
+msgid "ha"
+msgstr "ha"
+
+#: ../rules/base.xml.in.h:850
+msgid "he"
+msgstr "he"
+
+#: ../rules/base.xml.in.h:851
+msgid "hi"
+msgstr "hi"
+
+#: ../rules/base.xml.in.h:852
+msgid "hr"
+msgstr "hr"
+
+#: ../rules/base.xml.in.h:853
+msgid "hu"
+msgstr "hu"
+
+#: ../rules/base.xml.in.h:854
+msgid "hy"
+msgstr "hy"
+
+#: ../rules/base.xml.in.h:855
+msgid "ie"
+msgstr "ie"
+
+#: ../rules/base.xml.in.h:856
+msgid "ig"
+msgstr "ig"
+
+#: ../rules/base.xml.in.h:857
+msgid "ike"
+msgstr "ike"
+
+#: ../rules/base.xml.in.h:858
+msgid "in"
+msgstr "in"
+
+#: ../rules/base.xml.in.h:859
+msgid "irq"
+msgstr "irq"
+
+#: ../rules/base.xml.in.h:860
+msgid "is"
+msgstr "is"
+
+#: ../rules/base.xml.in.h:861
+msgid "it"
+msgstr "it"
+
+#: ../rules/base.xml.in.h:862
+msgid "ja"
+msgstr "ja"
+
+#: ../rules/base.xml.in.h:863
+msgid "ka"
+msgstr "ka"
+
+#: ../rules/base.xml.in.h:864
+msgid "ki"
+msgstr "ki"
+
+#: ../rules/base.xml.in.h:865
+msgid "kk"
+msgstr "kk"
+
+#: ../rules/base.xml.in.h:866
+msgid "km"
+msgstr "km"
+
+#: ../rules/base.xml.in.h:867
+msgid "kn"
+msgstr "kn"
+
+#: ../rules/base.xml.in.h:868
+msgid "ko"
+msgstr "ko"
+
+#: ../rules/base.xml.in.h:869
+msgid "ku"
+msgstr "ku"
+
+#: ../rules/base.xml.in.h:870
+msgid "kut"
+msgstr "kut"
+
+#: ../rules/base.xml.in.h:871
+msgid "lo"
+msgstr "lo"
+
+#: ../rules/base.xml.in.h:872
+msgid "lt"
+msgstr "lt"
+
+#: ../rules/base.xml.in.h:873
+msgid "lv"
+msgstr "lv"
+
+#: ../rules/base.xml.in.h:874
+msgid "mi"
+msgstr "mi"
+
+#: ../rules/base.xml.in.h:875
+msgid "mk"
+msgstr "mk"
+
+#: ../rules/base.xml.in.h:876
+msgid "ml"
+msgstr "ml"
+
+#: ../rules/base.xml.in.h:877
+msgid "mn"
+msgstr "mn"
+
+#: ../rules/base.xml.in.h:878
+msgid "mt"
+msgstr "mt"
+
+#: ../rules/base.xml.in.h:879
+msgid "my"
+msgstr "my"
+
+#: ../rules/base.xml.in.h:880
+msgid "ne"
+msgstr "ne"
+
+#: ../rules/base.xml.in.h:881
+msgid "nl"
+msgstr "nl"
+
+#: ../rules/base.xml.in.h:882
+msgid "no"
+msgstr "no"
+
+#: ../rules/base.xml.in.h:883
+msgid "or"
+msgstr "or"
+
+#: ../rules/base.xml.in.h:884
+msgid "pa"
+msgstr "pa"
+
+#: ../rules/base.xml.in.h:885
+msgid "ph"
+msgstr "ph"
+
+#: ../rules/base.xml.in.h:886
+msgid "pl"
+msgstr "pl"
+
+#: ../rules/base.xml.in.h:887
+msgid "ps"
+msgstr "ps"
+
+#: ../rules/base.xml.in.h:888
+msgid "pt"
+msgstr "pt"
+
+#: ../rules/base.xml.in.h:889
+msgid "ro"
+msgstr "ro"
+
+#: ../rules/base.xml.in.h:890
+msgid "ru"
+msgstr "ru"
+
+#: ../rules/base.xml.in.h:891
+msgid "sd"
+msgstr "sd"
+
+#: ../rules/base.xml.in.h:892
+msgid "shs"
+msgstr "shs"
+
+#: ../rules/base.xml.in.h:893
+msgid "si"
+msgstr "si"
+
+#: ../rules/base.xml.in.h:894
+msgid "sk"
+msgstr "sk"
+
+#: ../rules/base.xml.in.h:895
+msgid "sl"
+msgstr "sl"
+
+#: ../rules/base.xml.in.h:896
+msgid "sq"
+msgstr "sq"
+
+#: ../rules/base.xml.in.h:897
+msgid "sr"
+msgstr "sr"
+
+#: ../rules/base.xml.in.h:898
+msgid "srp"
+msgstr "srp"
+
+#: ../rules/base.xml.in.h:899
+msgid "sv"
+msgstr "sv"
+
+#: ../rules/base.xml.in.h:900
+msgid "sw"
+msgstr "sw"
+
+#: ../rules/base.xml.in.h:901
+msgid "syc"
+msgstr "syc"
+
+#: ../rules/base.xml.in.h:902
+msgid "ta"
+msgstr "ta"
+
+#: ../rules/base.xml.in.h:903
+msgid "te"
+msgstr "te"
+
+#: ../rules/base.xml.in.h:904
+msgid "tg"
+msgstr "tg"
+
+#: ../rules/base.xml.in.h:905
+msgid "th"
+msgstr "th"
+
+#: ../rules/base.xml.in.h:906
+msgid "tk"
+msgstr "tk"
+
+#: ../rules/base.xml.in.h:907
+msgid "tn"
+msgstr "tn"
+
+#: ../rules/base.xml.in.h:908
+msgid "tr"
+msgstr "tr"
+
+#: ../rules/base.xml.in.h:909
+msgid "twn"
+msgstr "twn"
+
+#: ../rules/base.xml.in.h:910
+msgid "uk"
+msgstr "uk"
+
+#: ../rules/base.xml.in.h:911
+msgid "ur"
+msgstr "ur"
+
+#: ../rules/base.xml.in.h:912
+msgid "uz"
+msgstr "uz"
+
+#: ../rules/base.xml.in.h:913
+msgid "vi"
+msgstr "vi"
+
+#: ../rules/base.xml.in.h:914
+msgid "wo"
+msgstr "wo"
+
+#: ../rules/base.xml.in.h:915
+msgid "xsy"
+msgstr "xsy"
+
+#: ../rules/base.xml.in.h:916
+msgid "yo"
+msgstr "yo"
+
+#: ../rules/base.xml.in.h:917
+msgid "zh"
+msgstr "zh"
+
+#: ../rules/base.extras.xml.in.h:1
+msgid "APL"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:2
+msgid "Iran"
+msgstr "伊朗"
+
+#: ../rules/base.extras.xml.in.h:3
+msgid "Iran - Avestan"
+msgstr "伊朗 - 阿维斯陀语"
+
+#: ../rules/base.extras.xml.in.h:4
+msgid "Lithuania"
+msgstr "立陶宛"
+
+#: ../rules/base.extras.xml.in.h:5
+msgid "Lithuania - Dvorak"
+msgstr "立陶宛 - 德沃夏克"
+
+#: ../rules/base.extras.xml.in.h:6
+msgid "Ltu"
+msgstr "Ltu"
+
+#: ../rules/base.extras.xml.in.h:7
+msgid "Romania"
+msgstr "罗马尼亚"
+
+#: ../rules/base.extras.xml.in.h:8
+msgid "Romania - Ergonomic Touchtype"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:9
+msgid "Rou"
+msgstr "Rou"
+
+#: ../rules/base.extras.xml.in.h:10
+msgid "Rus"
+msgstr "Rus"
+
+#: ../rules/base.extras.xml.in.h:11
+msgid "Russia"
+msgstr "俄罗斯"
+
+#: ../rules/base.extras.xml.in.h:12
+msgid "Serbia"
+msgstr "塞尔维亚"
+
+#: ../rules/base.extras.xml.in.h:13
+msgid "Serbia - Combining accents instead of dead keys"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:14
+msgid "Srb"
+msgstr "Srb"
+
+#: ../rules/base.extras.xml.in.h:15
+msgid "USA"
+msgstr "美国"
+
+#: ../rules/base.extras.xml.in.h:16
+msgid "USA - Atsina"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:17
+msgid "USA - Couer D'alene Salish"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:18
+msgid "USA - International (AltGr Unicode combining)"
+msgstr ""
+
+#: ../rules/base.extras.xml.in.h:19
+msgid "USA - International (AltGr Unicode combining, alternative)"
+msgstr ""
diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in
index 429eadd12..941183efb 100644
--- a/xorg-server/xkeyboard-config/rules/base.xml.in
+++ b/xorg-server/xkeyboard-config/rules/base.xml.in
@@ -1584,7 +1584,7 @@
<variant>
<configItem>
<name>mac</name>
- <_description>German (Austria, Mac)</_description>
+ <_description>German (Austria, Macintosh)</_description>
</configItem>
</variant>
</variantList>
@@ -2128,8 +2128,8 @@
<layout>
<configItem>
<name>ca</name>
- <_shortDescription>en</_shortDescription>
- <_description>English (Canada)</_description>
+ <_shortDescription>fr</_shortDescription>
+ <_description>French (Canada)</_description>
<languageList>
<iso639Id>fra</iso639Id>
</languageList>
@@ -2227,7 +2227,7 @@
<variant>
<configItem>
<name>tib</name>
- <_description>Chinese (Tibetan)</_description>
+ <_description>Tibetan</_description>
<languageList>
<iso639Id>tib</iso639Id>
</languageList>
@@ -2236,7 +2236,7 @@
<variant>
<configItem>
<name>tib_asciinum</name>
- <_description>Chinese (Tibetan with ASCII numerals)</_description>
+ <_description>Tibetan (with ASCII numerals)</_description>
<languageList>
<iso639Id>tib</iso639Id>
</languageList>
@@ -2245,7 +2245,7 @@
<variant>
<configItem>
<name>uig</name>
- <_description>Chinese (Uyghur)</_description>
+ <_description>Uyghur</_description>
<languageList>
<iso639Id>uig</iso639Id>
</languageList>
@@ -2266,13 +2266,13 @@
<variant>
<configItem>
<name>alternatequotes</name>
- <_description>Croatian (Use guillemets for quotes)</_description>
+ <_description>Croatian (use guillemets for quotes)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>unicode</name>
- <_description>Croatian (Use Croatian digraphs)</_description>
+ <_description>Croatian (use Croatian digraphs)</_description>
</configItem>
</variant>
<variant>
@@ -2302,7 +2302,7 @@
<variant>
<configItem>
<name>bksl</name>
- <_description>Czech (With &lt;\|&gt; key)</_description>
+ <_description>Czech (with &lt;\|&gt; key)</_description>
</configItem>
</variant>
<variant>
@@ -2320,7 +2320,7 @@
<variant>
<configItem>
<name>ucw</name>
- <_description>Czech (UCW layout accented letters only)</_description>
+ <_description>Czech (UCW layout, accented letters only)</_description>
</configItem>
</variant>
<variant>
@@ -2350,13 +2350,13 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Danish (Mac)</_description>
+ <_description>Danish (Macintosh)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>mac_nodeadkeys</name>
- <_description>Danish (Mac, eliminate dead keys)</_description>
+ <_description>Danish (Macintosh, eliminate dead keys)</_description>
</configItem>
</variant>
<variant>
@@ -2386,7 +2386,7 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Dutch (Mac)</_description>
+ <_description>Dutch (Macintosh)</_description>
</configItem>
</variant>
<variant>
@@ -2477,7 +2477,7 @@
<configItem>
<name>ku_alt</name>
<_shortDescription>ku</_shortDescription>
- <_description>Kurdish (Iran, latin alt-Q)</_description>
+ <_description>Kurdish (Iran, Latin Alt-Q)</_description>
<languageList>
<iso639Id>kur</iso639Id>
</languageList>
@@ -2589,15 +2589,14 @@
<variant>
<configItem>
<name>smi</name>
- <_description>Finnish (northern Saami)</_description>
- <languageList><iso639Id>smi</iso639Id>
- <iso639Id>sme</iso639Id></languageList>
+ <_description>Saami (Finland)</_description>
+ <languageList><iso639Id>sme</iso639Id></languageList>
</configItem>
</variant>
<variant>
<configItem>
<name>mac</name>
- <_description>Finnish (Mac)</_description>
+ <_description>Finnish (Macintosh)</_description>
</configItem>
</variant>
</variantList>
@@ -2651,7 +2650,7 @@
<variant>
<configItem>
<name>latin9</name>
- <_description>French (legacy alternative)</_description>
+ <_description>French (legacy, alternative)</_description>
</configItem>
</variant>
<variant>
@@ -2687,7 +2686,7 @@
<variant>
<configItem>
<name>mac</name>
- <_description>French (Mac)</_description>
+ <_description>French (Macintosh)</_description>
</configItem>
</variant>
<variant>
@@ -2699,7 +2698,7 @@
<variant>
<configItem>
<name>oci</name>
- <_description>French (Occitan)</_description>
+ <_description>Occitan</_description>
<languageList>
<iso639Id>oci</iso639Id>
</languageList>
@@ -2708,7 +2707,7 @@
<variant>
<configItem>
<name>geo</name>
- <_description>French (Georgian AZERTY Tskapo)</_description>
+ <_description>Georgian (France, AZERTY Tskapo)</_description>
<languageList>
<iso639Id>geo</iso639Id>
</languageList>
@@ -2846,7 +2845,7 @@
<variant>
<configItem>
<name>os</name>
- <_description>Georgian (Ossetian)</_description>
+ <_description>Ossetian (Georgia)</_description>
<languageList>
<iso639Id>oss</iso639Id>
</languageList>
@@ -2885,13 +2884,15 @@
<variant>
<configItem>
<name>ro</name>
- <_description>German (Romanian keyboard with German letters)</_description>
+ <_description>Romanian (Germany)</_description>
+ <languageList><iso639Id>rum</iso639Id></languageList>
</configItem>
</variant>
<variant>
<configItem>
<name>ro_nodeadkeys</name>
- <_description>German (Romanian keyboard with German letters, eliminate dead keys)</_description>
+ <_description>Romanian (Germany, eliminate dead keys)</_description>
+ <languageList><iso639Id>rum</iso639Id></languageList>
</configItem>
</variant>
<variant>
@@ -2915,19 +2916,19 @@
<variant>
<configItem>
<name>mac</name>
- <_description>German (Mac)</_description>
+ <_description>German (Macintosh)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>mac_nodeadkeys</name>
- <_description>German (Mac, eliminate dead keys)</_description>
+ <_description>German (Macintosh, eliminate dead keys)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>dsb</name>
- <_description>German (lower Sorbian)</_description>
+ <_description>Lower Sorbian</_description>
<languageList>
<iso639Id>dsb</iso639Id>
</languageList>
@@ -2936,7 +2937,7 @@
<variant>
<configItem>
<name>dsb_qwertz</name>
- <_description>German (lower Sorbian qwertz)</_description>
+ <_description>Lower Sorbian (qwertz)</_description>
<languageList>
<iso639Id>dsb</iso639Id>
</languageList>
@@ -3146,7 +3147,7 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Icelandic (Mac)</_description>
+ <_description>Icelandic (Macintosh)</_description>
</configItem>
</variant>
<variant>
@@ -3176,13 +3177,13 @@
<variant>
<configItem>
<name>phonetic</name>
- <_description>Hebrew (Phonetic)</_description>
+ <_description>Hebrew (phonetic)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>biblical</name>
- <_description>Hebrew (Tiro)</_description>
+ <_description>Hebrew (Biblical, Tiro)</_description>
</configItem>
</variant>
</variantList>
@@ -3206,7 +3207,7 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Italian (Mac)</_description>
+ <_description>Italian (Macintosh)</_description>
</configItem>
</variant>
<variant>
@@ -3218,7 +3219,7 @@
<variant>
<configItem>
<name>geo</name>
- <_description>Italian (Georgian)</_description>
+ <_description>Georgian (Italy)</_description>
<languageList>
<iso639Id>geo</iso639Id>
</languageList>
@@ -3257,7 +3258,7 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Japanese (Mac)</_description>
+ <_description>Japanese (Macintosh)</_description>
</configItem>
</variant>
</variantList>
@@ -3602,7 +3603,7 @@
<variant>
<configItem>
<name>smi</name>
- <_description>Norwegian (Northern Saami</_description>
+ <_description>Saami (Norway)</_description>
<languageList>
<iso639Id>sme</iso639Id>
</languageList>
@@ -3611,7 +3612,7 @@
<variant>
<configItem>
<name>smi_nodeadkeys</name>
- <_description>Norwegian (northern Saami, eliminate dead keys)</_description>
+ <_description>Saami (Norway, eliminate dead keys)</_description>
<languageList>
<iso639Id>sme</iso639Id>
</languageList>
@@ -3620,13 +3621,13 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Norwegian (Mac)</_description>
+ <_description>Norwegian (Macintosh)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>mac_nodeadkeys</name>
- <_description>Norwegian (Mac, eliminate dead keys)</_description>
+ <_description>Norwegian (Macintosh, eliminate dead keys)</_description>
</configItem>
</variant>
</variantList>
@@ -3717,19 +3718,19 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Portuguese (Mac)</_description>
+ <_description>Portuguese (Macintosh)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>mac_nodeadkeys</name>
- <_description>Portuguese (Mac, eliminate dead keys)</_description>
+ <_description>Portuguese (Macintosh, eliminate dead keys)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>mac_sundeadkeys</name>
- <_description>Portuguese (Mac, Sun dead keys)</_description>
+ <_description>Portuguese (Macintosh, Sun dead keys)</_description>
</configItem>
</variant>
<variant>
@@ -3791,35 +3792,9 @@
</variant>
<variant>
<configItem>
- <name>crh_f</name>
- <_description>Romanian (Crimean Tatar Turkish F)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
- <variant>
- <configItem>
- <name>crh_alt</name>
- <_description>Romanian (Crimean Tatar Turkish Alt-Q)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
- <variant>
- <configItem>
- <name>crh_dobruca1</name>
- <_description>Romanian (Crimean Tatar Dobruca-1 Q)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
- <variant>
- <configItem>
- <name>crh_dobruca2</name>
- <_description>Romanian (Crimean Tatar Dobruca-2 Q)</_description>
+ <name>crh_dobruja</name>
+ <_shortDescription>crh</_shortDescription>
+ <_description>Crimean Tatar (Dobruja Q)</_description>
<languageList>
<iso639Id>crh</iso639Id>
</languageList>
@@ -4154,7 +4129,7 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Spanish (Mac)</_description>
+ <_description>Spanish (Macintosh)</_description>
</configItem>
</variant>
</variantList>
@@ -4204,7 +4179,7 @@
<variant>
<configItem>
<name>smi</name>
- <_description>Swedish (northern Saami)</_description>
+ <_description>Saami (Sweden)</_description>
<languageList>
<iso639Id>sme</iso639Id>
</languageList>
@@ -4213,7 +4188,7 @@
<variant>
<configItem>
<name>mac</name>
- <_description>Swedish (Mac)</_description>
+ <_description>Swedish (Macintosh)</_description>
</configItem>
</variant>
<variant>
@@ -4228,7 +4203,7 @@
<configItem>
<name>ch</name>
<_shortDescription>che</_shortDescription>
- <_description>Swiss</_description>
+ <_description>German</_description>
<languageList><iso639Id>ger</iso639Id>
<iso639Id>gsw</iso639Id></languageList>
</configItem>
@@ -4236,7 +4211,7 @@
<variant>
<configItem>
<name>legacy</name>
- <_description>Swiss (legacy)</_description>
+ <_description>German (Switzerland, legacy)</_description>
</configItem>
</variant>
<variant>
@@ -4287,7 +4262,7 @@
<configItem>
<name>fr_mac</name>
<_shortDescription>fr</_shortDescription>
- <_description>French (Switzerland, Mac)</_description>
+ <_description>French (Switzerland, Macintosh)</_description>
<languageList>
<iso639Id>fra</iso639Id>
</languageList>
@@ -4297,7 +4272,7 @@
<configItem>
<name>de_mac</name>
<_shortDescription>de</_shortDescription>
- <_description>German (Switzerland, Mac)</_description>
+ <_description>German (Switzerland, Macintosh)</_description>
</configItem>
</variant>
</variantList>
@@ -4498,7 +4473,8 @@
<variant>
<configItem>
<name>crh</name>
- <_description>Turkish (Crimean Tatar Turkish Q)</_description>
+ <_shortDescription>crh</_shortDescription>
+ <_description>Crimean Tatar (Turkish Q)</_description>
<languageList>
<iso639Id>crh</iso639Id>
</languageList>
@@ -4507,7 +4483,8 @@
<variant>
<configItem>
<name>crh_f</name>
- <_description>Turkish (Crimean Tatar Turkish F)</_description>
+ <_shortDescription>crh</_shortDescription>
+ <_description>Crimean Tatar (Turkish F)</_description>
<languageList>
<iso639Id>crh</iso639Id>
</languageList>
@@ -4516,7 +4493,8 @@
<variant>
<configItem>
<name>crh_alt</name>
- <_description>Turkish (Crimean Tatar Turkish Alt-Q)</_description>
+ <_shortDescription>crh</_shortDescription>
+ <_description>Crimean Tatar (Turkish Alt-Q)</_description>
<languageList>
<iso639Id>crh</iso639Id>
</languageList>
@@ -4617,33 +4595,6 @@
<_description>Ukrainian (homophonic)</_description>
</configItem>
</variant>
- <variant>
- <configItem>
- <name>crh</name>
- <_description>Ukrainian (Crimean Tatar Turkish Q)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
- <variant>
- <configItem>
- <name>crh_f</name>
- <_description>Ukrainian (Crimean Tatar Turkish F)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
- <variant>
- <configItem>
- <name>crh_alt</name>
- <_description>Ukrainian (Crimean Tatar Turkish Alt-Q)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
</variantList>
</layout>
<layout>
@@ -4683,13 +4634,13 @@
<variant>
<configItem>
<name>mac</name>
- <_description>English (UK, Mac)</_description>
+ <_description>English (UK, Macintosh)</_description>
</configItem>
</variant>
<variant>
<configItem>
<name>mac_intl</name>
- <_description>English (UK, Mac international)</_description>
+ <_description>English (UK, Macintosh international)</_description>
</configItem>
</variant>
<variant>
@@ -4716,33 +4667,6 @@
<_description>Uzbek (Latin)</_description>
</configItem>
</variant>
- <variant>
- <configItem>
- <name>crh</name>
- <_description>Uzbek (Crimean Tatar Turkish Q)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
- <variant>
- <configItem>
- <name>crh_f</name>
- <_description>Uzbek (Crimean Tatar Turkish F)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
- <variant>
- <configItem>
- <name>crh_alt</name>
- <_description>Uzbek (Crimean Tatar Turkish Alt-Q)</_description>
- <languageList>
- <iso639Id>crh</iso639Id>
- </languageList>
- </configItem>
- </variant>
</variantList>
</layout>
<layout>
@@ -5050,7 +4974,7 @@
<configItem>
<name>us-mac</name>
<_shortDescription>en</_shortDescription>
- <_description>English (Mali, USA Mac)</_description>
+ <_description>English (Mali, USA Macintosh)</_description>
</configItem>
</variant>
<variant>
@@ -5975,7 +5899,7 @@
<option>
<configItem>
<name>numpad:mac</name>
- <_description>Numeric keypad keys work as with Mac</_description>
+ <_description>Numeric keypad keys work as with Macintosh</_description>
</configItem>
</option>
<option>
diff --git a/xorg-server/xkeyboard-config/symbols/ad b/xorg-server/xkeyboard-config/symbols/ad
index bce6f6140..0b1520175 100644
--- a/xorg-server/xkeyboard-config/symbols/ad
+++ b/xorg-server/xkeyboard-config/symbols/ad
@@ -1,31 +1,31 @@
-//
-// Catalan Keyboard, as manufactured by Large Format Computing, Inc.
-//
-// For layout graphic, see http://www.language-keyboard.com/languages/catalan_layout.htm
-//
-// Contributed by Robert Millan
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
- include "us"
-
- name[Group1]="Andorra";
-
- key <AE02> { [ 2, at, dead_diaeresis ] };
- key <AE07> { [ 7, ampersand, dead_acute ] };
- key <AE09> { [ 9, parenleft, dead_grave ] };
- key <AD02> { [ w, W, eacute, Eacute ] };
- key <AD03> { [ e, E, egrave, Egrave ] };
- key <AD06> { [ y, Y, udiaeresis, Udiaeresis ] };
- key <AD07> { [ u, U, uacute, Uacute ] };
- key <AD08> { [ i, I, iacute, Iacute ] };
- key <AD09> { [ o, O, oacute, Oacute ] };
- key <AD10> { [ p, P, ograve, Ograve ] };
- key <AD12> { [ bracketright, braceright, EuroSign ] };
- key <AC01> { [ a, A, agrave, Agrave ] };
- key <AC08> { [ k, K, idiaeresis, Idiaeresis ] };
- key <AC09> { [ l, L, periodcentered ] };
- key <AB03> { [ c, C, ccedilla, Ccedilla ] };
-
- include "level3(ralt_switch)"
-};
+//
+// Catalan Keyboard, as manufactured by Large Format Computing, Inc.
+//
+// For layout graphic, see http://www.language-keyboard.com/languages/catalan_layout.htm
+//
+// Contributed by Robert Millan
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+ include "us"
+
+ name[Group1]="Catalan";
+
+ key <AE02> { [ 2, at, dead_diaeresis ] };
+ key <AE07> { [ 7, ampersand, dead_acute ] };
+ key <AE09> { [ 9, parenleft, dead_grave ] };
+ key <AD02> { [ w, W, eacute, Eacute ] };
+ key <AD03> { [ e, E, egrave, Egrave ] };
+ key <AD06> { [ y, Y, udiaeresis, Udiaeresis ] };
+ key <AD07> { [ u, U, uacute, Uacute ] };
+ key <AD08> { [ i, I, iacute, Iacute ] };
+ key <AD09> { [ o, O, oacute, Oacute ] };
+ key <AD10> { [ p, P, ograve, Ograve ] };
+ key <AD12> { [ bracketright, braceright, EuroSign ] };
+ key <AC01> { [ a, A, agrave, Agrave ] };
+ key <AC08> { [ k, K, idiaeresis, Idiaeresis ] };
+ key <AC09> { [ l, L, periodcentered ] };
+ key <AB03> { [ c, C, ccedilla, Ccedilla ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/af b/xorg-server/xkeyboard-config/symbols/af
index d7d866d34..c4355dd4e 100644
--- a/xorg-server/xkeyboard-config/symbols/af
+++ b/xorg-server/xkeyboard-config/symbols/af
@@ -12,8 +12,7 @@
partial default alphanumeric_keys
xkb_symbols "basic" {
- //name[Group1]= "Afghanistan Dari";
- name[Group1]= "Afghanistan";
+ name[Group1]= "Afghani";
key <TLDE> { [ 0x100200d, 0x10000f7, dead_tilde ] };
key <AE01> { [ 0x10006f1, exclam, 0x1000060 ] };
@@ -84,7 +83,7 @@ xkb_symbols "basic" {
partial alphanumeric_keys
xkb_symbols "ps" {
- name[Group1]= "Afghanistan - Pashto";
+ name[Group1]= "Pashto";
key <TLDE> { [ 0x100200d, 0x10000f7, dead_tilde ] };
key <AE01> { [ 0x10006f1, exclam, 0x1000060 ] };
@@ -155,7 +154,7 @@ xkb_symbols "ps" {
partial alphanumeric_keys
xkb_symbols "uz" {
- name[Group1]= "Afghanistan - Southern Uzbek";
+ name[Group1]= "Uzbek (Afghanistan)";
key <TLDE> { [ 0x100200d, 0x10000f7, dead_tilde ] };
key <AE01> { [ 0x10006f1, exclam, 0x1000060 ] };
@@ -216,7 +215,7 @@ xkb_symbols "uz" {
partial alphanumeric_keys
xkb_symbols "olpc-ps" {
- name[Group1]= "Afghanistan - OLPC Pashto";
+ name[Group1]= "Pashto (Afghanistan, OLPC)";
key <TLDE> { [ 0x100200D, 0x1000654, grave ] }; // zero width joiner, Arabic hamza above
key <AE01> { [ 0x10006F1, exclam, asciitilde ] }; // Arabic one
@@ -277,7 +276,7 @@ xkb_symbols "olpc-ps" {
partial alphanumeric_keys
xkb_symbols "fa-olpc" {
- name[Group1]= "Afghanistan - OLPC Dari";
+ name[Group1]= "Persian (Afghanistan, Dari OLPC)";
key <TLDE> { [ 0x100200D, division, asciitilde ] }; // zero width joiner
key <AE01> { [ 0x10006F1, exclam, grave ] }; // Arabic one
@@ -338,7 +337,7 @@ xkb_symbols "fa-olpc" {
partial alphanumeric_keys
xkb_symbols "uz-olpc" {
- name[Group1]= "Afghanistan - OLPC Southern Uzbek";
+ name[Group1]= "Uzbek (Afghanistan, OLPC)";
key <TLDE> { [ 0x100200D, division, asciitilde ] }; // zero width joiner
key <AE01> { [ 0x10006F1, exclam, grave ] }; // Arabic one
diff --git a/xorg-server/xkeyboard-config/symbols/al b/xorg-server/xkeyboard-config/symbols/al
index 9f006748c..75e7f52de 100644
--- a/xorg-server/xkeyboard-config/symbols/al
+++ b/xorg-server/xkeyboard-config/symbols/al
@@ -1,41 +1,41 @@
-// based on
-// albanian keyboard layout
-// done by Pablo Saratxaga <pablo@mandrakesoft.com>
-//
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin(type3)"
-
- name[Group1]="Albania";
-
- key <AE01> { [ 1, exclam, asciitilde, dead_tilde ] };
- key <AE02> { [ 2, quotedbl, dead_caron, oneeighth ] };
- key <AE03> { [ 3, numbersign, dead_circumflex, sterling ] };
- key <AE04> { [ 4, dollar, dead_breve, dollar ] };
- key <AE05> { [ 5, percent, dead_abovering, threeeighths] };
- key <AE06> { [ 6, asciicircum, dead_ogonek, fiveeighths ] };
- key <AE07> { [ 7, ampersand, grave, dead_grave ] };
- key <AE08> { [ 8, asterisk, dead_abovedot, trademark ] };
- key <AE09> { [ 9, parenleft, dead_acute, plusminus ] };
- key <AE10> { [ 0, parenright, dead_doubleacute, degree ] };
- key <AE11> { [ minus, underscore, dead_diaeresis, questiondown] };
-
- key <AD03> { [ e, E, EuroSign, EuroSign ] };
- key <AD11> { [ ccedilla, Ccedilla, division, dead_abovering ] };
- key <AD12> { [ at, apostrophe, multiply, dead_macron ] };
-
- key <AC02> { [ s, S, dstroke, section ] };
- key <AC03> { [ d, D, Dstroke, ETH ] };
- key <AC10> { [ediaeresis, Ediaeresis, dollar, dead_doubleacute ] };
- key <AC11> { [bracketleft, braceleft, ssharp, dead_caron ] };
- key <TLDE> { [ backslash, bar, notsign, notsign ] };
-
- key <BKSL> { [bracketright, braceright, currency, dead_breve ] };
- key <AB08> { [ comma, semicolon, less, multiply ] };
- key <AB09> { [ period, colon, greater, division ] };
- key <AB10> { [ slash, question, dead_belowdot, dead_abovedot ] };
-
- include "level3(ralt_switch)"
-};
+// based on
+// albanian keyboard layout
+// done by Pablo Saratxaga <pablo@mandrakesoft.com>
+//
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin(type3)"
+
+ name[Group1]="Albanian";
+
+ key <AE01> { [ 1, exclam, asciitilde, dead_tilde ] };
+ key <AE02> { [ 2, quotedbl, dead_caron, oneeighth ] };
+ key <AE03> { [ 3, numbersign, dead_circumflex, sterling ] };
+ key <AE04> { [ 4, dollar, dead_breve, dollar ] };
+ key <AE05> { [ 5, percent, dead_abovering, threeeighths] };
+ key <AE06> { [ 6, asciicircum, dead_ogonek, fiveeighths ] };
+ key <AE07> { [ 7, ampersand, grave, dead_grave ] };
+ key <AE08> { [ 8, asterisk, dead_abovedot, trademark ] };
+ key <AE09> { [ 9, parenleft, dead_acute, plusminus ] };
+ key <AE10> { [ 0, parenright, dead_doubleacute, degree ] };
+ key <AE11> { [ minus, underscore, dead_diaeresis, questiondown] };
+
+ key <AD03> { [ e, E, EuroSign, EuroSign ] };
+ key <AD11> { [ ccedilla, Ccedilla, division, dead_abovering ] };
+ key <AD12> { [ at, apostrophe, multiply, dead_macron ] };
+
+ key <AC02> { [ s, S, dstroke, section ] };
+ key <AC03> { [ d, D, Dstroke, ETH ] };
+ key <AC10> { [ediaeresis, Ediaeresis, dollar, dead_doubleacute ] };
+ key <AC11> { [bracketleft, braceleft, ssharp, dead_caron ] };
+ key <TLDE> { [ backslash, bar, notsign, notsign ] };
+
+ key <BKSL> { [bracketright, braceright, currency, dead_breve ] };
+ key <AB08> { [ comma, semicolon, less, multiply ] };
+ key <AB09> { [ period, colon, greater, division ] };
+ key <AB10> { [ slash, question, dead_belowdot, dead_abovedot ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/am b/xorg-server/xkeyboard-config/symbols/am
index f83548118..29931474f 100644
--- a/xorg-server/xkeyboard-config/symbols/am
+++ b/xorg-server/xkeyboard-config/symbols/am
@@ -1,240 +1,240 @@
-// based on a keyboard map from an 'xkb/symbols/am' file
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- name[Group1]= "Armenia";
-
- // Alphanumeric section
- key <TLDE> { [ 0x100055d, 0x100055c ] };
- key <LSGT> { [ question, 0x100058a ] };
- key <BKSL> { [ guillemotright, guillemotleft ] };
-
- key <AE01> { [ 0x1000586, 0x1000556 ] };
- key <AE02> { [ 0x1000571, 0x1000541 ] };
- key <AE03> { [ 0x1002013, 0x1002014 ] };
- key <AE04> { [ comma, dollar ] };
- key <AE05> { [ 0x1000589, 0x1002026 ] };
- key <AE06> { [ 0x100055e, percent ] };
- key <AE07> { [ 0x1002024, 0x1000587 ] };
- key <AE08> { [ 0x100055b, 0x10002bc ] };
- key <AE09> { [ parenright, parenleft ] };
- key <AE10> { [ 0x1000585, 0x1000555 ] };
- key <AE11> { [ 0x1000567, 0x1000537 ] };
- key <AE12> { [ 0x1000572, 0x1000542 ] };
-
-
- key <AD01> { [ 0x1000573, 0x1000543 ] };
- key <AD02> { [ 0x1000583, 0x1000553 ] };
- key <AD03> { [ 0x1000562, 0x1000532 ] };
- key <AD04> { [ 0x100057d, 0x100054d ] };
- key <AD05> { [ 0x1000574, 0x1000544 ] };
- key <AD06> { [ 0x1000578, 0x1000548 ] };
- key <AD07> { [ 0x1000582, 0x1000552 ] };
- key <AD08> { [ 0x100056f, 0x100053f ] };
- key <AD09> { [ 0x1000568, 0x1000538 ] };
- key <AD10> { [ 0x1000569, 0x1000539 ] };
- key <AD11> { [ 0x100056e, 0x100053e ] };
- key <AD12> { [ 0x1000581, 0x1000551 ] };
-
- key <AC01> { [ 0x100057b, 0x100054b ] };
- key <AC02> { [ 0x100057e, 0x100054e ] };
- key <AC03> { [ 0x1000563, 0x1000533 ] };
- key <AC04> { [ 0x1000565, 0x1000535 ] };
- key <AC05> { [ 0x1000561, 0x1000531 ] };
- key <AC06> { [ 0x1000576, 0x1000546 ] };
- key <AC07> { [ 0x100056b, 0x100053b ] };
- key <AC08> { [ 0x100057f, 0x100054f ] };
- key <AC09> { [ 0x1000570, 0x1000540 ] };
- key <AC10> { [ 0x100057a, 0x100054a ] };
- key <AC11> { [ 0x1000580, 0x1000550 ] };
-
- key <AB01> { [ 0x100056a, 0x100053a ] };
- key <AB02> { [ 0x1000564, 0x1000534 ] };
- key <AB03> { [ 0x1000579, 0x1000549 ] };
- key <AB04> { [ 0x1000575, 0x1000545 ] };
- key <AB05> { [ 0x1000566, 0x1000536 ] };
- key <AB06> { [ 0x100056c, 0x100053c ] };
- key <AB07> { [ 0x1000584, 0x1000554 ] };
- key <AB08> { [ 0x100056d, 0x100053d ] };
- key <AB09> { [ 0x1000577, 0x1000547 ] };
- key <AB10> { [ 0x100057c, 0x100054c ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "olpc" {
- include "am(basic)"
- name[Group1]= "Armenia";
-
- include "group(olpc)"
-};
-
-xkb_symbols "phonetic" {
- include "am(basic)"
- name[Group1]= "Armenia - Phonetic";
-
- key <BKSL> { [ 0x1000577, 0x1000547 ] };
-
- key <AE01> { [ 0x1000567, 0x1000537 ] };
- key <AE02> { [ 0x1000569, 0x1000539 ] };
- key <AE03> { [ 0x1000583, 0x1000553 ] };
- key <AE04> { [ 0x1000571, 0x1000541 ] };
- key <AE05> { [ 0x100057b, 0x100054b ] };
- key <AE06> { [ 0x1000582, 0x1000552 ] };
- key <AE07> { [ 0x1000587, 0x1000587 ] };
- key <AE08> { [ 0x100057c, 0x100054c ] };
- key <AE09> { [ 0x1000579, 0x1000549 ] };
- key <AE10> { [ 0x1000573, 0x1000543 ] };
- key <AE11> { [ 0x100002D, 0x1002015 ] };
- key <AE12> { [ 0x100056a, 0x100053a ] };
-
- key <LatQ> { [ 0x1000584, 0x1000554 ] };
- key <LatW> { [ 0x1000578, 0x1000548 ] };
- key <LatE> { [ 0x1000565, 0x1000535 ] };
- key <LatR> { [ 0x1000580, 0x1000550 ] };
- key <LatT> { [ 0x100057f, 0x100054f ] };
- key <LatY> { [ 0x1000568, 0x1000538 ] };
- key <LatU> { [ 0x1000582, 0x1000552 ] };
- key <LatI> { [ 0x100056b, 0x100053b ] };
- key <LatO> { [ 0x1000585, 0x1000555 ] };
- key <LatP> { [ 0x100057a, 0x100054a ] };
- key <AD11> { [ 0x100056d, 0x100053d ] };
- key <AD12> { [ 0x100056e, 0x100053e ] };
-
- key <LatA> { [ 0x1000561, 0x1000531 ] };
- key <LatS> { [ 0x100057d, 0x100054d ] };
- key <LatD> { [ 0x1000564, 0x1000534 ] };
- key <LatF> { [ 0x1000586, 0x1000556 ] };
- key <LatG> { [ 0x1000563, 0x1000533 ] };
- key <LatH> { [ 0x1000570, 0x1000540 ] };
- key <LatJ> { [ 0x1000575, 0x1000545 ] };
- key <LatK> { [ 0x100056f, 0x100053f ] };
- key <LatL> { [ 0x100056c, 0x100053c ] };
- key <AC10> { [ semicolon, 0x1000589 ] };
- key <AC11> { [ 0x100055b, 0x1000022 ] };
-
- key <LatZ> { [ 0x1000566, 0x1000536 ] };
- key <LatX> { [ 0x1000572, 0x1000542 ] };
- key <LatC> { [ 0x1000581, 0x1000551 ] };
- key <LatV> { [ 0x100057e, 0x100054e ] };
- key <LatB> { [ 0x1000562, 0x1000532 ] };
- key <LatN> { [ 0x1000576, 0x1000546 ] };
- key <LatM> { [ 0x1000574, 0x1000544 ] };
- key <AB08> { [ 0x100002C, 0x10000AB ] };
- key <AB09> { [ 0x1002024, 0x10000BB ] };
- key <AB10> { [ 0x100002F, 0x100055e ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "phonetic-alt" {
- include "am(phonetic)"
- name[Group1]= "Armenia - Alternative Phonetic";
-
- key <AE08> { [ 0x1000580, 0x1000550 ] };
- key <LatR> { [ 0x100057c, 0x100054c ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "eastern" {
-
- name[Group1]="Armenia - Eastern";
-
- // This is the closer phonetic transliteration for Eastern Armenian
- // than the Windows XP layout for Eastern Armenian, which seems
- // to have contained a bug, with the reversal of 'g' for keh and 'c' for gim
- // Also, AE01 (the colon) has been replaced with the Armenian_full_stop and
- // capital AE07 (ken) with the Armenian ligature ew
-
- key <TLDE> { [ Armenian_separation_mark, Armenian_exclam ] };
-// key <AE01> { [ colon, KP_1 ] };
- key <AE01> { [ Armenian_full_stop, KP_1 ] };
- key <AE02> { [ Armenian_dza, Armenian_DZA ] };
- key <AE03> { [ Armenian_hi, Armenian_HI ] };
- key <AE04> { [ Armenian_accent, KP_3 ] };
- key <AE05> { [ comma, KP_4 ] };
- key <AE06> { [ minus, KP_9 ] };
- key <AE07> { [ period, Armenian_ligature_ew ] };
- key <AE08> { [ guillemotleft, parenleft ] };
- key <AE09> { [ guillemotright, parenright ] };
- key <AE10> { [ Armenian_o, Armenian_O ] };
- key <AE11> { [ Armenian_ra, Armenian_RA ] };
- key <AE12> { [ Armenian_zhe, Armenian_ZHE ] };
-
- key <LatQ> { [ Armenian_khe, Armenian_KHE ] };
- key <LatW> { [ Armenian_vyun, Armenian_VYUN ] };
- key <LatE> { [ Armenian_e, Armenian_E ] };
- key <LatR> { [ Armenian_re, Armenian_RE ] };
- key <LatT> { [ Armenian_tyun, Armenian_TYUN ] };
- key <LatY> { [ Armenian_yech, Armenian_YECH ] };
- key <LatU> { [ Armenian_at, Armenian_AT ] };
- key <LatI> { [ Armenian_ini, Armenian_INI ] };
- key <LatO> { [ Armenian_vo, Armenian_VO ] };
- key <LatP> { [ Armenian_pe, Armenian_PE ] };
- key <AD11> { [ Armenian_cha, Armenian_CHA ] };
- key <AD12> { [ Armenian_je, Armenian_JE ] };
- key <BKSL> { [ apostrophe, Armenian_question ] };
-
- key <LatA> { [ Armenian_ayb, Armenian_AYB ] };
- key <LatS> { [ Armenian_se, Armenian_SE ] };
- key <LatD> { [ Armenian_da, Armenian_DA ] };
- key <LatF> { [ Armenian_fe, Armenian_FE ] };
- key <LatG> { [ Armenian_gim, Armenian_GIM ] };
- key <LatH> { [ Armenian_ho, Armenian_HO ] };
- key <LatJ> { [ Armenian_tche, Armenian_TCHE ] };
- key <LatK> { [ Armenian_ken, Armenian_KEN ] };
- key <LatL> { [ Armenian_lyun, Armenian_LYUN ] };
- key <AC10> { [ Armenian_to, Armenian_TO ] };
- key <AC11> { [ Armenian_pyur, Armenian_PYUR ] };
-
- key <LatZ> { [ Armenian_za, Armenian_ZA ] };
- key <LatX> { [ Armenian_tso, Armenian_TSO ] };
- key <LatC> { [ Armenian_ke, Armenian_KE ] };
- key <LatV> { [ Armenian_vev, Armenian_VEV ] };
- key <LatB> { [ Armenian_ben, Armenian_BEN ] };
- key <LatN> { [ Armenian_nu, Armenian_NU ] };
- key <LatM> { [ Armenian_men, Armenian_MEN ] };
- key <AB08> { [ Armenian_sha, Armenian_SHA ] };
- key <AB09> { [ Armenian_ghat, Armenian_GHAT ] };
- key <AB10> { [ Armenian_tsa, Armenian_TSA ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "western" {
- include "am(eastern)"
- name[Group1]="Armenia - Western";
-
- // This is exactly the same layout for Western Armenian
- // as in Windows XP, except:
- // AE01 (the colon) has been replaced with the Armenian_full_stop and
- // capital AE07 (ken) with the Armenian ligature ew
-
- key <LatW> { [ Armenian_vev, Armenian_VEV ] };
- key <LatT> { [ Armenian_da, Armenian_DA ] };
- key <LatP> { [ Armenian_ben, Armenian_BEN ] };
- key <LatD> { [ Armenian_tyun, Armenian_TYUN ] };
- key <LatG> { [ Armenian_ken, Armenian_KEN ] };
- key <LatK> { [ Armenian_ke, Armenian_KE ] };
- key <LatC> { [ Armenian_gim, Armenian_GIM ] };
- key <LatV> { [ Armenian_vyun, Armenian_VYUN ] };
- key <LatB> { [ Armenian_pe, Armenian_PE ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "eastern-alt" {
- include "am(eastern)"
- name[Group1]="Armenia - Alternative Eastern";
-
- // This replicates the Windows XP keyboard layout for Eastern
- // Armenian exactly (including the bug), except:
- // AE01 (the colon) has been replaced with the Armenian_full_stop and
- // capital AE07 (ken) with the Armenian ligature ew
-
- key <LatG> { [ Armenian_ke, Armenian_KE ] };
- key <LatC> { [ Armenian_gim, Armenian_GIM ] };
-
-};
+// based on a keyboard map from an 'xkb/symbols/am' file
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ name[Group1]= "Armenian";
+
+ // Alphanumeric section
+ key <TLDE> { [ 0x100055d, 0x100055c ] };
+ key <LSGT> { [ question, 0x100058a ] };
+ key <BKSL> { [ guillemotright, guillemotleft ] };
+
+ key <AE01> { [ 0x1000586, 0x1000556 ] };
+ key <AE02> { [ 0x1000571, 0x1000541 ] };
+ key <AE03> { [ 0x1002013, 0x1002014 ] };
+ key <AE04> { [ comma, dollar ] };
+ key <AE05> { [ 0x1000589, 0x1002026 ] };
+ key <AE06> { [ 0x100055e, percent ] };
+ key <AE07> { [ 0x1002024, 0x1000587 ] };
+ key <AE08> { [ 0x100055b, 0x10002bc ] };
+ key <AE09> { [ parenright, parenleft ] };
+ key <AE10> { [ 0x1000585, 0x1000555 ] };
+ key <AE11> { [ 0x1000567, 0x1000537 ] };
+ key <AE12> { [ 0x1000572, 0x1000542 ] };
+
+
+ key <AD01> { [ 0x1000573, 0x1000543 ] };
+ key <AD02> { [ 0x1000583, 0x1000553 ] };
+ key <AD03> { [ 0x1000562, 0x1000532 ] };
+ key <AD04> { [ 0x100057d, 0x100054d ] };
+ key <AD05> { [ 0x1000574, 0x1000544 ] };
+ key <AD06> { [ 0x1000578, 0x1000548 ] };
+ key <AD07> { [ 0x1000582, 0x1000552 ] };
+ key <AD08> { [ 0x100056f, 0x100053f ] };
+ key <AD09> { [ 0x1000568, 0x1000538 ] };
+ key <AD10> { [ 0x1000569, 0x1000539 ] };
+ key <AD11> { [ 0x100056e, 0x100053e ] };
+ key <AD12> { [ 0x1000581, 0x1000551 ] };
+
+ key <AC01> { [ 0x100057b, 0x100054b ] };
+ key <AC02> { [ 0x100057e, 0x100054e ] };
+ key <AC03> { [ 0x1000563, 0x1000533 ] };
+ key <AC04> { [ 0x1000565, 0x1000535 ] };
+ key <AC05> { [ 0x1000561, 0x1000531 ] };
+ key <AC06> { [ 0x1000576, 0x1000546 ] };
+ key <AC07> { [ 0x100056b, 0x100053b ] };
+ key <AC08> { [ 0x100057f, 0x100054f ] };
+ key <AC09> { [ 0x1000570, 0x1000540 ] };
+ key <AC10> { [ 0x100057a, 0x100054a ] };
+ key <AC11> { [ 0x1000580, 0x1000550 ] };
+
+ key <AB01> { [ 0x100056a, 0x100053a ] };
+ key <AB02> { [ 0x1000564, 0x1000534 ] };
+ key <AB03> { [ 0x1000579, 0x1000549 ] };
+ key <AB04> { [ 0x1000575, 0x1000545 ] };
+ key <AB05> { [ 0x1000566, 0x1000536 ] };
+ key <AB06> { [ 0x100056c, 0x100053c ] };
+ key <AB07> { [ 0x1000584, 0x1000554 ] };
+ key <AB08> { [ 0x100056d, 0x100053d ] };
+ key <AB09> { [ 0x1000577, 0x1000547 ] };
+ key <AB10> { [ 0x100057c, 0x100054c ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+ include "am(basic)"
+ name[Group1]= "Armenian";
+
+ include "group(olpc)"
+};
+
+xkb_symbols "phonetic" {
+ include "am(basic)"
+ name[Group1]= "Armenian (phonetic)";
+
+ key <BKSL> { [ 0x1000577, 0x1000547 ] };
+
+ key <AE01> { [ 0x1000567, 0x1000537 ] };
+ key <AE02> { [ 0x1000569, 0x1000539 ] };
+ key <AE03> { [ 0x1000583, 0x1000553 ] };
+ key <AE04> { [ 0x1000571, 0x1000541 ] };
+ key <AE05> { [ 0x100057b, 0x100054b ] };
+ key <AE06> { [ 0x1000582, 0x1000552 ] };
+ key <AE07> { [ 0x1000587, 0x1000587 ] };
+ key <AE08> { [ 0x100057c, 0x100054c ] };
+ key <AE09> { [ 0x1000579, 0x1000549 ] };
+ key <AE10> { [ 0x1000573, 0x1000543 ] };
+ key <AE11> { [ 0x100002D, 0x1002015 ] };
+ key <AE12> { [ 0x100056a, 0x100053a ] };
+
+ key <LatQ> { [ 0x1000584, 0x1000554 ] };
+ key <LatW> { [ 0x1000578, 0x1000548 ] };
+ key <LatE> { [ 0x1000565, 0x1000535 ] };
+ key <LatR> { [ 0x1000580, 0x1000550 ] };
+ key <LatT> { [ 0x100057f, 0x100054f ] };
+ key <LatY> { [ 0x1000568, 0x1000538 ] };
+ key <LatU> { [ 0x1000582, 0x1000552 ] };
+ key <LatI> { [ 0x100056b, 0x100053b ] };
+ key <LatO> { [ 0x1000585, 0x1000555 ] };
+ key <LatP> { [ 0x100057a, 0x100054a ] };
+ key <AD11> { [ 0x100056d, 0x100053d ] };
+ key <AD12> { [ 0x100056e, 0x100053e ] };
+
+ key <LatA> { [ 0x1000561, 0x1000531 ] };
+ key <LatS> { [ 0x100057d, 0x100054d ] };
+ key <LatD> { [ 0x1000564, 0x1000534 ] };
+ key <LatF> { [ 0x1000586, 0x1000556 ] };
+ key <LatG> { [ 0x1000563, 0x1000533 ] };
+ key <LatH> { [ 0x1000570, 0x1000540 ] };
+ key <LatJ> { [ 0x1000575, 0x1000545 ] };
+ key <LatK> { [ 0x100056f, 0x100053f ] };
+ key <LatL> { [ 0x100056c, 0x100053c ] };
+ key <AC10> { [ semicolon, 0x1000589 ] };
+ key <AC11> { [ 0x100055b, 0x1000022 ] };
+
+ key <LatZ> { [ 0x1000566, 0x1000536 ] };
+ key <LatX> { [ 0x1000572, 0x1000542 ] };
+ key <LatC> { [ 0x1000581, 0x1000551 ] };
+ key <LatV> { [ 0x100057e, 0x100054e ] };
+ key <LatB> { [ 0x1000562, 0x1000532 ] };
+ key <LatN> { [ 0x1000576, 0x1000546 ] };
+ key <LatM> { [ 0x1000574, 0x1000544 ] };
+ key <AB08> { [ 0x100002C, 0x10000AB ] };
+ key <AB09> { [ 0x1002024, 0x10000BB ] };
+ key <AB10> { [ 0x100002F, 0x100055e ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "phonetic-alt" {
+ include "am(phonetic)"
+ name[Group1]= "Armenian (alternative phonetic)";
+
+ key <AE08> { [ 0x1000580, 0x1000550 ] };
+ key <LatR> { [ 0x100057c, 0x100054c ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "eastern" {
+
+ name[Group1]="Armenian (eastern)";
+
+ // This is the closer phonetic transliteration for Eastern Armenian
+ // than the Windows XP layout for Eastern Armenian, which seems
+ // to have contained a bug, with the reversal of 'g' for keh and 'c' for gim
+ // Also, AE01 (the colon) has been replaced with the Armenian_full_stop and
+ // capital AE07 (ken) with the Armenian ligature ew
+
+ key <TLDE> { [ Armenian_separation_mark, Armenian_exclam ] };
+// key <AE01> { [ colon, KP_1 ] };
+ key <AE01> { [ Armenian_full_stop, KP_1 ] };
+ key <AE02> { [ Armenian_dza, Armenian_DZA ] };
+ key <AE03> { [ Armenian_hi, Armenian_HI ] };
+ key <AE04> { [ Armenian_accent, KP_3 ] };
+ key <AE05> { [ comma, KP_4 ] };
+ key <AE06> { [ minus, KP_9 ] };
+ key <AE07> { [ period, Armenian_ligature_ew ] };
+ key <AE08> { [ guillemotleft, parenleft ] };
+ key <AE09> { [ guillemotright, parenright ] };
+ key <AE10> { [ Armenian_o, Armenian_O ] };
+ key <AE11> { [ Armenian_ra, Armenian_RA ] };
+ key <AE12> { [ Armenian_zhe, Armenian_ZHE ] };
+
+ key <LatQ> { [ Armenian_khe, Armenian_KHE ] };
+ key <LatW> { [ Armenian_vyun, Armenian_VYUN ] };
+ key <LatE> { [ Armenian_e, Armenian_E ] };
+ key <LatR> { [ Armenian_re, Armenian_RE ] };
+ key <LatT> { [ Armenian_tyun, Armenian_TYUN ] };
+ key <LatY> { [ Armenian_yech, Armenian_YECH ] };
+ key <LatU> { [ Armenian_at, Armenian_AT ] };
+ key <LatI> { [ Armenian_ini, Armenian_INI ] };
+ key <LatO> { [ Armenian_vo, Armenian_VO ] };
+ key <LatP> { [ Armenian_pe, Armenian_PE ] };
+ key <AD11> { [ Armenian_cha, Armenian_CHA ] };
+ key <AD12> { [ Armenian_je, Armenian_JE ] };
+ key <BKSL> { [ apostrophe, Armenian_question ] };
+
+ key <LatA> { [ Armenian_ayb, Armenian_AYB ] };
+ key <LatS> { [ Armenian_se, Armenian_SE ] };
+ key <LatD> { [ Armenian_da, Armenian_DA ] };
+ key <LatF> { [ Armenian_fe, Armenian_FE ] };
+ key <LatG> { [ Armenian_gim, Armenian_GIM ] };
+ key <LatH> { [ Armenian_ho, Armenian_HO ] };
+ key <LatJ> { [ Armenian_tche, Armenian_TCHE ] };
+ key <LatK> { [ Armenian_ken, Armenian_KEN ] };
+ key <LatL> { [ Armenian_lyun, Armenian_LYUN ] };
+ key <AC10> { [ Armenian_to, Armenian_TO ] };
+ key <AC11> { [ Armenian_pyur, Armenian_PYUR ] };
+
+ key <LatZ> { [ Armenian_za, Armenian_ZA ] };
+ key <LatX> { [ Armenian_tso, Armenian_TSO ] };
+ key <LatC> { [ Armenian_ke, Armenian_KE ] };
+ key <LatV> { [ Armenian_vev, Armenian_VEV ] };
+ key <LatB> { [ Armenian_ben, Armenian_BEN ] };
+ key <LatN> { [ Armenian_nu, Armenian_NU ] };
+ key <LatM> { [ Armenian_men, Armenian_MEN ] };
+ key <AB08> { [ Armenian_sha, Armenian_SHA ] };
+ key <AB09> { [ Armenian_ghat, Armenian_GHAT ] };
+ key <AB10> { [ Armenian_tsa, Armenian_TSA ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "western" {
+ include "am(eastern)"
+ name[Group1]="Armenian (western)";
+
+ // This is exactly the same layout for Western Armenian
+ // as in Windows XP, except:
+ // AE01 (the colon) has been replaced with the Armenian_full_stop and
+ // capital AE07 (ken) with the Armenian ligature ew
+
+ key <LatW> { [ Armenian_vev, Armenian_VEV ] };
+ key <LatT> { [ Armenian_da, Armenian_DA ] };
+ key <LatP> { [ Armenian_ben, Armenian_BEN ] };
+ key <LatD> { [ Armenian_tyun, Armenian_TYUN ] };
+ key <LatG> { [ Armenian_ken, Armenian_KEN ] };
+ key <LatK> { [ Armenian_ke, Armenian_KE ] };
+ key <LatC> { [ Armenian_gim, Armenian_GIM ] };
+ key <LatV> { [ Armenian_vyun, Armenian_VYUN ] };
+ key <LatB> { [ Armenian_pe, Armenian_PE ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "eastern-alt" {
+ include "am(eastern)"
+ name[Group1]="Armenian (alternative eastern)";
+
+ // This replicates the Windows XP keyboard layout for Eastern
+ // Armenian exactly (including the bug), except:
+ // AE01 (the colon) has been replaced with the Armenian_full_stop and
+ // capital AE07 (ken) with the Armenian ligature ew
+
+ key <LatG> { [ Armenian_ke, Armenian_KE ] };
+ key <LatC> { [ Armenian_gim, Armenian_GIM ] };
+
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ara b/xorg-server/xkeyboard-config/symbols/ara
index 4606ee719..76e03b1dd 100644
--- a/xorg-server/xkeyboard-config/symbols/ara
+++ b/xorg-server/xkeyboard-config/symbols/ara
@@ -1,276 +1,276 @@
-// based on a keyboard map from an 'xkb/symbols/ar' file
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
- name[Group1]= "Arabic";
-
-// NOTES:
-//
-// there is also combined shadda diacritis in AltGr position of simple
-// diacritics fatha, fathatan, damma, dammatan, kasra and kasratan
-// should a third state be added to Group2 ?
-//
-
- key <TLDE> { [ Arabic_thal, Arabic_shadda ] };
- key <AE01> { [ 1, exclam ] };
- key <AE02> { [ 2, at ] };
- key <AE03> { [ 3, numbersign ] };
- key <AE04> { [ 4, dollar ] };
- key <AE05> { [ 5, percent ] };
- key <AE06> { [ 6, asciicircum ] };
- key <AE07> { [ 7, ampersand ] };
- key <AE08> { [ 8, asterisk ] };
- key <AE09> { [ 9, parenright ] };
- key <AE10> { [ 0, parenleft ] };
- key <AE11> { [ minus, underscore ] };
- key <AE12> { [ equal, plus ] };
-
- key <AD01> { [ Arabic_dad, Arabic_fatha ] };
- key <AD02> { [ Arabic_sad, Arabic_fathatan ] };
- key <AD03> { [ Arabic_theh, Arabic_damma ] };
- key <AD04> { [ Arabic_qaf, Arabic_dammatan ] };
- key <AD05> { [ Arabic_feh, 0x100fef9, 0x10006a4 ] };
- key <AD06> { [ Arabic_ghain, Arabic_hamzaunderalef ] };
- key <AD07> { [ Arabic_ain, grave ] };
- key <AD08> { [ Arabic_ha, division ] };
- key <AD09> { [ Arabic_khah, multiply ] };
- key <AD10> { [ Arabic_hah, Arabic_semicolon ] };
- key <AD11> { [ Arabic_jeem, less, 0x1000686 ] };
- key <AD12> { [ Arabic_dal, greater ] };
-
- key <AC01> { [ Arabic_sheen, Arabic_kasra ] };
- key <AC02> { [ Arabic_seen, Arabic_kasratan ] };
- key <AC03> { [ Arabic_yeh, bracketright ] };
- key <AC04> { [ Arabic_beh, bracketleft, 0x100067e ] };
- key <AC05> { [ Arabic_lam, 0x100fef7 ] };
- key <AC06> { [ Arabic_alef, Arabic_hamzaonalef ] };
- key <AC07> { [ Arabic_teh, Arabic_tatweel ] };
- key <AC08> { [ Arabic_noon, Arabic_comma ] };
- key <AC09> { [ Arabic_meem, slash ] };
- key <AC10> { [ Arabic_kaf, colon, 0x10006af ] };
- key <AC11> { [ Arabic_tah, quotedbl ] };
-
- key <LSGT> { [ bar, brokenbar ] };
- key <AB01> { [Arabic_hamzaonyeh, asciitilde, guillemotright ] };
- key <AB02> { [ Arabic_hamza, Arabic_sukun, guillemotleft ] };
- key <AB03> { [Arabic_hamzaonwaw, braceright ] };
- key <AB04> { [ Arabic_ra, braceleft ] };
- key <AB05> { [ 0x100fefb, 0x100fef5 ] };
- key <AB06> { [Arabic_alefmaksura, Arabic_maddaonalef ] };
- key <AB07> { [Arabic_tehmarbuta, apostrophe ] };
- key <AB08> { [ Arabic_waw, comma ] };
- key <AB09> { [ Arabic_zain, period ] };
- key <AB10> { [ Arabic_zah, Arabic_question_mark ] };
-
- include "level3(ralt_switch)"
-
- // End alphanumeric section
-};
-
-partial alphanumeric_keys
-xkb_symbols "qwerty" {
- include "ara(basic)"
- name[Group1]= "Arabic - qwerty";
-};
-
-partial alphanumeric_keys
-xkb_symbols "azerty" {
- include "ara(basic)"
- name[Group1]= "Arabic - azerty";
-
- // the north african arabic keyboard differs from the middle east one
- // by the numeric row; it follows French keyboard style
- //
- // PROBLEM: some chars are inaccessible: ! @ # $ % ^ *
- // should they go elsewhere? replace " ' that are now in double ?
- // also, dead_circumflex and dead_diaeresis from French keyboard
- // as well as ugrave are missing, which questions the utility of the
- // other accentuated latin letters. Maybe this is useful only with
- // a French keyboard in Group1 ? Then, shouldn't Group1 be filled ?
-
- key <AE01> { [ ampersand, 1 ] };
- key <AE02> { [ eacute, 2 ] };
- key <AE03> { [ quotedbl, 3 ] };
- key <AE04> { [ apostrophe, 4 ] };
- key <AE05> { [ parenleft, 5 ] };
- key <AE06> { [ minus, 6 ] };
- key <AE07> { [ egrave, 7 ] };
- key <AE08> { [ underscore, 8 ] };
- key <AE09> { [ ccedilla, 9 ] };
- key <AE10> { [ agrave, 0 ] };
- key <AE11> { [ parenright, degree ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "digits" {
- include "ara(basic)"
- name[Group1]= "Arabic - digits";
-
- // use arabic script digits
-
- key <AE01> { [ 0x1000661, exclam ] };
- key <AE02> { [ 0x1000662, at ] };
- key <AE03> { [ 0x1000663, numbersign ] };
- key <AE04> { [ 0x1000664, dollar ] };
- key <AE05> { [ 0x1000665, Arabic_percent ] };
- key <AE06> { [ 0x1000666, asciicircum ] };
- key <AE07> { [ 0x1000667, ampersand ] };
- key <AE08> { [ 0x1000668, asterisk ] };
- key <AE09> { [ 0x1000669, parenright ] };
- key <AE10> { [ 0x1000660, parenleft ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "qwerty_digits" {
- include "ara(digits)"
- name[Group1]= "Arabic - qwerty/digits";
-};
-
-partial alphanumeric_keys
-xkb_symbols "azerty_digits" {
- include "ara(azerty)"
- name[Group1]= "Arabic - azerty/digits";
-
- key <AE01> { [ ampersand, 0x1000661 ] };
- key <AE02> { [ eacute, 0x1000662 ] };
- key <AE03> { [ quotedbl, 0x1000663 ] };
- key <AE04> { [ apostrophe, 0x1000664 ] };
- key <AE05> { [ parenleft, 0x1000665 ] };
- key <AE06> { [ minus, 0x1000666 ] };
- key <AE07> { [ egrave, 0x1000667 ] };
- key <AE08> { [ underscore, 0x1000668 ] };
- key <AE09> { [ ccedilla, 0x1000669 ] };
- key <AE10> { [ agrave, 0x1000660 ] };
-};
-
-// Arabic keyboard using Buckwalter transliteration
-// http://www.qamus.org/transliteration.htm
-// Martin Vidner
-
-// symbol names: see /usr/X11R6/include/X11/keysymdef.h (XFree86-devel.rpm)
-
-partial alphanumeric_keys
-xkb_symbols "buckwalter" {
- name[Group1]= "Arabic - Buckwalter";
-
- // ARABIC LETTER SUPERSCRIPT ALEF
- key <TLDE> { [ 0x1000670, Arabic_shadda ] };
-
- // Arabic_0 .. Arabic_9 do not work in Kate,
- // Unicode never seems to work worse.
- key <AE01> { [ 0x1000661, VoidSymbol ] };
- key <AE02> { [ 0x1000662, VoidSymbol ] };
- key <AE03> { [ 0x1000663, VoidSymbol ] };
- key <AE04> { [ 0x1000664, Arabic_sheen ] };
- key <AE05> { [ 0x1000665, Arabic_percent ] };
- key <AE06> { [ 0x1000666, VoidSymbol ] };
- key <AE07> { [ 0x1000667, Arabic_hamzaonwaw ] };
- key <AE08> { [ 0x1000668, Arabic_thal ] };
- // ORNATE LEFT PARENTHESIS
- key <AE09> { [ 0x1000669, 0x100fd3e ] };
- // ORNATE RIGHT PARENTHESIS
- key <AE10> { [ 0x1000660, 0x100fd3f ] };
- key <AE11> { [ minus, Arabic_tatweel ] };
- key <AE12> { [ equal, plus ] };
-
- key <AD01> { [ Arabic_qaf, VoidSymbol ] };
- key <AD02> { [ Arabic_waw, Arabic_hamzaonwaw ] };
- key <AD03> { [ VoidSymbol, Arabic_ain ] };
- key <AD04> { [ Arabic_ra, VoidSymbol ] };
- key <AD05> { [ Arabic_teh, Arabic_tah ] };
- key <AD06> { [ Arabic_yeh, Arabic_alefmaksura ] };
- key <AD07> { [ Arabic_damma, VoidSymbol ] };
- key <AD08> { [ Arabic_kasra, Arabic_hamzaunderalef ] };
- key <AD09> { [ Arabic_sukun, Arabic_hamzaonalef ] };
- key <AD10> { [ Arabic_tehmarbuta, VoidSymbol ] };
- // ARABIC LETTER ALEF WASLA
- key <AD11> { [ VoidSymbol, 0x1000671 ] };
- key <AD12> { [ VoidSymbol, Arabic_hamzaonyeh ] };
-
- key <AC01> { [ Arabic_fatha, Arabic_alef ] };
- key <AC02> { [ Arabic_seen, Arabic_sad ] };
- key <AC03> { [ Arabic_dal, Arabic_dad ] };
- key <AC04> { [ Arabic_feh, Arabic_fathatan ] };
- key <AC05> { [ Arabic_ghain, VoidSymbol ] };
- key <AC06> { [ Arabic_ha, Arabic_hah ] };
- key <AC07> { [ Arabic_jeem, VoidSymbol ] };
- key <AC08> { [ Arabic_kaf, Arabic_kasratan ] };
- key <AC09> { [ Arabic_lam, VoidSymbol ] };
- key <AC10> { [ Arabic_semicolon, VoidSymbol ] };
- key <AC11> { [ Arabic_hamza, VoidSymbol ] };
-
- key <BKSL> { [ VoidSymbol, Arabic_maddaonalef ] };
-
-// key <LSGT> { [ bar, brokenbar ] };
-
- key <AB01> { [ Arabic_zain, Arabic_zah ] };
- key <AB02> { [ Arabic_khah, VoidSymbol ] };
- key <AB03> { [ VoidSymbol, VoidSymbol ] };
- key <AB04> { [ Arabic_theh, VoidSymbol ] };
- key <AB05> { [ Arabic_beh, VoidSymbol ] };
- key <AB06> { [ Arabic_noon, Arabic_dammatan ] };
- key <AB07> { [ Arabic_meem, VoidSymbol ] };
- key <AB08> { [ Arabic_comma, Arabic_hamzaunderalef ] };
- // ARABIC FULL STOP (Urdu)
- key <AB09> { [ 0x10006d4, Arabic_hamzaonalef ] };
- key <AB10> { [ VoidSymbol, Arabic_question_mark ] };
-
- // End alphanumeric section
-};
-
-partial alphanumeric_keys
-xkb_symbols "olpc" {
-
- include "ara(basic)"
-
- // As part of the olpc design some changes were made to the Arabic
- // keyboard design. Major changes are:
- //
- // * Removed the lam-alef single character. Poeple type as they
- // pronounce, and lam-alef is just a visual formatting of the
- // sequence and is not often used on the keyboard. It is
- // similar to the Allah single character, which is also not on
- // the keyboard.
- // * Moved the following keys:
- // o Thal from TLDE to AB05: Due to space limitation on the
- // keybaord, but also accessibility
- // o Shadda from TLDE to AD05
- // * Placed currency letters on number keys and moved the ^ and &
- // characters to lower keys (This change is worth revisiting
- // before end of test period)
-
- key <TLDE> { [ grave, asciitilde ] };
-
- key <AE01> { [ 0x1000661, exclam ] };
- key <AE02> { [ 0x1000662, at ] };
- key <AE03> { [ 0x1000663, numbersign ] };
- key <AE04> { [ 0x1000664, dollar ] };
- key <AE05> { [ 0x1000665, Arabic_percent ] };
- key <AE06> { [ 0x1000666, sterling ] };
- key <AE07> { [ 0x1000667, EuroSign ] };
- key <AE08> { [ 0x1000668, asterisk ] };
- key <AE09> { [ 0x1000669, parenright ] };
- key <AE10> { [ 0x1000660, parenleft ] };
-
- key <AD05> { [ Arabic_feh, Arabic_shadda ] };
-
- key <AD08> { [ Arabic_heh, division ] };
- key <AD11> { [ Arabic_jeem, braceright ] };
- key <AD12> { [ Arabic_dal, braceleft ] };
-
- key <AC01> { [ Arabic_sheen, greater ] };
- key <AC02> { [ Arabic_seen, less ] };
- key <AC05> { [ Arabic_lam, ampersand ] };
- key <AC10> { [ Arabic_kaf ] };
- key <AC11> { [ Arabic_tah ] };
-
- key <BKSL> { [ backslash, bar ] };
-
-
- // REH isolated form?
- key <AB03> { [ Arabic_hamzaonwaw, Arabic_kasra ] };
- key <AB04> { [ Arabic_ra, Arabic_kasratan ] };
- key <AB05> { [ Arabic_thal, asciicircum ] };
-
- include "group(olpc)"
-};
+// based on a keyboard map from an 'xkb/symbols/ar' file
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+ name[Group1]= "Arabic";
+
+// NOTES:
+//
+// there is also combined shadda diacritis in AltGr position of simple
+// diacritics fatha, fathatan, damma, dammatan, kasra and kasratan
+// should a third state be added to Group2 ?
+//
+
+ key <TLDE> { [ Arabic_thal, Arabic_shadda ] };
+ key <AE01> { [ 1, exclam ] };
+ key <AE02> { [ 2, at ] };
+ key <AE03> { [ 3, numbersign ] };
+ key <AE04> { [ 4, dollar ] };
+ key <AE05> { [ 5, percent ] };
+ key <AE06> { [ 6, asciicircum ] };
+ key <AE07> { [ 7, ampersand ] };
+ key <AE08> { [ 8, asterisk ] };
+ key <AE09> { [ 9, parenright ] };
+ key <AE10> { [ 0, parenleft ] };
+ key <AE11> { [ minus, underscore ] };
+ key <AE12> { [ equal, plus ] };
+
+ key <AD01> { [ Arabic_dad, Arabic_fatha ] };
+ key <AD02> { [ Arabic_sad, Arabic_fathatan ] };
+ key <AD03> { [ Arabic_theh, Arabic_damma ] };
+ key <AD04> { [ Arabic_qaf, Arabic_dammatan ] };
+ key <AD05> { [ Arabic_feh, 0x100fef9, 0x10006a4 ] };
+ key <AD06> { [ Arabic_ghain, Arabic_hamzaunderalef ] };
+ key <AD07> { [ Arabic_ain, grave ] };
+ key <AD08> { [ Arabic_ha, division ] };
+ key <AD09> { [ Arabic_khah, multiply ] };
+ key <AD10> { [ Arabic_hah, Arabic_semicolon ] };
+ key <AD11> { [ Arabic_jeem, less, 0x1000686 ] };
+ key <AD12> { [ Arabic_dal, greater ] };
+
+ key <AC01> { [ Arabic_sheen, Arabic_kasra ] };
+ key <AC02> { [ Arabic_seen, Arabic_kasratan ] };
+ key <AC03> { [ Arabic_yeh, bracketright ] };
+ key <AC04> { [ Arabic_beh, bracketleft, 0x100067e ] };
+ key <AC05> { [ Arabic_lam, 0x100fef7 ] };
+ key <AC06> { [ Arabic_alef, Arabic_hamzaonalef ] };
+ key <AC07> { [ Arabic_teh, Arabic_tatweel ] };
+ key <AC08> { [ Arabic_noon, Arabic_comma ] };
+ key <AC09> { [ Arabic_meem, slash ] };
+ key <AC10> { [ Arabic_kaf, colon, 0x10006af ] };
+ key <AC11> { [ Arabic_tah, quotedbl ] };
+
+ key <LSGT> { [ bar, brokenbar ] };
+ key <AB01> { [Arabic_hamzaonyeh, asciitilde, guillemotright ] };
+ key <AB02> { [ Arabic_hamza, Arabic_sukun, guillemotleft ] };
+ key <AB03> { [Arabic_hamzaonwaw, braceright ] };
+ key <AB04> { [ Arabic_ra, braceleft ] };
+ key <AB05> { [ 0x100fefb, 0x100fef5 ] };
+ key <AB06> { [Arabic_alefmaksura, Arabic_maddaonalef ] };
+ key <AB07> { [Arabic_tehmarbuta, apostrophe ] };
+ key <AB08> { [ Arabic_waw, comma ] };
+ key <AB09> { [ Arabic_zain, period ] };
+ key <AB10> { [ Arabic_zah, Arabic_question_mark ] };
+
+ include "level3(ralt_switch)"
+
+ // End alphanumeric section
+};
+
+partial alphanumeric_keys
+xkb_symbols "qwerty" {
+ include "ara(basic)"
+ name[Group1]= "Arabic (qwerty)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "azerty" {
+ include "ara(basic)"
+ name[Group1]= "Arabic (azerty)";
+
+ // the north african arabic keyboard differs from the middle east one
+ // by the numeric row; it follows French keyboard style
+ //
+ // PROBLEM: some chars are inaccessible: ! @ # $ % ^ *
+ // should they go elsewhere? replace " ' that are now in double ?
+ // also, dead_circumflex and dead_diaeresis from French keyboard
+ // as well as ugrave are missing, which questions the utility of the
+ // other accentuated latin letters. Maybe this is useful only with
+ // a French keyboard in Group1 ? Then, shouldn't Group1 be filled ?
+
+ key <AE01> { [ ampersand, 1 ] };
+ key <AE02> { [ eacute, 2 ] };
+ key <AE03> { [ quotedbl, 3 ] };
+ key <AE04> { [ apostrophe, 4 ] };
+ key <AE05> { [ parenleft, 5 ] };
+ key <AE06> { [ minus, 6 ] };
+ key <AE07> { [ egrave, 7 ] };
+ key <AE08> { [ underscore, 8 ] };
+ key <AE09> { [ ccedilla, 9 ] };
+ key <AE10> { [ agrave, 0 ] };
+ key <AE11> { [ parenright, degree ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "digits" {
+ include "ara(basic)"
+ name[Group1]= "Arabic (digits)";
+
+ // use arabic script digits
+
+ key <AE01> { [ 0x1000661, exclam ] };
+ key <AE02> { [ 0x1000662, at ] };
+ key <AE03> { [ 0x1000663, numbersign ] };
+ key <AE04> { [ 0x1000664, dollar ] };
+ key <AE05> { [ 0x1000665, Arabic_percent ] };
+ key <AE06> { [ 0x1000666, asciicircum ] };
+ key <AE07> { [ 0x1000667, ampersand ] };
+ key <AE08> { [ 0x1000668, asterisk ] };
+ key <AE09> { [ 0x1000669, parenright ] };
+ key <AE10> { [ 0x1000660, parenleft ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "qwerty_digits" {
+ include "ara(digits)"
+ name[Group1]= "Arabic (qwerty/digits)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "azerty_digits" {
+ include "ara(azerty)"
+ name[Group1]= "Arabic (azerty/digits)";
+
+ key <AE01> { [ ampersand, 0x1000661 ] };
+ key <AE02> { [ eacute, 0x1000662 ] };
+ key <AE03> { [ quotedbl, 0x1000663 ] };
+ key <AE04> { [ apostrophe, 0x1000664 ] };
+ key <AE05> { [ parenleft, 0x1000665 ] };
+ key <AE06> { [ minus, 0x1000666 ] };
+ key <AE07> { [ egrave, 0x1000667 ] };
+ key <AE08> { [ underscore, 0x1000668 ] };
+ key <AE09> { [ ccedilla, 0x1000669 ] };
+ key <AE10> { [ agrave, 0x1000660 ] };
+};
+
+// Arabic keyboard using Buckwalter transliteration
+// http://www.qamus.org/transliteration.htm
+// Martin Vidner
+
+// symbol names: see /usr/X11R6/include/X11/keysymdef.h (XFree86-devel.rpm)
+
+partial alphanumeric_keys
+xkb_symbols "buckwalter" {
+ name[Group1]= "Arabic (Buckwalter)";
+
+ // ARABIC LETTER SUPERSCRIPT ALEF
+ key <TLDE> { [ 0x1000670, Arabic_shadda ] };
+
+ // Arabic_0 .. Arabic_9 do not work in Kate,
+ // Unicode never seems to work worse.
+ key <AE01> { [ 0x1000661, VoidSymbol ] };
+ key <AE02> { [ 0x1000662, VoidSymbol ] };
+ key <AE03> { [ 0x1000663, VoidSymbol ] };
+ key <AE04> { [ 0x1000664, Arabic_sheen ] };
+ key <AE05> { [ 0x1000665, Arabic_percent ] };
+ key <AE06> { [ 0x1000666, VoidSymbol ] };
+ key <AE07> { [ 0x1000667, Arabic_hamzaonwaw ] };
+ key <AE08> { [ 0x1000668, Arabic_thal ] };
+ // ORNATE LEFT PARENTHESIS
+ key <AE09> { [ 0x1000669, 0x100fd3e ] };
+ // ORNATE RIGHT PARENTHESIS
+ key <AE10> { [ 0x1000660, 0x100fd3f ] };
+ key <AE11> { [ minus, Arabic_tatweel ] };
+ key <AE12> { [ equal, plus ] };
+
+ key <AD01> { [ Arabic_qaf, VoidSymbol ] };
+ key <AD02> { [ Arabic_waw, Arabic_hamzaonwaw ] };
+ key <AD03> { [ VoidSymbol, Arabic_ain ] };
+ key <AD04> { [ Arabic_ra, VoidSymbol ] };
+ key <AD05> { [ Arabic_teh, Arabic_tah ] };
+ key <AD06> { [ Arabic_yeh, Arabic_alefmaksura ] };
+ key <AD07> { [ Arabic_damma, VoidSymbol ] };
+ key <AD08> { [ Arabic_kasra, Arabic_hamzaunderalef ] };
+ key <AD09> { [ Arabic_sukun, Arabic_hamzaonalef ] };
+ key <AD10> { [ Arabic_tehmarbuta, VoidSymbol ] };
+ // ARABIC LETTER ALEF WASLA
+ key <AD11> { [ VoidSymbol, 0x1000671 ] };
+ key <AD12> { [ VoidSymbol, Arabic_hamzaonyeh ] };
+
+ key <AC01> { [ Arabic_fatha, Arabic_alef ] };
+ key <AC02> { [ Arabic_seen, Arabic_sad ] };
+ key <AC03> { [ Arabic_dal, Arabic_dad ] };
+ key <AC04> { [ Arabic_feh, Arabic_fathatan ] };
+ key <AC05> { [ Arabic_ghain, VoidSymbol ] };
+ key <AC06> { [ Arabic_ha, Arabic_hah ] };
+ key <AC07> { [ Arabic_jeem, VoidSymbol ] };
+ key <AC08> { [ Arabic_kaf, Arabic_kasratan ] };
+ key <AC09> { [ Arabic_lam, VoidSymbol ] };
+ key <AC10> { [ Arabic_semicolon, VoidSymbol ] };
+ key <AC11> { [ Arabic_hamza, VoidSymbol ] };
+
+ key <BKSL> { [ VoidSymbol, Arabic_maddaonalef ] };
+
+// key <LSGT> { [ bar, brokenbar ] };
+
+ key <AB01> { [ Arabic_zain, Arabic_zah ] };
+ key <AB02> { [ Arabic_khah, VoidSymbol ] };
+ key <AB03> { [ VoidSymbol, VoidSymbol ] };
+ key <AB04> { [ Arabic_theh, VoidSymbol ] };
+ key <AB05> { [ Arabic_beh, VoidSymbol ] };
+ key <AB06> { [ Arabic_noon, Arabic_dammatan ] };
+ key <AB07> { [ Arabic_meem, VoidSymbol ] };
+ key <AB08> { [ Arabic_comma, Arabic_hamzaunderalef ] };
+ // ARABIC FULL STOP (Urdu)
+ key <AB09> { [ 0x10006d4, Arabic_hamzaonalef ] };
+ key <AB10> { [ VoidSymbol, Arabic_question_mark ] };
+
+ // End alphanumeric section
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+
+ include "ara(basic)"
+
+ // As part of the olpc design some changes were made to the Arabic
+ // keyboard design. Major changes are:
+ //
+ // * Removed the lam-alef single character. Poeple type as they
+ // pronounce, and lam-alef is just a visual formatting of the
+ // sequence and is not often used on the keyboard. It is
+ // similar to the Allah single character, which is also not on
+ // the keyboard.
+ // * Moved the following keys:
+ // o Thal from TLDE to AB05: Due to space limitation on the
+ // keybaord, but also accessibility
+ // o Shadda from TLDE to AD05
+ // * Placed currency letters on number keys and moved the ^ and &
+ // characters to lower keys (This change is worth revisiting
+ // before end of test period)
+
+ key <TLDE> { [ grave, asciitilde ] };
+
+ key <AE01> { [ 0x1000661, exclam ] };
+ key <AE02> { [ 0x1000662, at ] };
+ key <AE03> { [ 0x1000663, numbersign ] };
+ key <AE04> { [ 0x1000664, dollar ] };
+ key <AE05> { [ 0x1000665, Arabic_percent ] };
+ key <AE06> { [ 0x1000666, sterling ] };
+ key <AE07> { [ 0x1000667, EuroSign ] };
+ key <AE08> { [ 0x1000668, asterisk ] };
+ key <AE09> { [ 0x1000669, parenright ] };
+ key <AE10> { [ 0x1000660, parenleft ] };
+
+ key <AD05> { [ Arabic_feh, Arabic_shadda ] };
+
+ key <AD08> { [ Arabic_heh, division ] };
+ key <AD11> { [ Arabic_jeem, braceright ] };
+ key <AD12> { [ Arabic_dal, braceleft ] };
+
+ key <AC01> { [ Arabic_sheen, greater ] };
+ key <AC02> { [ Arabic_seen, less ] };
+ key <AC05> { [ Arabic_lam, ampersand ] };
+ key <AC10> { [ Arabic_kaf ] };
+ key <AC11> { [ Arabic_tah ] };
+
+ key <BKSL> { [ backslash, bar ] };
+
+
+ // REH isolated form?
+ key <AB03> { [ Arabic_hamzaonwaw, Arabic_kasra ] };
+ key <AB04> { [ Arabic_ra, Arabic_kasratan ] };
+ key <AB05> { [ Arabic_thal, asciicircum ] };
+
+ include "group(olpc)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/at b/xorg-server/xkeyboard-config/symbols/at
index 52382f9c0..bd4ba988d 100644
--- a/xorg-server/xkeyboard-config/symbols/at
+++ b/xorg-server/xkeyboard-config/symbols/at
@@ -1,34 +1,34 @@
-// based on a keyboard map from an 'xkb/symbols/de' file
-
-default
-xkb_symbols "basic" {
-
- include "de(basic)"
-
- name[Group1]="Austria";
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- include "de(nodeadkeys)"
-
- name[Group1]="Austria - Eliminate dead keys";
-};
-
-partial alphanumeric_keys
-xkb_symbols "mac" {
-
- include "de(mac)"
-
- name[Group1]= "Austria - Macintosh";
-};
-
-partial alphanumeric_keys
-xkb_symbols "sundeadkeys" {
-
- include "de(Sundeadkeys)"
-
- name[Group1]="Austria - Sun dead keys";
-};
-
+// based on a keyboard map from an 'xkb/symbols/de' file
+
+default
+xkb_symbols "basic" {
+
+ include "de(basic)"
+
+ name[Group1]="German (Austria)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ include "de(nodeadkeys)"
+
+ name[Group1]="German (Austria, eliminate dead keys)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+ include "de(mac)"
+
+ name[Group1]= "German (Austria, Macintosh)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+
+ include "de(Sundeadkeys)"
+
+ name[Group1]="German (Austria, Sun dead keys)";
+};
+
diff --git a/xorg-server/xkeyboard-config/symbols/az b/xorg-server/xkeyboard-config/symbols/az
index 4227bc944..3c399cf96 100644
--- a/xorg-server/xkeyboard-config/symbols/az
+++ b/xorg-server/xkeyboard-config/symbols/az
@@ -1,92 +1,92 @@
-// based on:
-// symbols definition for a very simple Azerbaidjani keyboard layout.
-// 2001 - Pablo Saratxaga <pablo@mandrakesoft.com>
-
-partial default alphanumeric_keys
-xkb_symbols "latin" {
-
- include "us"
-
- name[Group1]= "Azerbaijan";
-
- key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
-
- key <AE03> { [ 3, numbersign, U2166 ] };
- key <AE06> { [ 6, colon, EuroSign, periodcentered ] };
- key <AE07> { [ 7, question ] };
-
- key <AE08> { [ 8, asterisk, asciicircum, dead_circumflex ] };
- key <AE11> { [ minus, underscore, hyphen, emdash ] };
-
- key <AD02> { [ udiaeresis, Udiaeresis ] };
- key <AD04> { [ r, R, registered ] };
- key <AD08> { [ i, Iabovedot ] };
- key <AD11> { [ odiaeresis, Odiaeresis, bracketleft, braceleft ] };
- key <AD12> { [ gbreve, Gbreve, bracketright, braceright ] };
-
- key <AC10> { [ idotless, I ] };
- key <AC11> { [ schwa, SCHWA ] };
-
- key <AB03> { [ c, C, copyright, division ] };
- key <AB07> { [ m, M, periodcentered, currency ] };
- key <AB08> { [ ccedilla, Ccedilla ] };
- key <AB09> { [ scedilla, Scedilla ] };
- key <AB10> { [ period, comma ] };
- // End alphanumeric section
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "cyrillic" {
-
- name[Group1]= "Azerbaijan - Cyrillic";
-
- key <AE02> {[ 2, quotedbl ] };
- key <AE03> {[ 3, numbersign ] };
- key <AE04> {[ 4, semicolon ] };
- key <AE06> {[ 6, colon ] };
- key <AE07> {[ 7, question ] };
- key <AE08> {[ 8, asterisk, braceleft ] };
- key <AE09> {[ 9, parenleft, bracketleft ] };
- key <AE10> {[ 0, parenright, bracketright ] };
- key <AE11> {[ minus, underscore, braceright ] };
-
- key <AD01> {[ Cyrillic_je, Cyrillic_JE ] };
- key <AD02> {[ Cyrillic_u_straight, Cyrillic_U_straight ] };
- key <AD03> {[ Cyrillic_u, Cyrillic_U ] };
- key <AD04> {[ Cyrillic_ka, Cyrillic_KA ] };
- key <AD05> {[ Cyrillic_ie, Cyrillic_IE ] };
- key <AD06> {[ Cyrillic_en, Cyrillic_EN ] };
- key <AD07> {[ Cyrillic_ghe, Cyrillic_GHE ] };
- key <AD08> {[ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD09> {[ Cyrillic_shha, Cyrillic_SHHA ] };
- key <AD10> {[ Cyrillic_ze, Cyrillic_ZE ] };
- key <AD11> {[ Cyrillic_ha, Cyrillic_HA ] };
- key <AD12> {[ Cyrillic_che_vertstroke, Cyrillic_CHE_vertstroke ] };
-
- key <AC01> {[ Cyrillic_ef, Cyrillic_EF ] };
- key <AC02> {[ Cyrillic_yeru, Cyrillic_YERU ] };
- key <AC03> {[ Cyrillic_ve, Cyrillic_VE ] };
- key <AC04> {[ Cyrillic_a, Cyrillic_A ] };
- key <AC05> {[ Cyrillic_pe, Cyrillic_PE ] };
- key <AC06> {[ Cyrillic_er, Cyrillic_ER ] };
- key <AC07> {[ Cyrillic_o, Cyrillic_O ] };
- key <AC08> {[ Cyrillic_el, Cyrillic_EL ] };
- key <AC09> {[ Cyrillic_de, Cyrillic_DE ] };
- key <AC10> {[ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <AC11> {[ Cyrillic_ka_vertstroke,Cyrillic_KA_vertstroke ] };
-
- key <AB01> {[ Cyrillic_schwa, Cyrillic_SCHWA ] };
- key <AB02> {[ Cyrillic_che, Cyrillic_CHE ] };
- key <AB03> {[ Cyrillic_es, Cyrillic_ES ] };
- key <AB04> {[ Cyrillic_em, Cyrillic_EM ] };
- key <AB05> {[ Cyrillic_i, Cyrillic_I ] };
- key <AB06> {[ Cyrillic_te, Cyrillic_TE ] };
- key <AB07> {[ Cyrillic_ghe_bar, Cyrillic_GHE_bar ] };
- key <AB08> {[ Cyrillic_be, Cyrillic_BE ] };
- key <AB09> {[ Cyrillic_o_bar, Cyrillic_O_bar ] };
- key <AB10> {[ period, comma ] };
-
- // End alphanumeric section
-};
+// based on:
+// symbols definition for a very simple Azerbaidjani keyboard layout.
+// 2001 - Pablo Saratxaga <pablo@mandrakesoft.com>
+
+partial default alphanumeric_keys
+xkb_symbols "latin" {
+
+ include "us"
+
+ name[Group1]= "Azerbaijani";
+
+ key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
+
+ key <AE03> { [ 3, numbersign, U2166 ] };
+ key <AE06> { [ 6, colon, EuroSign, periodcentered ] };
+ key <AE07> { [ 7, question ] };
+
+ key <AE08> { [ 8, asterisk, asciicircum, dead_circumflex ] };
+ key <AE11> { [ minus, underscore, hyphen, emdash ] };
+
+ key <AD02> { [ udiaeresis, Udiaeresis ] };
+ key <AD04> { [ r, R, registered ] };
+ key <AD08> { [ i, Iabovedot ] };
+ key <AD11> { [ odiaeresis, Odiaeresis, bracketleft, braceleft ] };
+ key <AD12> { [ gbreve, Gbreve, bracketright, braceright ] };
+
+ key <AC10> { [ idotless, I ] };
+ key <AC11> { [ schwa, SCHWA ] };
+
+ key <AB03> { [ c, C, copyright, division ] };
+ key <AB07> { [ m, M, periodcentered, currency ] };
+ key <AB08> { [ ccedilla, Ccedilla ] };
+ key <AB09> { [ scedilla, Scedilla ] };
+ key <AB10> { [ period, comma ] };
+ // End alphanumeric section
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "cyrillic" {
+
+ name[Group1]= "Azerbaijani (Cyrillic)";
+
+ key <AE02> {[ 2, quotedbl ] };
+ key <AE03> {[ 3, numbersign ] };
+ key <AE04> {[ 4, semicolon ] };
+ key <AE06> {[ 6, colon ] };
+ key <AE07> {[ 7, question ] };
+ key <AE08> {[ 8, asterisk, braceleft ] };
+ key <AE09> {[ 9, parenleft, bracketleft ] };
+ key <AE10> {[ 0, parenright, bracketright ] };
+ key <AE11> {[ minus, underscore, braceright ] };
+
+ key <AD01> {[ Cyrillic_je, Cyrillic_JE ] };
+ key <AD02> {[ Cyrillic_u_straight, Cyrillic_U_straight ] };
+ key <AD03> {[ Cyrillic_u, Cyrillic_U ] };
+ key <AD04> {[ Cyrillic_ka, Cyrillic_KA ] };
+ key <AD05> {[ Cyrillic_ie, Cyrillic_IE ] };
+ key <AD06> {[ Cyrillic_en, Cyrillic_EN ] };
+ key <AD07> {[ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <AD08> {[ Cyrillic_sha, Cyrillic_SHA ] };
+ key <AD09> {[ Cyrillic_shha, Cyrillic_SHHA ] };
+ key <AD10> {[ Cyrillic_ze, Cyrillic_ZE ] };
+ key <AD11> {[ Cyrillic_ha, Cyrillic_HA ] };
+ key <AD12> {[ Cyrillic_che_vertstroke, Cyrillic_CHE_vertstroke ] };
+
+ key <AC01> {[ Cyrillic_ef, Cyrillic_EF ] };
+ key <AC02> {[ Cyrillic_yeru, Cyrillic_YERU ] };
+ key <AC03> {[ Cyrillic_ve, Cyrillic_VE ] };
+ key <AC04> {[ Cyrillic_a, Cyrillic_A ] };
+ key <AC05> {[ Cyrillic_pe, Cyrillic_PE ] };
+ key <AC06> {[ Cyrillic_er, Cyrillic_ER ] };
+ key <AC07> {[ Cyrillic_o, Cyrillic_O ] };
+ key <AC08> {[ Cyrillic_el, Cyrillic_EL ] };
+ key <AC09> {[ Cyrillic_de, Cyrillic_DE ] };
+ key <AC10> {[ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <AC11> {[ Cyrillic_ka_vertstroke,Cyrillic_KA_vertstroke ] };
+
+ key <AB01> {[ Cyrillic_schwa, Cyrillic_SCHWA ] };
+ key <AB02> {[ Cyrillic_che, Cyrillic_CHE ] };
+ key <AB03> {[ Cyrillic_es, Cyrillic_ES ] };
+ key <AB04> {[ Cyrillic_em, Cyrillic_EM ] };
+ key <AB05> {[ Cyrillic_i, Cyrillic_I ] };
+ key <AB06> {[ Cyrillic_te, Cyrillic_TE ] };
+ key <AB07> {[ Cyrillic_ghe_bar, Cyrillic_GHE_bar ] };
+ key <AB08> {[ Cyrillic_be, Cyrillic_BE ] };
+ key <AB09> {[ Cyrillic_o_bar, Cyrillic_O_bar ] };
+ key <AB10> {[ period, comma ] };
+
+ // End alphanumeric section
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ba b/xorg-server/xkeyboard-config/symbols/ba
index 4507d4033..7345cc340 100644
--- a/xorg-server/xkeyboard-config/symbols/ba
+++ b/xorg-server/xkeyboard-config/symbols/ba
@@ -1,40 +1,40 @@
-default partial alphanumeric_keys
-xkb_symbols "basic" {
-
- name[Group1]="Bosnia and Herzegovina";
-
- include "rs(latin)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "us" {
-
- name[Group1]= "Bosnia and Herzegovina - US keyboard with Bosnian letters";
-
- include "rs(latinyz)"
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "alternatequotes" {
-
- name[Group1]= "Bosnia and Herzegovina - Use guillemets for quotes";
-
- include "rs(latinalternatequotes)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "unicode" {
-
- name[Group1]= "Bosnia and Herzegovina - Use Bosnian digraphs";
-
- include "rs(latinunicode)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "unicodeus" {
-
- name[Group1]= "Bosnia and Herzegovina - US keyboard with Bosnian digraphs";
-
- include "rs(latinunicodeyz)"
-};
+default partial alphanumeric_keys
+xkb_symbols "basic" {
+
+ name[Group1]="Bosnian";
+
+ include "rs(latin)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "us" {
+
+ name[Group1]= "Bosnian (US keyboard with Bosnian letters)";
+
+ include "rs(latinyz)"
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "alternatequotes" {
+
+ name[Group1]= "Bosnian (use guillemets for quotes)";
+
+ include "rs(latinalternatequotes)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "unicode" {
+
+ name[Group1]= "Bosnian (use Bosnian digraphs)";
+
+ include "rs(latinunicode)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "unicodeus" {
+
+ name[Group1]= "Bosnian (US keyboard with Bosnian digraphs)";
+
+ include "rs(latinunicodeyz)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/bd b/xorg-server/xkeyboard-config/symbols/bd
index 4146f1c8f..34879eb72 100644
--- a/xorg-server/xkeyboard-config/symbols/bd
+++ b/xorg-server/xkeyboard-config/symbols/bd
@@ -1,97 +1,96 @@
-//
-// XKB symbol :: National Bangla/Bengali Standard Keyboard Layout for Bangladesh
-// Ref: http://www.bcc.net.bd/keyboard/bsti_kb_specification.pdf
-//
-// Author: Jamil Ahmed <jamil at bengalinux.org>
-// Created: 18-12-2005
-// Last Updated: 08-01-2006
-// Version: 6.01.3
-//
-// Issues:
-// <AC08> Khanda-Ta is given U-09CE; But BCC had U-09BA
-// <AC07> U-09BB is added though it is not allocated in Original Unicode
-// <AE06> U-09B3 is added though it is not allocated in Original Unicode
-// 3 Conjunct characters are not included
-//
-
-default partial alphanumeric_keys
-
-xkb_symbols "basic" {
- name[Group1]= "Bangladesh";
- key <ESC> { [ Escape ] };
-
-// numbers
- key <TLDE> { [ quoteleft, asciitilde, voidsymbol, voidsymbol ] };
- key <AE01> { [ 0x10009E7, exclam, 0x10009F4, voidsymbol ] };
- key <AE02> { [ 0x10009E8, at, 0x10009F5, voidsymbol ] };
- key <AE03> { [ 0x10009E9, numbersign, 0x10009F6, voidsymbol ] };
- key <AE04> { [ 0x10009EA, dollar, 0x10009F3, 0x10009F2 ] };
- key <AE05> { [ 0x10009EB, percent, 0x10009F7, voidsymbol ] };
- key <AE06> { [ 0x10009EC, asciicircum, 0x10009F8, 0x10009B3 ] };
- key <AE07> { [ 0x10009ED, ampersand, 0x1000902, voidsymbol ] };
- key <AE08> { [ 0x10009EE, asterisk, voidsymbol, voidsymbol ] };
- key <AE09> { [ 0x10009EF, parenleft, voidsymbol, voidsymbol ] };
- key <AE10> { [ 0x10009E6, parenright, 0x10009F9, voidsymbol ] };
- key <AE11> { [ minus, underscore, 0x100200C, voidsymbol ] };
- key <AE12> { [ equal, plus, 0x100200D, voidsymbol ] };
- key <BKSP> { [ BackSpace ] };
-
-// tab, q to ]
- key <TAB> { [ Tab, ISO_Left_Tab ] };
- key <AD01> { [ 0x1000999, 0x1000982, 0x10009E2, 0x10009E3 ] };
- key <AD02> { [ 0x10009AF, 0x10009DF, voidsymbol, voidsymbol ] };
- key <AD03> { [ 0x10009A1, 0x10009A2, 0x10009C4, voidsymbol ] };
- key <AD04> { [ 0x10009AA, 0x10009AB, voidsymbol, voidsymbol ] };
- key <AD05> { [ 0x100099F, 0x10009A0, voidsymbol, voidsymbol ] };
- key <AD06> { [ 0x100099A, 0x100099B, voidsymbol, voidsymbol ] };
- key <AD07> { [ 0x100099C, 0x100099D, voidsymbol, voidsymbol ] };
- key <AD08> { [ 0x10009B9, 0x100099E, 0x10009BD, voidsymbol ] };
- key <AD09> { [ 0x1000997, 0x1000998, voidsymbol, voidsymbol ] };
- key <AD10> { [ 0x10009DC, 0x10009DD, voidsymbol, voidsymbol ] };
- key <AD11> { [ bracketleft, braceleft, voidsymbol, voidsymbol ] };
- key <AD12> { [ bracketright, braceright, voidsymbol, voidsymbol ] };
- key <RTRN> { [ Return ] };
-
-// caps, a to '
-// key <CAPS> { [ Caps_Lock ] };
- key <AC01> { [ 0x10009C3, 0x10009D7, 0x100098B, 0x10009E0 ] };
- key <AC02> { [ 0x10009C1, 0x10009C2, 0x1000989, 0x100098A ] };
- key <AC03> { [ 0x10009BF, 0x10009C0, 0x1000987, 0x1000988 ] };
- key <AC04> { [ 0x10009AC, 0x10009AD, 0x10009F0, 0x10009F1 ] };
- key <AC05> { [ 0x10009CD, 0x1000964, 0x1000965, voidsymbol ] };
- key <AC06> { [ 0x10009BE, 0x1000985, 0x1000986, voidsymbol ] };
- key <AC07> { [ 0x1000995, 0x1000996, 0x10009BB, voidsymbol ] };
- key <AC08> { [ 0x10009A4, 0x10009A5, 0x10009CE, voidsymbol ] };
- key <AC09> { [ 0x10009A6, 0x10009A7, 0x100098C, 0x10009E1 ] };
- key <AC10> { [ semicolon, colon, voidsymbol, voidsymbol ] };
- key <AC11> { [ quoteright, quotedbl, voidsymbol, voidsymbol ] };
-
-// shift, z to /
-// key <LFSH> { [ Shift_L ] };
- key <AB01> { [ 0x1000981, 0x1000983, 0x10009FA, voidsymbol ] };
- key <AB02> { [ 0x10009CB, 0x10009CC, 0x1000993, 0x1000994 ] };
- key <AB03> { [ 0x10009C7, 0x10009C8, 0x100098F, 0x1000990 ] };
- key <AB04> { [ 0x10009B0, 0x10009B2, voidsymbol, voidsymbol ] };
- key <AB05> { [ 0x10009A8, 0x10009A3, voidsymbol, voidsymbol ] };
- key <AB06> { [ 0x10009B8, 0x10009B7, voidsymbol, voidsymbol ] };
- key <AB07> { [ 0x10009AE, 0x10009B6, voidsymbol, voidsymbol ] };
- key <AB08> { [ comma, less, voidsymbol, voidsymbol ] };
- key <AB09> { [ period, greater, 0x10009BC, voidsymbol ] };
- key <AB10> { [ slash, question, voidsymbol, voidsymbol ] };
- key <BKSL> { [ backslash, bar, voidsymbol, voidsymbol ] };
-
-// third level with right-Alt
- include "level3(ralt_switch)"
-
-};
-
-
-//
-// XKB symbol :: Probhat Bangla/Bengali Keyboard Layout
-// Ref: www.ankurbangla.org/images/probhat_layout.png
-//
-
-xkb_symbols "probhat" {
- include "in(ben_probhat)"
- name[Group1]= "Bangladesh - Probhat";
-};
+//
+// XKB symbol :: National Bangla/Bengali Standard Keyboard Layout for Bangladesh
+// Ref: http://www.bcc.net.bd/keyboard/bsti_kb_specification.pdf
+//
+// Author: Jamil Ahmed <jamil at bengalinux.org>
+// Created: 18-12-2005
+// Last Updated: 08-01-2006
+// Version: 6.01.3
+//
+// Issues:
+// <AC08> Khanda-Ta is given U-09CE; But BCC had U-09BA
+// <AC07> U-09BB is added though it is not allocated in Original Unicode
+// <AE06> U-09B3 is added though it is not allocated in Original Unicode
+// 3 Conjunct characters are not included
+//
+
+default partial alphanumeric_keys
+xkb_symbols "basic" {
+ name[Group1]= "Bengali";
+ key <ESC> { [ Escape ] };
+
+// numbers
+ key <TLDE> { [ quoteleft, asciitilde, voidsymbol, voidsymbol ] };
+ key <AE01> { [ 0x10009E7, exclam, 0x10009F4, voidsymbol ] };
+ key <AE02> { [ 0x10009E8, at, 0x10009F5, voidsymbol ] };
+ key <AE03> { [ 0x10009E9, numbersign, 0x10009F6, voidsymbol ] };
+ key <AE04> { [ 0x10009EA, dollar, 0x10009F3, 0x10009F2 ] };
+ key <AE05> { [ 0x10009EB, percent, 0x10009F7, voidsymbol ] };
+ key <AE06> { [ 0x10009EC, asciicircum, 0x10009F8, 0x10009B3 ] };
+ key <AE07> { [ 0x10009ED, ampersand, 0x1000902, voidsymbol ] };
+ key <AE08> { [ 0x10009EE, asterisk, voidsymbol, voidsymbol ] };
+ key <AE09> { [ 0x10009EF, parenleft, voidsymbol, voidsymbol ] };
+ key <AE10> { [ 0x10009E6, parenright, 0x10009F9, voidsymbol ] };
+ key <AE11> { [ minus, underscore, 0x100200C, voidsymbol ] };
+ key <AE12> { [ equal, plus, 0x100200D, voidsymbol ] };
+ key <BKSP> { [ BackSpace ] };
+
+// tab, q to ]
+ key <TAB> { [ Tab, ISO_Left_Tab ] };
+ key <AD01> { [ 0x1000999, 0x1000982, 0x10009E2, 0x10009E3 ] };
+ key <AD02> { [ 0x10009AF, 0x10009DF, voidsymbol, voidsymbol ] };
+ key <AD03> { [ 0x10009A1, 0x10009A2, 0x10009C4, voidsymbol ] };
+ key <AD04> { [ 0x10009AA, 0x10009AB, voidsymbol, voidsymbol ] };
+ key <AD05> { [ 0x100099F, 0x10009A0, voidsymbol, voidsymbol ] };
+ key <AD06> { [ 0x100099A, 0x100099B, voidsymbol, voidsymbol ] };
+ key <AD07> { [ 0x100099C, 0x100099D, voidsymbol, voidsymbol ] };
+ key <AD08> { [ 0x10009B9, 0x100099E, 0x10009BD, voidsymbol ] };
+ key <AD09> { [ 0x1000997, 0x1000998, voidsymbol, voidsymbol ] };
+ key <AD10> { [ 0x10009DC, 0x10009DD, voidsymbol, voidsymbol ] };
+ key <AD11> { [ bracketleft, braceleft, voidsymbol, voidsymbol ] };
+ key <AD12> { [ bracketright, braceright, voidsymbol, voidsymbol ] };
+ key <RTRN> { [ Return ] };
+
+// caps, a to '
+// key <CAPS> { [ Caps_Lock ] };
+ key <AC01> { [ 0x10009C3, 0x10009D7, 0x100098B, 0x10009E0 ] };
+ key <AC02> { [ 0x10009C1, 0x10009C2, 0x1000989, 0x100098A ] };
+ key <AC03> { [ 0x10009BF, 0x10009C0, 0x1000987, 0x1000988 ] };
+ key <AC04> { [ 0x10009AC, 0x10009AD, 0x10009F0, 0x10009F1 ] };
+ key <AC05> { [ 0x10009CD, 0x1000964, 0x1000965, voidsymbol ] };
+ key <AC06> { [ 0x10009BE, 0x1000985, 0x1000986, voidsymbol ] };
+ key <AC07> { [ 0x1000995, 0x1000996, 0x10009BB, voidsymbol ] };
+ key <AC08> { [ 0x10009A4, 0x10009A5, 0x10009CE, voidsymbol ] };
+ key <AC09> { [ 0x10009A6, 0x10009A7, 0x100098C, 0x10009E1 ] };
+ key <AC10> { [ semicolon, colon, voidsymbol, voidsymbol ] };
+ key <AC11> { [ quoteright, quotedbl, voidsymbol, voidsymbol ] };
+
+// shift, z to /
+// key <LFSH> { [ Shift_L ] };
+ key <AB01> { [ 0x1000981, 0x1000983, 0x10009FA, voidsymbol ] };
+ key <AB02> { [ 0x10009CB, 0x10009CC, 0x1000993, 0x1000994 ] };
+ key <AB03> { [ 0x10009C7, 0x10009C8, 0x100098F, 0x1000990 ] };
+ key <AB04> { [ 0x10009B0, 0x10009B2, voidsymbol, voidsymbol ] };
+ key <AB05> { [ 0x10009A8, 0x10009A3, voidsymbol, voidsymbol ] };
+ key <AB06> { [ 0x10009B8, 0x10009B7, voidsymbol, voidsymbol ] };
+ key <AB07> { [ 0x10009AE, 0x10009B6, voidsymbol, voidsymbol ] };
+ key <AB08> { [ comma, less, voidsymbol, voidsymbol ] };
+ key <AB09> { [ period, greater, 0x10009BC, voidsymbol ] };
+ key <AB10> { [ slash, question, voidsymbol, voidsymbol ] };
+ key <BKSL> { [ backslash, bar, voidsymbol, voidsymbol ] };
+
+// third level with right-Alt
+ include "level3(ralt_switch)"
+
+};
+
+
+//
+// XKB symbol :: Probhat Bangla/Bengali Keyboard Layout
+// Ref: www.ankurbangla.org/images/probhat_layout.png
+//
+
+xkb_symbols "probhat" {
+ include "in(ben_probhat)"
+ name[Group1]= "Bengali (Probhat)";
+};
diff --git a/xorg-server/xkeyboard-config/symbols/be b/xorg-server/xkeyboard-config/symbols/be
index 8e096e24c..e39fccf9c 100644
--- a/xorg-server/xkeyboard-config/symbols/be
+++ b/xorg-server/xkeyboard-config/symbols/be
@@ -1,232 +1,232 @@
-// based on a keyboard map from an 'xkb/symbols/be' file
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin"
-
- name[Group1]="Belgium";
-
- key <AE01> { [ ampersand, 1, bar, exclamdown ] };
- key <AE02> { [ eacute, 2, at, oneeighth ] };
- key <AE03> { [ quotedbl, 3, numbersign, sterling ] };
- key <AE04> { [apostrophe, 4, onequarter, dollar ] };
- key <AE05> { [ parenleft, 5, onehalf, threeeighths ] };
- key <AE06> { [ section, 6, asciicircum, fiveeighths ] };
- key <AE07> { [ egrave, 7, braceleft, seveneighths ] };
- key <AE08> { [ exclam, 8, bracketleft, trademark ] };
- key <AE09> { [ ccedilla, 9, braceleft, plusminus ] };
- key <AE10> { [ agrave, 0, braceright, degree ] };
- key <AE11> { [parenright, degree, backslash, questiondown ] };
- key <AE12> { [ minus, underscore, dead_cedilla, dead_ogonek ] };
-
- key <AD01> { [ a, A, at, Greek_OMEGA ] };
- key <AD02> { [ z, Z, lstroke, Lstroke ] };
- key <AD03> { [ e, E, EuroSign, cent ] };
- key <AD09> { [ o, O, oe, OE ] }; // o O œ Œ
- key <AD11> { [dead_circumflex, dead_diaeresis, bracketleft, dead_abovering ] };
- key <AD12> { [ dollar, asterisk, bracketright, dead_macron ] };
-
- key <AC01> { [ q, Q, ae, AE ] };
- key <AC10> { [ m, M, dead_acute, dead_doubleacute ] };
- key <AC11> { [ ugrave, percent, dead_acute, dead_caron ] };
- key <TLDE> { [twosuperior, threesuperior, notsign, notsign ] };
-
- key <BKSL> { [ mu, sterling, dead_grave, dead_breve ] };
- key <AB01> { [ w, W, guillemotleft, less ] };
- key <AB07> { [ comma, question, dead_cedilla, masculine ] };
- key <AB08> { [ semicolon, period, horizconnector, multiply ] };
- key <AB09> { [ colon, slash, periodcentered, division ] };
- key <AB10> { [ equal, plus, dead_tilde, dead_abovedot] };
- key <LSGT> { [ less, greater, backslash, backslash ] };
-
- include "level3(ralt_switch)"
-};
-
-
-// Variant of the fr(oss) layout for Belgium
-// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
-//
-// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
-// │ ³ ≤ │ 1 ≥ │ 2 É │ 3 ˘ │ 4 — │ 5 – │ 6 ™ │ 7 È │ 8 ¡ │ 9 Ç │ 0 À │ ° Ø │ _ ± ┃ ⌫ Retour┃
-// │ ² ¹ │ & | │ é @ │ " # │ ' ¸ │ ( ˇ │ § ^ │ è ` │ ! ~ │ ç { │ à } │ ) ø │ - ‑ ┃ arrière┃
-// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
-// ┃ ┃ A Æ │ Z  │ E ¢ │ R Ê │ T Þ │ Y Ÿ │ U Û │ I Î │ O Œ │ P Ô │ ¨ ˚ │ * ̨ ┃Entrée ┃
-// ┃Tab ↹ ┃ a æ │ z â │ e € │ r ê │ t þ │ y ÿ │ u û │ i î │ o œ │ p ô │ ^ [ │ $ ] ┃ ⏎ ┃
-// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
-// ┃ ┃ Q Ä │ S „ │ D Ë │ F ‚ │ G ¥ │ H Ð │ J Ü │ K Ï │ L Ł │ M Ö │ % Ù │ £ ̄ ┃ ┃
-// ┃Maj ⇬ ┃ q ä │ s ß │ d ë │ f ‘ │ g ’ │ h ð │ j ü │ k ï │ l ł │ m ö │ ù ' │ µ ` ┃ ┃
-// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
-// ┃ ┃ > ≠ │ W “ │ X ” │ C ® │ V ← │ B ↑ │ N → │ ? … │ . . │ / ∕ │ + − ┃ ┃
-// ┃Shift ⇧┃ < \ │ w « │ x » │ c © │ v ⍽ │ b ↓ │ n ¬ │ , ¿ │ ; × │ : ÷ │ = ~ ┃Shift ⇧ ┃
-// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
-// ┃ ┃ ┃ ┃ ␣ Espace insécable ⍽ ┃ ┃ ┃ ┃
-// ┃Ctrl ┃Meta ┃Alt ┃ ␣ Espace ␣ ┃AltGr ⇮┃Menu ┃Ctrl ┃
-// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
-partial alphanumeric_keys
-xkb_symbols "oss" {
-
- include "fr(oss)"
- include "be(oss_frbe)"
-
- name[Group1]="Belgium - Alternative";
-};
-
-partial alphanumeric_keys
-xkb_symbols "oss_frbe" {
- // First row
- key <TLDE> { [ twosuperior, threesuperior, onesuperior, lessthanequal ] }; // ² ³ ¹ ≤
- key <AE01> { [ ampersand, 1, bar, greaterthanequal ] }; // & 1 | ≥
- key <AE02> { [ eacute, 2, at, Eacute ] }; // é 2 @ É
- key <AE04> { [ apostrophe, 4, dead_cedilla, 0x1002014 ] }; // ' 4 ¸ — (tiret cadratin)
- key <AE05> { [ parenleft, 5, dead_caron, 0x1002013 ] }; // ( 5 ˇ – (tiret demi-cadratin)
- key <AE06> { [ section, 6, asciicircum, trademark ] }; // § 6 ^ ™
- key <AE08> { [ exclam, 8, asciitilde, exclamdown ] }; // ! 8 ~ ¡
- key <AE09> { [ ccedilla, 9, braceleft, Ccedilla ] }; // ç 9 { Ç
- key <AE10> { [ agrave, 0, braceright, Agrave ] }; // à 0 } À
- key <AE11> { [ parenright, degree, oslash, Ooblique ] }; // ) ° ø Ø
- key <AE12> { [ minus, underscore, 0x1002011, plusminus ] }; // - _ - (tiret insécable) ±
-
- // Second row
- key <AD11> { [ dead_circumflex, dead_diaeresis, bracketleft, dead_abovering ] }; // ^ ̈ [ ˚
- key <AD12> { [ dollar, asterisk, bracketright, dead_ogonek ] }; // $ * ] ̨
-
- // Third row
- key <AC09> { [ l, L, dead_stroke ] }; // l L ł Ł
- key <BKSL> { [ mu, sterling, dead_grave, dead_macron ] }; // µ £ ` ̄
-
- // Fourth row
- key <LSGT> { [ less, greater, backslash, notequal ] }; // < > \ ≠
- key <AB10> { [ equal, plus, dead_tilde, 0x1002212 ] }; // = + ~ −
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "oss_latin9" {
-
- // Restricts the be(oss) layout to latin9 symbols
-
- include "fr(oss_latin9)"
- include "be(oss_frbe)"
- include "keypad(oss_latin9)"
-
- name[Group1]="Belgium - Alternative, latin-9 only";
-
- // First row
- key <TLDE> { [ twosuperior, threesuperior, onesuperior, less ] }; // ² ³ ¹ <
- key <AE01> { [ ampersand, 1, bar, greater ] }; // & 1 | >
- key <AE04> { [ apostrophe, 4, dead_cedilla, minus ] }; // ' 4 ¸ -
- key <AE05> { [ parenleft, 5, dead_caron, minus ] }; // ( 5 ˇ -
- key <AE06> { [ section, 6, asciicircum, asciicircum ] }; // § 6 ^ ^
- key <AE12> { [ minus, underscore, minus, plusminus ] }; // - _ - ±
-
- // Second row
- key <AD12> { [ dollar, asterisk, bracketright, dead_cedilla ] }; // $ * ] ¸
-
- // Third row
- key <AC09> { [ l, L, l, L ] }; // l L l L
- key <BKSL> { [ mu, sterling, dead_grave, dead_circumflex ] }; // µ £ ` ^
-
- // Fourth row
- key <LSGT> { [ less, greater, backslash, equal ] }; // < > \ =
- key <AB10> { [ equal, plus, dead_tilde, minus ] }; // = + ~ -
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "oss_Sundeadkeys" {
-
- // Modifies the basic be(oss) layout to use the Sun dead keys
-
- include "be(oss)"
-
- // First row
- key <AE04> { [ apostrophe, 4, dead_cedilla, 0x1002014 ] }; // ' 4 ¸ — (tiret cadratin)
-
- // Second row
- key <AD11> { [ dead_circumflex, dead_diaeresis, bracketleft, dead_abovering ] }; // ^ ̈ [ ˚
-
- //Third row
- key <AC11> { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù
- key <BKSL> { [ mu, sterling, dead_grave, dead_macron ] }; // µ £ ` ̄
-
- // Fourth row
- key <AB10> { [ equal, plus, dead_tilde, 0x1002212 ] }; // = + ~ −
-};
-
-partial alphanumeric_keys
-xkb_symbols "oss_sundeadkeys" {
-
- include "be(oss_Sundeadkeys)"
-
- name[Group1]="Belgium - Alternative, Sun dead keys";
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "iso-alternate" {
- include "be(basic)"
- name[Group1]="Belgium - ISO Alternate";
-
- key <AD01> { [ a, A, ae, AE ] };
- key <AD02> { [ z, Z, guillemotleft, less ] };
- key <AC01> { [ q, Q, at, Greek_OMEGA ] };
- key <AC10> { [ m, M, mu, masculine ] };
- key <AB01> { [ w, W, lstroke, Lstroke ] };
- key <AB07> { [ comma, question, dead_cedilla, dead_doubleacute ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "sundeadkeys" {
-
- // Use the Sun dead keys
-
- include "be(basic)"
- name[Group1]="Belgium - Sun dead keys";
-
- key <AD11> { [dead_circumflex, dead_diaeresis, bracketleft, bracketleft] };
- key <AC11> { [ ugrave, percent, dead_acute, dead_acute ] };
- key <BKSL> { [ mu, sterling, dead_grave, dead_grave ] };
- key <AB07> { [ comma, question, dead_cedilla, dead_cedilla] };
- key <AB10> { [ equal, plus, dead_tilde, dead_tilde ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "Sundeadkeys" {
-
- // Use the Sun dead keys
-
- include "be(sundeadkeys)"
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- // Eliminates dead keys from the basic Belgian layout
-
- include "be(basic)"
- name[Group1]="Belgium - Eliminate dead keys";
-
- key <AE12> { [ minus, underscore, cedilla, ogonek ] };
- key <AD11> { [asciicircum, diaeresis, bracketleft, bracketleft] };
- key <AD12> { [ dollar, asterisk, bracketright, macron ] };
- key <AC10> { [ m, M, acute, doubleacute ] };
- key <AC11> { [ ugrave, percent, quoteright, quoteright ] };
- key <BKSL> { [ mu, sterling, quoteleft, quoteleft ] };
- key <AB07> { [ comma, question, cedilla, masculine ] };
- key <AB10> { [ equal, plus, asciitilde, asciitilde ] };
-};
-
-// Wang model 724 azerty Belgium keyboard
-partial alphanumeric_keys
-xkb_symbols "wang" {
-
- include "be(basic)"
- include "keypad(legacy_wang)"
- name[Group1]="Belgium - Wang model 724 azerty";
-
- // Engravings on Wang 725-3771-ae
- key <TLDE> { [ twosuperior, threesuperior, notsign, asciitilde ] };
- key <LSGT> { [ less, greater, backslash, brokenbar ] };
-};
+// based on a keyboard map from an 'xkb/symbols/be' file
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin"
+
+ name[Group1]="Belgian";
+
+ key <AE01> { [ ampersand, 1, bar, exclamdown ] };
+ key <AE02> { [ eacute, 2, at, oneeighth ] };
+ key <AE03> { [ quotedbl, 3, numbersign, sterling ] };
+ key <AE04> { [apostrophe, 4, onequarter, dollar ] };
+ key <AE05> { [ parenleft, 5, onehalf, threeeighths ] };
+ key <AE06> { [ section, 6, asciicircum, fiveeighths ] };
+ key <AE07> { [ egrave, 7, braceleft, seveneighths ] };
+ key <AE08> { [ exclam, 8, bracketleft, trademark ] };
+ key <AE09> { [ ccedilla, 9, braceleft, plusminus ] };
+ key <AE10> { [ agrave, 0, braceright, degree ] };
+ key <AE11> { [parenright, degree, backslash, questiondown ] };
+ key <AE12> { [ minus, underscore, dead_cedilla, dead_ogonek ] };
+
+ key <AD01> { [ a, A, at, Greek_OMEGA ] };
+ key <AD02> { [ z, Z, lstroke, Lstroke ] };
+ key <AD03> { [ e, E, EuroSign, cent ] };
+ key <AD09> { [ o, O, oe, OE ] }; // o O œ Œ
+ key <AD11> { [dead_circumflex, dead_diaeresis, bracketleft, dead_abovering ] };
+ key <AD12> { [ dollar, asterisk, bracketright, dead_macron ] };
+
+ key <AC01> { [ q, Q, ae, AE ] };
+ key <AC10> { [ m, M, dead_acute, dead_doubleacute ] };
+ key <AC11> { [ ugrave, percent, dead_acute, dead_caron ] };
+ key <TLDE> { [twosuperior, threesuperior, notsign, notsign ] };
+
+ key <BKSL> { [ mu, sterling, dead_grave, dead_breve ] };
+ key <AB01> { [ w, W, guillemotleft, less ] };
+ key <AB07> { [ comma, question, dead_cedilla, masculine ] };
+ key <AB08> { [ semicolon, period, horizconnector, multiply ] };
+ key <AB09> { [ colon, slash, periodcentered, division ] };
+ key <AB10> { [ equal, plus, dead_tilde, dead_abovedot] };
+ key <LSGT> { [ less, greater, backslash, backslash ] };
+
+ include "level3(ralt_switch)"
+};
+
+
+// Variant of the fr(oss) layout for Belgium
+// Copyright © 2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ ³ ≤ │ 1 ≥ │ 2 É │ 3 ˘ │ 4 — │ 5 – │ 6 ™ │ 7 È │ 8 ¡ │ 9 Ç │ 0 À │ ° Ø │ _ ± ┃ ⌫ Retour┃
+// │ ² ¹ │ & | │ é @ │ " # │ ' ¸ │ ( ˇ │ § ^ │ è ` │ ! ~ │ ç { │ à } │ ) ø │ - ‑ ┃ arrière┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃ ┃ A Æ │ Z  │ E ¢ │ R Ê │ T Þ │ Y Ÿ │ U Û │ I Î │ O Œ │ P Ô │ ¨ ˚ │ * ̨ ┃Entrée ┃
+// ┃Tab ↹ ┃ a æ │ z â │ e € │ r ê │ t þ │ y ÿ │ u û │ i î │ o œ │ p ô │ ^ [ │ $ ] ┃ ⏎ ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
+// ┃ ┃ Q Ä │ S „ │ D Ë │ F ‚ │ G ¥ │ H Ð │ J Ü │ K Ï │ L Ł │ M Ö │ % Ù │ £ ̄ ┃ ┃
+// ┃Maj ⇬ ┃ q ä │ s ß │ d ë │ f ‘ │ g ’ │ h ð │ j ü │ k ï │ l ł │ m ö │ ù ' │ µ ` ┃ ┃
+// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
+// ┃ ┃ > ≠ │ W “ │ X ” │ C ® │ V ← │ B ↑ │ N → │ ? … │ . . │ / ∕ │ + − ┃ ┃
+// ┃Shift ⇧┃ < \ │ w « │ x » │ c © │ v ⍽ │ b ↓ │ n ¬ │ , ¿ │ ; × │ : ÷ │ = ~ ┃Shift ⇧ ┃
+// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
+// ┃ ┃ ┃ ┃ ␣ Espace insécable ⍽ ┃ ┃ ┃ ┃
+// ┃Ctrl ┃Meta ┃Alt ┃ ␣ Espace ␣ ┃AltGr ⇮┃Menu ┃Ctrl ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+partial alphanumeric_keys
+xkb_symbols "oss" {
+
+ include "fr(oss)"
+ include "be(oss_frbe)"
+
+ name[Group1]="Belgian (alternative)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "oss_frbe" {
+ // First row
+ key <TLDE> { [ twosuperior, threesuperior, onesuperior, lessthanequal ] }; // ² ³ ¹ ≤
+ key <AE01> { [ ampersand, 1, bar, greaterthanequal ] }; // & 1 | ≥
+ key <AE02> { [ eacute, 2, at, Eacute ] }; // é 2 @ É
+ key <AE04> { [ apostrophe, 4, dead_cedilla, 0x1002014 ] }; // ' 4 ¸ — (tiret cadratin)
+ key <AE05> { [ parenleft, 5, dead_caron, 0x1002013 ] }; // ( 5 ˇ – (tiret demi-cadratin)
+ key <AE06> { [ section, 6, asciicircum, trademark ] }; // § 6 ^ ™
+ key <AE08> { [ exclam, 8, asciitilde, exclamdown ] }; // ! 8 ~ ¡
+ key <AE09> { [ ccedilla, 9, braceleft, Ccedilla ] }; // ç 9 { Ç
+ key <AE10> { [ agrave, 0, braceright, Agrave ] }; // à 0 } À
+ key <AE11> { [ parenright, degree, oslash, Ooblique ] }; // ) ° ø Ø
+ key <AE12> { [ minus, underscore, 0x1002011, plusminus ] }; // - _ - (tiret insécable) ±
+
+ // Second row
+ key <AD11> { [ dead_circumflex, dead_diaeresis, bracketleft, dead_abovering ] }; // ^ ̈ [ ˚
+ key <AD12> { [ dollar, asterisk, bracketright, dead_ogonek ] }; // $ * ] ̨
+
+ // Third row
+ key <AC09> { [ l, L, dead_stroke ] }; // l L ł Ł
+ key <BKSL> { [ mu, sterling, dead_grave, dead_macron ] }; // µ £ ` ̄
+
+ // Fourth row
+ key <LSGT> { [ less, greater, backslash, notequal ] }; // < > \ ≠
+ key <AB10> { [ equal, plus, dead_tilde, 0x1002212 ] }; // = + ~ −
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "oss_latin9" {
+
+ // Restricts the be(oss) layout to latin9 symbols
+
+ include "fr(oss_latin9)"
+ include "be(oss_frbe)"
+ include "keypad(oss_latin9)"
+
+ name[Group1]="Belgian (alternative, latin-9 only)";
+
+ // First row
+ key <TLDE> { [ twosuperior, threesuperior, onesuperior, less ] }; // ² ³ ¹ <
+ key <AE01> { [ ampersand, 1, bar, greater ] }; // & 1 | >
+ key <AE04> { [ apostrophe, 4, dead_cedilla, minus ] }; // ' 4 ¸ -
+ key <AE05> { [ parenleft, 5, dead_caron, minus ] }; // ( 5 ˇ -
+ key <AE06> { [ section, 6, asciicircum, asciicircum ] }; // § 6 ^ ^
+ key <AE12> { [ minus, underscore, minus, plusminus ] }; // - _ - ±
+
+ // Second row
+ key <AD12> { [ dollar, asterisk, bracketright, dead_cedilla ] }; // $ * ] ¸
+
+ // Third row
+ key <AC09> { [ l, L, l, L ] }; // l L l L
+ key <BKSL> { [ mu, sterling, dead_grave, dead_circumflex ] }; // µ £ ` ^
+
+ // Fourth row
+ key <LSGT> { [ less, greater, backslash, equal ] }; // < > \ =
+ key <AB10> { [ equal, plus, dead_tilde, minus ] }; // = + ~ -
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "oss_Sundeadkeys" {
+
+ // Modifies the basic be(oss) layout to use the Sun dead keys
+
+ include "be(oss)"
+
+ // First row
+ key <AE04> { [ apostrophe, 4, dead_cedilla, 0x1002014 ] }; // ' 4 ¸ — (tiret cadratin)
+
+ // Second row
+ key <AD11> { [ dead_circumflex, dead_diaeresis, bracketleft, dead_abovering ] }; // ^ ̈ [ ˚
+
+ //Third row
+ key <AC11> { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù
+ key <BKSL> { [ mu, sterling, dead_grave, dead_macron ] }; // µ £ ` ̄
+
+ // Fourth row
+ key <AB10> { [ equal, plus, dead_tilde, 0x1002212 ] }; // = + ~ −
+};
+
+partial alphanumeric_keys
+xkb_symbols "oss_sundeadkeys" {
+
+ include "be(oss_Sundeadkeys)"
+
+ name[Group1]="Belgian (alternative, Sun dead keys)";
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "iso-alternate" {
+ include "be(basic)"
+ name[Group1]="Belgian (ISO alternate)";
+
+ key <AD01> { [ a, A, ae, AE ] };
+ key <AD02> { [ z, Z, guillemotleft, less ] };
+ key <AC01> { [ q, Q, at, Greek_OMEGA ] };
+ key <AC10> { [ m, M, mu, masculine ] };
+ key <AB01> { [ w, W, lstroke, Lstroke ] };
+ key <AB07> { [ comma, question, dead_cedilla, dead_doubleacute ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+
+ // Use the Sun dead keys
+
+ include "be(basic)"
+ name[Group1]="Belgian (Sun dead keys)";
+
+ key <AD11> { [dead_circumflex, dead_diaeresis, bracketleft, bracketleft] };
+ key <AC11> { [ ugrave, percent, dead_acute, dead_acute ] };
+ key <BKSL> { [ mu, sterling, dead_grave, dead_grave ] };
+ key <AB07> { [ comma, question, dead_cedilla, dead_cedilla] };
+ key <AB10> { [ equal, plus, dead_tilde, dead_tilde ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+ // Use the Sun dead keys
+
+ include "be(sundeadkeys)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ // Eliminates dead keys from the basic Belgian layout
+
+ include "be(basic)"
+ name[Group1]="Belgian (eliminate dead keys)";
+
+ key <AE12> { [ minus, underscore, cedilla, ogonek ] };
+ key <AD11> { [asciicircum, diaeresis, bracketleft, bracketleft] };
+ key <AD12> { [ dollar, asterisk, bracketright, macron ] };
+ key <AC10> { [ m, M, acute, doubleacute ] };
+ key <AC11> { [ ugrave, percent, quoteright, quoteright ] };
+ key <BKSL> { [ mu, sterling, quoteleft, quoteleft ] };
+ key <AB07> { [ comma, question, cedilla, masculine ] };
+ key <AB10> { [ equal, plus, asciitilde, asciitilde ] };
+};
+
+// Wang model 724 azerty Belgium keyboard
+partial alphanumeric_keys
+xkb_symbols "wang" {
+
+ include "be(basic)"
+ include "keypad(legacy_wang)"
+ name[Group1]="Belgian (Wang model 724 azerty)";
+
+ // Engravings on Wang 725-3771-ae
+ key <TLDE> { [ twosuperior, threesuperior, notsign, asciitilde ] };
+ key <LSGT> { [ less, greater, backslash, brokenbar ] };
+};
diff --git a/xorg-server/xkeyboard-config/symbols/bg b/xorg-server/xkeyboard-config/symbols/bg
index d1e6a6356..2bef5eadb 100644
--- a/xorg-server/xkeyboard-config/symbols/bg
+++ b/xorg-server/xkeyboard-config/symbols/bg
@@ -1,361 +1,361 @@
-//////////////////////////////////////////////////////////////////////////
-// Copyright (C) 1999, 2000, 2007, 2009 by Anton Zinoviev <anton@lml.bas.bg>
-//
-// This software may be used, modified, copied, distributed, and sold,
-// both in source and binary form provided that the above copyright
-// notice and these terms are retained. The name of the author may not
-// be used to endorse or promote products derived from this software
-// without prior permission. THIS SOFTWARE IS PROVIDES "AS IS" AND
-// ANY EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED. IN NO EVENT
-// SHALL THE AUTHOR BE LIABLE FOR ANY DAMAGES ARISING IN ANY WAY OUT
-// OF THE USE OF THIS SOFTWARE.
-//
-//////////////////////////////////////////////////////////////////////////
-// Version 2.0
-
-// The following variants are defined in this file:
-
-// "bds" - the BDS keyboard layout compliant with the proposed
-// Bulgarian state standard BDS 5237:2006
-
-// "phonetic" - Bulgarian phonetic layout with traditional position of
-// the letters.
-
-// "bas_phonetic" - the phonetic keyboard layout compliant with the
-// proposed Bulgarian state standard BDS 5237:2006
-
-// "latin" - an extended variant of the QWERTY layout with symbols
-// Bulgarian users will type while the keyboard is in Latin mode.
-
-// The reasons behind the layout of the symbols in levels 3 and 4 are
-// explained in http://arxiv.org/abs/0905.0484 (in Bulgarian).
-
-// Two notes for the maintainers of xkeyboard-config:
-
-// 1. Please do not use key names such as <LatQ> for the Bulgarian
-// phonetic layouts. The placement of the symbols must stay always
-// the same regardless of which one of the alias sets in
-// xkb/keycodes/aliases is used.
-
-// 2. The layouts should not include level3(ralt_switch).
-
-//////////////////////////////////////////////////////////////////////////
-
-// Describes Bulgarian keyboard "BDS" modified according to the
-// the new state standard BDS 5237:2006 and extended with symbols in
-// levels 3 and 4.
-partial default alphanumeric_keys
-xkb_symbols "bds" {
-
- name[Group1]= "Bulgaria";
-
- key <TLDE> { [ parenleft, parenright,
- bracketleft, bracketright ] };
- key <AE01> { [ 1, exclam ] };
- key <AE02> { [ 2, question ] };
- key <AE03> { [ 3, plus,
- dagger, dagger ] };
- key <AE04> { [ 4, quotedbl ] };
- key <AE05> { [ 5, percent,
- U2329, U232A ] };
- key <AE06> { [ 6, equal,
- emdash, emdash ] };
- key <AE07> { [ 7, colon,
- ellipsis, ellipsis ] };
- key <AE08> { [ 8, slash,
- U0300, U0301 ] };
- key <AE09> { [ 9, endash ] };
- key <AE10> { [ 0, numerosign ] };
- key <AE11> { [ minus, dollar,
- U2011, EuroSign ] };
- key <AE12> { [ period, EuroSign ] };
-
-
- key <AD01> { [ comma, Cyrillic_yeru,
- rightsinglequotemark, leftsinglequotemark ] };
- key <AD02> { [ Cyrillic_u, Cyrillic_U ] };
- key <AD03> { [ Cyrillic_ie, Cyrillic_IE,
- Cyrillic_e, Cyrillic_E ] };
- key <AD04> { [ Cyrillic_i, Cyrillic_I,
- U045D, U040D ] };
- key <AD05> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD06> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
- key <AD07> { [ Cyrillic_ka, Cyrillic_KA,
- copyright, copyright ] };
- key <AD08> { [ Cyrillic_es, Cyrillic_ES,
- copyright, copyright ] };
- key <AD09> { [ Cyrillic_de, Cyrillic_DE ] };
- key <AD10> { [ Cyrillic_ze, Cyrillic_ZE ] };
- key <AD11> { [ Cyrillic_tse, Cyrillic_TSE ] };
- key <AD12> { [ semicolon, section ] };
-
-
- key <AC01> { [ Cyrillic_softsign, U045D,
- Cyrillic_yeru, Cyrillic_YERU ] };
- key <AC02> { [ Cyrillic_ya, Cyrillic_YA,
- U0463, U0462 ] };
- key <AC03> { [ Cyrillic_a, Cyrillic_A ] };
- key <AC04> { [ Cyrillic_o, Cyrillic_O ] };
- key <AC05> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <AC06> { [ Cyrillic_ghe, Cyrillic_GHE ] };
- key <AC07> { [ Cyrillic_te, Cyrillic_TE,
- trademark, trademark ] };
- key <AC08> { [ Cyrillic_en, Cyrillic_EN ] };
- key <AC09> { [ Cyrillic_ve, Cyrillic_VE ] };
- key <AC10> { [ Cyrillic_em, Cyrillic_EM ] };
- key <AC11> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <BKSL> { [ doublelowquotemark, leftdoublequotemark,
- guillemotleft, guillemotright ] };
-
-
- key <LSGT> { [ U045D, U040D ] };
- key <AB01> { [ Cyrillic_yu, Cyrillic_YU ] };
- key <AB02> { [ Cyrillic_shorti, Cyrillic_SHORTI,
- U046D, U046C ] };
- key <AB03> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN,
- U046B, U046A ] };
- key <AB04> { [ Cyrillic_e, Cyrillic_E ] };
- key <AB05> { [ Cyrillic_ef, Cyrillic_EF ] };
- key <AB06> { [ Cyrillic_ha, Cyrillic_HA ] };
- key <AB07> { [ Cyrillic_pe, Cyrillic_PE ] };
- key <AB08> { [ Cyrillic_er, Cyrillic_ER,
- registered, registered ] };
- key <AB09> { [ Cyrillic_el, Cyrillic_EL ] };
- key <AB10> { [ Cyrillic_be, Cyrillic_BE ] };
-
-
- key <SPCE> { [ space, space,
- nobreakspace, nobreakspace ] };
-
-
- key <KPDL> { type[Group1] = "KEYPAD",
- [ KP_Delete, KP_Separator ] };
-};
-
-// This is improved variant of the traditional Bulgarian phonetic
-// keyboard. Some unnecessary symbols in levels 1 and 2 are replaced
-// by more useful (the same way as in "bas_phonetic") and additional
-// symbols in levels 3 and 4 are added.
-partial alphanumeric_keys
-xkb_symbols "phonetic" {
- name[Group1]= "Bulgaria - Traditional phonetic";
-
- key <TLDE> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <AE01> { [ 1, exclam ] };
- key <AE02> { [ 2, at ] };
- key <AE03> { [ 3, numerosign ] };
- key <AE04> { [ 4, dollar,
- EuroSign, EuroSign ] };
- key <AE05> { [ 5, percent ] };
- key <AE06> { [ 6, EuroSign ] };
- key <AE07> { [ 7, section ] };
- key <AE08> { [ 8, asterisk ] };
- key <AE09> { [ 9, parenleft,
- bracketleft, U2329 ] };
- key <AE10> { [ 0, parenright,
- bracketright, U232A ] };
- key <AE11> { [ minus, endash,
- U2011, U2011 ] };
- key <AE12> { [ equal, plus,
- emdash, dagger ] };
-
- key <AD01> { [ Cyrillic_ya, Cyrillic_YA,
- U0463, U0462 ] };
- key <AD02> { [ Cyrillic_ve, Cyrillic_VE ] };
- key <AD03> { [ Cyrillic_ie, Cyrillic_IE,
- Cyrillic_e, Cyrillic_E ] };
- key <AD04> { [ Cyrillic_er, Cyrillic_ER,
- registered, registered ] };
- key <AD05> { [ Cyrillic_te, Cyrillic_TE,
- trademark, trademark ] };
- key <AD06> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN,
- U046B, U046A ] };
- key <AD07> { [ Cyrillic_u, Cyrillic_U ] };
- key <AD08> { [ Cyrillic_i, Cyrillic_I,
- U045D, U040D ] };
- key <AD09> { [ Cyrillic_o, Cyrillic_O ] };
- key <AD10> { [ Cyrillic_pe, Cyrillic_PE ] };
- key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
-
-
- key <AC01> { [ Cyrillic_a, Cyrillic_A ] };
- key <AC02> { [ Cyrillic_es, Cyrillic_ES,
- copyright, copyright ] };
- key <AC03> { [ Cyrillic_de, Cyrillic_DE ] };
- key <AC04> { [ Cyrillic_ef, Cyrillic_EF ] };
- key <AC05> { [ Cyrillic_ghe, Cyrillic_GHE ] };
- key <AC06> { [ Cyrillic_ha, Cyrillic_HA ] };
- key <AC07> { [ Cyrillic_shorti, Cyrillic_SHORTI,
- U046D, U046C ] };
- key <AC08> { [ Cyrillic_ka, Cyrillic_KA ] };
- key <AC09> { [ Cyrillic_el, Cyrillic_EL ] };
- key <AC10> { [ semicolon, colon,
- ellipsis, ellipsis ] };
- key <AC11> { [ apostrophe, quotedbl,
- rightsinglequotemark, leftsinglequotemark ] };
- key <BKSL> { [ Cyrillic_yu, Cyrillic_YU ] };
-
-
- key <LSGT> { [ U045D, U040D ] };
- key <AB01> { [ Cyrillic_ze, Cyrillic_ZE ] };
- key <AB02> { [ Cyrillic_softsign, U045D,
- Cyrillic_yeru, Cyrillic_YERU ] };
- key <AB03> { [ Cyrillic_tse, Cyrillic_TSE,
- copyright, copyright ] };
- key <AB04> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <AB05> { [ Cyrillic_be, Cyrillic_BE ] };
- key <AB06> { [ Cyrillic_en, Cyrillic_EN ] };
- key <AB07> { [ Cyrillic_em, Cyrillic_EM ] };
- key <AB08> { [ comma, doublelowquotemark,
- guillemotleft, guillemotleft ] };
- key <AB09> { [ period, leftdoublequotemark,
- guillemotright, guillemotright ] };
- key <AB10> { [ slash, question,
- U0300, U0301 ] };
-
-
- key <SPCE> { [ space, space,
- nobreakspace, nobreakspace ] };
-
-
- key <KPDL> { type[Group1] = "KEYPAD",
- [ KP_Delete, KP_Separator ] };
-
-};
-
-// This is the Bulgarian phonetic keyboard acording to the proposed
-// state standard BDS 5237:2006 with additional symbols in
-// levels 3 and 4.
-partial alphanumeric_keys
-xkb_symbols "bas_phonetic" {
- include "bg(phonetic)"
- name[Group1]= "Bulgaria - New phonetic";
-
- key <TLDE> { [ Cyrillic_yu, Cyrillic_YU ] };
- key <AD01> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <AD02> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD11> { [ Cyrillic_ya, Cyrillic_YA,
- U0463, U0462 ] };
- key <BKSL> { [ Cyrillic_softsign, U045D,
- Cyrillic_yeru, Cyrillic_YERU ] };
- key <AB02> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <AB04> { [ Cyrillic_ve, Cyrillic_VE ] };
-};
-
-
-// This is extended variant of the standard Latin QWERTY layout with
-// additional symbols in levels 3 and 4.
-partial hidden alphanumeric_keys
-xkb_symbols "latin" {
-
- key <TLDE> { [ grave, asciitilde,
- U2248, U2245 ] };
- key <AE01> { [ 1, exclam,
- notsign, notsign ] };
- key <AE02> { [ 2, at,
- twosuperior, enfilledcircbullet ] };
- key <AE03> { [ 3, numbersign,
- threesuperior, notequal ] };
- key <AE04> { [ 4, dollar,
- EuroSign, sterling ] };
- key <AE05> { [ 5, percent,
- U2030, U2030 ] };
- key <AE06> { [ 6, asciicircum,
- logicaland, logicalor ] };
- key <AE07> { [ 7, ampersand,
- section, section ] };
- key <AE08> { [ 8, asterisk,
- infinity, multiply ] };
- key <AE09> { [ 9, parenleft,
- U2202, nabla ] };
- key <AE10> { [ 0, parenright,
- U2300, U2300 ] };
- key <AE11> { [ minus, underscore,
- U2011, endash ] };
- key <AE12> { [ equal, plus,
- emdash, plusminus ] };
-
-
- key <AD01> { [ q, Q,
- Greek_THETA, Greek_theta ] };
- key <AD02> { [ w, W,
- Greek_OMEGA, Greek_omega ] };
- key <AD03> { [ e, E,
- U2203, Greek_epsilon ] };
- key <AD04> { [ r, R,
- registered, Greek_rho ] };
- key <AD05> { [ t, T,
- trademark, Greek_tau ] };
- key <AD06> { [ y, Y,
- yen, Greek_upsilon ] };
- key <AD07> { [ u, U,
- intersection, union ] };
- key <AD08> { [ i, I,
- integral, Greek_iota ] };
- key <AD09> { [ o, O,
- degree, U222E ] };
- key <AD10> { [ p, P,
- Greek_PI, Greek_pi ] };
- key <AD11> { [ bracketleft, braceleft,
- U2286, includedin ] };
- key <AD12> { [ bracketright, braceright,
- U2208, U2209 ] };
-
-
- key <AC01> { [ a, A,
- U2200, Greek_alpha ] };
- key <AC02> { [ s, S,
- Greek_SIGMA, Greek_sigma ] };
- key <AC03> { [ d, D,
- Greek_DELTA, Greek_delta ] };
- key <AC04> { [ f, F,
- Greek_PHI, Greek_phi ] };
- key <AC05> { [ g, G,
- Greek_GAMMA, Greek_gamma ] };
- key <AC06> { [ h, H,
- U2225, Greek_eta ] };
- key <AC07> { [ j, J ] };
- key <AC08> { [ k, K,
- U03F0, Greek_kappa ] };
- key <AC09> { [ l, L,
- Greek_LAMBDA, Greek_lambda ] };
- key <AC10> { [ semicolon, colon,
- division, division ] };
- key <AC11> { [ apostrophe, quotedbl,
- leftdoublequotemark, rightdoublequotemark ] };
- key <BKSL> { [ backslash, bar,
- identical, downtack ] };
-
-
- key <LSGT> { [ less, greater,
- U2266, U2267 ] };
- key <AB01> { [ z, Z,
- U2220, Greek_zeta ] };
- key <AB02> { [ x, X,
- Greek_XI, Greek_xi ] };
- key <AB03> { [ c, C,
- copyright, Greek_chi ] };
- key <AB04> { [ v, V,
- Greek_PSI, Greek_psi ] };
- key <AB05> { [ b, B,
- U03D1, Greek_beta ] };
- key <AB06> { [ n, N,
- U207F, Greek_nu ] };
- key <AB07> { [ m, M,
- Greek_mu, Greek_mu ] };
- key <AB08> { [ comma, less,
- U2266, U21D4 ] };
- key <AB09> { [ period, greater,
- U2267, U21D2 ] };
- key <AB10> { [ slash, question,
- leftsinglequotemark, rightsinglequotemark ] };
-
-
- key <SPCE> { [ space, space,
- nobreakspace, nobreakspace ] };
-
-
- key <KPDL> { type[Group1] = "KEYPAD",
- [ KP_Delete, KP_Decimal ] };
-};
+//////////////////////////////////////////////////////////////////////////
+// Copyright (C) 1999, 2000, 2007, 2009 by Anton Zinoviev <anton@lml.bas.bg>
+//
+// This software may be used, modified, copied, distributed, and sold,
+// both in source and binary form provided that the above copyright
+// notice and these terms are retained. The name of the author may not
+// be used to endorse or promote products derived from this software
+// without prior permission. THIS SOFTWARE IS PROVIDES "AS IS" AND
+// ANY EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED. IN NO EVENT
+// SHALL THE AUTHOR BE LIABLE FOR ANY DAMAGES ARISING IN ANY WAY OUT
+// OF THE USE OF THIS SOFTWARE.
+//
+//////////////////////////////////////////////////////////////////////////
+// Version 2.0
+
+// The following variants are defined in this file:
+
+// "bds" - the BDS keyboard layout compliant with the proposed
+// Bulgarian state standard BDS 5237:2006
+
+// "phonetic" - Bulgarian phonetic layout with traditional position of
+// the letters.
+
+// "bas_phonetic" - the phonetic keyboard layout compliant with the
+// proposed Bulgarian state standard BDS 5237:2006
+
+// "latin" - an extended variant of the QWERTY layout with symbols
+// Bulgarian users will type while the keyboard is in Latin mode.
+
+// The reasons behind the layout of the symbols in levels 3 and 4 are
+// explained in http://arxiv.org/abs/0905.0484 (in Bulgarian).
+
+// Two notes for the maintainers of xkeyboard-config:
+
+// 1. Please do not use key names such as <LatQ> for the Bulgarian
+// phonetic layouts. The placement of the symbols must stay always
+// the same regardless of which one of the alias sets in
+// xkb/keycodes/aliases is used.
+
+// 2. The layouts should not include level3(ralt_switch).
+
+//////////////////////////////////////////////////////////////////////////
+
+// Describes Bulgarian keyboard "BDS" modified according to the
+// the new state standard BDS 5237:2006 and extended with symbols in
+// levels 3 and 4.
+partial default alphanumeric_keys
+xkb_symbols "bds" {
+
+ name[Group1]= "Bulgarian";
+
+ key <TLDE> { [ parenleft, parenright,
+ bracketleft, bracketright ] };
+ key <AE01> { [ 1, exclam ] };
+ key <AE02> { [ 2, question ] };
+ key <AE03> { [ 3, plus,
+ dagger, dagger ] };
+ key <AE04> { [ 4, quotedbl ] };
+ key <AE05> { [ 5, percent,
+ U2329, U232A ] };
+ key <AE06> { [ 6, equal,
+ emdash, emdash ] };
+ key <AE07> { [ 7, colon,
+ ellipsis, ellipsis ] };
+ key <AE08> { [ 8, slash,
+ U0300, U0301 ] };
+ key <AE09> { [ 9, endash ] };
+ key <AE10> { [ 0, numerosign ] };
+ key <AE11> { [ minus, dollar,
+ U2011, EuroSign ] };
+ key <AE12> { [ period, EuroSign ] };
+
+
+ key <AD01> { [ comma, Cyrillic_yeru,
+ rightsinglequotemark, leftsinglequotemark ] };
+ key <AD02> { [ Cyrillic_u, Cyrillic_U ] };
+ key <AD03> { [ Cyrillic_ie, Cyrillic_IE,
+ Cyrillic_e, Cyrillic_E ] };
+ key <AD04> { [ Cyrillic_i, Cyrillic_I,
+ U045D, U040D ] };
+ key <AD05> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <AD06> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
+ key <AD07> { [ Cyrillic_ka, Cyrillic_KA,
+ copyright, copyright ] };
+ key <AD08> { [ Cyrillic_es, Cyrillic_ES,
+ copyright, copyright ] };
+ key <AD09> { [ Cyrillic_de, Cyrillic_DE ] };
+ key <AD10> { [ Cyrillic_ze, Cyrillic_ZE ] };
+ key <AD11> { [ Cyrillic_tse, Cyrillic_TSE ] };
+ key <AD12> { [ semicolon, section ] };
+
+
+ key <AC01> { [ Cyrillic_softsign, U045D,
+ Cyrillic_yeru, Cyrillic_YERU ] };
+ key <AC02> { [ Cyrillic_ya, Cyrillic_YA,
+ U0463, U0462 ] };
+ key <AC03> { [ Cyrillic_a, Cyrillic_A ] };
+ key <AC04> { [ Cyrillic_o, Cyrillic_O ] };
+ key <AC05> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <AC06> { [ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <AC07> { [ Cyrillic_te, Cyrillic_TE,
+ trademark, trademark ] };
+ key <AC08> { [ Cyrillic_en, Cyrillic_EN ] };
+ key <AC09> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <AC10> { [ Cyrillic_em, Cyrillic_EM ] };
+ key <AC11> { [ Cyrillic_che, Cyrillic_CHE ] };
+ key <BKSL> { [ doublelowquotemark, leftdoublequotemark,
+ guillemotleft, guillemotright ] };
+
+
+ key <LSGT> { [ U045D, U040D ] };
+ key <AB01> { [ Cyrillic_yu, Cyrillic_YU ] };
+ key <AB02> { [ Cyrillic_shorti, Cyrillic_SHORTI,
+ U046D, U046C ] };
+ key <AB03> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN,
+ U046B, U046A ] };
+ key <AB04> { [ Cyrillic_e, Cyrillic_E ] };
+ key <AB05> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <AB06> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <AB07> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <AB08> { [ Cyrillic_er, Cyrillic_ER,
+ registered, registered ] };
+ key <AB09> { [ Cyrillic_el, Cyrillic_EL ] };
+ key <AB10> { [ Cyrillic_be, Cyrillic_BE ] };
+
+
+ key <SPCE> { [ space, space,
+ nobreakspace, nobreakspace ] };
+
+
+ key <KPDL> { type[Group1] = "KEYPAD",
+ [ KP_Delete, KP_Separator ] };
+};
+
+// This is improved variant of the traditional Bulgarian phonetic
+// keyboard. Some unnecessary symbols in levels 1 and 2 are replaced
+// by more useful (the same way as in "bas_phonetic") and additional
+// symbols in levels 3 and 4 are added.
+partial alphanumeric_keys
+xkb_symbols "phonetic" {
+ name[Group1]= "Bulgarian (traditional phonetic)";
+
+ key <TLDE> { [ Cyrillic_che, Cyrillic_CHE ] };
+ key <AE01> { [ 1, exclam ] };
+ key <AE02> { [ 2, at ] };
+ key <AE03> { [ 3, numerosign ] };
+ key <AE04> { [ 4, dollar,
+ EuroSign, EuroSign ] };
+ key <AE05> { [ 5, percent ] };
+ key <AE06> { [ 6, EuroSign ] };
+ key <AE07> { [ 7, section ] };
+ key <AE08> { [ 8, asterisk ] };
+ key <AE09> { [ 9, parenleft,
+ bracketleft, U2329 ] };
+ key <AE10> { [ 0, parenright,
+ bracketright, U232A ] };
+ key <AE11> { [ minus, endash,
+ U2011, U2011 ] };
+ key <AE12> { [ equal, plus,
+ emdash, dagger ] };
+
+ key <AD01> { [ Cyrillic_ya, Cyrillic_YA,
+ U0463, U0462 ] };
+ key <AD02> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <AD03> { [ Cyrillic_ie, Cyrillic_IE,
+ Cyrillic_e, Cyrillic_E ] };
+ key <AD04> { [ Cyrillic_er, Cyrillic_ER,
+ registered, registered ] };
+ key <AD05> { [ Cyrillic_te, Cyrillic_TE,
+ trademark, trademark ] };
+ key <AD06> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN,
+ U046B, U046A ] };
+ key <AD07> { [ Cyrillic_u, Cyrillic_U ] };
+ key <AD08> { [ Cyrillic_i, Cyrillic_I,
+ U045D, U040D ] };
+ key <AD09> { [ Cyrillic_o, Cyrillic_O ] };
+ key <AD10> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
+
+
+ key <AC01> { [ Cyrillic_a, Cyrillic_A ] };
+ key <AC02> { [ Cyrillic_es, Cyrillic_ES,
+ copyright, copyright ] };
+ key <AC03> { [ Cyrillic_de, Cyrillic_DE ] };
+ key <AC04> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <AC05> { [ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <AC06> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <AC07> { [ Cyrillic_shorti, Cyrillic_SHORTI,
+ U046D, U046C ] };
+ key <AC08> { [ Cyrillic_ka, Cyrillic_KA ] };
+ key <AC09> { [ Cyrillic_el, Cyrillic_EL ] };
+ key <AC10> { [ semicolon, colon,
+ ellipsis, ellipsis ] };
+ key <AC11> { [ apostrophe, quotedbl,
+ rightsinglequotemark, leftsinglequotemark ] };
+ key <BKSL> { [ Cyrillic_yu, Cyrillic_YU ] };
+
+
+ key <LSGT> { [ U045D, U040D ] };
+ key <AB01> { [ Cyrillic_ze, Cyrillic_ZE ] };
+ key <AB02> { [ Cyrillic_softsign, U045D,
+ Cyrillic_yeru, Cyrillic_YERU ] };
+ key <AB03> { [ Cyrillic_tse, Cyrillic_TSE,
+ copyright, copyright ] };
+ key <AB04> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <AB05> { [ Cyrillic_be, Cyrillic_BE ] };
+ key <AB06> { [ Cyrillic_en, Cyrillic_EN ] };
+ key <AB07> { [ Cyrillic_em, Cyrillic_EM ] };
+ key <AB08> { [ comma, doublelowquotemark,
+ guillemotleft, guillemotleft ] };
+ key <AB09> { [ period, leftdoublequotemark,
+ guillemotright, guillemotright ] };
+ key <AB10> { [ slash, question,
+ U0300, U0301 ] };
+
+
+ key <SPCE> { [ space, space,
+ nobreakspace, nobreakspace ] };
+
+
+ key <KPDL> { type[Group1] = "KEYPAD",
+ [ KP_Delete, KP_Separator ] };
+
+};
+
+// This is the Bulgarian phonetic keyboard acording to the proposed
+// state standard BDS 5237:2006 with additional symbols in
+// levels 3 and 4.
+partial alphanumeric_keys
+xkb_symbols "bas_phonetic" {
+ include "bg(phonetic)"
+ name[Group1]= "Bulgarian (new phonetic)";
+
+ key <TLDE> { [ Cyrillic_yu, Cyrillic_YU ] };
+ key <AD01> { [ Cyrillic_che, Cyrillic_CHE ] };
+ key <AD02> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <AD11> { [ Cyrillic_ya, Cyrillic_YA,
+ U0463, U0462 ] };
+ key <BKSL> { [ Cyrillic_softsign, U045D,
+ Cyrillic_yeru, Cyrillic_YERU ] };
+ key <AB02> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <AB04> { [ Cyrillic_ve, Cyrillic_VE ] };
+};
+
+
+// This is extended variant of the standard Latin QWERTY layout with
+// additional symbols in levels 3 and 4.
+partial hidden alphanumeric_keys
+xkb_symbols "latin" {
+
+ key <TLDE> { [ grave, asciitilde,
+ U2248, U2245 ] };
+ key <AE01> { [ 1, exclam,
+ notsign, notsign ] };
+ key <AE02> { [ 2, at,
+ twosuperior, enfilledcircbullet ] };
+ key <AE03> { [ 3, numbersign,
+ threesuperior, notequal ] };
+ key <AE04> { [ 4, dollar,
+ EuroSign, sterling ] };
+ key <AE05> { [ 5, percent,
+ U2030, U2030 ] };
+ key <AE06> { [ 6, asciicircum,
+ logicaland, logicalor ] };
+ key <AE07> { [ 7, ampersand,
+ section, section ] };
+ key <AE08> { [ 8, asterisk,
+ infinity, multiply ] };
+ key <AE09> { [ 9, parenleft,
+ U2202, nabla ] };
+ key <AE10> { [ 0, parenright,
+ U2300, U2300 ] };
+ key <AE11> { [ minus, underscore,
+ U2011, endash ] };
+ key <AE12> { [ equal, plus,
+ emdash, plusminus ] };
+
+
+ key <AD01> { [ q, Q,
+ Greek_THETA, Greek_theta ] };
+ key <AD02> { [ w, W,
+ Greek_OMEGA, Greek_omega ] };
+ key <AD03> { [ e, E,
+ U2203, Greek_epsilon ] };
+ key <AD04> { [ r, R,
+ registered, Greek_rho ] };
+ key <AD05> { [ t, T,
+ trademark, Greek_tau ] };
+ key <AD06> { [ y, Y,
+ yen, Greek_upsilon ] };
+ key <AD07> { [ u, U,
+ intersection, union ] };
+ key <AD08> { [ i, I,
+ integral, Greek_iota ] };
+ key <AD09> { [ o, O,
+ degree, U222E ] };
+ key <AD10> { [ p, P,
+ Greek_PI, Greek_pi ] };
+ key <AD11> { [ bracketleft, braceleft,
+ U2286, includedin ] };
+ key <AD12> { [ bracketright, braceright,
+ U2208, U2209 ] };
+
+
+ key <AC01> { [ a, A,
+ U2200, Greek_alpha ] };
+ key <AC02> { [ s, S,
+ Greek_SIGMA, Greek_sigma ] };
+ key <AC03> { [ d, D,
+ Greek_DELTA, Greek_delta ] };
+ key <AC04> { [ f, F,
+ Greek_PHI, Greek_phi ] };
+ key <AC05> { [ g, G,
+ Greek_GAMMA, Greek_gamma ] };
+ key <AC06> { [ h, H,
+ U2225, Greek_eta ] };
+ key <AC07> { [ j, J ] };
+ key <AC08> { [ k, K,
+ U03F0, Greek_kappa ] };
+ key <AC09> { [ l, L,
+ Greek_LAMBDA, Greek_lambda ] };
+ key <AC10> { [ semicolon, colon,
+ division, division ] };
+ key <AC11> { [ apostrophe, quotedbl,
+ leftdoublequotemark, rightdoublequotemark ] };
+ key <BKSL> { [ backslash, bar,
+ identical, downtack ] };
+
+
+ key <LSGT> { [ less, greater,
+ U2266, U2267 ] };
+ key <AB01> { [ z, Z,
+ U2220, Greek_zeta ] };
+ key <AB02> { [ x, X,
+ Greek_XI, Greek_xi ] };
+ key <AB03> { [ c, C,
+ copyright, Greek_chi ] };
+ key <AB04> { [ v, V,
+ Greek_PSI, Greek_psi ] };
+ key <AB05> { [ b, B,
+ U03D1, Greek_beta ] };
+ key <AB06> { [ n, N,
+ U207F, Greek_nu ] };
+ key <AB07> { [ m, M,
+ Greek_mu, Greek_mu ] };
+ key <AB08> { [ comma, less,
+ U2266, U21D4 ] };
+ key <AB09> { [ period, greater,
+ U2267, U21D2 ] };
+ key <AB10> { [ slash, question,
+ leftsinglequotemark, rightsinglequotemark ] };
+
+
+ key <SPCE> { [ space, space,
+ nobreakspace, nobreakspace ] };
+
+
+ key <KPDL> { type[Group1] = "KEYPAD",
+ [ KP_Delete, KP_Decimal ] };
+};
diff --git a/xorg-server/xkeyboard-config/symbols/br b/xorg-server/xkeyboard-config/symbols/br
index be0cd7cc2..8ead57c26 100644
--- a/xorg-server/xkeyboard-config/symbols/br
+++ b/xorg-server/xkeyboard-config/symbols/br
@@ -1,317 +1,317 @@
-//
-// based on
-// "a very simple Brasilian ABNT2 keyboard
-// by Ricardo Y. Igarashi (iga@that.com.br)
-// Adds suport for dead-keys in I18N applications
-// by Conectiva (http://www.conectiva.com.br)"
-//
-
-default
-xkb_symbols "abnt2" {
-
- include "latin"
- name[Group1]="Brazil";
-
- key <AE02> { [ 2, at, twosuperior, onehalf ] };
- key <AE03> { [ 3, numbersign, threesuperior, threequarters ] };
- key <AE04> { [ 4, dollar, sterling, onequarter ] };
- key <AE05> { [ 5, percent, cent, threeeighths ] };
- key <AE06> { [ 6, dead_diaeresis, notsign, diaeresis ] };
- key <AE12> { [ equal, plus, section, dead_ogonek ] };
-
- key <AD01> { [ q, Q, slash, slash ] };
- key <AD02> { [ w, W, question, question ] };
- key <AD03> { [ e, E, EuroSign, EuroSign ] };
- key <AD04> { [ r, R, registered, registered ] };
- key <AD11> { [dead_acute, dead_grave, acute, grave ] };
- key <AD12> { [bracketleft, braceleft, ordfeminine, dead_macron ] };
-
- key <AC10> { [ ccedilla, Ccedilla, dead_acute, dead_doubleacute] };
- key <AC11> { [dead_tilde, dead_circumflex, asciitilde, asciicircum ] };
- key <BKSL> { [bracketright, braceright, masculine, masculine ] };
-
- key <TLDE> { [apostrophe, quotedbl, notsign, notsign ] };
-
- key <LSGT> { [ backslash, bar, masculine, dead_breve ] };
- key <AB03> { [ c, C, copyright, copyright ] };
- key <AB07> { [ m, M, mu, mu ] };
- key <AB10> { [ semicolon, colon, dead_belowdot, dead_abovedot ] };
-
-// ABNT-2 keyboard has this special key
-
- key <AB11> { [ slash, question, degree, questiondown ] };
-
- modifier_map Mod3 { Scroll_Lock };
-
- include "kpdl(comma)"
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- include "br(abnt2)" // for consistent naming
- name[Group1]="Brazil - Eliminate dead keys";
-
- key <AE06> { [ 6, diaeresis, notsign, notsign ] };
- key <AD11> { [apostrophe, grave ] };
- key <AC10> { [ ccedilla, Ccedilla, acute, doubleacute ] };
- key <AC11> { [asciitilde, asciicircum ] };
- key <AB10> { [ semicolon, colon, dead_belowdot, abovedot ] };
-};
-
-
-// ABNT2 Keyboard to IBM/Lenovo Thinkpads
-// by Piter PUNK <piterpk@terra.com.br>
-//
-partial alphanumeric_keys
-xkb_symbols "thinkpad" {
-
- include "br(abnt2)" // for consistent naming
- name[Group1]="Brazil";
-
- key <RCTL> { [ slash, question, degree, questiondown ] };
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "olpc" {
-
- include "us(basic)"
- name[Group1]="Brazil";
-
- key <TLDE> { [ apostrophe, quotedbl ] };
-
- key <AE01> { [ 1, exclam, onesuperior ] };
- key <AE02> { [ 2, at, twosuperior ] };
- key <AE03> { [ 3, numbersign, threesuperior ] };
- key <AE04> { [ 4, dollar, sterling ] };
- key <AE05> { [ 5, percent, cent ] };
- key <AE06> { [ 6, dead_diaeresis, notsign ] };
- key <AE12> { [ equal, plus, section ] };
-
- key <AD03> { [ e, E, EuroSign ] };
- key <AD11> { [ dead_acute, dead_grave, acute, grave ] };
- key <AD12> { [ bracketleft, braceleft, 0x10000AA ] };
-
- key <AC10> { [ ccedilla, Ccedilla ] };
- key <AC11> { [ dead_tilde, dead_circumflex ] };
- key <BKSL> { [ bracketright, braceright, 0x10000BA ] };
-
- key <AB01> { [ z, Z, bar ] };
- key <AB03> { [ c, C, 0x10020A2 ] };
- key <AB09> { [ period, greater, backslash ] };
- key <AB10> { [ semicolon, colon ] };
-
- key <I219> { [ slash, question, degree, ISO_Next_Group ] };
-
- include "level3(ralt_switch)"
-};
-
-
-//
-// Brazilian Dvorak keyboard 2005-04-18
-// "Teclado Simplificado Brasileiro" ou "Dvorak Brasileiro"
-//
-// Heitor Moraes heitor.moraes@gmail.com
-// Luiz Portella lfpor@lujz.org
-// Nando Florestan nando2003@mandic.com.br
-// Ari Caldeira ari@tecladobrasileiro.com.br
-//
-partial alphanumeric_keys
-xkb_symbols "dvorak" {
-
- name[Group1]="Brazil - Dvorak";
-
-// Numeric row
- key <TLDE> { [ apostrophe, quotedbl, dead_caron, dead_doubleacute ] };
- key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
- key <AE02> { [ 2, at, twosuperior, onehalf ] };
- key <AE03> { [ 3, numbersign, threesuperior, threequarters ] };
- key <AE04> { [ 4, dollar, sterling, onequarter ] };
- key <AE05> { [ 5, percent, cent, 0x01002030 ] };
- key <AE06> { [ 6, dead_diaeresis, notsign, diaeresis ] };
- key <AE07> { [ 7, ampersand, dead_belowdot, dead_abovedot ] };
- key <AE08> { [ 8, asterisk, dead_ogonek, dead_horn ] };
- key <AE09> { [ 9, parenleft, dead_cedilla, dead_hook ] };
- key <AE10> { [ 0, parenright, dead_macron, dead_breve ] };
- key <AE11> { [ bracketleft, braceleft, ordfeminine, 0x01000326 ] };
- key <AE12> { [ bracketright, braceright, masculine, dead_abovering ] };
-
-
-// Upper row
- key <AD01> { [ slash, question, degree, questiondown ] };
- key <AD02> { [ comma, less, 0x01000329, 0x01000313 ] };
- key <AD03> { [ period, greater, 0x01002022, periodcentered ] };
- key <AD04> { [ p, P, thorn, THORN ] };
- key <AD05> { [ y, Y, yen, yen ] };
- key <AD06> { [ f, F, leftdoublequotemark, leftsinglequotemark ] };
- key <AD07> { [ g, G, rightdoublequotemark, rightsinglequotemark ] };
- key <AD08> { [ c, C, uparrow, copyright ] };
- key <AD09> { [ r, R, registered, registered ] };
- key <AD10> { [ l, L, lstroke, Lstroke ] };
- key <AD11> { [ dead_acute, dead_grave, acute, grave ] };
- key <AD12> { [ equal, plus, section, plusminus ] };
-
-// Central row
- key <AC01> { [ a, A, ae, AE ] };
- key <AC02> { [ o, O, oe, OE ] };
- key <AC03> { [ e, E, EuroSign, EuroSign ] };
- key <AC04> { [ u, U, oslash, Ooblique ] };
- key <AC05> { [ i, I, idotless, Iabovedot ] };
- key <AC06> { [ d, D, eth, ETH ] };
- key <AC07> { [ h, H, leftarrow, paragraph ] };
- key <AC08> { [ t, T, rightarrow, trademark ] };
- key <AC09> { [ n, N, eng, ENG ] };
- key <AC10> { [ s, S, ssharp, ssharp ] };
- key <AC11> { [ dead_tilde, dead_circumflex, asciitilde, asciicircum ] };
- key <BKSL> { [ minus, underscore, 0x01002015, 0x01000336 ] };
-
-// Lower row
- key <LSGT> { [ ccedilla, Ccedilla, backslash, bar ] };
- key <AB01> { [ semicolon, colon, 0x01000331, 0x0100032D ] };
- key <AB02> { [ q, Q, 0x01000259, 0x0100018F ] };
- key <AB03> { [ j, J, 0x01000292, 0x010001B7 ] };
- key <AB04> { [ k, K, guillemotleft, 0x01002039 ] };
- key <AB05> { [ x, X, multiply, division ] };
- key <AB06> { [ b, B, guillemotright, 0x0100203A ] };
- key <AB07> { [ m, M, downarrow, mu ] };
- key <AB08> { [ w, W, ubreve, Ubreve ] };
- key <AB09> { [ v, V, doublelowquotemark, singlelowquotemark ] };
- key <AB10> { [ z, Z, 0x0100201F, 0x0100201B ] };
- key <AB11> { [ backslash, bar, currency, brokenbar ] };
-
- key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
-
-// Configures the "," for the numeric keypad
- include "kpdl(comma)"
-
-// Configures the use of the AltGr key
- include "level3(ralt_switch)"
-
-};
-
-
-//
-// Teclado Nativo Brasileiro 2005-07-19
-// Brazilian Nativo Keyboard
-// This is a Dvorak-based layout, designed for the Portuguese language
-//
-// Ari Caldeira ari@tecladobrasileiro.com.br
-//
-partial alphanumeric_keys
-xkb_symbols "nativo" {
-
- name[Group1]="Brazil - Nativo";
-
-// Numeric row
- key <TLDE> { [ equal, plus, section, plusminus ] };
- key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
- key <AE02> { [ 2, at, twosuperior, onehalf ] };
- key <AE03> { [ 3, numbersign, threesuperior, threequarters ] };
- key <AE04> { [ 4, dollar, sterling, onequarter ] };
- key <AE05> { [ 5, percent, cent, 0x01002030 ] };
- key <AE06> { [ 6, dead_diaeresis, notsign, diaeresis ] };
- key <AE07> { [ 7, ampersand, dead_belowdot, dead_abovedot ] };
- key <AE08> { [ 8, asterisk, dead_ogonek, dead_horn ] };
- key <AE09> { [ 9, parenleft, dead_cedilla, dead_hook ] };
- key <AE10> { [ 0, parenright, dead_macron, dead_breve ] };
- key <AE11> { [ bracketleft, braceleft, ordfeminine, 0x01000326 ] };
- key <AE12> { [ bracketright, braceright, masculine, dead_abovering ] };
-
-// Upper row
- key <AD01> { [ slash, question, degree, questiondown ] };
- key <AD02> { [ comma, less, 0x01000329, 0x01000313 ] };
- key <AD03> { [ period, greater, 0x01002022, periodcentered ] };
- key <AD04> { [ h, H, paragraph, paragraph ] };
- key <AD05> { [ x, X, multiply, division ] };
- key <AD06> { [ w, W, ubreve, Ubreve ] };
- key <AD07> { [ l, L, lstroke, Lstroke ] };
- key <AD08> { [ t, T, trademark, trademark ] };
- key <AD09> { [ c, C, copyright, copyright ] };
- key <AD10> { [ p, P, thorn, THORN ] };
- key <AD11> { [ dead_tilde, dead_circumflex, asciitilde, asciicircum ] };
- key <AD12> { [ minus, underscore, 0x01002015, 0x01000336 ] };
-
-// Central row
- key <AC01> { [ i, I, idotless, Iabovedot ] };
- key <AC02> { [ e, E, EuroSign, EuroSign ] };
- key <AC03> { [ a, A, ae, AE ] };
- key <AC04> { [ o, O, oe, OE ] };
- key <AC05> { [ u, U, oslash, Ooblique ] };
- key <AC06> { [ m, M, mu, mu ] };
- key <AC07> { [ d, D, eth, ETH ] };
- key <AC08> { [ s, S, ssharp, ssharp ] };
- key <AC09> { [ r, R, registered, registered ] };
- key <AC10> { [ n, N, eng, ENG ] };
- key <AC11> { [ dead_acute, dead_grave, acute, grave ] };
- key <BKSL> { [ apostrophe, quotedbl, dead_caron, dead_doubleacute ] };
-
-// Lower row
- key <LSGT> { [ semicolon, colon, 0x01000331, 0x0100032D ] };
- key <AB01> { [ y, Y, yen, yen ] };
- key <AB02> { [ ccedilla, Ccedilla, backslash, bar ] };
- key <AB03> { [ j, J, 0x01000292, 0x010001B7 ] };
- key <AB04> { [ b, B, guillemotleft, 0x01002039 ] };
- key <AB05> { [ k, K, guillemotright, 0x0100203A ] };
- key <AB06> { [ q, Q, 0x01000259, 0x0100018F ] };
- key <AB07> { [ v, V, doublelowquotemark, singlelowquotemark ] };
- key <AB08> { [ g, G, leftdoublequotemark, leftsinglequotemark ] };
- key <AB09> { [ f, F, rightdoublequotemark, rightsinglequotemark ] };
- key <AB10> { [ z, Z, 0x0100201F, 0x0100201B ] };
- key <AB11> { [ backslash, bar, currency, brokenbar ] };
-
- key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
-
-// Configures the "," for the numeric keypad
- include "kpdl(comma)"
-
-// Configures the use of the AltGr key
- include "level3(ralt_switch)"
-
-};
-
-
-//
-// Teclado Nativo Brasileiro para o teclado estadunidense 2005-07-19
-// Brazilian Nativo Keyboard for USA keyboards
-//
-// Ari Caldeira ari@tecladobrasileiro.com.br
-//
-partial alphanumeric_keys
-xkb_symbols "nativo-us" {
- include "br(nativo)"
-
- name[Group1]="Brazil - Nativo for USA keyboards";
-
-// Lower row
- key <AB01> { [ y, Y, ccedilla, Ccedilla ] };
- key <AB02> { [ semicolon, colon, backslash, bar ] };
-
-};
-
-
-//
-// Teclado Nativo Brasileiro para digitacao em Esperanto 2005-07-19
-// Brazilian Nativo Keyboard for typing Esperanto
-//
-// Ari Caldeira ari@tecladobrasileiro.com.br
-//
-partial alphanumeric_keys
-xkb_symbols "nativo-epo" {
- include "br(nativo)"
-
- name[Group1]="Brazil - Nativo for Esperanto";
-
-// Upper row Esperanto
- key <AD04> { [ h, H, hcircumflex, Hcircumflex ] };
- key <AD05> { [ ccircumflex, Ccircumflex, x, X ] };
- key <AD06> { [ ubreve, Ubreve, w, W ] };
-
-// Lower row Esperanto
- key <AB01> { [ jcircumflex, Jcircumflex, y, Y ] };
- key <AB02> { [ scircumflex, Scircumflex, ccedilla, Ccedilla ] };
- key <AB06> { [ gcircumflex, Gcircumflex, q, Q ] };
-
-};
+//
+// based on
+// "a very simple Brasilian ABNT2 keyboard
+// by Ricardo Y. Igarashi (iga@that.com.br)
+// Adds suport for dead-keys in I18N applications
+// by Conectiva (http://www.conectiva.com.br)"
+//
+
+default
+xkb_symbols "abnt2" {
+
+ include "latin"
+ name[Group1]="Portuguese (Brazil)";
+
+ key <AE02> { [ 2, at, twosuperior, onehalf ] };
+ key <AE03> { [ 3, numbersign, threesuperior, threequarters ] };
+ key <AE04> { [ 4, dollar, sterling, onequarter ] };
+ key <AE05> { [ 5, percent, cent, threeeighths ] };
+ key <AE06> { [ 6, dead_diaeresis, notsign, diaeresis ] };
+ key <AE12> { [ equal, plus, section, dead_ogonek ] };
+
+ key <AD01> { [ q, Q, slash, slash ] };
+ key <AD02> { [ w, W, question, question ] };
+ key <AD03> { [ e, E, EuroSign, EuroSign ] };
+ key <AD04> { [ r, R, registered, registered ] };
+ key <AD11> { [dead_acute, dead_grave, acute, grave ] };
+ key <AD12> { [bracketleft, braceleft, ordfeminine, dead_macron ] };
+
+ key <AC10> { [ ccedilla, Ccedilla, dead_acute, dead_doubleacute] };
+ key <AC11> { [dead_tilde, dead_circumflex, asciitilde, asciicircum ] };
+ key <BKSL> { [bracketright, braceright, masculine, masculine ] };
+
+ key <TLDE> { [apostrophe, quotedbl, notsign, notsign ] };
+
+ key <LSGT> { [ backslash, bar, masculine, dead_breve ] };
+ key <AB03> { [ c, C, copyright, copyright ] };
+ key <AB07> { [ m, M, mu, mu ] };
+ key <AB10> { [ semicolon, colon, dead_belowdot, dead_abovedot ] };
+
+// ABNT-2 keyboard has this special key
+
+ key <AB11> { [ slash, question, degree, questiondown ] };
+
+ modifier_map Mod3 { Scroll_Lock };
+
+ include "kpdl(comma)"
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ include "br(abnt2)" // for consistent naming
+ name[Group1]="Portuguese (Brazil, eliminate dead keys)";
+
+ key <AE06> { [ 6, diaeresis, notsign, notsign ] };
+ key <AD11> { [apostrophe, grave ] };
+ key <AC10> { [ ccedilla, Ccedilla, acute, doubleacute ] };
+ key <AC11> { [asciitilde, asciicircum ] };
+ key <AB10> { [ semicolon, colon, dead_belowdot, abovedot ] };
+};
+
+
+// ABNT2 Keyboard to IBM/Lenovo Thinkpads
+// by Piter PUNK <piterpk@terra.com.br>
+//
+partial alphanumeric_keys
+xkb_symbols "thinkpad" {
+
+ include "br(abnt2)" // for consistent naming
+ name[Group1]="Portuguese (Brazil)";
+
+ key <RCTL> { [ slash, question, degree, questiondown ] };
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+
+ include "us(basic)"
+ name[Group1]="Portuguese (Brazil)";
+
+ key <TLDE> { [ apostrophe, quotedbl ] };
+
+ key <AE01> { [ 1, exclam, onesuperior ] };
+ key <AE02> { [ 2, at, twosuperior ] };
+ key <AE03> { [ 3, numbersign, threesuperior ] };
+ key <AE04> { [ 4, dollar, sterling ] };
+ key <AE05> { [ 5, percent, cent ] };
+ key <AE06> { [ 6, dead_diaeresis, notsign ] };
+ key <AE12> { [ equal, plus, section ] };
+
+ key <AD03> { [ e, E, EuroSign ] };
+ key <AD11> { [ dead_acute, dead_grave, acute, grave ] };
+ key <AD12> { [ bracketleft, braceleft, 0x10000AA ] };
+
+ key <AC10> { [ ccedilla, Ccedilla ] };
+ key <AC11> { [ dead_tilde, dead_circumflex ] };
+ key <BKSL> { [ bracketright, braceright, 0x10000BA ] };
+
+ key <AB01> { [ z, Z, bar ] };
+ key <AB03> { [ c, C, 0x10020A2 ] };
+ key <AB09> { [ period, greater, backslash ] };
+ key <AB10> { [ semicolon, colon ] };
+
+ key <I219> { [ slash, question, degree, ISO_Next_Group ] };
+
+ include "level3(ralt_switch)"
+};
+
+
+//
+// Brazilian Dvorak keyboard 2005-04-18
+// "Teclado Simplificado Brasileiro" ou "Dvorak Brasileiro"
+//
+// Heitor Moraes heitor.moraes@gmail.com
+// Luiz Portella lfpor@lujz.org
+// Nando Florestan nando2003@mandic.com.br
+// Ari Caldeira ari@tecladobrasileiro.com.br
+//
+partial alphanumeric_keys
+xkb_symbols "dvorak" {
+
+ name[Group1]="Portuguese (Brazil, Dvorak)";
+
+// Numeric row
+ key <TLDE> { [ apostrophe, quotedbl, dead_caron, dead_doubleacute ] };
+ key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
+ key <AE02> { [ 2, at, twosuperior, onehalf ] };
+ key <AE03> { [ 3, numbersign, threesuperior, threequarters ] };
+ key <AE04> { [ 4, dollar, sterling, onequarter ] };
+ key <AE05> { [ 5, percent, cent, 0x01002030 ] };
+ key <AE06> { [ 6, dead_diaeresis, notsign, diaeresis ] };
+ key <AE07> { [ 7, ampersand, dead_belowdot, dead_abovedot ] };
+ key <AE08> { [ 8, asterisk, dead_ogonek, dead_horn ] };
+ key <AE09> { [ 9, parenleft, dead_cedilla, dead_hook ] };
+ key <AE10> { [ 0, parenright, dead_macron, dead_breve ] };
+ key <AE11> { [ bracketleft, braceleft, ordfeminine, 0x01000326 ] };
+ key <AE12> { [ bracketright, braceright, masculine, dead_abovering ] };
+
+
+// Upper row
+ key <AD01> { [ slash, question, degree, questiondown ] };
+ key <AD02> { [ comma, less, 0x01000329, 0x01000313 ] };
+ key <AD03> { [ period, greater, 0x01002022, periodcentered ] };
+ key <AD04> { [ p, P, thorn, THORN ] };
+ key <AD05> { [ y, Y, yen, yen ] };
+ key <AD06> { [ f, F, leftdoublequotemark, leftsinglequotemark ] };
+ key <AD07> { [ g, G, rightdoublequotemark, rightsinglequotemark ] };
+ key <AD08> { [ c, C, uparrow, copyright ] };
+ key <AD09> { [ r, R, registered, registered ] };
+ key <AD10> { [ l, L, lstroke, Lstroke ] };
+ key <AD11> { [ dead_acute, dead_grave, acute, grave ] };
+ key <AD12> { [ equal, plus, section, plusminus ] };
+
+// Central row
+ key <AC01> { [ a, A, ae, AE ] };
+ key <AC02> { [ o, O, oe, OE ] };
+ key <AC03> { [ e, E, EuroSign, EuroSign ] };
+ key <AC04> { [ u, U, oslash, Ooblique ] };
+ key <AC05> { [ i, I, idotless, Iabovedot ] };
+ key <AC06> { [ d, D, eth, ETH ] };
+ key <AC07> { [ h, H, leftarrow, paragraph ] };
+ key <AC08> { [ t, T, rightarrow, trademark ] };
+ key <AC09> { [ n, N, eng, ENG ] };
+ key <AC10> { [ s, S, ssharp, ssharp ] };
+ key <AC11> { [ dead_tilde, dead_circumflex, asciitilde, asciicircum ] };
+ key <BKSL> { [ minus, underscore, 0x01002015, 0x01000336 ] };
+
+// Lower row
+ key <LSGT> { [ ccedilla, Ccedilla, backslash, bar ] };
+ key <AB01> { [ semicolon, colon, 0x01000331, 0x0100032D ] };
+ key <AB02> { [ q, Q, 0x01000259, 0x0100018F ] };
+ key <AB03> { [ j, J, 0x01000292, 0x010001B7 ] };
+ key <AB04> { [ k, K, guillemotleft, 0x01002039 ] };
+ key <AB05> { [ x, X, multiply, division ] };
+ key <AB06> { [ b, B, guillemotright, 0x0100203A ] };
+ key <AB07> { [ m, M, downarrow, mu ] };
+ key <AB08> { [ w, W, ubreve, Ubreve ] };
+ key <AB09> { [ v, V, doublelowquotemark, singlelowquotemark ] };
+ key <AB10> { [ z, Z, 0x0100201F, 0x0100201B ] };
+ key <AB11> { [ backslash, bar, currency, brokenbar ] };
+
+ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+
+// Configures the "," for the numeric keypad
+ include "kpdl(comma)"
+
+// Configures the use of the AltGr key
+ include "level3(ralt_switch)"
+
+};
+
+
+//
+// Teclado Nativo Brasileiro 2005-07-19
+// Brazilian Nativo Keyboard
+// This is a Dvorak-based layout, designed for the Portuguese language
+//
+// Ari Caldeira ari@tecladobrasileiro.com.br
+//
+partial alphanumeric_keys
+xkb_symbols "nativo" {
+
+ name[Group1]="Portuguese (Brazil, nativo)";
+
+// Numeric row
+ key <TLDE> { [ equal, plus, section, plusminus ] };
+ key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
+ key <AE02> { [ 2, at, twosuperior, onehalf ] };
+ key <AE03> { [ 3, numbersign, threesuperior, threequarters ] };
+ key <AE04> { [ 4, dollar, sterling, onequarter ] };
+ key <AE05> { [ 5, percent, cent, 0x01002030 ] };
+ key <AE06> { [ 6, dead_diaeresis, notsign, diaeresis ] };
+ key <AE07> { [ 7, ampersand, dead_belowdot, dead_abovedot ] };
+ key <AE08> { [ 8, asterisk, dead_ogonek, dead_horn ] };
+ key <AE09> { [ 9, parenleft, dead_cedilla, dead_hook ] };
+ key <AE10> { [ 0, parenright, dead_macron, dead_breve ] };
+ key <AE11> { [ bracketleft, braceleft, ordfeminine, 0x01000326 ] };
+ key <AE12> { [ bracketright, braceright, masculine, dead_abovering ] };
+
+// Upper row
+ key <AD01> { [ slash, question, degree, questiondown ] };
+ key <AD02> { [ comma, less, 0x01000329, 0x01000313 ] };
+ key <AD03> { [ period, greater, 0x01002022, periodcentered ] };
+ key <AD04> { [ h, H, paragraph, paragraph ] };
+ key <AD05> { [ x, X, multiply, division ] };
+ key <AD06> { [ w, W, ubreve, Ubreve ] };
+ key <AD07> { [ l, L, lstroke, Lstroke ] };
+ key <AD08> { [ t, T, trademark, trademark ] };
+ key <AD09> { [ c, C, copyright, copyright ] };
+ key <AD10> { [ p, P, thorn, THORN ] };
+ key <AD11> { [ dead_tilde, dead_circumflex, asciitilde, asciicircum ] };
+ key <AD12> { [ minus, underscore, 0x01002015, 0x01000336 ] };
+
+// Central row
+ key <AC01> { [ i, I, idotless, Iabovedot ] };
+ key <AC02> { [ e, E, EuroSign, EuroSign ] };
+ key <AC03> { [ a, A, ae, AE ] };
+ key <AC04> { [ o, O, oe, OE ] };
+ key <AC05> { [ u, U, oslash, Ooblique ] };
+ key <AC06> { [ m, M, mu, mu ] };
+ key <AC07> { [ d, D, eth, ETH ] };
+ key <AC08> { [ s, S, ssharp, ssharp ] };
+ key <AC09> { [ r, R, registered, registered ] };
+ key <AC10> { [ n, N, eng, ENG ] };
+ key <AC11> { [ dead_acute, dead_grave, acute, grave ] };
+ key <BKSL> { [ apostrophe, quotedbl, dead_caron, dead_doubleacute ] };
+
+// Lower row
+ key <LSGT> { [ semicolon, colon, 0x01000331, 0x0100032D ] };
+ key <AB01> { [ y, Y, yen, yen ] };
+ key <AB02> { [ ccedilla, Ccedilla, backslash, bar ] };
+ key <AB03> { [ j, J, 0x01000292, 0x010001B7 ] };
+ key <AB04> { [ b, B, guillemotleft, 0x01002039 ] };
+ key <AB05> { [ k, K, guillemotright, 0x0100203A ] };
+ key <AB06> { [ q, Q, 0x01000259, 0x0100018F ] };
+ key <AB07> { [ v, V, doublelowquotemark, singlelowquotemark ] };
+ key <AB08> { [ g, G, leftdoublequotemark, leftsinglequotemark ] };
+ key <AB09> { [ f, F, rightdoublequotemark, rightsinglequotemark ] };
+ key <AB10> { [ z, Z, 0x0100201F, 0x0100201B ] };
+ key <AB11> { [ backslash, bar, currency, brokenbar ] };
+
+ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+
+// Configures the "," for the numeric keypad
+ include "kpdl(comma)"
+
+// Configures the use of the AltGr key
+ include "level3(ralt_switch)"
+
+};
+
+
+//
+// Teclado Nativo Brasileiro para o teclado estadunidense 2005-07-19
+// Brazilian Nativo Keyboard for USA keyboards
+//
+// Ari Caldeira ari@tecladobrasileiro.com.br
+//
+partial alphanumeric_keys
+xkb_symbols "nativo-us" {
+ include "br(nativo)"
+
+ name[Group1]="Portuguese (Brazil, nativo for USA keyboards)";
+
+// Lower row
+ key <AB01> { [ y, Y, ccedilla, Ccedilla ] };
+ key <AB02> { [ semicolon, colon, backslash, bar ] };
+
+};
+
+
+//
+// Teclado Nativo Brasileiro para digitacao em Esperanto 2005-07-19
+// Brazilian Nativo Keyboard for typing Esperanto
+//
+// Ari Caldeira ari@tecladobrasileiro.com.br
+//
+partial alphanumeric_keys
+xkb_symbols "nativo-epo" {
+ include "br(nativo)"
+
+ name[Group1]="Portuguese (Brazil, nativo for Esperanto)";
+
+// Upper row Esperanto
+ key <AD04> { [ h, H, hcircumflex, Hcircumflex ] };
+ key <AD05> { [ ccircumflex, Ccircumflex, x, X ] };
+ key <AD06> { [ ubreve, Ubreve, w, W ] };
+
+// Lower row Esperanto
+ key <AB01> { [ jcircumflex, Jcircumflex, y, Y ] };
+ key <AB02> { [ scircumflex, Scircumflex, ccedilla, Ccedilla ] };
+ key <AB06> { [ gcircumflex, Gcircumflex, q, Q ] };
+
+};
diff --git a/xorg-server/xkeyboard-config/symbols/bt b/xorg-server/xkeyboard-config/symbols/bt
index b1ac22625..980b5c690 100644
--- a/xorg-server/xkeyboard-config/symbols/bt
+++ b/xorg-server/xkeyboard-config/symbols/bt
@@ -1,87 +1,87 @@
-//
-// Dzongkha / Tibetan layout for Bhutanese keyboard
-//
-/////////////////////////////////////////////////////////////////
-//
-// Based on the official layout for Dzongkha
-// approved by the Department of Information Technology &
-// Dzongkha Development Authority of the Government of Bhutan
-//
-// Copyright (C) 2004, Gregory Mokhin <mokhin@bog.msu.ru>
-/////////////////////////////////////////////////////////////////
-// Version 0.97 2004-01-09 Layout map provided by Chris Fynn
-// Version 1.0 2004-07-29 Some correction by Pema Geyleg <pema_geyleg@druknet.bt>
-/////////////////////////////////////////////////////////////////
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
- name[Group1]= "Bhutan";
-
- key <TLDE> { [ 0x1000F09, 0x1000F0A, 0x1000F6C, 0x1000F6D ] };
-
-// numbers e.a.
- key <AE01> { [ 0x1000F21, 0x1000F04, 1, exclam ] };
- key <AE02> { [ 0x1000F22, 0x1000F05, 2, at ] };
- key <AE03> { [ 0x1000F23, 0x1000F06, 3, numbersign ] };
- key <AE04> { [ 0x1000F24, 0x1000F48, 4, dollar ] };
- key <AE05> { [ 0x1000F25, 0x1000F70, 5, percent ] };
- key <AE06> { [ 0x1000F26, 0x1000F08, 6, 0x1000F01 ] };
- key <AE07> { [ 0x1000F27, 0x1000F38, 7, ampersand ] };
- key <AE08> { [ 0x1000F28, 0x1000F34, 8, asterisk ] };
- key <AE09> { [ 0x1000F29, 0x1000F3C, 9, parenleft ] };
- key <AE10> { [ 0x1000F20, 0x1000F3D, 0, parenright ] };
- key <AE11> { [ 0x1000F14, 0x1000F7F, minus, underscore ] };
- key <AE12> { [ 0x1000F0D, 0x1000F11, equal, plus ] };
-
-// consonants ( ka kha ga nga )
- key <AD01> { [ 0x1000F40, 0x1000F90, 0x1000F88, VoidSymbol ] };
- key <AD02> { [ 0x1000F41, 0x1000F91, 0x1000F89, VoidSymbol ] };
- key <AD03> { [ 0x1000F42, 0x1000F92, 0x1000F6E, 0x1000F6F] };
- key <AD04> { [ 0x1000F44, 0x1000F94, 0x1000F83, 0x1000F82 ] };
-
-// vowels ( i u e o )
- key <AD05> { [ 0x1000F72, 0x1000F80, 0x1000F1A, VoidSymbol ] };
- key <AD06> { [ 0x1000F74, 0x1000F84, 0x1000F1B, VoidSymbol ] };
- key <AD07> { [ 0x1000F7A, 0x1000F7B, 0x1000F1C, VoidSymbol ] };
- key <AD08> { [ 0x1000F7C, 0x1000F7D, 0x1000F1D, 0x1000F17 ] };
-
-// consonants ( ca cha ja nya )
- key <AD09> { [ 0x1000F45, 0x1000F95, 0x1000F1E, 0x1000F18 ] };
- key <AD10> { [ 0x1000F46, 0x1000F96, 0x1000F1F, 0x1000F19 ] };
- key <AD11> { [ 0x1000F47, 0x1000F97, bracketleft, 0x1000F3E ] };
- key <AD12> { [ 0x1000F49, 0x1000F99, bracketright, 0x1000F3F ] };
-
-// consonants ( ta tha da na pa pha ba ma tsa tsha dza wa )
- key <AC01> { [ 0x1000F4F, 0x1000F9F, 0x1000F4A, 0x1000F9A ] };
- key <AC02> { [ 0x1000F50, 0x1000FA0, 0x1000F4B, 0x1000F9B ] };
- key <AC03> { [ 0x1000F51, 0x1000FA1, 0x1000F4C, 0x1000F9C ] };
- key <AC04> { [ 0x1000F53, 0x1000FA3, 0x1000F4E, 0x1000F9E ] };
- key <AC05> { [ 0x1000F54, 0x1000FA4, 0x1002039, guillemotleft ] };
- key <AC06> { [ 0x1000F55, 0x1000FA5, 0x100203A, guillemotright ] };
- key <AC07> { [ 0x1000F56, 0x1000FA6, 0x1000F37, 0x1000F35 ] };
- key <AC08> { [ 0x1000F58, 0x1000FA8, 0x1000F7E, VoidSymbol ] };
- key <AC09> { [ 0x1000F59, 0x1000FA9, 0x1000F39, VoidSymbol ] };
- key <AC10> { [ 0x1000F5A, 0x1000FAA, colon, semicolon ] };
- key <AC11> { [ 0x1000F5B, 0x1000FAB, apostrophe, quotedbl ] };
-
-// TODO: BKSL and LSGT are from gb layout, are there any variants?
- key <BKSL> { [ 0x1000F5D, 0x1000FAD, backslash, 0x1000FBA ] };
- key <LSGT> { [ 0x1000F0D, 0x1000F11, 0x1000F10, 0x1000F0F ] };
-
-// consonants ( zha za 'a ya ra la sha sa ha a )
- key <AB01> { [ 0x1000F5E, 0x1000FAE, 0x1000F13, 0x1000F36 ] };
- key <AB02> { [ 0x1000F5F, 0x1000FAF, 0x1000FBE, 0x1000FBF ] };
- key <AB03> { [ 0x1000F60, 0x1000F71, 0x1000F03, 0x1000FB0 ] };
- key <AB04> { [ 0x1000F61, 0x1000FB1, 0x1000F12, 0x1000FBB ] };
- key <AB05> { [ 0x1000F62, 0x1000FB2, 0x1000F6A, 0x1000FBC ] };
- key <AB06> { [ 0x1000F63, 0x1000FB3, 0x1000F8A, 0x1000F8B ] };
- key <AB07> { [ 0x1000F64, 0x1000FB4, 0x1000F65, 0x1000FB5 ] };
- key <AB08> { [ 0x1000F66, 0x1000FB6, comma, less ] };
- key <AB09> { [ 0x1000F67, 0x1000FB7, period, greater ] };
- key <AB10> { [ 0x1000F68, 0x1000FB8, slash, question ] };
-
-// space
- key <SPCE> { [ 0x1000F0B, space, 0x1000F0C, nobreakspace ] };
-
- include "level3(ralt_switch)"
-};
+//
+// Dzongkha / Tibetan layout for Bhutanese keyboard
+//
+/////////////////////////////////////////////////////////////////
+//
+// Based on the official layout for Dzongkha
+// approved by the Department of Information Technology &
+// Dzongkha Development Authority of the Government of Bhutan
+//
+// Copyright (C) 2004, Gregory Mokhin <mokhin@bog.msu.ru>
+/////////////////////////////////////////////////////////////////
+// Version 0.97 2004-01-09 Layout map provided by Chris Fynn
+// Version 1.0 2004-07-29 Some correction by Pema Geyleg <pema_geyleg@druknet.bt>
+/////////////////////////////////////////////////////////////////
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+ name[Group1]= "Dzongkha";
+
+ key <TLDE> { [ 0x1000F09, 0x1000F0A, 0x1000F6C, 0x1000F6D ] };
+
+// numbers e.a.
+ key <AE01> { [ 0x1000F21, 0x1000F04, 1, exclam ] };
+ key <AE02> { [ 0x1000F22, 0x1000F05, 2, at ] };
+ key <AE03> { [ 0x1000F23, 0x1000F06, 3, numbersign ] };
+ key <AE04> { [ 0x1000F24, 0x1000F48, 4, dollar ] };
+ key <AE05> { [ 0x1000F25, 0x1000F70, 5, percent ] };
+ key <AE06> { [ 0x1000F26, 0x1000F08, 6, 0x1000F01 ] };
+ key <AE07> { [ 0x1000F27, 0x1000F38, 7, ampersand ] };
+ key <AE08> { [ 0x1000F28, 0x1000F34, 8, asterisk ] };
+ key <AE09> { [ 0x1000F29, 0x1000F3C, 9, parenleft ] };
+ key <AE10> { [ 0x1000F20, 0x1000F3D, 0, parenright ] };
+ key <AE11> { [ 0x1000F14, 0x1000F7F, minus, underscore ] };
+ key <AE12> { [ 0x1000F0D, 0x1000F11, equal, plus ] };
+
+// consonants ( ka kha ga nga )
+ key <AD01> { [ 0x1000F40, 0x1000F90, 0x1000F88, VoidSymbol ] };
+ key <AD02> { [ 0x1000F41, 0x1000F91, 0x1000F89, VoidSymbol ] };
+ key <AD03> { [ 0x1000F42, 0x1000F92, 0x1000F6E, 0x1000F6F] };
+ key <AD04> { [ 0x1000F44, 0x1000F94, 0x1000F83, 0x1000F82 ] };
+
+// vowels ( i u e o )
+ key <AD05> { [ 0x1000F72, 0x1000F80, 0x1000F1A, VoidSymbol ] };
+ key <AD06> { [ 0x1000F74, 0x1000F84, 0x1000F1B, VoidSymbol ] };
+ key <AD07> { [ 0x1000F7A, 0x1000F7B, 0x1000F1C, VoidSymbol ] };
+ key <AD08> { [ 0x1000F7C, 0x1000F7D, 0x1000F1D, 0x1000F17 ] };
+
+// consonants ( ca cha ja nya )
+ key <AD09> { [ 0x1000F45, 0x1000F95, 0x1000F1E, 0x1000F18 ] };
+ key <AD10> { [ 0x1000F46, 0x1000F96, 0x1000F1F, 0x1000F19 ] };
+ key <AD11> { [ 0x1000F47, 0x1000F97, bracketleft, 0x1000F3E ] };
+ key <AD12> { [ 0x1000F49, 0x1000F99, bracketright, 0x1000F3F ] };
+
+// consonants ( ta tha da na pa pha ba ma tsa tsha dza wa )
+ key <AC01> { [ 0x1000F4F, 0x1000F9F, 0x1000F4A, 0x1000F9A ] };
+ key <AC02> { [ 0x1000F50, 0x1000FA0, 0x1000F4B, 0x1000F9B ] };
+ key <AC03> { [ 0x1000F51, 0x1000FA1, 0x1000F4C, 0x1000F9C ] };
+ key <AC04> { [ 0x1000F53, 0x1000FA3, 0x1000F4E, 0x1000F9E ] };
+ key <AC05> { [ 0x1000F54, 0x1000FA4, 0x1002039, guillemotleft ] };
+ key <AC06> { [ 0x1000F55, 0x1000FA5, 0x100203A, guillemotright ] };
+ key <AC07> { [ 0x1000F56, 0x1000FA6, 0x1000F37, 0x1000F35 ] };
+ key <AC08> { [ 0x1000F58, 0x1000FA8, 0x1000F7E, VoidSymbol ] };
+ key <AC09> { [ 0x1000F59, 0x1000FA9, 0x1000F39, VoidSymbol ] };
+ key <AC10> { [ 0x1000F5A, 0x1000FAA, colon, semicolon ] };
+ key <AC11> { [ 0x1000F5B, 0x1000FAB, apostrophe, quotedbl ] };
+
+// TODO: BKSL and LSGT are from gb layout, are there any variants?
+ key <BKSL> { [ 0x1000F5D, 0x1000FAD, backslash, 0x1000FBA ] };
+ key <LSGT> { [ 0x1000F0D, 0x1000F11, 0x1000F10, 0x1000F0F ] };
+
+// consonants ( zha za 'a ya ra la sha sa ha a )
+ key <AB01> { [ 0x1000F5E, 0x1000FAE, 0x1000F13, 0x1000F36 ] };
+ key <AB02> { [ 0x1000F5F, 0x1000FAF, 0x1000FBE, 0x1000FBF ] };
+ key <AB03> { [ 0x1000F60, 0x1000F71, 0x1000F03, 0x1000FB0 ] };
+ key <AB04> { [ 0x1000F61, 0x1000FB1, 0x1000F12, 0x1000FBB ] };
+ key <AB05> { [ 0x1000F62, 0x1000FB2, 0x1000F6A, 0x1000FBC ] };
+ key <AB06> { [ 0x1000F63, 0x1000FB3, 0x1000F8A, 0x1000F8B ] };
+ key <AB07> { [ 0x1000F64, 0x1000FB4, 0x1000F65, 0x1000FB5 ] };
+ key <AB08> { [ 0x1000F66, 0x1000FB6, comma, less ] };
+ key <AB09> { [ 0x1000F67, 0x1000FB7, period, greater ] };
+ key <AB10> { [ 0x1000F68, 0x1000FB8, slash, question ] };
+
+// space
+ key <SPCE> { [ 0x1000F0B, space, 0x1000F0C, nobreakspace ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/by b/xorg-server/xkeyboard-config/symbols/by
index 2c16f9e7a..36994d3e1 100644
--- a/xorg-server/xkeyboard-config/symbols/by
+++ b/xorg-server/xkeyboard-config/symbols/by
@@ -1,51 +1,51 @@
-// based on
-// belarusian standard keyboard
-// Alexander Mikhailian <mikhailian@altern.org>
-// Reworked to use winkeys by default and russian keymap as base by Paul Lubetsky <vegeek@gmail.com>
-// Added third level with russian symbols
-// See freedesktop.org bug #23604
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
- include "ru(winkeys)"
- name[Group1]= "Belarus";
-
- key <AD09> { [ Byelorussian_shortu, Byelorussian_SHORTU ] };
- key <AD12> { [ apostrophe, apostrophe ] };
- key <AB05> { [ Ukrainian_i, Ukrainian_I ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "legacy" {
- include "by(basic)"
- name[Group1]= "Belarus - Legacy";
-
- key <AE03> { [ 3, numbersign ] };
- key <AE04> { [ 4, asterisk ] };
- key <AE05> { [ 5, colon ] };
- key <AE06> { [ 6, comma ] };
- key <AE07> { [ 7, period ] };
- key <AE08> { [ 8, semicolon ] };
- key <AB10> { [ slash, question ] };
- key <BKSL> { [ backslash, bar ] };
-};
-
-// based on a keyboard map from an 'xkb/symbols/iso3335-3' file
-
-partial alphanumeric_keys
-xkb_symbols "latin" {
- include "latin"
- name[Group1]= "Belarus - Latin";
-
- key <AD02> { [ w, W, scaron, Scaron ] };
- key <AD07> { [ u, U, ubreve, Ubreve ] };
- key <AC02> { [ s, S, sacute, Sacute ] };
- key <AC09> { [ l, L, lstroke, Lstroke ] };
- key <AB01> { [ z, Z, zacute, Zacute ] };
- key <AB02> { [ x, X, zcaron, Zcaron ] };
- key <AB03> { [ c, C, cacute, Cacute ] };
- key <AB04> { [ v, V, ccaron, Ccaron ] };
- key <AB06> { [ n, N, nacute, Nacute ] };
-
- include "level3(ralt_switch)"
-};
+// based on
+// belarusian standard keyboard
+// Alexander Mikhailian <mikhailian@altern.org>
+// Reworked to use winkeys by default and russian keymap as base by Paul Lubetsky <vegeek@gmail.com>
+// Added third level with russian symbols
+// See freedesktop.org bug #23604
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+ include "ru(winkeys)"
+ name[Group1]= "Belarusian";
+
+ key <AD09> { [ Byelorussian_shortu, Byelorussian_SHORTU ] };
+ key <AD12> { [ apostrophe, apostrophe ] };
+ key <AB05> { [ Ukrainian_i, Ukrainian_I ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "legacy" {
+ include "by(basic)"
+ name[Group1]= "Belarusian (legacy)";
+
+ key <AE03> { [ 3, numbersign ] };
+ key <AE04> { [ 4, asterisk ] };
+ key <AE05> { [ 5, colon ] };
+ key <AE06> { [ 6, comma ] };
+ key <AE07> { [ 7, period ] };
+ key <AE08> { [ 8, semicolon ] };
+ key <AB10> { [ slash, question ] };
+ key <BKSL> { [ backslash, bar ] };
+};
+
+// based on a keyboard map from an 'xkb/symbols/iso3335-3' file
+
+partial alphanumeric_keys
+xkb_symbols "latin" {
+ include "latin"
+ name[Group1]= "Belarusian (Latin)";
+
+ key <AD02> { [ w, W, scaron, Scaron ] };
+ key <AD07> { [ u, U, ubreve, Ubreve ] };
+ key <AC02> { [ s, S, sacute, Sacute ] };
+ key <AC09> { [ l, L, lstroke, Lstroke ] };
+ key <AB01> { [ z, Z, zacute, Zacute ] };
+ key <AB02> { [ x, X, zcaron, Zcaron ] };
+ key <AB03> { [ c, C, cacute, Cacute ] };
+ key <AB04> { [ v, V, ccaron, Ccaron ] };
+ key <AB06> { [ n, N, nacute, Nacute ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ca b/xorg-server/xkeyboard-config/symbols/ca
index 10427e959..cfb7b25e5 100644
--- a/xorg-server/xkeyboard-config/symbols/ca
+++ b/xorg-server/xkeyboard-config/symbols/ca
@@ -1,527 +1,527 @@
-default partial
-xkb_symbols "fr" {
- name[Group1] = "Canada";
-
- key <TLDE> { [ numbersign, bar, backslash ] };
- key <AE01> { [ 1, exclam, plusminus ] };
- key <AE02> { [ 2, quotedbl, at ] };
- key <AE03> { [ 3, slash, sterling ] };
- key <AE04> { [ 4, dollar, cent ] };
- key <AE05> { [ 5, percent, currency ] };
- key <AE06> { [ 6, question, notsign ] };
- key <AE07> { [ 7, ampersand, brokenbar ] };
- key <AE08> { [ 8, asterisk, twosuperior ] };
- key <AE09> { [ 9, parenleft, threesuperior ] };
- key <AE10> { [ 0, parenright, onequarter ] };
- key <AE11> { [ minus, underscore, onehalf ] };
- key <AE12> { [ equal, plus, threequarters ] };
-
- key <AD01> { [ q, Q ] };
- key <AD02> { [ w, W ] };
- key <AD03> { [ e, E ] };
- key <AD04> { [ r, R ] };
- key <AD05> { [ t, T ] };
- key <AD06> { [ y, Y ] };
- key <AD07> { [ u, U ] };
- key <AD08> { [ i, I ] };
- key <AD09> { [ o, O, section ] };
- key <AD10> { [ p, P, paragraph ] };
- key <AD11> { [dead_circumflex, dead_circumflex, bracketleft ] };
- key <AD12> { [ dead_cedilla, dead_diaeresis, bracketright ] };
-
- key <AC01> { [ a, A ] };
- key <AC02> { [ s, S ] };
- key <AC03> { [ d, D ] };
- key <AC04> { [ f, F ] };
- key <AC05> { [ g, G ] };
- key <AC06> { [ h, H ] };
- key <AC07> { [ j, J ] };
- key <AC08> { [ k, K ] };
- key <AC09> { [ l, L ] };
- key <AC10> { [ semicolon, colon, asciitilde ] };
- key <AC11> { [dead_grave, dead_grave, braceleft ] };
- key <BKSL> { [ less, greater, braceright ] };
-
- key <LSGT> { [guillemotleft, guillemotright, degree] };
- key <AB01> { [ z, Z ] };
- key <AB02> { [ x, X ] };
- key <AB03> { [ c, C ] };
- key <AB04> { [ v, V ] };
- key <AB05> { [ b, B ] };
- key <AB06> { [ n, N ] };
- key <AB07> { [ m, M, mu ] };
- key <AB08> { [ comma, apostrophe, macron ] };
- key <AB09> { [ period, period, hyphen ] };
- key <AB10> { [ eacute, Eacute, dead_acute ] };
-
- key <SPCE> { [ space, space, nobreakspace ] };
-
- include "level3(ralt_switch)"
-};
-
-xkb_symbols "fr-dvorak" {
- name[Group1] = "Canada - French Dvorak";
-
- key <TLDE> { [ numbersign, bar, backslash ] };
- key <AE01> { [ 1, exclam, plusminus ] };
- key <AE02> { [ 2, quotedbl, at ] };
- key <AE03> { [ 3, slash, sterling ] };
- key <AE04> { [ 4, dollar, cent ] };
- key <AE05> { [ 5, percent, currency ] };
- key <AE06> { [ 6, question, notsign ] };
- key <AE07> { [ 7, ampersand, brokenbar ] };
- key <AE08> { [ 8, asterisk, twosuperior ] };
- key <AE09> { [ 9, parenleft, threesuperior ] };
- key <AE10> { [ 0, parenright, onequarter ] };
- key <AE11> { [dead_circumflex, dead_circumflex, bracketleft ] };
- key <AE12> { [ dead_cedilla, dead_diaeresis, bracketright ] };
-
- key <AD01> { [dead_grave, dead_grave, braceleft ] };
- key <AD02> { [ comma, apostrophe, macron ] };
- key <AD03> { [ period, period, hyphen ] };
- key <AD04> { [ p, P, paragraph ] };
- key <AD05> { [ y, Y ] };
- key <AD06> { [ f, F ] };
- key <AD07> { [ g, G ] };
- key <AD08> { [ c, C ] };
- key <AD09> { [ r, R ] };
- key <AD10> { [ l, L ] };
- key <AD11> { [ eacute, Eacute, dead_acute ] };
- key <AD12> { [ equal, plus, threequarters ] };
-
- key <AC01> { [ a, A ] };
- key <AC02> { [ o, O, section ] };
- key <AC03> { [ e, E ] };
- key <AC04> { [ u, U ] };
- key <AC05> { [ i, I ] };
- key <AC06> { [ d, D ] };
- key <AC07> { [ h, H ] };
- key <AC08> { [ t, T ] };
- key <AC09> { [ n, N ] };
- key <AC10> { [ s, S ] };
- key <AC11> { [ minus, underscore, onehalf ] };
- key <BKSL> { [ less, greater, braceright ] };
-
- key <LSGT> { [guillemotleft, guillemotright, degree] };
- key <AB01> { [ semicolon, colon, asciitilde ] };
- key <AB02> { [ q, Q ] };
- key <AB03> { [ j, J ] };
- key <AB04> { [ k, K ] };
- key <AB05> { [ x, X ] };
- key <AB06> { [ b, B ] };
- key <AB07> { [ m, M, mu ] };
- key <AB08> { [ w, W ] };
- key <AB09> { [ v, V ] };
- key <AB10> { [ z, Z ] };
-
- key <SPCE> { [ space, space, nobreakspace ] };
-
- include "level3(ralt_switch)"
-};
-
-partial
-xkb_symbols "fr-legacy" {
-
- name[Group1] = "Canada - French (legacy)";
-
- include "ca(fr)"
-
- key <TLDE> { [ degree, degree, notsign ] };
- key <AE01> { [ 1, exclam, onesuperior ] };
-
- key <AE03> { [ 3, numbersign, threesuperior ] };
- key <AE04> { [ 4, dollar, onequarter ] };
- key <AE05> { [ 5, percent, onehalf ] };
- key <AE06> { [ 6, question, threequarters ] };
- key <AE07> { [ 7, ampersand, braceleft ] };
- key <AE08> { [ 8, asterisk, bracketleft ] };
- key <AE09> { [ 9, parenleft, bracketright, plusminus ] };
- key <AE10> { [ 0, parenright, braceright ] };
- key <AE11> { [ minus, underscore, bar, questiondown] };
- key <AE12> { [ equal, plus, dead_cedilla ] };
-
- key <AD04> { [ r, R, paragraph, registered ] };
- key <AD06> { [ y, Y, yen ] };
- key <AD09> { [ o, O, oslash, Ooblique ] };
- key <AD10> { [ p, P, thorn, THORN ] };
- key <AD11> { [dead_circumflex, dead_circumflex, degree ] };
- key <AD12> { [ ccedilla, Ccedilla, dead_tilde, dead_diaeresis ] };
-
- key <AC01> { [ a, A, ae, AE ] };
- key <AC02> { [ s, S, ssharp, section ] };
- key <AC03> { [ d, D, eth, ETH ] };
- key <AC04> { [ f, F, ordfeminine ] };
- key <AC10> { [ semicolon, colon, dead_acute, dead_acute ] };
- key <AC11> { [ egrave, Egrave ] };
- key <BKSL> { [ agrave, Agrave, dead_grave ] };
-
- key <LSGT> { [ ugrave, Ugrave, backslash, bar ] };
- key <AB01> { [ z, Z, guillemotleft ] };
- key <AB02> { [ x, X, guillemotright ] };
- key <AB03> { [ c, C, cent, copyright ] };
- key <AB07> { [ m, M, mu, masculine ] };
- key <AB08> { [ comma, apostrophe, less ] };
- key <AB09> { [ period, period, greater ] };
- key <AB10> { [ eacute, Eacute, slash ] };
-};
-
-partial
-xkb_symbols "multi" {
-
- name[Group1] = "Canada - Multilingual, first part";
-
- include "ca(fr)"
-
- key <TLDE> { [ slash, backslash, bar ] };
- key <AE01> { [ 1, exclam ] };
- key <AE02> { [ 2, at ] };
- key <AE03> { [ 3, numbersign ] };
- key <AE04> { [ 4, dollar ] };
- key <AE05> { [ 5, percent ] };
- key <AE06> { [ 6, question ] };
- key <AE07> { [ 7, ampersand, braceleft ] };
- key <AE08> { [ 8, asterisk, braceright ] };
- key <AE09> { [ 9, parenleft, bracketleft ] };
- key <AE10> { [ 0, parenright, bracketright ] };
- key <AE11> { [ minus, underscore ] };
- key <AE12> { [ equal, plus, notsign ] };
-
- key <AD09> { [ o, O ] };
- key <AD10> { [ p, P ] };
- key <AD11> { [dead_circumflex, dead_diaeresis, dead_grave ] };
- key <AD12> { [ ccedilla, Ccedilla, asciitilde ] };
-
- key <AC10> { [ semicolon, colon, degree ] };
- key <AC11> { [ egrave, Egrave ] };
- key <BKSL> { [ agrave, Agrave ] };
-
- key <LSGT> { [ ugrave, Ugrave ] };
- key <AB01> { [ z, Z, guillemotleft ] };
- key <AB02> { [ x, X, guillemotright ] };
- key <AB08> { [ comma, apostrophe, less ] };
- key <AB09> { [ period, quotedbl, greater ] };
- key <AB10> { [ eacute, Eacute ] };
-};
-
-partial
-xkb_symbols "multi-2gr" {
-
- name[Group1] = "Canada - Multilingual, second part";
-
- key <TLDE> { [ NoSymbol, hyphen ] };
- key <AE01> { [ onesuperior, exclamdown ] };
- key <AE02> { [ twosuperior, NoSymbol ] };
- key <AE03> { [ threesuperior, sterling ] };
- key <AE04> { [ onequarter, currency ] };
- key <AE05> { [ onehalf,threeeighths ] };
- key <AE06> { [ threequarters, fiveeighths ] };
- key <AE07> { [ NoSymbol,seveneighths ] };
- key <AE08> { [ NoSymbol, trademark ] };
- key <AE09> { [ NoSymbol, plusminus ] };
-
- key <AE11> { [ NoSymbol, questiondown] };
- key <AE12> { [ dead_cedilla, dead_ogonek ] };
-
- key <AD01> { [ NoSymbol, Greek_OMEGA ] };
- key <AD02> { [ lstroke, Lstroke ] };
- key <AD03> { [ oe, OE ] };
- key <AD04> { [ paragraph, registered ] };
- key <AD05> { [ tslash, Tslash ] };
- key <AD06> { [ leftarrow, yen ] };
- key <AD07> { [ downarrow, uparrow ] };
- key <AD08> { [ rightarrow, idotless ] };
- key <AD09> { [ oslash, Ooblique ] };
- key <AD10> { [ thorn, THORN ] };
- key <AD11> { [ NoSymbol, dead_abovering ] };
- key <AD12> { [ dead_tilde, dead_macron ] };
-
- key <AC01> { [ ae, AE ] };
- key <AC02> { [ ssharp, section ] };
- key <AC03> { [ eth, ETH ] };
- key <AC04> { [ NoSymbol, ordfeminine ] };
- key <AC05> { [ eng, ENG ] };
- key <AC06> { [ hstroke, Hstroke ] };
- key <AC07> { [ U0133, U0132 ] };
- key <AC08> { [ kra, NoSymbol ] };
- key <AC09> { [ U0140, U013F ] };
- key <AC10> { [ dead_acute, dead_doubleacute ] };
- key <AC11> { [ NoSymbol, dead_caron ] };
- key <BKSL> { [ NoSymbol, dead_breve ] };
-
-
- key <LSGT> { [ NoSymbol, brokenbar ] };
-
- key <AB03> { [ cent, copyright ] };
- key <AB04> { [ leftdoublequotemark, leftsinglequotemark ] };
- key <AB05> { [ rightdoublequotemark, rightsinglequotemark ] };
- key <AB06> { [ U0149, U266A ] };
- key <AB07> { [ mu, masculine ] };
- key <AB08> { [ Greek_horizbar, multiply ] };
- key <AB09> { [ periodcentered, division ] };
- key <AB10> { [ NoSymbol, dead_abovedot ] };
-
-};
-
-// based on
-// Inuktitut keyboard for X11
-// written by Pablo Saratxaga <pablo@mandrakesoft.com>
-
-alphanumeric_keys
-xkb_symbols "ike" {
-
- name[Group1]= "Canada - Inuktitut";
-
- key <AE01> { [ 0x01001595, 1 ] };
- key <AE02> { [ 0x01001449, 2 ] };
- key <AE03> { [ 0x01001550, 3 ] };
- key <AE04> { [ 0x01001483, 4 ] };
- key <AE05> { [ 0x01001466, 5 ] };
- key <AE06> { [ 0x01001585, 6 ] };
- key <AE07> { [ 0x010014bb, 7 ] };
- key <AE08> { [ 0x010014d0, 8 ] };
- key <AE09> { [ 0x010014ea, 9 ] };
- key <AE10> { [ 0x0100153e, 0 ] };
- key <AE11> { [ minus, underscore ] };
- key <AE12> { [ 0x0100155d, equal ] };
-
- key <AD01> { [ 0x0100158f, 0x0100148b ] };
- key <AD02> { [ 0x01001403, 0x01001431 ] };
- key <AD03> { [ 0x0100157f, 0x01001546 ] };
- key <AD04> { [ 0x0100146d, 0x01001596 ] };
- key <AD05> { [ 0x0100144e, 0x01001671 ] };
- key <AD06> { [ 0x010014ef, 0x01001673 ] };
- key <AD07> { [ 0x010014a5, 0x01001675 ] };
- key <AD08> { [ 0x010014c2, 0x010015a4 ] };
- key <AD09> { [ 0x010014d5, 0x010015a0 ] };
- key <AD10> { [ 0x01001528, 0x010015a6 ] };
- key <AD11> { [ 0x010014a1, 0x01001505 ] };
- key <AD12> { [ dead_abovedot, 0x0100141e] };
-
- key <AC01> { [ 0x01001591, 0x0100148d ] };
- key <AC02> { [ 0x01001405, 0x01001433 ] };
- key <AC03> { [ 0x01001581, 0x01001548 ] };
- key <AC04> { [ 0x0100146f, 0x01001555 ] };
- key <AC05> { [ 0x01001450, parenleft ] };
- key <AC06> { [ 0x010014f1, parenright ] };
- key <AC07> { [ 0x010014a7, 0x0100152a ] };
- key <AC08> { [ 0x010014c4, 0x01001557 ] };
- key <AC09> { [ 0x010014d7, 0x010015a2 ] };
- key <AC10> { [ semicolon, colon ] };
- key <AC11> { [ apostrophe, quotedbl ] };
-
- key <AB01> { [ 0x01001593, 0x01001490 ] };
- key <AB02> { [ 0x0100140a, 0x01001438 ] };
- key <AB03> { [ 0x01001583, 0x0100154b ] };
- key <AB04> { [ 0x01001472, question ] };
- key <AB05> { [ 0x01001455, 0x0100157c ] };
- key <AB06> { [ 0x010014f4, 0x010014c7 ] };
- key <AB07> { [ 0x010014aa, 0x010014da ] };
- key <AB08> { [ comma, less ] };
- key <AB09> { [ period, greater ] };
- key <AB10> { [ 0x0100152d, 0x01001559 ] };
-
- key <TLDE> { [ 0x0100157b, 0x01001575 ] };
- key <LSGT> { [ 0x01001579, 0x01001577 ] };
- key <BKSL> { [ backslash, bar ] };
-
-// End alphanumeric section
-};
-
-partial
-xkb_symbols "multix" {
-
- name[Group1] = "Canada - Multilingual";
-
- key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
- key <TLDE> { [ slash, backslash, bar, NoSymbol,
- NoSymbol, hyphen ] };
- key <AE01> { [ 1, exclam, plusminus, NoSymbol,
- onesuperior, exclamdown ] };
- key <AE02> { [ 2, at, at, NoSymbol,
- twosuperior, NoSymbol ] };
- key <AE03> { [ 3, numbersign, sterling, NoSymbol,
- threesuperior, sterling ] };
- key <AE04> { [ 4, dollar, cent, NoSymbol,
- onequarter, currency ] };
- key <AE05> { [ 5, percent, currency, NoSymbol,
- onehalf, threeeighths ] };
- key <AE06> { [ 6, question, notsign, NoSymbol,
- threequarters, fiveeighths ] };
- key <AE07> { [ 7, ampersand, braceleft, NoSymbol,
- NoSymbol, seveneighths ] };
- key <AE08> { [ 8, asterisk, braceright, NoSymbol,
- NoSymbol, trademark ] };
- key <AE09> { [ 9, parenleft, bracketleft, NoSymbol,
- NoSymbol, plusminus ] };
- key <AE10> { [ 0, parenright, bracketright, NoSymbol ] };
- key <AE11> { [ minus, underscore, onehalf, NoSymbol,
- NoSymbol, questiondown] };
- key <AE12> { [ equal, plus, notsign, NoSymbol,
- dead_cedilla, dead_ogonek ] };
-
- key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
- key <AD01> { [ q, Q, NoSymbol, NoSymbol,
- NoSymbol, Greek_OMEGA ] };
- key <AD02> { [ w, W, NoSymbol, NoSymbol,
- lstroke, Lstroke ] };
- key <AD03> { [ e, E, NoSymbol, NoSymbol,
- oe, OE ] };
- key <AD04> { [ r, R, NoSymbol, NoSymbol,
- paragraph, registered ] };
- key <AD05> { [ t, T, NoSymbol, NoSymbol,
- tslash, Tslash ] };
- key <AD06> { [ y, Y, NoSymbol, NoSymbol,
- leftarrow, yen ] };
- key <AD07> { [ u, U, NoSymbol, NoSymbol,
- downarrow, uparrow ] };
- key <AD08> { [ i, I, NoSymbol, NoSymbol,
- rightarrow, idotless ] };
- key <AD09> { [ o, O, section, NoSymbol,
- oslash, Ooblique ] };
- key <AD10> { [ p, P, paragraph, NoSymbol,
- thorn, THORN ] };
-
- key.type[group1]="EIGHT_LEVEL";
- key <AD11> { [dead_circumflex, dead_diaeresis, dead_grave, NoSymbol,
- NoSymbol, dead_abovering ] };
-
- key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
- key <AD12> { [ ccedilla, Ccedilla, asciitilde, NoSymbol,
- dead_tilde, dead_macron ] };
-
- key <AC01> { [ a, A, NoSymbol, NoSymbol,
- ae, AE ] };
- key <AC02> { [ s, S, NoSymbol, NoSymbol,
- ssharp, section ] };
- key <AC03> { [ d, D, NoSymbol, NoSymbol,
- eth, ETH ] };
- key <AC04> { [ f, F, NoSymbol, NoSymbol,
- NoSymbol, ordfeminine ] };
- key <AC05> { [ g, G, NoSymbol, NoSymbol,
- eng, ENG ] };
- key <AC06> { [ h, H, NoSymbol, NoSymbol,
- hstroke, Hstroke ] };
- key <AC07> { [ j, J, NoSymbol, NoSymbol,
- U0133, U0132 ] };
- key <AC08> { [ k, K, NoSymbol, NoSymbol,
- kra, NoSymbol ] };
- key <AC09> { [ l, L, NoSymbol, NoSymbol,
- U0140, U013F ] };
-
- key.type[group1]="EIGHT_LEVEL";
- key <AC10> { [ semicolon, colon, degree, NoSymbol,
- dead_acute, dead_doubleacute ] };
-
- key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
- key <AC11> { [ egrave, Egrave, braceleft, NoSymbol,
- NoSymbol, dead_caron ] };
- key <BKSL> { [ agrave, Agrave, braceright, NoSymbol,
- NoSymbol, dead_breve ] };
-
- key <LSGT> { [ ugrave, Ugrave, degree, NoSymbol,
- NoSymbol, brokenbar ] };
-
- key.type[group1]="FOUR_LEVEL_SEMIALPHABETIC";
- key <AB01> { [ z, Z, guillemotleft, NoSymbol ] };
- key <AB02> { [ x, X, guillemotright, NoSymbol ] };
-
- key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
- key <AB03> { [ c, C, NoSymbol, NoSymbol,
- cent, copyright ] };
- key <AB04> { [ v, V, NoSymbol, NoSymbol,
- leftdoublequotemark, leftsinglequotemark ] };
- key <AB05> { [ b, B, NoSymbol, NoSymbol,
- rightdoublequotemark, rightsinglequotemark ] };
- key <AB06> { [ n, N, NoSymbol, NoSymbol,
- U0149, U266A ] };
- key <AB07> { [ m, M, mu, NoSymbol,
- mu, masculine ] };
- key <AB08> { [ comma, apostrophe, less, NoSymbol,
- Greek_horizbar, multiply ] };
- key <AB09> { [ period, quotedbl, greater, NoSymbol,
- periodcentered, division ] };
- key <AB10> { [ eacute, Eacute, dead_acute, NoSymbol,
- NoSymbol, dead_abovedot ] };
-
- include "nbsp(level3s)"
-
- modifier_map Control{ Control_L };
-
- include "level3(ralt_switch)"
- include "level5(rctrl_switch)"
-};
-
-// Secwepemctsin keyboard for X11
-// written by Neskie Manuel <neskiem@gmail.com>
-
-partial alphanumeric_keys
-xkb_symbols "shs" {
-
- include "us"
-
- name[Group1]= "Canada - Secwepemctsin";
-
- //Using Dead key to get COMBINING COMMA ABOVE for ejectives on
- //q, l, t, s, m, g, k, p, w, y, r
- //XCompose key is used for the other accute and grave.
-
- key <AB08> { [ comma, less, U0313 ] };
- key <AC01> { [ a, A, aacute, Aacute ] };
- key <AD03> { [ e, E, eacute, Eacute ] };
- key <AD07> { [ u, U, uacute, Uacute ] };
- key <AD08> { [ i, I, iacute, Iacute ] };
- key <AD09> { [ o, O, oacute, Oacute ] };
-
- include "level3(ralt_switch)"
- include "compose(rctrl)"
-};
-
-// OLPC Section
-xkb_symbols "olpc" {
-
- include "ca(fr)"
-
- key <AE02> { [ 2, quotedbl, ograve, Ograve ] };
- key <AE03> { [ 3, slash, at, VoidSymbol ] };
-
- key <AD03> { [ e, E, EuroSign, VoidSymbol] };
-
- key <AB09> { [ period, period, 0x1002010 ] };
-
- key <I219> { [ guillemotleft, guillemotright, degree, VoidSymbol ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "kut" {
-
- //Ejective U0313 and compose accents are from shs layout
- include "ca(shs)"
-
- name[Group1]= "Canada - Ktunaxa";
-
- // Alphanumeric section
-
- // Alveolar Click
- key <AD05> { [ t, T,U01C2 ,U01C2 ] };
-
- //Cent sign
- key <AB03> { [ c, C,U00A2,U00A2 ] };
-
- //Mid dot
- key <AB09> { [ period, greater,U00B7 ] };
-
- //Glottal stop
- key <AB10> { [ slash, question, U0294 ] };
-
- //COMBINING COMMA ABOVE RIGHT
- key <AC11> { [ apostrophe, quotedbl, U0315,U0315 ] };
-
- //MODIFIER LETTER RIGHT HALF RING
- key <AC10> { [ semicolon, colon,U02BE,U02BE ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "eng" {
- name[Group1] = "Canada - English";
- include "us(basic)"
-};
+default partial
+xkb_symbols "fr" {
+ name[Group1] = "French (Canada)";
+
+ key <TLDE> { [ numbersign, bar, backslash ] };
+ key <AE01> { [ 1, exclam, plusminus ] };
+ key <AE02> { [ 2, quotedbl, at ] };
+ key <AE03> { [ 3, slash, sterling ] };
+ key <AE04> { [ 4, dollar, cent ] };
+ key <AE05> { [ 5, percent, currency ] };
+ key <AE06> { [ 6, question, notsign ] };
+ key <AE07> { [ 7, ampersand, brokenbar ] };
+ key <AE08> { [ 8, asterisk, twosuperior ] };
+ key <AE09> { [ 9, parenleft, threesuperior ] };
+ key <AE10> { [ 0, parenright, onequarter ] };
+ key <AE11> { [ minus, underscore, onehalf ] };
+ key <AE12> { [ equal, plus, threequarters ] };
+
+ key <AD01> { [ q, Q ] };
+ key <AD02> { [ w, W ] };
+ key <AD03> { [ e, E ] };
+ key <AD04> { [ r, R ] };
+ key <AD05> { [ t, T ] };
+ key <AD06> { [ y, Y ] };
+ key <AD07> { [ u, U ] };
+ key <AD08> { [ i, I ] };
+ key <AD09> { [ o, O, section ] };
+ key <AD10> { [ p, P, paragraph ] };
+ key <AD11> { [dead_circumflex, dead_circumflex, bracketleft ] };
+ key <AD12> { [ dead_cedilla, dead_diaeresis, bracketright ] };
+
+ key <AC01> { [ a, A ] };
+ key <AC02> { [ s, S ] };
+ key <AC03> { [ d, D ] };
+ key <AC04> { [ f, F ] };
+ key <AC05> { [ g, G ] };
+ key <AC06> { [ h, H ] };
+ key <AC07> { [ j, J ] };
+ key <AC08> { [ k, K ] };
+ key <AC09> { [ l, L ] };
+ key <AC10> { [ semicolon, colon, asciitilde ] };
+ key <AC11> { [dead_grave, dead_grave, braceleft ] };
+ key <BKSL> { [ less, greater, braceright ] };
+
+ key <LSGT> { [guillemotleft, guillemotright, degree] };
+ key <AB01> { [ z, Z ] };
+ key <AB02> { [ x, X ] };
+ key <AB03> { [ c, C ] };
+ key <AB04> { [ v, V ] };
+ key <AB05> { [ b, B ] };
+ key <AB06> { [ n, N ] };
+ key <AB07> { [ m, M, mu ] };
+ key <AB08> { [ comma, apostrophe, macron ] };
+ key <AB09> { [ period, period, hyphen ] };
+ key <AB10> { [ eacute, Eacute, dead_acute ] };
+
+ key <SPCE> { [ space, space, nobreakspace ] };
+
+ include "level3(ralt_switch)"
+};
+
+xkb_symbols "fr-dvorak" {
+ name[Group1] = "French (Canada, Dvorak)";
+
+ key <TLDE> { [ numbersign, bar, backslash ] };
+ key <AE01> { [ 1, exclam, plusminus ] };
+ key <AE02> { [ 2, quotedbl, at ] };
+ key <AE03> { [ 3, slash, sterling ] };
+ key <AE04> { [ 4, dollar, cent ] };
+ key <AE05> { [ 5, percent, currency ] };
+ key <AE06> { [ 6, question, notsign ] };
+ key <AE07> { [ 7, ampersand, brokenbar ] };
+ key <AE08> { [ 8, asterisk, twosuperior ] };
+ key <AE09> { [ 9, parenleft, threesuperior ] };
+ key <AE10> { [ 0, parenright, onequarter ] };
+ key <AE11> { [dead_circumflex, dead_circumflex, bracketleft ] };
+ key <AE12> { [ dead_cedilla, dead_diaeresis, bracketright ] };
+
+ key <AD01> { [dead_grave, dead_grave, braceleft ] };
+ key <AD02> { [ comma, apostrophe, macron ] };
+ key <AD03> { [ period, period, hyphen ] };
+ key <AD04> { [ p, P, paragraph ] };
+ key <AD05> { [ y, Y ] };
+ key <AD06> { [ f, F ] };
+ key <AD07> { [ g, G ] };
+ key <AD08> { [ c, C ] };
+ key <AD09> { [ r, R ] };
+ key <AD10> { [ l, L ] };
+ key <AD11> { [ eacute, Eacute, dead_acute ] };
+ key <AD12> { [ equal, plus, threequarters ] };
+
+ key <AC01> { [ a, A ] };
+ key <AC02> { [ o, O, section ] };
+ key <AC03> { [ e, E ] };
+ key <AC04> { [ u, U ] };
+ key <AC05> { [ i, I ] };
+ key <AC06> { [ d, D ] };
+ key <AC07> { [ h, H ] };
+ key <AC08> { [ t, T ] };
+ key <AC09> { [ n, N ] };
+ key <AC10> { [ s, S ] };
+ key <AC11> { [ minus, underscore, onehalf ] };
+ key <BKSL> { [ less, greater, braceright ] };
+
+ key <LSGT> { [guillemotleft, guillemotright, degree] };
+ key <AB01> { [ semicolon, colon, asciitilde ] };
+ key <AB02> { [ q, Q ] };
+ key <AB03> { [ j, J ] };
+ key <AB04> { [ k, K ] };
+ key <AB05> { [ x, X ] };
+ key <AB06> { [ b, B ] };
+ key <AB07> { [ m, M, mu ] };
+ key <AB08> { [ w, W ] };
+ key <AB09> { [ v, V ] };
+ key <AB10> { [ z, Z ] };
+
+ key <SPCE> { [ space, space, nobreakspace ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial
+xkb_symbols "fr-legacy" {
+
+ name[Group1] = "French (Canada, legacy)";
+
+ include "ca(fr)"
+
+ key <TLDE> { [ degree, degree, notsign ] };
+ key <AE01> { [ 1, exclam, onesuperior ] };
+
+ key <AE03> { [ 3, numbersign, threesuperior ] };
+ key <AE04> { [ 4, dollar, onequarter ] };
+ key <AE05> { [ 5, percent, onehalf ] };
+ key <AE06> { [ 6, question, threequarters ] };
+ key <AE07> { [ 7, ampersand, braceleft ] };
+ key <AE08> { [ 8, asterisk, bracketleft ] };
+ key <AE09> { [ 9, parenleft, bracketright, plusminus ] };
+ key <AE10> { [ 0, parenright, braceright ] };
+ key <AE11> { [ minus, underscore, bar, questiondown] };
+ key <AE12> { [ equal, plus, dead_cedilla ] };
+
+ key <AD04> { [ r, R, paragraph, registered ] };
+ key <AD06> { [ y, Y, yen ] };
+ key <AD09> { [ o, O, oslash, Ooblique ] };
+ key <AD10> { [ p, P, thorn, THORN ] };
+ key <AD11> { [dead_circumflex, dead_circumflex, degree ] };
+ key <AD12> { [ ccedilla, Ccedilla, dead_tilde, dead_diaeresis ] };
+
+ key <AC01> { [ a, A, ae, AE ] };
+ key <AC02> { [ s, S, ssharp, section ] };
+ key <AC03> { [ d, D, eth, ETH ] };
+ key <AC04> { [ f, F, ordfeminine ] };
+ key <AC10> { [ semicolon, colon, dead_acute, dead_acute ] };
+ key <AC11> { [ egrave, Egrave ] };
+ key <BKSL> { [ agrave, Agrave, dead_grave ] };
+
+ key <LSGT> { [ ugrave, Ugrave, backslash, bar ] };
+ key <AB01> { [ z, Z, guillemotleft ] };
+ key <AB02> { [ x, X, guillemotright ] };
+ key <AB03> { [ c, C, cent, copyright ] };
+ key <AB07> { [ m, M, mu, masculine ] };
+ key <AB08> { [ comma, apostrophe, less ] };
+ key <AB09> { [ period, period, greater ] };
+ key <AB10> { [ eacute, Eacute, slash ] };
+};
+
+partial
+xkb_symbols "multi" {
+
+ name[Group1] = "Canadian Multilingual (first part)";
+
+ include "ca(fr)"
+
+ key <TLDE> { [ slash, backslash, bar ] };
+ key <AE01> { [ 1, exclam ] };
+ key <AE02> { [ 2, at ] };
+ key <AE03> { [ 3, numbersign ] };
+ key <AE04> { [ 4, dollar ] };
+ key <AE05> { [ 5, percent ] };
+ key <AE06> { [ 6, question ] };
+ key <AE07> { [ 7, ampersand, braceleft ] };
+ key <AE08> { [ 8, asterisk, braceright ] };
+ key <AE09> { [ 9, parenleft, bracketleft ] };
+ key <AE10> { [ 0, parenright, bracketright ] };
+ key <AE11> { [ minus, underscore ] };
+ key <AE12> { [ equal, plus, notsign ] };
+
+ key <AD09> { [ o, O ] };
+ key <AD10> { [ p, P ] };
+ key <AD11> { [dead_circumflex, dead_diaeresis, dead_grave ] };
+ key <AD12> { [ ccedilla, Ccedilla, asciitilde ] };
+
+ key <AC10> { [ semicolon, colon, degree ] };
+ key <AC11> { [ egrave, Egrave ] };
+ key <BKSL> { [ agrave, Agrave ] };
+
+ key <LSGT> { [ ugrave, Ugrave ] };
+ key <AB01> { [ z, Z, guillemotleft ] };
+ key <AB02> { [ x, X, guillemotright ] };
+ key <AB08> { [ comma, apostrophe, less ] };
+ key <AB09> { [ period, quotedbl, greater ] };
+ key <AB10> { [ eacute, Eacute ] };
+};
+
+partial
+xkb_symbols "multi-2gr" {
+
+ name[Group1] = "Canadian Multilingual (second part)";
+
+ key <TLDE> { [ NoSymbol, hyphen ] };
+ key <AE01> { [ onesuperior, exclamdown ] };
+ key <AE02> { [ twosuperior, NoSymbol ] };
+ key <AE03> { [ threesuperior, sterling ] };
+ key <AE04> { [ onequarter, currency ] };
+ key <AE05> { [ onehalf,threeeighths ] };
+ key <AE06> { [ threequarters, fiveeighths ] };
+ key <AE07> { [ NoSymbol,seveneighths ] };
+ key <AE08> { [ NoSymbol, trademark ] };
+ key <AE09> { [ NoSymbol, plusminus ] };
+
+ key <AE11> { [ NoSymbol, questiondown] };
+ key <AE12> { [ dead_cedilla, dead_ogonek ] };
+
+ key <AD01> { [ NoSymbol, Greek_OMEGA ] };
+ key <AD02> { [ lstroke, Lstroke ] };
+ key <AD03> { [ oe, OE ] };
+ key <AD04> { [ paragraph, registered ] };
+ key <AD05> { [ tslash, Tslash ] };
+ key <AD06> { [ leftarrow, yen ] };
+ key <AD07> { [ downarrow, uparrow ] };
+ key <AD08> { [ rightarrow, idotless ] };
+ key <AD09> { [ oslash, Ooblique ] };
+ key <AD10> { [ thorn, THORN ] };
+ key <AD11> { [ NoSymbol, dead_abovering ] };
+ key <AD12> { [ dead_tilde, dead_macron ] };
+
+ key <AC01> { [ ae, AE ] };
+ key <AC02> { [ ssharp, section ] };
+ key <AC03> { [ eth, ETH ] };
+ key <AC04> { [ NoSymbol, ordfeminine ] };
+ key <AC05> { [ eng, ENG ] };
+ key <AC06> { [ hstroke, Hstroke ] };
+ key <AC07> { [ U0133, U0132 ] };
+ key <AC08> { [ kra, NoSymbol ] };
+ key <AC09> { [ U0140, U013F ] };
+ key <AC10> { [ dead_acute, dead_doubleacute ] };
+ key <AC11> { [ NoSymbol, dead_caron ] };
+ key <BKSL> { [ NoSymbol, dead_breve ] };
+
+
+ key <LSGT> { [ NoSymbol, brokenbar ] };
+
+ key <AB03> { [ cent, copyright ] };
+ key <AB04> { [ leftdoublequotemark, leftsinglequotemark ] };
+ key <AB05> { [ rightdoublequotemark, rightsinglequotemark ] };
+ key <AB06> { [ U0149, U266A ] };
+ key <AB07> { [ mu, masculine ] };
+ key <AB08> { [ Greek_horizbar, multiply ] };
+ key <AB09> { [ periodcentered, division ] };
+ key <AB10> { [ NoSymbol, dead_abovedot ] };
+
+};
+
+// based on
+// Inuktitut keyboard for X11
+// written by Pablo Saratxaga <pablo@mandrakesoft.com>
+
+alphanumeric_keys
+xkb_symbols "ike" {
+
+ name[Group1]= "Inuktitut";
+
+ key <AE01> { [ 0x01001595, 1 ] };
+ key <AE02> { [ 0x01001449, 2 ] };
+ key <AE03> { [ 0x01001550, 3 ] };
+ key <AE04> { [ 0x01001483, 4 ] };
+ key <AE05> { [ 0x01001466, 5 ] };
+ key <AE06> { [ 0x01001585, 6 ] };
+ key <AE07> { [ 0x010014bb, 7 ] };
+ key <AE08> { [ 0x010014d0, 8 ] };
+ key <AE09> { [ 0x010014ea, 9 ] };
+ key <AE10> { [ 0x0100153e, 0 ] };
+ key <AE11> { [ minus, underscore ] };
+ key <AE12> { [ 0x0100155d, equal ] };
+
+ key <AD01> { [ 0x0100158f, 0x0100148b ] };
+ key <AD02> { [ 0x01001403, 0x01001431 ] };
+ key <AD03> { [ 0x0100157f, 0x01001546 ] };
+ key <AD04> { [ 0x0100146d, 0x01001596 ] };
+ key <AD05> { [ 0x0100144e, 0x01001671 ] };
+ key <AD06> { [ 0x010014ef, 0x01001673 ] };
+ key <AD07> { [ 0x010014a5, 0x01001675 ] };
+ key <AD08> { [ 0x010014c2, 0x010015a4 ] };
+ key <AD09> { [ 0x010014d5, 0x010015a0 ] };
+ key <AD10> { [ 0x01001528, 0x010015a6 ] };
+ key <AD11> { [ 0x010014a1, 0x01001505 ] };
+ key <AD12> { [ dead_abovedot, 0x0100141e] };
+
+ key <AC01> { [ 0x01001591, 0x0100148d ] };
+ key <AC02> { [ 0x01001405, 0x01001433 ] };
+ key <AC03> { [ 0x01001581, 0x01001548 ] };
+ key <AC04> { [ 0x0100146f, 0x01001555 ] };
+ key <AC05> { [ 0x01001450, parenleft ] };
+ key <AC06> { [ 0x010014f1, parenright ] };
+ key <AC07> { [ 0x010014a7, 0x0100152a ] };
+ key <AC08> { [ 0x010014c4, 0x01001557 ] };
+ key <AC09> { [ 0x010014d7, 0x010015a2 ] };
+ key <AC10> { [ semicolon, colon ] };
+ key <AC11> { [ apostrophe, quotedbl ] };
+
+ key <AB01> { [ 0x01001593, 0x01001490 ] };
+ key <AB02> { [ 0x0100140a, 0x01001438 ] };
+ key <AB03> { [ 0x01001583, 0x0100154b ] };
+ key <AB04> { [ 0x01001472, question ] };
+ key <AB05> { [ 0x01001455, 0x0100157c ] };
+ key <AB06> { [ 0x010014f4, 0x010014c7 ] };
+ key <AB07> { [ 0x010014aa, 0x010014da ] };
+ key <AB08> { [ comma, less ] };
+ key <AB09> { [ period, greater ] };
+ key <AB10> { [ 0x0100152d, 0x01001559 ] };
+
+ key <TLDE> { [ 0x0100157b, 0x01001575 ] };
+ key <LSGT> { [ 0x01001579, 0x01001577 ] };
+ key <BKSL> { [ backslash, bar ] };
+
+// End alphanumeric section
+};
+
+partial
+xkb_symbols "multix" {
+
+ name[Group1] = "Canadian Multilingual";
+
+ key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+ key <TLDE> { [ slash, backslash, bar, NoSymbol,
+ NoSymbol, hyphen ] };
+ key <AE01> { [ 1, exclam, plusminus, NoSymbol,
+ onesuperior, exclamdown ] };
+ key <AE02> { [ 2, at, at, NoSymbol,
+ twosuperior, NoSymbol ] };
+ key <AE03> { [ 3, numbersign, sterling, NoSymbol,
+ threesuperior, sterling ] };
+ key <AE04> { [ 4, dollar, cent, NoSymbol,
+ onequarter, currency ] };
+ key <AE05> { [ 5, percent, currency, NoSymbol,
+ onehalf, threeeighths ] };
+ key <AE06> { [ 6, question, notsign, NoSymbol,
+ threequarters, fiveeighths ] };
+ key <AE07> { [ 7, ampersand, braceleft, NoSymbol,
+ NoSymbol, seveneighths ] };
+ key <AE08> { [ 8, asterisk, braceright, NoSymbol,
+ NoSymbol, trademark ] };
+ key <AE09> { [ 9, parenleft, bracketleft, NoSymbol,
+ NoSymbol, plusminus ] };
+ key <AE10> { [ 0, parenright, bracketright, NoSymbol ] };
+ key <AE11> { [ minus, underscore, onehalf, NoSymbol,
+ NoSymbol, questiondown] };
+ key <AE12> { [ equal, plus, notsign, NoSymbol,
+ dead_cedilla, dead_ogonek ] };
+
+ key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+ key <AD01> { [ q, Q, NoSymbol, NoSymbol,
+ NoSymbol, Greek_OMEGA ] };
+ key <AD02> { [ w, W, NoSymbol, NoSymbol,
+ lstroke, Lstroke ] };
+ key <AD03> { [ e, E, NoSymbol, NoSymbol,
+ oe, OE ] };
+ key <AD04> { [ r, R, NoSymbol, NoSymbol,
+ paragraph, registered ] };
+ key <AD05> { [ t, T, NoSymbol, NoSymbol,
+ tslash, Tslash ] };
+ key <AD06> { [ y, Y, NoSymbol, NoSymbol,
+ leftarrow, yen ] };
+ key <AD07> { [ u, U, NoSymbol, NoSymbol,
+ downarrow, uparrow ] };
+ key <AD08> { [ i, I, NoSymbol, NoSymbol,
+ rightarrow, idotless ] };
+ key <AD09> { [ o, O, section, NoSymbol,
+ oslash, Ooblique ] };
+ key <AD10> { [ p, P, paragraph, NoSymbol,
+ thorn, THORN ] };
+
+ key.type[group1]="EIGHT_LEVEL";
+ key <AD11> { [dead_circumflex, dead_diaeresis, dead_grave, NoSymbol,
+ NoSymbol, dead_abovering ] };
+
+ key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+ key <AD12> { [ ccedilla, Ccedilla, asciitilde, NoSymbol,
+ dead_tilde, dead_macron ] };
+
+ key <AC01> { [ a, A, NoSymbol, NoSymbol,
+ ae, AE ] };
+ key <AC02> { [ s, S, NoSymbol, NoSymbol,
+ ssharp, section ] };
+ key <AC03> { [ d, D, NoSymbol, NoSymbol,
+ eth, ETH ] };
+ key <AC04> { [ f, F, NoSymbol, NoSymbol,
+ NoSymbol, ordfeminine ] };
+ key <AC05> { [ g, G, NoSymbol, NoSymbol,
+ eng, ENG ] };
+ key <AC06> { [ h, H, NoSymbol, NoSymbol,
+ hstroke, Hstroke ] };
+ key <AC07> { [ j, J, NoSymbol, NoSymbol,
+ U0133, U0132 ] };
+ key <AC08> { [ k, K, NoSymbol, NoSymbol,
+ kra, NoSymbol ] };
+ key <AC09> { [ l, L, NoSymbol, NoSymbol,
+ U0140, U013F ] };
+
+ key.type[group1]="EIGHT_LEVEL";
+ key <AC10> { [ semicolon, colon, degree, NoSymbol,
+ dead_acute, dead_doubleacute ] };
+
+ key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+ key <AC11> { [ egrave, Egrave, braceleft, NoSymbol,
+ NoSymbol, dead_caron ] };
+ key <BKSL> { [ agrave, Agrave, braceright, NoSymbol,
+ NoSymbol, dead_breve ] };
+
+ key <LSGT> { [ ugrave, Ugrave, degree, NoSymbol,
+ NoSymbol, brokenbar ] };
+
+ key.type[group1]="FOUR_LEVEL_SEMIALPHABETIC";
+ key <AB01> { [ z, Z, guillemotleft, NoSymbol ] };
+ key <AB02> { [ x, X, guillemotright, NoSymbol ] };
+
+ key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";
+ key <AB03> { [ c, C, NoSymbol, NoSymbol,
+ cent, copyright ] };
+ key <AB04> { [ v, V, NoSymbol, NoSymbol,
+ leftdoublequotemark, leftsinglequotemark ] };
+ key <AB05> { [ b, B, NoSymbol, NoSymbol,
+ rightdoublequotemark, rightsinglequotemark ] };
+ key <AB06> { [ n, N, NoSymbol, NoSymbol,
+ U0149, U266A ] };
+ key <AB07> { [ m, M, mu, NoSymbol,
+ mu, masculine ] };
+ key <AB08> { [ comma, apostrophe, less, NoSymbol,
+ Greek_horizbar, multiply ] };
+ key <AB09> { [ period, quotedbl, greater, NoSymbol,
+ periodcentered, division ] };
+ key <AB10> { [ eacute, Eacute, dead_acute, NoSymbol,
+ NoSymbol, dead_abovedot ] };
+
+ include "nbsp(level3s)"
+
+ modifier_map Control{ Control_L };
+
+ include "level3(ralt_switch)"
+ include "level5(rctrl_switch)"
+};
+
+// Secwepemctsin keyboard for X11
+// written by Neskie Manuel <neskiem@gmail.com>
+
+partial alphanumeric_keys
+xkb_symbols "shs" {
+
+ include "us"
+
+ name[Group1]= "Secwepemctsin";
+
+ //Using Dead key to get COMBINING COMMA ABOVE for ejectives on
+ //q, l, t, s, m, g, k, p, w, y, r
+ //XCompose key is used for the other accute and grave.
+
+ key <AB08> { [ comma, less, U0313 ] };
+ key <AC01> { [ a, A, aacute, Aacute ] };
+ key <AD03> { [ e, E, eacute, Eacute ] };
+ key <AD07> { [ u, U, uacute, Uacute ] };
+ key <AD08> { [ i, I, iacute, Iacute ] };
+ key <AD09> { [ o, O, oacute, Oacute ] };
+
+ include "level3(ralt_switch)"
+ include "compose(rctrl)"
+};
+
+// OLPC Section
+xkb_symbols "olpc" {
+
+ include "ca(fr)"
+
+ key <AE02> { [ 2, quotedbl, ograve, Ograve ] };
+ key <AE03> { [ 3, slash, at, VoidSymbol ] };
+
+ key <AD03> { [ e, E, EuroSign, VoidSymbol] };
+
+ key <AB09> { [ period, period, 0x1002010 ] };
+
+ key <I219> { [ guillemotleft, guillemotright, degree, VoidSymbol ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "kut" {
+
+ //Ejective U0313 and compose accents are from shs layout
+ include "ca(shs)"
+
+ name[Group1]= "Kutenai";
+
+ // Alphanumeric section
+
+ // Alveolar Click
+ key <AD05> { [ t, T,U01C2 ,U01C2 ] };
+
+ //Cent sign
+ key <AB03> { [ c, C,U00A2,U00A2 ] };
+
+ //Mid dot
+ key <AB09> { [ period, greater,U00B7 ] };
+
+ //Glottal stop
+ key <AB10> { [ slash, question, U0294 ] };
+
+ //COMBINING COMMA ABOVE RIGHT
+ key <AC11> { [ apostrophe, quotedbl, U0315,U0315 ] };
+
+ //MODIFIER LETTER RIGHT HALF RING
+ key <AC10> { [ semicolon, colon,U02BE,U02BE ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "eng" {
+ name[Group1] = "English (Canada)";
+ include "us(basic)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/cd b/xorg-server/xkeyboard-config/symbols/cd
index 5cc09a154..938bf2b69 100644
--- a/xorg-server/xkeyboard-config/symbols/cd
+++ b/xorg-server/xkeyboard-config/symbols/cd
@@ -1,69 +1,69 @@
-// based on us_intl keyboard map file and a Sinhala keyboard map
-// version 0.3
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- name[Group1]= "Congo, Democratic Republic of the";
-
- key.type[Group1] = "FOUR_LEVEL";
-
- // Alphanumeric section
- // TILDE, COMBINING TILDE
- key <TLDE> { [ grave, asciitilde, 0x01000303] };
- key <AE01> { [ ampersand, 1, numbersign ] };
- key <AE02> { [0x01000301, 2, at ] };
- key <AE03> { [0x01000300, 3, guillemotleft ] };
- key <AE04> { [ parenleft, 4, bracketleft ] };
- key <AE05> { [ braceleft, 5, less ] };
- key <AE06> { [ braceright, 6, greater ] };
- key <AE07> { [parenright, 7, bracketright ] };
- key <AE08> { [0x01000302, 8, guillemotright ] };
- key <AE09> { [0x0100030c, 9, 0x0100030D ] };
- key <AE10> { [0x01000308, 0, at ] };
- key <AE11> { [ minus, underscore, percent, degree ] };
- key <AE12> { [ equal, plus, multiply, division ] };
-
- key <AD01> { [ a, A, ae, AE ] };
- key <AD02> { [ z, Z ] };
- key <AD03> { [ e, E, oe, OE ] };
- key <AD04> { [ r, R ] };
- key <AD05> { [ t, T ] };
- key <AD06> { [ y, Y ] };
- key <AD07> { [ u, U, 0x01000289, 0x01001d7e ] };
- key <AD08> { [ i, I, 0x01000268, 0x01000197 ] };
- key <AD09> { [ o, O, oslash, Ooblique ] };
- key <AD10> { [ p, P ] };
- key <AD11> { [0x0100025B, 0x01000190, asciicircum ] };
- key <AD12> { [ asterisk, asciicircum, dollar ] };
-
- key <AC01> { [ q, Q ] };
- key <AC02> { [ s, S ] };
- key <AC03> { [ d, D ] };
- key <AC04> { [ f, F ] };
- key <AC05> { [ g, G ] };
- key <AC06> { [ h, H ] };
- key <AC07> { [ j, J ] };
- key <AC08> { [ k, K ] };
- key <AC09> { [ l, L ] };
- key <AC10> { [ m, M ] };
- key <AC11> { [0x01000254, 0x01000186 ] };
- key <LSGT> { [ backslash, bar ] };
-
- key <AB01> { [ w, W ] };
- key <AB02> { [ x, X ] };
- key <AB03> { [ c, C, ccedilla, Ccedilla ] };
- key <AB04> { [ v, V ] };
- key <AB05> { [ b, B ] };
- key <AB06> { [ n, N ] };
- key <AB07> { [ comma, question, 0x01000327 ] };
- key <AB08> { [ semicolon, period ] };
- key <AB09> { [ colon, slash ] };
- key <AB10> { [ exclam, apostrophe, 0x01002019 ] };
- key <BKSL> { [ quotedbl, backslash, bar ] };
-
- // SPACE, SPACE, SPACE, NO-BREAK SPACE, SPACE
- key <SPCE> { [ space, space, nobreakspace, 0x0100202F ] };
-
- include "level3(ralt_switch)"
-};
+// based on us_intl keyboard map file and a Sinhala keyboard map
+// version 0.3
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ name[Group1]= "French (Democratic Republic of the Congo)";
+
+ key.type[Group1] = "FOUR_LEVEL";
+
+ // Alphanumeric section
+ // TILDE, COMBINING TILDE
+ key <TLDE> { [ grave, asciitilde, 0x01000303] };
+ key <AE01> { [ ampersand, 1, numbersign ] };
+ key <AE02> { [0x01000301, 2, at ] };
+ key <AE03> { [0x01000300, 3, guillemotleft ] };
+ key <AE04> { [ parenleft, 4, bracketleft ] };
+ key <AE05> { [ braceleft, 5, less ] };
+ key <AE06> { [ braceright, 6, greater ] };
+ key <AE07> { [parenright, 7, bracketright ] };
+ key <AE08> { [0x01000302, 8, guillemotright ] };
+ key <AE09> { [0x0100030c, 9, 0x0100030D ] };
+ key <AE10> { [0x01000308, 0, at ] };
+ key <AE11> { [ minus, underscore, percent, degree ] };
+ key <AE12> { [ equal, plus, multiply, division ] };
+
+ key <AD01> { [ a, A, ae, AE ] };
+ key <AD02> { [ z, Z ] };
+ key <AD03> { [ e, E, oe, OE ] };
+ key <AD04> { [ r, R ] };
+ key <AD05> { [ t, T ] };
+ key <AD06> { [ y, Y ] };
+ key <AD07> { [ u, U, 0x01000289, 0x01001d7e ] };
+ key <AD08> { [ i, I, 0x01000268, 0x01000197 ] };
+ key <AD09> { [ o, O, oslash, Ooblique ] };
+ key <AD10> { [ p, P ] };
+ key <AD11> { [0x0100025B, 0x01000190, asciicircum ] };
+ key <AD12> { [ asterisk, asciicircum, dollar ] };
+
+ key <AC01> { [ q, Q ] };
+ key <AC02> { [ s, S ] };
+ key <AC03> { [ d, D ] };
+ key <AC04> { [ f, F ] };
+ key <AC05> { [ g, G ] };
+ key <AC06> { [ h, H ] };
+ key <AC07> { [ j, J ] };
+ key <AC08> { [ k, K ] };
+ key <AC09> { [ l, L ] };
+ key <AC10> { [ m, M ] };
+ key <AC11> { [0x01000254, 0x01000186 ] };
+ key <LSGT> { [ backslash, bar ] };
+
+ key <AB01> { [ w, W ] };
+ key <AB02> { [ x, X ] };
+ key <AB03> { [ c, C, ccedilla, Ccedilla ] };
+ key <AB04> { [ v, V ] };
+ key <AB05> { [ b, B ] };
+ key <AB06> { [ n, N ] };
+ key <AB07> { [ comma, question, 0x01000327 ] };
+ key <AB08> { [ semicolon, period ] };
+ key <AB09> { [ colon, slash ] };
+ key <AB10> { [ exclam, apostrophe, 0x01002019 ] };
+ key <BKSL> { [ quotedbl, backslash, bar ] };
+
+ // SPACE, SPACE, SPACE, NO-BREAK SPACE, SPACE
+ key <SPCE> { [ space, space, nobreakspace, 0x0100202F ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/cn b/xorg-server/xkeyboard-config/symbols/cn
index 0d62ab3d4..cceb64b7d 100644
--- a/xorg-server/xkeyboard-config/symbols/cn
+++ b/xorg-server/xkeyboard-config/symbols/cn
@@ -1,216 +1,216 @@
-//
-// Default Chinese is the same as American
-//
-partial default alphanumeric_keys
-xkb_symbols "basic" {
- include "us(basic)"
-
- name[Group1]= "China";
-};
-
-// Tibetan Standard Keyboard map for XKB/X.org
-//
-// Based on the CNS Tibetan keyboard as supported by Windows Vista
-// using information published by Tashi Tsering:
-// http://www.yalasoo.com/English/docs/yalasoo_en_MStbKb.html
-//
-// XKB version by Rich Felker <dalias@aerifal.cx>.
-//
-// The CNS Tibetan keyboard standard specifies 5 keyboards worth of keys,
-// but apparently makes no requirements about how each is accessed. Only
-// the first 2 are needed for native Tibetan text; the remainder are
-// filled with special symbols and letters for transliterating foreign
-// text. Further, CNS leaves the level of support of keyboards 2-5 as an
-// option to the implementor (despite the fact that #2 is absolutely
-// essential...). Windows Vista maps them as follows:
-//
-// 1. Unshifted
-// 2. "m"-key-prefixed
-// 3. Shift-modified
-// 4. Ctrl+Alt+Shift-modified
-// 5. "M"-key-prefixed
-//
-// I roughly copy the Windows Vista mapping, which was intended by the
-// designer of the keyboard, with the following exceptions:
-//
-// The fifth keyboard is almost empty and contains only precomposed forms
-// of subjoined letter characters whose use is strongly discouraged, and
-// is not implemented at all in this XKB map. The fourth is implemented,
-// but is accessed by an "m"-prefix (or "M"-prefix, for convenience)
-// followed by a Shift-modified key. This avoids stealing the Ctrl and Alt
-// keys, which belong to applications on *nix and not to the keyboard or
-// input method. Aside from enterring rare special symbols and
-// foreign-word-transliteration letters, these differences should not
-// affect users.
-//
-// Implementation notes:
-//
-// A latching ISO Level3 shift is used for the "m"-prefix modifier. In
-// principle moving it to other keys (e.g. AltGr) would be possible
-// according to user preference, but this is not practical for typing
-// Tibetan, since the subjoined consonants, of which Tibetan has 0-2 per
-// syllable, are accessed via this mechanism.
-//
-// One annoyance is that the latching Level3 shift fails to work if the
-// previous key is not yet released when "m" is pressed (the key release
-// event kills the latch). I consider this a bug in X and don't know an
-// easy way to work around it. Complain to the maintainers if it bothers
-// you and maybe they'll find a fix. You won't notice it unless you're
-// fast at typing Tibetan anyway.
-
-partial alphanumeric_keys
-xkb_symbols "tib" {
-
- name[Group1]= "China - Tibetan";
-
- key <TLDE> { [ 0x1000f68, 0x1000f01, 0x1000fb8, 0x1000f00 ] }; # ཨ ༁ ྸ ༀ
- key <AE01> { [ 0x1000f21, 0x1000f2a, 0x1000f04, 0x1000f76 ] }; # ༡ ༪ ༄ ྲྀ
- key <AE02> { [ 0x1000f22, 0x1000f2b, 0x1000f05, 0x1000f77 ] }; # ༢ ༫ ༅ ཷ
- key <AE03> { [ 0x1000f23, 0x1000f2c, 0x1000f7e, 0x1000f78 ] }; # ༣ ༬ ཾ ླྀ
- key <AE04> { [ 0x1000f24, 0x1000f2d, 0x1000f83, 0x1000f79 ] }; # ༤ ༭ ྃ ཹ
- key <AE05> { [ 0x1000f25, 0x1000f2e, 0x1000f37, 0x1000f81 ] }; # ༥ ༮ ༷ ཱྀ
- key <AE06> { [ 0x1000f26, 0x1000f2f, 0x1000f35, 0x1000f09 ] }; # ༦ ༯ ༵ ༉
- key <AE07> { [ 0x1000f27, 0x1000f30, 0x1000f7f, 0x1000f0a ] }; # ༧ ༰ ཿ ༊
- key <AE08> { [ 0x1000f28, 0x1000f31, 0x1000f14, 0x1000f0f ] }; # ༨ ༱ ༔ ༏
- key <AE09> { [ 0x1000f29, 0x1000f32, 0x1000f11, 0x1000f10 ] }; # ༩ ༲ ༑ ༐
- key <AE10> { [ 0x1000f20, 0x1000f33, 0x1000f08, 0x1000f12 ] }; # ༠ ༳ ༈ ༒
- key <AE11> { [ 0x1000f67, 0x1000f3c, 0x1000fb7, 0x1000f0c ] }; # ཧ ༼ ྷ ༌
- key <AE12> { [ 0x1000f5d, 0x1000f3d, 0x1000fba, 0x1000f13 ] }; # ཝ ༽ ྺ ༓
-
- key <AD01> { [ 0x1000f45, 0x1000f15, 0x1000f95, 0x1000f89 ] }; # ཅ ༕ ྕ ྉ
- key <AD02> { [ 0x1000f46, 0x1000f16, 0x1000f96, 0x1000f88 ] }; # ཆ ༖ ྖ ྈ
- key <AD03> { [ 0x1000f7a, 0x1000f17, 0x1000f7b, 0x1000fbe ] }; # ེ ༗ ཻ ྾
- key <AD04> { [ 0x1000f62, 0x1000fbc, 0x1000fb2, 0x1000f6a ] }; # ར ྼ ྲ ཪ
- key <AD05> { [ 0x1000f4f, 0x1000f4a, 0x1000f9f, 0x1000f9a ] }; # ཏ ཊ ྟ ྚ
- key <AD06> { [ 0x1000f61, 0x1000fbb, 0x1000fb1, 0x1000fbf ] }; # ཡ ྻ ྱ ྿
- key <AD07> { [ 0x1000f74, 0x1000f18, 0x1000fad, 0x1000f75 ] }; # ུ ༘ ྭ ཱུ
- key <AD08> { [ 0x1000f72, 0x1000f19, 0x1000f80, 0x1000f73 ] }; # ི ༙ ྀ ཱི
- key <AD09> { [ 0x1000f7c, 0x1000f1a, 0x1000f7d, 0x1000fc0 ] }; # ོ ༚ ཽ ࿀
- key <AD10> { [ 0x1000f55, 0x1000f1b, 0x1000fa5, 0x1000fc1 ] }; # ཕ ༛ ྥ ࿁
- key <AD11> { [ 0x1000f59, 0x1000f1c, 0x1000fa9, 0x1000fc2 ] }; # ཙ ༜ ྩ ࿂
- key <AD12> { [ 0x1000f5a, 0x1000f1d, 0x1000faa, 0x1000fc3 ] }; # ཚ ༝ ྪ ࿃
- key <BKSL> { [ 0x1000f5b, 0x1000f1e, 0x1000fab, 0x1000f5c ] }; # ཛ ༞ ྫ ཛྷ
-
- key <AC01> { [ 0x1000f60, 0x1000f71, 0x1000fb0, 0x1000fc4 ] }; # འ ཱ ྰ ࿄
- key <AC02> { [ 0x1000f66, 0x1000f1f, 0x1000fb6, 0x1000fc5 ] }; # ས ༟ ྶ ࿅
- key <AC03> { [ 0x1000f51, 0x1000f4c, 0x1000fa1, 0x1000f9c ] }; # ད ཌ ྡ ྜ
- key <AC04> { [ 0x1000f56, 0x1000f3e, 0x1000fa6, 0x1000f57 ] }; # བ ༾ ྦ བྷ
- key <AC05> { [ 0x1000f44, 0x1000f3f, 0x1000f94, 0x1000fc6 ] }; # ང ༿ ྔ ࿆
- key <AC06> { [ 0x1000f58, 0x1000fcf, 0x1000fa8, 0x1000fc7 ] }; # མ ࿏ ྨ ࿇
- key <AC07> { [ 0x1000f0b, 0x1000f02, 0x1000f84, 0x1000fc8 ] }; # ་ ༂ ྄ ࿈
- key <AC08> { [ 0x1000f42, 0x1000f03, 0x1000f92, 0x1000f43 ] }; # ག ༃ ྒ གྷ
- key <AC09> { [ 0x1000f63, 0x1000f06, 0x1000fb3, 0x1000fc9 ] }; # ལ ༆ ླ ࿉
- key <AC10> { [ 0x1000f5e, 0x1000f07, 0x1000fae, 0x1000fca ] }; # ཞ ༇ ྮ ࿊
- key <AC11> { [ 0x1000f0d, 0x1000f38, 0x1000f0e, 0x1000fcb ] }; # ། ༸ ༎ ࿋
-
- key <AB01> { [ 0x1000f5f, 0x1000f34, 0x1000faf, 0x1000fcc ] }; # ཟ ༴ ྯ ࿌
- key <AB02> { [ 0x1000f64, 0x1000f65, 0x1000fb4, 0x1000fb5 ] }; # ཤ ཥ ྴ ྵ
- key <AB03> { [ 0x1000f40, 0x1000f69, 0x1000f90, 0x1000fb9 ] }; # ཀ ཀྵ ྐ ྐྵ
- key <AB04> { [ 0x1000f41, 0x1000f87, 0x1000f91, 0x1000f36 ] }; # ཁ ྇ ྑ ༶
- key <AB05> { [ 0x1000f54, 0x1000f86, 0x1000fa4, 0x1000f82 ] }; # པ ྆ ྤ ྂ
- key <AB06> { [ 0x1000f53, 0x1000f4e, 0x1000fa3, 0x1000f9e ] }; # ན ཎ ྣ ྞ
- key <AB07> { [ ISO_Level3_Latch, ISO_Level3_Latch, 0x1000f85, 0x1000f52 ] }; # -བཏགས་ ྅ དྷ
- key <AB08> { [ 0x1000f50, 0x1000f4b, 0x1000fa0, 0x1000f9b ] }; # ཐ ཋ ྠ ྛ
- key <AB09> { [ 0x1000f47, 0x1000f3a, 0x1000f97, 0x1000f8b ] }; # ཇ ༺ ྗ ྋ
- key <AB10> { [ 0x1000f49, 0x1000f3b, 0x1000f99, 0x1000f8a ] }; # ཉ ༻ ྙ ྊ
-
-};
-
-// Tibetan Standard Keyboard with ASCII numerals
-//
-// Users may prefer that the numeral keys enter ASCII numerals instead of
-// Tibetan numerals, since the latter are not in modern use in Tibet.
-// This is especially an issue for laptop users who do not have a numeric
-// keypad by which to access the ASCII numerals, and who need to type
-// numbers to be interpreted by applications.
-//
-// In this mapping, the Shift-modified numeral keys generate Tibetan
-// numerals, since it was unclear to me that the standard Latin punctuation
-// keys would be any use without Latin letters. (One can imagine wanting to
-// type an email address using the @ sign, but as of present non-ASCII
-// email addresses are not possible.) This mapping may change in the future
-// if a clearly better use for the shifted numerals is pointed out by users.
-
-partial alphanumeric_keys
-xkb_symbols "tib_asciinum" {
- include "cn(tib)"
-
- name[Group1]= "China - Tibetan (with ASCII numerals)";
-
- key <AE01> { [ 1, 0x1000f21, 0x1000f04, 0x1000f76 ] }; # 1 ༡ ༄ ྲྀ
- key <AE02> { [ 2, 0x1000f22, 0x1000f05, 0x1000f77 ] }; # 2 ༢ ༅ ཷ
- key <AE03> { [ 3, 0x1000f23, 0x1000f7e, 0x1000f78 ] }; # 3 ༣ ཾ ླྀ
- key <AE04> { [ 4, 0x1000f24, 0x1000f83, 0x1000f79 ] }; # 4 ༤ ྃ ཹ
- key <AE05> { [ 5, 0x1000f25, 0x1000f37, 0x1000f81 ] }; # 5 ༥ ༷ ཱྀ
- key <AE06> { [ 6, 0x1000f26, 0x1000f35, 0x1000f09 ] }; # 6 ༦ ༵ ༉
- key <AE07> { [ 7, 0x1000f27, 0x1000f7f, 0x1000f0a ] }; # 7 ༧ ཿ ༊
- key <AE08> { [ 8, 0x1000f28, 0x1000f14, 0x1000f0f ] }; # 8 ༨ ༔ ༏
- key <AE09> { [ 9, 0x1000f29, 0x1000f11, 0x1000f10 ] }; # 9 ༩ ༑ ༐
- key <AE10> { [ 0, 0x1000f20, 0x1000f08, 0x1000f12 ] }; # 0 ༠ ༈ ༒
-};
-
-// Uyghur Standard Keyboard map for XKB/X.org
-//
-// xkb version originally created by
-// Abdusalam Abdurahman <Abdusalam.Abdurahman@gmail.com>
-// slightly corrected according to feedback and submitted by
-// Ekrem Tomur <ekrem.tomur@gmail.com>
-
-partial alphanumeric_keys
-xkb_symbols "uig" {
-
- name[Group1]= "China - Uyghur";
-
- key <TLDE> { [ grave, asciitilde ] };
-
- key <AE01> { [ 1, exclam ] }; // 1 !
- key <AE02> { [ 2, at ] }; // 2 @
- key <AE03> { [ 3, numbersign ] }; // 3 #
- key <AE04> { [ 4, dollar ] }; // 4 $
- key <AE05> { [ 5, percent ] }; // 5 %
- key <AE06> { [ 6, asciicircum ] }; // 6 ^
- key <AE07> { [ 7, ampersand ] }; // 7 &
- key <AE08> { [ 8, asterisk ] }; // 8 *
- key <AE09> { [ 9, parenright ] }; // 9 )
- key <AE10> { [ 0, parenleft ] }; // 0 (
- key <AE11> { [ minus, 0x1002014 ] }; // - —
- key <AE12> { [ equal, plus ] }; // = +
-
- key <AD01> { [ 0x1000686, VoidSymbol ] }; // چ
- key <AD02> { [ 0x10006cb, VoidSymbol ] }; // ۋ
- key <AD03> { [ 0x10006d0, VoidSymbol ] }; // ې
- key <AD04> { [ 0x1000631, VoidSymbol ] }; // ر
- key <AD05> { [ 0x100062a, VoidSymbol ] }; // ت
- key <AD06> { [ 0x100064a, VoidSymbol ] }; // ي
- key <AD07> { [ 0x10006c7, VoidSymbol ] }; // ۇ
- key <AD08> { [ 0x10006ad, VoidSymbol ] }; // ڭ
- key <AD09> { [ 0x1000648, VoidSymbol ] }; // و
- key <AD10> { [ 0x100067e, VoidSymbol ] }; // پ
- key <AD11> { [ bracketright, guillemotright ] }; // ] »
- key <AD12> { [ bracketleft, guillemotleft ] }; // [ «
-
- key <AC01> { [ 0x10006be, VoidSymbol ] }; // ھ
- key <AC02> { [ 0x1000633, VoidSymbol ] }; // س
- key <AC03> { [ 0x100062f, 0x1000698 ] }; // د ژ
- key <AC04> { [ 0x1000627, 0x1000641 ] }; // ا ف
- key <AC05> { [ 0x10006d5, 0x10006af ] }; // ە گ
- key <AC06> { [ 0x1000649, 0x100062e ] }; // ى خ
- key <AC07> { [ 0x1000642, 0x100062c ] }; // ق ج
- key <AC08> { [ 0x1000643, 0x10006c6 ] }; // ك ۆ
- key <AC09> { [ 0x1000644, VoidSymbol ] }; // ل
- key <AC10> { [ Arabic_semicolon, colon ] }; // ؛ :
- key <AC11> { [ apostrophe, quotedbl ] }; // ' "
-
- key <AB01> { [ 0x1000632, VoidSymbol ] }; // ز
- key <AB02> { [ 0x1000634, VoidSymbol ] }; // ش
- key <AB03> { [ 0x100063a, VoidSymbol ] }; // غ
- key <AB04> { [ 0x10006c8, VoidSymbol ] }; // ۈ
- key <AB05> { [ 0x1000628, VoidSymbol ] }; // ب
- key <AB06> { [ 0x1000646, VoidSymbol ] }; // ن
- key <AB07> { [ 0x1000645, VoidSymbol ] }; // م
- key <AB08> { [ Arabic_comma, 0x100203a ] }; // ، ›
- key <AB09> { [ period, 0x1002039 ] }; // . ‹
- key <AB10> { [ 0x1000626, Arabic_question_mark ] }; // ئ ؟
-
- key <BKSL> { [ backslash, bar ] }; // \ |
-};
+//
+// Default Chinese is the same as American
+//
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+ include "us(basic)"
+
+ name[Group1]= "Chinese";
+};
+
+// Tibetan Standard Keyboard map for XKB/X.org
+//
+// Based on the CNS Tibetan keyboard as supported by Windows Vista
+// using information published by Tashi Tsering:
+// http://www.yalasoo.com/English/docs/yalasoo_en_MStbKb.html
+//
+// XKB version by Rich Felker <dalias@aerifal.cx>.
+//
+// The CNS Tibetan keyboard standard specifies 5 keyboards worth of keys,
+// but apparently makes no requirements about how each is accessed. Only
+// the first 2 are needed for native Tibetan text; the remainder are
+// filled with special symbols and letters for transliterating foreign
+// text. Further, CNS leaves the level of support of keyboards 2-5 as an
+// option to the implementor (despite the fact that #2 is absolutely
+// essential...). Windows Vista maps them as follows:
+//
+// 1. Unshifted
+// 2. "m"-key-prefixed
+// 3. Shift-modified
+// 4. Ctrl+Alt+Shift-modified
+// 5. "M"-key-prefixed
+//
+// I roughly copy the Windows Vista mapping, which was intended by the
+// designer of the keyboard, with the following exceptions:
+//
+// The fifth keyboard is almost empty and contains only precomposed forms
+// of subjoined letter characters whose use is strongly discouraged, and
+// is not implemented at all in this XKB map. The fourth is implemented,
+// but is accessed by an "m"-prefix (or "M"-prefix, for convenience)
+// followed by a Shift-modified key. This avoids stealing the Ctrl and Alt
+// keys, which belong to applications on *nix and not to the keyboard or
+// input method. Aside from enterring rare special symbols and
+// foreign-word-transliteration letters, these differences should not
+// affect users.
+//
+// Implementation notes:
+//
+// A latching ISO Level3 shift is used for the "m"-prefix modifier. In
+// principle moving it to other keys (e.g. AltGr) would be possible
+// according to user preference, but this is not practical for typing
+// Tibetan, since the subjoined consonants, of which Tibetan has 0-2 per
+// syllable, are accessed via this mechanism.
+//
+// One annoyance is that the latching Level3 shift fails to work if the
+// previous key is not yet released when "m" is pressed (the key release
+// event kills the latch). I consider this a bug in X and don't know an
+// easy way to work around it. Complain to the maintainers if it bothers
+// you and maybe they'll find a fix. You won't notice it unless you're
+// fast at typing Tibetan anyway.
+
+partial alphanumeric_keys
+xkb_symbols "tib" {
+
+ name[Group1]= "Tibetan";
+
+ key <TLDE> { [ 0x1000f68, 0x1000f01, 0x1000fb8, 0x1000f00 ] }; # ཨ ༁ ྸ ༀ
+ key <AE01> { [ 0x1000f21, 0x1000f2a, 0x1000f04, 0x1000f76 ] }; # ༡ ༪ ༄ ྲྀ
+ key <AE02> { [ 0x1000f22, 0x1000f2b, 0x1000f05, 0x1000f77 ] }; # ༢ ༫ ༅ ཷ
+ key <AE03> { [ 0x1000f23, 0x1000f2c, 0x1000f7e, 0x1000f78 ] }; # ༣ ༬ ཾ ླྀ
+ key <AE04> { [ 0x1000f24, 0x1000f2d, 0x1000f83, 0x1000f79 ] }; # ༤ ༭ ྃ ཹ
+ key <AE05> { [ 0x1000f25, 0x1000f2e, 0x1000f37, 0x1000f81 ] }; # ༥ ༮ ༷ ཱྀ
+ key <AE06> { [ 0x1000f26, 0x1000f2f, 0x1000f35, 0x1000f09 ] }; # ༦ ༯ ༵ ༉
+ key <AE07> { [ 0x1000f27, 0x1000f30, 0x1000f7f, 0x1000f0a ] }; # ༧ ༰ ཿ ༊
+ key <AE08> { [ 0x1000f28, 0x1000f31, 0x1000f14, 0x1000f0f ] }; # ༨ ༱ ༔ ༏
+ key <AE09> { [ 0x1000f29, 0x1000f32, 0x1000f11, 0x1000f10 ] }; # ༩ ༲ ༑ ༐
+ key <AE10> { [ 0x1000f20, 0x1000f33, 0x1000f08, 0x1000f12 ] }; # ༠ ༳ ༈ ༒
+ key <AE11> { [ 0x1000f67, 0x1000f3c, 0x1000fb7, 0x1000f0c ] }; # ཧ ༼ ྷ ༌
+ key <AE12> { [ 0x1000f5d, 0x1000f3d, 0x1000fba, 0x1000f13 ] }; # ཝ ༽ ྺ ༓
+
+ key <AD01> { [ 0x1000f45, 0x1000f15, 0x1000f95, 0x1000f89 ] }; # ཅ ༕ ྕ ྉ
+ key <AD02> { [ 0x1000f46, 0x1000f16, 0x1000f96, 0x1000f88 ] }; # ཆ ༖ ྖ ྈ
+ key <AD03> { [ 0x1000f7a, 0x1000f17, 0x1000f7b, 0x1000fbe ] }; # ེ ༗ ཻ ྾
+ key <AD04> { [ 0x1000f62, 0x1000fbc, 0x1000fb2, 0x1000f6a ] }; # ར ྼ ྲ ཪ
+ key <AD05> { [ 0x1000f4f, 0x1000f4a, 0x1000f9f, 0x1000f9a ] }; # ཏ ཊ ྟ ྚ
+ key <AD06> { [ 0x1000f61, 0x1000fbb, 0x1000fb1, 0x1000fbf ] }; # ཡ ྻ ྱ ྿
+ key <AD07> { [ 0x1000f74, 0x1000f18, 0x1000fad, 0x1000f75 ] }; # ུ ༘ ྭ ཱུ
+ key <AD08> { [ 0x1000f72, 0x1000f19, 0x1000f80, 0x1000f73 ] }; # ི ༙ ྀ ཱི
+ key <AD09> { [ 0x1000f7c, 0x1000f1a, 0x1000f7d, 0x1000fc0 ] }; # ོ ༚ ཽ ࿀
+ key <AD10> { [ 0x1000f55, 0x1000f1b, 0x1000fa5, 0x1000fc1 ] }; # ཕ ༛ ྥ ࿁
+ key <AD11> { [ 0x1000f59, 0x1000f1c, 0x1000fa9, 0x1000fc2 ] }; # ཙ ༜ ྩ ࿂
+ key <AD12> { [ 0x1000f5a, 0x1000f1d, 0x1000faa, 0x1000fc3 ] }; # ཚ ༝ ྪ ࿃
+ key <BKSL> { [ 0x1000f5b, 0x1000f1e, 0x1000fab, 0x1000f5c ] }; # ཛ ༞ ྫ ཛྷ
+
+ key <AC01> { [ 0x1000f60, 0x1000f71, 0x1000fb0, 0x1000fc4 ] }; # འ ཱ ྰ ࿄
+ key <AC02> { [ 0x1000f66, 0x1000f1f, 0x1000fb6, 0x1000fc5 ] }; # ས ༟ ྶ ࿅
+ key <AC03> { [ 0x1000f51, 0x1000f4c, 0x1000fa1, 0x1000f9c ] }; # ད ཌ ྡ ྜ
+ key <AC04> { [ 0x1000f56, 0x1000f3e, 0x1000fa6, 0x1000f57 ] }; # བ ༾ ྦ བྷ
+ key <AC05> { [ 0x1000f44, 0x1000f3f, 0x1000f94, 0x1000fc6 ] }; # ང ༿ ྔ ࿆
+ key <AC06> { [ 0x1000f58, 0x1000fcf, 0x1000fa8, 0x1000fc7 ] }; # མ ࿏ ྨ ࿇
+ key <AC07> { [ 0x1000f0b, 0x1000f02, 0x1000f84, 0x1000fc8 ] }; # ་ ༂ ྄ ࿈
+ key <AC08> { [ 0x1000f42, 0x1000f03, 0x1000f92, 0x1000f43 ] }; # ག ༃ ྒ གྷ
+ key <AC09> { [ 0x1000f63, 0x1000f06, 0x1000fb3, 0x1000fc9 ] }; # ལ ༆ ླ ࿉
+ key <AC10> { [ 0x1000f5e, 0x1000f07, 0x1000fae, 0x1000fca ] }; # ཞ ༇ ྮ ࿊
+ key <AC11> { [ 0x1000f0d, 0x1000f38, 0x1000f0e, 0x1000fcb ] }; # ། ༸ ༎ ࿋
+
+ key <AB01> { [ 0x1000f5f, 0x1000f34, 0x1000faf, 0x1000fcc ] }; # ཟ ༴ ྯ ࿌
+ key <AB02> { [ 0x1000f64, 0x1000f65, 0x1000fb4, 0x1000fb5 ] }; # ཤ ཥ ྴ ྵ
+ key <AB03> { [ 0x1000f40, 0x1000f69, 0x1000f90, 0x1000fb9 ] }; # ཀ ཀྵ ྐ ྐྵ
+ key <AB04> { [ 0x1000f41, 0x1000f87, 0x1000f91, 0x1000f36 ] }; # ཁ ྇ ྑ ༶
+ key <AB05> { [ 0x1000f54, 0x1000f86, 0x1000fa4, 0x1000f82 ] }; # པ ྆ ྤ ྂ
+ key <AB06> { [ 0x1000f53, 0x1000f4e, 0x1000fa3, 0x1000f9e ] }; # ན ཎ ྣ ྞ
+ key <AB07> { [ ISO_Level3_Latch, ISO_Level3_Latch, 0x1000f85, 0x1000f52 ] }; # -བཏགས་ ྅ དྷ
+ key <AB08> { [ 0x1000f50, 0x1000f4b, 0x1000fa0, 0x1000f9b ] }; # ཐ ཋ ྠ ྛ
+ key <AB09> { [ 0x1000f47, 0x1000f3a, 0x1000f97, 0x1000f8b ] }; # ཇ ༺ ྗ ྋ
+ key <AB10> { [ 0x1000f49, 0x1000f3b, 0x1000f99, 0x1000f8a ] }; # ཉ ༻ ྙ ྊ
+
+};
+
+// Tibetan Standard Keyboard with ASCII numerals
+//
+// Users may prefer that the numeral keys enter ASCII numerals instead of
+// Tibetan numerals, since the latter are not in modern use in Tibet.
+// This is especially an issue for laptop users who do not have a numeric
+// keypad by which to access the ASCII numerals, and who need to type
+// numbers to be interpreted by applications.
+//
+// In this mapping, the Shift-modified numeral keys generate Tibetan
+// numerals, since it was unclear to me that the standard Latin punctuation
+// keys would be any use without Latin letters. (One can imagine wanting to
+// type an email address using the @ sign, but as of present non-ASCII
+// email addresses are not possible.) This mapping may change in the future
+// if a clearly better use for the shifted numerals is pointed out by users.
+
+partial alphanumeric_keys
+xkb_symbols "tib_asciinum" {
+ include "cn(tib)"
+
+ name[Group1]= "Tibetan (with ASCII numerals)";
+
+ key <AE01> { [ 1, 0x1000f21, 0x1000f04, 0x1000f76 ] }; # 1 ༡ ༄ ྲྀ
+ key <AE02> { [ 2, 0x1000f22, 0x1000f05, 0x1000f77 ] }; # 2 ༢ ༅ ཷ
+ key <AE03> { [ 3, 0x1000f23, 0x1000f7e, 0x1000f78 ] }; # 3 ༣ ཾ ླྀ
+ key <AE04> { [ 4, 0x1000f24, 0x1000f83, 0x1000f79 ] }; # 4 ༤ ྃ ཹ
+ key <AE05> { [ 5, 0x1000f25, 0x1000f37, 0x1000f81 ] }; # 5 ༥ ༷ ཱྀ
+ key <AE06> { [ 6, 0x1000f26, 0x1000f35, 0x1000f09 ] }; # 6 ༦ ༵ ༉
+ key <AE07> { [ 7, 0x1000f27, 0x1000f7f, 0x1000f0a ] }; # 7 ༧ ཿ ༊
+ key <AE08> { [ 8, 0x1000f28, 0x1000f14, 0x1000f0f ] }; # 8 ༨ ༔ ༏
+ key <AE09> { [ 9, 0x1000f29, 0x1000f11, 0x1000f10 ] }; # 9 ༩ ༑ ༐
+ key <AE10> { [ 0, 0x1000f20, 0x1000f08, 0x1000f12 ] }; # 0 ༠ ༈ ༒
+};
+
+// Uyghur Standard Keyboard map for XKB/X.org
+//
+// xkb version originally created by
+// Abdusalam Abdurahman <Abdusalam.Abdurahman@gmail.com>
+// slightly corrected according to feedback and submitted by
+// Ekrem Tomur <ekrem.tomur@gmail.com>
+
+partial alphanumeric_keys
+xkb_symbols "uig" {
+
+ name[Group1]= "Uyghur";
+
+ key <TLDE> { [ grave, asciitilde ] };
+
+ key <AE01> { [ 1, exclam ] }; // 1 !
+ key <AE02> { [ 2, at ] }; // 2 @
+ key <AE03> { [ 3, numbersign ] }; // 3 #
+ key <AE04> { [ 4, dollar ] }; // 4 $
+ key <AE05> { [ 5, percent ] }; // 5 %
+ key <AE06> { [ 6, asciicircum ] }; // 6 ^
+ key <AE07> { [ 7, ampersand ] }; // 7 &
+ key <AE08> { [ 8, asterisk ] }; // 8 *
+ key <AE09> { [ 9, parenright ] }; // 9 )
+ key <AE10> { [ 0, parenleft ] }; // 0 (
+ key <AE11> { [ minus, 0x1002014 ] }; // - —
+ key <AE12> { [ equal, plus ] }; // = +
+
+ key <AD01> { [ 0x1000686, VoidSymbol ] }; // چ
+ key <AD02> { [ 0x10006cb, VoidSymbol ] }; // ۋ
+ key <AD03> { [ 0x10006d0, VoidSymbol ] }; // ې
+ key <AD04> { [ 0x1000631, VoidSymbol ] }; // ر
+ key <AD05> { [ 0x100062a, VoidSymbol ] }; // ت
+ key <AD06> { [ 0x100064a, VoidSymbol ] }; // ي
+ key <AD07> { [ 0x10006c7, VoidSymbol ] }; // ۇ
+ key <AD08> { [ 0x10006ad, VoidSymbol ] }; // ڭ
+ key <AD09> { [ 0x1000648, VoidSymbol ] }; // و
+ key <AD10> { [ 0x100067e, VoidSymbol ] }; // پ
+ key <AD11> { [ bracketright, guillemotright ] }; // ] »
+ key <AD12> { [ bracketleft, guillemotleft ] }; // [ «
+
+ key <AC01> { [ 0x10006be, VoidSymbol ] }; // ھ
+ key <AC02> { [ 0x1000633, VoidSymbol ] }; // س
+ key <AC03> { [ 0x100062f, 0x1000698 ] }; // د ژ
+ key <AC04> { [ 0x1000627, 0x1000641 ] }; // ا ف
+ key <AC05> { [ 0x10006d5, 0x10006af ] }; // ە گ
+ key <AC06> { [ 0x1000649, 0x100062e ] }; // ى خ
+ key <AC07> { [ 0x1000642, 0x100062c ] }; // ق ج
+ key <AC08> { [ 0x1000643, 0x10006c6 ] }; // ك ۆ
+ key <AC09> { [ 0x1000644, VoidSymbol ] }; // ل
+ key <AC10> { [ Arabic_semicolon, colon ] }; // ؛ :
+ key <AC11> { [ apostrophe, quotedbl ] }; // ' "
+
+ key <AB01> { [ 0x1000632, VoidSymbol ] }; // ز
+ key <AB02> { [ 0x1000634, VoidSymbol ] }; // ش
+ key <AB03> { [ 0x100063a, VoidSymbol ] }; // غ
+ key <AB04> { [ 0x10006c8, VoidSymbol ] }; // ۈ
+ key <AB05> { [ 0x1000628, VoidSymbol ] }; // ب
+ key <AB06> { [ 0x1000646, VoidSymbol ] }; // ن
+ key <AB07> { [ 0x1000645, VoidSymbol ] }; // م
+ key <AB08> { [ Arabic_comma, 0x100203a ] }; // ، ›
+ key <AB09> { [ period, 0x1002039 ] }; // . ‹
+ key <AB10> { [ 0x1000626, Arabic_question_mark ] }; // ئ ؟
+
+ key <BKSL> { [ backslash, bar ] }; // \ |
+};
diff --git a/xorg-server/xkeyboard-config/symbols/cz b/xorg-server/xkeyboard-config/symbols/cz
index d53b8364b..2d8680ca9 100644
--- a/xorg-server/xkeyboard-config/symbols/cz
+++ b/xorg-server/xkeyboard-config/symbols/cz
@@ -1,170 +1,170 @@
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- // This layout conforms to a new cz compromise standard designed
- // to satisfy most unix, windows and mac users.
- // 2001 by Kamil Toman <ktoman@email.cz>
-
- include "latin"
-
- name[Group1]= "Czechia";
-
- key <TLDE> { [ semicolon, dead_abovering, grave, asciitilde ] };
- key <AE01> { [ plus, 1, exclam, dead_tilde ] };
- key <AE02> { [ ecaron, 2, at, dead_caron ] };
- key <AE03> { [ scaron, 3, numbersign, dead_circumflex ] };
- key <AE04> { [ ccaron, 4, dollar, dead_breve ] };
- key <AE05> { [ rcaron, 5, percent, dead_abovering ] };
- key <AE06> { [ zcaron, 6, asciicircum, dead_ogonek ] };
- key <AE07> { [ yacute, 7, ampersand, dead_grave ] };
- key <AE08> { [ aacute, 8, asterisk, dead_abovedot] };
- key <AE09> { [ iacute, 9, braceleft, dead_acute ] };
- key <AE10> { [ eacute, 0, braceright, dead_doubleacute ] };
- key <AE11> { [ equal, percent, NoSymbol, dead_diaeresis ] };
- key <AE12> { [dead_acute, dead_caron, dead_macron, dead_cedilla ] };
-
- key <AD01> { [ q, Q, backslash, NoSymbol ] };
- key <AD02> { [ w, W, bar, Nosymbol ] };
- key <AD03> { [ e, E, EuroSign, NoSymbol ] };
- key <AD04> { [ r, R, NoSymbol, NoSymbol ] };
- key <AD05> { [ t, T, NoSymbol, NoSymbol ] };
- key <AD06> { [ z, Z, NoSymbol, NoSymbol ] };
- key <AD07> { [ u, U, NoSymbol, NoSymbol ] };
- key <AD08> { [ i, I, NoSymbol, NoSymbol ] };
- key <AD09> { [ o, O, NoSymbol, NoSymbol ] };
- key <AD10> { [ p, P, NoSymbol, NoSymbol ] };
-
- key <AD11> { [ uacute, slash, bracketleft, division ] };
- key <AD12> { [parenright, parenleft, bracketright, multiply ] };
-
- key <AC01> { [ a, A, asciitilde, NoSymbol ] };
- key <AC02> { [ s, S, dstroke, NoSymbol ] };
- key <AC03> { [ d, D, Dstroke, NoSymbol ] };
- key <AC04> { [ f, F, bracketleft, NoSymbol ] };
- key <AC05> { [ g, G, bracketright, NoSymbol ] };
- key <AC06> { [ h, H, grave, NoSymbol ] };
- key <AC07> { [ j, J, apostrophe, NoSymbol ] };
- key <AC08> { [ k, K, lstroke, NoSymbol ] };
- key <AC09> { [ l, L, Lstroke, NoSymbol ] };
-
- key <AC10> { [ uring, quotedbl, dollar, NoSymbol ] };
- key <AC11> { [ section, exclam, apostrophe, ssharp ] };
- key <AC12> { [ EuroSign, dead_diaeresis, NoSymbol, NoSymbol ] };
- key <BKSL> { [dead_diaeresis, apostrophe, backslash, bar ] };
-
- key <LSGT> { [ backslash, bar, slash, NoSymbol ] };
- key <AB01> { [ y, Y, degree, NoSymbol ] };
- key <AB02> { [ x, X, numbersign, Nosymbol ] };
- key <AB03> { [ c, C, ampersand, NoSymbol ] };
- key <AB04> { [ v, V, at, NoSymbol ] };
- key <AB05> { [ b, B, braceleft, NoSymbol ] };
- key <AB06> { [ n, N, braceright, NoSymbol ] };
- key <AB07> { [ m, M, asciicircum, NoSymbol ] };
- key <AB08> { [ comma, question, less, NoSymbol ] };
- key <AB09> { [ period, colon, greater, NoSymbol ] };
- key <AB10> { [ minus, underscore, asterisk, NoSymbol ] };
-
- key <SPCE> { [ space, space, space, space ] };
-
- include "level3(ralt_switch)"
-};
-
-// Use <BKSL> instead of <LSGT> (useful for keyboard without <LSGT> key)
-xkb_symbols "bksl" {
- include "cz(basic)"
- name[Group1]= "Czechia - With <\|> key";
-
- key <BKSL> { [ backslash, bar, slash, NoSymbol ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "qwerty" {
-
- // This layout should work exactly as a cz with the exception
- // of 'Z' and 'Y' keys, which are in the qwerty style (ie. swapped).
- // 2001 by Kamil Toman <ktoman@email.cz>
-
- include "cz(basic)"
- name[Group1]= "Czechia - qwerty";
-
- key <AB01> { [ z, Z, degree, NoSymbol ] };
- key <AD06> { [ y, Y, NoSymbol, NoSymbol ] };
-};
-
-// Use <BKSL> instead of <LSGT> (useful for keyboard without <LSGT> key)
-xkb_symbols "qwerty_bksl" {
- include "cz(qwerty)"
-
- name[Group1]= "Czechia - qwerty, extended Backslash";
-
- key <BKSL> { [ backslash, bar, slash, NoSymbol ] };
-};
-
-partial alphanumeric_keys alternate_group
-xkb_symbols "ucw" {
-
- // This layout is usually used as the second group, it contains
- // accented characters only, no 'latin' set.
- // 2008 by Milan Vancura <mvancura@suse.cz>
-
- name[Group1]= "Czechia - UCW layout (accented letters only)";
-
- key <AB01> { [zcaron, Zcaron ] };
- key <AB02> { [ssharp ] };
- key <AB03> { [ccaron, Ccaron ] };
- key <AB04> { [ccedilla, Ccedilla ] };
- key <AB05> { [ntilde, Ntilde ] };
- key <AB06> { [ncaron, Ncaron ] };
- key <AB07> { [lacute, Lacute ] };
-
- key <AC01> { [aacute, Aacute ] };
- key <AC02> { [scaron, Scaron ] };
- key <AC03> { [dcaron, Dcaron ] };
- key <AC04> { [ediaeresis, Ediaeresis ] };
- key <AC05> { [racute, Racute ] };
- key <AC06> { [uacute, Uacute ] };
- key <AC07> { [udiaeresis, Udiaeresis ] };
- key <AC08> { [ocircumflex, Ocircumflex ] };
- key <AC09> { [lcaron, Lcaron ] };
-
- key <AD01> { [adiaeresis, Adiaeresis ] };
- key <AD02> { [ecaron, Ecaron ] };
- key <AD03> { [eacute, Eacute ] };
- key <AD04> { [rcaron, Rcaron ] };
- key <AD05> { [tcaron, Tcaron ] };
- key <AD06> { [yacute, Yacute ] };
- key <AD07> { [uring, Uring ] };
- key <AD08> { [iacute, Iacute ] };
- key <AD09> { [oacute, Oacute ] };
- key <AD10> { [odiaeresis, Odiaeresis ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "dvorak-ucw" {
-
- // US Dvorak layout extend with UCW - AltGr produces accented characters
-
- include "us(dvorak)"
-
- name[Group1]= "Czechia - US Dvorak with CZ UCW support";
-
- key <AB03> { [ j, J, eacute, Eacute ] };
- key <AB04> { [ k, K, uacute, Uacute ] };
- key <AB10> { [ z, Z, zcaron, Zcaron ] };
-
- key <AC01> { [ a, A, aacute, Aacute ] };
- key <AC02> { [ o, O, oacute, Oacute ] };
- key <AC03> { [ e, E, ecaron, Ecaron ] };
- key <AC04> { [ u, U, uring, Uring ] };
- key <AC05> { [ i, I, iacute, Iacute ] };
- key <AC06> { [ d, D, dcaron, Dcaron ] };
- key <AC08> { [ t, T, tcaron, Tcaron ] };
- key <AC09> { [ n, N, ncaron, Ncaron ] };
- key <AC10> { [ s, S, scaron, Scaron ] };
-
- key <AD05> { [ y, Y, yacute, Yacute ] };
- key <AD08> { [ c, C, ccaron, Ccaron ] };
- key <AD09> { [ r, R, rcaron, Rcaron ] };
-
- include "level3(ralt_switch)"
-};
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ // This layout conforms to a new cz compromise standard designed
+ // to satisfy most unix, windows and mac users.
+ // 2001 by Kamil Toman <ktoman@email.cz>
+
+ include "latin"
+
+ name[Group1]= "Czech";
+
+ key <TLDE> { [ semicolon, dead_abovering, grave, asciitilde ] };
+ key <AE01> { [ plus, 1, exclam, dead_tilde ] };
+ key <AE02> { [ ecaron, 2, at, dead_caron ] };
+ key <AE03> { [ scaron, 3, numbersign, dead_circumflex ] };
+ key <AE04> { [ ccaron, 4, dollar, dead_breve ] };
+ key <AE05> { [ rcaron, 5, percent, dead_abovering ] };
+ key <AE06> { [ zcaron, 6, asciicircum, dead_ogonek ] };
+ key <AE07> { [ yacute, 7, ampersand, dead_grave ] };
+ key <AE08> { [ aacute, 8, asterisk, dead_abovedot] };
+ key <AE09> { [ iacute, 9, braceleft, dead_acute ] };
+ key <AE10> { [ eacute, 0, braceright, dead_doubleacute ] };
+ key <AE11> { [ equal, percent, NoSymbol, dead_diaeresis ] };
+ key <AE12> { [dead_acute, dead_caron, dead_macron, dead_cedilla ] };
+
+ key <AD01> { [ q, Q, backslash, NoSymbol ] };
+ key <AD02> { [ w, W, bar, Nosymbol ] };
+ key <AD03> { [ e, E, EuroSign, NoSymbol ] };
+ key <AD04> { [ r, R, NoSymbol, NoSymbol ] };
+ key <AD05> { [ t, T, NoSymbol, NoSymbol ] };
+ key <AD06> { [ z, Z, NoSymbol, NoSymbol ] };
+ key <AD07> { [ u, U, NoSymbol, NoSymbol ] };
+ key <AD08> { [ i, I, NoSymbol, NoSymbol ] };
+ key <AD09> { [ o, O, NoSymbol, NoSymbol ] };
+ key <AD10> { [ p, P, NoSymbol, NoSymbol ] };
+
+ key <AD11> { [ uacute, slash, bracketleft, division ] };
+ key <AD12> { [parenright, parenleft, bracketright, multiply ] };
+
+ key <AC01> { [ a, A, asciitilde, NoSymbol ] };
+ key <AC02> { [ s, S, dstroke, NoSymbol ] };
+ key <AC03> { [ d, D, Dstroke, NoSymbol ] };
+ key <AC04> { [ f, F, bracketleft, NoSymbol ] };
+ key <AC05> { [ g, G, bracketright, NoSymbol ] };
+ key <AC06> { [ h, H, grave, NoSymbol ] };
+ key <AC07> { [ j, J, apostrophe, NoSymbol ] };
+ key <AC08> { [ k, K, lstroke, NoSymbol ] };
+ key <AC09> { [ l, L, Lstroke, NoSymbol ] };
+
+ key <AC10> { [ uring, quotedbl, dollar, NoSymbol ] };
+ key <AC11> { [ section, exclam, apostrophe, ssharp ] };
+ key <AC12> { [ EuroSign, dead_diaeresis, NoSymbol, NoSymbol ] };
+ key <BKSL> { [dead_diaeresis, apostrophe, backslash, bar ] };
+
+ key <LSGT> { [ backslash, bar, slash, NoSymbol ] };
+ key <AB01> { [ y, Y, degree, NoSymbol ] };
+ key <AB02> { [ x, X, numbersign, Nosymbol ] };
+ key <AB03> { [ c, C, ampersand, NoSymbol ] };
+ key <AB04> { [ v, V, at, NoSymbol ] };
+ key <AB05> { [ b, B, braceleft, NoSymbol ] };
+ key <AB06> { [ n, N, braceright, NoSymbol ] };
+ key <AB07> { [ m, M, asciicircum, NoSymbol ] };
+ key <AB08> { [ comma, question, less, NoSymbol ] };
+ key <AB09> { [ period, colon, greater, NoSymbol ] };
+ key <AB10> { [ minus, underscore, asterisk, NoSymbol ] };
+
+ key <SPCE> { [ space, space, space, space ] };
+
+ include "level3(ralt_switch)"
+};
+
+// Use <BKSL> instead of <LSGT> (useful for keyboard without <LSGT> key)
+xkb_symbols "bksl" {
+ include "cz(basic)"
+ name[Group1]= "Czech (with <\|> key)";
+
+ key <BKSL> { [ backslash, bar, slash, NoSymbol ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "qwerty" {
+
+ // This layout should work exactly as a cz with the exception
+ // of 'Z' and 'Y' keys, which are in the qwerty style (ie. swapped).
+ // 2001 by Kamil Toman <ktoman@email.cz>
+
+ include "cz(basic)"
+ name[Group1]= "Czech (qwerty)";
+
+ key <AB01> { [ z, Z, degree, NoSymbol ] };
+ key <AD06> { [ y, Y, NoSymbol, NoSymbol ] };
+};
+
+// Use <BKSL> instead of <LSGT> (useful for keyboard without <LSGT> key)
+xkb_symbols "qwerty_bksl" {
+ include "cz(qwerty)"
+
+ name[Group1]= "Czech (qwerty, extended Backslash)";
+
+ key <BKSL> { [ backslash, bar, slash, NoSymbol ] };
+};
+
+partial alphanumeric_keys alternate_group
+xkb_symbols "ucw" {
+
+ // This layout is usually used as the second group, it contains
+ // accented characters only, no 'latin' set.
+ // 2008 by Milan Vancura <mvancura@suse.cz>
+
+ name[Group1]= "Czech (UCW layout, accented letters only)";
+
+ key <AB01> { [zcaron, Zcaron ] };
+ key <AB02> { [ssharp ] };
+ key <AB03> { [ccaron, Ccaron ] };
+ key <AB04> { [ccedilla, Ccedilla ] };
+ key <AB05> { [ntilde, Ntilde ] };
+ key <AB06> { [ncaron, Ncaron ] };
+ key <AB07> { [lacute, Lacute ] };
+
+ key <AC01> { [aacute, Aacute ] };
+ key <AC02> { [scaron, Scaron ] };
+ key <AC03> { [dcaron, Dcaron ] };
+ key <AC04> { [ediaeresis, Ediaeresis ] };
+ key <AC05> { [racute, Racute ] };
+ key <AC06> { [uacute, Uacute ] };
+ key <AC07> { [udiaeresis, Udiaeresis ] };
+ key <AC08> { [ocircumflex, Ocircumflex ] };
+ key <AC09> { [lcaron, Lcaron ] };
+
+ key <AD01> { [adiaeresis, Adiaeresis ] };
+ key <AD02> { [ecaron, Ecaron ] };
+ key <AD03> { [eacute, Eacute ] };
+ key <AD04> { [rcaron, Rcaron ] };
+ key <AD05> { [tcaron, Tcaron ] };
+ key <AD06> { [yacute, Yacute ] };
+ key <AD07> { [uring, Uring ] };
+ key <AD08> { [iacute, Iacute ] };
+ key <AD09> { [oacute, Oacute ] };
+ key <AD10> { [odiaeresis, Odiaeresis ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dvorak-ucw" {
+
+ // US Dvorak layout extend with UCW - AltGr produces accented characters
+
+ include "us(dvorak)"
+
+ name[Group1]= "Czech (US Dvorak with CZ UCW support)";
+
+ key <AB03> { [ j, J, eacute, Eacute ] };
+ key <AB04> { [ k, K, uacute, Uacute ] };
+ key <AB10> { [ z, Z, zcaron, Zcaron ] };
+
+ key <AC01> { [ a, A, aacute, Aacute ] };
+ key <AC02> { [ o, O, oacute, Oacute ] };
+ key <AC03> { [ e, E, ecaron, Ecaron ] };
+ key <AC04> { [ u, U, uring, Uring ] };
+ key <AC05> { [ i, I, iacute, Iacute ] };
+ key <AC06> { [ d, D, dcaron, Dcaron ] };
+ key <AC08> { [ t, T, tcaron, Tcaron ] };
+ key <AC09> { [ n, N, ncaron, Ncaron ] };
+ key <AC10> { [ s, S, scaron, Scaron ] };
+
+ key <AD05> { [ y, Y, yacute, Yacute ] };
+ key <AD08> { [ c, C, ccaron, Ccaron ] };
+ key <AD09> { [ r, R, rcaron, Rcaron ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/de b/xorg-server/xkeyboard-config/symbols/de
index cfe803afb..c30cb9f6a 100644
--- a/xorg-server/xkeyboard-config/symbols/de
+++ b/xorg-server/xkeyboard-config/symbols/de
@@ -1,596 +1,596 @@
-// based on a keyboard map from an 'xkb/symbols/de' file
-
-default
-xkb_symbols "basic" {
-
- include "latin(type4)"
-
- name[Group1]="Germany";
-
- key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
- key <AE03> { [ 3, section, threesuperior, sterling ] };
- key <AE04> { [ 4, dollar, onequarter, currency ] };
-
- key <AE11> {type[Group1]="FOUR_LEVEL_PLUS_LOCK", symbols[Group1]=
- [ssharp, question, backslash, questiondown, 0x1001E9E ]};
-// The unicode capital letter sharp s U+1E9E is transformed to "SS"
-// to match the rules for capitalizing sharp s in german.
-// If the capital sharp s is needed, delete the line
-// starting with <U1E9C> from /usr/share/X11/locale/iso8859-15/Compose.
-// If both doubled S and capital sharp s are needed, use 0x1001E9E
-// for capital sharp s and some free unicode codepoint like 0x1001E9C
-// for doubled S. Don`t forget to change this in the Compose file, too.
-
- key <AE12> { [dead_acute, dead_grave, dead_cedilla, dead_ogonek ] };
-
- key <AD03> { [ e, E, EuroSign, EuroSign ] };
- key <AD06> { [ z, Z, leftarrow, yen ] };
- key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
- key <AD12> { [ plus, asterisk, dead_tilde, dead_macron ] };
-
- key <AC02> { [ s, S, U017F, U1E9E ] };
- key <AC07> { [ j, J, dead_belowdot, dead_abovedot ] };
- key <AC10> { [odiaeresis, Odiaeresis, dead_doubleacute, dead_belowdot ] };
- key <AC11> { [adiaeresis, Adiaeresis, dead_circumflex, dead_caron ] };
- key <TLDE> { [dead_circumflex, degree, U2032, U2033 ] };
-
- key <BKSL> { [numbersign, apostrophe, rightsinglequotemark, dead_breve ] };
- key <AB01> { [ y, Y, guillemotright, U203A ] };
- key <AB02> { [ x, X, guillemotleft, U2039 ] };
- key <AB04> { [ v, V, doublelowquotemark, singlelowquotemark ] };
- key <AB05> { [ b, B, leftdoublequotemark, leftsinglequotemark ] };
- key <AB06> { [ n, N, rightdoublequotemark, rightsinglequotemark ] };
- key <AB08> { [ comma, semicolon, periodcentered, multiply ] };
- key <AB09> { [ period, colon, U2026, division ] };
- key <AB10> { [ minus, underscore, endash, emdash ] };
-
- include "kpdl(comma)"
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- // modify the basic German layout to not have any dead keys
-
- include "de(basic)"
- name[Group1]="Germany - Eliminate dead keys";
-
- key <TLDE> { [asciicircum, degree, notsign, notsign ] };
- key <AE12> { [ acute, grave, cedilla, cedilla ] };
- key <AD11> { [udiaeresis, Udiaeresis, diaeresis, diaeresis ] };
- key <AD12> { [ plus, asterisk, asciitilde, macron ] };
- key <AC10> { [odiaeresis, Odiaeresis, doubleacute, doubleacute ] };
- key <AC11> { [adiaeresis, Adiaeresis, asciicircum, asciicircum ] };
- key <BKSL> { [numbersign, apostrophe, grave, grave ] };
- key <AB10> { [ minus, underscore, dead_belowdot, abovedot ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "deadgraveacute" {
- // modify the basic German layout to have only acute and grave
- // as dead keys (tilde and circumflex are needed as spacing characters
- // in many programming languages)
-
- include "de(basic)"
- name[Group1]="Germany - Dead grave acute";
-
- key <TLDE> { [asciicircum, degree, notsign, notsign ] };
- key <AD12> { [ plus, asterisk, asciitilde, dead_macron ] };
- key <BKSL> { [numbersign, apostrophe, grave, grave ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "deadacute" {
- // modify the basic German layout to have only acute as
- // dead keys (ASCII grave, tilde and circumflex are needed as
- // spacing characters in many programming languages and text formatters)
-
- include "de(deadgraveacute)"
-
- name[Group1]="Germany - Dead acute";
-
- key <AE12> { [dead_acute, grave, dead_cedilla, dead_ogonek ] };
- key <BKSL> { [numbersign, apostrophe, dead_grave, dead_grave ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "ro" {
- // add romanian-specific letters to the basic German layout.
- // Romanian symbols are accessible with combination of <AltGr> and
- // 'a', 's', 't', 'i', 'ä (&auml)' (+<Shift> for capital letters).
- // To view romanian-specific symbols, add "export LC_CTYPE=ro_RO"
- // or "export LC_CTYPE=de_DE.utf8" to your .profile.
-
- include "de(basic)"
-
- name[Group1]="Germany - Romanian keyboard with German letters";
-
- key <AD05> { [ t, T, tcedilla, Tcedilla ] };
- key <AD08> { [ i, I, icircumflex, Icircumflex ] };
- key <AC01> { [ a, A, acircumflex, Acircumflex ] };
- key <AC02> { [ s, S, scedilla, Scedilla ] };
- key <AC11> { [ adiaeresis, Adiaeresis, abreve, Abreve ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "ro_nodeadkeys" {
- // add romanian-specific letters to the German nodeadkeys layout.
- // Read the comment for de_ro !
-
- include "de(nodeadkeys)"
- name[Group1]="Germany - Romanian keyboard with German letters, eliminate dead keys";
-
- key <AD05> { [ t, T, tcedilla, Tcedilla ] };
- key <AD08> { [ i, I, icircumflex, Icircumflex ] };
- key <AC01> { [ a, A, acircumflex, Acircumflex ] };
- key <AC02> { [ s, S, scedilla, Scedilla ] };
- key <AC11> { [ adiaeresis, Adiaeresis, abreve, Abreve ] };
-};
-
-// German Dvorak keymap by Thorsten Staerk (www.staerk.de/thorsten)
-// Have acute and grave as dead keys, tilde and circumflex alive as they are needed
-// in many programming languages.
-// to use this keymap, use a 105-key-keyboard and the command setxkbmap -model pc105 -layout dvorak -variant de
-// source: http://www-lehre.informatik.uni-osnabrueck.de/~rfreund/dvorak.php
-partial alphanumeric_keys
-xkb_symbols "dvorak" {
- include "us(dvorak)"
-
- name[Group1]="Germany - Dvorak";
-
- key <TLDE> { [ asciicircum, degree ] };
-
- key <AE01> { [ 1, exclam, onesuperior ] };
- key <AE02> { [ 2, quotedbl, twosuperior ] };
- key <AE03> { [ 3, section, threesuperior ] };
- key <AE04> { [ 4, dollar, bar ] };
- key <AE05> { [ 5, percent, bar ] };
- key <AE06> { [ 6, ampersand, brokenbar ] };
- key <AE07> { [ 7, slash, braceleft ] };
- key <AE08> { [ 8, parenleft, bracketleft ] };
- key <AE09> { [ 9, parenright, bracketright ] };
- key <AE10> { [ 0, equal, braceright ] };
- key <AE11> { [ plus, asterisk, asciitilde ] };
- key <AE12> { [ less, greater, dead_grave ] };
-
- key <AD01> { [ udiaeresis, Udiaeresis, at ] };
- key <AD02> { [ comma, semicolon, dead_diaeresis ] };
- key <AD03> { [ period, colon ] };
- key <AD08> { [ c, C, copyright, Cacute ] };
- key <AD09> { [ t, T, trademark ] };
- key <AD10> { [ z, Z, zabovedot, Zabovedot ] };
- key <AD11> { [ question, ssharp ] };
- key <AD12> { [ slash, backslash, dead_acute ] };
-
- key <AC01> { [ a, A, at, aogonek ] };
- key <AC02> { [ o, O, oacute, Oacute ] };
- key <AC03> { [ e, E, EuroSign, eogonek ] };
- key <AC04> { [ i, I ] };
- key <AC05> { [ u, U ] };
- key <AC06> { [ h, H ] };
- key <AC07> { [ d, D ] };
- key <AC08> { [ r, R, registered ] };
- key <AC09> { [ n, N, nacute, Nacute ] };
- key <AC10> { [ s, S, sacute, Sacute] };
- key <AC11> { [ l, L, lstroke, Lstroke ] };
-
- key <AB01> { [ odiaeresis, Odiaeresis ] };
- key <AB02> { [ q, Q, at ] };
- key <AB07> { [ m, M, mu ] };
- key <AB10> { [ numbersign, apostrophe ] };
-
- key <BKSL> { [ minus, underscore, hyphen, diaeresis] };
-
- key <LSGT> { [ adiaeresis, Adiaeresis, bar ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "Sundeadkeys" {
-
- // For naming consistency
-
- include "de(basic)"
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "sundeadkeys" {
-
- // For naming consistency
-
- include "de(Sundeadkeys)"
-
- name[Group1]="Germany - Sun dead keys";
-};
-
-
-// German Neo-Layout Version 2
-// adopted 2004 by Hanno Behrens <Hanno.Behrens@gmx.de>
-// inspired by Dvorak/de-ergo http://www.goebel-consult.de/de-ergo/
-//
-// Authors:
-// Stephan Hilb <stephan at ehilb dot de>
-// <lucky at zankt dot net>
-// Benjamin Kellermann <Benjamin dot Kellermann at gmx dot Germany>
-// Erik Streb <mail at erikstreb dot de>
-// and many other contributors
-//
-// http://www.neo-layout.org
-//
-// $Revision$, $Date$
-
-partial alphanumeric_keys modifier_keys keypad_keys
-xkb_symbols "neo_base" {
-
- // Levels in Neo jargon
- // --------------------------------------------------------------
- // Ebene 1: normal
- // Ebene 2: Shift
- // Ebene 3: Mod3
- // Ebene 4: Mod4 (for marking something use Shift + Mod4)
- // Ebene 5: Shift + Mod3
- // Ebene 6: Mod3 + Mod4
- // Compose (not a level): Mod3 + Tab
- // Feststelltaste (Capslock): Shift + Shift
- // Mod4-Lock: Mod4 + Mod4
- // Mod4-Lock: Shift + Mod3 + Tab
-
- // Legend
- // ===============
- // Levels in Xkbmap jargon to be found here in the definitions.
- // These are the levels used, and Xorg's translations:
- // --------------------------------------------------------------
- // Xorg: Level1 Level2 Level3 Level4 Level5 Level6 Level7 Level8
- // Neo: Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Pseudo-Ebene Ebene6 ???
- // Keys (Neo): None Shift Mod3 Mod3 + Shift Mod4 Mod4 + Shift Mod3 + Mod4 Mod3 + Mod4 + Shift
-
-
- // Alphanumeric-keys
- // ===============
- key.type[Group1] = "EIGHT_LEVEL";
-
- // Tab as Multi_key (Compose)
- // --------------------------------------------------------------
- key <TAB> { [ Tab, ISO_Left_Tab, Multi_key, ISO_Level5_Lock, NoSymbol, NoSymbol, NoSymbol, ISO_Level5_Lock ] };
-
-
- // Number row
- // --------------------------------------------------------------
- key <TLDE> { [ dead_circumflex, dead_caron, U21BB, U02DE, dead_abovedot, Pointer_EnableKeys, dead_belowdot, NoSymbol ] };
-
- key <AE01> { [ 1, degree, onesuperior, onesubscript, ordfeminine, NoSymbol, notsign, NoSymbol ] };
- key <AE02> { [ 2, section, twosuperior, twosubscript, masculine, NoSymbol, logicalor, NoSymbol ] };
- key <AE03> { [ 3, U2113, threesuperior, threesubscript, numerosign, NoSymbol, logicaland, NoSymbol ] };
- key <AE04> { [ 4, guillemotright, U203A, femalesymbol, NoSymbol, NoSymbol, U22A5, NoSymbol ] };
- key <AE05> { [ 5, guillemotleft, U2039, malesymbol, periodcentered, NoSymbol, U2221, NoSymbol ] };
- key <AE06> { [ 6, dollar, cent, U26A5, sterling, NoSymbol, U2225, NoSymbol ] };
-
- key <AE07> { [ 7, EuroSign, yen, U03F0, currency, NoSymbol, rightarrow, NoSymbol ] };
- key <AE08> { [ 8, doublelowquotemark, singlelowquotemark, U27E8, Tab, ISO_Left_Tab, U221E, NoSymbol ] };
- key <AE09> { [ 9, leftdoublequotemark, leftsinglequotemark, U27E9, KP_Divide, KP_Divide, variation, NoSymbol ] };
- key <AE10> { [ 0, rightdoublequotemark, rightsinglequotemark, zerosubscript, KP_Multiply, KP_Multiply, emptyset, NoSymbol ] };
-
- key <AE11> { [ minus, emdash, NoSymbol, U2011, KP_Subtract, KP_Subtract, hyphen, NoSymbol ] };
- key <AE12> { [ dead_grave, dead_cedilla, dead_abovering, dead_dasia, dead_diaeresis, NoSymbol, dead_macron, NoSymbol ] };
-
- // Top row
- // --------------------------------------------------------------
- key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
- key <AD01> { [ x, X, ellipsis, Greek_xi, Prior, Prior, Greek_XI, NoSymbol ] };
- key <AD02> { [ v, V, underscore, NoSymbol, BackSpace, BackSpace, radical, NoSymbol ] };
- key <AD03> { [ l, L, bracketleft, Greek_lambda, Up, Up, Greek_LAMBDA, NoSymbol ] };
- key <AD04> { [ c, C, bracketright, Greek_chi, Delete, Delete, U2102, NoSymbol ] };
- key <AD05> { [ w, W, asciicircum, Greek_omega, Next, Next, Greek_OMEGA, NoSymbol ] };
-
- key <AD06> { [ k, K, exclam, Greek_kappa, exclamdown, NoSymbol, multiply, NoSymbol ] };
- key <AD07> { [ h, H, less, Greek_psi, KP_7, KP_7, Greek_PSI, NoSymbol ] };
- key <AD08> { [ g, G, greater, Greek_gamma, KP_8, KP_8, Greek_GAMMA, NoSymbol ] };
- key <AD09> { [ f, F, equal, Greek_phi, KP_9, KP_9, Greek_PHI, NoSymbol ] };
- key <AD10> { [ q, Q, ampersand, U03D5, KP_Add, KP_Add, U211A, NoSymbol ] };
-
- key <AD11> { [ ssharp, U1E9E, U017F, Greek_finalsmallsigma, U2212, NoSymbol, jot, NoSymbol ] };
-
- key.type[Group1] = "EIGHT_LEVEL";
- key <AD12> { [ dead_acute, dead_tilde, dead_stroke, dead_psili, dead_doubleacute, NoSymbol, dead_breve, NoSymbol ] };
-
- // Middle row
- // --------------------------------------------------------------
- key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
- key <AC01> { [ u, U, backslash, NoSymbol, Home, Home, includedin, NoSymbol ] };
- key <AC02> { [ i, I, slash, Greek_iota, Left, Left, integral, NoSymbol ] };
- key <AC03> { [ a, A, braceleft, Greek_alpha, Down, Down, U2200, NoSymbol ] };
- key <AC04> { [ e, E, braceright, Greek_epsilon, Right, Right, U2203, NoSymbol ] };
- key <AC05> { [ o, O, asterisk, Greek_omicron, End, End, elementof, NoSymbol ] };
-
- key <AC06> { [ s, S, question, Greek_sigma, questiondown, NoSymbol, Greek_SIGMA, NoSymbol ] };
- key <AC07> { [ n, N, parenleft, Greek_nu, KP_4, KP_4, U2115, NoSymbol ] };
- key <AC08> { [ r, R, parenright, Greek_rho, KP_5, KP_5, U211D, NoSymbol ] };
- key <AC09> { [ t, T, minus, Greek_tau, KP_6, KP_6, partialderivative, NoSymbol ] };
- key <AC10> { [ d, D, colon, Greek_delta, KP_Separator, comma, Greek_DELTA, NoSymbol ] };
-
- key <AC11> { [ y, Y, at, Greek_upsilon, period, KP_Decimal, nabla, NoSymbol ] };
-
- // Bottom row
- // --------------------------------------------------------------
- key <AB01> { [ udiaeresis, Udiaeresis, numbersign, NoSymbol, Escape, Escape, union, NoSymbol ] };
- key <AB02> { [ odiaeresis, Odiaeresis, dollar, U03F5, Tab, Tab, intersection, NoSymbol ] };
- key <AB03> { [ adiaeresis, Adiaeresis, bar, Greek_eta, Insert, Insert, U2135, NoSymbol ] };
- key <AB04> { [ p, P, asciitilde, Greek_pi, Return, Return, Greek_PI, NoSymbol ] };
- key <AB05> { [ z, Z, grave, Greek_zeta, Undo, Undo, U2124, NoSymbol ] };
-
- key <AB06> { [ b, B, plus, Greek_beta, colon, NoSymbol, U21D0, NoSymbol ] };
- key <AB07> { [ m, M, percent, Greek_mu, KP_1, KP_1, ifonlyif, NoSymbol ] };
- key.type[Group1] = "EIGHT_LEVEL";
- key <AB08> { [ comma, endash, quotedbl, U03F1, KP_2, KP_2, U21D2, NoSymbol ] };
- key <AB09> { [ period, enfilledcircbullet, apostrophe, U03D1, KP_3, KP_3, U21A6, NoSymbol ] };
- key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
- key <AB10> { [ j, J, semicolon, Greek_theta, semicolon, NoSymbol, Greek_THETA, NoSymbol ] };
- key.type[Group1] = "EIGHT_LEVEL";
-
- // Space key
- // --------------------------------------------------------------
- key <SPCE> { [ space, space, space, nobreakspace, KP_0, KP_0, U202F, NoSymbol ] };
-
-
- // Keypad-keys
- // ===============
-
- // The former Numlock key:
- key <NMLK> { [ Tab, ISO_Left_Tab, equal, approxeq, notequal, Pointer_EnableKeys, identical, NoSymbol ] };
-
- // Topmost row
- // --------------------------------------------------------------
- key <KPDV> { [ KP_Divide, KP_Divide, division, U2300, U2215, NoSymbol, U2223, NoSymbol ] };
- key <KPMU> { [ KP_Multiply, KP_Multiply, U2219, U2299, multiply, NoSymbol, U2297, NoSymbol ] };
- key <KPSU> { [ KP_Subtract, KP_Subtract, U2212, U2296, U2216, NoSymbol, U2238, NoSymbol ] };
-
- // Top row
- // --------------------------------------------------------------
- key <KP7> { [ KP_7, U2714, U2195, U226A, KP_Home, KP_Home, upstile, NoSymbol ] };
- key <KP8> { [ KP_8, U2718, uparrow, intersection, KP_Up, KP_Up, U22C2, NoSymbol ] };
- key <KP9> { [ KP_9, dagger, U20D7, U226B, KP_Prior, KP_Prior, U2309, NoSymbol ] };
- key <KPAD> { [ KP_Add, KP_Add, plusminus, U2295, U2213, NoSymbol, U2214, NoSymbol ] };
-
- // Middle row
- // --------------------------------------------------------------
- key <KP4> { [ KP_4, club, leftarrow, includedin, KP_Left, KP_Left, U2286, NoSymbol ] };
- key <KP5> { [ KP_5, EuroSign, colon, U22B6, KP_Begin, KP_Begin, U22B7, NoSymbol ] };
- key <KP6> { [ KP_6, U2023, rightarrow, includes, KP_Right, KP_Right, U2287, NoSymbol ] };
-
- // Bottom row
- // --------------------------------------------------------------
- key <KP1> { [ KP_1, diamond, U2194, lessthanequal, KP_End, KP_End, downstile, NoSymbol ] };
- key <KP2> { [ KP_2, heart, downarrow, union, KP_Down, KP_Down, U22C3, NoSymbol ] };
- key <KP3> { [ KP_3, U2660, U21CC, greaterthanequal, KP_Next, KP_Next, U230B, NoSymbol ] };
- key <KPEN> { [ KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, NoSymbol ] };
- key <KPEQ> { [ KP_Equal, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
-
- // Bottommost row
- // --------------------------------------------------------------
- key <KP0> { [ KP_0, U2423, percent, U2030, KP_Insert, KP_Insert, U25A1, NoSymbol ] };
- key <KPDL> { [ KP_Separator, period, comma, minutes, KP_Delete, KP_Delete, seconds, NoSymbol ] };
-};
-
-partial alphanumeric_keys modifier_keys keypad_keys
-xkb_symbols "neo" {
-
- include "de(neo_base)"
-
- name[Group1]= "Germany - Neo 2";
-
- include "shift(both_capslock)"
- include "level3(caps_switch)"
- include "level3(bksl_switch)"
- include "level5(lsgt_switch)"
- include "level5(ralt_switch)"
-};
-
-// Copied from macintosh_vndr/de
-// olh@suse.de very close to MacOS map
-
-partial alphanumeric_keys
-xkb_symbols "mac" {
-
- include "de"
- name[Group1]= "Germany - Macintosh";
-
- // Alphanumeric section
- key <AE01> { [ 1, exclam, exclamdown, at ] };
- key <AE05> { [ 5, percent, bracketleft ] };
- key <AE06> { [ 6, ampersand, bracketright ] };
- key <AE07> { [ 7, slash, bar, backslash ] };
- key <AE08> { [ 8, parenleft, braceleft, asciitilde ] };
- key <AE09> { [ 9, parenright, braceright ] };
- key <AD01> { [ q, Q, guillemotleft, guillemotright ] };
- key <AD04> { [ r, R, registered ] };
- key <AD07> { [ u, U, diaeresis, Aacute ] };
- key <AD08> { [ i, I, slash, Ucircumflex ] };
- key <AD11> { [ udiaeresis, Udiaeresis, periodcentered, degree ] };
- key <AD12> { [ plus, asterisk, asciitilde ] };
- key <AC01> { [ a, A, aring, Aring ] };
- key <AC05> { [ g, G, copyright ] };
- key <AC06> { [ h, H, ordfeminine ] };
- key <AC09> { [ l, L, at ] };
- key <AC10> { [ odiaeresis, Odiaeresis, dead_acute ] };
- key <AB06> { [ n, N, asciitilde ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "mac_nodeadkeys" {
- // modify the standard German mac layout to not have any dead keys
- include "de(mac)"
- name[Group1]= "Germany - Macintosh, eliminate dead keys";
- key <AE04> { [ 4, dollar, onequarter, currency ] };
-
- key <TLDE> { [ asciicircum, degree, notsign ] };
- key <AE12> { [ acute, grave, cedilla ] };
- key <AD11> { [ udiaeresis, Udiaeresis, diaeresis ] };
- key <AD12> { [ plus, asterisk, asciitilde, macron ] };
- key <AC10> { [ odiaeresis, Odiaeresis, acute ] };
- key <AC11> { [ adiaeresis, Adiaeresis, asciicircum ] };
-
- key <BKSL> { [ numbersign, apostrophe, grave ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "dsb"
-{
- name[Group1] = "Germany - Lower Sorbian";
- include "latin(basic)"
- include "level3(ralt_switch)"
- include "kpdl(comma)"
- key <AB01> { [ z, Z, zcaron, Zcaron ] };
- key <AB02> { [ x, X, zacute, Zacute ] };
- key <AB03> { [ c, C, cacute, Cacute ] };
- key <AB04> { [ v, V, ccaron, Ccaron ] };
- key <AB06> { [ n, N, nacute, Nacute ] };
- key <AC02> { [ s, S, sacute, Sacute ] };
- key <AC03> { [ d, D, scaron, Scaron ] };
- key <AC04> { [ f, F ] };
- key <AD01> { [ q, Q ] };
- key <AD02> { [ w, W ] };
- key <AD03> { [ e, E, ecaron, Ecaron ] };
- key <AD04> { [ r, R, racute, Racute ] };
- key <AD05> { [ t, T, U20B5, EuroSign ] };
- key <AD09> { [ o, O, oacute, Oacute ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "dsb_qwertz"
-{
- name[Group1] = "Germany - Lower Sorbian (qwertz)";
- include "latin(basic)"
- include "level3(ralt_switch)"
- include "kpdl(comma)"
- key <AB01> { [ y, Y ] };
- key <AB02> { [ x, X ] };
- key <AB03> { [ c, C, cacute, Cacute ] };
- key <AB04> { [ v, V, ccaron, Ccaron ] };
- key <AB06> { [ n, N, nacute, Nacute ] };
- key <AC02> { [ s, S, sacute, Sacute ] };
- key <AC03> { [ d, D, scaron, Scaron ] };
- key <AC04> { [ f, F ] };
- key <AD01> { [ q, Q ] };
- key <AD02> { [ w, W ] };
- key <AD03> { [ e, E, ecaron, Ecaron ] };
- key <AD04> { [ r, R, racute, Racute ] };
- key <AD05> { [ t, T, U20B5, EuroSign ] };
- key <AD06> { [ z, Z, zcaron, Zcaron ] };
- key <AD07> { [ u, U, zacute, Zacute ] };
- key <AD09> { [ o, O, oacute, Oacute ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "qwerty" {
-
- // This layout should work exactly as a de with the exception
- // of 'Z' and 'Y' keys, which are in the qwerty style (ie. swapped).
- // 2008 by Matej Košík <kosik@fiit.stuba.sk>
-
- include "de(basic)"
-
- name[Group1] = "Germany - qwerty";
-
- key <AB01> { [ z, Z, leftarrow, yen ] };
- key <AD06> { [ y, Y, guillemotleft, less ] };
-};
-
-// layout for Russian letters on an german keyboard
-// based on US-RU layout by Ivan Popov <pin@konvalo.org> 2005-07-17
-// adopted for german layout by Alexey Fisher <bug-track@fisher-privat.net> 2010-08-19
-
-partial alphanumeric_keys
-xkb_symbols "ru" {
-
- include "de(basic)"
-
- name[Group1]= "Germany - Russian phonetic";
-
-key.type[group1]="FOUR_LEVEL_ALPHABETIC";
-
- key <LatA> { [ Cyrillic_a, Cyrillic_A ] };
- key <LatB> { [ Cyrillic_be, Cyrillic_BE ] };
- key <LatW> { [ Cyrillic_ve, Cyrillic_VE ] };
- key <LatG> { [ Cyrillic_ghe, Cyrillic_GHE ] };
- key <LatD> { [ Cyrillic_de, Cyrillic_DE ] };
- key <LatE> { [ Cyrillic_ie, Cyrillic_IE ] };
- key <TLDE> { [ Cyrillic_io, Cyrillic_IO, asciitilde ] };
- key <LatX> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <LatZ> { [ Cyrillic_ze, Cyrillic_ZE ] };
- key <LatI> { [ Cyrillic_i, Cyrillic_I ] };
- key <LatJ> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
- key <LatK> { [ Cyrillic_ka, Cyrillic_KA ] };
- key <LatL> { [ Cyrillic_el, Cyrillic_EL ] };
- key <LatM> { [ Cyrillic_em, Cyrillic_EM ] };
- key <LatN> { [ Cyrillic_en, Cyrillic_EN ] };
- key <LatO> { [ Cyrillic_o, Cyrillic_O ] };
- key <LatP> { [ Cyrillic_pe, Cyrillic_PE ] };
- key <LatR> { [ Cyrillic_er, Cyrillic_ER ] };
- key <LatS> { [ Cyrillic_es, Cyrillic_ES ] };
- key <LatT> { [ Cyrillic_te, Cyrillic_TE ] };
- key <LatU> { [ Cyrillic_u, Cyrillic_U ] };
- key <LatF> { [ Cyrillic_ef, Cyrillic_EF ] };
- key <LatH> { [ Cyrillic_ha, Cyrillic_HA ] };
- key <LatC> { [ Cyrillic_tse, Cyrillic_TSE ] };
- key <AC10> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA, plus, asterisk ] };
- key <AE12> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
- key <LatY> { [ Cyrillic_yeru, Cyrillic_YERU ] };
- key <LatV> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
- key <AC11> { [ Cyrillic_e, Cyrillic_E ] };
- key <BKSL> { [ Cyrillic_yu, Cyrillic_YU, numbersign, apostrophe ] };
- key <LatQ> { [ Cyrillic_ya, Cyrillic_YA ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "htcdream" {
- include "inet(htcdream)"
-
- name[Group1]= "Germany - htcdream";
-
- //second row
- key <AD01> { [ q, Q, Tab, Tab ] };
- key <AD02> { [ w, W, grave, grave ] };
- key <AD03> { [ e, E, EuroSign, EuroSign ] };
- key <AD04> { [ r, R, underscore, underscore ] };
- key <AD05> { [ t, T, sterling, sterling] };
- key <AD06> { [ z, Z, division, division ] };
- key <AD07> { [ u, U, udiaeresis, udiaeresis ] };
- key <AD08> { [ i, I, minus, minus ] };
- key <AD09> { [ o, O, odiaeresis, odiaeresis ] };
- key <AD10> { [ p, P, equal, equal ] };
-
- //third row
- key <AC01> { [ a, A, adiaeresis, adiaeresis ] };
- key <AC02> { [ s, S, ssharp, ssharp] };
- key <AC03> { [ d ,D, backslash, backslash ] };
- key <AC04> { [ f, F, braceleft, braceleft ] };
- key <AC05> { [ g, G, braceright, braceright ] };
- key <AC06> { [ h, H, multiply, multiply ] };
- key <AC07> { [ j, J, colon, colon ] };
- key <AC08> { [ k, K, plus, plus ] };
- key <AC09> { [ l, L, apostrophe, apostrophe ] };
-
- //forth row
- key <AB01> { [ y, Y, bar, bar ] };
- key <AB02> { [ x, X, bracketleft, bracketleft ] };
- key <AB03> { [ c, C, bracketright, bracketright ] };
- key <AB04> { [ v, V, less, less ] };
- key <AB05> { [ b, B, greater, greater ] };
- key <AB06> { [ n, N, semicolon, semicolon ] };
- key <AB07> { [ m, M, quotedbl, quotedbl ] };
- key <AB08> { [ comma, comma, question, question ] };
-
- //fifth row
- key <FK15> { [ at, at, asciitilde, asciitilde ] };
-
- include "level3(alt_switch)"
-};
+// based on a keyboard map from an 'xkb/symbols/de' file
+
+default
+xkb_symbols "basic" {
+
+ include "latin(type4)"
+
+ name[Group1]="German";
+
+ key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
+ key <AE03> { [ 3, section, threesuperior, sterling ] };
+ key <AE04> { [ 4, dollar, onequarter, currency ] };
+
+ key <AE11> {type[Group1]="FOUR_LEVEL_PLUS_LOCK", symbols[Group1]=
+ [ssharp, question, backslash, questiondown, 0x1001E9E ]};
+// The unicode capital letter sharp s U+1E9E is transformed to "SS"
+// to match the rules for capitalizing sharp s in german.
+// If the capital sharp s is needed, delete the line
+// starting with <U1E9C> from /usr/share/X11/locale/iso8859-15/Compose.
+// If both doubled S and capital sharp s are needed, use 0x1001E9E
+// for capital sharp s and some free unicode codepoint like 0x1001E9C
+// for doubled S. Don`t forget to change this in the Compose file, too.
+
+ key <AE12> { [dead_acute, dead_grave, dead_cedilla, dead_ogonek ] };
+
+ key <AD03> { [ e, E, EuroSign, EuroSign ] };
+ key <AD06> { [ z, Z, leftarrow, yen ] };
+ key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
+ key <AD12> { [ plus, asterisk, dead_tilde, dead_macron ] };
+
+ key <AC02> { [ s, S, U017F, U1E9E ] };
+ key <AC07> { [ j, J, dead_belowdot, dead_abovedot ] };
+ key <AC10> { [odiaeresis, Odiaeresis, dead_doubleacute, dead_belowdot ] };
+ key <AC11> { [adiaeresis, Adiaeresis, dead_circumflex, dead_caron ] };
+ key <TLDE> { [dead_circumflex, degree, U2032, U2033 ] };
+
+ key <BKSL> { [numbersign, apostrophe, rightsinglequotemark, dead_breve ] };
+ key <AB01> { [ y, Y, guillemotright, U203A ] };
+ key <AB02> { [ x, X, guillemotleft, U2039 ] };
+ key <AB04> { [ v, V, doublelowquotemark, singlelowquotemark ] };
+ key <AB05> { [ b, B, leftdoublequotemark, leftsinglequotemark ] };
+ key <AB06> { [ n, N, rightdoublequotemark, rightsinglequotemark ] };
+ key <AB08> { [ comma, semicolon, periodcentered, multiply ] };
+ key <AB09> { [ period, colon, U2026, division ] };
+ key <AB10> { [ minus, underscore, endash, emdash ] };
+
+ include "kpdl(comma)"
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ // modify the basic German layout to not have any dead keys
+
+ include "de(basic)"
+ name[Group1]="German (eliminate dead keys)";
+
+ key <TLDE> { [asciicircum, degree, notsign, notsign ] };
+ key <AE12> { [ acute, grave, cedilla, cedilla ] };
+ key <AD11> { [udiaeresis, Udiaeresis, diaeresis, diaeresis ] };
+ key <AD12> { [ plus, asterisk, asciitilde, macron ] };
+ key <AC10> { [odiaeresis, Odiaeresis, doubleacute, doubleacute ] };
+ key <AC11> { [adiaeresis, Adiaeresis, asciicircum, asciicircum ] };
+ key <BKSL> { [numbersign, apostrophe, grave, grave ] };
+ key <AB10> { [ minus, underscore, dead_belowdot, abovedot ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "deadgraveacute" {
+ // modify the basic German layout to have only acute and grave
+ // as dead keys (tilde and circumflex are needed as spacing characters
+ // in many programming languages)
+
+ include "de(basic)"
+ name[Group1]="German (dead grave acute)";
+
+ key <TLDE> { [asciicircum, degree, notsign, notsign ] };
+ key <AD12> { [ plus, asterisk, asciitilde, dead_macron ] };
+ key <BKSL> { [numbersign, apostrophe, grave, grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "deadacute" {
+ // modify the basic German layout to have only acute as
+ // dead keys (ASCII grave, tilde and circumflex are needed as
+ // spacing characters in many programming languages and text formatters)
+
+ include "de(deadgraveacute)"
+
+ name[Group1]="German (dead acute)";
+
+ key <AE12> { [dead_acute, grave, dead_cedilla, dead_ogonek ] };
+ key <BKSL> { [numbersign, apostrophe, dead_grave, dead_grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "ro" {
+ // add romanian-specific letters to the basic German layout.
+ // Romanian symbols are accessible with combination of <AltGr> and
+ // 'a', 's', 't', 'i', 'ä (&auml)' (+<Shift> for capital letters).
+ // To view romanian-specific symbols, add "export LC_CTYPE=ro_RO"
+ // or "export LC_CTYPE=de_DE.utf8" to your .profile.
+
+ include "de(basic)"
+
+ name[Group1]="Romanian (Germany)";
+
+ key <AD05> { [ t, T, tcedilla, Tcedilla ] };
+ key <AD08> { [ i, I, icircumflex, Icircumflex ] };
+ key <AC01> { [ a, A, acircumflex, Acircumflex ] };
+ key <AC02> { [ s, S, scedilla, Scedilla ] };
+ key <AC11> { [ adiaeresis, Adiaeresis, abreve, Abreve ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "ro_nodeadkeys" {
+ // add romanian-specific letters to the German nodeadkeys layout.
+ // Read the comment for de_ro !
+
+ include "de(nodeadkeys)"
+ name[Group1]="Romanian (Germany, eliminate dead keys)";
+
+ key <AD05> { [ t, T, tcedilla, Tcedilla ] };
+ key <AD08> { [ i, I, icircumflex, Icircumflex ] };
+ key <AC01> { [ a, A, acircumflex, Acircumflex ] };
+ key <AC02> { [ s, S, scedilla, Scedilla ] };
+ key <AC11> { [ adiaeresis, Adiaeresis, abreve, Abreve ] };
+};
+
+// German Dvorak keymap by Thorsten Staerk (www.staerk.de/thorsten)
+// Have acute and grave as dead keys, tilde and circumflex alive as they are needed
+// in many programming languages.
+// to use this keymap, use a 105-key-keyboard and the command setxkbmap -model pc105 -layout dvorak -variant de
+// source: http://www-lehre.informatik.uni-osnabrueck.de/~rfreund/dvorak.php
+partial alphanumeric_keys
+xkb_symbols "dvorak" {
+ include "us(dvorak)"
+
+ name[Group1]="German (Dvorak)";
+
+ key <TLDE> { [ asciicircum, degree ] };
+
+ key <AE01> { [ 1, exclam, onesuperior ] };
+ key <AE02> { [ 2, quotedbl, twosuperior ] };
+ key <AE03> { [ 3, section, threesuperior ] };
+ key <AE04> { [ 4, dollar, bar ] };
+ key <AE05> { [ 5, percent, bar ] };
+ key <AE06> { [ 6, ampersand, brokenbar ] };
+ key <AE07> { [ 7, slash, braceleft ] };
+ key <AE08> { [ 8, parenleft, bracketleft ] };
+ key <AE09> { [ 9, parenright, bracketright ] };
+ key <AE10> { [ 0, equal, braceright ] };
+ key <AE11> { [ plus, asterisk, asciitilde ] };
+ key <AE12> { [ less, greater, dead_grave ] };
+
+ key <AD01> { [ udiaeresis, Udiaeresis, at ] };
+ key <AD02> { [ comma, semicolon, dead_diaeresis ] };
+ key <AD03> { [ period, colon ] };
+ key <AD08> { [ c, C, copyright, Cacute ] };
+ key <AD09> { [ t, T, trademark ] };
+ key <AD10> { [ z, Z, zabovedot, Zabovedot ] };
+ key <AD11> { [ question, ssharp ] };
+ key <AD12> { [ slash, backslash, dead_acute ] };
+
+ key <AC01> { [ a, A, at, aogonek ] };
+ key <AC02> { [ o, O, oacute, Oacute ] };
+ key <AC03> { [ e, E, EuroSign, eogonek ] };
+ key <AC04> { [ i, I ] };
+ key <AC05> { [ u, U ] };
+ key <AC06> { [ h, H ] };
+ key <AC07> { [ d, D ] };
+ key <AC08> { [ r, R, registered ] };
+ key <AC09> { [ n, N, nacute, Nacute ] };
+ key <AC10> { [ s, S, sacute, Sacute] };
+ key <AC11> { [ l, L, lstroke, Lstroke ] };
+
+ key <AB01> { [ odiaeresis, Odiaeresis ] };
+ key <AB02> { [ q, Q, at ] };
+ key <AB07> { [ m, M, mu ] };
+ key <AB10> { [ numbersign, apostrophe ] };
+
+ key <BKSL> { [ minus, underscore, hyphen, diaeresis] };
+
+ key <LSGT> { [ adiaeresis, Adiaeresis, bar ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+ // For naming consistency
+
+ include "de(basic)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+
+ // For naming consistency
+
+ include "de(Sundeadkeys)"
+
+ name[Group1]="German (Sun dead keys)";
+};
+
+
+// German Neo-Layout Version 2
+// adopted 2004 by Hanno Behrens <Hanno.Behrens@gmx.de>
+// inspired by Dvorak/de-ergo http://www.goebel-consult.de/de-ergo/
+//
+// Authors:
+// Stephan Hilb <stephan at ehilb dot de>
+// <lucky at zankt dot net>
+// Benjamin Kellermann <Benjamin dot Kellermann at gmx dot Germany>
+// Erik Streb <mail at erikstreb dot de>
+// and many other contributors
+//
+// http://www.neo-layout.org
+//
+// $Revision$, $Date$
+
+partial alphanumeric_keys modifier_keys keypad_keys
+xkb_symbols "neo_base" {
+
+ // Levels in Neo jargon
+ // --------------------------------------------------------------
+ // Ebene 1: normal
+ // Ebene 2: Shift
+ // Ebene 3: Mod3
+ // Ebene 4: Mod4 (for marking something use Shift + Mod4)
+ // Ebene 5: Shift + Mod3
+ // Ebene 6: Mod3 + Mod4
+ // Compose (not a level): Mod3 + Tab
+ // Feststelltaste (Capslock): Shift + Shift
+ // Mod4-Lock: Mod4 + Mod4
+ // Mod4-Lock: Shift + Mod3 + Tab
+
+ // Legend
+ // ===============
+ // Levels in Xkbmap jargon to be found here in the definitions.
+ // These are the levels used, and Xorg's translations:
+ // --------------------------------------------------------------
+ // Xorg: Level1 Level2 Level3 Level4 Level5 Level6 Level7 Level8
+ // Neo: Ebene1 Ebene2 Ebene3 Ebene5 Ebene4 Pseudo-Ebene Ebene6 ???
+ // Keys (Neo): None Shift Mod3 Mod3 + Shift Mod4 Mod4 + Shift Mod3 + Mod4 Mod3 + Mod4 + Shift
+
+
+ // Alphanumeric-keys
+ // ===============
+ key.type[Group1] = "EIGHT_LEVEL";
+
+ // Tab as Multi_key (Compose)
+ // --------------------------------------------------------------
+ key <TAB> { [ Tab, ISO_Left_Tab, Multi_key, ISO_Level5_Lock, NoSymbol, NoSymbol, NoSymbol, ISO_Level5_Lock ] };
+
+
+ // Number row
+ // --------------------------------------------------------------
+ key <TLDE> { [ dead_circumflex, dead_caron, U21BB, U02DE, dead_abovedot, Pointer_EnableKeys, dead_belowdot, NoSymbol ] };
+
+ key <AE01> { [ 1, degree, onesuperior, onesubscript, ordfeminine, NoSymbol, notsign, NoSymbol ] };
+ key <AE02> { [ 2, section, twosuperior, twosubscript, masculine, NoSymbol, logicalor, NoSymbol ] };
+ key <AE03> { [ 3, U2113, threesuperior, threesubscript, numerosign, NoSymbol, logicaland, NoSymbol ] };
+ key <AE04> { [ 4, guillemotright, U203A, femalesymbol, NoSymbol, NoSymbol, U22A5, NoSymbol ] };
+ key <AE05> { [ 5, guillemotleft, U2039, malesymbol, periodcentered, NoSymbol, U2221, NoSymbol ] };
+ key <AE06> { [ 6, dollar, cent, U26A5, sterling, NoSymbol, U2225, NoSymbol ] };
+
+ key <AE07> { [ 7, EuroSign, yen, U03F0, currency, NoSymbol, rightarrow, NoSymbol ] };
+ key <AE08> { [ 8, doublelowquotemark, singlelowquotemark, U27E8, Tab, ISO_Left_Tab, U221E, NoSymbol ] };
+ key <AE09> { [ 9, leftdoublequotemark, leftsinglequotemark, U27E9, KP_Divide, KP_Divide, variation, NoSymbol ] };
+ key <AE10> { [ 0, rightdoublequotemark, rightsinglequotemark, zerosubscript, KP_Multiply, KP_Multiply, emptyset, NoSymbol ] };
+
+ key <AE11> { [ minus, emdash, NoSymbol, U2011, KP_Subtract, KP_Subtract, hyphen, NoSymbol ] };
+ key <AE12> { [ dead_grave, dead_cedilla, dead_abovering, dead_dasia, dead_diaeresis, NoSymbol, dead_macron, NoSymbol ] };
+
+ // Top row
+ // --------------------------------------------------------------
+ key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+ key <AD01> { [ x, X, ellipsis, Greek_xi, Prior, Prior, Greek_XI, NoSymbol ] };
+ key <AD02> { [ v, V, underscore, NoSymbol, BackSpace, BackSpace, radical, NoSymbol ] };
+ key <AD03> { [ l, L, bracketleft, Greek_lambda, Up, Up, Greek_LAMBDA, NoSymbol ] };
+ key <AD04> { [ c, C, bracketright, Greek_chi, Delete, Delete, U2102, NoSymbol ] };
+ key <AD05> { [ w, W, asciicircum, Greek_omega, Next, Next, Greek_OMEGA, NoSymbol ] };
+
+ key <AD06> { [ k, K, exclam, Greek_kappa, exclamdown, NoSymbol, multiply, NoSymbol ] };
+ key <AD07> { [ h, H, less, Greek_psi, KP_7, KP_7, Greek_PSI, NoSymbol ] };
+ key <AD08> { [ g, G, greater, Greek_gamma, KP_8, KP_8, Greek_GAMMA, NoSymbol ] };
+ key <AD09> { [ f, F, equal, Greek_phi, KP_9, KP_9, Greek_PHI, NoSymbol ] };
+ key <AD10> { [ q, Q, ampersand, U03D5, KP_Add, KP_Add, U211A, NoSymbol ] };
+
+ key <AD11> { [ ssharp, U1E9E, U017F, Greek_finalsmallsigma, U2212, NoSymbol, jot, NoSymbol ] };
+
+ key.type[Group1] = "EIGHT_LEVEL";
+ key <AD12> { [ dead_acute, dead_tilde, dead_stroke, dead_psili, dead_doubleacute, NoSymbol, dead_breve, NoSymbol ] };
+
+ // Middle row
+ // --------------------------------------------------------------
+ key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+ key <AC01> { [ u, U, backslash, NoSymbol, Home, Home, includedin, NoSymbol ] };
+ key <AC02> { [ i, I, slash, Greek_iota, Left, Left, integral, NoSymbol ] };
+ key <AC03> { [ a, A, braceleft, Greek_alpha, Down, Down, U2200, NoSymbol ] };
+ key <AC04> { [ e, E, braceright, Greek_epsilon, Right, Right, U2203, NoSymbol ] };
+ key <AC05> { [ o, O, asterisk, Greek_omicron, End, End, elementof, NoSymbol ] };
+
+ key <AC06> { [ s, S, question, Greek_sigma, questiondown, NoSymbol, Greek_SIGMA, NoSymbol ] };
+ key <AC07> { [ n, N, parenleft, Greek_nu, KP_4, KP_4, U2115, NoSymbol ] };
+ key <AC08> { [ r, R, parenright, Greek_rho, KP_5, KP_5, U211D, NoSymbol ] };
+ key <AC09> { [ t, T, minus, Greek_tau, KP_6, KP_6, partialderivative, NoSymbol ] };
+ key <AC10> { [ d, D, colon, Greek_delta, KP_Separator, comma, Greek_DELTA, NoSymbol ] };
+
+ key <AC11> { [ y, Y, at, Greek_upsilon, period, KP_Decimal, nabla, NoSymbol ] };
+
+ // Bottom row
+ // --------------------------------------------------------------
+ key <AB01> { [ udiaeresis, Udiaeresis, numbersign, NoSymbol, Escape, Escape, union, NoSymbol ] };
+ key <AB02> { [ odiaeresis, Odiaeresis, dollar, U03F5, Tab, Tab, intersection, NoSymbol ] };
+ key <AB03> { [ adiaeresis, Adiaeresis, bar, Greek_eta, Insert, Insert, U2135, NoSymbol ] };
+ key <AB04> { [ p, P, asciitilde, Greek_pi, Return, Return, Greek_PI, NoSymbol ] };
+ key <AB05> { [ z, Z, grave, Greek_zeta, Undo, Undo, U2124, NoSymbol ] };
+
+ key <AB06> { [ b, B, plus, Greek_beta, colon, NoSymbol, U21D0, NoSymbol ] };
+ key <AB07> { [ m, M, percent, Greek_mu, KP_1, KP_1, ifonlyif, NoSymbol ] };
+ key.type[Group1] = "EIGHT_LEVEL";
+ key <AB08> { [ comma, endash, quotedbl, U03F1, KP_2, KP_2, U21D2, NoSymbol ] };
+ key <AB09> { [ period, enfilledcircbullet, apostrophe, U03D1, KP_3, KP_3, U21A6, NoSymbol ] };
+ key.type[Group1] = "EIGHT_LEVEL_SEMIALPHABETIC";
+ key <AB10> { [ j, J, semicolon, Greek_theta, semicolon, NoSymbol, Greek_THETA, NoSymbol ] };
+ key.type[Group1] = "EIGHT_LEVEL";
+
+ // Space key
+ // --------------------------------------------------------------
+ key <SPCE> { [ space, space, space, nobreakspace, KP_0, KP_0, U202F, NoSymbol ] };
+
+
+ // Keypad-keys
+ // ===============
+
+ // The former Numlock key:
+ key <NMLK> { [ Tab, ISO_Left_Tab, equal, approxeq, notequal, Pointer_EnableKeys, identical, NoSymbol ] };
+
+ // Topmost row
+ // --------------------------------------------------------------
+ key <KPDV> { [ KP_Divide, KP_Divide, division, U2300, U2215, NoSymbol, U2223, NoSymbol ] };
+ key <KPMU> { [ KP_Multiply, KP_Multiply, U2219, U2299, multiply, NoSymbol, U2297, NoSymbol ] };
+ key <KPSU> { [ KP_Subtract, KP_Subtract, U2212, U2296, U2216, NoSymbol, U2238, NoSymbol ] };
+
+ // Top row
+ // --------------------------------------------------------------
+ key <KP7> { [ KP_7, U2714, U2195, U226A, KP_Home, KP_Home, upstile, NoSymbol ] };
+ key <KP8> { [ KP_8, U2718, uparrow, intersection, KP_Up, KP_Up, U22C2, NoSymbol ] };
+ key <KP9> { [ KP_9, dagger, U20D7, U226B, KP_Prior, KP_Prior, U2309, NoSymbol ] };
+ key <KPAD> { [ KP_Add, KP_Add, plusminus, U2295, U2213, NoSymbol, U2214, NoSymbol ] };
+
+ // Middle row
+ // --------------------------------------------------------------
+ key <KP4> { [ KP_4, club, leftarrow, includedin, KP_Left, KP_Left, U2286, NoSymbol ] };
+ key <KP5> { [ KP_5, EuroSign, colon, U22B6, KP_Begin, KP_Begin, U22B7, NoSymbol ] };
+ key <KP6> { [ KP_6, U2023, rightarrow, includes, KP_Right, KP_Right, U2287, NoSymbol ] };
+
+ // Bottom row
+ // --------------------------------------------------------------
+ key <KP1> { [ KP_1, diamond, U2194, lessthanequal, KP_End, KP_End, downstile, NoSymbol ] };
+ key <KP2> { [ KP_2, heart, downarrow, union, KP_Down, KP_Down, U22C3, NoSymbol ] };
+ key <KP3> { [ KP_3, U2660, U21CC, greaterthanequal, KP_Next, KP_Next, U230B, NoSymbol ] };
+ key <KPEN> { [ KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, KP_Enter, NoSymbol ] };
+ key <KPEQ> { [ KP_Equal, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol, NoSymbol ] };
+
+ // Bottommost row
+ // --------------------------------------------------------------
+ key <KP0> { [ KP_0, U2423, percent, U2030, KP_Insert, KP_Insert, U25A1, NoSymbol ] };
+ key <KPDL> { [ KP_Separator, period, comma, minutes, KP_Delete, KP_Delete, seconds, NoSymbol ] };
+};
+
+partial alphanumeric_keys modifier_keys keypad_keys
+xkb_symbols "neo" {
+
+ include "de(neo_base)"
+
+ name[Group1]= "German (Neo 2)";
+
+ include "shift(both_capslock)"
+ include "level3(caps_switch)"
+ include "level3(bksl_switch)"
+ include "level5(lsgt_switch)"
+ include "level5(ralt_switch)"
+};
+
+// Copied from macintosh_vndr/de
+// olh@suse.de very close to MacOS map
+
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+ include "de"
+ name[Group1]= "German (Macintosh)";
+
+ // Alphanumeric section
+ key <AE01> { [ 1, exclam, exclamdown, at ] };
+ key <AE05> { [ 5, percent, bracketleft ] };
+ key <AE06> { [ 6, ampersand, bracketright ] };
+ key <AE07> { [ 7, slash, bar, backslash ] };
+ key <AE08> { [ 8, parenleft, braceleft, asciitilde ] };
+ key <AE09> { [ 9, parenright, braceright ] };
+ key <AD01> { [ q, Q, guillemotleft, guillemotright ] };
+ key <AD04> { [ r, R, registered ] };
+ key <AD07> { [ u, U, diaeresis, Aacute ] };
+ key <AD08> { [ i, I, slash, Ucircumflex ] };
+ key <AD11> { [ udiaeresis, Udiaeresis, periodcentered, degree ] };
+ key <AD12> { [ plus, asterisk, asciitilde ] };
+ key <AC01> { [ a, A, aring, Aring ] };
+ key <AC05> { [ g, G, copyright ] };
+ key <AC06> { [ h, H, ordfeminine ] };
+ key <AC09> { [ l, L, at ] };
+ key <AC10> { [ odiaeresis, Odiaeresis, dead_acute ] };
+ key <AB06> { [ n, N, asciitilde ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "mac_nodeadkeys" {
+ // modify the standard German mac layout to not have any dead keys
+ include "de(mac)"
+ name[Group1]= "German (Macintosh, eliminate dead keys)";
+ key <AE04> { [ 4, dollar, onequarter, currency ] };
+
+ key <TLDE> { [ asciicircum, degree, notsign ] };
+ key <AE12> { [ acute, grave, cedilla ] };
+ key <AD11> { [ udiaeresis, Udiaeresis, diaeresis ] };
+ key <AD12> { [ plus, asterisk, asciitilde, macron ] };
+ key <AC10> { [ odiaeresis, Odiaeresis, acute ] };
+ key <AC11> { [ adiaeresis, Adiaeresis, asciicircum ] };
+
+ key <BKSL> { [ numbersign, apostrophe, grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dsb"
+{
+ name[Group1] = "Lower Sorbian";
+ include "latin(basic)"
+ include "level3(ralt_switch)"
+ include "kpdl(comma)"
+ key <AB01> { [ z, Z, zcaron, Zcaron ] };
+ key <AB02> { [ x, X, zacute, Zacute ] };
+ key <AB03> { [ c, C, cacute, Cacute ] };
+ key <AB04> { [ v, V, ccaron, Ccaron ] };
+ key <AB06> { [ n, N, nacute, Nacute ] };
+ key <AC02> { [ s, S, sacute, Sacute ] };
+ key <AC03> { [ d, D, scaron, Scaron ] };
+ key <AC04> { [ f, F ] };
+ key <AD01> { [ q, Q ] };
+ key <AD02> { [ w, W ] };
+ key <AD03> { [ e, E, ecaron, Ecaron ] };
+ key <AD04> { [ r, R, racute, Racute ] };
+ key <AD05> { [ t, T, U20B5, EuroSign ] };
+ key <AD09> { [ o, O, oacute, Oacute ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dsb_qwertz"
+{
+ name[Group1] = "Lower Sorbian (qwertz)";
+ include "latin(basic)"
+ include "level3(ralt_switch)"
+ include "kpdl(comma)"
+ key <AB01> { [ y, Y ] };
+ key <AB02> { [ x, X ] };
+ key <AB03> { [ c, C, cacute, Cacute ] };
+ key <AB04> { [ v, V, ccaron, Ccaron ] };
+ key <AB06> { [ n, N, nacute, Nacute ] };
+ key <AC02> { [ s, S, sacute, Sacute ] };
+ key <AC03> { [ d, D, scaron, Scaron ] };
+ key <AC04> { [ f, F ] };
+ key <AD01> { [ q, Q ] };
+ key <AD02> { [ w, W ] };
+ key <AD03> { [ e, E, ecaron, Ecaron ] };
+ key <AD04> { [ r, R, racute, Racute ] };
+ key <AD05> { [ t, T, U20B5, EuroSign ] };
+ key <AD06> { [ z, Z, zcaron, Zcaron ] };
+ key <AD07> { [ u, U, zacute, Zacute ] };
+ key <AD09> { [ o, O, oacute, Oacute ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "qwerty" {
+
+ // This layout should work exactly as a de with the exception
+ // of 'Z' and 'Y' keys, which are in the qwerty style (ie. swapped).
+ // 2008 by Matej Košík <kosik@fiit.stuba.sk>
+
+ include "de(basic)"
+
+ name[Group1] = "German (qwerty)";
+
+ key <AB01> { [ z, Z, leftarrow, yen ] };
+ key <AD06> { [ y, Y, guillemotleft, less ] };
+};
+
+// layout for Russian letters on an german keyboard
+// based on US-RU layout by Ivan Popov <pin@konvalo.org> 2005-07-17
+// adopted for german layout by Alexey Fisher <bug-track@fisher-privat.net> 2010-08-19
+
+partial alphanumeric_keys
+xkb_symbols "ru" {
+
+ include "de(basic)"
+
+ name[Group1]= "Russian (Germany, phonetic)";
+
+key.type[group1]="FOUR_LEVEL_ALPHABETIC";
+
+ key <LatA> { [ Cyrillic_a, Cyrillic_A ] };
+ key <LatB> { [ Cyrillic_be, Cyrillic_BE ] };
+ key <LatW> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <LatG> { [ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <LatD> { [ Cyrillic_de, Cyrillic_DE ] };
+ key <LatE> { [ Cyrillic_ie, Cyrillic_IE ] };
+ key <TLDE> { [ Cyrillic_io, Cyrillic_IO, asciitilde ] };
+ key <LatX> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <LatZ> { [ Cyrillic_ze, Cyrillic_ZE ] };
+ key <LatI> { [ Cyrillic_i, Cyrillic_I ] };
+ key <LatJ> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
+ key <LatK> { [ Cyrillic_ka, Cyrillic_KA ] };
+ key <LatL> { [ Cyrillic_el, Cyrillic_EL ] };
+ key <LatM> { [ Cyrillic_em, Cyrillic_EM ] };
+ key <LatN> { [ Cyrillic_en, Cyrillic_EN ] };
+ key <LatO> { [ Cyrillic_o, Cyrillic_O ] };
+ key <LatP> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <LatR> { [ Cyrillic_er, Cyrillic_ER ] };
+ key <LatS> { [ Cyrillic_es, Cyrillic_ES ] };
+ key <LatT> { [ Cyrillic_te, Cyrillic_TE ] };
+ key <LatU> { [ Cyrillic_u, Cyrillic_U ] };
+ key <LatF> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <LatH> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <LatC> { [ Cyrillic_tse, Cyrillic_TSE ] };
+ key <AC10> { [ Cyrillic_che, Cyrillic_CHE ] };
+ key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA, plus, asterisk ] };
+ key <AE12> { [ Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
+ key <LatY> { [ Cyrillic_yeru, Cyrillic_YERU ] };
+ key <LatV> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
+ key <AC11> { [ Cyrillic_e, Cyrillic_E ] };
+ key <BKSL> { [ Cyrillic_yu, Cyrillic_YU, numbersign, apostrophe ] };
+ key <LatQ> { [ Cyrillic_ya, Cyrillic_YA ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "htcdream" {
+ include "inet(htcdream)"
+
+ name[Group1]= "German";
+
+ //second row
+ key <AD01> { [ q, Q, Tab, Tab ] };
+ key <AD02> { [ w, W, grave, grave ] };
+ key <AD03> { [ e, E, EuroSign, EuroSign ] };
+ key <AD04> { [ r, R, underscore, underscore ] };
+ key <AD05> { [ t, T, sterling, sterling] };
+ key <AD06> { [ z, Z, division, division ] };
+ key <AD07> { [ u, U, udiaeresis, udiaeresis ] };
+ key <AD08> { [ i, I, minus, minus ] };
+ key <AD09> { [ o, O, odiaeresis, odiaeresis ] };
+ key <AD10> { [ p, P, equal, equal ] };
+
+ //third row
+ key <AC01> { [ a, A, adiaeresis, adiaeresis ] };
+ key <AC02> { [ s, S, ssharp, ssharp] };
+ key <AC03> { [ d ,D, backslash, backslash ] };
+ key <AC04> { [ f, F, braceleft, braceleft ] };
+ key <AC05> { [ g, G, braceright, braceright ] };
+ key <AC06> { [ h, H, multiply, multiply ] };
+ key <AC07> { [ j, J, colon, colon ] };
+ key <AC08> { [ k, K, plus, plus ] };
+ key <AC09> { [ l, L, apostrophe, apostrophe ] };
+
+ //forth row
+ key <AB01> { [ y, Y, bar, bar ] };
+ key <AB02> { [ x, X, bracketleft, bracketleft ] };
+ key <AB03> { [ c, C, bracketright, bracketright ] };
+ key <AB04> { [ v, V, less, less ] };
+ key <AB05> { [ b, B, greater, greater ] };
+ key <AB06> { [ n, N, semicolon, semicolon ] };
+ key <AB07> { [ m, M, quotedbl, quotedbl ] };
+ key <AB08> { [ comma, comma, question, question ] };
+
+ //fifth row
+ key <FK15> { [ at, at, asciitilde, asciitilde ] };
+
+ include "level3(alt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/dk b/xorg-server/xkeyboard-config/symbols/dk
index c652ebbb6..1187a99bd 100644
--- a/xorg-server/xkeyboard-config/symbols/dk
+++ b/xorg-server/xkeyboard-config/symbols/dk
@@ -1,72 +1,72 @@
-// based on a keyboard map from an 'xkb/symbols/dk' file
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin(type2)"
-
- name[Group1]="Denmark";
-
- key <AE11> { [ plus, question, plusminus, questiondown ] };
- key <AE12> { [dead_acute, dead_grave, bar, brokenbar ] };
-
-
- key <AC10> { [ ae, AE, dead_acute, dead_doubleacute ] };
- key <AC11> { [ oslash, Ooblique, dead_circumflex, dead_caron ] };
- key <TLDE> { [ onehalf, section, threequarters, paragraph ] };
-
- key <BKSL> { [apostrophe, asterisk, dead_doubleacute, multiply ] };
-
- key <LSGT> { [ less, greater, backslash, notsign ] };
-
- include "kpdl(comma)"
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- include "dk(basic)"
-
- name[Group1]="Denmark - Eliminate dead keys";
-
- key <AE12> { [ acute, grave, bar, ogonek ] };
- key <AD11> { [ aring, Aring, diaeresis, degree ] };
- key <AD12> { [ diaeresis, asciicircum, asciitilde, macron ] };
- key <AC10> { [ ae, AE, acute, doubleacute ] };
- key <AC11> { [ oslash, Ooblique, asciicircum, caron ] };
- key <BKSL> { [apostrophe, asterisk, doubleacute, multiply ] };
- key <AB08> { [ comma, semicolon, cedilla, ogonek ] };
- key <AB09> { [ period, colon, periodcentered, abovedot ] };
-
-};
-
-// Copied from macintosh_vndr/dk
-partial alphanumeric_keys
-xkb_symbols "mac" {
-
- include "dk"
- name[Group1]= "Denmark - Macintosh";
-
- key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
- key <AB10> { [ minus, underscore, hyphen, macron ] };
- include "kpdl(dot)"
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "mac_nodeadkeys" {
- include "dk(mac)"
- name[Group1]= "Denmark - Macintosh, eliminate dead keys";
-
- key <AE12> { [ acute, grave, bar, ogonek ] };
- key <AD12> { [diaeresis, asciicircum, asciitilde, dead_macron ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "dvorak" {
- include "no(dvorak)"
-
- name[Group1]= "Denmark - Dvorak";
-};
+// based on a keyboard map from an 'xkb/symbols/dk' file
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin(type2)"
+
+ name[Group1]="Danish";
+
+ key <AE11> { [ plus, question, plusminus, questiondown ] };
+ key <AE12> { [dead_acute, dead_grave, bar, brokenbar ] };
+
+
+ key <AC10> { [ ae, AE, dead_acute, dead_doubleacute ] };
+ key <AC11> { [ oslash, Ooblique, dead_circumflex, dead_caron ] };
+ key <TLDE> { [ onehalf, section, threequarters, paragraph ] };
+
+ key <BKSL> { [apostrophe, asterisk, dead_doubleacute, multiply ] };
+
+ key <LSGT> { [ less, greater, backslash, notsign ] };
+
+ include "kpdl(comma)"
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ include "dk(basic)"
+
+ name[Group1]="Danish (eliminate dead keys)";
+
+ key <AE12> { [ acute, grave, bar, ogonek ] };
+ key <AD11> { [ aring, Aring, diaeresis, degree ] };
+ key <AD12> { [ diaeresis, asciicircum, asciitilde, macron ] };
+ key <AC10> { [ ae, AE, acute, doubleacute ] };
+ key <AC11> { [ oslash, Ooblique, asciicircum, caron ] };
+ key <BKSL> { [apostrophe, asterisk, doubleacute, multiply ] };
+ key <AB08> { [ comma, semicolon, cedilla, ogonek ] };
+ key <AB09> { [ period, colon, periodcentered, abovedot ] };
+
+};
+
+// Copied from macintosh_vndr/dk
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+ include "dk"
+ name[Group1]= "Danish (Macintosh)";
+
+ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+ key <AB10> { [ minus, underscore, hyphen, macron ] };
+ include "kpdl(dot)"
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "mac_nodeadkeys" {
+ include "dk(mac)"
+ name[Group1]= "Danish (Macintosh, eliminate dead keys)";
+
+ key <AE12> { [ acute, grave, bar, ogonek ] };
+ key <AD12> { [diaeresis, asciicircum, asciitilde, dead_macron ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "dvorak" {
+ include "no(dvorak)"
+
+ name[Group1]= "Danish (Dvorak)";
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ee b/xorg-server/xkeyboard-config/symbols/ee
index e85037b04..fe1092eab 100644
--- a/xorg-server/xkeyboard-config/symbols/ee
+++ b/xorg-server/xkeyboard-config/symbols/ee
@@ -1,100 +1,100 @@
-// based on
-// Estonian XKB-keymap by Ville Hallik <ville@linux.ee>
-//
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- // Describes the differences between a very simple en_US
- // keyboard and a very simple Estonian keyboard
- // This layout conforms to both EVS8:1993 and EVS8:2000 standards
-
- include "latin(type4)"
-
- name[Group1]="Estonia";
-
- key <AE03> { [ 3, numbersign, sterling, sterling ] };
- key <AE04> { [ 4, currency, dollar, dollar ] };
- key <AE11> { [ plus, question, backslash, questiondown ] };
- key <AE12> { [dead_acute, dead_grave, grave, apostrophe ] };
-
- key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
- key <AD12> { [ otilde, Otilde, section, dead_macron ] };
-
- key <AC02> { [ s, S, scaron, Scaron ] };
- key <AC10> { [odiaeresis, Odiaeresis, dead_acute, dead_doubleacute ] };
- key <AC11> { [adiaeresis, Adiaeresis, asciicircum, dead_caron ] };
- key <TLDE> { [dead_caron, dead_tilde, notsign, notsign ] };
-
- key <BKSL> { [apostrophe, asterisk, onehalf, dead_breve ] };
- key <AB01> { [ z, Z, zcaron, Zcaron ] };
- key <AB08> { [ comma, semicolon, less, multiply ] };
- key <AB09> { [ period, colon, greater, division ] };
-
- include "level3(ralt_switch)"
- include "eurosign(e)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- // Modifies the basic Estonian layout to eliminate all dead keys
-
- include "ee(basic)"
- name[Group1]="Estonia - Eliminate dead keys";
-
- key <TLDE> { [asciicircum,asciitilde ] };
- key <AE12> { [apostrophe, grave ] };
- key <AD11> { [udiaeresis, Udiaeresis, diaeresis, degree ] };
- key <AD12> { [ otilde, Otilde, section, macron ] };
- key <AC10> { [odiaeresis, Odiaeresis, acute, doubleacute ] };
- key <AC11> { [adiaeresis, Adiaeresis, asciicircum, caron ] };
- key <BKSL> { [apostrophe, asterisk, onehalf, breve ] };
- key <AB10> { [ minus, underscore, dead_belowdot, abovedot ] };
-};
-
-// Dvorak with Estonian characters
-partial alphanumeric_keys
-xkb_symbols "dvorak" {
- include "us(dvorak)"
- name[Group1]= "Estonia - Dvorak";
-
- key <AE03> { [ 3, numbersign, sterling ] };
- key <AE04> { [ 4, dollar, section, currency ] };
- key <AE08> { [ 8, asterisk, onehalf ] };
-
- key <AC01> { [ a, A, adiaeresis, Adiaeresis ] };
- key <AC02> { [ o, O, otilde, Otilde ] };
- key <AC03> { [ e, E, odiaeresis, Odiaeresis ] };
- key <AC04> { [ u, U, udiaeresis, Udiaeresis ] };
- key <AC10> { [ s, S, scaron, Scaron ] };
- key <AB10> { [ z, Z, zcaron, Zcaron ] };
-
- include "level3(ralt_switch)"
- include "kpdl(comma)"
- include "eurosign(5)"
-};
-
-// Estonian few characters on basic US keymap.
-// by Elan Ruusamäe <glen@delfi.ee>
-partial alphanumeric_keys
-xkb_symbols "us" {
- include "us(euro)"
- name[Group1] = "Estonia - US keyboard with Estonian letters";
-
- // ž, Ž
- key <AB01> { [ z, Z, zcaron, Zcaron ] };
- // ¢
- key <AB03> { [ c, C, cent, cent ] };
- // š, Š
- key <AC02> { [ s, S, scaron, Scaron ] };
- key <AC10> { [ semicolon, colon, odiaeresis, Odiaeresis ] };
- key <AC11> { [ quoteright, quotedbl, adiaeresis, Adiaeresis ] };
- key <AD11> { [ bracketleft, braceleft, udiaeresis, Udiaeresis ] };
- key <AD12> { [ bracketright, braceright, otilde, Otilde ] };
- // £
- key <AE03> { [ 3, numbersign, sterling, sterling ] };
-
- include "level3(ralt_switch)"
- include "eurosign(e)"
-};
+// based on
+// Estonian XKB-keymap by Ville Hallik <ville@linux.ee>
+//
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ // Describes the differences between a very simple en_US
+ // keyboard and a very simple Estonian keyboard
+ // This layout conforms to both EVS8:1993 and EVS8:2000 standards
+
+ include "latin(type4)"
+
+ name[Group1]="Estonian";
+
+ key <AE03> { [ 3, numbersign, sterling, sterling ] };
+ key <AE04> { [ 4, currency, dollar, dollar ] };
+ key <AE11> { [ plus, question, backslash, questiondown ] };
+ key <AE12> { [dead_acute, dead_grave, grave, apostrophe ] };
+
+ key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
+ key <AD12> { [ otilde, Otilde, section, dead_macron ] };
+
+ key <AC02> { [ s, S, scaron, Scaron ] };
+ key <AC10> { [odiaeresis, Odiaeresis, dead_acute, dead_doubleacute ] };
+ key <AC11> { [adiaeresis, Adiaeresis, asciicircum, dead_caron ] };
+ key <TLDE> { [dead_caron, dead_tilde, notsign, notsign ] };
+
+ key <BKSL> { [apostrophe, asterisk, onehalf, dead_breve ] };
+ key <AB01> { [ z, Z, zcaron, Zcaron ] };
+ key <AB08> { [ comma, semicolon, less, multiply ] };
+ key <AB09> { [ period, colon, greater, division ] };
+
+ include "level3(ralt_switch)"
+ include "eurosign(e)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ // Modifies the basic Estonian layout to eliminate all dead keys
+
+ include "ee(basic)"
+ name[Group1]="Estonian (eliminate dead keys)";
+
+ key <TLDE> { [asciicircum,asciitilde ] };
+ key <AE12> { [apostrophe, grave ] };
+ key <AD11> { [udiaeresis, Udiaeresis, diaeresis, degree ] };
+ key <AD12> { [ otilde, Otilde, section, macron ] };
+ key <AC10> { [odiaeresis, Odiaeresis, acute, doubleacute ] };
+ key <AC11> { [adiaeresis, Adiaeresis, asciicircum, caron ] };
+ key <BKSL> { [apostrophe, asterisk, onehalf, breve ] };
+ key <AB10> { [ minus, underscore, dead_belowdot, abovedot ] };
+};
+
+// Dvorak with Estonian characters
+partial alphanumeric_keys
+xkb_symbols "dvorak" {
+ include "us(dvorak)"
+ name[Group1]= "Estonian (Dvorak)";
+
+ key <AE03> { [ 3, numbersign, sterling ] };
+ key <AE04> { [ 4, dollar, section, currency ] };
+ key <AE08> { [ 8, asterisk, onehalf ] };
+
+ key <AC01> { [ a, A, adiaeresis, Adiaeresis ] };
+ key <AC02> { [ o, O, otilde, Otilde ] };
+ key <AC03> { [ e, E, odiaeresis, Odiaeresis ] };
+ key <AC04> { [ u, U, udiaeresis, Udiaeresis ] };
+ key <AC10> { [ s, S, scaron, Scaron ] };
+ key <AB10> { [ z, Z, zcaron, Zcaron ] };
+
+ include "level3(ralt_switch)"
+ include "kpdl(comma)"
+ include "eurosign(5)"
+};
+
+// Estonian few characters on basic US keymap.
+// by Elan Ruusamäe <glen@delfi.ee>
+partial alphanumeric_keys
+xkb_symbols "us" {
+ include "us(euro)"
+ name[Group1] = "Estonian (US keyboard with Estonian letters)";
+
+ // ž, Ž
+ key <AB01> { [ z, Z, zcaron, Zcaron ] };
+ // ¢
+ key <AB03> { [ c, C, cent, cent ] };
+ // š, Š
+ key <AC02> { [ s, S, scaron, Scaron ] };
+ key <AC10> { [ semicolon, colon, odiaeresis, Odiaeresis ] };
+ key <AC11> { [ quoteright, quotedbl, adiaeresis, Adiaeresis ] };
+ key <AD11> { [ bracketleft, braceleft, udiaeresis, Udiaeresis ] };
+ key <AD12> { [ bracketright, braceright, otilde, Otilde ] };
+ // £
+ key <AE03> { [ 3, numbersign, sterling, sterling ] };
+
+ include "level3(ralt_switch)"
+ include "eurosign(e)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/fi b/xorg-server/xkeyboard-config/symbols/fi
index 35c9da7a4..ec944e998 100644
--- a/xorg-server/xkeyboard-config/symbols/fi
+++ b/xorg-server/xkeyboard-config/symbols/fi
@@ -1,206 +1,206 @@
-//
-// X keyboard maps for Finland
-//
-// SFS 5966 / Kotoistus keymap created by Troy Korjuslommi
-// Classic keymap based on traditional by Marko Myllynen
-// Eliminate deadkeys alternative sent by Linus Torvalds
-//
-
-//
-// Missing from X11/keysymdef.h as of 2010-05-13
-//
-// U2030 # PER MILLE SIGN
-// U0292 # LATIN SMALL LETTER EZH
-// U01B7 # LATIN CAPITAL LETTER EZH
-//
-
-partial alphanumeric_keys default
-xkb_symbols "kotoistus" {
-
- // Official keymap for Finland based on SFS 5966 standard
- //
- // This keymap implements all the functionality of Annex 1
- // of the standard and additionally defines the following to
- // allow entering these characters with keyboars without LSGT.
- //
- // AE08+4, U+003C : LESS-THAN SIGN (less)
- // AE09+4, U+003E : GREATER-THAN SIGN (greater)
- // AD08+4, U+007C : VERTICAL LINE (bar)
- //
- // Annex 3 of the standard is implemented in fi_FI.UTF-8/Compose
-
- name[Group1]="Finland";
-
- key <TLDE> { [ section, onehalf, dead_stroke, NoSymbol ] };
- key <AE01> { [ 1, exclam, NoSymbol, exclamdown ] };
- key <AE02> { [ 2, quotedbl, at, rightdoublequotemark ] };
- key <AE03> { [ 3, numbersign, sterling, guillemotright ] };
- key <AE04> { [ 4, currency, dollar, guillemotleft ] };
- key <AE05> { [ 5, percent, U2030, leftdoublequotemark ] };
- key <AE06> { [ 6, ampersand, singlelowquotemark, doublelowquotemark ] };
- key <AE07> { [ 7, slash, braceleft, NoSymbol ] };
- key <AE08> { [ 8, parenleft, bracketleft, less ] };
- key <AE09> { [ 9, parenright, bracketright, greater ] };
- key <AE10> { [ 0, equal, braceright, degree ] };
- key <AE11> { [ plus, question, backslash, questiondown ] };
- key <AE12> { [ dead_acute, dead_grave, dead_cedilla, dead_ogonek ] };
-
- key <AD01> { [ q, Q, q, Q ] };
- key <AD02> { [ w, W, w, W ] };
- key <AD03> { [ e, E, EuroSign, NoSymbol ] };
- key <AD04> { [ r, R, r, R ] };
- key <AD05> { [ t, T, thorn, THORN ] };
- key <AD06> { [ y, Y, y, Y ] };
- key <AD07> { [ u, U, u, U ] };
- key <AD08> { [ i, I, idotless, bar ] };
- key <AD09> { [ o, O, oe, OE ] };
- key <AD10> { [ p, P, dead_horn, dead_hook ] };
- key <AD11> { [ aring, Aring, dead_doubleacute, dead_abovering ] };
- key <AD12> { [ dead_diaeresis, dead_circumflex, dead_tilde, dead_macron ] };
-
- key <AC01> { [ a, A, schwa, SCHWA ] };
- key <AC02> { [ s, S, ssharp, NoSymbol ] };
- key <AC03> { [ d, D, eth, ETH ] };
- key <AC04> { [ f, F, f, F ] };
- key <AC05> { [ g, G, g, G ] };
- key <AC06> { [ h, H, h, H ] };
- key <AC07> { [ j, J, j, J ] };
- key <AC08> { [ k, K, kra, NoSymbol ] };
- key <AC09> { [ l, L, dead_stroke, NoSymbol ] };
- key <AC10> { [ odiaeresis, Odiaeresis, oslash, Oslash ] };
- key <AC11> { [ adiaeresis, Adiaeresis, ae, AE ] };
- key <BKSL> { [ apostrophe, asterisk, dead_caron, dead_breve ] };
-
- key <LSGT> { [ less, greater, bar, NoSymbol ] };
- key <AB01> { [ z, Z, U0292, U01B7 ] };
- key <AB02> { [ x, X, multiply, periodcentered ] };
- key <AB03> { [ c, C, c, C ] };
- key <AB04> { [ v, V, v, V ] };
- key <AB05> { [ b, B, b, B ] };
- key <AB06> { [ n, N, eng, ENG ] };
- key <AB07> { [ m, M, mu, emdash ] };
- key <AB08> { [ comma, semicolon, rightsinglequotemark, leftsinglequotemark ] };
- key <AB09> { [ period, colon, dead_belowdot, dead_abovedot ] };
- key <AB10> { [ minus, underscore, endash, dead_belowcomma ] };
-
- include "nbsp(level4)"
- include "nbsp(level3)"
- include "kpdl(comma)"
- include "level3(ralt_switch)"
- include "compose(rwin)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "classic" {
-
- include "fi(fi)"
-
- name[Group1]="Finland - Classic";
-};
-
-partial alphanumeric_keys hidden
-xkb_symbols "fi" {
-
- // Classic Finnish keyboard layout with dead keys support
- // and all ISO-8859-1 and ISO-8859-15 characters available
-
- key <TLDE> { [ section, onehalf, onequarter, threequarters ] };
- key <AE01> { [ 1, exclam, exclamdown, onesuperior ] };
- key <AE02> { [ 2, quotedbl, at, twosuperior ] };
- key <AE03> { [ 3, numbersign, sterling, threesuperior ] };
- key <AE04> { [ 4, currency, dollar, cent ] };
- key <AE05> { [ 5, percent, EuroSign, masculine ] };
- key <AE06> { [ 6, ampersand, yen, ordfeminine ] };
- key <AE07> { [ 7, slash, braceleft, plusminus ] };
- key <AE08> { [ 8, parenleft, bracketleft, guillemotleft ] };
- key <AE09> { [ 9, parenright, bracketright, guillemotright ] };
- key <AE10> { [ 0, equal, braceright, degree ] };
- key <AE11> { [ plus, question, backslash, questiondown ] };
- key <AE12> { [ dead_acute, dead_grave, dead_cedilla, dead_ogonek ] };
-
- key <AD01> { [ q, Q, q, Q ] };
- key <AD02> { [ w, W, w, W ] };
- key <AD03> { [ e, E, EuroSign, cent ] };
- key <AD04> { [ r, R, registered, NoSymbol ] };
- key <AD05> { [ t, T, thorn, THORN ] };
- key <AD06> { [ y, Y, y, Y ] };
- key <AD07> { [ u, U, u, U ] };
- key <AD08> { [ i, I, idotless, bar ] };
- key <AD09> { [ o, O, o, O ] };
- key <AD10> { [ p, P, paragraph, NoSymbol ] };
- key <AD11> { [ aring, Aring, oe, OE ] };
- key <AD12> { [ dead_diaeresis, dead_circumflex, dead_tilde, dead_caron ] };
-
- key <AC01> { [ a, A, schwa, SCHWA ] };
- key <AC02> { [ s, S, scaron, Scaron ] };
- key <AC03> { [ d, D, eth, ETH ] };
- key <AC04> { [ f, F, f, F ] };
- key <AC05> { [ g, G, eng, ENG ] };
- key <AC06> { [ h, H, h, H ] };
- key <AC07> { [ j, J, j, J ] };
- key <AC08> { [ k, K, kra, NoSymbol ] };
- key <AC09> { [ l, L, dead_stroke, NoSymbol ] };
- key <AC10> { [ odiaeresis, Odiaeresis, oslash, Oslash ] };
- key <AC11> { [ adiaeresis, Adiaeresis, ae, AE ] };
- key <BKSL> { [ apostrophe, asterisk, dead_caron, dead_breve ] };
-
- key <LSGT> { [ less, greater, bar, brokenbar ] };
- key <AB01> { [ z, Z, zcaron, Zcaron ] };
- key <AB02> { [ x, X, multiply, division ] };
- key <AB03> { [ c, C, copyright, cent ] };
- key <AB04> { [ v, V, v, V ] };
- key <AB05> { [ b, B, ssharp, NoSymbol ] };
- key <AB06> { [ n, N, ntilde, Ntilde ] };
- key <AB07> { [ m, M, mu, NoSymbol ] };
- key <AB08> { [ comma, semicolon, dead_cedilla, dead_ogonek ] };
- key <AB09> { [ period, colon, periodcentered, notsign ] };
- key <AB10> { [ minus, underscore, hyphen, dead_macron ] };
-
- include "nbsp(level4)"
- include "kpdl(comma)"
- include "level3(ralt_switch)"
- include "compose(rwin)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- // Classic Finnish keyboard layout without dead keys
-
- include "fi(fi)"
-
- name[Group1]="Finland - Classic, eliminate dead keys";
-
- key <AE12> { [ acute, grave, cedilla, ogonek ] };
- key <AD12> { [ diaeresis, asciicircum, asciitilde, caron ] };
- key <AC09> { [ l, L, l, L ] };
- key <BKSL> { [ apostrophe, asterisk, caron, breve ] };
- key <AB08> { [ comma, semicolon, cedilla, ogonek ] };
- key <AB10> { [ minus, underscore, hyphen, macron ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "smi" {
-
- // Describes the differences between a Norwegian Northern Sami
- // (keyboard with dead key support) and a Swedish/Finnish Sami
- // keyboard according to the specs at:
- // http://www.hum.uit.no/a/trond/se-lat9-sefi-keys.html
-
- include "no(smi)"
-
- name[Group1]="Finland - Northern Saami";
-
- key <AC10> { [ odiaeresis, Odiaeresis, oslash, Oslash ] };
- key <AC11> { [ adiaeresis, Adiaeresis, ae, AE ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "mac" {
-
- // Macintosh keyboard for Finland based on Swedish(Macintosh) keyboard
-
- include "se(mac)"
-
- name[Group1]="Finland - Macintosh";
-};
+//
+// X keyboard maps for Finland
+//
+// SFS 5966 / Kotoistus keymap created by Troy Korjuslommi
+// Classic keymap based on traditional by Marko Myllynen
+// Eliminate deadkeys alternative sent by Linus Torvalds
+//
+
+//
+// Missing from X11/keysymdef.h as of 2010-05-13
+//
+// U2030 # PER MILLE SIGN
+// U0292 # LATIN SMALL LETTER EZH
+// U01B7 # LATIN CAPITAL LETTER EZH
+//
+
+partial alphanumeric_keys default
+xkb_symbols "kotoistus" {
+
+ // Official keymap for Finland based on SFS 5966 standard
+ //
+ // This keymap implements all the functionality of Annex 1
+ // of the standard and additionally defines the following to
+ // allow entering these characters with keyboars without LSGT.
+ //
+ // AE08+4, U+003C : LESS-THAN SIGN (less)
+ // AE09+4, U+003E : GREATER-THAN SIGN (greater)
+ // AD08+4, U+007C : VERTICAL LINE (bar)
+ //
+ // Annex 3 of the standard is implemented in fi_FI.UTF-8/Compose
+
+ name[Group1]="Finnish";
+
+ key <TLDE> { [ section, onehalf, dead_stroke, NoSymbol ] };
+ key <AE01> { [ 1, exclam, NoSymbol, exclamdown ] };
+ key <AE02> { [ 2, quotedbl, at, rightdoublequotemark ] };
+ key <AE03> { [ 3, numbersign, sterling, guillemotright ] };
+ key <AE04> { [ 4, currency, dollar, guillemotleft ] };
+ key <AE05> { [ 5, percent, U2030, leftdoublequotemark ] };
+ key <AE06> { [ 6, ampersand, singlelowquotemark, doublelowquotemark ] };
+ key <AE07> { [ 7, slash, braceleft, NoSymbol ] };
+ key <AE08> { [ 8, parenleft, bracketleft, less ] };
+ key <AE09> { [ 9, parenright, bracketright, greater ] };
+ key <AE10> { [ 0, equal, braceright, degree ] };
+ key <AE11> { [ plus, question, backslash, questiondown ] };
+ key <AE12> { [ dead_acute, dead_grave, dead_cedilla, dead_ogonek ] };
+
+ key <AD01> { [ q, Q, q, Q ] };
+ key <AD02> { [ w, W, w, W ] };
+ key <AD03> { [ e, E, EuroSign, NoSymbol ] };
+ key <AD04> { [ r, R, r, R ] };
+ key <AD05> { [ t, T, thorn, THORN ] };
+ key <AD06> { [ y, Y, y, Y ] };
+ key <AD07> { [ u, U, u, U ] };
+ key <AD08> { [ i, I, idotless, bar ] };
+ key <AD09> { [ o, O, oe, OE ] };
+ key <AD10> { [ p, P, dead_horn, dead_hook ] };
+ key <AD11> { [ aring, Aring, dead_doubleacute, dead_abovering ] };
+ key <AD12> { [ dead_diaeresis, dead_circumflex, dead_tilde, dead_macron ] };
+
+ key <AC01> { [ a, A, schwa, SCHWA ] };
+ key <AC02> { [ s, S, ssharp, NoSymbol ] };
+ key <AC03> { [ d, D, eth, ETH ] };
+ key <AC04> { [ f, F, f, F ] };
+ key <AC05> { [ g, G, g, G ] };
+ key <AC06> { [ h, H, h, H ] };
+ key <AC07> { [ j, J, j, J ] };
+ key <AC08> { [ k, K, kra, NoSymbol ] };
+ key <AC09> { [ l, L, dead_stroke, NoSymbol ] };
+ key <AC10> { [ odiaeresis, Odiaeresis, oslash, Oslash ] };
+ key <AC11> { [ adiaeresis, Adiaeresis, ae, AE ] };
+ key <BKSL> { [ apostrophe, asterisk, dead_caron, dead_breve ] };
+
+ key <LSGT> { [ less, greater, bar, NoSymbol ] };
+ key <AB01> { [ z, Z, U0292, U01B7 ] };
+ key <AB02> { [ x, X, multiply, periodcentered ] };
+ key <AB03> { [ c, C, c, C ] };
+ key <AB04> { [ v, V, v, V ] };
+ key <AB05> { [ b, B, b, B ] };
+ key <AB06> { [ n, N, eng, ENG ] };
+ key <AB07> { [ m, M, mu, emdash ] };
+ key <AB08> { [ comma, semicolon, rightsinglequotemark, leftsinglequotemark ] };
+ key <AB09> { [ period, colon, dead_belowdot, dead_abovedot ] };
+ key <AB10> { [ minus, underscore, endash, dead_belowcomma ] };
+
+ include "nbsp(level4)"
+ include "nbsp(level3)"
+ include "kpdl(comma)"
+ include "level3(ralt_switch)"
+ include "compose(rwin)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "classic" {
+
+ include "fi(fi)"
+
+ name[Group1]="Finnish (classic)";
+};
+
+partial alphanumeric_keys hidden
+xkb_symbols "fi" {
+
+ // Classic Finnish keyboard layout with dead keys support
+ // and all ISO-8859-1 and ISO-8859-15 characters available
+
+ key <TLDE> { [ section, onehalf, onequarter, threequarters ] };
+ key <AE01> { [ 1, exclam, exclamdown, onesuperior ] };
+ key <AE02> { [ 2, quotedbl, at, twosuperior ] };
+ key <AE03> { [ 3, numbersign, sterling, threesuperior ] };
+ key <AE04> { [ 4, currency, dollar, cent ] };
+ key <AE05> { [ 5, percent, EuroSign, masculine ] };
+ key <AE06> { [ 6, ampersand, yen, ordfeminine ] };
+ key <AE07> { [ 7, slash, braceleft, plusminus ] };
+ key <AE08> { [ 8, parenleft, bracketleft, guillemotleft ] };
+ key <AE09> { [ 9, parenright, bracketright, guillemotright ] };
+ key <AE10> { [ 0, equal, braceright, degree ] };
+ key <AE11> { [ plus, question, backslash, questiondown ] };
+ key <AE12> { [ dead_acute, dead_grave, dead_cedilla, dead_ogonek ] };
+
+ key <AD01> { [ q, Q, q, Q ] };
+ key <AD02> { [ w, W, w, W ] };
+ key <AD03> { [ e, E, EuroSign, cent ] };
+ key <AD04> { [ r, R, registered, NoSymbol ] };
+ key <AD05> { [ t, T, thorn, THORN ] };
+ key <AD06> { [ y, Y, y, Y ] };
+ key <AD07> { [ u, U, u, U ] };
+ key <AD08> { [ i, I, idotless, bar ] };
+ key <AD09> { [ o, O, o, O ] };
+ key <AD10> { [ p, P, paragraph, NoSymbol ] };
+ key <AD11> { [ aring, Aring, oe, OE ] };
+ key <AD12> { [ dead_diaeresis, dead_circumflex, dead_tilde, dead_caron ] };
+
+ key <AC01> { [ a, A, schwa, SCHWA ] };
+ key <AC02> { [ s, S, scaron, Scaron ] };
+ key <AC03> { [ d, D, eth, ETH ] };
+ key <AC04> { [ f, F, f, F ] };
+ key <AC05> { [ g, G, eng, ENG ] };
+ key <AC06> { [ h, H, h, H ] };
+ key <AC07> { [ j, J, j, J ] };
+ key <AC08> { [ k, K, kra, NoSymbol ] };
+ key <AC09> { [ l, L, dead_stroke, NoSymbol ] };
+ key <AC10> { [ odiaeresis, Odiaeresis, oslash, Oslash ] };
+ key <AC11> { [ adiaeresis, Adiaeresis, ae, AE ] };
+ key <BKSL> { [ apostrophe, asterisk, dead_caron, dead_breve ] };
+
+ key <LSGT> { [ less, greater, bar, brokenbar ] };
+ key <AB01> { [ z, Z, zcaron, Zcaron ] };
+ key <AB02> { [ x, X, multiply, division ] };
+ key <AB03> { [ c, C, copyright, cent ] };
+ key <AB04> { [ v, V, v, V ] };
+ key <AB05> { [ b, B, ssharp, NoSymbol ] };
+ key <AB06> { [ n, N, ntilde, Ntilde ] };
+ key <AB07> { [ m, M, mu, NoSymbol ] };
+ key <AB08> { [ comma, semicolon, dead_cedilla, dead_ogonek ] };
+ key <AB09> { [ period, colon, periodcentered, notsign ] };
+ key <AB10> { [ minus, underscore, hyphen, dead_macron ] };
+
+ include "nbsp(level4)"
+ include "kpdl(comma)"
+ include "level3(ralt_switch)"
+ include "compose(rwin)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ // Classic Finnish keyboard layout without dead keys
+
+ include "fi(fi)"
+
+ name[Group1]="Finnish (classic, eliminate dead keys)";
+
+ key <AE12> { [ acute, grave, cedilla, ogonek ] };
+ key <AD12> { [ diaeresis, asciicircum, asciitilde, caron ] };
+ key <AC09> { [ l, L, l, L ] };
+ key <BKSL> { [ apostrophe, asterisk, caron, breve ] };
+ key <AB08> { [ comma, semicolon, cedilla, ogonek ] };
+ key <AB10> { [ minus, underscore, hyphen, macron ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "smi" {
+
+ // Describes the differences between a Norwegian Northern Sami
+ // (keyboard with dead key support) and a Swedish/Finnish Sami
+ // keyboard according to the specs at:
+ // http://www.hum.uit.no/a/trond/se-lat9-sefi-keys.html
+
+ include "no(smi)"
+
+ name[Group1]="Saami (Finland)";
+
+ key <AC10> { [ odiaeresis, Odiaeresis, oslash, Oslash ] };
+ key <AC11> { [ adiaeresis, Adiaeresis, ae, AE ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+ // Macintosh keyboard for Finland based on Swedish(Macintosh) keyboard
+
+ include "se(mac)"
+
+ name[Group1]="Finnish (Macintosh)";
+};
diff --git a/xorg-server/xkeyboard-config/symbols/fo b/xorg-server/xkeyboard-config/symbols/fo
index b57c917af..b0b24ce75 100644
--- a/xorg-server/xkeyboard-config/symbols/fo
+++ b/xorg-server/xkeyboard-config/symbols/fo
@@ -1,48 +1,48 @@
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin(type2)"
-
- name[Group1]= "Faroe Islands";
-
- key <TLDE> { [ onehalf, section, threequarters, paragraph ] };
- key <LSGT> { [ less, greater, backslash, notsign ] };
- key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
-
- key <AE05> { [ 5, percent, NoSymbol, cent ] };
- key <AE06> { [ 6, ampersand, yen, NoSymbol ] };
- key <AE11> { [ plus, question, plusminus, questiondown ] };
- key <AE12> { [dead_acute, dead_grave, bar, brokenbar ] };
-
- key <AB03> { [ c, C, copyright, NoSymbol ] };
- key <AB10> { [ minus, underscore, hyphen, macron ] };
-
- key <AC03> { [ d, D, eth, ETH ] };
- key <AC10> { [ ae, AE ] };
- key <AC11> { [ oslash, Ooblique ] };
-
- key <AD08> { [ i, I ] };
- key <AD11> { [ aring, Aring, dead_diaeresis, dead_circumflex ] };
- key <AD12> { [ eth, ETH, dead_tilde, dead_caron ] };
-
- key <BKSL> { [apostrophe, asterisk, dead_doubleacute, multiply ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- include "fo(basic)"
-
- name[Group1]= "Faroe Islands - Eliminate dead keys";
-
- key <AE12> { [ acute, grave, bar, ogonek ] };
- key <AD11> { [ aring, Aring, diaeresis, degree ] };
- key <AD12> { [ diaeresis, asciicircum, asciitilde, macron ] };
- key <AC10> { [ ae, AE, acute, doubleacute ] };
- key <AC11> { [ oslash, Ooblique, asciicircum, caron ] };
- key <BKSL> { [apostrophe, asterisk, doubleacute, multiply ] };
- key <AB08> { [ comma, semicolon, cedilla, ogonek ] };
- key <AB09> { [ period, colon, periodcentered, abovedot ] };
-};
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin(type2)"
+
+ name[Group1]= "Faroese";
+
+ key <TLDE> { [ onehalf, section, threequarters, paragraph ] };
+ key <LSGT> { [ less, greater, backslash, notsign ] };
+ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+
+ key <AE05> { [ 5, percent, NoSymbol, cent ] };
+ key <AE06> { [ 6, ampersand, yen, NoSymbol ] };
+ key <AE11> { [ plus, question, plusminus, questiondown ] };
+ key <AE12> { [dead_acute, dead_grave, bar, brokenbar ] };
+
+ key <AB03> { [ c, C, copyright, NoSymbol ] };
+ key <AB10> { [ minus, underscore, hyphen, macron ] };
+
+ key <AC03> { [ d, D, eth, ETH ] };
+ key <AC10> { [ ae, AE ] };
+ key <AC11> { [ oslash, Ooblique ] };
+
+ key <AD08> { [ i, I ] };
+ key <AD11> { [ aring, Aring, dead_diaeresis, dead_circumflex ] };
+ key <AD12> { [ eth, ETH, dead_tilde, dead_caron ] };
+
+ key <BKSL> { [apostrophe, asterisk, dead_doubleacute, multiply ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ include "fo(basic)"
+
+ name[Group1]= "Faroese (eliminate dead keys)";
+
+ key <AE12> { [ acute, grave, bar, ogonek ] };
+ key <AD11> { [ aring, Aring, diaeresis, degree ] };
+ key <AD12> { [ diaeresis, asciicircum, asciitilde, macron ] };
+ key <AC10> { [ ae, AE, acute, doubleacute ] };
+ key <AC11> { [ oslash, Ooblique, asciicircum, caron ] };
+ key <BKSL> { [apostrophe, asterisk, doubleacute, multiply ] };
+ key <AB08> { [ comma, semicolon, cedilla, ogonek ] };
+ key <AB09> { [ period, colon, periodcentered, abovedot ] };
+};
diff --git a/xorg-server/xkeyboard-config/symbols/fr b/xorg-server/xkeyboard-config/symbols/fr
index c804eb09e..8bb7213bd 100644
--- a/xorg-server/xkeyboard-config/symbols/fr
+++ b/xorg-server/xkeyboard-config/symbols/fr
@@ -1,1021 +1,1021 @@
-// based on a keyboard map from an 'xkb/symbols/fr' file
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin"
-
- name[Group1]="France";
-
- key <AE01> { [ ampersand, 1, onesuperior, exclamdown ] };
- key <AE02> { [ eacute, 2, asciitilde, oneeighth ] };
- key <AE03> { [ quotedbl, 3, numbersign, sterling ] };
- key <AE04> { [apostrophe, 4, braceleft, dollar ] };
- key <AE05> { [ parenleft, 5, bracketleft, threeeighths ] };
- key <AE06> { [ minus, 6, bar, fiveeighths ] };
- key <AE07> { [ egrave, 7, grave, seveneighths ] };
- key <AE08> { [underscore, 8, backslash, trademark ] };
- key <AE09> { [ ccedilla, 9, asciicircum, plusminus ] };
- key <AE10> { [ agrave, 0, at, degree ] };
- key <AE11> { [parenright, degree, bracketright, questiondown ] };
- key <AE12> { [ equal, plus, braceright, dead_ogonek ] };
-
- key <AD01> { [ a, A, ae, AE ] };
- key <AD02> { [ z, Z, guillemotleft, less ] };
- key <AD03> { [ e, E, EuroSign, cent ] };
- key <AD11> { [dead_circumflex, dead_diaeresis, dead_diaeresis, dead_abovering ] };
- key <AD12> { [ dollar, sterling, currency, dead_macron ] };
-
- key <AC01> { [ q, Q, at, Greek_OMEGA ] };
- key <AC10> { [ m, M, mu, masculine ] };
- key <AC11> { [ ugrave, percent, dead_circumflex, dead_caron] };
- key <TLDE> { [twosuperior, asciitilde, notsign, notsign ] };
-
- key <BKSL> { [ asterisk, mu, dead_grave, dead_breve ] };
- key <AB01> { [ w, W, lstroke, Lstroke ] };
- key <AB07> { [ comma, question, dead_acute, dead_doubleacute ] };
- key <AB08> { [ semicolon, period, horizconnector, multiply ] };
- key <AB09> { [ colon, slash, periodcentered, division ] };
- key <AB10> { [ exclam, section, dead_belowdot, dead_abovedot ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "olpc" {
- // Contact: Sayamindu Dasgupta <sayamindu@laptop.org>
- include "fr(basic)"
-
- name[Group1]="France";
-
- key <AD02> { [ z, Z, VoidSymbol, guillemotleft ] };
-
- key <AC02> { [ s, S, VoidSymbol, ssharp ] };
-
- key <AB02> { [ x, X, VoidSymbol, guillemotright ] };
-
- key <I219> { [ less, greater ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "Sundeadkeys" {
-
- // Modifies the basic French layout to use the Sun dead keys
-
- include "fr(basic)"
-
- key <AD11> { [dead_circumflex, dead_diaeresis ] };
- key <AB07> { [comma, question, dead_acute, dead_doubleacute ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "sundeadkeys" {
- include "fr(Sundeadkeys)"
-
- name[Group1]="France - Sun dead keys";
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- // Modifies the basic French layout to eliminate all dead keys
-
- include "fr(basic)"
-
- name[Group1]="France - Eliminate dead keys";
-
- key <AE12> { [ equal, plus, braceright, ogonek ] };
- key <AD11> { [asciicircum, diaeresis ] };
- key <AD12> { [ dollar, sterling, currency, macron ] };
- key <AC11> { [ ugrave, percent, asciicircum, caron ] };
- key <BKSL> { [ asterisk, mu, grave, breve ] };
- key <AB07> { [ comma, question, acute, doubleacute ] };
- key <AB10> { [ exclam, section, dead_belowdot, abovedot ] };
-};
-
-
-// Unicode French derivative
-// Loose refactoring of the historic Linux French keyboard layout
-//
-// Copyright © 2006-2008 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
-//
-// Credits (fr-latin1, fr-latin0, fr-latin9)
-// © 199x-1996 René Cougnenc ✝
-// © 1997-2002 Guylhem Aznar <clavier @ externe.net>
-// © 2003-2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
-//
-// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
-// │ ³ ¸ │ 1 ̨ │ 2 É │ 3 ˘ │ 4 — │ 5 – │ 6 ‑ │ 7 È │ 8 ™ │ 9 Ç │ 0 À │ ° ≠ │ + ± ┃ ⌫ Retour┃
-// │ ² ¹ │ & ˇ │ é ~ │ " # │ ' { │ ( [ │ - | │ è ` │ _ \ │ ç ^ │ à @ │ ) ] │ = } ┃ arrière┃
-// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
-// ┃ ┃ A Æ │ Z  │ E ¢ │ R Ê │ T Þ │ Y Ÿ │ U Û │ I Î │ O Œ │ P Ô │ ¨ ˚ │ £ Ø ┃Entrée ┃
-// ┃Tab ↹ ┃ a æ │ z â │ e € │ r ê │ t þ │ y ÿ │ u û │ i î │ o œ │ p ô │ ^ ~ │ $ ø ┃ ⏎ ┃
-// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
-// ┃ ┃ Q Ä │ S „ │ D Ë │ F ‚ │ G ¥ │ H Ð │ J Ü │ K Ï │ L Ŀ │ M Ö │ % Ù │ µ ̄ ┃ ┃
-// ┃Maj ⇬ ┃ q ä │ s ß │ d ë │ f ‘ │ g ’ │ h ð │ j ü │ k ï │ l ŀ │ m ö │ ù ' │ * ` ┃ ┃
-// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
-// ┃ ┃ > ≥ │ W “ │ X ” │ C ® │ V ← │ B ↑ │ N → │ ? … │ . . │ / ∕ │ § − ┃ ┃
-// ┃Shift ⇧┃ < ≤ │ w « │ x » │ c © │ v ⍽ │ b ↓ │ n ¬ │ , ¿ │ ; × │ : ÷ │ ! ¡ ┃Shift ⇧ ┃
-// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
-// ┃ ┃ ┃ ┃ ␣ Espace fine insécable ⍽ ┃ ┃ ┃ ┃
-// ┃Ctrl ┃Meta ┃Alt ┃ ␣ Espace Espace insécable ⍽ ┃AltGr ⇮┃Menu ┃Ctrl ┃
-// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
-partial alphanumeric_keys
-xkb_symbols "oss" {
-
- include "latin"
- include "level3(ralt_switch)"
- include "nbsp(level4nl)"
- include "keypad(oss)"
-
- name[Group1]="France - Alternative";
-
- // First row
- key <TLDE> { [ twosuperior, threesuperior, onesuperior, dead_cedilla ] }; // ² ³ ¹ ¸
- key <AE01> { [ ampersand, 1, dead_caron, dead_ogonek ] }; // & 1 ˇ ̨
- key <AE02> { [ eacute, 2, asciitilde, Eacute ] }; // é 2 ~ É
- key <AE03> { [ quotedbl, 3, numbersign, dead_breve ] }; // " 3 # ˘
- key <AE04> { [ apostrophe, 4, braceleft, 0x1002014 ] }; // ' 4 { — (tiret cadratin)
- key <AE05> { [ parenleft, 5, bracketleft, 0x1002013 ] }; // ( 5 [ – (tiret demi-cadratin)
- key <AE06> { [ minus, 6, bar, 0x1002011 ] }; // - 6 | ‑ (tiret insécable)
- key <AE07> { [ egrave, 7, grave, Egrave ] }; // è 7 ` È
- key <AE08> { [ underscore, 8, backslash, trademark ] }; // _ 8 \ ™
- key <AE09> { [ ccedilla, 9, asciicircum, Ccedilla ] }; // ç 9 ^ Ç
- key <AE10> { [ agrave, 0, at, Agrave ] }; // à 0 @ À
- key <AE11> { [ parenright, degree, bracketright, notequal ] }; // ) ° ] ≠
- key <AE12> { [ equal, plus, braceright, plusminus ] }; // = + } ±
-
- // Second row
- key <AD01> { [ a, A, ae, AE ] }; // a A æ Æ
- key <AD02> { [ z, Z, acircumflex, Acircumflex ] }; // z Z â Â
- key <AD03> { [ e, E, EuroSign, cent ] }; // e E € ¢
- key <AD04> { [ r, R, ecircumflex, Ecircumflex ] }; // r R ê Ê
- key <AD05> { [ t, T, thorn, THORN ] }; // t T þ Þ
- key <AD06> { [ y, Y, ydiaeresis, Ydiaeresis ] }; // y Y ÿ Ÿ
- key <AD07> { [ u, U, ucircumflex, Ucircumflex ] }; // u U û Û
- key <AD08> { [ i, I, icircumflex, Icircumflex ] }; // i I î Î
- key <AD09> { [ o, O, oe, OE ] }; // o O œ Œ
- key <AD10> { [ p, P, ocircumflex, Ocircumflex ] }; // p P ô Ô
- key <AD11> { [ dead_circumflex, dead_diaeresis, dead_tilde, dead_abovering ] }; // ^ ̈ ̃ ˚
- key <AD12> { [ dollar, sterling, oslash, Ooblique ] }; // $ £ ø Ø
-
- // Third row
- key <AC01> { [ q, Q, adiaeresis, Adiaeresis ] }; // q Q ä Ä
- key <AC02> { [ s, S, ssharp, doublelowquotemark ] }; // s S ß „
- key <AC03> { [ d, D, ediaeresis, Ediaeresis ] }; // d D ë Ë
- key <AC04> { [ f, F, leftsinglequotemark, singlelowquotemark ] }; // f F ‘ ‚
- key <AC05> { [ g, G, rightsinglequotemark, yen ] }; // g G ’ ¥
- key <AC06> { [ h, H, eth, ETH ] }; // h H ð Ð
- key <AC07> { [ j, J, udiaeresis, Udiaeresis ] }; // j J ü Ü
- key <AC08> { [ k, K, idiaeresis, Idiaeresis ] }; // k K ï Ï
- key <AC09> { [ l, L, 0x1000140, 0x100013F ] }; // l L ŀ Ŀ
- key <AC10> { [ m, M, odiaeresis, Odiaeresis ] }; // m M ö Ö
- key <AC11> { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù
- key <BKSL> { [ asterisk, mu, dead_grave, dead_macron ] }; // * µ ` ̄
-
- // Fourth row
- key <LSGT> { [ less, greater, lessthanequal, greaterthanequal ] }; // < > ≤ ≥
- key <AB01> { [ w, W, guillemotleft, leftdoublequotemark ] }; // w W « “
- key <AB02> { [ x, X, guillemotright, rightdoublequotemark ] }; // x X » ”
- key <AB03> { [ c, C, copyright, registered ] }; // c C © ®
- key <AB04> { [ v, V, 0x100202F, leftarrow ] }; // v V ⍽ ← (espace fine insécable)
- key <AB05> { [ b, B, downarrow, uparrow ] }; // b B ↓ ↑
- key <AB06> { [ n, N, notsign, rightarrow ] }; // n N ¬ →
- key <AB07> { [ comma, question, questiondown, 0x1002026 ] }; // , ? ¿ …
- key <AB08> { [ semicolon, period, multiply, 0x10022C5 ] }; // ; . × ⋅
- key <AB09> { [ colon, slash, division, 0x1002215 ] }; // : / ÷ ∕
- key <AB10> { [ exclam, section, exclamdown, 0x1002212 ] }; // ! § ¡ −
-};
-
-partial alphanumeric_keys
-xkb_symbols "oss_latin9" {
-
- // Restricts the fr(oss) layout to latin9 symbols
-
- include "fr(oss)"
- include "keypad(oss_latin9)"
-
- name[Group1]="France - Alternative, latin-9 only";
-
- // First row
- key <AE01> { [ ampersand, 1, dead_caron, dead_cedilla ] }; // & 1 ˇ ¸
- key <AE03> { [ quotedbl, 3, numbersign, dead_tilde ] }; // " 3 # ~
- key <AE04> { [ apostrophe, 4, braceleft, underscore ] }; // ' 4 { _
- key <AE05> { [ parenleft, 5, bracketleft, minus ] }; // ( 5 [ -
- key <AE06> { [ minus, 6, bar, minus ] }; // - 6 | -
- key <AE08> { [ underscore, 8, backslash, backslash ] }; // _ 8 \ \
- key <AE11> { [ parenright, degree, bracketright, equal ] }; // ) ° ] =
-
- // Third row
- key <AC02> { [ s, S, ssharp, guillemotleft ] }; // s S ß «
- key <AC04> { [ f, F, apostrophe, apostrophe ] }; // f F ' '
- key <AC05> { [ g, G, apostrophe, yen ] }; // g G ' ¥
- key <AC09> { [ l, L, periodcentered, periodcentered ] }; // l L · ·
- key <BKSL> { [ asterisk, mu, dead_grave, dead_circumflex ] }; // * µ ` ^
-
- // Fourth row
- key <LSGT> { [ less, greater, less, greater ] }; // < > < >
- key <AB01> { [ w, W, guillemotleft, guillemotleft ] }; // w W « «
- key <AB02> { [ x, X, guillemotright, guillemotright ] }; // x X » »
- key <AB04> { [ v, V, nobreakspace, less ] }; // v V ⍽ < (espace insécable)
- key <AB05> { [ b, B, minus, asciicircum ] }; // b B - ^
- key <AB06> { [ n, N, notsign, greater ] }; // n N ¬ >
- key <AB07> { [ comma, question, questiondown, period ] }; // , ? ¿ .
- key <AB08> { [ semicolon, period, multiply, periodcentered ] }; // ; . × ·
- key <AB09> { [ colon, slash, division, slash ] }; // : / ÷ /
- key <AB10> { [ exclam, section, exclamdown, minus ] }; // ! § ¡ -
-};
-
-partial alphanumeric_keys
-xkb_symbols "oss_Sundeadkeys" {
-
- // Modifies the basic fr(oss) layout to use the Sun dead keys
-
- include "fr(oss)"
-
- // First row
- key <TLDE> { [ twosuperior, threesuperior, onesuperior, dead_cedilla ] }; // ¹ ² ³ ¸
-
- // Second row
- key <AD11> { [ dead_circumflex, dead_diaeresis, dead_tilde, dead_abovering ] }; // ^ ̈ ̃ ˚
-
- //Third row
- key <AC11> { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù
- key <BKSL> { [ asterisk, mu, dead_grave, dead_macron ] }; // * µ ` ̄
-};
-
-partial alphanumeric_keys
-xkb_symbols "oss_sundeadkeys" {
-
- include "fr(oss_Sundeadkeys)"
-
- name[Group1]="France - Alternative, Sun dead keys";
-};
-
-partial alphanumeric_keys
-xkb_symbols "oss_nodeadkeys" {
-
- // Modifies the basic fr(oss) layout to eliminate all dead keys
-
- include "fr(oss)"
-
- name[Group1]="France - Alternative, eliminate dead keys";
-
- key <TLDE> { [ twosuperior, threesuperior, onesuperior, cedilla ] }; // ² ³ ¹ ¸
- key <AE01> { [ ampersand, 1, caron, ogonek ] }; // & 1 ˇ ̨
- key <AE03> { [ quotedbl, 3, numbersign, breve ] }; // " 3 # ˘
-
- // Second row
- key <AD11> { [ asciicircum, diaeresis, asciitilde, Aring ] }; // ^ ̈ ̃ Å
- key <AC11> { [ ugrave, percent, acute, Ugrave ] }; // ù % ' Ù
- key <BKSL> { [ asterisk, mu, grave, macron ] }; // * µ ` ̄
-};
-
-
-// Historic Linux French keyboard layout (fr-latin9)
-// Copyright (c) 199x, 2002 Rene Cougnenc (original work)
-// Guylhem Aznar <clavier @ externe.net> (maintainer)
-// Nicolas Mailhot <Nicolas.Mailhot @ laposte.net>
-// (XFree86 submission)
-//
-// This layout has long been distributed and refined outside official channels.
-// To this day it remains more feature-rich and popular than the 'fr' layout.
-//
-// This file is derived from an original version by Guylhem Aznar. The
-// original version is always available from:
-// http://en.tldp.org/HOWTO/Francophones-HOWTO.html
-// and is distributed under a GPL license.
-//
-// The author has given permission for this derived version to be distributed
-// under the standard XFree86 license. He would like all changes to this
-// version be send to him at <clavier @ externe.net> so he can sync the
-// identically named linux console map (kbd, linux-console) and this
-// fileout-of-tree GPL version.
-//
-// Now follows the keyboard design description in French.
-// (If you can't read it you probably have no business changing this file anyway:)
-//
-// Les accents circonflexes des principales voyelles sont obtenus avec
-// la touche Alt_Gr, les trémas sont obtenus par Alt_Gr + Shift.
-//
-// ____ _________ _____________ _______
-// | S A| S = Shift, A = AltGr + Shift | Imprime | Arrêt défil | Pause |
-// | s a| s = normal, a = AltGr | Exec | | Halte |
-// ¯¯¯¯ ¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯
-// ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _______
-// | œ "| 1 ·| 2 É| 3 ,| 4 '| 5 "| 6 || 7 È| 8 ¯| 9 Ç| 0 À| ° ÿ| + °| <-- |
-// | Œ "| & '| é ~| " #| ' {| ( [| - || è `| _ \| ç ^| à @| ) ]| = }| |
-// ========================================================================
-// | |<- | A ä| Z Å| E ¢| R Ç| T Þ| Y Ý| U ü| I ï| O ö| P '| " `| $ ë| , |
-// | ->| | a â| z å| e €| r ç| t þ| y ý| u û| i î| o ô| p ¶| ^ ~| £ ê| <-' |
-// ===================================================================¬ |
-// | | Q Ä| S Ø| D Ë| F ª| G Æ| H Ð| J Ü| K Ï| L Ö| M º| % Ù| µ ¥| |
-// | MAJ | q Â| s ø| d Ê| f ±| g æ| h ð| j Û| k Î| l Ô| m ¹| ù ²| * ³| |
-// ========================================================================
-// | ^ | > | W | X | C | V | B | N | ? | . | / | § | ^ |
-// | | | < || w «| x »| c ©| v ®| b ß| n ¬| , ¿| ; ×| : ÷| ! ¡| | |
-// ========================================================================
-// | | | | | | | | |
-// | Ctrl | Super| Alt | Space Nobreakspace | AltGr | Super|Menu | Ctrl |
-// ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯¯
-//
-//
-// Si les touches mortes fonctionnent, utiliser les accents dits
-// « morts », i.e. fonctionnant comme l'accent circonflexe & le
-// tréma des machines à écrire ; sont disponibles :
-//
-// (^) : accent circonflexe,
-// Shift+(^) : tréma,
-// Shift+AltGr (^) : tilde,
-// AltGr (1) : accent aigu,
-// AltGr (7) : accent grave
-//
-// Pour s'en servir, procéder comme avec l'accent circonflexe & le tréma
-// sur les vielles machines à écrire :
-//
-// AltGr (1) puis e : é
-// Shift+AltGr (1) puis e : É ...
-partial alphanumeric_keys
-
-xkb_symbols "latin9" {
-
- include "latin"
- include "nbsp(level3)"
-
- name[Group1]="France - (Legacy) Alternative";
-
- key <TLDE> { [ oe, OE, leftdoublequotemark, rightdoublequotemark ] };
- key <AE01> { [ ampersand, 1, dead_acute, periodcentered ] };
- key <AE02> { [ eacute, 2, asciitilde, Eacute ] };
- key <AE03> { [ quotedbl, 3, numbersign, cedilla ] };
- key <AE04> { [ apostrophe, 4, braceleft, acute ] };
- key <AE05> { [ parenleft, 5, bracketleft, diaeresis ] };
- key <AE06> { [ minus, 6, bar, brokenbar ] };
- key <AE07> { [ egrave, 7, dead_grave, Egrave ] };
- key <AE08> { [ underscore, 8, backslash, macron ] };
- key <AE09> { [ ccedilla, 9, asciicircum, Ccedilla ] };
- key <AE10> { [ agrave, 0, at, Agrave ] };
- key <AE11> { [ parenright, degree, bracketright, ydiaeresis ] };
- key <AE12> { [ equal, plus, braceright, dead_abovering ] };
-
- key <AD01> { [ a, A, acircumflex, adiaeresis ] };
- key <AD02> { [ z, Z, aring, Aring ] };
- key <AD03> { [ e, E, EuroSign, cent ] };
- key <AD04> { [ r, R, ccedilla, Ccedilla ] };
- key <AD05> { [ t, T, thorn, THORN ] };
- key <AD06> { [ y, Y, yacute, Yacute ] };
- key <AD07> { [ u, U, ucircumflex, udiaeresis ] };
- key <AD08> { [ i, I, icircumflex, idiaeresis ] };
- key <AD09> { [ o, O, ocircumflex, odiaeresis ] };
- key <AD10> { [ p, P, paragraph, quoteleft ] };
- key <AD11> { [ dead_circumflex, dead_diaeresis, dead_tilde, quoteright ] };
- key <AD12> { [ dollar, sterling, ecircumflex, ediaeresis ] };
-
- key <AC01> { [ q, Q, Acircumflex, Adiaeresis ] };
- key <AC02> { [ s, S, oslash, Ooblique ] };
- key <AC03> { [ d, D, Ecircumflex, Ediaeresis ] };
- key <AC04> { [ f, F, plusminus, ordfeminine ] };
- key <AC05> { [ g, G, ae, AE ] };
- key <AC06> { [ h, H, eth, ETH ] };
- key <AC07> { [ j, J, Ucircumflex, Udiaeresis ] };
- key <AC08> { [ k, K, Icircumflex, Idiaeresis ] };
- key <AC09> { [ l, L, Ocircumflex, Odiaeresis ] };
- key <AC10> { [ m, M, onesuperior, masculine ] };
- key <AC11> { [ ugrave, percent, twosuperior, Ugrave ] };
- key <BKSL> { [ asterisk, mu, threesuperior, yen ] };
-
- key <LSGT> { [ less, greater, bar ] };
- key <AB01> { [ w, W, guillemotleft ] };
- key <AB02> { [ x, X, guillemotright ] };
- key <AB03> { [ c, C, copyright ] };
- key <AB04> { [ v, V, registered ] };
- key <AB05> { [ b, B, ssharp ] };
- key <AB06> { [ n, N, notsign ] };
- key <AB07> { [ comma, question, questiondown ] };
- key <AB08> { [ semicolon, period, multiply ] };
- key <AB09> { [ colon, slash, division ] };
- key <AB10> { [ exclam, section, exclamdown ] };
-
- // French uses a comma as decimal separator, but keyboards are labeled with a period
- // Will take effect when KP_Decimal is mapped to the locale decimal separator
- key <KPDL> { [ KP_Delete, KP_Decimal, KP_Delete, KP_Decimal ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "latin9_Sundeadkeys" {
-
- // Modifies the basic fr-latin9 layout to use the Sun dead keys
-
- include "fr(latin9)"
-
- key <AE01> { [ ampersand, 1, dead_acute, periodcentered ] };
- key <AE07> { [ egrave, 7, dead_grave, Egrave ] };
- key <AD11> { [ dead_circumflex, dead_diaeresis, dead_tilde, quoteright ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "latin9_sundeadkeys" {
-
- include "fr(latin9_Sundeadkeys)"
-
- name[Group1]="France - (Legacy) Alternative, Sun dead keys";
-};
-
-partial alphanumeric_keys
-xkb_symbols "latin9_nodeadkeys" {
-
- // Modifies the basic fr-latin9 layout to eliminate all dead keys
-
- include "fr(latin9)"
-
- name[Group1]="France - (Legacy) Alternative, eliminate dead keys";
-
- key <AE01> { [ ampersand, 1, apostrophe, periodcentered ] };
- key <AE07> { [ egrave, 7, grave, Egrave ] };
- key <AE12> { [ equal, plus, braceright ] };
- key <AD11> { [ asciicircum, diaeresis, asciitilde, quoteright ] };
-};
-
-// Bépo : Improved ergonomic french keymap using Dvorak method.
-// Built by community on 'Dvorak Fr / Bépo' :
-// see http://www.clavier-dvorak.org/wiki/ to join and help.
-// XOrg integration (1.0rc2 version) in 2008
-// by Frédéric Boiteux <fboiteux at free dot fr>
-//
-// Bépo layout (1.0rc2 version) for a pc105 keyboard (french) :
-// ┌────┐
-// │ S A│ S = Shift, A = AltGr + Shift
-// │ s a│ s = normal, a = AltGr
-// └────┘
-//
-// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
-// │ # ¶ │ 1 „ │ 2 “ │ 3 ” │ 4 ≤ │ 5 ≥ │ 6 │ 7 ¬ │ 8 ¼ │ 9 ½ │ 0 ¾ │ ° ′ │ ` ″ ┃ ⌫ Retour┃
-// │ $ – │ " — │ « < │ » > │ ( [ │ ) ] │ @ ^ │ + ± │ - − │ / ÷ │ * × │ = ≠ │ % ‰ ┃ arrière┃
-// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
-// ┃ ┃ B ¦ │ É ˝ │ P § │ O Œ │ È ` │ ! │ V │ D Ð │ L │ J IJ │ Z Ə │ W ┃Entrée ┃
-// ┃Tab ↹ ┃ b | │ é ˊ │ p & │ o œ │ è ` │ ˆ ¡ │ v ˇ │ d ð │ l / │ j ij │ z ə │ w ̆ ┃ ⏎ ┃
-// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
-// ┃ ┃ A Æ │ U Ù │ I ˙ │ E ¤ │ ; ̛ │ C ſ │ T Þ │ S ẞ │ R ™ │ N │ M º │ Ç , ┃ ┃
-// ┃Maj ⇬ ┃ a æ │ u ù │ i ̈ │ e € │ , ’ │ c © │ t þ │ s ß │ r ® │ n ˜ │ m ¯ │ ç ¸ ┃ ┃
-// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
-// ┃ ┃ Ê │ À │ Y ‘ │ X ’ │ : · │ K │ ? ̉ │ Q ̣ │ G │ H ‡ │ F ª ┃ ┃
-// ┃Shift ⇧┃ ê / │ à \ │ y { │ x } │ . … │ k ~ │ ' ¿ │ q ˚ │ g µ │ h † │ f ˛ ┃Shift ⇧ ┃
-// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
-// ┃ ┃ ┃ ┃ Espace inséc. Espace inséc. fin ┃ ┃ ┃ ┃
-// ┃Ctrl ┃Meta ┃Alt ┃ ␣ (Espace) _ ␣ ┃AltGr ⇮┃Menu ┃Ctrl ┃
-// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
-partial alphanumeric_keys
-xkb_symbols "bepo" {
-
- include "level3(ralt_switch)"
- include "keypad(oss)"
-
- name[Group1]= "France - Bepo, ergonomic, Dvorak way";
-
- // First row
- key <TLDE> { [ dollar, numbersign, endash, paragraph ] }; // $ # – ¶
- key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ quotedbl, 1, emdash, doublelowquotemark ] }; // " 1 — „
- key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotleft, 2, less, leftdoublequotemark ] }; // « 2 < “
- key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotright, 3, greater, rightdoublequotemark ] }; // » 3 > ”
- key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenleft, 4, bracketleft, lessthanequal ] }; // ( 4 [ ≤
- key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenright, 5, bracketright, greaterthanequal ] }; // ) 5 ] ≥
- key <AE06> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ at, 6, asciicircum ] }; // @ 6 ^
- key <AE07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ plus, 7, plusminus, notsign ] }; // + 7 ± ¬
- key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ minus, 8, U2212, onequarter ] }; // - 8 − ¼
- key <AE09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ slash, 9, division, onehalf ] }; // / 9 ÷ ½
- key <AE10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ asterisk, 0, multiply, threequarters ] }; // * 0 × ¾
- key <AE11> { [ equal, degree, notequal, minutes ] }; // = ° ≠ ′
- key <AE12> { [ percent, grave, U2030, seconds ] }; // % ` ‰ ″
-
- // Second row
- key <AD01> { [ b, B, bar, brokenbar ] }; // b B | ¦
- key <AD02> { [ eacute, Eacute, dead_acute, dead_doubleacute ] }; // é É ˊ ˝
- key <AD03> { [ p, P, ampersand, section ] }; // p P & §
- key <AD04> { [ o, O, oe, OE ] }; // o O œ Œ
- key <AD05> { [ egrave, Egrave, dead_grave, grave ] }; // è È ` `
- key <AD06> { [ dead_circumflex, exclam, exclamdown ] }; // ^ ! ¡
- key <AD07> { [ v, V, dead_caron ] }; // v V ˇ
- key <AD08> { [ d, D, eth, ETH ] }; // d D ð Ð
- key <AD09> { [ l, L, dead_stroke ] }; // l L /
- key <AD10> { [ j, J, U0133, U0132 ] }; // j J ij IJ
- key <AD11> { [ z, Z, schwa, SCHWA ] }; // z Z ə Ə
- key <AD12> { [ w, W, dead_breve ] }; // w W ̆
-
- // Third row
- key <AC01> { [ a, A, ae, AE ] }; // a A æ Æ
- key <AC02> { [ u, U, ugrave, Ugrave ] }; // u U ù Ù
- key <AC03> { [ i, I, dead_diaeresis, dead_abovedot ] }; // i I ̈ ˙
- key <AC04> { [ e, E, EuroSign, dead_currency ] }; // e E € ¤
- key <AC05> { [ comma, semicolon, rightsinglequotemark, dead_horn ] }; // , ; ’ ̛
- key <AC06> { [ c, C, copyright, U017F ] }; // c C © ſ
- key <AC07> { [ t, T, thorn, THORN ] }; // t T þ Þ
- key <AC08> { [ s, S, ssharp, U1E9E ] }; // s S ß ẞ
- key <AC09> { [ r, R, registered, trademark ] }; // r R ® ™
- key <AC10> { [ n, N, dead_tilde ] }; // n N ~
- key <AC11> { [ m, M, dead_macron, masculine ] }; // m M ̄ º
- key <BKSL> { [ ccedilla, Ccedilla, dead_cedilla, dead_belowcomma ] }; // ç Ç ¸ ,
-
- // Fourth row
- key <LSGT> { [ ecircumflex, Ecircumflex, slash ] }; // ê Ê /
- key <AB01> { [ agrave, Agrave, backslash ] }; // à À \
- key <AB02> { [ y, Y, braceleft, leftsinglequotemark ] }; // y Y { ‘
- key <AB03> { [ x, X, braceright, rightsinglequotemark ] }; // x X } ’
- key <AB04> { [ period, colon, ellipsis, periodcentered ] }; // . : … ·
- key <AB05> { [ k, K, asciitilde ] }; // k K ~
- key <AB06> { [ apostrophe, question, questiondown, dead_hook ] }; // ' ? ¿ ̉
- key <AB07> { [ q, Q, dead_abovering, dead_belowdot ] }; // q Q ˚ ̣
- key <AB08> { [ g, G, mu ] }; // g G µ
- key <AB09> { [ h, H, dagger, doubledagger ] }; // h H † ‡
- key <AB10> { [ f, F, dead_ogonek, ordfeminine ] }; // f F ̨ ª
-
- key <SPCE> { [ space, nobreakspace, underscore, U202F ] }; // ␣ (espace insécable) _ (espace insécable fin)
-};
-
-partial alphanumeric_keys
-xkb_symbols "bepo_latin9" {
-
- // Restricts the fr(bepo) layout to latin9 symbols
-
- include "fr(bepo)"
- include "keypad(oss_latin9)"
-
- name[Group1]="France - Bepo, ergonomic, Dvorak way, latin-9 only";
-
- key <TLDE> { [ dollar, numbersign, dollar, paragraph ] }; // $ # $ ¶
-
- key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ quotedbl, 1 ] }; // " 1
- key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotleft, 2, less ] }; // « 2 <
- key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotright, 3, greater ] }; // » 3 >
- key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenleft, 4, bracketleft ] }; // ( 4 [
- key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenright, 5, bracketright ] }; // ) 5 ]
- key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ minus, 8, minus, onequarter ] }; // - 8 - ¼
- key <AE11> { [ equal, degree ] }; // = °
- key <AE12> { [ percent, grave ] }; // % `
-
- key <AD01> { [ b, B, bar ] }; // b B |
- key <AD02> { [ eacute, Eacute, dead_acute ] }; // é É ˊ
- key <AD10> { [ j, J ] }; // j J
- key <AD11> { [ z, Z ] }; // z Z
- key <AD12> { [ w, W ] }; // w W
-
- key <AC03> { [ i, I, dead_diaeresis ] }; // i I ̈
- key <AC05> { [ comma, semicolon, comma, dead_horn ] }; // , ; , ̛
- key <AC06> { [ c, C, copyright ] }; // c C ©
- key <AC08> { [ s, S, ssharp ] }; // s S ß
- key <AC09> { [ r, R, registered ] }; // r R ®
- key <AC11> { [ m, M, macron, masculine ] }; // m M ̄ º
-
- key <AB02> { [ y, Y, braceleft ] }; // y Y {
- key <AB03> { [ x, X, braceright ] }; // x X }
- key <AB04> { [ period, colon ] }; // . :
- key <AB09> { [ h, H ] }; // h H
- key <AB10> { [ f, F, f, ordfeminine ] }; // f F ª
-
- // Note : on a besoin de redéfinir les niveaux 3 et 4,
- // donc nbsp(level2) ne suffit pas !
- key <SPCE> { [ space, nobreakspace, underscore, nobreakspace ] }; // ␣ (espace insécable) _ (espace insécable)
-};
-
-// Author : Francis Leboutte, http://www.algo.be/ergo/dvorak-fr.html
-// thanks to Fabien Cazenave for his help
-// Licence : X11 (the layout itself is released under CC-NC-ND licence)
-// Version : 0.3
-
-// Base layer + dead AltGr key (`):
-// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓
-// │ * │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ % ┃ ┃
-// │ _ │ = │ / ± │ - ¼ │ è ½ │ \ ¾ │ ^ │ ( │ ` ` │ ) │ " │ [ │ ] ┃ ⌫ ┃
-// ┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┳━━━━━━━┫
-// ┃ ┃ ? Æ │ < │ > │ G │ ! │ H │ V │ C Ç │ M │ K │ Z │ & ┃ ┃
-// ┃ ↹ ┃ : æ │ ' $ │ é É │ g € │ . ° │ h │ v │ c ç │ m µ │ k │ z │ ¨ ┃ ┃
-// ┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ⏎ ┃
-// ┃ ┃ O Ò │ A À │ U Ù │ E È │ B │ F │ S │ T │ N │ D │ W │ # ┃ ┃
-// ┃ ⇬ ┃ o ò │ a à │ u ù │ e è │ b │ f │ s « │ t │ n » │ d │ w │ ~ ┃ ┃
-// ┣━━━━━━┳━━┹──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┷━━━━━┻━━━━━━┫
-// ┃ ┃ ç Ç │ | Œ │ Q │ @ │ I Ì │ Y │ X │ R │ L │ P │ J ┃ ┃
-// ┃ ⇧ ┃ à À │ ; œ │ q { │ , } │ i ì │ y £ │ x │ r º │ l │ p § │ j ┃ ⇧ ┃
-// ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫
-// ┃ ┃ ┃ ┃ ␣ ⍽ ┃ ┃ ┃ ┃ ┃
-// ┃ ctrl ┃ super ┃ alt ┃ ␣ Espace Espace insécable ⍽ ┃ alt ┃ super ┃ menu ┃ ctrl ┃
-// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛
-
-// Notice the specific Caps_Lock layer:
-// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓
-// │ * │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ % ┃ ┃
-// │ │ │ │ │ │ │ │ │ │ │ │ │ ┃ ⌫ ┃
-// ┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┳━━━━━━━┫
-// ┃ ┃ │ < │ > │ │ │ │ │ │ │ │ │ ┃ ┃
-// ┃ ↹ ┃ │ │ │ │ │ │ │ │ │ │ │ ┃ ┃
-// ┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ⏎ ┃
-// ┃ ┃ │ │ │ │ │ │ │ │ │ │ │ ┃ ┃
-// ┃ ⇬ ┃ │ │ │ │ │ │ │ │ │ │ │ ┃ ┃
-// ┣━━━━━━┳━━┹──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┷━━━━━┻━━━━━━┫
-// ┃ ┃ / │ - │ │ │ │ │ │ │ │ │ ┃ ┃
-// ┃ ⇧ ┃ │ │ │ │ │ │ │ │ │ │ ┃ ⇧ ┃
-// ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫
-// ┃ ┃ ┃ ┃ ␣ ⍽ ┃ ┃ ┃ ┃ ┃
-// ┃ ctrl ┃ super ┃ alt ┃ ␣ Espace Espace insécable ⍽ ┃ alt ┃ super ┃ menu ┃ ctrl ┃
-// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛
-
-partial alphanumeric_keys modifier_keys
-xkb_symbols "dvorak" {
- name[Group1]="France - Dvorak";
-
- // First row
- key <TLDE> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ underscore, asterisk ] };
- key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ equal, 1 ] };
- key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ slash, 2, plusminus ] };
- key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ minus, 3, onequarter ] };
- key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ egrave, 4, onehalf ] };
- key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ backslash, 5, threequarters ] };
- key <AE06> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ dead_circumflex, 6 ] };
- key <AE07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenleft, 7 ] };
- key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ ISO_Level3_Latch, 8, grave ] };
- key <AE09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenright, 9 ] };
- key <AE10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ quotedbl, 0 ] };
- key <AE11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ bracketleft, plus ] };
- key <AE12> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ bracketright, percent ] };
-
- // Second row
- key <AD01> { [ colon, question, ae, AE ] };
- key <AD02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ apostrophe, less, dollar ] };
- key <AD03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ eacute, greater, Eacute ] };
- key <AD04> { [ g, G, EuroSign ] };
- key <AD05> { [ period, exclam, degree ] };
- key <AD06> { [ h, H ] };
- key <AD07> { [ v, V ] };
- key <AD08> { [ c, C, ccedilla, Ccedilla ] };
- key <AD09> { [ m, M, mu ] };
- key <AD10> { [ k, K ] };
- key <AD11> { [ z, Z ] };
- key <AD12> { [ dead_diaeresis, ampersand ] };
-
- // Third row
- key <AC01> { [ o, O, ograve, Ograve ] };
- key <AC02> { [ a, A, agrave, Agrave ] };
- key <AC03> { [ u, U, ugrave, Ugrave ] };
- key <AC04> { [ e, E, egrave, Egrave ] };
- key <AC05> { [ b, B ] };
- key <AC06> { [ f, F ] };
- key <AC07> { [ s, S, guillemotleft ] };
- key <AC08> { [ t, T ] };
- key <AC09> { [ n, N, guillemotright ] };
- key <AC10> { [ d, D ] };
- key <AC11> { [ w, W ] };
- key <BKSL> { [ asciitilde, numbersign ] };
-
- // Fourth row
- key <LSGT> { type[group1] = "FOUR_LEVEL_PLUS_LOCK", [ agrave, ccedilla, Agrave, Ccedilla, slash ] };
- key <AB01> { type[group1] = "FOUR_LEVEL_PLUS_LOCK", [ semicolon, bar, oe, OE, minus ] };
- key <AB02> { [ q, Q, braceleft ] };
- key <AB03> { [ comma, at, braceright ] };
- key <AB04> { [ i, I, igrave, Igrave ] };
- key <AB05> { [ y, Y, sterling ] };
- key <AB06> { [ x, X ] };
- key <AB07> { [ r, R, masculine ] };
- key <AB08> { [ l, L ] };
- key <AB09> { [ p, P, section ] };
- key <AB10> { [ j, J ] };
-
- key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
-};
-
-// C'WHERTY: Breton keyboard. Ar c'hlavier brezhoneg.
-// Copyright © 2009 Dominique Pellé <dominique.pelle@gmail.com>
-// Version: 0.1
-//
-// ┌────┐
-// │ S A│ S = Reol = Shift, A = ArErl + Pennlizherenn = AltGr + Shift
-// │ s a│ s = normal, a = AltGr
-// └────┘
-//
-// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
-// │ $ Γ │ 1 Δ │ 2 Θ │ 3 Λ │ 4 Ξ │ 5 Π │ 6 Σ │ 7 Φ │ 8 Ψ │ 9 Ç │ 0 Ω │ ° ß │ + ¬ ┃ ⌫ Souzañ┃
-// │ ² ˙ │ & ¯ │ é ´ │ " # │ ' { │ ( [ │ - | │ è ` │ - \ │ ç ± │ à @ │ ) ] │ = } ┃ ┃
-// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
-// ┃Toalenn┃ C'h │ W ω │ E ε │ R ρ │ T τ │ Y ψ │ U υ │ I ι │ O OE│ P π │ ¨ ¥ │ * £ ┃Enankañ┃
-// ┃ ↹ ┃ c'h │ w │ e € │ r │ t │ y │ u │ i ı │ o oe│ p │ ^ « │ / » ┃ ⏎ ┃
-// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
-// ┃Prenn ┃ A Æ │ S σ │ D δ │ F φ │ G γ │ H η │ J ς │ K κ │ L λ │ M μ │ Ù ® │ ! ¡ ┃ ┃
-// ┃Pennli ⇬┃ a æ │ s │ d $ │ f │ g │ h │ j │ k │ l │ m │ ù ŭ │ ? ¿ ┃ ┃
-// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
-// ┃ ┃ Q θ │ Z ζ │ X ξ │ C χ │ V │ B β │ N ν │ CH │ Ñ │ : © │ ; ┃ ┃
-// ┃Shift ⇧┃ q < │ z > │ x │ c ¢ │ v │ b │ n │ ch │ ñ │ . │ , ┃Shift ⇧ ┃
-// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
-// ┃ ┃ ┃ ┃ ⍽ Espace insécable ␣ ┃ ┃ ┃ ┃
-// ┃Reol ┃Meta ┃Erl ┃ ␣ Espace ␣ ┃ArErl ⇮┃Menu ┃Reol ┃
-// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
-partial alphanumeric_keys
-xkb_symbols "bre" {
-
- include "keypad(oss)"
-
- name[Group1]= "France - Breton";
-
- // First row
- key <TLDE> { [ twosuperior, dead_tilde, dead_abovedot, Greek_GAMMA ] };
- key <AE01> { [ ampersand, 1, dead_macron, Greek_DELTA ] };
- key <AE02> { [ eacute, 2, dead_acute, Greek_THETA ] };
- key <AE03> { [ quotedbl, 3, numbersign, Greek_LAMDA ] };
- key <AE04> { [ apostrophe, 4, braceleft, Greek_XI ] };
- key <AE05> { [ parenleft, 5, bracketleft, Greek_PI ] };
- key <AE06> { [ minus, 6, bar, Greek_SIGMA ] };
- key <AE07> { [ egrave, 7, dead_grave, Greek_PHI ] };
- key <AE08> { [ underscore, 8, backslash, Greek_PSI ] };
- key <AE09> { [ ccedilla, 9, plusminus, Ccedilla ] };
- key <AE10> { [ agrave, 0, at, Greek_OMEGA ] };
- key <AE11> { [ parenright, dead_abovering, bracketright, ssharp ] };
- key <AE12> { [ equal, plus, braceright, notsign ] };
-
- // Second row
- // Handling the C'H key correctly requires an inputmethod (XIM)
- // See https://bugs.freedesktop.org/show_bug.cgi?id=19506
- // key <AD01> { [ trigraph_c_h, trigraph_C_h, trigraph_C_H, Greek_alpha ] };
- key <AD01> { [ UF8FD, UF8FE, UF8FF, Greek_alpha ] };
- key <AD02> { [ w, W, Greek_omega, Greek_omega ] };
- key <AD03> { [ e, E, EuroSign, Greek_epsilon ] };
- key <AD04> { [ r, R, Greek_rho, Greek_rho ] };
- key <AD05> { [ t, T, Greek_tau, Greek_tau ] };
- key <AD06> { [ y, Y, Greek_psi, Greek_psi ] };
- key <AD07> { [ u, U, Greek_upsilon, Greek_upsilon ] };
- key <AD08> { [ i, I, idotless, Greek_iota ] };
- key <AD09> { [ o, O, oe, OE ] };
- key <AD10> { [ p, P, Greek_pi, Greek_pi ] };
- key <AD11> { [ dead_circumflex, dead_diaeresis, guillemotleft, yen ] };
- key <AD12> { [ slash, asterisk, guillemotright, sterling ] };
-
- // Third row
- key <AC01> { [ a, A, ae, AE ] };
- key <AC02> { [ s, S, Greek_sigma, Greek_sigma ] };
- key <AC03> { [ d, D, dollar, Greek_delta ] };
- key <AC04> { [ f, F, Greek_phi, Greek_phi ] };
- key <AC05> { [ g, G, Greek_gamma, Greek_gamma ] };
- key <AC06> { [ h, H, Greek_eta, Greek_eta ] };
- key <AC07> { [ j, J, Greek_finalsmallsigma, Greek_finalsmallsigma ] };
- key <AC08> { [ k, K, Greek_kappa, Greek_kappa ] };
- key <AC09> { [ l, L, Greek_lamda, Greek_lambda ] };
- key <AC10> { [ m, M, Greek_mu, Greek_mu ] };
- key <AC11> { [ ugrave, Ugrave, ubreve, registered ] };
- key <BKSL> { [ question, exclam, questiondown, exclamdown ] };
-
- // Fourth row
- key <LSGT> { [ q, Q, less, Greek_theta ] };
- key <AB01> { [ z, Z, greater, Greek_zeta ] };
- key <AB02> { [ x, X, Greek_xi, Greek_xi ] };
- key <AB03> { [ c, C, cent, Greek_chi ] };
- key <AB04> { [ v, V ] };
- key <AB05> { [ b, B, Greek_beta, Greek_beta ] };
- key <AB06> { [ n, N, Greek_nu, Greek_nu ] };
- // Handling the CH key correctly requires an inputmethod (XIM)
- // See https://bugs.freedesktop.org/show_bug.cgi?id=19506
- // key <AB07> { [ digraph_ch, digraph_Ch, digraph_CH, Greek_omicron ] };
- key <AB07> { [ UF8FA, UF8FB, UF8FC, Greek_omicron ] };
- key <AB08> { [ ntilde, Ntilde ] };
- key <AB09> { [ period, colon, section, copyright ] };
- key <AB10> { [ comma, semicolon, percent ] };
-
- key <SPCE> { [ space, nobreakspace, space, nobreakspace ] };
-
- include "level3(ralt_switch)"
-};
-
-// Occitan layout
-// Author : 2009 Thomas Metz <tmetz @ free.fr>
-// Derivated from the layout defined at http://www.panoccitan.org
-// Version: 0.1
-// From OSS french keyboard :
-// - add á, í, ò, ó et ú, Á, Í, Ò, Ó, Ú, ñ, Ñ
-// - change position of æ, ü, î, û, œ, ô, ö, ï, â, ë
-//
-// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
-// │ ³ ¸ │ 1 ̨ │ 2 É │ 3 ˘ │ 4 — │ 5 – │ 6 ‑ │ 7 È │ 8 ™ │ 9 Ç │ 0 À │ ° ≠ │ + ± ┃ ⌫ Retour┃
-// │ ² ¹ │ & ˇ │ é ~ │ " # │ ' { │ ( [ │ - | │ è ` │ _ \ │ ç ^ │ à @ │ ) ] │ = } ┃ arrière┃
-// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
-// ┃ ┃ A Á │ Z Æ │ E ¢ │ R Ê │ T Ë │ Y Û │ U Ú │ I Í │ O Ó │ P Ò │ ¨ Œ │ £ Ø ┃Entrée ┃
-// ┃Tab ↹ ┃ a á │ z æ │ e € │ r ê │ t ë │ y û │ u ú │ i í │ o ó │ p ò │ ^ œ │ $ ø ┃ ⏎ ┃
-// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
-// ┃ ┃ Q Ä │ S „ │ D Â │ F ‚ │ G ¥ │ H Ü │ J Î │ K Ï │ L Ô │ M Ö │ % Ù │ µ ̄ ┃ ┃
-// ┃Maj ⇬ ┃ q ä │ s ß │ d â │ f ‘ │ g ’ │ h ü │ j î │ k ï │ l ô │ m ö │ ù ' │ * ` ┃ ┃
-// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
-// ┃ ┃ > ≥ │ W “ │ X ” │ C ® │ V ← │ B ↑ │ N Ñ │ ? … │ . . │ / ∕ │ § − ┃ ┃
-// ┃Shift ⇧┃ < ≤ │ w « │ x » │ c © │ v → │ b ↓ │ n ñ │ , ¿ │ ; × │ : ÷ │ ! ¡ ┃Shift ⇧ ┃
-// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
-// ┃ ┃ ┃ ┃ ␣ Espace fine insécable ⍽ ┃ ┃ ┃ ┃
-// ┃Ctrl ┃Meta ┃Alt ┃ ␣ Espace Espace insécable ⍽ ┃AltGr ⇮┃Menu ┃Ctrl ┃
-// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
-partial alphanumeric_keys
-xkb_symbols "oci" {
-
- include "keypad(oss)"
-
- name[Group1]= "France - Occitan";
-
- // First row
- key <TLDE> { [ twosuperior, threesuperior, onesuperior, dead_cedilla ] }; // ² ³ ¹ ¸
- key <AE01> { [ ampersand, 1, dead_caron, dead_ogonek ] }; // & 1 ˇ ̨
- key <AE02> { [ eacute, 2, asciitilde, Eacute ] }; // é 2 ~ É
- key <AE03> { [ quotedbl, 3, numbersign, dead_breve ] }; // " 3 # ˘
- key <AE04> { [ apostrophe, 4, braceleft, 0x1002014 ] }; // ' 4 { — (tiret cadratin)
- key <AE05> { [ parenleft, 5, bracketleft, 0x1002013 ] }; // ( 5 [ – (tiret demi-cadratin)
- key <AE06> { [ minus, 6, bar, 0x1002011 ] }; // - 6 | ‑ (tiret insécable)
- key <AE07> { [ egrave, 7, grave, Egrave ] }; // è 7 ` È
- key <AE08> { [ underscore, 8, backslash, trademark ] }; // _ 8 \ ™
- key <AE09> { [ ccedilla, 9, asciicircum, Ccedilla ] }; // ç 9 ^ Ç
- key <AE10> { [ agrave, 0, at, Agrave ] }; // à 0 @ À
- key <AE11> { [ parenright, degree, bracketright, notequal ] }; // ) ° ] ≠
- key <AE12> { [ equal, plus, braceright, plusminus ] }; // = + } ±
-
- // Second row
- key <AD01> { [ a, A, aacute, Aacute ] }; // a A á Á
- key <AD02> { [ z, Z, ae, AE ] }; // z Z æ Æ
- key <AD03> { [ e, E, EuroSign, cent ] }; // e E € ¢
- key <AD04> { [ r, R, ecircumflex, Ecircumflex ] }; // r R ê Ê
- key <AD05> { [ t, T, ediaeresis, Ediaeresis ] }; // t T ë Ë
- key <AD06> { [ y, Y, ucircumflex, Ucircumflex ] }; // y Y û Û
- key <AD07> { [ u, U, uacute, Uacute ] }; // u U ú Ú
- key <AD08> { [ i, I, iacute, Iacute ] }; // i I í Í
- key <AD09> { [ o, O, oacute, Oacute ] }; // o O ó Ó
- key <AD10> { [ p, P, ograve, Ograve ] }; // p P ò Ò
- key <AD11> { [ dead_circumflex, dead_diaeresis, oe, OE ] }; // ^ ̈ ̃ œ Œ
- key <AD12> { [ dollar, sterling, oslash, Ooblique ] }; // $ £ ø Ø
-
- // Third row
- key <AC01> { [ q, Q, adiaeresis, Adiaeresis ] }; // q Q ä Ä
- key <AC02> { [ s, S, ssharp, doublelowquotemark ] }; // s S ß „
- key <AC03> { [ d, D, acircumflex, Acircumflex ] }; // d D â Â
- key <AC04> { [ f, F, leftsinglequotemark, singlelowquotemark ] }; // f F ‘ ‚
- key <AC05> { [ g, G, rightsinglequotemark, yen ] }; // g G ’ ¥
- key <AC06> { [ h, H, udiaeresis, Udiaeresis ] }; // h H ü Ü
- key <AC07> { [ j, J, icircumflex, Icircumflex] }; // j J î Î
- key <AC08> { [ k, K, idiaeresis, Idiaeresis] }; // k K ï Ï
- key <AC09> { [ l, L, ocircumflex, Ocircumflex ] }; // l L ô Ô
- key <AC10> { [ m, M, odiaeresis, Odiaeresis ] }; // m M ö Ö
- key <AC11> { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù
- key <BKSL> { [ asterisk, mu, dead_grave, dead_macron ] }; // * µ ` ̄
-
- // Fourth row
- key <LSGT> { [ less, greater, lessthanequal, greaterthanequal ] }; // < > ≤ ≥
- key <AB01> { [ w, W, guillemotleft, leftdoublequotemark ] }; // w W « “
- key <AB02> { [ x, X, guillemotright, rightdoublequotemark ] }; // x X » ”
- key <AB03> { [ c, C, copyright, registered ] }; // c C © ®
- key <AB04> { [ v, V, rightarrow, leftarrow ] }; // v V → ←
- key <AB05> { [ b, B, downarrow, uparrow ] }; // b B ↓ ↑
- key <AB06> { [ n, N, ntilde, Ntilde ] }; // n N ñ Ñ
- key <AB07> { [ comma, question, questiondown, 0x1002026 ] }; // , ? ¿ …
- key <AB08> { [ semicolon, period, multiply, 0x10022C5 ] }; // ; . × ⋅
- key <AB09> { [ colon, slash, division, 0x1002215 ] }; // : / ÷ ∕
- key <AB10> { [ exclam, section, exclamdown, 0x1002212 ] }; // ! § ¡ −
-};
-
-// Marc.Shapiro@inria.fr 19-sep-1998
-// modifications : Etienne Herlent <eherlent@linux-france.org> june 2000
-// adapted to the new input layer :
-// Martin Costabel <costabel@wanadoo.fr> 3-jan-2001
-// adapted for Latin9 alphabet (ISO-8859-15):
-// Etienne Herlent <eherlent@linux-france.org> march 2005
-
-// This map is an almost-complete mapping of the standard French
-// MacIntosh keyboard under Xwindows. I tried to remain as faithful
-// as possible to the Mac meaning of each key. I did this entirely by
-// hand and by intuition, relying on the Clavier (Keyboard?) Desktop
-// Accessory for the Mac meaning of keys, and on reading keysymdef.h
-// to intuit the corresponding X names. Lacking proper documentation,
-// I may have made some mistakes.
-
-// Entries marked CHECK are particularly uncertain
-
-// Entries marked MISSING mark Mac characters for which I was unable
-// to find a corresponding keysym. (Some for sure don't: e.g. the
-// Apple mark and the oe/OE character; others I may have simply not
-// found.)
-
-// Copied from macintosh_vndr/fr
-partial alphanumeric_keys
-xkb_symbols "mac" {
-
- name[Group1]= "France - Macintosh";
-
- // Alphanumeric section
- key <TLDE> { [ at, numbersign, periodcentered, Ydiaeresis ] }; // MISSING: Ydiaeresis; eherlent : ok in Latin9
- key <AE01> { [ ampersand, 1, VoidSymbol, dead_acute ] }; // MISSING: Apple
- key <AE02> { [ eacute, 2, ediaeresis, Eacute ] };
- key <AE03> { [ quotedbl, 3, VoidSymbol, VoidSymbol ] }; // CHECK all quotemarks
- key <AE04> { [ apostrophe, 4, VoidSymbol, VoidSymbol ] };
- key <AE05> { [ parenleft, 5, braceleft, bracketleft ] };
- // CHECK section
- key <AE06> { [ section, 6, paragraph, aring ] };
- key <AE07> { [ egrave, 7, guillemotleft, guillemotright ] };
- key <AE08> { [ exclam, 8, exclamdown, Ucircumflex ] };
- key <AE09> { [ ccedilla, 9, Ccedilla, Aacute ] };
- key <AE10> { [ agrave, 0, oslash, VoidSymbol ] }; // MISSING: Oslash
- key <AE11> { [ parenright, degree, braceright, bracketright ] };
- key <AE12> { [ minus, underscore, emdash, endash ] }; // CHECK dashes
-
- key <AD01> { [ a, A, ae, AE ] };
- key <AD02> { [ z, Z, Acircumflex, Aring ] };
- key <AD03> { [ e, E, ecircumflex, Ecircumflex ] };
- key <AD04> { [ r, R, registered, currency ] };
- key <AD05> { [ t, T, VoidSymbol, VoidSymbol ] };
- key <AD06> { [ y, Y, Uacute, Ydiaeresis ] }; // MISSING: Ydiaeresis; eherlent : ok in Latin9
- key <AD07> { [ u, U, VoidSymbol, ordfeminine ] }; // MISSING: ordmasculine?
- key <AD08> { [ i, I, icircumflex, idiaeresis ] };
- key <AD09> { [ o, O, oe, OE ] }; // MISSING: oe, OE lacking in Latin1; eherlent ok in Latin9
- key <AD10> { [ p, P, VoidSymbol, VoidSymbol ] };
- key <AD11> { [dead_circumflex,dead_diaeresis, ocircumflex, Ocircumflex ] };
- key <AD12> { [ dollar, asterisk, EuroSign, yen ] }; // eherlent : EuroSign in Latin9
-
- key <AC01> { [ q, Q, acircumflex, Agrave ] };
- key <AC02> { [ s, S, Ograve, VoidSymbol ] };
- key <AC03> { [ d, D, VoidSymbol, VoidSymbol ] };
- key <AC04> { [ f, F, VoidSymbol, periodcentered ] }; // MISSING: oblong script f??
- key <AC05> { [ g, G, VoidSymbol, VoidSymbol ] }; // MISSING: kerned fi, fl
- key <AC06> { [ h, H, Igrave, Icircumflex ] };
- key <AC07> { [ j, J, Idiaeresis, Iacute ] };
- key <AC08> { [ k, K, Egrave, Ediaeresis ] };
- key <AC09> { [ l, L, notsign, bar ] };
- key <AC10> { [ m, M, mu, Oacute ] };
- key <AC11> { [ ugrave,percent, Ugrave, ucircumflex ] }; // MISSING: per-mille
- key <BKSL> { [ dead_grave, sterling, at, numbersign ] };
-
- key <LSGT> { [ less, greater, VoidSymbol, VoidSymbol ] };
- key <AB01> { [ w, W, VoidSymbol, VoidSymbol ] }; // MISSING: half-guillemot (single angle bracket)
- key <AB02> { [ x, X, VoidSymbol, VoidSymbol ] }; // CHECK similarequal; MISSING: extra-slanted slash
- key <AB03> { [ c, C, copyright, cent ] };
- key <AB04> { [ v, V, diamond, leftradical ] }; // CHECK diamond, leftradical
- key <AB05> { [ b, B, ssharp, VoidSymbol ] }; // CHECK: Greek_beta or ssharp?; MISSING: oblong script s
- key <AB06> { [ n, N, dead_tilde, asciitilde ] };
- key <AB07> { [ comma, question, VoidSymbol, questiondown ] };
- key <AB08> { [ semicolon, period, VoidSymbol, periodcentered ] };
- key <AB09> { [ colon, slash, division, backslash ] };
- key <AB10> { [ equal, plus, VoidSymbol, plusminus ] };
-
- key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
- // End alphanumeric section
-
- key <KPDL> { [ comma,KP_Decimal ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "geo" {
- include "ge(basic)"
-
- name[Group1]= "France - Georgian AZERTY Tskapo";
-
- key <TLDE> { [ exclam, noSymbol ] };
- key <AE01> { [ 0x0100201e, 1 ] };
- key <AE02> { [ 0x01002116, 2 ] };
- key <AE03> { [ percent, 3 ] };
- key <AE04> { [ parenleft, 4 ] };
- key <AE05> { [ colon, 5 ] };
- key <AE06> { [ semicolon, 6 ] };
- key <AE07> { [ question, 7 ] };
- key <AE08> { [ 0x01002116, 8 ] };
- key <AE09> { [ degree, 9 ] };
- key <AE10> { [ parenright, 0 ] };
- key <AE11> { [ minus, underscore, 0x01002014 ] };
- key <AE12> { [ less, greater ] };
-
- key <AD01> { [ 0x010010d0, 0x010010fa ] };
- key <AD02> { [ 0x010010d6, Z ] };
- key <AD03> { [ 0x010010d4, E, 0x010010f1 ] };
- key <AD04> { [ 0x010010e0, 0x010000ae ] };
- key <AD05> { [ 0x010010e2, T ] };
- key <AD06> { [ 0x010010e7, 0x010010f8 ] };
- key <AD07> { [ 0x010010e3, U ] };
- key <AD08> { [ 0x010010d8, 0x010010f2 ] };
- key <AD09> { [ 0x010010dd, O ] };
- key <AD10> { [ 0x010010de, P ] };
- key <AD11> { [ 0x010010d7, T ] };
- key <AD12> { [ 0x010010eb, Z ] };
-
- key <AC01> { [ 0x010010e5, Q ] };
- key <AC02> { [ 0x010010e1, S ] };
- key <AC03> { [ 0x010010d3, D ] };
- key <AC04> { [ 0x010010e4, 0x010010f6 ] };
- key <AC05> { [ 0x010010d2, 0x010010f9 ] };
- key <AC06> { [ 0x010010f0, 0x010010f5 ] };
- key <AC07> { [ 0x010010ef, 0x010010f7 ] };
- key <AC08> { [ 0x010010d9, K ] };
- key <AC09> { [ 0x010010da, L ] };
- key <AC10> { [ 0x010010db, M ] };
- key <AC11> { [ 0x010010df, J ] };
- key <BKSL> { [ 0x010010e9, 0x010000a9 ] };
-
- key <LSGT> { [ guillemotleft,guillemotright ] };
- key <AB01> { [ 0x010010ec, W ] };
- key <AB02> { [ 0x010010ee, 0x010010f4 ] };
- key <AB03> { [ 0x010010ea, 0x010000a9 ] };
- key <AB04> { [ 0x010010d5, 0x010010f3 ] };
- key <AB05> { [ 0x010010d1, B ] };
- key <AB06> { [ 0x010010dc, 0x010010fc ] };
- key <AB07> { [ comma, 0x01002014 ] };
- key <AB08> { [ 0x010010e8, S ] };
- key <AB09> { [ 0x010010e6, noSymbol ] };
- key <AB10> { [ 0x010010ed, noSymbol ] };
-
-};
+// based on a keyboard map from an 'xkb/symbols/fr' file
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin"
+
+ name[Group1]="French";
+
+ key <AE01> { [ ampersand, 1, onesuperior, exclamdown ] };
+ key <AE02> { [ eacute, 2, asciitilde, oneeighth ] };
+ key <AE03> { [ quotedbl, 3, numbersign, sterling ] };
+ key <AE04> { [apostrophe, 4, braceleft, dollar ] };
+ key <AE05> { [ parenleft, 5, bracketleft, threeeighths ] };
+ key <AE06> { [ minus, 6, bar, fiveeighths ] };
+ key <AE07> { [ egrave, 7, grave, seveneighths ] };
+ key <AE08> { [underscore, 8, backslash, trademark ] };
+ key <AE09> { [ ccedilla, 9, asciicircum, plusminus ] };
+ key <AE10> { [ agrave, 0, at, degree ] };
+ key <AE11> { [parenright, degree, bracketright, questiondown ] };
+ key <AE12> { [ equal, plus, braceright, dead_ogonek ] };
+
+ key <AD01> { [ a, A, ae, AE ] };
+ key <AD02> { [ z, Z, guillemotleft, less ] };
+ key <AD03> { [ e, E, EuroSign, cent ] };
+ key <AD11> { [dead_circumflex, dead_diaeresis, dead_diaeresis, dead_abovering ] };
+ key <AD12> { [ dollar, sterling, currency, dead_macron ] };
+
+ key <AC01> { [ q, Q, at, Greek_OMEGA ] };
+ key <AC10> { [ m, M, mu, masculine ] };
+ key <AC11> { [ ugrave, percent, dead_circumflex, dead_caron] };
+ key <TLDE> { [twosuperior, asciitilde, notsign, notsign ] };
+
+ key <BKSL> { [ asterisk, mu, dead_grave, dead_breve ] };
+ key <AB01> { [ w, W, lstroke, Lstroke ] };
+ key <AB07> { [ comma, question, dead_acute, dead_doubleacute ] };
+ key <AB08> { [ semicolon, period, horizconnector, multiply ] };
+ key <AB09> { [ colon, slash, periodcentered, division ] };
+ key <AB10> { [ exclam, section, dead_belowdot, dead_abovedot ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+ // Contact: Sayamindu Dasgupta <sayamindu@laptop.org>
+ include "fr(basic)"
+
+ name[Group1]="French";
+
+ key <AD02> { [ z, Z, VoidSymbol, guillemotleft ] };
+
+ key <AC02> { [ s, S, VoidSymbol, ssharp ] };
+
+ key <AB02> { [ x, X, VoidSymbol, guillemotright ] };
+
+ key <I219> { [ less, greater ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+ // Modifies the basic French layout to use the Sun dead keys
+
+ include "fr(basic)"
+
+ key <AD11> { [dead_circumflex, dead_diaeresis ] };
+ key <AB07> { [comma, question, dead_acute, dead_doubleacute ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+ include "fr(Sundeadkeys)"
+
+ name[Group1]="French (Sun dead keys)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ // Modifies the basic French layout to eliminate all dead keys
+
+ include "fr(basic)"
+
+ name[Group1]="French (eliminate dead keys)";
+
+ key <AE12> { [ equal, plus, braceright, ogonek ] };
+ key <AD11> { [asciicircum, diaeresis ] };
+ key <AD12> { [ dollar, sterling, currency, macron ] };
+ key <AC11> { [ ugrave, percent, asciicircum, caron ] };
+ key <BKSL> { [ asterisk, mu, grave, breve ] };
+ key <AB07> { [ comma, question, acute, doubleacute ] };
+ key <AB10> { [ exclam, section, dead_belowdot, abovedot ] };
+};
+
+
+// Unicode French derivative
+// Loose refactoring of the historic Linux French keyboard layout
+//
+// Copyright © 2006-2008 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// Credits (fr-latin1, fr-latin0, fr-latin9)
+// © 199x-1996 René Cougnenc ✝
+// © 1997-2002 Guylhem Aznar <clavier @ externe.net>
+// © 2003-2006 Nicolas Mailhot <nicolas.mailhot @ laposte.net>
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ ³ ¸ │ 1 ̨ │ 2 É │ 3 ˘ │ 4 — │ 5 – │ 6 ‑ │ 7 È │ 8 ™ │ 9 Ç │ 0 À │ ° ≠ │ + ± ┃ ⌫ Retour┃
+// │ ² ¹ │ & ˇ │ é ~ │ " # │ ' { │ ( [ │ - | │ è ` │ _ \ │ ç ^ │ à @ │ ) ] │ = } ┃ arrière┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃ ┃ A Æ │ Z  │ E ¢ │ R Ê │ T Þ │ Y Ÿ │ U Û │ I Î │ O Œ │ P Ô │ ¨ ˚ │ £ Ø ┃Entrée ┃
+// ┃Tab ↹ ┃ a æ │ z â │ e € │ r ê │ t þ │ y ÿ │ u û │ i î │ o œ │ p ô │ ^ ~ │ $ ø ┃ ⏎ ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
+// ┃ ┃ Q Ä │ S „ │ D Ë │ F ‚ │ G ¥ │ H Ð │ J Ü │ K Ï │ L Ŀ │ M Ö │ % Ù │ µ ̄ ┃ ┃
+// ┃Maj ⇬ ┃ q ä │ s ß │ d ë │ f ‘ │ g ’ │ h ð │ j ü │ k ï │ l ŀ │ m ö │ ù ' │ * ` ┃ ┃
+// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
+// ┃ ┃ > ≥ │ W “ │ X ” │ C ® │ V ← │ B ↑ │ N → │ ? … │ . . │ / ∕ │ § − ┃ ┃
+// ┃Shift ⇧┃ < ≤ │ w « │ x » │ c © │ v ⍽ │ b ↓ │ n ¬ │ , ¿ │ ; × │ : ÷ │ ! ¡ ┃Shift ⇧ ┃
+// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
+// ┃ ┃ ┃ ┃ ␣ Espace fine insécable ⍽ ┃ ┃ ┃ ┃
+// ┃Ctrl ┃Meta ┃Alt ┃ ␣ Espace Espace insécable ⍽ ┃AltGr ⇮┃Menu ┃Ctrl ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+partial alphanumeric_keys
+xkb_symbols "oss" {
+
+ include "latin"
+ include "level3(ralt_switch)"
+ include "nbsp(level4nl)"
+ include "keypad(oss)"
+
+ name[Group1]="French (alternative)";
+
+ // First row
+ key <TLDE> { [ twosuperior, threesuperior, onesuperior, dead_cedilla ] }; // ² ³ ¹ ¸
+ key <AE01> { [ ampersand, 1, dead_caron, dead_ogonek ] }; // & 1 ˇ ̨
+ key <AE02> { [ eacute, 2, asciitilde, Eacute ] }; // é 2 ~ É
+ key <AE03> { [ quotedbl, 3, numbersign, dead_breve ] }; // " 3 # ˘
+ key <AE04> { [ apostrophe, 4, braceleft, 0x1002014 ] }; // ' 4 { — (tiret cadratin)
+ key <AE05> { [ parenleft, 5, bracketleft, 0x1002013 ] }; // ( 5 [ – (tiret demi-cadratin)
+ key <AE06> { [ minus, 6, bar, 0x1002011 ] }; // - 6 | ‑ (tiret insécable)
+ key <AE07> { [ egrave, 7, grave, Egrave ] }; // è 7 ` È
+ key <AE08> { [ underscore, 8, backslash, trademark ] }; // _ 8 \ ™
+ key <AE09> { [ ccedilla, 9, asciicircum, Ccedilla ] }; // ç 9 ^ Ç
+ key <AE10> { [ agrave, 0, at, Agrave ] }; // à 0 @ À
+ key <AE11> { [ parenright, degree, bracketright, notequal ] }; // ) ° ] ≠
+ key <AE12> { [ equal, plus, braceright, plusminus ] }; // = + } ±
+
+ // Second row
+ key <AD01> { [ a, A, ae, AE ] }; // a A æ Æ
+ key <AD02> { [ z, Z, acircumflex, Acircumflex ] }; // z Z â Â
+ key <AD03> { [ e, E, EuroSign, cent ] }; // e E € ¢
+ key <AD04> { [ r, R, ecircumflex, Ecircumflex ] }; // r R ê Ê
+ key <AD05> { [ t, T, thorn, THORN ] }; // t T þ Þ
+ key <AD06> { [ y, Y, ydiaeresis, Ydiaeresis ] }; // y Y ÿ Ÿ
+ key <AD07> { [ u, U, ucircumflex, Ucircumflex ] }; // u U û Û
+ key <AD08> { [ i, I, icircumflex, Icircumflex ] }; // i I î Î
+ key <AD09> { [ o, O, oe, OE ] }; // o O œ Œ
+ key <AD10> { [ p, P, ocircumflex, Ocircumflex ] }; // p P ô Ô
+ key <AD11> { [ dead_circumflex, dead_diaeresis, dead_tilde, dead_abovering ] }; // ^ ̈ ̃ ˚
+ key <AD12> { [ dollar, sterling, oslash, Ooblique ] }; // $ £ ø Ø
+
+ // Third row
+ key <AC01> { [ q, Q, adiaeresis, Adiaeresis ] }; // q Q ä Ä
+ key <AC02> { [ s, S, ssharp, doublelowquotemark ] }; // s S ß „
+ key <AC03> { [ d, D, ediaeresis, Ediaeresis ] }; // d D ë Ë
+ key <AC04> { [ f, F, leftsinglequotemark, singlelowquotemark ] }; // f F ‘ ‚
+ key <AC05> { [ g, G, rightsinglequotemark, yen ] }; // g G ’ ¥
+ key <AC06> { [ h, H, eth, ETH ] }; // h H ð Ð
+ key <AC07> { [ j, J, udiaeresis, Udiaeresis ] }; // j J ü Ü
+ key <AC08> { [ k, K, idiaeresis, Idiaeresis ] }; // k K ï Ï
+ key <AC09> { [ l, L, 0x1000140, 0x100013F ] }; // l L ŀ Ŀ
+ key <AC10> { [ m, M, odiaeresis, Odiaeresis ] }; // m M ö Ö
+ key <AC11> { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù
+ key <BKSL> { [ asterisk, mu, dead_grave, dead_macron ] }; // * µ ` ̄
+
+ // Fourth row
+ key <LSGT> { [ less, greater, lessthanequal, greaterthanequal ] }; // < > ≤ ≥
+ key <AB01> { [ w, W, guillemotleft, leftdoublequotemark ] }; // w W « “
+ key <AB02> { [ x, X, guillemotright, rightdoublequotemark ] }; // x X » ”
+ key <AB03> { [ c, C, copyright, registered ] }; // c C © ®
+ key <AB04> { [ v, V, 0x100202F, leftarrow ] }; // v V ⍽ ← (espace fine insécable)
+ key <AB05> { [ b, B, downarrow, uparrow ] }; // b B ↓ ↑
+ key <AB06> { [ n, N, notsign, rightarrow ] }; // n N ¬ →
+ key <AB07> { [ comma, question, questiondown, 0x1002026 ] }; // , ? ¿ …
+ key <AB08> { [ semicolon, period, multiply, 0x10022C5 ] }; // ; . × ⋅
+ key <AB09> { [ colon, slash, division, 0x1002215 ] }; // : / ÷ ∕
+ key <AB10> { [ exclam, section, exclamdown, 0x1002212 ] }; // ! § ¡ −
+};
+
+partial alphanumeric_keys
+xkb_symbols "oss_latin9" {
+
+ // Restricts the fr(oss) layout to latin9 symbols
+
+ include "fr(oss)"
+ include "keypad(oss_latin9)"
+
+ name[Group1]="French (alternative, latin-9 only)";
+
+ // First row
+ key <AE01> { [ ampersand, 1, dead_caron, dead_cedilla ] }; // & 1 ˇ ¸
+ key <AE03> { [ quotedbl, 3, numbersign, dead_tilde ] }; // " 3 # ~
+ key <AE04> { [ apostrophe, 4, braceleft, underscore ] }; // ' 4 { _
+ key <AE05> { [ parenleft, 5, bracketleft, minus ] }; // ( 5 [ -
+ key <AE06> { [ minus, 6, bar, minus ] }; // - 6 | -
+ key <AE08> { [ underscore, 8, backslash, backslash ] }; // _ 8 \ \
+ key <AE11> { [ parenright, degree, bracketright, equal ] }; // ) ° ] =
+
+ // Third row
+ key <AC02> { [ s, S, ssharp, guillemotleft ] }; // s S ß «
+ key <AC04> { [ f, F, apostrophe, apostrophe ] }; // f F ' '
+ key <AC05> { [ g, G, apostrophe, yen ] }; // g G ' ¥
+ key <AC09> { [ l, L, periodcentered, periodcentered ] }; // l L · ·
+ key <BKSL> { [ asterisk, mu, dead_grave, dead_circumflex ] }; // * µ ` ^
+
+ // Fourth row
+ key <LSGT> { [ less, greater, less, greater ] }; // < > < >
+ key <AB01> { [ w, W, guillemotleft, guillemotleft ] }; // w W « «
+ key <AB02> { [ x, X, guillemotright, guillemotright ] }; // x X » »
+ key <AB04> { [ v, V, nobreakspace, less ] }; // v V ⍽ < (espace insécable)
+ key <AB05> { [ b, B, minus, asciicircum ] }; // b B - ^
+ key <AB06> { [ n, N, notsign, greater ] }; // n N ¬ >
+ key <AB07> { [ comma, question, questiondown, period ] }; // , ? ¿ .
+ key <AB08> { [ semicolon, period, multiply, periodcentered ] }; // ; . × ·
+ key <AB09> { [ colon, slash, division, slash ] }; // : / ÷ /
+ key <AB10> { [ exclam, section, exclamdown, minus ] }; // ! § ¡ -
+};
+
+partial alphanumeric_keys
+xkb_symbols "oss_Sundeadkeys" {
+
+ // Modifies the basic fr(oss) layout to use the Sun dead keys
+
+ include "fr(oss)"
+
+ // First row
+ key <TLDE> { [ twosuperior, threesuperior, onesuperior, dead_cedilla ] }; // ¹ ² ³ ¸
+
+ // Second row
+ key <AD11> { [ dead_circumflex, dead_diaeresis, dead_tilde, dead_abovering ] }; // ^ ̈ ̃ ˚
+
+ //Third row
+ key <AC11> { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù
+ key <BKSL> { [ asterisk, mu, dead_grave, dead_macron ] }; // * µ ` ̄
+};
+
+partial alphanumeric_keys
+xkb_symbols "oss_sundeadkeys" {
+
+ include "fr(oss_Sundeadkeys)"
+
+ name[Group1]="French (alternative, Sun dead keys)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "oss_nodeadkeys" {
+
+ // Modifies the basic fr(oss) layout to eliminate all dead keys
+
+ include "fr(oss)"
+
+ name[Group1]="French (alternative, eliminate dead keys)";
+
+ key <TLDE> { [ twosuperior, threesuperior, onesuperior, cedilla ] }; // ² ³ ¹ ¸
+ key <AE01> { [ ampersand, 1, caron, ogonek ] }; // & 1 ˇ ̨
+ key <AE03> { [ quotedbl, 3, numbersign, breve ] }; // " 3 # ˘
+
+ // Second row
+ key <AD11> { [ asciicircum, diaeresis, asciitilde, Aring ] }; // ^ ̈ ̃ Å
+ key <AC11> { [ ugrave, percent, acute, Ugrave ] }; // ù % ' Ù
+ key <BKSL> { [ asterisk, mu, grave, macron ] }; // * µ ` ̄
+};
+
+
+// Historic Linux French keyboard layout (fr-latin9)
+// Copyright (c) 199x, 2002 Rene Cougnenc (original work)
+// Guylhem Aznar <clavier @ externe.net> (maintainer)
+// Nicolas Mailhot <Nicolas.Mailhot @ laposte.net>
+// (XFree86 submission)
+//
+// This layout has long been distributed and refined outside official channels.
+// To this day it remains more feature-rich and popular than the 'fr' layout.
+//
+// This file is derived from an original version by Guylhem Aznar. The
+// original version is always available from:
+// http://en.tldp.org/HOWTO/Francophones-HOWTO.html
+// and is distributed under a GPL license.
+//
+// The author has given permission for this derived version to be distributed
+// under the standard XFree86 license. He would like all changes to this
+// version be send to him at <clavier @ externe.net> so he can sync the
+// identically named linux console map (kbd, linux-console) and this
+// fileout-of-tree GPL version.
+//
+// Now follows the keyboard design description in French.
+// (If you can't read it you probably have no business changing this file anyway:)
+//
+// Les accents circonflexes des principales voyelles sont obtenus avec
+// la touche Alt_Gr, les trémas sont obtenus par Alt_Gr + Shift.
+//
+// ____ _________ _____________ _______
+// | S A| S = Shift, A = AltGr + Shift | Imprime | Arrêt défil | Pause |
+// | s a| s = normal, a = AltGr | Exec | | Halte |
+// ¯¯¯¯ ¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯
+// ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ ____ _______
+// | œ "| 1 ·| 2 É| 3 ,| 4 '| 5 "| 6 || 7 È| 8 ¯| 9 Ç| 0 À| ° ÿ| + °| <-- |
+// | Œ "| & '| é ~| " #| ' {| ( [| - || è `| _ \| ç ^| à @| ) ]| = }| |
+// ========================================================================
+// | |<- | A ä| Z Å| E ¢| R Ç| T Þ| Y Ý| U ü| I ï| O ö| P '| " `| $ ë| , |
+// | ->| | a â| z å| e €| r ç| t þ| y ý| u û| i î| o ô| p ¶| ^ ~| £ ê| <-' |
+// ===================================================================¬ |
+// | | Q Ä| S Ø| D Ë| F ª| G Æ| H Ð| J Ü| K Ï| L Ö| M º| % Ù| µ ¥| |
+// | MAJ | q Â| s ø| d Ê| f ±| g æ| h ð| j Û| k Î| l Ô| m ¹| ù ²| * ³| |
+// ========================================================================
+// | ^ | > | W | X | C | V | B | N | ? | . | / | § | ^ |
+// | | | < || w «| x »| c ©| v ®| b ß| n ¬| , ¿| ; ×| : ÷| ! ¡| | |
+// ========================================================================
+// | | | | | | | | |
+// | Ctrl | Super| Alt | Space Nobreakspace | AltGr | Super|Menu | Ctrl |
+// ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯ ¯¯¯¯¯¯ ¯¯¯¯¯ ¯¯¯¯¯¯
+//
+//
+// Si les touches mortes fonctionnent, utiliser les accents dits
+// « morts », i.e. fonctionnant comme l'accent circonflexe & le
+// tréma des machines à écrire ; sont disponibles :
+//
+// (^) : accent circonflexe,
+// Shift+(^) : tréma,
+// Shift+AltGr (^) : tilde,
+// AltGr (1) : accent aigu,
+// AltGr (7) : accent grave
+//
+// Pour s'en servir, procéder comme avec l'accent circonflexe & le tréma
+// sur les vielles machines à écrire :
+//
+// AltGr (1) puis e : é
+// Shift+AltGr (1) puis e : É ...
+partial alphanumeric_keys
+
+xkb_symbols "latin9" {
+
+ include "latin"
+ include "nbsp(level3)"
+
+ name[Group1]="French (legacy, alternative)";
+
+ key <TLDE> { [ oe, OE, leftdoublequotemark, rightdoublequotemark ] };
+ key <AE01> { [ ampersand, 1, dead_acute, periodcentered ] };
+ key <AE02> { [ eacute, 2, asciitilde, Eacute ] };
+ key <AE03> { [ quotedbl, 3, numbersign, cedilla ] };
+ key <AE04> { [ apostrophe, 4, braceleft, acute ] };
+ key <AE05> { [ parenleft, 5, bracketleft, diaeresis ] };
+ key <AE06> { [ minus, 6, bar, brokenbar ] };
+ key <AE07> { [ egrave, 7, dead_grave, Egrave ] };
+ key <AE08> { [ underscore, 8, backslash, macron ] };
+ key <AE09> { [ ccedilla, 9, asciicircum, Ccedilla ] };
+ key <AE10> { [ agrave, 0, at, Agrave ] };
+ key <AE11> { [ parenright, degree, bracketright, ydiaeresis ] };
+ key <AE12> { [ equal, plus, braceright, dead_abovering ] };
+
+ key <AD01> { [ a, A, acircumflex, adiaeresis ] };
+ key <AD02> { [ z, Z, aring, Aring ] };
+ key <AD03> { [ e, E, EuroSign, cent ] };
+ key <AD04> { [ r, R, ccedilla, Ccedilla ] };
+ key <AD05> { [ t, T, thorn, THORN ] };
+ key <AD06> { [ y, Y, yacute, Yacute ] };
+ key <AD07> { [ u, U, ucircumflex, udiaeresis ] };
+ key <AD08> { [ i, I, icircumflex, idiaeresis ] };
+ key <AD09> { [ o, O, ocircumflex, odiaeresis ] };
+ key <AD10> { [ p, P, paragraph, quoteleft ] };
+ key <AD11> { [ dead_circumflex, dead_diaeresis, dead_tilde, quoteright ] };
+ key <AD12> { [ dollar, sterling, ecircumflex, ediaeresis ] };
+
+ key <AC01> { [ q, Q, Acircumflex, Adiaeresis ] };
+ key <AC02> { [ s, S, oslash, Ooblique ] };
+ key <AC03> { [ d, D, Ecircumflex, Ediaeresis ] };
+ key <AC04> { [ f, F, plusminus, ordfeminine ] };
+ key <AC05> { [ g, G, ae, AE ] };
+ key <AC06> { [ h, H, eth, ETH ] };
+ key <AC07> { [ j, J, Ucircumflex, Udiaeresis ] };
+ key <AC08> { [ k, K, Icircumflex, Idiaeresis ] };
+ key <AC09> { [ l, L, Ocircumflex, Odiaeresis ] };
+ key <AC10> { [ m, M, onesuperior, masculine ] };
+ key <AC11> { [ ugrave, percent, twosuperior, Ugrave ] };
+ key <BKSL> { [ asterisk, mu, threesuperior, yen ] };
+
+ key <LSGT> { [ less, greater, bar ] };
+ key <AB01> { [ w, W, guillemotleft ] };
+ key <AB02> { [ x, X, guillemotright ] };
+ key <AB03> { [ c, C, copyright ] };
+ key <AB04> { [ v, V, registered ] };
+ key <AB05> { [ b, B, ssharp ] };
+ key <AB06> { [ n, N, notsign ] };
+ key <AB07> { [ comma, question, questiondown ] };
+ key <AB08> { [ semicolon, period, multiply ] };
+ key <AB09> { [ colon, slash, division ] };
+ key <AB10> { [ exclam, section, exclamdown ] };
+
+ // French uses a comma as decimal separator, but keyboards are labeled with a period
+ // Will take effect when KP_Decimal is mapped to the locale decimal separator
+ key <KPDL> { [ KP_Delete, KP_Decimal, KP_Delete, KP_Decimal ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "latin9_Sundeadkeys" {
+
+ // Modifies the basic fr-latin9 layout to use the Sun dead keys
+
+ include "fr(latin9)"
+
+ key <AE01> { [ ampersand, 1, dead_acute, periodcentered ] };
+ key <AE07> { [ egrave, 7, dead_grave, Egrave ] };
+ key <AD11> { [ dead_circumflex, dead_diaeresis, dead_tilde, quoteright ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "latin9_sundeadkeys" {
+
+ include "fr(latin9_Sundeadkeys)"
+
+ name[Group1]="French (legacy, alternative, Sun dead keys)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "latin9_nodeadkeys" {
+
+ // Modifies the basic fr-latin9 layout to eliminate all dead keys
+
+ include "fr(latin9)"
+
+ name[Group1]="French (legacy, alternative, eliminate dead keys)";
+
+ key <AE01> { [ ampersand, 1, apostrophe, periodcentered ] };
+ key <AE07> { [ egrave, 7, grave, Egrave ] };
+ key <AE12> { [ equal, plus, braceright ] };
+ key <AD11> { [ asciicircum, diaeresis, asciitilde, quoteright ] };
+};
+
+// Bépo : Improved ergonomic french keymap using Dvorak method.
+// Built by community on 'Dvorak Fr / Bépo' :
+// see http://www.clavier-dvorak.org/wiki/ to join and help.
+// XOrg integration (1.0rc2 version) in 2008
+// by Frédéric Boiteux <fboiteux at free dot fr>
+//
+// Bépo layout (1.0rc2 version) for a pc105 keyboard (french) :
+// ┌────┐
+// │ S A│ S = Shift, A = AltGr + Shift
+// │ s a│ s = normal, a = AltGr
+// └────┘
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ # ¶ │ 1 „ │ 2 “ │ 3 ” │ 4 ≤ │ 5 ≥ │ 6 │ 7 ¬ │ 8 ¼ │ 9 ½ │ 0 ¾ │ ° ′ │ ` ″ ┃ ⌫ Retour┃
+// │ $ – │ " — │ « < │ » > │ ( [ │ ) ] │ @ ^ │ + ± │ - − │ / ÷ │ * × │ = ≠ │ % ‰ ┃ arrière┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃ ┃ B ¦ │ É ˝ │ P § │ O Œ │ È ` │ ! │ V │ D Ð │ L │ J IJ │ Z Ə │ W ┃Entrée ┃
+// ┃Tab ↹ ┃ b | │ é ˊ │ p & │ o œ │ è ` │ ˆ ¡ │ v ˇ │ d ð │ l / │ j ij │ z ə │ w ̆ ┃ ⏎ ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
+// ┃ ┃ A Æ │ U Ù │ I ˙ │ E ¤ │ ; ̛ │ C ſ │ T Þ │ S ẞ │ R ™ │ N │ M º │ Ç , ┃ ┃
+// ┃Maj ⇬ ┃ a æ │ u ù │ i ̈ │ e € │ , ’ │ c © │ t þ │ s ß │ r ® │ n ˜ │ m ¯ │ ç ¸ ┃ ┃
+// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
+// ┃ ┃ Ê │ À │ Y ‘ │ X ’ │ : · │ K │ ? ̉ │ Q ̣ │ G │ H ‡ │ F ª ┃ ┃
+// ┃Shift ⇧┃ ê / │ à \ │ y { │ x } │ . … │ k ~ │ ' ¿ │ q ˚ │ g µ │ h † │ f ˛ ┃Shift ⇧ ┃
+// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
+// ┃ ┃ ┃ ┃ Espace inséc. Espace inséc. fin ┃ ┃ ┃ ┃
+// ┃Ctrl ┃Meta ┃Alt ┃ ␣ (Espace) _ ␣ ┃AltGr ⇮┃Menu ┃Ctrl ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+partial alphanumeric_keys
+xkb_symbols "bepo" {
+
+ include "level3(ralt_switch)"
+ include "keypad(oss)"
+
+ name[Group1]= "French (Bepo, ergonomic, Dvorak way)";
+
+ // First row
+ key <TLDE> { [ dollar, numbersign, endash, paragraph ] }; // $ # – ¶
+ key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ quotedbl, 1, emdash, doublelowquotemark ] }; // " 1 — „
+ key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotleft, 2, less, leftdoublequotemark ] }; // « 2 < “
+ key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotright, 3, greater, rightdoublequotemark ] }; // » 3 > ”
+ key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenleft, 4, bracketleft, lessthanequal ] }; // ( 4 [ ≤
+ key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenright, 5, bracketright, greaterthanequal ] }; // ) 5 ] ≥
+ key <AE06> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ at, 6, asciicircum ] }; // @ 6 ^
+ key <AE07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ plus, 7, plusminus, notsign ] }; // + 7 ± ¬
+ key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ minus, 8, U2212, onequarter ] }; // - 8 − ¼
+ key <AE09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ slash, 9, division, onehalf ] }; // / 9 ÷ ½
+ key <AE10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ asterisk, 0, multiply, threequarters ] }; // * 0 × ¾
+ key <AE11> { [ equal, degree, notequal, minutes ] }; // = ° ≠ ′
+ key <AE12> { [ percent, grave, U2030, seconds ] }; // % ` ‰ ″
+
+ // Second row
+ key <AD01> { [ b, B, bar, brokenbar ] }; // b B | ¦
+ key <AD02> { [ eacute, Eacute, dead_acute, dead_doubleacute ] }; // é É ˊ ˝
+ key <AD03> { [ p, P, ampersand, section ] }; // p P & §
+ key <AD04> { [ o, O, oe, OE ] }; // o O œ Œ
+ key <AD05> { [ egrave, Egrave, dead_grave, grave ] }; // è È ` `
+ key <AD06> { [ dead_circumflex, exclam, exclamdown ] }; // ^ ! ¡
+ key <AD07> { [ v, V, dead_caron ] }; // v V ˇ
+ key <AD08> { [ d, D, eth, ETH ] }; // d D ð Ð
+ key <AD09> { [ l, L, dead_stroke ] }; // l L /
+ key <AD10> { [ j, J, U0133, U0132 ] }; // j J ij IJ
+ key <AD11> { [ z, Z, schwa, SCHWA ] }; // z Z ə Ə
+ key <AD12> { [ w, W, dead_breve ] }; // w W ̆
+
+ // Third row
+ key <AC01> { [ a, A, ae, AE ] }; // a A æ Æ
+ key <AC02> { [ u, U, ugrave, Ugrave ] }; // u U ù Ù
+ key <AC03> { [ i, I, dead_diaeresis, dead_abovedot ] }; // i I ̈ ˙
+ key <AC04> { [ e, E, EuroSign, dead_currency ] }; // e E € ¤
+ key <AC05> { [ comma, semicolon, rightsinglequotemark, dead_horn ] }; // , ; ’ ̛
+ key <AC06> { [ c, C, copyright, U017F ] }; // c C © ſ
+ key <AC07> { [ t, T, thorn, THORN ] }; // t T þ Þ
+ key <AC08> { [ s, S, ssharp, U1E9E ] }; // s S ß ẞ
+ key <AC09> { [ r, R, registered, trademark ] }; // r R ® ™
+ key <AC10> { [ n, N, dead_tilde ] }; // n N ~
+ key <AC11> { [ m, M, dead_macron, masculine ] }; // m M ̄ º
+ key <BKSL> { [ ccedilla, Ccedilla, dead_cedilla, dead_belowcomma ] }; // ç Ç ¸ ,
+
+ // Fourth row
+ key <LSGT> { [ ecircumflex, Ecircumflex, slash ] }; // ê Ê /
+ key <AB01> { [ agrave, Agrave, backslash ] }; // à À \
+ key <AB02> { [ y, Y, braceleft, leftsinglequotemark ] }; // y Y { ‘
+ key <AB03> { [ x, X, braceright, rightsinglequotemark ] }; // x X } ’
+ key <AB04> { [ period, colon, ellipsis, periodcentered ] }; // . : … ·
+ key <AB05> { [ k, K, asciitilde ] }; // k K ~
+ key <AB06> { [ apostrophe, question, questiondown, dead_hook ] }; // ' ? ¿ ̉
+ key <AB07> { [ q, Q, dead_abovering, dead_belowdot ] }; // q Q ˚ ̣
+ key <AB08> { [ g, G, mu ] }; // g G µ
+ key <AB09> { [ h, H, dagger, doubledagger ] }; // h H † ‡
+ key <AB10> { [ f, F, dead_ogonek, ordfeminine ] }; // f F ̨ ª
+
+ key <SPCE> { [ space, nobreakspace, underscore, U202F ] }; // ␣ (espace insécable) _ (espace insécable fin)
+};
+
+partial alphanumeric_keys
+xkb_symbols "bepo_latin9" {
+
+ // Restricts the fr(bepo) layout to latin9 symbols
+
+ include "fr(bepo)"
+ include "keypad(oss_latin9)"
+
+ name[Group1]="French (Bepo, ergonomic, Dvorak way, latin-9 only)";
+
+ key <TLDE> { [ dollar, numbersign, dollar, paragraph ] }; // $ # $ ¶
+
+ key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ quotedbl, 1 ] }; // " 1
+ key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotleft, 2, less ] }; // « 2 <
+ key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotright, 3, greater ] }; // » 3 >
+ key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenleft, 4, bracketleft ] }; // ( 4 [
+ key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenright, 5, bracketright ] }; // ) 5 ]
+ key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ minus, 8, minus, onequarter ] }; // - 8 - ¼
+ key <AE11> { [ equal, degree ] }; // = °
+ key <AE12> { [ percent, grave ] }; // % `
+
+ key <AD01> { [ b, B, bar ] }; // b B |
+ key <AD02> { [ eacute, Eacute, dead_acute ] }; // é É ˊ
+ key <AD10> { [ j, J ] }; // j J
+ key <AD11> { [ z, Z ] }; // z Z
+ key <AD12> { [ w, W ] }; // w W
+
+ key <AC03> { [ i, I, dead_diaeresis ] }; // i I ̈
+ key <AC05> { [ comma, semicolon, comma, dead_horn ] }; // , ; , ̛
+ key <AC06> { [ c, C, copyright ] }; // c C ©
+ key <AC08> { [ s, S, ssharp ] }; // s S ß
+ key <AC09> { [ r, R, registered ] }; // r R ®
+ key <AC11> { [ m, M, macron, masculine ] }; // m M ̄ º
+
+ key <AB02> { [ y, Y, braceleft ] }; // y Y {
+ key <AB03> { [ x, X, braceright ] }; // x X }
+ key <AB04> { [ period, colon ] }; // . :
+ key <AB09> { [ h, H ] }; // h H
+ key <AB10> { [ f, F, f, ordfeminine ] }; // f F ª
+
+ // Note : on a besoin de redéfinir les niveaux 3 et 4,
+ // donc nbsp(level2) ne suffit pas !
+ key <SPCE> { [ space, nobreakspace, underscore, nobreakspace ] }; // ␣ (espace insécable) _ (espace insécable)
+};
+
+// Author : Francis Leboutte, http://www.algo.be/ergo/dvorak-fr.html
+// thanks to Fabien Cazenave for his help
+// Licence : X11 (the layout itself is released under CC-NC-ND licence)
+// Version : 0.3
+
+// Base layer + dead AltGr key (`):
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓
+// │ * │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ % ┃ ┃
+// │ _ │ = │ / ± │ - ¼ │ è ½ │ \ ¾ │ ^ │ ( │ ` ` │ ) │ " │ [ │ ] ┃ ⌫ ┃
+// ┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┳━━━━━━━┫
+// ┃ ┃ ? Æ │ < │ > │ G │ ! │ H │ V │ C Ç │ M │ K │ Z │ & ┃ ┃
+// ┃ ↹ ┃ : æ │ ' $ │ é É │ g € │ . ° │ h │ v │ c ç │ m µ │ k │ z │ ¨ ┃ ┃
+// ┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ⏎ ┃
+// ┃ ┃ O Ò │ A À │ U Ù │ E È │ B │ F │ S │ T │ N │ D │ W │ # ┃ ┃
+// ┃ ⇬ ┃ o ò │ a à │ u ù │ e è │ b │ f │ s « │ t │ n » │ d │ w │ ~ ┃ ┃
+// ┣━━━━━━┳━━┹──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┷━━━━━┻━━━━━━┫
+// ┃ ┃ ç Ç │ | Œ │ Q │ @ │ I Ì │ Y │ X │ R │ L │ P │ J ┃ ┃
+// ┃ ⇧ ┃ à À │ ; œ │ q { │ , } │ i ì │ y £ │ x │ r º │ l │ p § │ j ┃ ⇧ ┃
+// ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫
+// ┃ ┃ ┃ ┃ ␣ ⍽ ┃ ┃ ┃ ┃ ┃
+// ┃ ctrl ┃ super ┃ alt ┃ ␣ Espace Espace insécable ⍽ ┃ alt ┃ super ┃ menu ┃ ctrl ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛
+
+// Notice the specific Caps_Lock layer:
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━┓
+// │ * │ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │ 8 │ 9 │ 0 │ + │ % ┃ ┃
+// │ │ │ │ │ │ │ │ │ │ │ │ │ ┃ ⌫ ┃
+// ┢━━━━━┷━━┱──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┺━━┳━━━━━━━┫
+// ┃ ┃ │ < │ > │ │ │ │ │ │ │ │ │ ┃ ┃
+// ┃ ↹ ┃ │ │ │ │ │ │ │ │ │ │ │ ┃ ┃
+// ┣━━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ⏎ ┃
+// ┃ ┃ │ │ │ │ │ │ │ │ │ │ │ ┃ ┃
+// ┃ ⇬ ┃ │ │ │ │ │ │ │ │ │ │ │ ┃ ┃
+// ┣━━━━━━┳━━┹──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┬──┴──┲━━┷━━━━━┻━━━━━━┫
+// ┃ ┃ / │ - │ │ │ │ │ │ │ │ │ ┃ ┃
+// ┃ ⇧ ┃ │ │ │ │ │ │ │ │ │ │ ┃ ⇧ ┃
+// ┣━━━━━━┻┳━━━━┷━━┳━━┷━━━━┱┴─────┴─────┴─────┴─────┴─────┴─┲━━━┷━━━┳━┷━━━━━╋━━━━━━━┳━━━━━━━┫
+// ┃ ┃ ┃ ┃ ␣ ⍽ ┃ ┃ ┃ ┃ ┃
+// ┃ ctrl ┃ super ┃ alt ┃ ␣ Espace Espace insécable ⍽ ┃ alt ┃ super ┃ menu ┃ ctrl ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━━┛
+
+partial alphanumeric_keys modifier_keys
+xkb_symbols "dvorak" {
+ name[Group1]="French (Dvorak)";
+
+ // First row
+ key <TLDE> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ underscore, asterisk ] };
+ key <AE01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ equal, 1 ] };
+ key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ slash, 2, plusminus ] };
+ key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ minus, 3, onequarter ] };
+ key <AE04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ egrave, 4, onehalf ] };
+ key <AE05> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ backslash, 5, threequarters ] };
+ key <AE06> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ dead_circumflex, 6 ] };
+ key <AE07> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenleft, 7 ] };
+ key <AE08> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ ISO_Level3_Latch, 8, grave ] };
+ key <AE09> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ parenright, 9 ] };
+ key <AE10> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ quotedbl, 0 ] };
+ key <AE11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ bracketleft, plus ] };
+ key <AE12> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ bracketright, percent ] };
+
+ // Second row
+ key <AD01> { [ colon, question, ae, AE ] };
+ key <AD02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ apostrophe, less, dollar ] };
+ key <AD03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ eacute, greater, Eacute ] };
+ key <AD04> { [ g, G, EuroSign ] };
+ key <AD05> { [ period, exclam, degree ] };
+ key <AD06> { [ h, H ] };
+ key <AD07> { [ v, V ] };
+ key <AD08> { [ c, C, ccedilla, Ccedilla ] };
+ key <AD09> { [ m, M, mu ] };
+ key <AD10> { [ k, K ] };
+ key <AD11> { [ z, Z ] };
+ key <AD12> { [ dead_diaeresis, ampersand ] };
+
+ // Third row
+ key <AC01> { [ o, O, ograve, Ograve ] };
+ key <AC02> { [ a, A, agrave, Agrave ] };
+ key <AC03> { [ u, U, ugrave, Ugrave ] };
+ key <AC04> { [ e, E, egrave, Egrave ] };
+ key <AC05> { [ b, B ] };
+ key <AC06> { [ f, F ] };
+ key <AC07> { [ s, S, guillemotleft ] };
+ key <AC08> { [ t, T ] };
+ key <AC09> { [ n, N, guillemotright ] };
+ key <AC10> { [ d, D ] };
+ key <AC11> { [ w, W ] };
+ key <BKSL> { [ asciitilde, numbersign ] };
+
+ // Fourth row
+ key <LSGT> { type[group1] = "FOUR_LEVEL_PLUS_LOCK", [ agrave, ccedilla, Agrave, Ccedilla, slash ] };
+ key <AB01> { type[group1] = "FOUR_LEVEL_PLUS_LOCK", [ semicolon, bar, oe, OE, minus ] };
+ key <AB02> { [ q, Q, braceleft ] };
+ key <AB03> { [ comma, at, braceright ] };
+ key <AB04> { [ i, I, igrave, Igrave ] };
+ key <AB05> { [ y, Y, sterling ] };
+ key <AB06> { [ x, X ] };
+ key <AB07> { [ r, R, masculine ] };
+ key <AB08> { [ l, L ] };
+ key <AB09> { [ p, P, section ] };
+ key <AB10> { [ j, J ] };
+
+ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+};
+
+// C'WHERTY: Breton keyboard. Ar c'hlavier brezhoneg.
+// Copyright © 2009 Dominique Pellé <dominique.pelle@gmail.com>
+// Version: 0.1
+//
+// ┌────┐
+// │ S A│ S = Reol = Shift, A = ArErl + Pennlizherenn = AltGr + Shift
+// │ s a│ s = normal, a = AltGr
+// └────┘
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ $ Γ │ 1 Δ │ 2 Θ │ 3 Λ │ 4 Ξ │ 5 Π │ 6 Σ │ 7 Φ │ 8 Ψ │ 9 Ç │ 0 Ω │ ° ß │ + ¬ ┃ ⌫ Souzañ┃
+// │ ² ˙ │ & ¯ │ é ´ │ " # │ ' { │ ( [ │ - | │ è ` │ - \ │ ç ± │ à @ │ ) ] │ = } ┃ ┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃Toalenn┃ C'h │ W ω │ E ε │ R ρ │ T τ │ Y ψ │ U υ │ I ι │ O OE│ P π │ ¨ ¥ │ * £ ┃Enankañ┃
+// ┃ ↹ ┃ c'h │ w │ e € │ r │ t │ y │ u │ i ı │ o oe│ p │ ^ « │ / » ┃ ⏎ ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
+// ┃Prenn ┃ A Æ │ S σ │ D δ │ F φ │ G γ │ H η │ J ς │ K κ │ L λ │ M μ │ Ù ® │ ! ¡ ┃ ┃
+// ┃Pennli ⇬┃ a æ │ s │ d $ │ f │ g │ h │ j │ k │ l │ m │ ù ŭ │ ? ¿ ┃ ┃
+// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
+// ┃ ┃ Q θ │ Z ζ │ X ξ │ C χ │ V │ B β │ N ν │ CH │ Ñ │ : © │ ; ┃ ┃
+// ┃Shift ⇧┃ q < │ z > │ x │ c ¢ │ v │ b │ n │ ch │ ñ │ . │ , ┃Shift ⇧ ┃
+// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
+// ┃ ┃ ┃ ┃ ⍽ Espace insécable ␣ ┃ ┃ ┃ ┃
+// ┃Reol ┃Meta ┃Erl ┃ ␣ Espace ␣ ┃ArErl ⇮┃Menu ┃Reol ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+partial alphanumeric_keys
+xkb_symbols "bre" {
+
+ include "keypad(oss)"
+
+ name[Group1]= "French (Breton)";
+
+ // First row
+ key <TLDE> { [ twosuperior, dead_tilde, dead_abovedot, Greek_GAMMA ] };
+ key <AE01> { [ ampersand, 1, dead_macron, Greek_DELTA ] };
+ key <AE02> { [ eacute, 2, dead_acute, Greek_THETA ] };
+ key <AE03> { [ quotedbl, 3, numbersign, Greek_LAMDA ] };
+ key <AE04> { [ apostrophe, 4, braceleft, Greek_XI ] };
+ key <AE05> { [ parenleft, 5, bracketleft, Greek_PI ] };
+ key <AE06> { [ minus, 6, bar, Greek_SIGMA ] };
+ key <AE07> { [ egrave, 7, dead_grave, Greek_PHI ] };
+ key <AE08> { [ underscore, 8, backslash, Greek_PSI ] };
+ key <AE09> { [ ccedilla, 9, plusminus, Ccedilla ] };
+ key <AE10> { [ agrave, 0, at, Greek_OMEGA ] };
+ key <AE11> { [ parenright, dead_abovering, bracketright, ssharp ] };
+ key <AE12> { [ equal, plus, braceright, notsign ] };
+
+ // Second row
+ // Handling the C'H key correctly requires an inputmethod (XIM)
+ // See https://bugs.freedesktop.org/show_bug.cgi?id=19506
+ // key <AD01> { [ trigraph_c_h, trigraph_C_h, trigraph_C_H, Greek_alpha ] };
+ key <AD01> { [ UF8FD, UF8FE, UF8FF, Greek_alpha ] };
+ key <AD02> { [ w, W, Greek_omega, Greek_omega ] };
+ key <AD03> { [ e, E, EuroSign, Greek_epsilon ] };
+ key <AD04> { [ r, R, Greek_rho, Greek_rho ] };
+ key <AD05> { [ t, T, Greek_tau, Greek_tau ] };
+ key <AD06> { [ y, Y, Greek_psi, Greek_psi ] };
+ key <AD07> { [ u, U, Greek_upsilon, Greek_upsilon ] };
+ key <AD08> { [ i, I, idotless, Greek_iota ] };
+ key <AD09> { [ o, O, oe, OE ] };
+ key <AD10> { [ p, P, Greek_pi, Greek_pi ] };
+ key <AD11> { [ dead_circumflex, dead_diaeresis, guillemotleft, yen ] };
+ key <AD12> { [ slash, asterisk, guillemotright, sterling ] };
+
+ // Third row
+ key <AC01> { [ a, A, ae, AE ] };
+ key <AC02> { [ s, S, Greek_sigma, Greek_sigma ] };
+ key <AC03> { [ d, D, dollar, Greek_delta ] };
+ key <AC04> { [ f, F, Greek_phi, Greek_phi ] };
+ key <AC05> { [ g, G, Greek_gamma, Greek_gamma ] };
+ key <AC06> { [ h, H, Greek_eta, Greek_eta ] };
+ key <AC07> { [ j, J, Greek_finalsmallsigma, Greek_finalsmallsigma ] };
+ key <AC08> { [ k, K, Greek_kappa, Greek_kappa ] };
+ key <AC09> { [ l, L, Greek_lamda, Greek_lambda ] };
+ key <AC10> { [ m, M, Greek_mu, Greek_mu ] };
+ key <AC11> { [ ugrave, Ugrave, ubreve, registered ] };
+ key <BKSL> { [ question, exclam, questiondown, exclamdown ] };
+
+ // Fourth row
+ key <LSGT> { [ q, Q, less, Greek_theta ] };
+ key <AB01> { [ z, Z, greater, Greek_zeta ] };
+ key <AB02> { [ x, X, Greek_xi, Greek_xi ] };
+ key <AB03> { [ c, C, cent, Greek_chi ] };
+ key <AB04> { [ v, V ] };
+ key <AB05> { [ b, B, Greek_beta, Greek_beta ] };
+ key <AB06> { [ n, N, Greek_nu, Greek_nu ] };
+ // Handling the CH key correctly requires an inputmethod (XIM)
+ // See https://bugs.freedesktop.org/show_bug.cgi?id=19506
+ // key <AB07> { [ digraph_ch, digraph_Ch, digraph_CH, Greek_omicron ] };
+ key <AB07> { [ UF8FA, UF8FB, UF8FC, Greek_omicron ] };
+ key <AB08> { [ ntilde, Ntilde ] };
+ key <AB09> { [ period, colon, section, copyright ] };
+ key <AB10> { [ comma, semicolon, percent ] };
+
+ key <SPCE> { [ space, nobreakspace, space, nobreakspace ] };
+
+ include "level3(ralt_switch)"
+};
+
+// Occitan layout
+// Author : 2009 Thomas Metz <tmetz @ free.fr>
+// Derivated from the layout defined at http://www.panoccitan.org
+// Version: 0.1
+// From OSS french keyboard :
+// - add á, í, ò, ó et ú, Á, Í, Ò, Ó, Ú, ñ, Ñ
+// - change position of æ, ü, î, û, œ, ô, ö, ï, â, ë
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━┓
+// │ ³ ¸ │ 1 ̨ │ 2 É │ 3 ˘ │ 4 — │ 5 – │ 6 ‑ │ 7 È │ 8 ™ │ 9 Ç │ 0 À │ ° ≠ │ + ± ┃ ⌫ Retour┃
+// │ ² ¹ │ & ˇ │ é ~ │ " # │ ' { │ ( [ │ - | │ è ` │ _ \ │ ç ^ │ à @ │ ) ] │ = } ┃ arrière┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━┫
+// ┃ ┃ A Á │ Z Æ │ E ¢ │ R Ê │ T Ë │ Y Û │ U Ú │ I Í │ O Ó │ P Ò │ ¨ Œ │ £ Ø ┃Entrée ┃
+// ┃Tab ↹ ┃ a á │ z æ │ e € │ r ê │ t ë │ y û │ u ú │ i í │ o ó │ p ò │ ^ œ │ $ ø ┃ ⏎ ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
+// ┃ ┃ Q Ä │ S „ │ D Â │ F ‚ │ G ¥ │ H Ü │ J Î │ K Ï │ L Ô │ M Ö │ % Ù │ µ ̄ ┃ ┃
+// ┃Maj ⇬ ┃ q ä │ s ß │ d â │ f ‘ │ g ’ │ h ü │ j î │ k ï │ l ô │ m ö │ ù ' │ * ` ┃ ┃
+// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━┫
+// ┃ ┃ > ≥ │ W “ │ X ” │ C ® │ V ← │ B ↑ │ N Ñ │ ? … │ . . │ / ∕ │ § − ┃ ┃
+// ┃Shift ⇧┃ < ≤ │ w « │ x » │ c © │ v → │ b ↓ │ n ñ │ , ¿ │ ; × │ : ÷ │ ! ¡ ┃Shift ⇧ ┃
+// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴───┲━┷━━━━━╈━━━━━┻━┳━━━━━━━┳━━━┛
+// ┃ ┃ ┃ ┃ ␣ Espace fine insécable ⍽ ┃ ┃ ┃ ┃
+// ┃Ctrl ┃Meta ┃Alt ┃ ␣ Espace Espace insécable ⍽ ┃AltGr ⇮┃Menu ┃Ctrl ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹───────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┛
+partial alphanumeric_keys
+xkb_symbols "oci" {
+
+ include "keypad(oss)"
+
+ name[Group1]= "Occitan";
+
+ // First row
+ key <TLDE> { [ twosuperior, threesuperior, onesuperior, dead_cedilla ] }; // ² ³ ¹ ¸
+ key <AE01> { [ ampersand, 1, dead_caron, dead_ogonek ] }; // & 1 ˇ ̨
+ key <AE02> { [ eacute, 2, asciitilde, Eacute ] }; // é 2 ~ É
+ key <AE03> { [ quotedbl, 3, numbersign, dead_breve ] }; // " 3 # ˘
+ key <AE04> { [ apostrophe, 4, braceleft, 0x1002014 ] }; // ' 4 { — (tiret cadratin)
+ key <AE05> { [ parenleft, 5, bracketleft, 0x1002013 ] }; // ( 5 [ – (tiret demi-cadratin)
+ key <AE06> { [ minus, 6, bar, 0x1002011 ] }; // - 6 | ‑ (tiret insécable)
+ key <AE07> { [ egrave, 7, grave, Egrave ] }; // è 7 ` È
+ key <AE08> { [ underscore, 8, backslash, trademark ] }; // _ 8 \ ™
+ key <AE09> { [ ccedilla, 9, asciicircum, Ccedilla ] }; // ç 9 ^ Ç
+ key <AE10> { [ agrave, 0, at, Agrave ] }; // à 0 @ À
+ key <AE11> { [ parenright, degree, bracketright, notequal ] }; // ) ° ] ≠
+ key <AE12> { [ equal, plus, braceright, plusminus ] }; // = + } ±
+
+ // Second row
+ key <AD01> { [ a, A, aacute, Aacute ] }; // a A á Á
+ key <AD02> { [ z, Z, ae, AE ] }; // z Z æ Æ
+ key <AD03> { [ e, E, EuroSign, cent ] }; // e E € ¢
+ key <AD04> { [ r, R, ecircumflex, Ecircumflex ] }; // r R ê Ê
+ key <AD05> { [ t, T, ediaeresis, Ediaeresis ] }; // t T ë Ë
+ key <AD06> { [ y, Y, ucircumflex, Ucircumflex ] }; // y Y û Û
+ key <AD07> { [ u, U, uacute, Uacute ] }; // u U ú Ú
+ key <AD08> { [ i, I, iacute, Iacute ] }; // i I í Í
+ key <AD09> { [ o, O, oacute, Oacute ] }; // o O ó Ó
+ key <AD10> { [ p, P, ograve, Ograve ] }; // p P ò Ò
+ key <AD11> { [ dead_circumflex, dead_diaeresis, oe, OE ] }; // ^ ̈ ̃ œ Œ
+ key <AD12> { [ dollar, sterling, oslash, Ooblique ] }; // $ £ ø Ø
+
+ // Third row
+ key <AC01> { [ q, Q, adiaeresis, Adiaeresis ] }; // q Q ä Ä
+ key <AC02> { [ s, S, ssharp, doublelowquotemark ] }; // s S ß „
+ key <AC03> { [ d, D, acircumflex, Acircumflex ] }; // d D â Â
+ key <AC04> { [ f, F, leftsinglequotemark, singlelowquotemark ] }; // f F ‘ ‚
+ key <AC05> { [ g, G, rightsinglequotemark, yen ] }; // g G ’ ¥
+ key <AC06> { [ h, H, udiaeresis, Udiaeresis ] }; // h H ü Ü
+ key <AC07> { [ j, J, icircumflex, Icircumflex] }; // j J î Î
+ key <AC08> { [ k, K, idiaeresis, Idiaeresis] }; // k K ï Ï
+ key <AC09> { [ l, L, ocircumflex, Ocircumflex ] }; // l L ô Ô
+ key <AC10> { [ m, M, odiaeresis, Odiaeresis ] }; // m M ö Ö
+ key <AC11> { [ ugrave, percent, dead_acute, Ugrave ] }; // ù % ' Ù
+ key <BKSL> { [ asterisk, mu, dead_grave, dead_macron ] }; // * µ ` ̄
+
+ // Fourth row
+ key <LSGT> { [ less, greater, lessthanequal, greaterthanequal ] }; // < > ≤ ≥
+ key <AB01> { [ w, W, guillemotleft, leftdoublequotemark ] }; // w W « “
+ key <AB02> { [ x, X, guillemotright, rightdoublequotemark ] }; // x X » ”
+ key <AB03> { [ c, C, copyright, registered ] }; // c C © ®
+ key <AB04> { [ v, V, rightarrow, leftarrow ] }; // v V → ←
+ key <AB05> { [ b, B, downarrow, uparrow ] }; // b B ↓ ↑
+ key <AB06> { [ n, N, ntilde, Ntilde ] }; // n N ñ Ñ
+ key <AB07> { [ comma, question, questiondown, 0x1002026 ] }; // , ? ¿ …
+ key <AB08> { [ semicolon, period, multiply, 0x10022C5 ] }; // ; . × ⋅
+ key <AB09> { [ colon, slash, division, 0x1002215 ] }; // : / ÷ ∕
+ key <AB10> { [ exclam, section, exclamdown, 0x1002212 ] }; // ! § ¡ −
+};
+
+// Marc.Shapiro@inria.fr 19-sep-1998
+// modifications : Etienne Herlent <eherlent@linux-france.org> june 2000
+// adapted to the new input layer :
+// Martin Costabel <costabel@wanadoo.fr> 3-jan-2001
+// adapted for Latin9 alphabet (ISO-8859-15):
+// Etienne Herlent <eherlent@linux-france.org> march 2005
+
+// This map is an almost-complete mapping of the standard French
+// MacIntosh keyboard under Xwindows. I tried to remain as faithful
+// as possible to the Mac meaning of each key. I did this entirely by
+// hand and by intuition, relying on the Clavier (Keyboard?) Desktop
+// Accessory for the Mac meaning of keys, and on reading keysymdef.h
+// to intuit the corresponding X names. Lacking proper documentation,
+// I may have made some mistakes.
+
+// Entries marked CHECK are particularly uncertain
+
+// Entries marked MISSING mark Mac characters for which I was unable
+// to find a corresponding keysym. (Some for sure don't: e.g. the
+// Apple mark and the oe/OE character; others I may have simply not
+// found.)
+
+// Copied from macintosh_vndr/fr
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+ name[Group1]= "French (Macintosh)";
+
+ // Alphanumeric section
+ key <TLDE> { [ at, numbersign, periodcentered, Ydiaeresis ] }; // MISSING: Ydiaeresis; eherlent : ok in Latin9
+ key <AE01> { [ ampersand, 1, VoidSymbol, dead_acute ] }; // MISSING: Apple
+ key <AE02> { [ eacute, 2, ediaeresis, Eacute ] };
+ key <AE03> { [ quotedbl, 3, VoidSymbol, VoidSymbol ] }; // CHECK all quotemarks
+ key <AE04> { [ apostrophe, 4, VoidSymbol, VoidSymbol ] };
+ key <AE05> { [ parenleft, 5, braceleft, bracketleft ] };
+ // CHECK section
+ key <AE06> { [ section, 6, paragraph, aring ] };
+ key <AE07> { [ egrave, 7, guillemotleft, guillemotright ] };
+ key <AE08> { [ exclam, 8, exclamdown, Ucircumflex ] };
+ key <AE09> { [ ccedilla, 9, Ccedilla, Aacute ] };
+ key <AE10> { [ agrave, 0, oslash, VoidSymbol ] }; // MISSING: Oslash
+ key <AE11> { [ parenright, degree, braceright, bracketright ] };
+ key <AE12> { [ minus, underscore, emdash, endash ] }; // CHECK dashes
+
+ key <AD01> { [ a, A, ae, AE ] };
+ key <AD02> { [ z, Z, Acircumflex, Aring ] };
+ key <AD03> { [ e, E, ecircumflex, Ecircumflex ] };
+ key <AD04> { [ r, R, registered, currency ] };
+ key <AD05> { [ t, T, VoidSymbol, VoidSymbol ] };
+ key <AD06> { [ y, Y, Uacute, Ydiaeresis ] }; // MISSING: Ydiaeresis; eherlent : ok in Latin9
+ key <AD07> { [ u, U, VoidSymbol, ordfeminine ] }; // MISSING: ordmasculine?
+ key <AD08> { [ i, I, icircumflex, idiaeresis ] };
+ key <AD09> { [ o, O, oe, OE ] }; // MISSING: oe, OE lacking in Latin1; eherlent ok in Latin9
+ key <AD10> { [ p, P, VoidSymbol, VoidSymbol ] };
+ key <AD11> { [dead_circumflex,dead_diaeresis, ocircumflex, Ocircumflex ] };
+ key <AD12> { [ dollar, asterisk, EuroSign, yen ] }; // eherlent : EuroSign in Latin9
+
+ key <AC01> { [ q, Q, acircumflex, Agrave ] };
+ key <AC02> { [ s, S, Ograve, VoidSymbol ] };
+ key <AC03> { [ d, D, VoidSymbol, VoidSymbol ] };
+ key <AC04> { [ f, F, VoidSymbol, periodcentered ] }; // MISSING: oblong script f??
+ key <AC05> { [ g, G, VoidSymbol, VoidSymbol ] }; // MISSING: kerned fi, fl
+ key <AC06> { [ h, H, Igrave, Icircumflex ] };
+ key <AC07> { [ j, J, Idiaeresis, Iacute ] };
+ key <AC08> { [ k, K, Egrave, Ediaeresis ] };
+ key <AC09> { [ l, L, notsign, bar ] };
+ key <AC10> { [ m, M, mu, Oacute ] };
+ key <AC11> { [ ugrave,percent, Ugrave, ucircumflex ] }; // MISSING: per-mille
+ key <BKSL> { [ dead_grave, sterling, at, numbersign ] };
+
+ key <LSGT> { [ less, greater, VoidSymbol, VoidSymbol ] };
+ key <AB01> { [ w, W, VoidSymbol, VoidSymbol ] }; // MISSING: half-guillemot (single angle bracket)
+ key <AB02> { [ x, X, VoidSymbol, VoidSymbol ] }; // CHECK similarequal; MISSING: extra-slanted slash
+ key <AB03> { [ c, C, copyright, cent ] };
+ key <AB04> { [ v, V, diamond, leftradical ] }; // CHECK diamond, leftradical
+ key <AB05> { [ b, B, ssharp, VoidSymbol ] }; // CHECK: Greek_beta or ssharp?; MISSING: oblong script s
+ key <AB06> { [ n, N, dead_tilde, asciitilde ] };
+ key <AB07> { [ comma, question, VoidSymbol, questiondown ] };
+ key <AB08> { [ semicolon, period, VoidSymbol, periodcentered ] };
+ key <AB09> { [ colon, slash, division, backslash ] };
+ key <AB10> { [ equal, plus, VoidSymbol, plusminus ] };
+
+ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+ // End alphanumeric section
+
+ key <KPDL> { [ comma,KP_Decimal ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "geo" {
+ include "ge(basic)"
+
+ name[Group1]= "Georgian (France, AZERTY Tskapo)";
+
+ key <TLDE> { [ exclam, noSymbol ] };
+ key <AE01> { [ 0x0100201e, 1 ] };
+ key <AE02> { [ 0x01002116, 2 ] };
+ key <AE03> { [ percent, 3 ] };
+ key <AE04> { [ parenleft, 4 ] };
+ key <AE05> { [ colon, 5 ] };
+ key <AE06> { [ semicolon, 6 ] };
+ key <AE07> { [ question, 7 ] };
+ key <AE08> { [ 0x01002116, 8 ] };
+ key <AE09> { [ degree, 9 ] };
+ key <AE10> { [ parenright, 0 ] };
+ key <AE11> { [ minus, underscore, 0x01002014 ] };
+ key <AE12> { [ less, greater ] };
+
+ key <AD01> { [ 0x010010d0, 0x010010fa ] };
+ key <AD02> { [ 0x010010d6, Z ] };
+ key <AD03> { [ 0x010010d4, E, 0x010010f1 ] };
+ key <AD04> { [ 0x010010e0, 0x010000ae ] };
+ key <AD05> { [ 0x010010e2, T ] };
+ key <AD06> { [ 0x010010e7, 0x010010f8 ] };
+ key <AD07> { [ 0x010010e3, U ] };
+ key <AD08> { [ 0x010010d8, 0x010010f2 ] };
+ key <AD09> { [ 0x010010dd, O ] };
+ key <AD10> { [ 0x010010de, P ] };
+ key <AD11> { [ 0x010010d7, T ] };
+ key <AD12> { [ 0x010010eb, Z ] };
+
+ key <AC01> { [ 0x010010e5, Q ] };
+ key <AC02> { [ 0x010010e1, S ] };
+ key <AC03> { [ 0x010010d3, D ] };
+ key <AC04> { [ 0x010010e4, 0x010010f6 ] };
+ key <AC05> { [ 0x010010d2, 0x010010f9 ] };
+ key <AC06> { [ 0x010010f0, 0x010010f5 ] };
+ key <AC07> { [ 0x010010ef, 0x010010f7 ] };
+ key <AC08> { [ 0x010010d9, K ] };
+ key <AC09> { [ 0x010010da, L ] };
+ key <AC10> { [ 0x010010db, M ] };
+ key <AC11> { [ 0x010010df, J ] };
+ key <BKSL> { [ 0x010010e9, 0x010000a9 ] };
+
+ key <LSGT> { [ guillemotleft,guillemotright ] };
+ key <AB01> { [ 0x010010ec, W ] };
+ key <AB02> { [ 0x010010ee, 0x010010f4 ] };
+ key <AB03> { [ 0x010010ea, 0x010000a9 ] };
+ key <AB04> { [ 0x010010d5, 0x010010f3 ] };
+ key <AB05> { [ 0x010010d1, B ] };
+ key <AB06> { [ 0x010010dc, 0x010010fc ] };
+ key <AB07> { [ comma, 0x01002014 ] };
+ key <AB08> { [ 0x010010e8, S ] };
+ key <AB09> { [ 0x010010e6, noSymbol ] };
+ key <AB10> { [ 0x010010ed, noSymbol ] };
+
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ge b/xorg-server/xkeyboard-config/symbols/ge
index 0746295b5..d188d4822 100644
--- a/xorg-server/xkeyboard-config/symbols/ge
+++ b/xorg-server/xkeyboard-config/symbols/ge
@@ -1,272 +1,272 @@
-// Georgian Keyboard Layouts by Aiet Kolkhi <aietkolkhi@gmail.com>
-// Full layout descriptions available at http://www.gakartuleba.org/layouts/
-//
-// This includes the following keyboard layouts: Georgian QWERTY; Georgian Ergonomic;
-// Georgian MESS; Georgian AZERTY Tskapo; Georgian Russian.
-//
-// Layouts include Georgian Mkhedruli alphabeth; most layouts also include some special
-// and ancient characters (like Fi, Yn, Elifi, Turned Gan and Ain). Layouts do not
-// include Georgian Asomtavruli or Georgian Khutsuri alphabeths which are also present
-// in Unicode.
-//
-// Georgian Typewriter no longer supported, as it is no longer used in Georgia.
-//
-// some layouts based on Georgian keyboard map, in the so called "latin" layout.
-// 1999, Pablo Saratxaga <srtxg@chanae.alphanet.ch>
-//
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- name[Group1]= "Georgia";
-
- key <TLDE> { [ 0x0100201e, 0x0100201c, 0x0100201e, asciitilde ] };
- key <AE01> { [ 1, exclam, apostrophe ] };
- key <AE02> { [ 2, at, 0x0100201e ] };
- key <AE03> { [ 3, numbersign, 0x0100201c ] };
- key <AE04> { [ 4, dollar, 0x01002116 ] };
- key <AE05> { [ 5, percent, EuroSign ] };
- key <AE06> { [ 6, asciicircum ] };
- key <AE07> { [ 7, ampersand, section ] };
- key <AE08> { [ 8, asterisk, degree ] };
- key <AE09> { [ 9, parenleft ] };
- key <AE10> { [ 0, parenright ] };
- key <AE11> { [ minus, underscore, 0x01002014 ] };
- key <AE12> { [ equal, plus, 0x01002013 ] };
-
- key <AD01> { [ 0x010010e5, Q ] };
- key <AD02> { [ 0x010010ec, 0x010010ed ] };
- key <AD03> { [ 0x010010d4, E, 0x010010f1 ] };
- key <AD04> { [ 0x010010e0, 0x010010e6, 0x010000ae ] };
- key <AD05> { [ 0x010010e2, 0x010010d7 ] };
- key <AD06> { [ 0x010010e7, Y, 0x010010f8 ] };
- key <AD07> { [ 0x010010e3, U ] };
- key <AD08> { [ 0x010010d8, I, 0x010010f2 ] };
- key <AD09> { [ 0x010010dd, O ] };
- key <AD10> { [ 0x010010de, P ] };
- key <AD11> { [ bracketleft, braceleft ] };
- key <AD12> { [ bracketright,braceright ] };
-
- key <AC01> { [ 0x010010d0, A, 0x010010fa ] };
- key <AC02> { [ 0x010010e1, 0x010010e8 ] };
- key <AC03> { [ 0x010010d3, D ] };
- key <AC04> { [ 0x010010e4, F, 0x010010f6 ] };
- key <AC05> { [ 0x010010d2, G, 0x010010f9 ] };
- key <AC06> { [ 0x010010f0, H, 0x010010f5 ] };
- key <AC07> { [ 0x010010ef, 0x010010df, 0x010010f7 ] };
- key <AC08> { [ 0x010010d9, K ] };
- key <AC09> { [ 0x010010da, L ] };
- key <AC10> { [ semicolon, colon ] };
- key <AC11> { [ apostrophe, quotedbl ] };
- key <BKSL> { [ backslash, bar, asciitilde, asciitilde ] };
-
- key <LSGT> { [ guillemotleft,guillemotright ] };
- key <AB01> { [ 0x010010d6, 0x010010eb ] };
- key <AB02> { [ 0x010010ee, X, 0x010010f4 ] };
- key <AB03> { [ 0x010010ea, 0x010010e9, 0x010000a9 ] };
- key <AB04> { [ 0x010010d5, V, 0x010010f3 ] };
- key <AB05> { [ 0x010010d1, B ] };
- key <AB06> { [ 0x010010dc, N, 0x010010fc ] };
- key <AB07> { [ 0x010010db, M ] };
- key <AB08> { [ comma, less, guillemotleft ] };
- key <AB09> { [ period, greater, guillemotright ] };
- key <AB10> { [ slash, question, 0x010010fb ] };
-
- include "level3(ralt_switch)"
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "qwerty" {
- include "ge(basic)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "ergonomic" {
- include "ge(basic)"
-
- name[Group1]= "Georgia - Ergonomic";
-
- key <TLDE> { [ 0x0100201e, apostrophe, 0x0100201e, asciitilde ] };
- key <AE01> { [ exclam, 1, exclam ] };
- key <AE02> { [ 0x01002116, 2, at ] };
- key <AE03> { [ comma, 3, numbersign, section ] };
- key <AE04> { [ semicolon, 4, dollar ] };
- key <AE05> { [ percent, 5, EuroSign ] };
- key <AE06> { [ colon, 6, asciicircum ] };
- key <AE07> { [ question, 7, ampersand ] };
- key <AE08> { [ period, 8, asterisk, degree ] };
- key <AE09> { [ parenleft, 9, parenleft, guillemotleft ] };
- key <AE10> { [ parenright, 0, parenright, guillemotright ] };
- key <AE11> { [ minus, plus, 0x01002014, underscore ] };
- key <AE12> { [ 0x0100201c, equal, equal ] };
-
- key <AD01> { [ 0x010010e9, noSymbol ] };
- key <AD02> { [ 0x010010de, noSymbol ] };
- key <AD03> { [ 0x010010e3, noSymbol ] };
- key <AD04> { [ 0x010010eb, noSymbol, noSymbol, 0x010000ae ] };
- key <AD05> { [ 0x010010ed, noSymbol, noSymbol, 0x010010d7 ] };
- key <AD06> { [ 0x010010e2, noSymbol, noSymbol, 0x010010f8 ] };
- key <AD07> { [ 0x010010d7, noSymbol ] };
- key <AD08> { [ 0x010010dc, noSymbol, 0x010010fc, I ] };
- key <AD09> { [ 0x010010d5, noSymbol, 0x010010f3 ] };
- key <AD10> { [ 0x010010e8, noSymbol ] };
- key <AD11> { [ 0x010010d9, noSymbol, bracketleft, braceleft ] };
- key <AD12> { [ 0x010010e5, noSymbol, bracketright,braceright ] };
-
- key <AC01> { [ 0x010010ee, noSymbol, 0x010010f4 ] };
- key <AC02> { [ 0x010010d8, noSymbol, 0x010010f2 ] };
- key <AC03> { [ 0x010010d0, noSymbol, 0x010010fa, D ] };
- key <AC04> { [ 0x010010d4, noSymbol, 0x010010f1 ] };
- key <AC05> { [ 0x010010dd, noSymbol ] };
- key <AC06> { [ 0x010010d3, noSymbol ] };
- key <AC07> { [ 0x010010db, noSymbol ] };
- key <AC08> { [ 0x010010e1, noSymbol ] };
- key <AC09> { [ 0x010010e0, noSymbol, L ] };
- key <AC10> { [ 0x010010d1, noSymbol, colon ] };
- key <AC11> { [ 0x010010d2, noSymbol, 0x010010f9, quotedbl ] };
- key <BKSL> { [ slash, section, backslash, bar ] };
-
- key <LSGT> { [ guillemotleft,guillemotright ] };
- key <AB01> { [ 0x010010ef, noSymbol ] };
- key <AB02> { [ 0x010010f0, noSymbol, 0x010010f5, X ] };
- key <AB03> { [ 0x010010e7, noSymbol, 0x010010f8, C ] };
- key <AB04> { [ 0x010010e6, noSymbol, 0x010010f7, V ] };
- key <AB05> { [ 0x010010df, noSymbol ] };
- key <AB06> { [ 0x010010d6, noSymbol ] };
- key <AB07> { [ 0x010010ea, noSymbol, noSymbol, M ] };
- key <AB08> { [ 0x010010da, noSymbol, guillemotleft, less ] };
- key <AB09> { [ 0x010010e4, noSymbol, 0x010010f6, guillemotright ] };
- key <AB10> { [ 0x010010ec, noSymbol, 0x010010fb ] };
-
- include "level3(ralt_switch)"
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "mess" {
- include "ge(basic)"
-
- name[Group1]= "Georgia - MESS";
-
- key <TLDE> { [ 0x010010ed, backslash, quoteleft ] };
- key <AE01> { [ 1, exclam, apostrophe ] };
- key <AE02> { [ 2, at, asciitilde ] };
- key <AE03> { [ 3, 0x01002116, numbersign ] };
- key <AE04> { [ 4, dollar, EuroSign ] };
- key <AE05> { [ 5, percent ] };
- key <AE06> { [ 6, asciicircum ] };
- key <AE07> { [ 7, ampersand, section ] };
- key <AE08> { [ 8, asterisk, degree ] };
- key <AE09> { [ 9, parenleft ] };
- key <AE10> { [ 0, parenright, 0x01002014 ] };
- key <AE11> { [ minus, underscore, 0x01002013 ] };
- key <AE12> { [ 0x010010df, plus, bar ] };
- key <AD01> { [ 0x010010e5, Q ] };
- key <AD02> { [ 0x010010ec, W ] };
- key <AD03> { [ 0x010010d4, E ] };
- key <AD04> { [ 0x010010e0, R ] };
- key <AD05> { [ 0x010010e2, T ] };
- key <AD06> { [ 0x010010e7, Y ] };
- key <AD07> { [ 0x010010e3, U ] };
- key <AD08> { [ 0x010010d8, I, 0x010010f2 ] };
- key <AD09> { [ 0x010010dd, O ] };
- key <AD10> { [ 0x010010de, P ] };
- key <AD11> { [ 0x010010e8, bracketleft, guillemotleft ] };
- key <AD12> { [ 0x010010e6, bracketright, guillemotright ] };
- key <AC01> { [ 0x010010d0, A, 0x010010fa ] };
- key <AC02> { [ 0x010010e1, S ] };
- key <AC03> { [ 0x010010d3, D ] };
- key <AC04> { [ 0x010010e4, F, 0x010010f6 ] };
- key <AC05> { [ 0x010010d2, G, 0x010010f9 ] };
- key <AC06> { [ 0x010010f0, H, 0x010010f1 ] };
- key <AC07> { [ 0x010010ef, J, 0x010010f7 ] };
- key <AC08> { [ 0x010010d9, K ] };
- key <AC09> { [ 0x010010da, L ] };
- key <AC10> { [ 0x010010d7,0x0100201e ] };
- key <AC11> { [ 0x010010e9,0x0100201c ] };
- key <BKSL> { [ equal, slash, bar ] };
-
- key <LSGT> { [ guillemotleft, guillemotright ] };
- key <AB01> { [ 0x010010d6, Z, 0x010010f5 ] };
- key <AB02> { [ 0x010010ee, X, 0x010010f4 ] };
- key <AB03> { [ 0x010010ea, C ] };
- key <AB04> { [ 0x010010d5, V, 0x010010f3 ] };
- key <AB05> { [ 0x010010d1, B ] };
- key <AB06> { [ 0x010010dc, N, 0x010010fc ] };
- key <AB07> { [ 0x010010db, M ] };
- key <AB08> { [ comma, semicolon, less ] };
- key <AB09> { [ period, colon, greater ] };
- key <AB10> { [ 0x010010eb, question, 0x010010fb ] };
-
- include "level3(ralt_switch)"
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "ru" {
-
- name[Group1]= "Georgia - Russian";
-
- key <TLDE> { [ asciicircum, asciitilde ] };
- key <AE01> { [ 1, exclam ] };
- key <AE02> { [ 2, at ] };
- key <AE03> { [ 3, numbersign ] };
- key <AE04> { [ 4, semicolon ] };
- key <AE05> { [ 5, colon ] };
- key <AE06> { [ 6, comma ] };
- key <AE07> { [ 7, period ] };
- key <AE08> { [ 8, asterisk ] };
- key <AE09> { [ 9, parenleft ] };
- key <AE10> { [ 0, parenright ] };
- key <AE11> { [ minus, underscore ] };
- key <AE12> { [ numbersign, bar ] };
-
- key <AD01> { [ 0x010010e6, q ] };
- key <AD02> { [ 0x010010ea, w ] };
- key <AD03> { [ 0x010010e3, e ] };
- key <AD04> { [ 0x010010d9, r ] };
- key <AD05> { [ 0x010010d4, t ] };
- key <AD06> { [ 0x010010dc, y ] };
- key <AD07> { [ 0x010010d2, u ] };
- key <AD08> { [ 0x010010e8, i ] };
- key <AD09> { [ 0x010010ec, o ] };
- key <AD10> { [ 0x010010d6, p ] };
- key <AD11> { [ 0x010010ee, bracketleft ] };
- key <AD12> { [ 0x010010ef, bracketright ] };
-
- key <AC01> { [ 0x010010e4, a ] };
- key <AC02> { [ 0x010010d7, s ] };
- key <AC03> { [ 0x010010d5, d ] };
- key <AC04> { [ 0x010010d0, f ] };
- key <AC05> { [ 0x010010de, g ] };
- key <AC06> { [ 0x010010e0, h ] };
- key <AC07> { [ 0x010010dd, j ] };
- key <AC08> { [ 0x010010da, k ] };
- key <AC09> { [ 0x010010d3, l ] };
- key <AC10> { [ 0x010010df, semicolon ] };
- key <AC11> { [ 0x010010eb, percent ] };
- key <BKSL> { [ backslash, bar ] };
-
- key <LSGT> { [ guillemotleft,guillemotright ] };
- key <AB01> { [ 0x010010ed, z ] };
- key <AB02> { [ 0x010010e9, x ] };
- key <AB03> { [ 0x010010e1, c ] };
- key <AB04> { [ 0x010010db, v ] };
- key <AB05> { [ 0x010010d8, b ] };
- key <AB06> { [ 0x010010e2, n ] };
- key <AB07> { [ 0x010010e5, m ] };
- key <AB08> { [ 0x010010d1, less ] };
- key <AB09> { [ 0x010010e7, greater ] };
- key <AB10> { [ 0x010010f0, question ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "os" {
-
- include "ru(os_legacy)"
-
- name[Group1]= "Georgia - Ossetian";
-
-};
+// Georgian Keyboard Layouts by Aiet Kolkhi <aietkolkhi@gmail.com>
+// Full layout descriptions available at http://www.gakartuleba.org/layouts/
+//
+// This includes the following keyboard layouts: Georgian QWERTY; Georgian Ergonomic;
+// Georgian MESS; Georgian AZERTY Tskapo; Georgian Russian.
+//
+// Layouts include Georgian Mkhedruli alphabeth; most layouts also include some special
+// and ancient characters (like Fi, Yn, Elifi, Turned Gan and Ain). Layouts do not
+// include Georgian Asomtavruli or Georgian Khutsuri alphabeths which are also present
+// in Unicode.
+//
+// Georgian Typewriter no longer supported, as it is no longer used in Georgia.
+//
+// some layouts based on Georgian keyboard map, in the so called "latin" layout.
+// 1999, Pablo Saratxaga <srtxg@chanae.alphanet.ch>
+//
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ name[Group1]= "Georgian";
+
+ key <TLDE> { [ 0x0100201e, 0x0100201c, 0x0100201e, asciitilde ] };
+ key <AE01> { [ 1, exclam, apostrophe ] };
+ key <AE02> { [ 2, at, 0x0100201e ] };
+ key <AE03> { [ 3, numbersign, 0x0100201c ] };
+ key <AE04> { [ 4, dollar, 0x01002116 ] };
+ key <AE05> { [ 5, percent, EuroSign ] };
+ key <AE06> { [ 6, asciicircum ] };
+ key <AE07> { [ 7, ampersand, section ] };
+ key <AE08> { [ 8, asterisk, degree ] };
+ key <AE09> { [ 9, parenleft ] };
+ key <AE10> { [ 0, parenright ] };
+ key <AE11> { [ minus, underscore, 0x01002014 ] };
+ key <AE12> { [ equal, plus, 0x01002013 ] };
+
+ key <AD01> { [ 0x010010e5, Q ] };
+ key <AD02> { [ 0x010010ec, 0x010010ed ] };
+ key <AD03> { [ 0x010010d4, E, 0x010010f1 ] };
+ key <AD04> { [ 0x010010e0, 0x010010e6, 0x010000ae ] };
+ key <AD05> { [ 0x010010e2, 0x010010d7 ] };
+ key <AD06> { [ 0x010010e7, Y, 0x010010f8 ] };
+ key <AD07> { [ 0x010010e3, U ] };
+ key <AD08> { [ 0x010010d8, I, 0x010010f2 ] };
+ key <AD09> { [ 0x010010dd, O ] };
+ key <AD10> { [ 0x010010de, P ] };
+ key <AD11> { [ bracketleft, braceleft ] };
+ key <AD12> { [ bracketright,braceright ] };
+
+ key <AC01> { [ 0x010010d0, A, 0x010010fa ] };
+ key <AC02> { [ 0x010010e1, 0x010010e8 ] };
+ key <AC03> { [ 0x010010d3, D ] };
+ key <AC04> { [ 0x010010e4, F, 0x010010f6 ] };
+ key <AC05> { [ 0x010010d2, G, 0x010010f9 ] };
+ key <AC06> { [ 0x010010f0, H, 0x010010f5 ] };
+ key <AC07> { [ 0x010010ef, 0x010010df, 0x010010f7 ] };
+ key <AC08> { [ 0x010010d9, K ] };
+ key <AC09> { [ 0x010010da, L ] };
+ key <AC10> { [ semicolon, colon ] };
+ key <AC11> { [ apostrophe, quotedbl ] };
+ key <BKSL> { [ backslash, bar, asciitilde, asciitilde ] };
+
+ key <LSGT> { [ guillemotleft,guillemotright ] };
+ key <AB01> { [ 0x010010d6, 0x010010eb ] };
+ key <AB02> { [ 0x010010ee, X, 0x010010f4 ] };
+ key <AB03> { [ 0x010010ea, 0x010010e9, 0x010000a9 ] };
+ key <AB04> { [ 0x010010d5, V, 0x010010f3 ] };
+ key <AB05> { [ 0x010010d1, B ] };
+ key <AB06> { [ 0x010010dc, N, 0x010010fc ] };
+ key <AB07> { [ 0x010010db, M ] };
+ key <AB08> { [ comma, less, guillemotleft ] };
+ key <AB09> { [ period, greater, guillemotright ] };
+ key <AB10> { [ slash, question, 0x010010fb ] };
+
+ include "level3(ralt_switch)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "qwerty" {
+ include "ge(basic)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "ergonomic" {
+ include "ge(basic)"
+
+ name[Group1]= "Georgian (ergonomic)";
+
+ key <TLDE> { [ 0x0100201e, apostrophe, 0x0100201e, asciitilde ] };
+ key <AE01> { [ exclam, 1, exclam ] };
+ key <AE02> { [ 0x01002116, 2, at ] };
+ key <AE03> { [ comma, 3, numbersign, section ] };
+ key <AE04> { [ semicolon, 4, dollar ] };
+ key <AE05> { [ percent, 5, EuroSign ] };
+ key <AE06> { [ colon, 6, asciicircum ] };
+ key <AE07> { [ question, 7, ampersand ] };
+ key <AE08> { [ period, 8, asterisk, degree ] };
+ key <AE09> { [ parenleft, 9, parenleft, guillemotleft ] };
+ key <AE10> { [ parenright, 0, parenright, guillemotright ] };
+ key <AE11> { [ minus, plus, 0x01002014, underscore ] };
+ key <AE12> { [ 0x0100201c, equal, equal ] };
+
+ key <AD01> { [ 0x010010e9, noSymbol ] };
+ key <AD02> { [ 0x010010de, noSymbol ] };
+ key <AD03> { [ 0x010010e3, noSymbol ] };
+ key <AD04> { [ 0x010010eb, noSymbol, noSymbol, 0x010000ae ] };
+ key <AD05> { [ 0x010010ed, noSymbol, noSymbol, 0x010010d7 ] };
+ key <AD06> { [ 0x010010e2, noSymbol, noSymbol, 0x010010f8 ] };
+ key <AD07> { [ 0x010010d7, noSymbol ] };
+ key <AD08> { [ 0x010010dc, noSymbol, 0x010010fc, I ] };
+ key <AD09> { [ 0x010010d5, noSymbol, 0x010010f3 ] };
+ key <AD10> { [ 0x010010e8, noSymbol ] };
+ key <AD11> { [ 0x010010d9, noSymbol, bracketleft, braceleft ] };
+ key <AD12> { [ 0x010010e5, noSymbol, bracketright,braceright ] };
+
+ key <AC01> { [ 0x010010ee, noSymbol, 0x010010f4 ] };
+ key <AC02> { [ 0x010010d8, noSymbol, 0x010010f2 ] };
+ key <AC03> { [ 0x010010d0, noSymbol, 0x010010fa, D ] };
+ key <AC04> { [ 0x010010d4, noSymbol, 0x010010f1 ] };
+ key <AC05> { [ 0x010010dd, noSymbol ] };
+ key <AC06> { [ 0x010010d3, noSymbol ] };
+ key <AC07> { [ 0x010010db, noSymbol ] };
+ key <AC08> { [ 0x010010e1, noSymbol ] };
+ key <AC09> { [ 0x010010e0, noSymbol, L ] };
+ key <AC10> { [ 0x010010d1, noSymbol, colon ] };
+ key <AC11> { [ 0x010010d2, noSymbol, 0x010010f9, quotedbl ] };
+ key <BKSL> { [ slash, section, backslash, bar ] };
+
+ key <LSGT> { [ guillemotleft,guillemotright ] };
+ key <AB01> { [ 0x010010ef, noSymbol ] };
+ key <AB02> { [ 0x010010f0, noSymbol, 0x010010f5, X ] };
+ key <AB03> { [ 0x010010e7, noSymbol, 0x010010f8, C ] };
+ key <AB04> { [ 0x010010e6, noSymbol, 0x010010f7, V ] };
+ key <AB05> { [ 0x010010df, noSymbol ] };
+ key <AB06> { [ 0x010010d6, noSymbol ] };
+ key <AB07> { [ 0x010010ea, noSymbol, noSymbol, M ] };
+ key <AB08> { [ 0x010010da, noSymbol, guillemotleft, less ] };
+ key <AB09> { [ 0x010010e4, noSymbol, 0x010010f6, guillemotright ] };
+ key <AB10> { [ 0x010010ec, noSymbol, 0x010010fb ] };
+
+ include "level3(ralt_switch)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "mess" {
+ include "ge(basic)"
+
+ name[Group1]= "Georgian (MESS)";
+
+ key <TLDE> { [ 0x010010ed, backslash, quoteleft ] };
+ key <AE01> { [ 1, exclam, apostrophe ] };
+ key <AE02> { [ 2, at, asciitilde ] };
+ key <AE03> { [ 3, 0x01002116, numbersign ] };
+ key <AE04> { [ 4, dollar, EuroSign ] };
+ key <AE05> { [ 5, percent ] };
+ key <AE06> { [ 6, asciicircum ] };
+ key <AE07> { [ 7, ampersand, section ] };
+ key <AE08> { [ 8, asterisk, degree ] };
+ key <AE09> { [ 9, parenleft ] };
+ key <AE10> { [ 0, parenright, 0x01002014 ] };
+ key <AE11> { [ minus, underscore, 0x01002013 ] };
+ key <AE12> { [ 0x010010df, plus, bar ] };
+ key <AD01> { [ 0x010010e5, Q ] };
+ key <AD02> { [ 0x010010ec, W ] };
+ key <AD03> { [ 0x010010d4, E ] };
+ key <AD04> { [ 0x010010e0, R ] };
+ key <AD05> { [ 0x010010e2, T ] };
+ key <AD06> { [ 0x010010e7, Y ] };
+ key <AD07> { [ 0x010010e3, U ] };
+ key <AD08> { [ 0x010010d8, I, 0x010010f2 ] };
+ key <AD09> { [ 0x010010dd, O ] };
+ key <AD10> { [ 0x010010de, P ] };
+ key <AD11> { [ 0x010010e8, bracketleft, guillemotleft ] };
+ key <AD12> { [ 0x010010e6, bracketright, guillemotright ] };
+ key <AC01> { [ 0x010010d0, A, 0x010010fa ] };
+ key <AC02> { [ 0x010010e1, S ] };
+ key <AC03> { [ 0x010010d3, D ] };
+ key <AC04> { [ 0x010010e4, F, 0x010010f6 ] };
+ key <AC05> { [ 0x010010d2, G, 0x010010f9 ] };
+ key <AC06> { [ 0x010010f0, H, 0x010010f1 ] };
+ key <AC07> { [ 0x010010ef, J, 0x010010f7 ] };
+ key <AC08> { [ 0x010010d9, K ] };
+ key <AC09> { [ 0x010010da, L ] };
+ key <AC10> { [ 0x010010d7,0x0100201e ] };
+ key <AC11> { [ 0x010010e9,0x0100201c ] };
+ key <BKSL> { [ equal, slash, bar ] };
+
+ key <LSGT> { [ guillemotleft, guillemotright ] };
+ key <AB01> { [ 0x010010d6, Z, 0x010010f5 ] };
+ key <AB02> { [ 0x010010ee, X, 0x010010f4 ] };
+ key <AB03> { [ 0x010010ea, C ] };
+ key <AB04> { [ 0x010010d5, V, 0x010010f3 ] };
+ key <AB05> { [ 0x010010d1, B ] };
+ key <AB06> { [ 0x010010dc, N, 0x010010fc ] };
+ key <AB07> { [ 0x010010db, M ] };
+ key <AB08> { [ comma, semicolon, less ] };
+ key <AB09> { [ period, colon, greater ] };
+ key <AB10> { [ 0x010010eb, question, 0x010010fb ] };
+
+ include "level3(ralt_switch)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "ru" {
+
+ name[Group1]= "Russian (Georgia)";
+
+ key <TLDE> { [ asciicircum, asciitilde ] };
+ key <AE01> { [ 1, exclam ] };
+ key <AE02> { [ 2, at ] };
+ key <AE03> { [ 3, numbersign ] };
+ key <AE04> { [ 4, semicolon ] };
+ key <AE05> { [ 5, colon ] };
+ key <AE06> { [ 6, comma ] };
+ key <AE07> { [ 7, period ] };
+ key <AE08> { [ 8, asterisk ] };
+ key <AE09> { [ 9, parenleft ] };
+ key <AE10> { [ 0, parenright ] };
+ key <AE11> { [ minus, underscore ] };
+ key <AE12> { [ numbersign, bar ] };
+
+ key <AD01> { [ 0x010010e6, q ] };
+ key <AD02> { [ 0x010010ea, w ] };
+ key <AD03> { [ 0x010010e3, e ] };
+ key <AD04> { [ 0x010010d9, r ] };
+ key <AD05> { [ 0x010010d4, t ] };
+ key <AD06> { [ 0x010010dc, y ] };
+ key <AD07> { [ 0x010010d2, u ] };
+ key <AD08> { [ 0x010010e8, i ] };
+ key <AD09> { [ 0x010010ec, o ] };
+ key <AD10> { [ 0x010010d6, p ] };
+ key <AD11> { [ 0x010010ee, bracketleft ] };
+ key <AD12> { [ 0x010010ef, bracketright ] };
+
+ key <AC01> { [ 0x010010e4, a ] };
+ key <AC02> { [ 0x010010d7, s ] };
+ key <AC03> { [ 0x010010d5, d ] };
+ key <AC04> { [ 0x010010d0, f ] };
+ key <AC05> { [ 0x010010de, g ] };
+ key <AC06> { [ 0x010010e0, h ] };
+ key <AC07> { [ 0x010010dd, j ] };
+ key <AC08> { [ 0x010010da, k ] };
+ key <AC09> { [ 0x010010d3, l ] };
+ key <AC10> { [ 0x010010df, semicolon ] };
+ key <AC11> { [ 0x010010eb, percent ] };
+ key <BKSL> { [ backslash, bar ] };
+
+ key <LSGT> { [ guillemotleft,guillemotright ] };
+ key <AB01> { [ 0x010010ed, z ] };
+ key <AB02> { [ 0x010010e9, x ] };
+ key <AB03> { [ 0x010010e1, c ] };
+ key <AB04> { [ 0x010010db, v ] };
+ key <AB05> { [ 0x010010d8, b ] };
+ key <AB06> { [ 0x010010e2, n ] };
+ key <AB07> { [ 0x010010e5, m ] };
+ key <AB08> { [ 0x010010d1, less ] };
+ key <AB09> { [ 0x010010e7, greater ] };
+ key <AB10> { [ 0x010010f0, question ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "os" {
+
+ include "ru(os_legacy)"
+
+ name[Group1]= "Ossetian (Georgia)";
+
+};
diff --git a/xorg-server/xkeyboard-config/symbols/gh b/xorg-server/xkeyboard-config/symbols/gh
index 04c7a8ed4..93015a7ff 100644
--- a/xorg-server/xkeyboard-config/symbols/gh
+++ b/xorg-server/xkeyboard-config/symbols/gh
@@ -1,151 +1,151 @@
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- include "us"
-
- name[Group1]= "Ghana";
-
- key <AE04> { [ 4, 0x010020B5, dollar, cent ] };
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "akan" {
- include "gh(basic)"
-
- name[Group1]= "Ghana - Akan";
-
- key <AD01> { [ 0x0100025B, 0x01000190, q, Q ] };
- key <AB02> { [ 0x01000254, 0x01000186, x, X ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "ga" {
- include "gh(basic)"
-
- name[Group1]= "Ghana - Ga";
-
- key <AD01> { [ 0x0100025B, 0x01000190, q, Q ] };
- key <AB02> { [ 0x01000254, 0x01000186, x, X ] };
- key <AB03> { [ 0x0100014B, 0x0100014A, c, C ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "ewe" {
- include "gh(basic)"
-
- name[Group1]= "Ghana - Ewe";
-
- key <AD01> { [ 0x0100025B, 0x01000190, q, Q ] };
- key <AB03> { [ 0x0100014B, 0x0100014A, c, C ] };
- key <AD11> { [ 0x01000254, 0x01000186, braceleft, braceleft ] };
- key <AD12> { [ 0x0100028B, 0x010001B2, braceright, braceright ] };
- key <BKSL> { [ 0x01000256, 0x01000189, backslash, backslash ] };
- key <AC07> { [ 0x01000192, 0x01000191, j, J ] };
- key <AC05> { [ g, G, 0x01000263, 0x01000194 ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "fula" {
- include "gh(basic)"
-
- name[Group1]= "Ghana - Fula";
-
- key <AD01> { [ 0x01000071, 0x01000051, q, Q ] };
- key <AD02> { [ udiaeresis, Udiaeresis, w, W ] };
- key <AD03> { [ e, E, EuroSign, cent ] };
- key <AD11> { [ 0x010001B4, 0x010001B3,bracketleft, braceleft ] };
- key <AD12> { [ gcaron, Gcaron,bracketright, braceright] };
- key <AC03> { [ 0x01000257, 0x0100018A, d, D ] };
- key <AC10> { [ 0x01000131, 0x01000130, semicolon, colon ] };
- key <AC11> { [ 0x010001DD, 0x0100018E,apostrophe, quotedbl ] };
- key <AB01> { [ 0x01000272, 0x0100019D, z, Z ] };
- key <AB07> { [ ntilde, Ntilde, m, M ] };
- key <AB09> { [ ccedilla, Ccedilla, period, greater ] };
- key <AB10> { [ scedilla, Scedilla, slash, question ] };
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "hausa" {
- include "gh(fula)"
-
- name[Group1]= "Ghana - Hausa";
-};
-
-partial alphanumeric_keys
-xkb_symbols "generic" {
- include "gh(basic)"
-
- name[Group1]= "Ghana - Multilingual";
-
- key <AD03> { [ e, E, 0x0100025b, 0x01000190 ] };
- key <AB03> { [ c, C, 0x01000254, 0x01000186 ] };
- key <AC03> { [ d, D, 0x01000256, 0x01000189 ] };
- key <AC04> { [ f, F, 0x01000192, 0x01000191 ] };
- key <AC05> { [ g, G, 0x01000263, 0x01000194 ] };
- key <AB06> { [ n, N, 0x0100014b, 0x0100014a ] };
- key <AB01> { [ z, Z, 0x010001B6, 0x010001B5 ] };
- key <AB04> { [ v, V, 0x0100028B, 0x010001B2 ] };
- key <AE04> { [ 4, dollar, 0x010020B5, cent ] };
- include "level3(ralt_switch)"
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "avn" {
- include "gh(basic)"
-
- name[Group1]= "Ghana - Avatime";
-
- key <TLDE> { [ grave, asciitilde, 0x01000300, 0x01000303 ] }; // combining grave; combining tilde
- key <AE04> { [ 4, dollar, cent, 0x010020B5 ] }; // ¢, ₵
- key <AE11> { [ minus, underscore, 0x01000304, 0x01000304 ] }; // combining macron
- key <AD01> { [ 0x0100028B, 0x010001B2 ] }; // ʋ, Ʋ
- key <AD07> { [ u, U, 0x0100028A, 0x010001B1 ] }; // ʊ, Ʊ
- key <AD08> { [ i, I, 0x01000269, 0x01000196 ] }; // ɩ, Ɩ
- key <AD11> { [ 0x0100025B, 0x01000190, bracketleft, braceleft ] }; // ɛ, Ɛ
- key <AC03> { [ d, D, 0x01000256, 0x01000189 ] }; // ɖ, Ɖ
- key <AC04> { [ f, F, 0x01000192, 0x01000191 ] }; // ƒ, Ƒ
- key <AC07> { [ 0x0100014B, 0x0100014A ] }; // ŋ, Ŋ
- key <AC11> { [ apostrophe, quotedbl, 0x01000301, 0x01000301 ] }; // combining acute
- key <AB03> { [ 0x01000254, 0x01000186 ] }; // ɔ, Ɔ
-
- include "level3(ralt_switch)"
-
-};
-
-// This keyboard layout fully imitates the 'Ghana Unicode' layout which is used in GILLBT on Windows with Keyman.
-// However, in this layout a 3rd level key (R ALT) is used rather than dead keys.
-// Also it has three additional features:
-// 1) combining macron above: <R ALT> + <SHIFT> + <->
-// 2) cent: <R ALT> + <4> or <R ALT> + <SHIFT> + <4>
-// 3) ʊ/Ʊ: <R ALT> + <u>/<U>
-
-partial alphanumeric_keys
-xkb_symbols "gillbt" {
- include "gh(basic)"
-
- name[Group1]= "Ghana - GILLBT";
-
- key <TLDE> { [ grave, asciitilde, 0x01000300, 0x01000303 ] }; // combining grave; combining tilde
- key <AE04> { [ 4, dollar, cent, 0x010020B5 ] }; // ¢, ₵
- key <AE06> { [ 6, asciicircum, 0x01000302, 0x01000302 ] }; // combining circumflex accent
- key <AE11> { [ minus, underscore, 0x01000331, 0x01000304 ] }; // combining macron below; combining macron above
- key <AE12> { [ 0x0100014B, 0x0100014A, equal, plus ] }; // ŋ, Ŋ
- key <AD01> { [ 0x0100028B, 0x010001B2, q, Q ] }; // ʋ, Ʋ
- key <AD03> { [ e, E, 0x010001DD, 0x0100018E ] }; // ǝ, Ǝ
- key <AD07> { [ u, U, 0x0100028A, 0x010001B1 ] }; // ʊ, Ʊ
- key <AD11> { [ 0x0100025B, 0x01000190, bracketleft, braceleft ] }; // ɛ, Ɛ
- key <AD12> { [ 0x01000254, 0x01000186, bracketright, braceright ] }; // ɔ, Ɔ
- key <AC03> { [ d, D, 0x01000256, 0x01000189 ] }; // ɖ, Ɖ
- key <AC04> { [ f, F, 0x01000192, 0x01000191 ] }; // ƒ, Ƒ
- key <AC05> { [ g, G, 0x01000263, 0x01000194 ] }; // ɣ, Ɣ
- key <AC11> { [ apostrophe, quotedbl, 0x01000301, 0x01000301 ] }; // combining acute
- key <AB01> { [ z, Z, 0x01000292, 0x010001B7 ] }; // ʒ, Ʒ
- key <AB02> { [ 0x01000269, 0x01000196, x, X ] }; // ɩ, Ɩ
- key <AB03> { [ c, C, 0x010000E7, 0x010000C7 ] }; // ç, Ç
-
- include "level3(ralt_switch)"
-};
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "us"
+
+ name[Group1]= "English (Ghana)";
+
+ key <AE04> { [ 4, 0x010020B5, dollar, cent ] };
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "akan" {
+ include "gh(basic)"
+
+ name[Group1]= "Akan";
+
+ key <AD01> { [ 0x0100025B, 0x01000190, q, Q ] };
+ key <AB02> { [ 0x01000254, 0x01000186, x, X ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "ga" {
+ include "gh(basic)"
+
+ name[Group1]= "Ga";
+
+ key <AD01> { [ 0x0100025B, 0x01000190, q, Q ] };
+ key <AB02> { [ 0x01000254, 0x01000186, x, X ] };
+ key <AB03> { [ 0x0100014B, 0x0100014A, c, C ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "ewe" {
+ include "gh(basic)"
+
+ name[Group1]= "Ewe";
+
+ key <AD01> { [ 0x0100025B, 0x01000190, q, Q ] };
+ key <AB03> { [ 0x0100014B, 0x0100014A, c, C ] };
+ key <AD11> { [ 0x01000254, 0x01000186, braceleft, braceleft ] };
+ key <AD12> { [ 0x0100028B, 0x010001B2, braceright, braceright ] };
+ key <BKSL> { [ 0x01000256, 0x01000189, backslash, backslash ] };
+ key <AC07> { [ 0x01000192, 0x01000191, j, J ] };
+ key <AC05> { [ g, G, 0x01000263, 0x01000194 ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "fula" {
+ include "gh(basic)"
+
+ name[Group1]= "Fula";
+
+ key <AD01> { [ 0x01000071, 0x01000051, q, Q ] };
+ key <AD02> { [ udiaeresis, Udiaeresis, w, W ] };
+ key <AD03> { [ e, E, EuroSign, cent ] };
+ key <AD11> { [ 0x010001B4, 0x010001B3,bracketleft, braceleft ] };
+ key <AD12> { [ gcaron, Gcaron,bracketright, braceright] };
+ key <AC03> { [ 0x01000257, 0x0100018A, d, D ] };
+ key <AC10> { [ 0x01000131, 0x01000130, semicolon, colon ] };
+ key <AC11> { [ 0x010001DD, 0x0100018E,apostrophe, quotedbl ] };
+ key <AB01> { [ 0x01000272, 0x0100019D, z, Z ] };
+ key <AB07> { [ ntilde, Ntilde, m, M ] };
+ key <AB09> { [ ccedilla, Ccedilla, period, greater ] };
+ key <AB10> { [ scedilla, Scedilla, slash, question ] };
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "hausa" {
+ include "gh(fula)"
+
+ name[Group1]= "Hausa";
+};
+
+partial alphanumeric_keys
+xkb_symbols "generic" {
+ include "gh(basic)"
+
+ name[Group1]= "English (Ghana, multilingual)";
+
+ key <AD03> { [ e, E, 0x0100025b, 0x01000190 ] };
+ key <AB03> { [ c, C, 0x01000254, 0x01000186 ] };
+ key <AC03> { [ d, D, 0x01000256, 0x01000189 ] };
+ key <AC04> { [ f, F, 0x01000192, 0x01000191 ] };
+ key <AC05> { [ g, G, 0x01000263, 0x01000194 ] };
+ key <AB06> { [ n, N, 0x0100014b, 0x0100014a ] };
+ key <AB01> { [ z, Z, 0x010001B6, 0x010001B5 ] };
+ key <AB04> { [ v, V, 0x0100028B, 0x010001B2 ] };
+ key <AE04> { [ 4, dollar, 0x010020B5, cent ] };
+ include "level3(ralt_switch)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "avn" {
+ include "gh(basic)"
+
+ name[Group1]= "Avatime";
+
+ key <TLDE> { [ grave, asciitilde, 0x01000300, 0x01000303 ] }; // combining grave; combining tilde
+ key <AE04> { [ 4, dollar, cent, 0x010020B5 ] }; // ¢, ₵
+ key <AE11> { [ minus, underscore, 0x01000304, 0x01000304 ] }; // combining macron
+ key <AD01> { [ 0x0100028B, 0x010001B2 ] }; // ʋ, Ʋ
+ key <AD07> { [ u, U, 0x0100028A, 0x010001B1 ] }; // ʊ, Ʊ
+ key <AD08> { [ i, I, 0x01000269, 0x01000196 ] }; // ɩ, Ɩ
+ key <AD11> { [ 0x0100025B, 0x01000190, bracketleft, braceleft ] }; // ɛ, Ɛ
+ key <AC03> { [ d, D, 0x01000256, 0x01000189 ] }; // ɖ, Ɖ
+ key <AC04> { [ f, F, 0x01000192, 0x01000191 ] }; // ƒ, Ƒ
+ key <AC07> { [ 0x0100014B, 0x0100014A ] }; // ŋ, Ŋ
+ key <AC11> { [ apostrophe, quotedbl, 0x01000301, 0x01000301 ] }; // combining acute
+ key <AB03> { [ 0x01000254, 0x01000186 ] }; // ɔ, Ɔ
+
+ include "level3(ralt_switch)"
+
+};
+
+// This keyboard layout fully imitates the 'Ghana Unicode' layout which is used in GILLBT on Windows with Keyman.
+// However, in this layout a 3rd level key (R ALT) is used rather than dead keys.
+// Also it has three additional features:
+// 1) combining macron above: <R ALT> + <SHIFT> + <->
+// 2) cent: <R ALT> + <4> or <R ALT> + <SHIFT> + <4>
+// 3) ʊ/Ʊ: <R ALT> + <u>/<U>
+
+partial alphanumeric_keys
+xkb_symbols "gillbt" {
+ include "gh(basic)"
+
+ name[Group1]= "English (Ghana, GILLBT)";
+
+ key <TLDE> { [ grave, asciitilde, 0x01000300, 0x01000303 ] }; // combining grave; combining tilde
+ key <AE04> { [ 4, dollar, cent, 0x010020B5 ] }; // ¢, ₵
+ key <AE06> { [ 6, asciicircum, 0x01000302, 0x01000302 ] }; // combining circumflex accent
+ key <AE11> { [ minus, underscore, 0x01000331, 0x01000304 ] }; // combining macron below; combining macron above
+ key <AE12> { [ 0x0100014B, 0x0100014A, equal, plus ] }; // ŋ, Ŋ
+ key <AD01> { [ 0x0100028B, 0x010001B2, q, Q ] }; // ʋ, Ʋ
+ key <AD03> { [ e, E, 0x010001DD, 0x0100018E ] }; // ǝ, Ǝ
+ key <AD07> { [ u, U, 0x0100028A, 0x010001B1 ] }; // ʊ, Ʊ
+ key <AD11> { [ 0x0100025B, 0x01000190, bracketleft, braceleft ] }; // ɛ, Ɛ
+ key <AD12> { [ 0x01000254, 0x01000186, bracketright, braceright ] }; // ɔ, Ɔ
+ key <AC03> { [ d, D, 0x01000256, 0x01000189 ] }; // ɖ, Ɖ
+ key <AC04> { [ f, F, 0x01000192, 0x01000191 ] }; // ƒ, Ƒ
+ key <AC05> { [ g, G, 0x01000263, 0x01000194 ] }; // ɣ, Ɣ
+ key <AC11> { [ apostrophe, quotedbl, 0x01000301, 0x01000301 ] }; // combining acute
+ key <AB01> { [ z, Z, 0x01000292, 0x010001B7 ] }; // ʒ, Ʒ
+ key <AB02> { [ 0x01000269, 0x01000196, x, X ] }; // ɩ, Ɩ
+ key <AB03> { [ c, C, 0x010000E7, 0x010000C7 ] }; // ç, Ç
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/gn b/xorg-server/xkeyboard-config/symbols/gn
index 3a693afd6..f85e98ec3 100644
--- a/xorg-server/xkeyboard-config/symbols/gn
+++ b/xorg-server/xkeyboard-config/symbols/gn
@@ -1,61 +1,61 @@
-// based on us_intl keyboard map file and a Sinhala keyboard map
-// version 0.3
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- name[Group1]="Guinea";
-
- key <AE01> { [0x010007F1, 0x010007C1 ] };
- key <AE02> { [0x010007EB, 0x010007C2 ] };
- key <AE03> { [0x010007F5, 0x010007C3, numbersign, sterling ] };
- key <AE04> { [0x010007F4, 0x010007C4, 0x01002E1C, dollar ] };
- key <AE05> { [ parenleft, 0x010007C5, 0x01002E1D ] };
- key <AE06> { [ minus, 0x010007C6, bar ] };
- key <AE07> { [0x010007EC, 0x010007C7, grave ] };
- key <AE08> { [0x010007FA, 0x010007C8, backslash ] };
- key <AE09> { [0x010007ED, 0x010007C9, asciicircum, plusminus ] };
- key <AE10> { [0x010007EE, 0x010007C0, at, degree ] };
- key <AE11> { [parenright ] };
- key <AE12> { [ equal, plus, braceright ] };
-
- key <AD01> { [0x010007CA ] };
- key <AD02> { [0x010007E0, less ] };
- key <AD03> { [0x010007CD,0x010007CB ] };
- key <AD04> { [0x010007D9,0x010007DA ] };
- key <AD05> { [0x010007D5 ] };
- key <AD06> { [0x010007E6,0x010007E7 ] };
- key <AD07> { [0x010007CE,0x010007F6 ] };
- key <AD08> { [0x010007CC ] };
- key <AD09> { [0x010007D0,0x010007CF ] };
- key <AD10> { [0x010007D4 ] };
- key <AD11> { [0x010007F3 ] };
- key <AD12> { [ dollar, sterling, currency ] };
-
- key <AC01> { [0x010007EB ] };
- key <AC02> { [0x010007DB ] };
- key <AC03> { [0x010007D8 ] };
- key <AC04> { [0x010007DD ] };
- key <AC05> { [0x010007DC,0x010007F7 ] };
- key <AC06> { [0x010007E4 ] };
- key <AC07> { [0x010007D6,0x010007E8 ] };
- key <AC08> { [0x010007DE ] };
- key <AC09> { [0x010007DF,0x010007EA ] };
- key <AC10> { [0x010007E1 ] };
- key <AC11> { [0x010007EF, 0x010007F8, percent ] };
- key <TLDE> { [0x010007EC, asciitilde, notsign ] };
-
- key <BKSL> { [0x010007D1, asterisk ] };
- key <AB01> { [0x010007E5 ] };
- key <AB02> { [0x0100060C ] };
- key <AB03> { [0x010007D7,0x010007E9 ] };
- key <AB04> { [0x010007E2 ] };
- key <AB05> { [0x010007D3 ] };
- key <AB06> { [0x010007E3,0x010007D2 ] };
- key <AB07> { [0x010007F8,0x0100061F ] };
- key <AB08> { [0x0100061B ] };
- key <AB09> { [0x0100060C, slash ] };
- key <AB10> { [0x010007F9] };
-
- include "level3(ralt_switch)"
-};
+// based on us_intl keyboard map file and a Sinhala keyboard map
+// version 0.3
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ name[Group1]="French (Guinea)";
+
+ key <AE01> { [0x010007F1, 0x010007C1 ] };
+ key <AE02> { [0x010007EB, 0x010007C2 ] };
+ key <AE03> { [0x010007F5, 0x010007C3, numbersign, sterling ] };
+ key <AE04> { [0x010007F4, 0x010007C4, 0x01002E1C, dollar ] };
+ key <AE05> { [ parenleft, 0x010007C5, 0x01002E1D ] };
+ key <AE06> { [ minus, 0x010007C6, bar ] };
+ key <AE07> { [0x010007EC, 0x010007C7, grave ] };
+ key <AE08> { [0x010007FA, 0x010007C8, backslash ] };
+ key <AE09> { [0x010007ED, 0x010007C9, asciicircum, plusminus ] };
+ key <AE10> { [0x010007EE, 0x010007C0, at, degree ] };
+ key <AE11> { [parenright ] };
+ key <AE12> { [ equal, plus, braceright ] };
+
+ key <AD01> { [0x010007CA ] };
+ key <AD02> { [0x010007E0, less ] };
+ key <AD03> { [0x010007CD,0x010007CB ] };
+ key <AD04> { [0x010007D9,0x010007DA ] };
+ key <AD05> { [0x010007D5 ] };
+ key <AD06> { [0x010007E6,0x010007E7 ] };
+ key <AD07> { [0x010007CE,0x010007F6 ] };
+ key <AD08> { [0x010007CC ] };
+ key <AD09> { [0x010007D0,0x010007CF ] };
+ key <AD10> { [0x010007D4 ] };
+ key <AD11> { [0x010007F3 ] };
+ key <AD12> { [ dollar, sterling, currency ] };
+
+ key <AC01> { [0x010007EB ] };
+ key <AC02> { [0x010007DB ] };
+ key <AC03> { [0x010007D8 ] };
+ key <AC04> { [0x010007DD ] };
+ key <AC05> { [0x010007DC,0x010007F7 ] };
+ key <AC06> { [0x010007E4 ] };
+ key <AC07> { [0x010007D6,0x010007E8 ] };
+ key <AC08> { [0x010007DE ] };
+ key <AC09> { [0x010007DF,0x010007EA ] };
+ key <AC10> { [0x010007E1 ] };
+ key <AC11> { [0x010007EF, 0x010007F8, percent ] };
+ key <TLDE> { [0x010007EC, asciitilde, notsign ] };
+
+ key <BKSL> { [0x010007D1, asterisk ] };
+ key <AB01> { [0x010007E5 ] };
+ key <AB02> { [0x0100060C ] };
+ key <AB03> { [0x010007D7,0x010007E9 ] };
+ key <AB04> { [0x010007E2 ] };
+ key <AB05> { [0x010007D3 ] };
+ key <AB06> { [0x010007E3,0x010007D2 ] };
+ key <AB07> { [0x010007F8,0x0100061F ] };
+ key <AB08> { [0x0100061B ] };
+ key <AB09> { [0x0100060C, slash ] };
+ key <AB10> { [0x010007F9] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/gr b/xorg-server/xkeyboard-config/symbols/gr
index 5fe302200..f4364cf89 100644
--- a/xorg-server/xkeyboard-config/symbols/gr
+++ b/xorg-server/xkeyboard-config/symbols/gr
@@ -1,194 +1,194 @@
-// Hellenic keyboard map for X.org
-//
-// Original version:
-// Kostas Gewrgiou <gewrgiou@imbc.gr>
-// Heavily modified and maintained by:
-// Vasilis Vasaitis <vvas@hal.csd.auth.gr>
-// Originally converted to single group form by:
-// Ivan Pascal <pascal@info.tsu.ru>
-
-default partial alphanumeric_keys alternate_group
-xkb_symbols "basic" {
- include "gr(simple)"
-
- name[Group1] = "Greece";
-
- include "eurosign(e)"
- include "eurosign(5)"
- include "kpdl(comma)"
- include "level3(ralt_switch)"
-
- key <AB01> { [ NoSymbol, NoSymbol, U037D, U03FF ] };
- key <AB02> { [ NoSymbol, NoSymbol, rightarrow, leftarrow ] };
- key <AB03> { [ NoSymbol, NoSymbol, copyright ] };
- key <AB04> { [ NoSymbol, NoSymbol, U03D6 ] };
- key <AB05> { [ NoSymbol, NoSymbol, U03D0 ] };
- key <AB06> { [ NoSymbol, NoSymbol, U0374, U0375 ] };
- key <AB07> { [ NoSymbol, NoSymbol, U03FB, U03FA ] };
- key <AB08> { [ NoSymbol, NoSymbol, guillemotleft ] };
- key <AB09> { [ NoSymbol, NoSymbol, guillemotright, periodcentered ] };
- key <AC03> { [ NoSymbol, NoSymbol, downarrow, uparrow ] };
- key <AC04> { [ NoSymbol, NoSymbol, U03D5 ] };
- key <AC05> { [ NoSymbol, NoSymbol, U03DD, U03DC ] };
- key <AC07> { [ NoSymbol, NoSymbol, U037C, U03FE ] };
- key <AC08> { [ NoSymbol, NoSymbol, U03DF, U03DE ] };
- key <AC09> { [ NoSymbol, NoSymbol, U03F2, U03F9 ] };
- key <AC10> { [ NoSymbol, NoSymbol, dead_acute, dead_psili ] };
- key <AC11> { [ NoSymbol, NoSymbol, dead_grave, dead_dasia ] };
- key <AD01> { [ NoSymbol, NoSymbol, periodcentered ] };
- key <AD02> { [ NoSymbol, NoSymbol, U03DB, U03DA ] };
- key <AD04> { [ NoSymbol, NoSymbol, registered, U03F1 ] };
- key <AD07> { [ NoSymbol, NoSymbol, U03D1, U03F4 ] };
- key <AD08> { [ NoSymbol, NoSymbol, U037B, U03FD ] };
- key <AD10> { [ NoSymbol, NoSymbol, U03E1, U03E0 ] };
- key <AD11> { [ NoSymbol, NoSymbol, dead_tilde, dead_macron ] };
- key <AD12> { [ NoSymbol, NoSymbol, dead_iota, dead_breve ] };
- key <AE01> { [ NoSymbol, NoSymbol, NoSymbol, onesuperior ] };
- key <AE02> { [ NoSymbol, NoSymbol, onehalf, twosuperior ] };
- key <AE03> { [ NoSymbol, NoSymbol, sterling, threesuperior ] };
- key <AE04> { [ NoSymbol, NoSymbol, onequarter, threequarters ] };
- key <AE07> { [ NoSymbol, NoSymbol, U03F0 ] };
- key <AE10> { [ NoSymbol, NoSymbol, degree ] };
-};
-
-partial alphanumeric_keys alternate_group
-xkb_symbols "simple" {
-
- include "gr(bare)"
-
- name[Group1] = "Greece - Simple";
-
- key <TLDE> { [ grave, asciitilde ] }; // ` ~
- key <AE01> { [ 1, exclam ] }; // 1 !
- key <AE02> { [ 2, at ] }; // 2 @
- key <AE03> { [ 3, numbersign ] }; // 3 #
- key <AE04> { [ 4, dollar ] }; // 4 $
- key <AE05> { [ 5, percent ] }; // 5 %
- key <AE06> { [ 6, asciicircum ] }; // 6 ^
- key <AE07> { [ 7, ampersand ] }; // 7 &
- key <AE08> { [ 8, asterisk ] }; // 8 *
- key <AE09> { [ 9, parenleft ] }; // 9 (
- key <AE10> { [ 0, parenright ] }; // 0 )
- key <AE11> { [ minus, underscore ] }; // - _
- key <AE12> { [ equal, plus ] }; // = +
-
- key <AD11> { [ bracketleft, braceleft ] }; // [ {
- key <AD12> { [ bracketright, braceright ] }; // [ {
-
- key <AC11> { [ apostrophe, quotedbl ] }; // ' "
-
- key <AB08> { [ comma, less ] }; // , <
- key <AB09> { [ period, greater ] }; // . >
- key <AB10> { [ slash, question ] }; // / ?
- key <BKSL> { [ backslash, bar ] }; // \ |
-
- include "kpdl(comma)"
-};
-
-hidden partial alphanumeric_keys alternate_group
-xkb_symbols "bare" {
-
- key <AD01> { [ semicolon, colon ] }; // ; :
- key <AD02> { [ Greek_finalsmallsigma, Greek_SIGMA ] }; // ς Σ
- key <AD03> { [ Greek_epsilon, Greek_EPSILON ] }; // ε Ε
- key <AD04> { [ Greek_rho, Greek_RHO ] }; // ρ Ρ
- key <AD05> { [ Greek_tau, Greek_TAU ] }; // τ Τ
- key <AD06> { [ Greek_upsilon, Greek_UPSILON ] }; // υ Υ
- key <AD07> { [ Greek_theta, Greek_THETA ] }; // θ Θ
- key <AD08> { [ Greek_iota, Greek_IOTA ] }; // ι Ι
- key <AD09> { [ Greek_omicron, Greek_OMICRON ] }; // ο Ο
- key <AD10> { [ Greek_pi, Greek_PI ] }; // π Π
-
- key <AC01> { [ Greek_alpha, Greek_ALPHA ] }; // α Α
- key <AC02> { [ Greek_sigma, Greek_SIGMA ] }; // σ Σ
- key <AC03> { [ Greek_delta, Greek_DELTA ] }; // δ Δ
- key <AC04> { [ Greek_phi, Greek_PHI ] }; // φ Φ
- key <AC05> { [ Greek_gamma, Greek_GAMMA ] }; // γ Γ
- key <AC06> { [ Greek_eta, Greek_ETA ] }; // η Η
- key <AC07> { [ Greek_xi, Greek_XI ] }; // ξ Ξ
- key <AC08> { [ Greek_kappa, Greek_KAPPA ] }; // κ Κ
- key <AC09> { [ Greek_lamda, Greek_LAMDA ] }; // λ Λ
- key <AC10> { [ dead_acute, dead_diaeresis ] }; // ´ ¨
-
- key <AB01> { [ Greek_zeta, Greek_ZETA ] }; // ζ Ζ
- key <AB02> { [ Greek_chi, Greek_CHI ] }; // χ Χ
- key <AB03> { [ Greek_psi, Greek_PSI ] }; // ψ Ψ
- key <AB04> { [ Greek_omega, Greek_OMEGA ] }; // ω Ω
- key <AB05> { [ Greek_beta, Greek_BETA ] }; // β Β
- key <AB06> { [ Greek_nu, Greek_NU ] }; // ν Ν
- key <AB07> { [ Greek_mu, Greek_MU ] }; // μ Μ
-
- key <LSGT> { [ guillemotleft, guillemotright ] }; // « »
-};
-
-// ===========================================================================================
-// Greek - Extended |
-// ===========================================================================================
-//
-// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━━┓
-// │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + ┃Backspace ┃
-// │ ` │ 1 │ 2 │ 3 £ │ 4 │ 5 € │ 6 │ 7 │ 8 │ 9 │ 0 ° │ - ± │ = ┃ ┃
-// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━━━┫
-// ┃ ┃ : │ Σ │ Ε │ Ρ │ Τ │ Υ │ Θ │ Ι │ Ο │ Π │ { │ } ┃Enter ┃
-// ┃Tab ┃ ; · │ ς │ ε € │ ρ ® │ τ │ υ │ θ │ ι │ ο │ π │ [ │ ] ┃ ┃
-// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
-// ┃Caps ┃ Α │ Σ │ Δ │ Φ │ Γ │ Η │ Ξ │ Κ │ Λ │ ¨ │ " │ | ┃ ┃
-// ┃Lock ┃ α │ σ │ δ │ φ │ γ │ η │ ξ │ κ │ λ │ ´ │ ' │ \ ┃ ┃
-// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━━━┫
-// ┃ ┃ » │ Ζ │ Χ │ Ψ │ Ω │ Β │ Ν │ Μ │ < │ > │ ? ┃ ┃
-// ┃Shift ┃ « │ ζ │ χ │ ψ © │ ω │ β │ ν │ μ │ , « │ . » │ / ┃Shift ┃
-// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴──┲━━┷━━━━┳┷━━━━━┻┳━━━━━━━┳━━━━━━┫
-// ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
-// ┃Ctrl ┃Meta ┃Alt ┃ Space ┃AltGr ┃Meta ┃Menu ┃Ctrl ┃
-// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹──────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━┛
-
-partial alphanumeric_keys alternate_group
-xkb_symbols "extended" {
-
- include "gr(simple)"
-
- name[Group1] = "Greece - Extended";
-
- key.type[Group1] = "THREE_LEVEL";
-
- key <AE03> { [ NoSymbol, NoSymbol, sterling ] }; // £
- key <AE10> { [ NoSymbol, NoSymbol, degree ] }; // °
- key <AE11> { [ NoSymbol, NoSymbol, plusminus ] }; // ±
-
- key <AD01> { [ NoSymbol, NoSymbol, periodcentered ] }; // ·
- key <AD04> { [ NoSymbol, NoSymbol, registered ] }; // ®
-
- key <AB03> { [ NoSymbol, NoSymbol, copyright ] }; // ©
- key <AB08> { [ NoSymbol, NoSymbol, guillemotleft ] }; // «
- key <AB09> { [ NoSymbol, NoSymbol, guillemotright ] }; // »
-
- include "level3(ralt_switch)"
- include "eurosign(5)"
- include "eurosign(e)"
-};
-
-partial alphanumeric_keys alternate_group
-xkb_symbols "polytonic" {
-
- include "gr(extended)"
-
- name[Group1] = "Greece - Polytonic";
-
- key.type[Group1] = "THREE_LEVEL";
-
- key <AD11> { [ dead_tilde, dead_diaeresis, dead_macron ] }; // ~ ¨ ¯
- key <AD12> { [ dead_iota, VoidSymbol, dead_breve ] }; // ͺ ˘
-
- key <AC10> { [ dead_acute, dead_psili ] }; // ´ ̓
- key <AC11> { [ dead_grave, dead_dasia ] }; // ` ̔
-};
-
-partial alphanumeric_keys alternate_group
-xkb_symbols "nodeadkeys" {
-
- include "gr(simple)"
-
- name[Group1] = "Greece - Eliminate dead keys";
-
- key <AC10> { [ semicolon, colon ] }; // ; :
-};
+// Hellenic keyboard map for X.org
+//
+// Original version:
+// Kostas Gewrgiou <gewrgiou@imbc.gr>
+// Heavily modified and maintained by:
+// Vasilis Vasaitis <vvas@hal.csd.auth.gr>
+// Originally converted to single group form by:
+// Ivan Pascal <pascal@info.tsu.ru>
+
+default partial alphanumeric_keys alternate_group
+xkb_symbols "basic" {
+ include "gr(simple)"
+
+ name[Group1] = "Greek";
+
+ include "eurosign(e)"
+ include "eurosign(5)"
+ include "kpdl(comma)"
+ include "level3(ralt_switch)"
+
+ key <AB01> { [ NoSymbol, NoSymbol, U037D, U03FF ] };
+ key <AB02> { [ NoSymbol, NoSymbol, rightarrow, leftarrow ] };
+ key <AB03> { [ NoSymbol, NoSymbol, copyright ] };
+ key <AB04> { [ NoSymbol, NoSymbol, U03D6 ] };
+ key <AB05> { [ NoSymbol, NoSymbol, U03D0 ] };
+ key <AB06> { [ NoSymbol, NoSymbol, U0374, U0375 ] };
+ key <AB07> { [ NoSymbol, NoSymbol, U03FB, U03FA ] };
+ key <AB08> { [ NoSymbol, NoSymbol, guillemotleft ] };
+ key <AB09> { [ NoSymbol, NoSymbol, guillemotright, periodcentered ] };
+ key <AC03> { [ NoSymbol, NoSymbol, downarrow, uparrow ] };
+ key <AC04> { [ NoSymbol, NoSymbol, U03D5 ] };
+ key <AC05> { [ NoSymbol, NoSymbol, U03DD, U03DC ] };
+ key <AC07> { [ NoSymbol, NoSymbol, U037C, U03FE ] };
+ key <AC08> { [ NoSymbol, NoSymbol, U03DF, U03DE ] };
+ key <AC09> { [ NoSymbol, NoSymbol, U03F2, U03F9 ] };
+ key <AC10> { [ NoSymbol, NoSymbol, dead_acute, dead_psili ] };
+ key <AC11> { [ NoSymbol, NoSymbol, dead_grave, dead_dasia ] };
+ key <AD01> { [ NoSymbol, NoSymbol, periodcentered ] };
+ key <AD02> { [ NoSymbol, NoSymbol, U03DB, U03DA ] };
+ key <AD04> { [ NoSymbol, NoSymbol, registered, U03F1 ] };
+ key <AD07> { [ NoSymbol, NoSymbol, U03D1, U03F4 ] };
+ key <AD08> { [ NoSymbol, NoSymbol, U037B, U03FD ] };
+ key <AD10> { [ NoSymbol, NoSymbol, U03E1, U03E0 ] };
+ key <AD11> { [ NoSymbol, NoSymbol, dead_tilde, dead_macron ] };
+ key <AD12> { [ NoSymbol, NoSymbol, dead_iota, dead_breve ] };
+ key <AE01> { [ NoSymbol, NoSymbol, NoSymbol, onesuperior ] };
+ key <AE02> { [ NoSymbol, NoSymbol, onehalf, twosuperior ] };
+ key <AE03> { [ NoSymbol, NoSymbol, sterling, threesuperior ] };
+ key <AE04> { [ NoSymbol, NoSymbol, onequarter, threequarters ] };
+ key <AE07> { [ NoSymbol, NoSymbol, U03F0 ] };
+ key <AE10> { [ NoSymbol, NoSymbol, degree ] };
+};
+
+partial alphanumeric_keys alternate_group
+xkb_symbols "simple" {
+
+ include "gr(bare)"
+
+ name[Group1] = "Greek (simple)";
+
+ key <TLDE> { [ grave, asciitilde ] }; // ` ~
+ key <AE01> { [ 1, exclam ] }; // 1 !
+ key <AE02> { [ 2, at ] }; // 2 @
+ key <AE03> { [ 3, numbersign ] }; // 3 #
+ key <AE04> { [ 4, dollar ] }; // 4 $
+ key <AE05> { [ 5, percent ] }; // 5 %
+ key <AE06> { [ 6, asciicircum ] }; // 6 ^
+ key <AE07> { [ 7, ampersand ] }; // 7 &
+ key <AE08> { [ 8, asterisk ] }; // 8 *
+ key <AE09> { [ 9, parenleft ] }; // 9 (
+ key <AE10> { [ 0, parenright ] }; // 0 )
+ key <AE11> { [ minus, underscore ] }; // - _
+ key <AE12> { [ equal, plus ] }; // = +
+
+ key <AD11> { [ bracketleft, braceleft ] }; // [ {
+ key <AD12> { [ bracketright, braceright ] }; // [ {
+
+ key <AC11> { [ apostrophe, quotedbl ] }; // ' "
+
+ key <AB08> { [ comma, less ] }; // , <
+ key <AB09> { [ period, greater ] }; // . >
+ key <AB10> { [ slash, question ] }; // / ?
+ key <BKSL> { [ backslash, bar ] }; // \ |
+
+ include "kpdl(comma)"
+};
+
+hidden partial alphanumeric_keys alternate_group
+xkb_symbols "bare" {
+
+ key <AD01> { [ semicolon, colon ] }; // ; :
+ key <AD02> { [ Greek_finalsmallsigma, Greek_SIGMA ] }; // ς Σ
+ key <AD03> { [ Greek_epsilon, Greek_EPSILON ] }; // ε Ε
+ key <AD04> { [ Greek_rho, Greek_RHO ] }; // ρ Ρ
+ key <AD05> { [ Greek_tau, Greek_TAU ] }; // τ Τ
+ key <AD06> { [ Greek_upsilon, Greek_UPSILON ] }; // υ Υ
+ key <AD07> { [ Greek_theta, Greek_THETA ] }; // θ Θ
+ key <AD08> { [ Greek_iota, Greek_IOTA ] }; // ι Ι
+ key <AD09> { [ Greek_omicron, Greek_OMICRON ] }; // ο Ο
+ key <AD10> { [ Greek_pi, Greek_PI ] }; // π Π
+
+ key <AC01> { [ Greek_alpha, Greek_ALPHA ] }; // α Α
+ key <AC02> { [ Greek_sigma, Greek_SIGMA ] }; // σ Σ
+ key <AC03> { [ Greek_delta, Greek_DELTA ] }; // δ Δ
+ key <AC04> { [ Greek_phi, Greek_PHI ] }; // φ Φ
+ key <AC05> { [ Greek_gamma, Greek_GAMMA ] }; // γ Γ
+ key <AC06> { [ Greek_eta, Greek_ETA ] }; // η Η
+ key <AC07> { [ Greek_xi, Greek_XI ] }; // ξ Ξ
+ key <AC08> { [ Greek_kappa, Greek_KAPPA ] }; // κ Κ
+ key <AC09> { [ Greek_lamda, Greek_LAMDA ] }; // λ Λ
+ key <AC10> { [ dead_acute, dead_diaeresis ] }; // ´ ¨
+
+ key <AB01> { [ Greek_zeta, Greek_ZETA ] }; // ζ Ζ
+ key <AB02> { [ Greek_chi, Greek_CHI ] }; // χ Χ
+ key <AB03> { [ Greek_psi, Greek_PSI ] }; // ψ Ψ
+ key <AB04> { [ Greek_omega, Greek_OMEGA ] }; // ω Ω
+ key <AB05> { [ Greek_beta, Greek_BETA ] }; // β Β
+ key <AB06> { [ Greek_nu, Greek_NU ] }; // ν Ν
+ key <AB07> { [ Greek_mu, Greek_MU ] }; // μ Μ
+
+ key <LSGT> { [ guillemotleft, guillemotright ] }; // « »
+};
+
+// ===========================================================================================
+// Greek - Extended |
+// ===========================================================================================
+//
+// ┌─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┬─────┲━━━━━━━━━━━┓
+// │ ~ │ ! │ @ │ # │ $ │ % │ ^ │ & │ * │ ( │ ) │ _ │ + ┃Backspace ┃
+// │ ` │ 1 │ 2 │ 3 £ │ 4 │ 5 € │ 6 │ 7 │ 8 │ 9 │ 0 ° │ - ± │ = ┃ ┃
+// ┢━━━━━┷━┱───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┴─┬───┺━┳━━━━━━━━━┫
+// ┃ ┃ : │ Σ │ Ε │ Ρ │ Τ │ Υ │ Θ │ Ι │ Ο │ Π │ { │ } ┃Enter ┃
+// ┃Tab ┃ ; · │ ς │ ε € │ ρ ® │ τ │ υ │ θ │ ι │ ο │ π │ [ │ ] ┃ ┃
+// ┣━━━━━━━┻┱────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┴┬────┺┓ ┃
+// ┃Caps ┃ Α │ Σ │ Δ │ Φ │ Γ │ Η │ Ξ │ Κ │ Λ │ ¨ │ " │ | ┃ ┃
+// ┃Lock ┃ α │ σ │ δ │ φ │ γ │ η │ ξ │ κ │ λ │ ´ │ ' │ \ ┃ ┃
+// ┣━━━━━━━┳┹────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┬┴────┲┷━━━━━┻━━━━━━━━┫
+// ┃ ┃ » │ Ζ │ Χ │ Ψ │ Ω │ Β │ Ν │ Μ │ < │ > │ ? ┃ ┃
+// ┃Shift ┃ « │ ζ │ χ │ ψ © │ ω │ β │ ν │ μ │ , « │ . » │ / ┃Shift ┃
+// ┣━━━━━━━╋━━━━━┷━┳━━━┷━━━┱─┴─────┴─────┴─────┴─────┴─────┴──┲━━┷━━━━┳┷━━━━━┻┳━━━━━━━┳━━━━━━┫
+// ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃ ┃
+// ┃Ctrl ┃Meta ┃Alt ┃ Space ┃AltGr ┃Meta ┃Menu ┃Ctrl ┃
+// ┗━━━━━━━┻━━━━━━━┻━━━━━━━┹──────────────────────────────────┺━━━━━━━┻━━━━━━━┻━━━━━━━┻━━━━━━┛
+
+partial alphanumeric_keys alternate_group
+xkb_symbols "extended" {
+
+ include "gr(simple)"
+
+ name[Group1] = "Greek (extended)";
+
+ key.type[Group1] = "THREE_LEVEL";
+
+ key <AE03> { [ NoSymbol, NoSymbol, sterling ] }; // £
+ key <AE10> { [ NoSymbol, NoSymbol, degree ] }; // °
+ key <AE11> { [ NoSymbol, NoSymbol, plusminus ] }; // ±
+
+ key <AD01> { [ NoSymbol, NoSymbol, periodcentered ] }; // ·
+ key <AD04> { [ NoSymbol, NoSymbol, registered ] }; // ®
+
+ key <AB03> { [ NoSymbol, NoSymbol, copyright ] }; // ©
+ key <AB08> { [ NoSymbol, NoSymbol, guillemotleft ] }; // «
+ key <AB09> { [ NoSymbol, NoSymbol, guillemotright ] }; // »
+
+ include "level3(ralt_switch)"
+ include "eurosign(5)"
+ include "eurosign(e)"
+};
+
+partial alphanumeric_keys alternate_group
+xkb_symbols "polytonic" {
+
+ include "gr(extended)"
+
+ name[Group1] = "Greek (polytonic)";
+
+ key.type[Group1] = "THREE_LEVEL";
+
+ key <AD11> { [ dead_tilde, dead_diaeresis, dead_macron ] }; // ~ ¨ ¯
+ key <AD12> { [ dead_iota, VoidSymbol, dead_breve ] }; // ͺ ˘
+
+ key <AC10> { [ dead_acute, dead_psili ] }; // ´ ̓
+ key <AC11> { [ dead_grave, dead_dasia ] }; // ` ̔
+};
+
+partial alphanumeric_keys alternate_group
+xkb_symbols "nodeadkeys" {
+
+ include "gr(simple)"
+
+ name[Group1] = "Greek (eliminate dead keys)";
+
+ key <AC10> { [ semicolon, colon ] }; // ; :
+};
diff --git a/xorg-server/xkeyboard-config/symbols/hr b/xorg-server/xkeyboard-config/symbols/hr
index 71b23b607..8275259c4 100644
--- a/xorg-server/xkeyboard-config/symbols/hr
+++ b/xorg-server/xkeyboard-config/symbols/hr
@@ -1,73 +1,73 @@
-default partial alphanumeric_keys
-xkb_symbols "basic" {
-
- name[Group1]="Croatia";
-
- include "rs(latin)"
-
- // Redefine these keys to match XFree86 Croatian layout
- key <AE01> { [ 1, exclam, asciitilde, dead_tilde ] };
- key <AE03> { [ 3, numbersign, asciicircum, dead_circumflex ] };
- key <AE05> { [ 5, percent, degree, dead_abovering ] };
- key <AE07> { [ 7, slash, grave, dead_grave ] };
- key <AB10> { [ minus, underscore, dead_belowdot, dead_abovedot ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "us" {
-
- name[Group1]= "Croatia - US keyboard with Croatian letters";
-
- include "us"
-
- key <AD01> { [ any, any, backslash ] };
- key <AD02> { [ any, any, bar ] };
- key <AD03> { [ any, any, EuroSign ] };
- key <AD06> { [ any, any, z, Z ] };
- key <AD11> { [ any, any, scaron, Scaron ] };
- key <AD12> { [ any, any, dstroke, Dstroke ] };
- key <AC04> { [ any, any, bracketleft ] };
- key <AC05> { [ any, any, bracketright ] };
- key <AC08> { [ any, any, lstroke ] };
- key <AC09> { [ any, any, Lstroke ] };
- key <AC10> { [ any, any, ccaron, Ccaron ] };
- key <AC11> { [ any, any, cacute, Cacute ] };
- key <LSGT> { [ any, any, bar ] };
- key <AB01> { [ any, any, y, Y ] };
- key <AB04> { [ any, any, at ] };
- key <AB05> { [ any, any, braceleft ] };
- key <AB06> { [ any, any, braceright ] };
- key <AB07> { [ any, any, section ] };
- key <AB08> { [ any, any, semicolon ] };
- key <AB09> { [ any, any, colon ] };
- key <AB10> { [ any, any, minus, underscore ] };
- key <BKSL> { [ any, any, zcaron, Zcaron ] };
-
- include "level3(ralt_switch)"
-
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "alternatequotes" {
-
- name[Group1]= "Croatia - Use guillemets for quotes";
-
- include "rs(latinalternatequotes)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "unicode" {
-
- name[Group1]= "Croatia - Use Croatian digraphs";
-
- include "rs(latinunicode)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "unicodeus" {
-
- name[Group1]= "Croatia - US keyboard with Croatian digraphs";
-
- include "rs(latinunicodeyz)"
-};
+default partial alphanumeric_keys
+xkb_symbols "basic" {
+
+ name[Group1]="Croatian";
+
+ include "rs(latin)"
+
+ // Redefine these keys to match XFree86 Croatian layout
+ key <AE01> { [ 1, exclam, asciitilde, dead_tilde ] };
+ key <AE03> { [ 3, numbersign, asciicircum, dead_circumflex ] };
+ key <AE05> { [ 5, percent, degree, dead_abovering ] };
+ key <AE07> { [ 7, slash, grave, dead_grave ] };
+ key <AB10> { [ minus, underscore, dead_belowdot, dead_abovedot ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "us" {
+
+ name[Group1]= "Croatian (US keyboard with Croatian letters)";
+
+ include "us"
+
+ key <AD01> { [ any, any, backslash ] };
+ key <AD02> { [ any, any, bar ] };
+ key <AD03> { [ any, any, EuroSign ] };
+ key <AD06> { [ any, any, z, Z ] };
+ key <AD11> { [ any, any, scaron, Scaron ] };
+ key <AD12> { [ any, any, dstroke, Dstroke ] };
+ key <AC04> { [ any, any, bracketleft ] };
+ key <AC05> { [ any, any, bracketright ] };
+ key <AC08> { [ any, any, lstroke ] };
+ key <AC09> { [ any, any, Lstroke ] };
+ key <AC10> { [ any, any, ccaron, Ccaron ] };
+ key <AC11> { [ any, any, cacute, Cacute ] };
+ key <LSGT> { [ any, any, bar ] };
+ key <AB01> { [ any, any, y, Y ] };
+ key <AB04> { [ any, any, at ] };
+ key <AB05> { [ any, any, braceleft ] };
+ key <AB06> { [ any, any, braceright ] };
+ key <AB07> { [ any, any, section ] };
+ key <AB08> { [ any, any, semicolon ] };
+ key <AB09> { [ any, any, colon ] };
+ key <AB10> { [ any, any, minus, underscore ] };
+ key <BKSL> { [ any, any, zcaron, Zcaron ] };
+
+ include "level3(ralt_switch)"
+
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "alternatequotes" {
+
+ name[Group1]= "Croatian (use guillemets for quotes)";
+
+ include "rs(latinalternatequotes)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "unicode" {
+
+ name[Group1]= "Croatian (use Croatian digraphs)";
+
+ include "rs(latinunicode)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "unicodeus" {
+
+ name[Group1]= "Croatian (US keyboard with Croatian digraphs)";
+
+ include "rs(latinunicodeyz)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/hu b/xorg-server/xkeyboard-config/symbols/hu
index 4595f1d22..16631b7ad 100644
--- a/xorg-server/xkeyboard-config/symbols/hu
+++ b/xorg-server/xkeyboard-config/symbols/hu
@@ -1,431 +1,431 @@
-// New style XKB layout for some widely used Hungarian keyboard layouts
-//
-// Based on old style 'xkb/symbols/hu"
-//
-// (C) 2002-2004 Soós Péter <sp@osb.hu>
-// (C) 2010 Andras Timar <timar@fsf.hu>
-//
-// Permission is granted to anyone to use, distribute and modify
-// this file in any way, provided that the above copyright notice
-// is left intact and the author of the modification summarizes
-// the changes in this header.
-//
-// This file is distributed without any expressed or implied warranty.
-//
-// Changes:
-// 2004-04-17 - Moved to new style (only Unicode based layouts)
-// - Added consistent dead key support
-// - Fixed abovedot
-// - Added adiaeresis
-// - Added EuroSign and cent symbol
-// 2010-04-23 - Added doublelowquotemark
-// - Added rightdoublequotemark
-// - Added endash
-// 2010-05-13 - Added ellipsis
-
-
-// Default layout
-default partial
-xkb_symbols "basic" {
- include "hu(102_qwertz_comma_dead)"
- name[Group1] = "Hungary";
-};
-
-// Standard layout
-partial
-xkb_symbols "standard" {
- include "hu(102_qwertz_comma_dead)"
- name[Group1] = "Hungary - Standard";
-};
-
-// Standard layout without dead key support
-partial
-xkb_symbols "nodeadkeys" {
- include "hu(102_qwertz_comma_nodead)"
- name[Group1] = "Hungary - Eliminate dead keys";
-};
-
-// Qwerty layout
-partial
-xkb_symbols "qwerty" {
- include "hu(101_qwerty_comma_dead)"
- name[Group1] = "Hungary - qwerty";
-};
-
-// Main layouts
-
-// 101_qwertz_comma_dead
-// 101 key qwertz layout
-// with decimal comma on keypad
-// and with dead key support
-partial
-xkb_symbols "101_qwertz_comma_dead" {
- name[Group1] = "Hungary - 101/qwertz/comma/Dead keys";
- include "latin"
- include "hu(def_101)"
- include "hu(def_qwertz)"
- include "kpdl(comma)"
- include "hu(def_dead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 101_qwertz_comma_nodead
-// 101 key qwertz layout
-// with decimal comma on keypad
-// and without dead key support
-partial
-xkb_symbols "101_qwertz_comma_nodead" {
- name[Group1] = "Hungary - 101/qwertz/comma/Eliminate dead keys";
- include "latin"
- include "hu(def_101)"
- include "hu(def_qwertz)"
- include "kpdl(comma)"
- include "hu(def_nodead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 101_qwertz_dot_dead
-// 101 key qwertz layout
-// with decimal dot on keypad
-// and with dead key support
-partial
-xkb_symbols "101_qwertz_dot_dead" {
- name[Group1] = "Hungary - 101/qwertz/dot/Dead keys";
- include "latin"
- include "hu(def_101)"
- include "hu(def_qwertz)"
- include "hu(def_dot)"
- include "hu(def_dead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 101_qwertz_dot_nodead
-// 101 key qwertz layout
-// with decimal dot on keypad
-// and without dead key support
-partial
-xkb_symbols "101_qwertz_dot_nodead" {
- name[Group1] = "Hungary - 101/qwertz/dot/Eliminate dead keys";
- include "latin"
- include "hu(def_101)"
- include "hu(def_qwertz)"
- include "hu(def_dot)"
- include "hu(def_nodead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 101_qwerty_comma_dead
-// 101 key qwerty layout
-// with decimal comma on keypad
-// and with dead key support
-partial
-xkb_symbols "101_qwerty_comma_dead" {
- name[Group1] = "Hungary - 101/qwerty/comma/Dead keys";
- include "latin"
- include "hu(def_101)"
- include "hu(def_qwerty)"
- include "kpdl(comma)"
- include "hu(def_dead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 101_qwerty_comma_nodead
-// 101 key qwerty layout
-// with decimal comma on keypad
-// and without dead key support
-partial
-xkb_symbols "101_qwerty_comma_nodead" {
- name[Group1] = "Hungary - 101/qwerty/comma/Eliminate dead keys";
- include "latin"
- include "hu(def_101)"
- include "hu(def_qwerty)"
- include "kpdl(comma)"
- include "hu(def_nodead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 101_qwerty_dot_dead
-// 101 key qwerty layout
-// with decimal dot on keypad
-// and with dead key support
-partial
-xkb_symbols "101_qwerty_dot_dead" {
- name[Group1] = "Hungary - 101/qwerty/dot/Dead keys";
- include "latin"
- include "hu(def_101)"
- include "hu(def_qwerty)"
- include "hu(def_dot)"
- include "hu(def_dead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 101_qwerty_dot_nodead
-// 101 key qwerty layout
-// with decimal dot on keypad
-// and without dead key support
-partial
-xkb_symbols "101_qwerty_dot_nodead" {
- name[Group1] = "Hungary - 101/qwerty/dot/Eliminate dead keys";
- include "latin"
- include "hu(def_101)"
- include "hu(def_qwerty)"
- include "hu(def_dot)"
- include "hu(def_nodead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 102_qwertz_comma_dead
-// 102 key qwertz layout
-// with decimal comma on keypad
-// and with dead key support
-partial
-xkb_symbols "102_qwertz_comma_dead" {
- name[Group1] = "Hungary - 102/qwertz/comma/Dead keys";
- include "latin"
- include "hu(def_102)"
- include "hu(def_qwertz)"
- include "kpdl(comma)"
- include "hu(def_dead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 102_qwertz_comma_nodead
-// 102 key qwertz layout
-// with decimal comma on keypad
-// and without dead key support
-partial
-xkb_symbols "102_qwertz_comma_nodead" {
- name[Group1] = "Hungary - 102/qwertz/comma/Eliminate dead keys";
- include "latin"
- include "hu(def_102)"
- include "hu(def_qwertz)"
- include "kpdl(comma)"
- include "hu(def_nodead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 102_qwertz_dot_dead
-// 102 key qwertz layout
-// with decimal dot on keypad
-// and with dead key support
-partial
-xkb_symbols "102_qwertz_dot_dead" {
- name[Group1] = "Hungary - 102/qwertz/dot/Dead keys";
- include "latin"
- include "hu(def_102)"
- include "hu(def_qwertz)"
- include "hu(def_dot)"
- include "hu(def_dead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 102_qwertz_dot_nodead
-// 102 key qwertz layout
-// with decimal dot on keypad
-// and without dead key support
-partial
-xkb_symbols "102_qwertz_dot_nodead" {
- name[Group1] = "Hungary - 102/qwertz/dot/Eliminate dead keys";
- include "latin"
- include "hu(def_102)"
- include "hu(def_qwertz)"
- include "hu(def_dot)"
- include "hu(def_nodead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 102_qwerty_comma_dead
-// 102 key qwerty layout
-// with decimal comma on keypad
-// and with dead key support
-partial
-xkb_symbols "102_qwerty_comma_dead" {
- name[Group1] = "Hungary - 102/qwerty/comma/Dead keys";
- include "latin"
- include "hu(def_102)"
- include "hu(def_qwerty)"
- include "kpdl(comma)"
- include "hu(def_dead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 102_qwerty_comma_nodead
-// 102 key qwerty layout
-// with decimal comma on keypad
-// and without dead key support
-partial
-xkb_symbols "102_qwerty_comma_nodead" {
- name[Group1] = "Hungary - 102/qwerty/comma/Eliminate dead keys";
- include "latin"
- include "hu(def_102)"
- include "hu(def_qwerty)"
- include "kpdl(comma)"
- include "hu(def_nodead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 102_qwerty_dot_dead
-// 102 key qwerty layout
-// with decimal dot on keypad
-// and with dead key support
-partial
-xkb_symbols "102_qwerty_dot_dead" {
- name[Group1] = "Hungary - 102/qwerty/dot/Dead keys";
- include "latin"
- include "hu(def_102)"
- include "hu(def_qwerty)"
- include "hu(def_dot)"
- include "hu(def_dead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// 102_qwerty_dot_nodead
-// 102 key qwerty layout
-// with decimal dot on keypad
-// and without dead key support
-partial
-xkb_symbols "102_qwerty_dot_nodead" {
- name[Group1] = "Hungary - 102/qwerty/dot/Eliminate dead keys";
- include "latin"
- include "hu(def_102)"
- include "hu(def_qwerty)"
- include "hu(def_dot)"
- include "hu(def_nodead)"
- include "hu(def_common)"
- include "level3(ralt_switch)"
-};
-
-// Partial layouts
-
-// def_102:
-// The standard Hungarian 102 key layout
-hidden partial alphanumeric_keys
-xkb_symbols "def_102" {
- key <TLDE> { [ 0, section, notsign ] };
- key <LSGT> { [ iacute, Iacute, less, greater ] };
-
-};
-
-// def_101:
-// An alternative layout for 101 key keyboards
-hidden partial alphanumeric_keys
-xkb_symbols "def_101" {
- key <TLDE> { [ iacute, Iacute, 0, section ] };
- key <LSGT> { [ less, greater ] };
-};
-
-// def_qwertz:
-// The standard Hungaryan qwertz layout
-hidden partial alphanumeric_keys
-xkb_symbols "def_qwertz" {
- key <AD06> { [ z, Z, endash ] };
- key <AB01> { [ y, Y, greater ] };
-};
-
-
-// def_qwerty:
-// The qwerty layout for people who familiar with the standard US layout
-hidden partial alphanumeric_keys
-xkb_symbols "def_qwerty" {
- key <AD06> { [ y, Y, endash ] };
- key <AB01> { [ z, Z, greater ] };
-};
-
-// def_dot:
-// The Hungarian standard is the comma on the keypad not decimal dot,
-// but programmers hate it
-hidden partial keypad_keys
-xkb_symbols "def_dot" {
- key <KPDL> { [ KP_Delete, KP_Decimal ] };
-};
-
-
-// def_dead:
-// Dead keys support part
-hidden partial alphanumeric_keys
-xkb_symbols "def_dead" {
- key <AE01> { [ 1, apostrophe, asciitilde, dead_tilde ] };
- key <AE02> { [ 2, quotedbl, dead_caron, caron ] };
- key <AE03> { [ 3, plus, asciicircum, dead_circumflex ] };
- key <AE04> { [ 4, exclam, dead_breve, breve ] };
- key <AE05> { [ 5, percent, dead_abovering, degree ] };
- key <AE06> { [ 6, slash, dead_ogonek, ogonek ] };
- key <AE07> { [ 7, equal, grave, dead_grave ] };
- key <AE08> { [ 8, parenleft, dead_abovedot, abovedot ] };
- key <AE09> { [ 9, parenright, dead_acute, acute ] };
- key <AE10> { [ odiaeresis, Odiaeresis, dead_doubleacute, doubleacute ] };
- key <AE11> { [ udiaeresis, Udiaeresis, dead_diaeresis, diaeresis ] };
- key <AE12> { [ oacute, Oacute, dead_cedilla, cedilla ] };
-};
-
-// def_nodead:
-// Without dead keys support
-hidden partial alphanumeric_keys
-xkb_symbols "def_nodead" {
- key <AE01> { [ 1, apostrophe, asciitilde ] };
- key <AE02> { [ 2, quotedbl, caron ] };
- key <AE03> { [ 3, plus, asciicircum ] };
- key <AE04> { [ 4, exclam, breve ] };
- key <AE05> { [ 5, percent, degree ] };
- key <AE06> { [ 6, slash, ogonek ] };
- key <AE07> { [ 7, equal, grave ] };
- key <AE08> { [ 8, parenleft, abovedot ] };
- key <AE09> { [ 9, parenright, acute ] };
- key <AE10> { [ odiaeresis, Odiaeresis, doubleacute ] };
- key <AE11> { [ udiaeresis, Udiaeresis, diaeresis ] };
- key <AE12> { [ oacute, Oacute, cedilla ] };
-};
-
-
-// def_common:
-// The common part of all Hungarian layout above
-hidden partial alphanumeric_keys
-xkb_symbols "def_common" {
- key <AD01> { [ q, Q, backslash ] };
- key <AD02> { [ w, W, bar ] };
- key <AD07> { [ u, U, EuroSign ] };
- key <AD08> { [ i, I, Iacute, iacute ] };
- key <AD09> { [ o, O, doublelowquotemark ] };
- key <AD10> { [ p, P, rightdoublequotemark ] };
- key <AD11> { [ odoubleacute, Odoubleacute, division ] };
- key <AD12> { [ uacute, Uacute, multiply ] };
-
- key <AC01> { [ a, A, adiaeresis, Adiaeresis ] };
- key <AC02> { [ s, S, dstroke ] };
- key <AC03> { [ d, D, Dstroke ] };
- key <AC04> { [ f, F, bracketleft ] };
- key <AC05> { [ g, G, bracketright ] };
- key <AC07> { [ j, J, iacute, Iacute ] };
- key <AC08> { [ k, K, lstroke ] };
- key <AC09> { [ l, L, Lstroke ] };
- key <AC10> { [ eacute, Eacute, dollar, cent ] };
- key <AC11> { [ aacute, Aacute, ssharp ] };
-
- key <BKSL> { [ udoubleacute, Udoubleacute, currency ] };
-
- key <AB02> { [ x, X, numbersign ] };
- key <AB03> { [ c, C, ampersand ] };
- key <AB04> { [ v, V, at ] };
- key <AB05> { [ b, B, braceleft ] };
- key <AB06> { [ n, N, braceright ] };
- key <AB07> { [ m, M, less ] };
- key <AB08> { [ comma, question, semicolon ] };
- key <AB09> { [ period, colon, ellipsis ] };
- key <AB10> { [ minus, underscore, asterisk ] };
-
-};
+// New style XKB layout for some widely used Hungarian keyboard layouts
+//
+// Based on old style 'xkb/symbols/hu"
+//
+// (C) 2002-2004 Soós Péter <sp@osb.hu>
+// (C) 2010 Andras Timar <timar@fsf.hu>
+//
+// Permission is granted to anyone to use, distribute and modify
+// this file in any way, provided that the above copyright notice
+// is left intact and the author of the modification summarizes
+// the changes in this header.
+//
+// This file is distributed without any expressed or implied warranty.
+//
+// Changes:
+// 2004-04-17 - Moved to new style (only Unicode based layouts)
+// - Added consistent dead key support
+// - Fixed abovedot
+// - Added adiaeresis
+// - Added EuroSign and cent symbol
+// 2010-04-23 - Added doublelowquotemark
+// - Added rightdoublequotemark
+// - Added endash
+// 2010-05-13 - Added ellipsis
+
+
+// Default layout
+default partial
+xkb_symbols "basic" {
+ include "hu(102_qwertz_comma_dead)"
+ name[Group1] = "Hungarian";
+};
+
+// Standard layout
+partial
+xkb_symbols "standard" {
+ include "hu(102_qwertz_comma_dead)"
+ name[Group1] = "Hungarian (standard)";
+};
+
+// Standard layout without dead key support
+partial
+xkb_symbols "nodeadkeys" {
+ include "hu(102_qwertz_comma_nodead)"
+ name[Group1] = "Hungarian (eliminate dead keys)";
+};
+
+// Qwerty layout
+partial
+xkb_symbols "qwerty" {
+ include "hu(101_qwerty_comma_dead)"
+ name[Group1] = "Hungarian (qwerty)";
+};
+
+// Main layouts
+
+// 101_qwertz_comma_dead
+// 101 key qwertz layout
+// with decimal comma on keypad
+// and with dead key support
+partial
+xkb_symbols "101_qwertz_comma_dead" {
+ name[Group1] = "Hungarian (101/qwertz/comma/dead keys)";
+ include "latin"
+ include "hu(def_101)"
+ include "hu(def_qwertz)"
+ include "kpdl(comma)"
+ include "hu(def_dead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 101_qwertz_comma_nodead
+// 101 key qwertz layout
+// with decimal comma on keypad
+// and without dead key support
+partial
+xkb_symbols "101_qwertz_comma_nodead" {
+ name[Group1] = "Hungarian (101/qwertz/comma/eliminate dead keys)";
+ include "latin"
+ include "hu(def_101)"
+ include "hu(def_qwertz)"
+ include "kpdl(comma)"
+ include "hu(def_nodead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 101_qwertz_dot_dead
+// 101 key qwertz layout
+// with decimal dot on keypad
+// and with dead key support
+partial
+xkb_symbols "101_qwertz_dot_dead" {
+ name[Group1] = "Hungarian (101/qwertz/dot/dead keys)";
+ include "latin"
+ include "hu(def_101)"
+ include "hu(def_qwertz)"
+ include "hu(def_dot)"
+ include "hu(def_dead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 101_qwertz_dot_nodead
+// 101 key qwertz layout
+// with decimal dot on keypad
+// and without dead key support
+partial
+xkb_symbols "101_qwertz_dot_nodead" {
+ name[Group1] = "Hungarian (101/qwertz/dot/eliminate dead keys)";
+ include "latin"
+ include "hu(def_101)"
+ include "hu(def_qwertz)"
+ include "hu(def_dot)"
+ include "hu(def_nodead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 101_qwerty_comma_dead
+// 101 key qwerty layout
+// with decimal comma on keypad
+// and with dead key support
+partial
+xkb_symbols "101_qwerty_comma_dead" {
+ name[Group1] = "Hungarian (101/qwerty/comma/dead keys)";
+ include "latin"
+ include "hu(def_101)"
+ include "hu(def_qwerty)"
+ include "kpdl(comma)"
+ include "hu(def_dead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 101_qwerty_comma_nodead
+// 101 key qwerty layout
+// with decimal comma on keypad
+// and without dead key support
+partial
+xkb_symbols "101_qwerty_comma_nodead" {
+ name[Group1] = "Hungarian (101/qwerty/comma/eliminate dead keys)";
+ include "latin"
+ include "hu(def_101)"
+ include "hu(def_qwerty)"
+ include "kpdl(comma)"
+ include "hu(def_nodead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 101_qwerty_dot_dead
+// 101 key qwerty layout
+// with decimal dot on keypad
+// and with dead key support
+partial
+xkb_symbols "101_qwerty_dot_dead" {
+ name[Group1] = "Hungarian (101/qwerty/dot/dead keys)";
+ include "latin"
+ include "hu(def_101)"
+ include "hu(def_qwerty)"
+ include "hu(def_dot)"
+ include "hu(def_dead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 101_qwerty_dot_nodead
+// 101 key qwerty layout
+// with decimal dot on keypad
+// and without dead key support
+partial
+xkb_symbols "101_qwerty_dot_nodead" {
+ name[Group1] = "Hungarian (101/qwerty/dot/eliminate dead keys)";
+ include "latin"
+ include "hu(def_101)"
+ include "hu(def_qwerty)"
+ include "hu(def_dot)"
+ include "hu(def_nodead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 102_qwertz_comma_dead
+// 102 key qwertz layout
+// with decimal comma on keypad
+// and with dead key support
+partial
+xkb_symbols "102_qwertz_comma_dead" {
+ name[Group1] = "Hungarian (102/qwertz/comma/dead keys)";
+ include "latin"
+ include "hu(def_102)"
+ include "hu(def_qwertz)"
+ include "kpdl(comma)"
+ include "hu(def_dead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 102_qwertz_comma_nodead
+// 102 key qwertz layout
+// with decimal comma on keypad
+// and without dead key support
+partial
+xkb_symbols "102_qwertz_comma_nodead" {
+ name[Group1] = "Hungarian (102/qwertz/comma/eliminate dead keys)";
+ include "latin"
+ include "hu(def_102)"
+ include "hu(def_qwertz)"
+ include "kpdl(comma)"
+ include "hu(def_nodead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 102_qwertz_dot_dead
+// 102 key qwertz layout
+// with decimal dot on keypad
+// and with dead key support
+partial
+xkb_symbols "102_qwertz_dot_dead" {
+ name[Group1] = "Hungarian (102/qwertz/dot/dead keys)";
+ include "latin"
+ include "hu(def_102)"
+ include "hu(def_qwertz)"
+ include "hu(def_dot)"
+ include "hu(def_dead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 102_qwertz_dot_nodead
+// 102 key qwertz layout
+// with decimal dot on keypad
+// and without dead key support
+partial
+xkb_symbols "102_qwertz_dot_nodead" {
+ name[Group1] = "Hungarian (102/qwertz/dot/eliminate dead keys)";
+ include "latin"
+ include "hu(def_102)"
+ include "hu(def_qwertz)"
+ include "hu(def_dot)"
+ include "hu(def_nodead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 102_qwerty_comma_dead
+// 102 key qwerty layout
+// with decimal comma on keypad
+// and with dead key support
+partial
+xkb_symbols "102_qwerty_comma_dead" {
+ name[Group1] = "Hungarian (102/qwerty/comma/dead keys)";
+ include "latin"
+ include "hu(def_102)"
+ include "hu(def_qwerty)"
+ include "kpdl(comma)"
+ include "hu(def_dead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 102_qwerty_comma_nodead
+// 102 key qwerty layout
+// with decimal comma on keypad
+// and without dead key support
+partial
+xkb_symbols "102_qwerty_comma_nodead" {
+ name[Group1] = "Hungarian (102/qwerty/comma/eliminate dead keys)";
+ include "latin"
+ include "hu(def_102)"
+ include "hu(def_qwerty)"
+ include "kpdl(comma)"
+ include "hu(def_nodead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 102_qwerty_dot_dead
+// 102 key qwerty layout
+// with decimal dot on keypad
+// and with dead key support
+partial
+xkb_symbols "102_qwerty_dot_dead" {
+ name[Group1] = "Hungarian (102/qwerty/dot/dead keys)";
+ include "latin"
+ include "hu(def_102)"
+ include "hu(def_qwerty)"
+ include "hu(def_dot)"
+ include "hu(def_dead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// 102_qwerty_dot_nodead
+// 102 key qwerty layout
+// with decimal dot on keypad
+// and without dead key support
+partial
+xkb_symbols "102_qwerty_dot_nodead" {
+ name[Group1] = "Hungarian (102/qwerty/dot/eliminate dead keys)";
+ include "latin"
+ include "hu(def_102)"
+ include "hu(def_qwerty)"
+ include "hu(def_dot)"
+ include "hu(def_nodead)"
+ include "hu(def_common)"
+ include "level3(ralt_switch)"
+};
+
+// Partial layouts
+
+// def_102:
+// The standard Hungarian 102 key layout
+hidden partial alphanumeric_keys
+xkb_symbols "def_102" {
+ key <TLDE> { [ 0, section, notsign ] };
+ key <LSGT> { [ iacute, Iacute, less, greater ] };
+
+};
+
+// def_101:
+// An alternative layout for 101 key keyboards
+hidden partial alphanumeric_keys
+xkb_symbols "def_101" {
+ key <TLDE> { [ iacute, Iacute, 0, section ] };
+ key <LSGT> { [ less, greater ] };
+};
+
+// def_qwertz:
+// The standard Hungaryan qwertz layout
+hidden partial alphanumeric_keys
+xkb_symbols "def_qwertz" {
+ key <AD06> { [ z, Z, endash ] };
+ key <AB01> { [ y, Y, greater ] };
+};
+
+
+// def_qwerty:
+// The qwerty layout for people who familiar with the standard US layout
+hidden partial alphanumeric_keys
+xkb_symbols "def_qwerty" {
+ key <AD06> { [ y, Y, endash ] };
+ key <AB01> { [ z, Z, greater ] };
+};
+
+// def_dot:
+// The Hungarian standard is the comma on the keypad not decimal dot,
+// but programmers hate it
+hidden partial keypad_keys
+xkb_symbols "def_dot" {
+ key <KPDL> { [ KP_Delete, KP_Decimal ] };
+};
+
+
+// def_dead:
+// Dead keys support part
+hidden partial alphanumeric_keys
+xkb_symbols "def_dead" {
+ key <AE01> { [ 1, apostrophe, asciitilde, dead_tilde ] };
+ key <AE02> { [ 2, quotedbl, dead_caron, caron ] };
+ key <AE03> { [ 3, plus, asciicircum, dead_circumflex ] };
+ key <AE04> { [ 4, exclam, dead_breve, breve ] };
+ key <AE05> { [ 5, percent, dead_abovering, degree ] };
+ key <AE06> { [ 6, slash, dead_ogonek, ogonek ] };
+ key <AE07> { [ 7, equal, grave, dead_grave ] };
+ key <AE08> { [ 8, parenleft, dead_abovedot, abovedot ] };
+ key <AE09> { [ 9, parenright, dead_acute, acute ] };
+ key <AE10> { [ odiaeresis, Odiaeresis, dead_doubleacute, doubleacute ] };
+ key <AE11> { [ udiaeresis, Udiaeresis, dead_diaeresis, diaeresis ] };
+ key <AE12> { [ oacute, Oacute, dead_cedilla, cedilla ] };
+};
+
+// def_nodead:
+// Without dead keys support
+hidden partial alphanumeric_keys
+xkb_symbols "def_nodead" {
+ key <AE01> { [ 1, apostrophe, asciitilde ] };
+ key <AE02> { [ 2, quotedbl, caron ] };
+ key <AE03> { [ 3, plus, asciicircum ] };
+ key <AE04> { [ 4, exclam, breve ] };
+ key <AE05> { [ 5, percent, degree ] };
+ key <AE06> { [ 6, slash, ogonek ] };
+ key <AE07> { [ 7, equal, grave ] };
+ key <AE08> { [ 8, parenleft, abovedot ] };
+ key <AE09> { [ 9, parenright, acute ] };
+ key <AE10> { [ odiaeresis, Odiaeresis, doubleacute ] };
+ key <AE11> { [ udiaeresis, Udiaeresis, diaeresis ] };
+ key <AE12> { [ oacute, Oacute, cedilla ] };
+};
+
+
+// def_common:
+// The common part of all Hungarian layout above
+hidden partial alphanumeric_keys
+xkb_symbols "def_common" {
+ key <AD01> { [ q, Q, backslash ] };
+ key <AD02> { [ w, W, bar ] };
+ key <AD07> { [ u, U, EuroSign ] };
+ key <AD08> { [ i, I, Iacute, iacute ] };
+ key <AD09> { [ o, O, doublelowquotemark ] };
+ key <AD10> { [ p, P, rightdoublequotemark ] };
+ key <AD11> { [ odoubleacute, Odoubleacute, division ] };
+ key <AD12> { [ uacute, Uacute, multiply ] };
+
+ key <AC01> { [ a, A, adiaeresis, Adiaeresis ] };
+ key <AC02> { [ s, S, dstroke ] };
+ key <AC03> { [ d, D, Dstroke ] };
+ key <AC04> { [ f, F, bracketleft ] };
+ key <AC05> { [ g, G, bracketright ] };
+ key <AC07> { [ j, J, iacute, Iacute ] };
+ key <AC08> { [ k, K, lstroke ] };
+ key <AC09> { [ l, L, Lstroke ] };
+ key <AC10> { [ eacute, Eacute, dollar, cent ] };
+ key <AC11> { [ aacute, Aacute, ssharp ] };
+
+ key <BKSL> { [ udoubleacute, Udoubleacute, currency ] };
+
+ key <AB02> { [ x, X, numbersign ] };
+ key <AB03> { [ c, C, ampersand ] };
+ key <AB04> { [ v, V, at ] };
+ key <AB05> { [ b, B, braceleft ] };
+ key <AB06> { [ n, N, braceright ] };
+ key <AB07> { [ m, M, less ] };
+ key <AB08> { [ comma, question, semicolon ] };
+ key <AB09> { [ period, colon, ellipsis ] };
+ key <AB10> { [ minus, underscore, asterisk ] };
+
+};
diff --git a/xorg-server/xkeyboard-config/symbols/il b/xorg-server/xkeyboard-config/symbols/il
index 1ae574335..8bbeaaa51 100644
--- a/xorg-server/xkeyboard-config/symbols/il
+++ b/xorg-server/xkeyboard-config/symbols/il
@@ -1,251 +1,251 @@
-// based on a keyboard map from an 'xkb/symbols/il' file
-
-// This is a partial implemetation of the Israeli standard SI-1452
-// It does not implement changes to the English layout ("Alt-English"),
-// as I believe that it is not the job of this layout to modify the English
-// layout.
-partial default alphanumeric_keys
-xkb_symbols "basic" {
- // uses the kbd layout in use in Israel.
-
- name[Group1]= "Israel";
-
- key <AD01> { [ slash, Q ] };
- key <AD02> { [ apostrophe, W ] };
- key <AD04> { [ hebrew_resh, R ] };
- key <AD05> { [ hebrew_aleph,T ] };
- key <AD06> { [ hebrew_tet, Y ] };
- key <AD07> { [ hebrew_waw, U ] };
- key <AD08> { [ hebrew_finalnun, I ] };
- key <AD09> { [ hebrew_finalmem, O ] };
- key <AD10> { [ hebrew_pe, P ] };
-
- key <AC02> { [ hebrew_dalet,S ] };
- key <AC03> { [ hebrew_gimel,D ] };
- key <AC04> { [ hebrew_kaph, F ] };
- key <AC05> { [ hebrew_ayin, G ] };
- key <AC06> { [ hebrew_yod, H ] };
- key <AC07> { [ hebrew_chet, J ] };
- key <AC08> { [ hebrew_lamed, K ] };
- key <AC09> { [ hebrew_finalkaph, L ] };
- key <AC10> { [ hebrew_finalpe, colon ] };
- key <AC11> { [ comma, quotedbl ] };
-
- key <AB01> { [ hebrew_zain, Z ] };
- key <AB02> { [ hebrew_samech, X ] };
- key <AB03> { [ hebrew_bet, C ] };
- key <AB04> { [ hebrew_he, V ] };
- key <AB05> { [ hebrew_nun, B ] };
- key <AB06> { [ hebrew_mem, N ] };
- key <AB07> { [ hebrew_zade, M ] };
- // Mirrored:
- key <AB08> { [ hebrew_taw, greater ] };
- key <AB09> { [ hebrew_finalzade, less ] };
-
- key.type[Group1] = "THREE_LEVEL";
-
- key <TLDE> { [ semicolon, asciitilde,0x10005b0 ]}; // Sheva
- key <AB10> { [ period, question, 0x10005c3 ]}; // Sof Pasuq
- key <AD03> { [ hebrew_qoph, E, EuroSign ]};
- key <AC01> { [ hebrew_shin, A, 0x10020AA ]};
-
- // The following may get overriden by the iso9995-3(basic101) symbols.
- // therefore they are included here.
- // Including them isn't a great idea (for instance: what if group 1 uses
- // UK keyboard mapping, and maps shift-3 to sterling? This mapping won't
- // preserve that, and I'm not sure that this is a good feature.
- key <AE01> { [ 1, exclam , 0x10005b1 ]}; // H. Segol
- key <AE02> { [ 2, at , 0x10005b2 ]}; // H. Patah
- key <AE03> { [ 3, numbersign , 0x10005b3 ]}; // H. Qamats
- key <AE04> { [ 4, dollar , 0x10005b4 ]}; // Hiriq
- key <AE05> { [ 5, percent , 0x10005b5 ]}; // Tsere
- key <AE06> { [ 6, asciicircum , 0x10005b6 ]}; // Segol
- key <AE07> { [ 7, ampersand , 0x10005b7 ]}; // Patah
- key <AE08> { [ 8, asterisk , 0x10005b8 ]}; // Qamats
- // Mirrored:
- key <AE09> { [ 9, parenright , 0x10005c2 ]}; // Sin dot
- key <AE10> { [ 0, parenleft , 0x10005c1 ]}; // Shin dot
- key <AE11> { [ minus, underscore , 0x10005b9 ]}; // Holam
- key <AE12> { [ equal, plus , 0x10005bc ]}; // Dagesh/Shuruq
-
- // Mirrored:
- key <AD11> { [ bracketright, braceright, 0x10005bf ]}; // Rafe
- key <AD12> { [ bracketleft, braceleft, 0x10005bd ]}; // Meteg
-
- key <BKSL> { [ backslash, bar, 0x10005bb ]}; // Qubuts
-
- include "level3(ralt_switch)"
-};
-
-
-// nikud patter based on Dekel Tsur's Hebrew mapping for LyX
-partial alphanumeric_keys
-xkb_symbols "lyx" {
- name[Group1]= "Israel - lyx";
-
- key <TLDE> { [ semicolon, asciitilde ] };
- // On some key (e.g. AD01, right below) there is not yet mapping for the
- // second shift level. Since I could not figure a simple way to map this
- // to "emit nothing", it is currently mapped to the same letter of the
- // first shift level (avoiding mapping may risk it be used by a character
- // from a different group).
- key <AD01> { [ slash, slash ] };
- key <AD02> { [ apostrophe, apostrophe ] };
- key <AD03> { [ hebrew_qoph, 0x10005b8 ] }; // Qamats
- key <AD04> { [ hebrew_resh, 0x10005bc ] }; // Dagesh/Shuruq
- key <AD05> { [ hebrew_aleph, 0x100200e ] }; // LRM
- key <AD06> { [ hebrew_tet, 0x100200f ] }; // RLM
- key <AD07> { [ hebrew_waw, 0x10005b9 ] }; // Holam
- key <AD08> { [ hebrew_finalnun,hebrew_finalnun] };
- key <AD09> { [ hebrew_finalmem,hebrew_finalmem] };
- key <AD10> { [ hebrew_pe, 0x10005b7 ] }; // Patah
-
- key <AC01> { [ hebrew_shin, 0x10005b0 ] }; // Sheva
- key <AC02> { [ hebrew_dalet, 0x10005bc ] }; // Dagesh/Shuruq
- key <AC03> { [ hebrew_gimel, hebrew_gimel ] };
- key <AC04> { [ hebrew_kaph, hebrew_kaph ] };
- key <AC05> { [ hebrew_ayin, 0x10005c2 ] }; // Sin dot
- key <AC06> { [ hebrew_yod, 0x10005c1 ] }; // Shin dot
- key <AC07> { [ hebrew_chet, 0x10005b4 ] }; // Hiriq
- key <AC08> { [ hebrew_lamed, 0x10020aa ] }; // NIS
- key <AC09> { [ hebrew_finalkaph,hebrew_finalkaph] };
- key <AC10> { [ hebrew_finalpe, colon ] };
- key <AC11> { [ comma, quotedbl ] };
-
- key <AB01> { [ hebrew_zain, hebrew_zain ] };
- key <AB02> { [ hebrew_samech,0x10005b6 ] }; // Segol
- key <AB03> { [ hebrew_bet, 0x10005bb ] }; // Qubuts
- key <AB04> { [ hebrew_he, 0x10005b1 ] }; // H. Segol
- key <AB05> { [ hebrew_nun, 0x10005b2 ] }; // H. Patah
- key <AB06> { [ hebrew_mem, 0x10005b3 ] }; // H. Qamats
- key <AB07> { [ hebrew_zade, 0x10005b5 ] }; // Tsere
- key <AB08> { [ hebrew_taw, greater ] };
- key <AB09> { [ hebrew_finalzade, less ] };
- key <AB10> { [ period, question ] };
-
- // Note the parens mirroring below:
- key <AD11> { [ bracketright, braceright ] };
- key <AD12> { [ bracketleft, braceleft ] };
- key <AE09> { [ 9 , parenright ] };
- key <AE10> { [ 0 , parenleft ] };
-
- key <AE11> { [ minus , 0x10005be ] }; // H. Hiphen
- key <AE12> { [ equal , plus ] };
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "phonetic" {
-
- // uses the phonetic layout from old Slackware 'il.map' file
-
- name[Group1]= "Israel - Phonetic";
-
- key <AE12> { [ equal, plus, hebrew_doublelowline, hebrew_doublelowline ]};
-
- key <LatQ> { [ hebrew_qoph, hebrew_qoph ] };
- key <LatW> { [ hebrew_waw, hebrew_waw ] };
- key <LatE> { [ hebrew_aleph, hebrew_aleph ] };
- key <LatR> { [ hebrew_resh, hebrew_resh ] };
- key <LatT> { [ hebrew_taw, hebrew_tet ] };
- key <LatY> { [ hebrew_ayin, hebrew_ayin ] };
- key <LatU> { [ hebrew_waw, hebrew_waw ] };
- key <LatI> { [ hebrew_yod, hebrew_yod ] };
- key <LatO> { [ hebrew_samech, hebrew_samech ] };
- key <LatP> { [ hebrew_pe, hebrew_finalpe ] };
-
- key <LatA> { [ hebrew_aleph, hebrew_aleph ] };
- key <LatS> { [ hebrew_shin, hebrew_shin ] };
- key <LatD> { [ hebrew_dalet, hebrew_dalet ] };
- key <LatF> { [ hebrew_pe, hebrew_finalpe ] };
- key <LatG> { [ hebrew_gimel, hebrew_gimel ] };
- key <LatH> { [ hebrew_he, hebrew_he ] };
- key <LatJ> { [ hebrew_yod, hebrew_yod ] };
- key <LatK> { [ hebrew_kaph, hebrew_finalkaph ] };
- key <LatL> { [ hebrew_lamed, hebrew_lamed ] };
-
- key <LatZ> { [ hebrew_zain, hebrew_zain ] };
- key <LatX> { [ hebrew_chet, hebrew_chet ] };
- key <LatC> { [ hebrew_zade, hebrew_finalzade ] };
- key <LatV> { [ hebrew_waw, hebrew_waw ] };
- key <LatB> { [ hebrew_bet, hebrew_bet ] };
- key <LatN> { [ hebrew_nun, hebrew_finalnun ] };
- key <LatM> { [ hebrew_mem, hebrew_finalmem ] };
-};
-
-// The 'Biblical Hebrew' keyboard layout as defined by Tiro for use with the
-// 'SBL Hebrew' font was added 2006.11.13 by Sebastian J. Bronner
-// <waschtl@sbronner.com>. Its primary features (as compared to the lyx layout)
-// are that the consonants are in the Israeli standard positions, that a great
-// multitude of glyphs can be input directly from the keyboard, and that it is
-// the closest thing to a standard layout a theologian can hope for.
-// Documentation (including printable keyboard tables), SBL Hebrew font, and
-// keyboard layout for Windows are available at
-// http://www.sbl-site.org/Resources/Resources_BiblicalFonts.aspx.
-//
-// It is of interest that the 'basic' layout defined first in this file (as
-// ships with x.org disagrees in the non-consonant characters that the Tiro-
-// layout claims to be the Israeli standard. Tiros apparent diligence in the
-// PDF-documentation accompanying the keyboard-layout-files lead me to put
-// greater stock in their claim than in this file. Therefore, the 'biblical'
-// layout below does not include 'il(basic)' but redoes the _whole_ thing from
-// scratch.
-
-partial alphanumeric_keys
-xkb_symbols "biblical" {
- name[Group1]= "Israel - Biblical Hebrew (Tiro)";
- key.type = "FOUR_LEVEL_SEMIALPHABETIC";
-
- key <TLDE> { [ U05C3, U05AE, semicolon, asciitilde ] };
- key <AE01> { [ 1, U05A9, VoidSymbol, exclam ] };
- key <AE02> { [ 2, U0599, VoidSymbol, at ] };
- key <AE03> { [ 3, U0592, VoidSymbol, numbersign ] };
- key <AE04> { [ 4, U05AF, NewSheqelSign, dollar ] };
- key <AE05> { [ 5, VoidSymbol, U200D, percent ] };
- key <AE06> { [ 6, U05B9, U200C, asciicircum ] };
- key <AE07> { [ 7, U05BF, U034F, ampersand ] };
- key <AE08> { [ 8, U05C2, U200E, asterisk ] };
- key <AE09> { [ 9, U05C1, U200F, parenright ] };
- key <AE10> { [ 0, U059D, U25CC, parenleft ] };
- key <AE11> { [ U05BE, U05A0, minus, underscore ] };
- key <AE12> { [ equal, U05BC, VoidSymbol, plus ] };
-
- key <AD01> { [ U0307, U05C4, U0308, slash ] };
- key <AD02> { [ U05F3, U05AC, U05F4, apostrophe ] };
- key <AD03> { [ hebrew_qoph, U05AB, U20AC ] };
- key <AD04> { [ hebrew_resh, U059F ] };
- key <AD05> { [ hebrew_aleph, U0593 ] };
- key <AD06> { [ hebrew_tet, U059E ] };
- key <AD07> { [ hebrew_waw, U059C, U05F0 ] };
- key <AD08> { [ hebrew_finalnun, U05A1 ] };
- key <AD09> { [ hebrew_finalmem, U0595 ] };
- key <AD10> { [ hebrew_pe, U0594 ] };
- key <AD11> { [ bracketright, U0597, VoidSymbol, braceright ] };
- key <AD12> { [ bracketleft, U0598, VoidSymbol, braceleft ] };
- key <BKSL> { [ U05C0, U05A8, backslash, bar ] };
-
- key <AC01> { [ hebrew_shin, U05BD ] };
- key <AC02> { [ hebrew_dalet, U05B0 ] };
- key <AC03> { [ hebrew_gimel, U05BB ] };
- key <AC04> { [ hebrew_kaph, U05B4 ] };
- key <AC05> { [ hebrew_ayin, U05B1 ] };
- key <AC06> { [ hebrew_yod, U05B6, U05F2 ] };
- key <AC07> { [ hebrew_chet, U05B5, U05F1 ] };
- key <AC08> { [ hebrew_lamed, U05B3 ] };
- key <AC09> { [ hebrew_finalkaph, U05B8, U05C7 ] };
- key <AC10> { [ hebrew_finalpe, U05B2, VoidSymbol, colon ] };
- key <AC11> { [ U059a, U05B7, comma, quotedbl ] };
-
- key <AB01> { [ hebrew_zain, U05C5 ] };
- key <AB02> { [ hebrew_samech, U05A4 ] };
- key <AB03> { [ hebrew_bet, U05AA, U05A2 ] };
- key <AB04> { [ hebrew_he, U05A6 ] };
- key <AB05> { [ hebrew_nun, U05A5, U05C6 ] };
- key <AB06> { [ hebrew_mem, U05A7 ] };
- key <AB07> { [ hebrew_zade, U059B ] };
- key <AB08> { [ hebrew_taw, U0591, VoidSymbol, greater ] };
- key <AB09> { [ hebrew_finalzade, U0596, VoidSymbol, less ] };
- key <AB10> { [ U05AD, U05A3, period, question ] };
-
- key <SPCE> { [ space, space, thinspace, nobreakspace ] };
-};
+// based on a keyboard map from an 'xkb/symbols/il' file
+
+// This is a partial implemetation of the Israeli standard SI-1452
+// It does not implement changes to the English layout ("Alt-English"),
+// as I believe that it is not the job of this layout to modify the English
+// layout.
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+ // uses the kbd layout in use in Israel.
+
+ name[Group1]= "Hebrew";
+
+ key <AD01> { [ slash, Q ] };
+ key <AD02> { [ apostrophe, W ] };
+ key <AD04> { [ hebrew_resh, R ] };
+ key <AD05> { [ hebrew_aleph,T ] };
+ key <AD06> { [ hebrew_tet, Y ] };
+ key <AD07> { [ hebrew_waw, U ] };
+ key <AD08> { [ hebrew_finalnun, I ] };
+ key <AD09> { [ hebrew_finalmem, O ] };
+ key <AD10> { [ hebrew_pe, P ] };
+
+ key <AC02> { [ hebrew_dalet,S ] };
+ key <AC03> { [ hebrew_gimel,D ] };
+ key <AC04> { [ hebrew_kaph, F ] };
+ key <AC05> { [ hebrew_ayin, G ] };
+ key <AC06> { [ hebrew_yod, H ] };
+ key <AC07> { [ hebrew_chet, J ] };
+ key <AC08> { [ hebrew_lamed, K ] };
+ key <AC09> { [ hebrew_finalkaph, L ] };
+ key <AC10> { [ hebrew_finalpe, colon ] };
+ key <AC11> { [ comma, quotedbl ] };
+
+ key <AB01> { [ hebrew_zain, Z ] };
+ key <AB02> { [ hebrew_samech, X ] };
+ key <AB03> { [ hebrew_bet, C ] };
+ key <AB04> { [ hebrew_he, V ] };
+ key <AB05> { [ hebrew_nun, B ] };
+ key <AB06> { [ hebrew_mem, N ] };
+ key <AB07> { [ hebrew_zade, M ] };
+ // Mirrored:
+ key <AB08> { [ hebrew_taw, greater ] };
+ key <AB09> { [ hebrew_finalzade, less ] };
+
+ key.type[Group1] = "THREE_LEVEL";
+
+ key <TLDE> { [ semicolon, asciitilde,0x10005b0 ]}; // Sheva
+ key <AB10> { [ period, question, 0x10005c3 ]}; // Sof Pasuq
+ key <AD03> { [ hebrew_qoph, E, EuroSign ]};
+ key <AC01> { [ hebrew_shin, A, 0x10020AA ]};
+
+ // The following may get overriden by the iso9995-3(basic101) symbols.
+ // therefore they are included here.
+ // Including them isn't a great idea (for instance: what if group 1 uses
+ // UK keyboard mapping, and maps shift-3 to sterling? This mapping won't
+ // preserve that, and I'm not sure that this is a good feature.
+ key <AE01> { [ 1, exclam , 0x10005b1 ]}; // H. Segol
+ key <AE02> { [ 2, at , 0x10005b2 ]}; // H. Patah
+ key <AE03> { [ 3, numbersign , 0x10005b3 ]}; // H. Qamats
+ key <AE04> { [ 4, dollar , 0x10005b4 ]}; // Hiriq
+ key <AE05> { [ 5, percent , 0x10005b5 ]}; // Tsere
+ key <AE06> { [ 6, asciicircum , 0x10005b6 ]}; // Segol
+ key <AE07> { [ 7, ampersand , 0x10005b7 ]}; // Patah
+ key <AE08> { [ 8, asterisk , 0x10005b8 ]}; // Qamats
+ // Mirrored:
+ key <AE09> { [ 9, parenright , 0x10005c2 ]}; // Sin dot
+ key <AE10> { [ 0, parenleft , 0x10005c1 ]}; // Shin dot
+ key <AE11> { [ minus, underscore , 0x10005b9 ]}; // Holam
+ key <AE12> { [ equal, plus , 0x10005bc ]}; // Dagesh/Shuruq
+
+ // Mirrored:
+ key <AD11> { [ bracketright, braceright, 0x10005bf ]}; // Rafe
+ key <AD12> { [ bracketleft, braceleft, 0x10005bd ]}; // Meteg
+
+ key <BKSL> { [ backslash, bar, 0x10005bb ]}; // Qubuts
+
+ include "level3(ralt_switch)"
+};
+
+
+// nikud patter based on Dekel Tsur's Hebrew mapping for LyX
+partial alphanumeric_keys
+xkb_symbols "lyx" {
+ name[Group1]= "Hebrew (lyx)";
+
+ key <TLDE> { [ semicolon, asciitilde ] };
+ // On some key (e.g. AD01, right below) there is not yet mapping for the
+ // second shift level. Since I could not figure a simple way to map this
+ // to "emit nothing", it is currently mapped to the same letter of the
+ // first shift level (avoiding mapping may risk it be used by a character
+ // from a different group).
+ key <AD01> { [ slash, slash ] };
+ key <AD02> { [ apostrophe, apostrophe ] };
+ key <AD03> { [ hebrew_qoph, 0x10005b8 ] }; // Qamats
+ key <AD04> { [ hebrew_resh, 0x10005bc ] }; // Dagesh/Shuruq
+ key <AD05> { [ hebrew_aleph, 0x100200e ] }; // LRM
+ key <AD06> { [ hebrew_tet, 0x100200f ] }; // RLM
+ key <AD07> { [ hebrew_waw, 0x10005b9 ] }; // Holam
+ key <AD08> { [ hebrew_finalnun,hebrew_finalnun] };
+ key <AD09> { [ hebrew_finalmem,hebrew_finalmem] };
+ key <AD10> { [ hebrew_pe, 0x10005b7 ] }; // Patah
+
+ key <AC01> { [ hebrew_shin, 0x10005b0 ] }; // Sheva
+ key <AC02> { [ hebrew_dalet, 0x10005bc ] }; // Dagesh/Shuruq
+ key <AC03> { [ hebrew_gimel, hebrew_gimel ] };
+ key <AC04> { [ hebrew_kaph, hebrew_kaph ] };
+ key <AC05> { [ hebrew_ayin, 0x10005c2 ] }; // Sin dot
+ key <AC06> { [ hebrew_yod, 0x10005c1 ] }; // Shin dot
+ key <AC07> { [ hebrew_chet, 0x10005b4 ] }; // Hiriq
+ key <AC08> { [ hebrew_lamed, 0x10020aa ] }; // NIS
+ key <AC09> { [ hebrew_finalkaph,hebrew_finalkaph] };
+ key <AC10> { [ hebrew_finalpe, colon ] };
+ key <AC11> { [ comma, quotedbl ] };
+
+ key <AB01> { [ hebrew_zain, hebrew_zain ] };
+ key <AB02> { [ hebrew_samech,0x10005b6 ] }; // Segol
+ key <AB03> { [ hebrew_bet, 0x10005bb ] }; // Qubuts
+ key <AB04> { [ hebrew_he, 0x10005b1 ] }; // H. Segol
+ key <AB05> { [ hebrew_nun, 0x10005b2 ] }; // H. Patah
+ key <AB06> { [ hebrew_mem, 0x10005b3 ] }; // H. Qamats
+ key <AB07> { [ hebrew_zade, 0x10005b5 ] }; // Tsere
+ key <AB08> { [ hebrew_taw, greater ] };
+ key <AB09> { [ hebrew_finalzade, less ] };
+ key <AB10> { [ period, question ] };
+
+ // Note the parens mirroring below:
+ key <AD11> { [ bracketright, braceright ] };
+ key <AD12> { [ bracketleft, braceleft ] };
+ key <AE09> { [ 9 , parenright ] };
+ key <AE10> { [ 0 , parenleft ] };
+
+ key <AE11> { [ minus , 0x10005be ] }; // H. Hiphen
+ key <AE12> { [ equal , plus ] };
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "phonetic" {
+
+ // uses the phonetic layout from old Slackware 'il.map' file
+
+ name[Group1]= "Hebrew (phonetic)";
+
+ key <AE12> { [ equal, plus, hebrew_doublelowline, hebrew_doublelowline ]};
+
+ key <LatQ> { [ hebrew_qoph, hebrew_qoph ] };
+ key <LatW> { [ hebrew_waw, hebrew_waw ] };
+ key <LatE> { [ hebrew_aleph, hebrew_aleph ] };
+ key <LatR> { [ hebrew_resh, hebrew_resh ] };
+ key <LatT> { [ hebrew_taw, hebrew_tet ] };
+ key <LatY> { [ hebrew_ayin, hebrew_ayin ] };
+ key <LatU> { [ hebrew_waw, hebrew_waw ] };
+ key <LatI> { [ hebrew_yod, hebrew_yod ] };
+ key <LatO> { [ hebrew_samech, hebrew_samech ] };
+ key <LatP> { [ hebrew_pe, hebrew_finalpe ] };
+
+ key <LatA> { [ hebrew_aleph, hebrew_aleph ] };
+ key <LatS> { [ hebrew_shin, hebrew_shin ] };
+ key <LatD> { [ hebrew_dalet, hebrew_dalet ] };
+ key <LatF> { [ hebrew_pe, hebrew_finalpe ] };
+ key <LatG> { [ hebrew_gimel, hebrew_gimel ] };
+ key <LatH> { [ hebrew_he, hebrew_he ] };
+ key <LatJ> { [ hebrew_yod, hebrew_yod ] };
+ key <LatK> { [ hebrew_kaph, hebrew_finalkaph ] };
+ key <LatL> { [ hebrew_lamed, hebrew_lamed ] };
+
+ key <LatZ> { [ hebrew_zain, hebrew_zain ] };
+ key <LatX> { [ hebrew_chet, hebrew_chet ] };
+ key <LatC> { [ hebrew_zade, hebrew_finalzade ] };
+ key <LatV> { [ hebrew_waw, hebrew_waw ] };
+ key <LatB> { [ hebrew_bet, hebrew_bet ] };
+ key <LatN> { [ hebrew_nun, hebrew_finalnun ] };
+ key <LatM> { [ hebrew_mem, hebrew_finalmem ] };
+};
+
+// The 'Biblical Hebrew' keyboard layout as defined by Tiro for use with the
+// 'SBL Hebrew' font was added 2006.11.13 by Sebastian J. Bronner
+// <waschtl@sbronner.com>. Its primary features (as compared to the lyx layout)
+// are that the consonants are in the Israeli standard positions, that a great
+// multitude of glyphs can be input directly from the keyboard, and that it is
+// the closest thing to a standard layout a theologian can hope for.
+// Documentation (including printable keyboard tables), SBL Hebrew font, and
+// keyboard layout for Windows are available at
+// http://www.sbl-site.org/Resources/Resources_BiblicalFonts.aspx.
+//
+// It is of interest that the 'basic' layout defined first in this file (as
+// ships with x.org disagrees in the non-consonant characters that the Tiro-
+// layout claims to be the Israeli standard. Tiros apparent diligence in the
+// PDF-documentation accompanying the keyboard-layout-files lead me to put
+// greater stock in their claim than in this file. Therefore, the 'biblical'
+// layout below does not include 'il(basic)' but redoes the _whole_ thing from
+// scratch.
+
+partial alphanumeric_keys
+xkb_symbols "biblical" {
+ name[Group1]= "Hebrew (Biblical, Tiro)";
+ key.type = "FOUR_LEVEL_SEMIALPHABETIC";
+
+ key <TLDE> { [ U05C3, U05AE, semicolon, asciitilde ] };
+ key <AE01> { [ 1, U05A9, VoidSymbol, exclam ] };
+ key <AE02> { [ 2, U0599, VoidSymbol, at ] };
+ key <AE03> { [ 3, U0592, VoidSymbol, numbersign ] };
+ key <AE04> { [ 4, U05AF, NewSheqelSign, dollar ] };
+ key <AE05> { [ 5, VoidSymbol, U200D, percent ] };
+ key <AE06> { [ 6, U05B9, U200C, asciicircum ] };
+ key <AE07> { [ 7, U05BF, U034F, ampersand ] };
+ key <AE08> { [ 8, U05C2, U200E, asterisk ] };
+ key <AE09> { [ 9, U05C1, U200F, parenright ] };
+ key <AE10> { [ 0, U059D, U25CC, parenleft ] };
+ key <AE11> { [ U05BE, U05A0, minus, underscore ] };
+ key <AE12> { [ equal, U05BC, VoidSymbol, plus ] };
+
+ key <AD01> { [ U0307, U05C4, U0308, slash ] };
+ key <AD02> { [ U05F3, U05AC, U05F4, apostrophe ] };
+ key <AD03> { [ hebrew_qoph, U05AB, U20AC ] };
+ key <AD04> { [ hebrew_resh, U059F ] };
+ key <AD05> { [ hebrew_aleph, U0593 ] };
+ key <AD06> { [ hebrew_tet, U059E ] };
+ key <AD07> { [ hebrew_waw, U059C, U05F0 ] };
+ key <AD08> { [ hebrew_finalnun, U05A1 ] };
+ key <AD09> { [ hebrew_finalmem, U0595 ] };
+ key <AD10> { [ hebrew_pe, U0594 ] };
+ key <AD11> { [ bracketright, U0597, VoidSymbol, braceright ] };
+ key <AD12> { [ bracketleft, U0598, VoidSymbol, braceleft ] };
+ key <BKSL> { [ U05C0, U05A8, backslash, bar ] };
+
+ key <AC01> { [ hebrew_shin, U05BD ] };
+ key <AC02> { [ hebrew_dalet, U05B0 ] };
+ key <AC03> { [ hebrew_gimel, U05BB ] };
+ key <AC04> { [ hebrew_kaph, U05B4 ] };
+ key <AC05> { [ hebrew_ayin, U05B1 ] };
+ key <AC06> { [ hebrew_yod, U05B6, U05F2 ] };
+ key <AC07> { [ hebrew_chet, U05B5, U05F1 ] };
+ key <AC08> { [ hebrew_lamed, U05B3 ] };
+ key <AC09> { [ hebrew_finalkaph, U05B8, U05C7 ] };
+ key <AC10> { [ hebrew_finalpe, U05B2, VoidSymbol, colon ] };
+ key <AC11> { [ U059a, U05B7, comma, quotedbl ] };
+
+ key <AB01> { [ hebrew_zain, U05C5 ] };
+ key <AB02> { [ hebrew_samech, U05A4 ] };
+ key <AB03> { [ hebrew_bet, U05AA, U05A2 ] };
+ key <AB04> { [ hebrew_he, U05A6 ] };
+ key <AB05> { [ hebrew_nun, U05A5, U05C6 ] };
+ key <AB06> { [ hebrew_mem, U05A7 ] };
+ key <AB07> { [ hebrew_zade, U059B ] };
+ key <AB08> { [ hebrew_taw, U0591, VoidSymbol, greater ] };
+ key <AB09> { [ hebrew_finalzade, U0596, VoidSymbol, less ] };
+ key <AB10> { [ U05AD, U05A3, period, question ] };
+
+ key <SPCE> { [ space, space, thinspace, nobreakspace ] };
+};
diff --git a/xorg-server/xkeyboard-config/symbols/in b/xorg-server/xkeyboard-config/symbols/in
index 75447148e..822c12a21 100644
--- a/xorg-server/xkeyboard-config/symbols/in
+++ b/xorg-server/xkeyboard-config/symbols/in
@@ -22,7 +22,7 @@
default partial alphanumeric_keys
xkb_symbols "deva" {
// March 2004 -- David Holl <smyrph+dev_xkb@ece.wpi.edu>
- name[Group1]="India";
+ name[Group1]="Indian";
key.type="FOUR_LEVEL";
@@ -97,7 +97,7 @@ xkb_symbols "deva" {
partial alphanumeric_keys
xkb_symbols "bolnagri" {
- name[Group1] = "India - Hindi Bolnagri";
+ name[Group1] = "Hindi (Bolnagri)";
key.type="FOUR_LEVEL";
//Top Alphanumeric row
// Roman digits
@@ -167,7 +167,7 @@ xkb_symbols "bolnagri" {
partial alphanumeric_keys
xkb_symbols "ben" {
- name[Group1]= "India - Bengali";
+ name[Group1]= "Bengali";
// Mainly numbers.
key <AE01> { [ U09E7 ] };
@@ -232,7 +232,7 @@ xkb_symbols "ben" {
};
xkb_symbols "ben_probhat" {
- name[Group1]= "India - Bengali Probhat";
+ name[Group1]= "Bengali (Probhat)";
key <ESC> { [ Escape ] };
// numbers
@@ -306,7 +306,7 @@ xkb_symbols "ben_probhat" {
partial alphanumeric_keys
xkb_symbols "guj" {
- name[Group1]= "India - Gujarati";
+ name[Group1]= "Gujarati";
// Mainly numbers.
key <AE01> { [ U0AE7, U0A8D ] };
@@ -377,7 +377,7 @@ xkb_symbols "kan" {
// Date : Wed Nov 13 17:22:58 IST 2002
// Kannada digits mapped in basic only
- name[Group1]= "India - Kannada";
+ name[Group1]= "Kannada";
key <TLDE> { [ U0cca, U0c92 ] };
key <AE01> { [ U0ce7 ] };
@@ -445,7 +445,7 @@ xkb_symbols "kan" {
partial alphanumeric_keys
xkb_symbols "mal" {
- name[Group1] = "India - Malayalam";
+ name[Group1] = "Malayalam";
//From grave to backslash (\)
@@ -534,7 +534,7 @@ xkb_symbols "mal" {
partial alphanumeric_keys
xkb_symbols "mal_lalitha" {
- name[Group1] = "India - Malayalam Lalitha";
+ name[Group1] = "Malayalam (Lalitha)";
key.type="FOUR_LEVEL";
//Top Alphanumeric row
// Roman digits
@@ -607,7 +607,7 @@ xkb_symbols "ori" {
// Author: G Karunakar <karunakar@freedomink.org>
// Date: Wed Nov 13 18:16:19 IST 2002
- name[Group1]= "India - Oriya";
+ name[Group1]= "Oriya";
key <AE01> { [ U0b67 ] };
key <AE02> { [ U0b68 ] };
@@ -667,7 +667,7 @@ xkb_symbols "ori" {
// INSCRIPT
partial alphanumeric_keys
xkb_symbols "tam" {
- name[Group1]= "India - Tamil";
+ name[Group1]= "Tamil";
key <TLDE> { [ U0BCA, U0B92 ] };
@@ -739,7 +739,7 @@ xkb_symbols "tam_unicode" {
// Date : Fri Sep 4 11:32:00 CST 2009
// Mapping:
- name[Group1]= "India - Tamil Unicode";
+ name[Group1]= "Tamil (Unicode)";
// granthas
key <TLDE> { [ apostrophe, asciitilde ] };
@@ -804,7 +804,7 @@ xkb_symbols "tam_keyboard_with_numerals" {
// Date : Fri Sep 4 11:33:00 CST 2009
// Mapping:
- name[Group1]= "India - Tamil Keyboard with Numerals";
+ name[Group1]= "Tamil (keyboard with numerals)";
// Mainly numbers.
key <TLDE> { [ apostrophe, asciitilde ] };
@@ -868,7 +868,7 @@ xkb_symbols "tam_TSCII" {
// Author : Thuraiappah Vaseeharan <vasee@ieee.org>
// Last Modified: Sat Jan 5 17:11:26 CST 2002
- name[Group1]= "India - Tamil TSCII Typewriter";
+ name[Group1]= "Tamil (TSCII typewriter)";
key <AE01> { [ 0x10000b7, 0x10000a4 ] }; // aytham
key <AE02> { [ 0x1000082, 0x10000a5 ] }; // shri
@@ -924,7 +924,7 @@ xkb_symbols "tam_TAB" {
// Author: Thuraiappah Vaseeharan <t_vasee@yahoo.com>
// Date : Sun Aug 12 02:23:00 CDT 2001
- name[Group1]= "India - Tamil TAB Typewriter";
+ name[Group1]= "Tamil (TAB typewriter)";
// numeral row
key <AE01> { [ 0x10000e7, 0x10000a7 ] } ;
@@ -980,7 +980,7 @@ xkb_symbols "tel" {
// Date:
// See layout at http://www.indlinux.org/keymap/telugu.php
- name[Group1]= "India - Telugu";
+ name[Group1]= "Telugu";
key <TLDE> { [ U0c4a, U0c12 ] };
key <AE01> { [ U0c67 ] };
@@ -1042,26 +1042,26 @@ xkb_symbols "tel" {
partial alphanumeric_keys
xkb_symbols "urd-phonetic" {
include "pk(urd-phonetic)"
- name[Group1]= "India - Urdu, Phonetic";
+ name[Group1]= "Urdu (phonetic)";
};
partial alphanumeric_keys
xkb_symbols "urd-phonetic3" {
include "pk(urd-crulp)"
- name[Group1]= "India - Urdu, Alternative phonetic";
+ name[Group1]= "Urdu (alternative phonetic)";
};
partial alphanumeric_keys
xkb_symbols "urd-winkeys" {
include "pk(urd-nla)"
- name[Group1]= "India - Urdu, Winkeys";
+ name[Group1]= "Urdu (WinKeys)";
};
// based on a keyboard map from an 'xkb/symbols/gur' file
partial alphanumeric_keys
xkb_symbols "guru" {
- name[Group1]= "India - Gurmukhi";
+ name[Group1]= "Punjabi (Gurmukhi)";
// Mainly numbers.
key <AE01> { [ U0A67 ] };
@@ -1132,7 +1132,7 @@ xkb_symbols "guru" {
partial alphanumeric_keys
xkb_symbols "jhelum" {
- name[Group1] = "India - Gurmukhi Jhelum";
+ name[Group1] = "Punjabi (Gurmukhi Jhelum)";
key.type="FOUR_LEVEL";
//Top Alphanumeric row
// Roman digits
@@ -1265,7 +1265,7 @@ xkb_symbols "olpc" {
partial alphanumeric_keys
xkb_symbols "hin-wx" {
- name[Group1]= "India - Hindi Wx";
+ name[Group1]= "Hindi (Wx)";
key <TLDE> { [ grave, asciitilde, 2, 3 ] };
@@ -1330,7 +1330,7 @@ xkb_symbols "hin-wx" {
partial alphanumeric_keys
xkb_symbols "eng" {
- name[Group1]= "India - English with RupeeSign";
+ name[Group1]= "English (India, with RupeeSign)";
include "us(basic)"
@@ -1351,7 +1351,7 @@ xkb_symbols "eng" {
partial alphanumeric_keys
xkb_symbols "mal_enhanced" {
- name[Group1] = "India - Malayalam enhanced Inscript with Rupee Sign";
+ name[Group1] = "Malayalam (enhanced Inscript with Rupee Sign)";
//From grave to backslash (\)
diff --git a/xorg-server/xkeyboard-config/symbols/iq b/xorg-server/xkeyboard-config/symbols/iq
index f30332940..5430b53bf 100644
--- a/xorg-server/xkeyboard-config/symbols/iq
+++ b/xorg-server/xkeyboard-config/symbols/iq
@@ -1,33 +1,33 @@
-// Iraque keyboard layout,
-
-// 3-Level layout
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
- include "ara(basic)"
- name[Group1]= "Iraq";
-};
-
-partial alphanumeric_keys
-xkb_symbols "ku" {
- include "tr(ku)"
- name[Group1]= "Iraq - Kurdish, Latin Q";
-};
-
-partial alphanumeric_keys
-xkb_symbols "ku_f" {
- include "tr(ku_f)"
- name[Group1]= "Iraq - Kurdish, (F)";
-};
-
-partial alphanumeric_keys
-xkb_symbols "ku_alt" {
- include "tr(ku_alt)"
- name[Group1]= "Iraq - Kurdish, Latin Alt-Q";
-};
-
-partial alphanumeric_keys
-xkb_symbols "ku_ara" {
- include "ir(ku_ara)"
- name[Group1]= "Iraq - Kurdish, Arabic-Latin";
-};
+// Iraque keyboard layout,
+
+// 3-Level layout
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+ include "ara(basic)"
+ name[Group1]= "Iraqi";
+};
+
+partial alphanumeric_keys
+xkb_symbols "ku" {
+ include "tr(ku)"
+ name[Group1]= "Kurdish (Iraq, Latin Q)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "ku_f" {
+ include "tr(ku_f)"
+ name[Group1]= "Kurdish (Iraq, F)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "ku_alt" {
+ include "tr(ku_alt)"
+ name[Group1]= "Kurdish (Iraq, Latin Alt-Q)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "ku_ara" {
+ include "ir(ku_ara)"
+ name[Group1]= "Kurdish (Iraq, Arabic-Latin)";
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ir b/xorg-server/xkeyboard-config/symbols/ir
index 1832e819b..94bdede28 100644
--- a/xorg-server/xkeyboard-config/symbols/ir
+++ b/xorg-server/xkeyboard-config/symbols/ir
@@ -14,7 +14,7 @@
partial default alphanumeric_keys
xkb_symbols "pes" {
- name[Group1]= "Iran";
+ name[Group1]= "Persian";
include "ir(pes_part_basic)"
include "ir(pes_part_ext)"
@@ -26,7 +26,7 @@ xkb_symbols "pes" {
partial alphanumeric_keys
xkb_symbols "pes_keypad" {
- name[Group1]= "Iran - Persian, with Persian Keypad";
+ name[Group1]= "Persian (with Persian Keypad)";
include "ir(pes_part_basic)"
include "ir(pes_part_keypad)"
@@ -146,19 +146,19 @@ xkb_symbols "pes_part_keypad" {
partial alphanumeric_keys
xkb_symbols "ku" {
include "tr(ku)"
- name[Group1]= "Iran - Kurdish, Latin Q";
+ name[Group1]= "Kurdish (Iran, Latin Q)";
};
partial alphanumeric_keys
xkb_symbols "ku_f" {
include "tr(ku_f)"
- name[Group1]= "Iran - Kurdish, (F)";
+ name[Group1]= "Kurdish (Iran, F)";
};
partial alphanumeric_keys
xkb_symbols "ku_alt" {
include "tr(ku_alt)"
- name[Group1]= "Iran - Kurdish, Latin Alt-Q";
+ name[Group1]= "Kurdish (Iran, Latin Alt-Q)";
};
////////////////////////////////////////
@@ -179,7 +179,7 @@ xkb_symbols "ku_alt" {
partial alphanumeric_keys
xkb_symbols "ku_ara" {
- name[Group1]= "Iran - Kurdish, Arabic-Latin";
+ name[Group1]= "Kurdish (Iran, Arabic-Latin)";
// Other 3-Level symbols
key <TLDE> { [ 0x100200d, division, asciitilde ] };
@@ -254,7 +254,7 @@ xkb_symbols "ku_ara" {
partial default alphanumeric_keys
xkb_symbols "ave"
{
- name[Group1] = "Iran - Avestan";
+ name[Group1] = "Avestan";
key <AB01> { [ U10B30, U10B32 ] }; // 𐬰 𐬲
key <AB02> { [ U10B11, U10B12 ] }; // 𐬑 𐬒
diff --git a/xorg-server/xkeyboard-config/symbols/is b/xorg-server/xkeyboard-config/symbols/is
index 2a37f9da1..c40b8a965 100644
--- a/xorg-server/xkeyboard-config/symbols/is
+++ b/xorg-server/xkeyboard-config/symbols/is
@@ -1,199 +1,199 @@
-// based on
-// XKB keyboard by Hrafnkell Eiriksson - hkelle@rhi.hi.is
-// fixes by Olafur Osvaldsson - oli@isnic.is
-//
-
-default partial alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin(type4)"
-
- name[Group1]="Iceland";
-
- key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
- key <AE04> { [ 4, dollar, onequarter, currency ] };
- key <AE11> { [odiaeresis, Odiaeresis, backslash, questiondown ] };
- key <AE12> { [ minus, underscore, ccedilla, dead_ogonek ] };
-
- key <AD11> { [ eth, ETH, dead_diaeresis, dead_abovering ] };
- key <AD12> { [apostrophe, question, asciitilde, dead_macron ] };
-
- key <AC10> { [ ae, AE, asciicircum, dead_doubleacute ] };
- key <AC11> { [dead_acute, dead_circumflex, dead_circumflex ] };
- key <TLDE> { [ degree, diaeresis, notsign, notsign ] };
-
- key <BKSL> { [ plus, asterisk, grave, dead_breve ] };
- key <AB10> { [ thorn, THORN, dead_belowdot, dead_abovedot ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "Sundeadkeys" {
-
- // modify the basic Icelandic layout to use Sun dead keys
-
- include "is(basic)"
-
- name[Group1]="Iceland - Sun dead keys";
-
- key <TLDE> { [dead_circumflex, degree, notsign, notsign ] };
- key <AE12> { [dead_acute, dead_grave, dead_cedilla, dead_cedilla ] };
- key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_diaeresis ] };
- key <AD12> { [ plus, asterisk, dead_tilde, dead_macron ] };
- key <AC10> { [odiaeresis, Odiaeresis, dead_acute, dead_acute ] };
- key <AC11> { [adiaeresis, Adiaeresis, dead_circumflex, dead_circumflex ] };
- key <BKSL> { [numbersign, acute, dead_grave, dead_grave ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- // modify the basic Icelandic layout to not have any dead keys
-
- include "is(basic)"
-
- name[Group1]="Iceland - Eliminate dead keys";
-
- key <TLDE> { [asciicircum, degree, notsign, notsign ] };
- key <AE12> { [apostrophe, grave, cedilla, cedilla ] };
- key <AD11> { [udiaeresis, Udiaeresis, diaeresis, diaeresis ] };
- key <AD12> { [ plus, asterisk, asciitilde, macron ] };
- key <AC10> { [odiaeresis, Odiaeresis, acute, acute ] };
- key <AC11> { [adiaeresis, Adiaeresis, asciicircum, asciicircum ] };
- key <BKSL> { [numbersign, acute, grave, grave ] };
- key <AB10> { [ thorn, THORN, dead_belowdot, abovedot ] };
-};
-
-// Copyright (C) 2004, 2006 Ævar Arnfjörð Bjarmason <avarab@gmail.com>
-//
-// = HISTORY
-// * 2004-09-28:
-// Initial cleanroom writing of the keymap, I just booted Mac OS X, opened
-// TextEdit.app and wrote down what the value produced by each key was when I
-// pressed it, a for a, A for shift + a, å for lalt + a etc and made the
-// keymap from that information
-//
-// * 2006-01-14:
-// Revised the comments in the file
-//
-// = NOTES
-// * 20 characters in this keymap have no named character defined in
-// include/keysymdef.h and as a result their Unicode code points in
-// hexadecimal are listed here, these can be generated with the following
-// perl command:
-// $ perl -CA -e 'printf "U%x\n", ord shift' Æ
-// and converted back like:
-// $ perl -CO -le '$_=shift;s/[^a-f0-9]//ig;print chr hex' Uc6
-// * The Apple logo appears twice on this keymap like the Mac OS and Mac OS X
-// keymaps. In the MacRoman encoding it has the code point 0xF0 (240) but it
-// has no assigned code point in Unicode, the code point Apple uses for it is
-// U+F8FF (63743) which is in the BMP's Private Use Area (U+E000–U+F8FF)
-// * This keymap has only been tested on a PowerBook6,5 (iBook G4) but it
-// should work on other Apple laptop models which use the same keyboard
-// layout. It will probably work on standard sized keyboards with little or
-// no modification but it might not support them fully, please report if
-// you're able to get it running with such a keyboard
-
-// Copied from macintosh_vndr/is
-partial alphanumeric_keys
-xkb_symbols "mac" {
- name[Group1]= "Iceland - Macintosh";
-
- //-- Row 5 (E) --//
- key <TLDE> { [ sterling, section, UF8FF, apostrophe ] };
- key <AE01> { [ 1, exclam, exclamdown, VoidSymbol ] };
- key <AE02> { [ 2, quotedbl, at, VoidSymbol ] };
- key <AE03> { [ 3, numbersign, U2122, sterling ] };
- key <AE04> { [ 4, dollar, U00A2, EuroSign ] };
- key <AE05> { [ 5, percent, U2030, infinity ] };
- key <AE06> { [ 6, ampersand, asciicircum, U2044 ] };
- key <AE07> { [ 7, slash, backslash, U00F7 ] };
- key <AE08> { [ 8, parenleft, bracketleft, braceleft ] };
- key <AE09> { [ 9, parenright, bracketright, braceright ] };
- key <AE10> { [ 0, equal, U2260, U2248 ] };
- key <AE11> { [ odiaeresis, Odiaeresis, oslash, Ooblique ] };
- key <AE12> { [ minus, underscore, endash, emdash ] };
-
-
- //-- Row 4 (D) --//
- key <AD01> { [ q, Q, paragraph, VoidSymbol ] };
- key <AD02> { [ w, W, U2211, VoidSymbol ] };
- key <AD03> { [ e, E, dead_grave, VoidSymbol ] };
- key <AD04> { [ r, R, registered, VoidSymbol ] };
- key <AD05> { [ t, T, degree, VoidSymbol ] };
- key <AD06> { [ y, Y, yen, VoidSymbol ] };
- key <AD07> { [ u, U, dead_diaeresis, VoidSymbol ] };
- key <AD08> { [ i, I, U0131, U00AA ] };
- key <AD09> { [ o, O, dead_circumflex,U00BA ] };
- key <AD10> { [ p, P, Greek_pi, Greek_PI ] };
- key <AD11> { [ eth, Eth, U201e, U201c ] };
- key <AD12> { [ apostrophe, question, questiondown, U00B7 ] };
-
-
- //-- Row 3 (C) --//
- key <AC01> { [ a, A, aring, Aring ] };
- key <AC02> { [ s, S, ssharp, abovedot ] };
- key <AC03> { [ d, D, U2202, U2DA ] };
- key <AC04> { [ f, F, U192, macron ] };
- key <AC05> { [ g, G, copyright, breve ] };
- key <AC06> { [ h, H, bar, VoidSymbol ] };
- key <AC07> { [ j, J, U2206, U2dd ] };
- key <AC08> { [ k, K, U00AC, VoidSymbol ] };
- key <AC09> { [ l, L, U2026, caron ] };
- key <AC10> { [ ae, AE, oe, OE ] };
- key <AC11> { [ dead_acute, dead_diaeresis, U201A, U2018 ] };
- key <BKSL> { [ plus, asterisk, U2022, plusminus ] };
-
-
- //-- Row 2 (B) --//
- key <LSGT> { [ less, greater, section, UF8FF ] };
- key <AB01> { [ z, Z, U3A9, VoidSymbol ] };
- key <AB02> { [ x, X, asciitilde, VoidSymbol ] };
- key <AB03> { [ c, C, ccedilla, Ccedilla ] };
- key <AB04> { [ v, V, U221A, U25CA ] };
- key <AB05> { [ b, B, U222B, VoidSymbol ] };
- key <AB06> { [ n, N, dead_tilde, VoidSymbol ] };
- key <AB07> { [ m, M, U00B5, VoidSymbol ] };
- key <AB08> { [ comma, semicolon, lessthanequal, guillemotleft ] };
- key <AB09> { [ period, colon, greaterthanequal,guillemotright ] };
- key <AB10> { [ thorn, Thorn, U2019, U201d ] };
-
- include "level3(ralt_switch)"
-};
-
-// This is a modified version of the English Dvorak layout that allows
-// you to type all Icelandic letters under X. It's not a full attempt at
-// nationalizing the layout as e.g. the Norwegian, Swedish and French
-// layouts which modify the primary keys of the basic Dvorak layout
-// extensively.
-
-// Rather it's a simple modification of 5 keys of the US Dvorak layout,
-// it adds Germanic/Icelandic style quotation marks („“), eth (ðÐ), ae
-// (æÆ), endash and emdash (–—), thorn (þÞ), EuroSign (€) and the German
-// Sharp S (ßẞ). These keys aren't used in the US version, making the
-// Icelandic version a superset of it.
-
-// Maybe someone else will make a "full" attempt at an Icelandic layout
-// but I was mostly interested in continuing to type English comfortably
-// as a primary function while being able to type the full Icelandic
-// alphabet as a secondary function.
-// -- Ævar Arnfjörð Bjarmason <avarab@gmail.com>
-
-// Icelandic Dvorak
-partial alphanumeric_keys
-xkb_symbols "dvorak" {
- name[Group1]= "Iceland - Dvorak";
-
- include "us(dvorak)"
- include "eurosign(4)"
-
- key <AD11> { [ slash, question, U201e, U201c ] };
- key <AC06> { [ d, D, eth, ETH ] };
- key <AC10> { [ s, S, ae, AE ] };
- key <AC11> { [ minus, underscore, endash, emdash ] };
- key <AB10> { [ z, Z, thorn, Thorn ] };
- key <AB06> { [ b, B, ssharp, U1E9E ] };
-
- include "level3(ralt_switch)"
-};
+// based on
+// XKB keyboard by Hrafnkell Eiriksson - hkelle@rhi.hi.is
+// fixes by Olafur Osvaldsson - oli@isnic.is
+//
+
+default partial alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin(type4)"
+
+ name[Group1]="Icelandic";
+
+ key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
+ key <AE04> { [ 4, dollar, onequarter, currency ] };
+ key <AE11> { [odiaeresis, Odiaeresis, backslash, questiondown ] };
+ key <AE12> { [ minus, underscore, ccedilla, dead_ogonek ] };
+
+ key <AD11> { [ eth, ETH, dead_diaeresis, dead_abovering ] };
+ key <AD12> { [apostrophe, question, asciitilde, dead_macron ] };
+
+ key <AC10> { [ ae, AE, asciicircum, dead_doubleacute ] };
+ key <AC11> { [dead_acute, dead_circumflex, dead_circumflex ] };
+ key <TLDE> { [ degree, diaeresis, notsign, notsign ] };
+
+ key <BKSL> { [ plus, asterisk, grave, dead_breve ] };
+ key <AB10> { [ thorn, THORN, dead_belowdot, dead_abovedot ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+ // modify the basic Icelandic layout to use Sun dead keys
+
+ include "is(basic)"
+
+ name[Group1]="Icelandic (Sun dead keys)";
+
+ key <TLDE> { [dead_circumflex, degree, notsign, notsign ] };
+ key <AE12> { [dead_acute, dead_grave, dead_cedilla, dead_cedilla ] };
+ key <AD11> { [udiaeresis, Udiaeresis, dead_diaeresis, dead_diaeresis ] };
+ key <AD12> { [ plus, asterisk, dead_tilde, dead_macron ] };
+ key <AC10> { [odiaeresis, Odiaeresis, dead_acute, dead_acute ] };
+ key <AC11> { [adiaeresis, Adiaeresis, dead_circumflex, dead_circumflex ] };
+ key <BKSL> { [numbersign, acute, dead_grave, dead_grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ // modify the basic Icelandic layout to not have any dead keys
+
+ include "is(basic)"
+
+ name[Group1]="Icelandic (eliminate dead keys)";
+
+ key <TLDE> { [asciicircum, degree, notsign, notsign ] };
+ key <AE12> { [apostrophe, grave, cedilla, cedilla ] };
+ key <AD11> { [udiaeresis, Udiaeresis, diaeresis, diaeresis ] };
+ key <AD12> { [ plus, asterisk, asciitilde, macron ] };
+ key <AC10> { [odiaeresis, Odiaeresis, acute, acute ] };
+ key <AC11> { [adiaeresis, Adiaeresis, asciicircum, asciicircum ] };
+ key <BKSL> { [numbersign, acute, grave, grave ] };
+ key <AB10> { [ thorn, THORN, dead_belowdot, abovedot ] };
+};
+
+// Copyright (C) 2004, 2006 Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+//
+// = HISTORY
+// * 2004-09-28:
+// Initial cleanroom writing of the keymap, I just booted Mac OS X, opened
+// TextEdit.app and wrote down what the value produced by each key was when I
+// pressed it, a for a, A for shift + a, å for lalt + a etc and made the
+// keymap from that information
+//
+// * 2006-01-14:
+// Revised the comments in the file
+//
+// = NOTES
+// * 20 characters in this keymap have no named character defined in
+// include/keysymdef.h and as a result their Unicode code points in
+// hexadecimal are listed here, these can be generated with the following
+// perl command:
+// $ perl -CA -e 'printf "U%x\n", ord shift' Æ
+// and converted back like:
+// $ perl -CO -le '$_=shift;s/[^a-f0-9]//ig;print chr hex' Uc6
+// * The Apple logo appears twice on this keymap like the Mac OS and Mac OS X
+// keymaps. In the MacRoman encoding it has the code point 0xF0 (240) but it
+// has no assigned code point in Unicode, the code point Apple uses for it is
+// U+F8FF (63743) which is in the BMP's Private Use Area (U+E000–U+F8FF)
+// * This keymap has only been tested on a PowerBook6,5 (iBook G4) but it
+// should work on other Apple laptop models which use the same keyboard
+// layout. It will probably work on standard sized keyboards with little or
+// no modification but it might not support them fully, please report if
+// you're able to get it running with such a keyboard
+
+// Copied from macintosh_vndr/is
+partial alphanumeric_keys
+xkb_symbols "mac" {
+ name[Group1]= "Icelandic (Macintosh)";
+
+ //-- Row 5 (E) --//
+ key <TLDE> { [ sterling, section, UF8FF, apostrophe ] };
+ key <AE01> { [ 1, exclam, exclamdown, VoidSymbol ] };
+ key <AE02> { [ 2, quotedbl, at, VoidSymbol ] };
+ key <AE03> { [ 3, numbersign, U2122, sterling ] };
+ key <AE04> { [ 4, dollar, U00A2, EuroSign ] };
+ key <AE05> { [ 5, percent, U2030, infinity ] };
+ key <AE06> { [ 6, ampersand, asciicircum, U2044 ] };
+ key <AE07> { [ 7, slash, backslash, U00F7 ] };
+ key <AE08> { [ 8, parenleft, bracketleft, braceleft ] };
+ key <AE09> { [ 9, parenright, bracketright, braceright ] };
+ key <AE10> { [ 0, equal, U2260, U2248 ] };
+ key <AE11> { [ odiaeresis, Odiaeresis, oslash, Ooblique ] };
+ key <AE12> { [ minus, underscore, endash, emdash ] };
+
+
+ //-- Row 4 (D) --//
+ key <AD01> { [ q, Q, paragraph, VoidSymbol ] };
+ key <AD02> { [ w, W, U2211, VoidSymbol ] };
+ key <AD03> { [ e, E, dead_grave, VoidSymbol ] };
+ key <AD04> { [ r, R, registered, VoidSymbol ] };
+ key <AD05> { [ t, T, degree, VoidSymbol ] };
+ key <AD06> { [ y, Y, yen, VoidSymbol ] };
+ key <AD07> { [ u, U, dead_diaeresis, VoidSymbol ] };
+ key <AD08> { [ i, I, U0131, U00AA ] };
+ key <AD09> { [ o, O, dead_circumflex,U00BA ] };
+ key <AD10> { [ p, P, Greek_pi, Greek_PI ] };
+ key <AD11> { [ eth, Eth, U201e, U201c ] };
+ key <AD12> { [ apostrophe, question, questiondown, U00B7 ] };
+
+
+ //-- Row 3 (C) --//
+ key <AC01> { [ a, A, aring, Aring ] };
+ key <AC02> { [ s, S, ssharp, abovedot ] };
+ key <AC03> { [ d, D, U2202, U2DA ] };
+ key <AC04> { [ f, F, U192, macron ] };
+ key <AC05> { [ g, G, copyright, breve ] };
+ key <AC06> { [ h, H, bar, VoidSymbol ] };
+ key <AC07> { [ j, J, U2206, U2dd ] };
+ key <AC08> { [ k, K, U00AC, VoidSymbol ] };
+ key <AC09> { [ l, L, U2026, caron ] };
+ key <AC10> { [ ae, AE, oe, OE ] };
+ key <AC11> { [ dead_acute, dead_diaeresis, U201A, U2018 ] };
+ key <BKSL> { [ plus, asterisk, U2022, plusminus ] };
+
+
+ //-- Row 2 (B) --//
+ key <LSGT> { [ less, greater, section, UF8FF ] };
+ key <AB01> { [ z, Z, U3A9, VoidSymbol ] };
+ key <AB02> { [ x, X, asciitilde, VoidSymbol ] };
+ key <AB03> { [ c, C, ccedilla, Ccedilla ] };
+ key <AB04> { [ v, V, U221A, U25CA ] };
+ key <AB05> { [ b, B, U222B, VoidSymbol ] };
+ key <AB06> { [ n, N, dead_tilde, VoidSymbol ] };
+ key <AB07> { [ m, M, U00B5, VoidSymbol ] };
+ key <AB08> { [ comma, semicolon, lessthanequal, guillemotleft ] };
+ key <AB09> { [ period, colon, greaterthanequal,guillemotright ] };
+ key <AB10> { [ thorn, Thorn, U2019, U201d ] };
+
+ include "level3(ralt_switch)"
+};
+
+// This is a modified version of the English Dvorak layout that allows
+// you to type all Icelandic letters under X. It's not a full attempt at
+// nationalizing the layout as e.g. the Norwegian, Swedish and French
+// layouts which modify the primary keys of the basic Dvorak layout
+// extensively.
+
+// Rather it's a simple modification of 5 keys of the US Dvorak layout,
+// it adds Germanic/Icelandic style quotation marks („“), eth (ðÐ), ae
+// (æÆ), endash and emdash (–—), thorn (þÞ), EuroSign (€) and the German
+// Sharp S (ßẞ). These keys aren't used in the US version, making the
+// Icelandic version a superset of it.
+
+// Maybe someone else will make a "full" attempt at an Icelandic layout
+// but I was mostly interested in continuing to type English comfortably
+// as a primary function while being able to type the full Icelandic
+// alphabet as a secondary function.
+// -- Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+
+// Icelandic Dvorak
+partial alphanumeric_keys
+xkb_symbols "dvorak" {
+ name[Group1]= "Icelandic (Dvorak)";
+
+ include "us(dvorak)"
+ include "eurosign(4)"
+
+ key <AD11> { [ slash, question, U201e, U201c ] };
+ key <AC06> { [ d, D, eth, ETH ] };
+ key <AC10> { [ s, S, ae, AE ] };
+ key <AC11> { [ minus, underscore, endash, emdash ] };
+ key <AB10> { [ z, Z, thorn, Thorn ] };
+ key <AB06> { [ b, B, ssharp, U1E9E ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/it b/xorg-server/xkeyboard-config/symbols/it
index 631fae591..90fb7f5c9 100644
--- a/xorg-server/xkeyboard-config/symbols/it
+++ b/xorg-server/xkeyboard-config/symbols/it
@@ -1,257 +1,257 @@
-// based on a keyboard map from an 'xkb/symbols/it' file
-// 17 May 2003 Modified by Sebastiano Vigna (vigna@dsi.unimi.it)
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin(type4)"
-
- name[Group1]="Italy";
-
- key <TLDE> { [ backslash, bar, notsign, brokenbar ] };
-
- key <AE02> { [ 2, quotedbl, twosuperior, dead_doubleacute ] };
- key <AE03> { [ 3, sterling,threesuperior, dead_tilde ] };
- key <AE04> { [ 4, dollar, onequarter, oneeighth ] };
-
- key <AE10> { [ 0, equal, braceright, dead_ogonek ] };
- key <AE11> { [apostrophe, question, grave, questiondown ] };
- key <AE12> { [ igrave, asciicircum, asciitilde, dead_circumflex ] };
-
- key <AD11> { [ egrave, eacute, bracketleft, braceleft ] };
- key <AD12> { [ plus, asterisk, bracketright, braceright ] };
-
- key <AC10> { [ ograve, ccedilla, at, dead_cedilla ] };
- key <AC11> { [ agrave, degree, numbersign, dead_abovering ] };
-
- key <AB06> { [ n, N, ntilde, Ntilde ] };
- key <AB08> { [ comma, semicolon, dead_acute, multiply ] };
- key <AB09> { [ period, colon,periodcentered, dead_diaeresis ] };
- key <AB10> { [ minus, underscore, dead_macron, division ] };
-
- key <BKSL> { [ ugrave, section, dead_grave, dead_breve ] };
-
- key <LSGT> { [ less, greater,guillemotleft,guillemotright] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- // Modifies the basic italian layout to eliminate all dead keys
-
- include "it(basic)"
-
- name[Group1]="Italy - Eliminate dead keys";
-
- key <AE02> { [ 2, quotedbl, twosuperior, doubleacute ] };
- key <AE03> { [ 3, sterling,threesuperior, asciitilde ] };
-
- key <AE10> { [ 0, equal, braceright, ogonek ] };
- key <AE12> { [ igrave, asciicircum, asciitilde, asciicircum ] };
-
- key <AC10> { [ ograve, ccedilla, at, cedilla ] };
- key <AC11> { [ agrave, degree, numbersign, degree ] };
-
- key <AB08> { [ comma, semicolon, acute, multiply ] };
- key <AB09> { [ period, colon,periodcentered, diaeresis ] };
- key <AB10> { [ minus, underscore, macron, division ] };
-
- key <BKSL> { [ ugrave, section, grave, breve ] };
-};
-
-// Copied from macintosh_vndr/it
-partial alphanumeric_keys
-xkb_symbols "mac" {
-
- name[Group1]= "Italy - Macintosh";
-
- // Alphanumeric section
- key <LSGT> { [ less, greater ] };
- key <TLDE> { [ at, numbersign, periodcentered ] };
- key <AE01> { [ ampersand, 1, guillemotleft,guillemotright ] };
- key <AE02> { [ quotedbl, 2 ] };
- key <AE03> { [ apostrophe, 3 ] };
- key <AE04> { [ parenleft, 4, braceleft, bracketleft ] };
- key <AE05> { [ ccedilla, 5, Ccedilla, Iacute ] };
- key <AE06> { [ egrave, 6, paragraph, periodcentered] };
- key <AE07> { [ parenright, 7, braceright, bracketright ] };
- key <AE08> { [ sterling, 8, infinity ] };
- key <AE09> { [ agrave, 9, acute, Ocircumflex ] };
- key <AE10> { [ eacute, 0, grave, Oacute ] };
- key <AE11> { [ minus, underscore ] };
- key <AE12> { [ equal, plus, notequal, plusminus ] };
-
- key <AD01> { [ q, Q ] };
- key <AD02> { [ z, Z ] };
- key <AD03> { [ e, E, EuroSign ] };
- key <AD04> { [ r, R, registered ] };
- key <AD05> { [ t, T ] };
- key <AD06> { [ y, Y, Uacute, ydiaeresis ] };
- key <AD07> { [ u, U ] };
- key <AD08> { [ i, I, icircumflex, idiaeresis ] };
- key <AD09> { [ o, O ] };
- key <AD10> { [ p, P ] };
- key <AD11> { [ igrave, asciicircum ] };
- key <AD12> { [ dollar, asterisk ] };
- key <BKSL> { [ section, degree, at, numbersign ] };
-
- key <AC01> { [ a, A, aring, Aring ] };
- key <AC02> { [ s, S, ssharp ] };
- key <AC03> { [ d, D ] };
- key <AC04> { [ f, F ] };
- key <AC05> { [ g, G ] };
- key <AC06> { [ h, H, Igrave, Icircumflex ] };
- key <AC07> { [ j, J, Idiaeresis, Iacute ] };
- key <AC08> { [ k, K, Egrave, Ediaeresis ] };
- key <AC09> { [ l, L, ssharp, bar ] };
- key <AC10> { [ m, M, mu, Oacute ] };
- key <AC11> { [ ugrave, percent, ae, AE ] };
-
- key <AB01> { [ w, W ] };
- key <AB02> { [ x, X ] };
- key <AB03> { [ c, C, copyright, copyright ] };
- key <AB04> { [ v, V ] };
- key <AB05> { [ b, B ] };
- key <AB06> { [ n, N, dead_tilde ] };
- key <AB07> { [ comma, question, questiondown ] };
- key <AB08> { [ semicolon, period ] };
- key <AB09> { [ colon, slash, bar, backslash ] };
- key <AB10> { [ ograve, exclam, exclamdown ] };
-
- // End alphanumeric section
-
- include "kpdl(dot)"
- include "level3(ralt_switch)"
-};
-
-// Used by Georgian people in Italy,
-// contributed by Vladimer Sichinava
-partial alphanumeric_keys
-xkb_symbols "geo" {
- include "it"
- include "ge(basic)"
-
- name[Group1]= "Italy - Georgian";
- key <TLDE> { [ backslash, bar, notsign, brokenbar ] };
- key <AE01> { [ 1, exclam, onesuperior ] };
- key <AE02> { [ 2, quotedbl, twosuperior, dead_doubleacute ] };
- key <AE03> { [ 3, sterling, threesuperior, dead_tilde ] };
- key <AE04> { [ 4, dollar, onequarter, oneeighth ] };
- key <AE05> { [ 5, percent, onehalf ] };
- key <AE06> { [ 6, ampersand ] };
- key <AE07> { [ 7, slash, braceleft ] };
- key <AE08> { [ 8, parenleft, bracketleft ] };
- key <AE09> { [ 9, parenright ] };
- key <AE10> { [ 0, equal, braceright, dead_ogonek ] };
- key <AE11> { [apostrophe, question, grave, questiondown ] };
- key <AE12> { [ igrave, asciicircum, asciitilde, dead_circumflex ] };
-
- key <AD03> { [0x010010d4, E, EuroSign ] };
- key <AD11> { [ egrave, eacute, bracketleft, braceleft ] };
- key <AD12> { [ plus, asterisk, bracketright, braceright ] };
-
- key <AC10> { [ ograve, ccedilla, at, dead_cedilla ] };
- key <AC11> { [ agrave, degree, numbersign, degree ] };
- key <BKSL> { [ ugrave, section, dead_grave, dead_breve ] };
- key <LSGT> { [ less, greater ] };
-
- key <AB08> { [ comma, semicolon ] };
- key <AB09> { [ period, colon ] };
- key <AB10> { [ minus, underscore ] };
-};
-
-// OLPC Section
-xkb_symbols "olpc" {
-
- include "it(basic)"
-
- key <AE12> { [ igrave, asciicircum, asciitilde, dead_tilde ] };
- key <BKSL> { [ ugrave, section, Egrave, dead_breve ] };
- key <I219> { [ less, greater, guillemotleft, guillemotright ] };
-};
-
-partial alphanumeric_keys modifier_keys
-xkb_symbols "us" {
-
- name[Group1]= "Italy - US keyboard with Italian letters";
-
- include "us(euro)"
-
- // Alphanumeric section
-
- key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
- key <AE01> { [ 1, exclam, onesuperior ] };
- key <AE02> { [ 2, at, twosuperior ] };
- key <AE03> { [ 3, numbersign, threesuperior ] };
- key <AE06> { [ 6,asciicircum,dead_circumflex ] };
- key <AE10> { [ 0, parenright, degree ] };
- key <AE11> { [ minus, underscore, dead_macron ] };
-
- key <AD03> { [ e, E, egrave, Egrave ] };
- key <AD04> { [ r, R, registered ] };
- key <AD07> { [ u, U, ugrave, Ugrave ] };
- key <AD08> { [ i, I, igrave, Igrave ] };
- key <AD09> { [ o, O, ograve, Ograve ] };
-
- key <AC01> { [ a, A, agrave, Agrave ] };
- key <AC03> { [ d, D, eacute, Eacute ] };
- key <AC07> { [ j, J, uacute, Uacute ] };
- key <AC08> { [ k, K, iacute, Iacute ] };
- key <AC09> { [ l, L, oacute, Oacute ] };
- key <AC10> { [ semicolon, colon,dead_diaeresis, dead_diaeresis ] };
- key <AC11> { [apostrophe, quotedbl, dead_acute ] };
-
- key <AB01> { [ z, Z, aacute, Aacute ] };
- key <AB03> { [ c, C, copyright ] };
- key <AB06> { [ n, N, ntilde, Ntilde ] };
- key <AB08> { [ comma, less, guillemotleft ] };
- key <AB09> { [ period, greater, guillemotright ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "htcdream" {
- include "inet(htcdream)"
- name[Group1]= "Italy - htcdream";
-
- //second row
- key <AD01> { [ q, Q, Tab, Tab ] };
- key <AD02> { [ w, W, grave, grave ] };
- key <AD03> { [ e, E, egrave, egrave] };
- key <AD04> { [ r, R, eacute, eacute ] };
- key <AD05> { [ t, T, quotedbl, quotedbl ] };
- key <AD06> { [ y, Y, apostrophe, apostrophe ] };
- key <AD07> { [ u, U, ugrave, ugrave ] };
- key <AD08> { [ i, I, igrave, igrave ] };
- key <AD09> { [ o, O, ograve, ograve ] };
- key <AD10> { [ p, P, NoSymbol, NoSymbol ] };
-
- //third row
- key <AC01> { [ a, A, agrave, agrave ] };
- key <AC02> { [ s, S, bar, bar ] };
- key <AC03> { [ d ,D, EuroSign, EuroSign ] };
- key <AC04> { [ f, F, sterling, sterling ] };
- key <AC05> { [ g, G, division, division ] };
- key <AC06> { [ h, H, multiply, multiply ] };
- key <AC07> { [ j, J, minus, minus ] };
- key <AC08> { [ k, K, plus, plus ] };
- key <AC09> { [ l, L, equal, equal ] };
-
- //forth row
- key <AB01> { [ z, Z, underscore, underscore ] };
- key <AB02> { [ x, X, asciitilde, asciitilde ] };
- key <AB03> { [ c, C, less, less ] };
- key <AB04> { [ v, V, greater, greater ] };
- key <AB05> { [ b, B, backslash, backslash ] };
- key <AB06> { [ n, N, colon, colon ] };
- key <AB07> { [ m, M, semicolon, semicolon ] };
- key <AB08> { [ comma, comma, question, question ] };
-
- //fifth row
- key <FK15> { [ at, at, NoSymbol, NoSymbol ] };
-
- include "level3(alt_switch)"
-};
+// based on a keyboard map from an 'xkb/symbols/it' file
+// 17 May 2003 Modified by Sebastiano Vigna (vigna@dsi.unimi.it)
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin(type4)"
+
+ name[Group1]="Italian";
+
+ key <TLDE> { [ backslash, bar, notsign, brokenbar ] };
+
+ key <AE02> { [ 2, quotedbl, twosuperior, dead_doubleacute ] };
+ key <AE03> { [ 3, sterling,threesuperior, dead_tilde ] };
+ key <AE04> { [ 4, dollar, onequarter, oneeighth ] };
+
+ key <AE10> { [ 0, equal, braceright, dead_ogonek ] };
+ key <AE11> { [apostrophe, question, grave, questiondown ] };
+ key <AE12> { [ igrave, asciicircum, asciitilde, dead_circumflex ] };
+
+ key <AD11> { [ egrave, eacute, bracketleft, braceleft ] };
+ key <AD12> { [ plus, asterisk, bracketright, braceright ] };
+
+ key <AC10> { [ ograve, ccedilla, at, dead_cedilla ] };
+ key <AC11> { [ agrave, degree, numbersign, dead_abovering ] };
+
+ key <AB06> { [ n, N, ntilde, Ntilde ] };
+ key <AB08> { [ comma, semicolon, dead_acute, multiply ] };
+ key <AB09> { [ period, colon,periodcentered, dead_diaeresis ] };
+ key <AB10> { [ minus, underscore, dead_macron, division ] };
+
+ key <BKSL> { [ ugrave, section, dead_grave, dead_breve ] };
+
+ key <LSGT> { [ less, greater,guillemotleft,guillemotright] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ // Modifies the basic italian layout to eliminate all dead keys
+
+ include "it(basic)"
+
+ name[Group1]="Italian (eliminate dead keys)";
+
+ key <AE02> { [ 2, quotedbl, twosuperior, doubleacute ] };
+ key <AE03> { [ 3, sterling,threesuperior, asciitilde ] };
+
+ key <AE10> { [ 0, equal, braceright, ogonek ] };
+ key <AE12> { [ igrave, asciicircum, asciitilde, asciicircum ] };
+
+ key <AC10> { [ ograve, ccedilla, at, cedilla ] };
+ key <AC11> { [ agrave, degree, numbersign, degree ] };
+
+ key <AB08> { [ comma, semicolon, acute, multiply ] };
+ key <AB09> { [ period, colon,periodcentered, diaeresis ] };
+ key <AB10> { [ minus, underscore, macron, division ] };
+
+ key <BKSL> { [ ugrave, section, grave, breve ] };
+};
+
+// Copied from macintosh_vndr/it
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+ name[Group1]= "Italian (Macintosh)";
+
+ // Alphanumeric section
+ key <LSGT> { [ less, greater ] };
+ key <TLDE> { [ at, numbersign, periodcentered ] };
+ key <AE01> { [ ampersand, 1, guillemotleft,guillemotright ] };
+ key <AE02> { [ quotedbl, 2 ] };
+ key <AE03> { [ apostrophe, 3 ] };
+ key <AE04> { [ parenleft, 4, braceleft, bracketleft ] };
+ key <AE05> { [ ccedilla, 5, Ccedilla, Iacute ] };
+ key <AE06> { [ egrave, 6, paragraph, periodcentered] };
+ key <AE07> { [ parenright, 7, braceright, bracketright ] };
+ key <AE08> { [ sterling, 8, infinity ] };
+ key <AE09> { [ agrave, 9, acute, Ocircumflex ] };
+ key <AE10> { [ eacute, 0, grave, Oacute ] };
+ key <AE11> { [ minus, underscore ] };
+ key <AE12> { [ equal, plus, notequal, plusminus ] };
+
+ key <AD01> { [ q, Q ] };
+ key <AD02> { [ z, Z ] };
+ key <AD03> { [ e, E, EuroSign ] };
+ key <AD04> { [ r, R, registered ] };
+ key <AD05> { [ t, T ] };
+ key <AD06> { [ y, Y, Uacute, ydiaeresis ] };
+ key <AD07> { [ u, U ] };
+ key <AD08> { [ i, I, icircumflex, idiaeresis ] };
+ key <AD09> { [ o, O ] };
+ key <AD10> { [ p, P ] };
+ key <AD11> { [ igrave, asciicircum ] };
+ key <AD12> { [ dollar, asterisk ] };
+ key <BKSL> { [ section, degree, at, numbersign ] };
+
+ key <AC01> { [ a, A, aring, Aring ] };
+ key <AC02> { [ s, S, ssharp ] };
+ key <AC03> { [ d, D ] };
+ key <AC04> { [ f, F ] };
+ key <AC05> { [ g, G ] };
+ key <AC06> { [ h, H, Igrave, Icircumflex ] };
+ key <AC07> { [ j, J, Idiaeresis, Iacute ] };
+ key <AC08> { [ k, K, Egrave, Ediaeresis ] };
+ key <AC09> { [ l, L, ssharp, bar ] };
+ key <AC10> { [ m, M, mu, Oacute ] };
+ key <AC11> { [ ugrave, percent, ae, AE ] };
+
+ key <AB01> { [ w, W ] };
+ key <AB02> { [ x, X ] };
+ key <AB03> { [ c, C, copyright, copyright ] };
+ key <AB04> { [ v, V ] };
+ key <AB05> { [ b, B ] };
+ key <AB06> { [ n, N, dead_tilde ] };
+ key <AB07> { [ comma, question, questiondown ] };
+ key <AB08> { [ semicolon, period ] };
+ key <AB09> { [ colon, slash, bar, backslash ] };
+ key <AB10> { [ ograve, exclam, exclamdown ] };
+
+ // End alphanumeric section
+
+ include "kpdl(dot)"
+ include "level3(ralt_switch)"
+};
+
+// Used by Georgian people in Italy,
+// contributed by Vladimer Sichinava
+partial alphanumeric_keys
+xkb_symbols "geo" {
+ include "it"
+ include "ge(basic)"
+
+ name[Group1]= "Georgian (Italy)";
+ key <TLDE> { [ backslash, bar, notsign, brokenbar ] };
+ key <AE01> { [ 1, exclam, onesuperior ] };
+ key <AE02> { [ 2, quotedbl, twosuperior, dead_doubleacute ] };
+ key <AE03> { [ 3, sterling, threesuperior, dead_tilde ] };
+ key <AE04> { [ 4, dollar, onequarter, oneeighth ] };
+ key <AE05> { [ 5, percent, onehalf ] };
+ key <AE06> { [ 6, ampersand ] };
+ key <AE07> { [ 7, slash, braceleft ] };
+ key <AE08> { [ 8, parenleft, bracketleft ] };
+ key <AE09> { [ 9, parenright ] };
+ key <AE10> { [ 0, equal, braceright, dead_ogonek ] };
+ key <AE11> { [apostrophe, question, grave, questiondown ] };
+ key <AE12> { [ igrave, asciicircum, asciitilde, dead_circumflex ] };
+
+ key <AD03> { [0x010010d4, E, EuroSign ] };
+ key <AD11> { [ egrave, eacute, bracketleft, braceleft ] };
+ key <AD12> { [ plus, asterisk, bracketright, braceright ] };
+
+ key <AC10> { [ ograve, ccedilla, at, dead_cedilla ] };
+ key <AC11> { [ agrave, degree, numbersign, degree ] };
+ key <BKSL> { [ ugrave, section, dead_grave, dead_breve ] };
+ key <LSGT> { [ less, greater ] };
+
+ key <AB08> { [ comma, semicolon ] };
+ key <AB09> { [ period, colon ] };
+ key <AB10> { [ minus, underscore ] };
+};
+
+// OLPC Section
+xkb_symbols "olpc" {
+
+ include "it(basic)"
+
+ key <AE12> { [ igrave, asciicircum, asciitilde, dead_tilde ] };
+ key <BKSL> { [ ugrave, section, Egrave, dead_breve ] };
+ key <I219> { [ less, greater, guillemotleft, guillemotright ] };
+};
+
+partial alphanumeric_keys modifier_keys
+xkb_symbols "us" {
+
+ name[Group1]= "Italian (US keyboard with Italian letters)";
+
+ include "us(euro)"
+
+ // Alphanumeric section
+
+ key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] };
+ key <AE01> { [ 1, exclam, onesuperior ] };
+ key <AE02> { [ 2, at, twosuperior ] };
+ key <AE03> { [ 3, numbersign, threesuperior ] };
+ key <AE06> { [ 6,asciicircum,dead_circumflex ] };
+ key <AE10> { [ 0, parenright, degree ] };
+ key <AE11> { [ minus, underscore, dead_macron ] };
+
+ key <AD03> { [ e, E, egrave, Egrave ] };
+ key <AD04> { [ r, R, registered ] };
+ key <AD07> { [ u, U, ugrave, Ugrave ] };
+ key <AD08> { [ i, I, igrave, Igrave ] };
+ key <AD09> { [ o, O, ograve, Ograve ] };
+
+ key <AC01> { [ a, A, agrave, Agrave ] };
+ key <AC03> { [ d, D, eacute, Eacute ] };
+ key <AC07> { [ j, J, uacute, Uacute ] };
+ key <AC08> { [ k, K, iacute, Iacute ] };
+ key <AC09> { [ l, L, oacute, Oacute ] };
+ key <AC10> { [ semicolon, colon,dead_diaeresis, dead_diaeresis ] };
+ key <AC11> { [apostrophe, quotedbl, dead_acute ] };
+
+ key <AB01> { [ z, Z, aacute, Aacute ] };
+ key <AB03> { [ c, C, copyright ] };
+ key <AB06> { [ n, N, ntilde, Ntilde ] };
+ key <AB08> { [ comma, less, guillemotleft ] };
+ key <AB09> { [ period, greater, guillemotright ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "htcdream" {
+ include "inet(htcdream)"
+ name[Group1]= "Italian";
+
+ //second row
+ key <AD01> { [ q, Q, Tab, Tab ] };
+ key <AD02> { [ w, W, grave, grave ] };
+ key <AD03> { [ e, E, egrave, egrave] };
+ key <AD04> { [ r, R, eacute, eacute ] };
+ key <AD05> { [ t, T, quotedbl, quotedbl ] };
+ key <AD06> { [ y, Y, apostrophe, apostrophe ] };
+ key <AD07> { [ u, U, ugrave, ugrave ] };
+ key <AD08> { [ i, I, igrave, igrave ] };
+ key <AD09> { [ o, O, ograve, ograve ] };
+ key <AD10> { [ p, P, NoSymbol, NoSymbol ] };
+
+ //third row
+ key <AC01> { [ a, A, agrave, agrave ] };
+ key <AC02> { [ s, S, bar, bar ] };
+ key <AC03> { [ d ,D, EuroSign, EuroSign ] };
+ key <AC04> { [ f, F, sterling, sterling ] };
+ key <AC05> { [ g, G, division, division ] };
+ key <AC06> { [ h, H, multiply, multiply ] };
+ key <AC07> { [ j, J, minus, minus ] };
+ key <AC08> { [ k, K, plus, plus ] };
+ key <AC09> { [ l, L, equal, equal ] };
+
+ //forth row
+ key <AB01> { [ z, Z, underscore, underscore ] };
+ key <AB02> { [ x, X, asciitilde, asciitilde ] };
+ key <AB03> { [ c, C, less, less ] };
+ key <AB04> { [ v, V, greater, greater ] };
+ key <AB05> { [ b, B, backslash, backslash ] };
+ key <AB06> { [ n, N, colon, colon ] };
+ key <AB07> { [ m, M, semicolon, semicolon ] };
+ key <AB08> { [ comma, comma, question, question ] };
+
+ //fifth row
+ key <FK15> { [ at, at, NoSymbol, NoSymbol ] };
+
+ include "level3(alt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ma b/xorg-server/xkeyboard-config/symbols/ma
index b49d0c762..f7985ea89 100644
--- a/xorg-server/xkeyboard-config/symbols/ma
+++ b/xorg-server/xkeyboard-config/symbols/ma
@@ -1,324 +1,324 @@
-// Arabic AZERTY with modern Latin digits
-partial default alphanumeric_keys
-xkb_symbols "arabic" {
- include "ara(azerty)"
-
- name[Group1]="Morocco";
-};
-
-// French AZERTY keyboard used when typing French
-partial alphanumeric_keys
-xkb_symbols "french" {
- include "fr(basic)"
-
- name[Group1]="Morocco - French";
-};
-
-// Clavier unicode tifinaghe de base réalisé par l'IRCAM (Institut Royal de la Culture Amazighe du Maroc) http://www.ircam.ma/
-// Support des lettres unicode tifinaghe-IRCAM, néotifinaghes & touarègues.
-// Les caractères tifinaghes sont accessibles en SHIFT positions pour le niveau 2, en ALTGR positions pour le niveau 3
-// Polices tifinaghes Unicode à télécharger depuis :
-// http://www.ircam.ma/documents/policesclavierunicode/hapaxber.ttf (licence non libre, libre téléchargement et distribution uniquement)
-// Minihowto ici: http://perso.menara.ma/~kebdani/tamazgha/gnu_amazigh.html
-
-partial alphanumeric_keys
-xkb_symbols "tifinagh" {
-
- name[Group1]="Morocco - Tifinagh";
-
- key <TLDE> { [ twosuperior, NoAction ] };
- key <AE01> { [ ampersand, 1 ] };
- key <AE02> { [ NoAction, 2, asciitilde ] };
- key <AE03> { [ quotedbl, 3, numbersign ] };
- key <AE04> { [apostrophe, 4, braceleft ] };
- key <AE05> { [ parenleft, 5, bracketleft ] };
- key <AE06> { [ minus, 6, bar ] };
- key <AE07> { [ NoAction , 7 ] };
- key <AE08> { [underscore, 8, backslash ] };
- key <AE09> { [NoAction, 9, asciicircum ] };
- key <AE10> { [ NoAction , 0, at ] };
- key <AE11> { [parenright, degree, bracketright ] };
- key <AE12> { [ equal, plus, braceright ] };
-
- key <AD01> { [ 0x1002d30 ] };
- key <AD02> { [ 0x1002d63, 0x1002d65 ] };
- key <AD03> { [ 0x1002d3b, NoAction,0x10020ac ] };
- key <AD04> { [ 0x1002d54, 0x1002d55 ] };
- key <AD05> { [ 0x1002d5c, 0x1002d5f ] };
- key <AD06> { [ 0x1002d62 ] };
- key <AD07> { [ 0x1002d53 ] };
- key <AD08> { [ 0x1002d49 ] };
- key <AD09> { [ 0x1002d44 ] };
- key <AD10> { [ 0x1002d43 ] };
- key <AD11> { [ 0x1002d6f ] };
- key <AD12> { [ dollar, sterling, 0x10000a4] };
-
- key <AC01> { [ 0x1002d47 ] };
- key <AC02> { [ 0x1002d59, 0x1002d5a ] };
- key <AC03> { [ 0x1002d37, 0x1002d39 ] };
- key <AC04> { [ 0x1002d3c ] };
- key <AC05> { [ 0x1002d33, 0x1002d33] };
- key <AC06> { [ 0x1002d40 ] };
- key <AC07> { [ 0x1002d4a ] };
- key <AC08> { [ 0x1002d3d, 0x1002d3d ] };
- key <AC09> { [ 0x1002d4d ] };
- key <AC10> { [ 0x1002d4e ] };
- key <AC11> { [ NoAction , percent ] };
- key <BKSL> { [ asterisk, mu ] };
-
- key <AB01> { [ 0x1002d61 ] };
- key <AB02> { [ 0x1002d45 ] };
- key <AB03> { [ 0x1002d5b ] };
- key <AB04> { [ 0x1002d56 ] };
- key <AB05> { [ 0x1002d31 ] };
- key <AB06> { [ 0x1002d4f ] };
- key <AB07> { [ comma, question ] };
- key <AB08> { [ semicolon, period ] };
- key <AB09> { [ colon, slash ] };
- key <AB10> { [ exclam, section ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "tifinagh-phonetic" {
-
- name[Group1]="Morocco - Tifinagh phonetic";
- include "ma(tifinagh)"
-
- key <LatA> { [ 0x1002d30 ] };
- key <LatZ> { [ 0x1002d63, 0x1002d65 ] };
- key <LatE> { [ 0x1002d3b, NoAction,0x10020ac ] };
- key <LatR> { [ 0x1002d54, 0x1002d55 ] };
- key <LatT> { [ 0x1002d5c, 0x1002d5f ] };
- key <LatY> { [ 0x1002d62 ] };
- key <LatU> { [ 0x1002d53 ] };
- key <LatI> { [ 0x1002d49 ] };
- key <LatO> { [ 0x1002d44 ] };
- key <LatP> { [ 0x1002d43 ] };
-
- key <LatQ> { [ 0x1002d47 ] };
- key <LatS> { [ 0x1002d59, 0x1002d5a ] };
- key <LatD> { [ 0x1002d37, 0x1002d39 ] };
- key <LatF> { [ 0x1002d3c ] };
- key <LatG> { [ 0x1002d33 ] };
- key <LatH> { [ 0x1002d40 ] };
- key <LatJ> { [ 0x1002d4a ] };
- key <LatK> { [ 0x1002d3d ] };
- key <LatL> { [ 0x1002d4d ] };
- key <LatM> { [ 0x1002d4e ] };
-
- key <LatW> { [ 0x1002d61,0x1002d6f ] };
- key <LatX> { [ 0x1002d45 ] };
- key <LatC> { [ 0x1002d5b ] };
- key <LatV> { [ 0x1002d56 ] };
- key <LatB> { [ 0x1002d31 ] };
- key <LatN> { [ 0x1002d4f ] };
-
- include "level3(ralt_switch)"
-};
-
-// Clavier unicode tifinaghe étendu réalisé par l'IRCAM (Institut Royal de la Culture Amazighe du Maroc) http://www.ircam.ma/
-// Support des lettres unicode tifinaghe-IRCAM, néotifinaghes & touarègues.
-// Les caractères tifinaghes sont accessibles en SHIFT positions pour le niveau 2, en ALTGR positions pour le niveau 3
-// Polices tifinaghes Unicode à télécharger depuis :
-// http://www.ircam.ma/documents/policesclavierunicode/hapaxber.ttf (licence non libre, libre téléchargement et distribution uniquement)
-// Minihowto ici: http://perso.menara.ma/~kebdani/tamazgha/gnu_amazigh.html
-
-partial alphanumeric_keys
-xkb_symbols "tifinagh-extended" {
-
- name[Group1]="Morocco - Tifinagh extended";
-
- key <TLDE> { [ twosuperior,0x100200C ] };
- key <AE01> { [ ampersand, 1 ] };
- key <AE02> { [0x1002d52, 2, asciitilde ] };
- key <AE03> { [ quotedbl, 3, numbersign ] };
- key <AE04> { [apostrophe, 4, braceleft ] };
- key <AE05> { [ parenleft, 5, bracketleft ] };
- key <AE06> { [ minus, 6, bar ] };
- key <AE07> { [ 0x1002d64 , 7 ] };
- key <AE08> { [underscore, 8, backslash ] };
- key <AE09> { [ 0x1002014, 9, asciicircum ] };
- key <AE10> { [ 0x100200d, 0, at ] };
- key <AE11> { [parenright, degree, bracketright ] };
- key <AE12> { [ equal, plus, braceright ] };
-
- key <AD01> { [ 0x1002d30, 0x1002d36 ] };
- key <AD02> { [ 0x1002d63, 0x1002d65 ] };
- key <AD03> { [ 0x1002d3b, 0x1002d57, 0x10020ac ] };
- key <AD04> { [ 0x1002d54, 0x1002d55 ] };
- key <AD05> { [ 0x1002d5c, 0x1002d5f ] };
- key <AD06> { [ 0x1002d62, 0x1002d42 ] };
- key <AD07> { [ 0x1002d53, 0x1002d4c ] };
- key <AD08> { [ 0x1002d49, 0x1002d58 ] };
- key <AD09> { [ 0x1002d44, 0x1002d5d ] };
- key <AD10> { [ 0x1002d43, 0x1002d5e ] };
- key <AD11> { [ 0x1002d6f, 0x1002d60 ] };
- key <AD12> { [ dollar, sterling, 0x10000a4] };
-
- key <AC01> { [ 0x1002d47, 0x1002d48 ] };
- key <AC02> { [ 0x1002d59, 0x1002d5a ] };
- key <AC03> { [ 0x1002d37, 0x1002d39 ] };
- key <AC04> { [ 0x1002d3c, 0x1002d35 ] };
- key <AC05> { [ 0x1002d33, 0x1002d33 ] };
- key <AC06> { [ 0x1002d40, 0x1002d41 ] };
- key <AC07> { [ 0x1002d4a, 0x1002d4b ] };
- key <AC08> { [ 0x1002d3d, 0x1002d3d ] };
- key <AC09> { [ 0x1002d4d, 0x1002d38 ] };
- key <AC10> { [ 0x1002d4e, 0x1002d3a ] };
- key <AC11> { [ 0x1002d51, percent ] };
- key <BKSL> { [ asterisk, mu ] };
-
- key <AB01> { [ 0x1002d61, 0x1002d3e ] };
- key <AB02> { [ 0x1002d45, 0x1002d46 ] };
- key <AB03> { [ 0x1002d5b, 0x1002d3f ] };
- key <AB04> { [ 0x1002d56, 0x1002d34 ] };
- key <AB05> { [ 0x1002d31, 0x1002d32 ] };
- key <AB06> { [ 0x1002d4f, 0x1002d50 ] };
- key <AB07> { [ comma, question ] };
- key <AB08> { [ semicolon, period ] };
- key <AB09> { [ colon, slash ] };
- key <AB10> { [ exclam, section ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "tifinagh-extended-phonetic" {
- include "ma(tifinagh-extended)"
-
- name[Group1]="Morocco - Tifinagh extended phonetic";
-
- key <LatA> { [ 0x1002d30 ] };
- key <LatZ> { [ 0x1002d63, 0x1002d65 ] };
- key <LatE> { [ 0x1002d3b, NoAction,0x10020ac ] };
- key <LatR> { [ 0x1002d54, 0x1002d55 ] };
- key <LatT> { [ 0x1002d5c, 0x1002d5f ] };
- key <LatY> { [ 0x1002d62 ] };
- key <LatU> { [ 0x1002d53 ] };
- key <LatI> { [ 0x1002d49 ] };
- key <LatO> { [ 0x1002d44 ] };
- key <LatP> { [ 0x1002d43 ] };
-
- key <LatQ> { [ 0x1002d47 ] };
- key <LatS> { [ 0x1002d59, 0x1002d5a ] };
- key <LatD> { [ 0x1002d37, 0x1002d39 ] };
- key <LatF> { [ 0x1002d3c ] };
- key <LatG> { [ 0x1002d33 ] };
- key <LatH> { [ 0x1002d40 ] };
- key <LatJ> { [ 0x1002d4a ] };
- key <LatK> { [ 0x1002d3d ] };
- key <LatL> { [ 0x1002d4d ] };
- key <LatM> { [ 0x1002d4e ] };
-
- key <LatW> { [ 0x1002d61 ] };
- key <LatX> { [ 0x1002d45 ] };
- key <LatC> { [ 0x1002d5b ] };
- key <LatV> { [ 0x1002d56 ] };
- key <LatB> { [ 0x1002d31 ] };
- key <LatN> { [ 0x1002d4f ] };
-
- include "level3(ralt_switch)"
-};
-
-// Tifinagh keyboard; improved from the IRCAM layout to make all
-// tifinagh chars in unicode accessible (in shift positions for most
-// touareg letters; in altgr position for spirants.
-
-partial alphanumeric_keys
-xkb_symbols "tifinagh-alt" {
-
- name[Group1]="Morocco - Tifinagh alternative";
-
- key <TLDE> { [ twosuperior, asciitilde ] };
- key <AE01> { [ ampersand, 1 ] };
- key <AE02> { [asciitilde, 2, asciitilde ] };
- key <AE03> { [ quotedbl, 3, numbersign ] };
- key <AE04> { [apostrophe, 4, braceleft ] };
- key <AE05> { [ parenleft, 5, bracketleft ] };
- key <AE06> { [ minus, 6, bar ] };
- key <AE07> { [ grave, 7, grave ] };
- key <AE08> { [underscore, 8, backslash ] };
- key <AE09> { [asciicircum, 9, asciicircum ] };
- key <AE10> { [ at, 0, at ] };
- key <AE11> { [parenright, degree, bracketright ] };
- key <AE12> { [ equal, plus, braceright ] };
-
- key <AD01> { [ 0x1002d30 ] };
- key <AD02> { [ 0x1002d63, 0x1002d65, 0x1002d64 ] };
- key <AD03> { [ 0x1002d3b ] };
- key <AD04> { [ 0x1002d54, 0x1002d55 ] };
- key <AD05> { [ 0x1002d5c, 0x1002d5f, 0x1002d5d ] };
- key <AD06> { [ 0x1002d62 ] };
- key <AD07> { [ 0x1002d53 ] };
- key <AD08> { [ 0x1002d49 ] };
- key <AD09> { [ 0x1002d44 ] };
- key <AD10> { [ 0x1002d43, 0x1002d52 ] };
- key <AD11> { [ dead_circumflex ] };
- key <AD12> { [ dollar, sterling ] };
-
- key <AC01> { [ 0x1002d47, 0x1002d48 ] };
- key <AC02> { [ 0x1002d59, 0x1002d5a ] };
- key <AC03> { [ 0x1002d37, 0x1002d39, 0x1002d38, 0x1002d3a ] };
- key <AC04> { [ 0x1002d3c ] };
- key <AC05> { [ 0x1002d33, 0x1002d36, 0x1002d34, 0x1002d35 ] };
- key <AC06> { [ 0x1002d40, 0x1002d42, 0x1002d41 ] };
- key <AC07> { [ 0x1002d4a, 0x1002d4c, 0x1002d4b ] };
- key <AC08> { [ 0x1002d3d, 0x1002d3e, 0x1002d3f ] };
- key <AC09> { [ 0x1002d4d ] };
- key <AC10> { [ 0x1002d4e ] };
- key <AC11> { [ percent ] };
- key <BKSL> { [ asterisk, mu ] };
-
- key <AB01> { [ 0x1002d61, 0x1002d6f, 0x1002d60 ] };
- key <AB02> { [ 0x1002d45, 0x1002d46 ] };
- key <AB03> { [ 0x1002d5b, 0x1002d5e ] };
- key <AB04> { [ 0x1002d56, 0x1002d57, 0x1002d58 ] };
- key <AB05> { [ 0x1002d31, 0x1002d31, 0x1002d32 ] };
- key <AB06> { [ 0x1002d4f, 0x1002d50, 0x1002d51 ] };
- key <AB07> { [ comma, question ] };
- key <AB08> { [ semicolon, period ] };
- key <AB09> { [ colon, slash ] };
- key <AB10> { [ exclam, section ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "tifinagh-alt-phonetic" {
- include "ma(tifinagh-alt)"
-
- name[Group1]="Morocco - Tifinagh alternative phonetic";
-
- key <LatA> { [ 0x1002d30 ] };
- key <LatZ> { [ 0x1002d63, 0x1002d65, 0x1002d64 ] };
- key <LatE> { [ 0x1002d3b ] };
- key <LatR> { [ 0x1002d54, 0x1002d55 ] };
- key <LatT> { [ 0x1002d5c, 0x1002d5f, 0x1002d5d ] };
- key <LatY> { [ 0x1002d62 ] };
- key <LatU> { [ 0x1002d53 ] };
- key <LatI> { [ 0x1002d49 ] };
- key <LatO> { [ 0x1002d44 ] };
- key <LatP> { [ 0x1002d43, 0x1002d52 ] };
-
- key <LatQ> { [ 0x1002d47, 0x1002d48 ] };
- key <LatS> { [ 0x1002d59, 0x1002d5a ] };
- key <LatD> { [ 0x1002d37, 0x1002d39, 0x1002d38, 0x1002d3a ] };
- key <LatF> { [ 0x1002d3c ] };
- key <LatG> { [ 0x1002d33, 0x1002d36, 0x1002d34, 0x1002d35 ] };
- key <LatH> { [ 0x1002d40, 0x1002d42, 0x1002d41 ] };
- key <LatJ> { [ 0x1002d4a, 0x1002d4c, 0x1002d4b ] };
- key <LatK> { [ 0x1002d3d, 0x1002d3e, 0x1002d3f ] };
- key <LatL> { [ 0x1002d4d ] };
- key <LatM> { [ 0x1002d4e ] };
-
- key <LatW> { [ 0x1002d61, 0x1002d6f, 0x1002d60 ] };
- key <LatX> { [ 0x1002d45, 0x1002d46 ] };
- key <LatC> { [ 0x1002d5b, 0x1002d5e ] };
- key <LatV> { [ 0x1002d56, 0x1002d57, 0x1002d58 ] };
- key <LatB> { [ 0x1002d31, 0x1002d31, 0x1002d32 ] };
- key <LatN> { [ 0x1002d4f, 0x1002d50, 0x1002d51 ] };
-
- include "level3(ralt_switch)"
-};
+// Arabic AZERTY with modern Latin digits
+partial default alphanumeric_keys
+xkb_symbols "arabic" {
+ include "ara(azerty)"
+
+ name[Group1]="Arabic (Morocco)";
+};
+
+// French AZERTY keyboard used when typing French
+partial alphanumeric_keys
+xkb_symbols "french" {
+ include "fr(basic)"
+
+ name[Group1]="French (Morocco)";
+};
+
+// Clavier unicode tifinaghe de base réalisé par l'IRCAM (Institut Royal de la Culture Amazighe du Maroc) http://www.ircam.ma/
+// Support des lettres unicode tifinaghe-IRCAM, néotifinaghes & touarègues.
+// Les caractères tifinaghes sont accessibles en SHIFT positions pour le niveau 2, en ALTGR positions pour le niveau 3
+// Polices tifinaghes Unicode à télécharger depuis :
+// http://www.ircam.ma/documents/policesclavierunicode/hapaxber.ttf (licence non libre, libre téléchargement et distribution uniquement)
+// Minihowto ici: http://perso.menara.ma/~kebdani/tamazgha/gnu_amazigh.html
+
+partial alphanumeric_keys
+xkb_symbols "tifinagh" {
+
+ name[Group1]="Berber (Morocco, Tifinagh)";
+
+ key <TLDE> { [ twosuperior, NoAction ] };
+ key <AE01> { [ ampersand, 1 ] };
+ key <AE02> { [ NoAction, 2, asciitilde ] };
+ key <AE03> { [ quotedbl, 3, numbersign ] };
+ key <AE04> { [apostrophe, 4, braceleft ] };
+ key <AE05> { [ parenleft, 5, bracketleft ] };
+ key <AE06> { [ minus, 6, bar ] };
+ key <AE07> { [ NoAction , 7 ] };
+ key <AE08> { [underscore, 8, backslash ] };
+ key <AE09> { [NoAction, 9, asciicircum ] };
+ key <AE10> { [ NoAction , 0, at ] };
+ key <AE11> { [parenright, degree, bracketright ] };
+ key <AE12> { [ equal, plus, braceright ] };
+
+ key <AD01> { [ 0x1002d30 ] };
+ key <AD02> { [ 0x1002d63, 0x1002d65 ] };
+ key <AD03> { [ 0x1002d3b, NoAction,0x10020ac ] };
+ key <AD04> { [ 0x1002d54, 0x1002d55 ] };
+ key <AD05> { [ 0x1002d5c, 0x1002d5f ] };
+ key <AD06> { [ 0x1002d62 ] };
+ key <AD07> { [ 0x1002d53 ] };
+ key <AD08> { [ 0x1002d49 ] };
+ key <AD09> { [ 0x1002d44 ] };
+ key <AD10> { [ 0x1002d43 ] };
+ key <AD11> { [ 0x1002d6f ] };
+ key <AD12> { [ dollar, sterling, 0x10000a4] };
+
+ key <AC01> { [ 0x1002d47 ] };
+ key <AC02> { [ 0x1002d59, 0x1002d5a ] };
+ key <AC03> { [ 0x1002d37, 0x1002d39 ] };
+ key <AC04> { [ 0x1002d3c ] };
+ key <AC05> { [ 0x1002d33, 0x1002d33] };
+ key <AC06> { [ 0x1002d40 ] };
+ key <AC07> { [ 0x1002d4a ] };
+ key <AC08> { [ 0x1002d3d, 0x1002d3d ] };
+ key <AC09> { [ 0x1002d4d ] };
+ key <AC10> { [ 0x1002d4e ] };
+ key <AC11> { [ NoAction , percent ] };
+ key <BKSL> { [ asterisk, mu ] };
+
+ key <AB01> { [ 0x1002d61 ] };
+ key <AB02> { [ 0x1002d45 ] };
+ key <AB03> { [ 0x1002d5b ] };
+ key <AB04> { [ 0x1002d56 ] };
+ key <AB05> { [ 0x1002d31 ] };
+ key <AB06> { [ 0x1002d4f ] };
+ key <AB07> { [ comma, question ] };
+ key <AB08> { [ semicolon, period ] };
+ key <AB09> { [ colon, slash ] };
+ key <AB10> { [ exclam, section ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "tifinagh-phonetic" {
+
+ name[Group1]="Berber (Morocco, Tifinagh phonetic)";
+ include "ma(tifinagh)"
+
+ key <LatA> { [ 0x1002d30 ] };
+ key <LatZ> { [ 0x1002d63, 0x1002d65 ] };
+ key <LatE> { [ 0x1002d3b, NoAction,0x10020ac ] };
+ key <LatR> { [ 0x1002d54, 0x1002d55 ] };
+ key <LatT> { [ 0x1002d5c, 0x1002d5f ] };
+ key <LatY> { [ 0x1002d62 ] };
+ key <LatU> { [ 0x1002d53 ] };
+ key <LatI> { [ 0x1002d49 ] };
+ key <LatO> { [ 0x1002d44 ] };
+ key <LatP> { [ 0x1002d43 ] };
+
+ key <LatQ> { [ 0x1002d47 ] };
+ key <LatS> { [ 0x1002d59, 0x1002d5a ] };
+ key <LatD> { [ 0x1002d37, 0x1002d39 ] };
+ key <LatF> { [ 0x1002d3c ] };
+ key <LatG> { [ 0x1002d33 ] };
+ key <LatH> { [ 0x1002d40 ] };
+ key <LatJ> { [ 0x1002d4a ] };
+ key <LatK> { [ 0x1002d3d ] };
+ key <LatL> { [ 0x1002d4d ] };
+ key <LatM> { [ 0x1002d4e ] };
+
+ key <LatW> { [ 0x1002d61,0x1002d6f ] };
+ key <LatX> { [ 0x1002d45 ] };
+ key <LatC> { [ 0x1002d5b ] };
+ key <LatV> { [ 0x1002d56 ] };
+ key <LatB> { [ 0x1002d31 ] };
+ key <LatN> { [ 0x1002d4f ] };
+
+ include "level3(ralt_switch)"
+};
+
+// Clavier unicode tifinaghe étendu réalisé par l'IRCAM (Institut Royal de la Culture Amazighe du Maroc) http://www.ircam.ma/
+// Support des lettres unicode tifinaghe-IRCAM, néotifinaghes & touarègues.
+// Les caractères tifinaghes sont accessibles en SHIFT positions pour le niveau 2, en ALTGR positions pour le niveau 3
+// Polices tifinaghes Unicode à télécharger depuis :
+// http://www.ircam.ma/documents/policesclavierunicode/hapaxber.ttf (licence non libre, libre téléchargement et distribution uniquement)
+// Minihowto ici: http://perso.menara.ma/~kebdani/tamazgha/gnu_amazigh.html
+
+partial alphanumeric_keys
+xkb_symbols "tifinagh-extended" {
+
+ name[Group1]="Berber (Morocco, Tifinagh extended)";
+
+ key <TLDE> { [ twosuperior,0x100200C ] };
+ key <AE01> { [ ampersand, 1 ] };
+ key <AE02> { [0x1002d52, 2, asciitilde ] };
+ key <AE03> { [ quotedbl, 3, numbersign ] };
+ key <AE04> { [apostrophe, 4, braceleft ] };
+ key <AE05> { [ parenleft, 5, bracketleft ] };
+ key <AE06> { [ minus, 6, bar ] };
+ key <AE07> { [ 0x1002d64 , 7 ] };
+ key <AE08> { [underscore, 8, backslash ] };
+ key <AE09> { [ 0x1002014, 9, asciicircum ] };
+ key <AE10> { [ 0x100200d, 0, at ] };
+ key <AE11> { [parenright, degree, bracketright ] };
+ key <AE12> { [ equal, plus, braceright ] };
+
+ key <AD01> { [ 0x1002d30, 0x1002d36 ] };
+ key <AD02> { [ 0x1002d63, 0x1002d65 ] };
+ key <AD03> { [ 0x1002d3b, 0x1002d57, 0x10020ac ] };
+ key <AD04> { [ 0x1002d54, 0x1002d55 ] };
+ key <AD05> { [ 0x1002d5c, 0x1002d5f ] };
+ key <AD06> { [ 0x1002d62, 0x1002d42 ] };
+ key <AD07> { [ 0x1002d53, 0x1002d4c ] };
+ key <AD08> { [ 0x1002d49, 0x1002d58 ] };
+ key <AD09> { [ 0x1002d44, 0x1002d5d ] };
+ key <AD10> { [ 0x1002d43, 0x1002d5e ] };
+ key <AD11> { [ 0x1002d6f, 0x1002d60 ] };
+ key <AD12> { [ dollar, sterling, 0x10000a4] };
+
+ key <AC01> { [ 0x1002d47, 0x1002d48 ] };
+ key <AC02> { [ 0x1002d59, 0x1002d5a ] };
+ key <AC03> { [ 0x1002d37, 0x1002d39 ] };
+ key <AC04> { [ 0x1002d3c, 0x1002d35 ] };
+ key <AC05> { [ 0x1002d33, 0x1002d33 ] };
+ key <AC06> { [ 0x1002d40, 0x1002d41 ] };
+ key <AC07> { [ 0x1002d4a, 0x1002d4b ] };
+ key <AC08> { [ 0x1002d3d, 0x1002d3d ] };
+ key <AC09> { [ 0x1002d4d, 0x1002d38 ] };
+ key <AC10> { [ 0x1002d4e, 0x1002d3a ] };
+ key <AC11> { [ 0x1002d51, percent ] };
+ key <BKSL> { [ asterisk, mu ] };
+
+ key <AB01> { [ 0x1002d61, 0x1002d3e ] };
+ key <AB02> { [ 0x1002d45, 0x1002d46 ] };
+ key <AB03> { [ 0x1002d5b, 0x1002d3f ] };
+ key <AB04> { [ 0x1002d56, 0x1002d34 ] };
+ key <AB05> { [ 0x1002d31, 0x1002d32 ] };
+ key <AB06> { [ 0x1002d4f, 0x1002d50 ] };
+ key <AB07> { [ comma, question ] };
+ key <AB08> { [ semicolon, period ] };
+ key <AB09> { [ colon, slash ] };
+ key <AB10> { [ exclam, section ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "tifinagh-extended-phonetic" {
+ include "ma(tifinagh-extended)"
+
+ name[Group1]="Berber (Morocco, Tifinagh extended phonetic)";
+
+ key <LatA> { [ 0x1002d30 ] };
+ key <LatZ> { [ 0x1002d63, 0x1002d65 ] };
+ key <LatE> { [ 0x1002d3b, NoAction,0x10020ac ] };
+ key <LatR> { [ 0x1002d54, 0x1002d55 ] };
+ key <LatT> { [ 0x1002d5c, 0x1002d5f ] };
+ key <LatY> { [ 0x1002d62 ] };
+ key <LatU> { [ 0x1002d53 ] };
+ key <LatI> { [ 0x1002d49 ] };
+ key <LatO> { [ 0x1002d44 ] };
+ key <LatP> { [ 0x1002d43 ] };
+
+ key <LatQ> { [ 0x1002d47 ] };
+ key <LatS> { [ 0x1002d59, 0x1002d5a ] };
+ key <LatD> { [ 0x1002d37, 0x1002d39 ] };
+ key <LatF> { [ 0x1002d3c ] };
+ key <LatG> { [ 0x1002d33 ] };
+ key <LatH> { [ 0x1002d40 ] };
+ key <LatJ> { [ 0x1002d4a ] };
+ key <LatK> { [ 0x1002d3d ] };
+ key <LatL> { [ 0x1002d4d ] };
+ key <LatM> { [ 0x1002d4e ] };
+
+ key <LatW> { [ 0x1002d61 ] };
+ key <LatX> { [ 0x1002d45 ] };
+ key <LatC> { [ 0x1002d5b ] };
+ key <LatV> { [ 0x1002d56 ] };
+ key <LatB> { [ 0x1002d31 ] };
+ key <LatN> { [ 0x1002d4f ] };
+
+ include "level3(ralt_switch)"
+};
+
+// Tifinagh keyboard; improved from the IRCAM layout to make all
+// tifinagh chars in unicode accessible (in shift positions for most
+// touareg letters; in altgr position for spirants.
+
+partial alphanumeric_keys
+xkb_symbols "tifinagh-alt" {
+
+ name[Group1]="Berber (Morocco, Tifinagh alternative)";
+
+ key <TLDE> { [ twosuperior, asciitilde ] };
+ key <AE01> { [ ampersand, 1 ] };
+ key <AE02> { [asciitilde, 2, asciitilde ] };
+ key <AE03> { [ quotedbl, 3, numbersign ] };
+ key <AE04> { [apostrophe, 4, braceleft ] };
+ key <AE05> { [ parenleft, 5, bracketleft ] };
+ key <AE06> { [ minus, 6, bar ] };
+ key <AE07> { [ grave, 7, grave ] };
+ key <AE08> { [underscore, 8, backslash ] };
+ key <AE09> { [asciicircum, 9, asciicircum ] };
+ key <AE10> { [ at, 0, at ] };
+ key <AE11> { [parenright, degree, bracketright ] };
+ key <AE12> { [ equal, plus, braceright ] };
+
+ key <AD01> { [ 0x1002d30 ] };
+ key <AD02> { [ 0x1002d63, 0x1002d65, 0x1002d64 ] };
+ key <AD03> { [ 0x1002d3b ] };
+ key <AD04> { [ 0x1002d54, 0x1002d55 ] };
+ key <AD05> { [ 0x1002d5c, 0x1002d5f, 0x1002d5d ] };
+ key <AD06> { [ 0x1002d62 ] };
+ key <AD07> { [ 0x1002d53 ] };
+ key <AD08> { [ 0x1002d49 ] };
+ key <AD09> { [ 0x1002d44 ] };
+ key <AD10> { [ 0x1002d43, 0x1002d52 ] };
+ key <AD11> { [ dead_circumflex ] };
+ key <AD12> { [ dollar, sterling ] };
+
+ key <AC01> { [ 0x1002d47, 0x1002d48 ] };
+ key <AC02> { [ 0x1002d59, 0x1002d5a ] };
+ key <AC03> { [ 0x1002d37, 0x1002d39, 0x1002d38, 0x1002d3a ] };
+ key <AC04> { [ 0x1002d3c ] };
+ key <AC05> { [ 0x1002d33, 0x1002d36, 0x1002d34, 0x1002d35 ] };
+ key <AC06> { [ 0x1002d40, 0x1002d42, 0x1002d41 ] };
+ key <AC07> { [ 0x1002d4a, 0x1002d4c, 0x1002d4b ] };
+ key <AC08> { [ 0x1002d3d, 0x1002d3e, 0x1002d3f ] };
+ key <AC09> { [ 0x1002d4d ] };
+ key <AC10> { [ 0x1002d4e ] };
+ key <AC11> { [ percent ] };
+ key <BKSL> { [ asterisk, mu ] };
+
+ key <AB01> { [ 0x1002d61, 0x1002d6f, 0x1002d60 ] };
+ key <AB02> { [ 0x1002d45, 0x1002d46 ] };
+ key <AB03> { [ 0x1002d5b, 0x1002d5e ] };
+ key <AB04> { [ 0x1002d56, 0x1002d57, 0x1002d58 ] };
+ key <AB05> { [ 0x1002d31, 0x1002d31, 0x1002d32 ] };
+ key <AB06> { [ 0x1002d4f, 0x1002d50, 0x1002d51 ] };
+ key <AB07> { [ comma, question ] };
+ key <AB08> { [ semicolon, period ] };
+ key <AB09> { [ colon, slash ] };
+ key <AB10> { [ exclam, section ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "tifinagh-alt-phonetic" {
+ include "ma(tifinagh-alt)"
+
+ name[Group1]="Berber (Morocco, Tifinagh alternative phonetic)";
+
+ key <LatA> { [ 0x1002d30 ] };
+ key <LatZ> { [ 0x1002d63, 0x1002d65, 0x1002d64 ] };
+ key <LatE> { [ 0x1002d3b ] };
+ key <LatR> { [ 0x1002d54, 0x1002d55 ] };
+ key <LatT> { [ 0x1002d5c, 0x1002d5f, 0x1002d5d ] };
+ key <LatY> { [ 0x1002d62 ] };
+ key <LatU> { [ 0x1002d53 ] };
+ key <LatI> { [ 0x1002d49 ] };
+ key <LatO> { [ 0x1002d44 ] };
+ key <LatP> { [ 0x1002d43, 0x1002d52 ] };
+
+ key <LatQ> { [ 0x1002d47, 0x1002d48 ] };
+ key <LatS> { [ 0x1002d59, 0x1002d5a ] };
+ key <LatD> { [ 0x1002d37, 0x1002d39, 0x1002d38, 0x1002d3a ] };
+ key <LatF> { [ 0x1002d3c ] };
+ key <LatG> { [ 0x1002d33, 0x1002d36, 0x1002d34, 0x1002d35 ] };
+ key <LatH> { [ 0x1002d40, 0x1002d42, 0x1002d41 ] };
+ key <LatJ> { [ 0x1002d4a, 0x1002d4c, 0x1002d4b ] };
+ key <LatK> { [ 0x1002d3d, 0x1002d3e, 0x1002d3f ] };
+ key <LatL> { [ 0x1002d4d ] };
+ key <LatM> { [ 0x1002d4e ] };
+
+ key <LatW> { [ 0x1002d61, 0x1002d6f, 0x1002d60 ] };
+ key <LatX> { [ 0x1002d45, 0x1002d46 ] };
+ key <LatC> { [ 0x1002d5b, 0x1002d5e ] };
+ key <LatV> { [ 0x1002d56, 0x1002d57, 0x1002d58 ] };
+ key <LatB> { [ 0x1002d31, 0x1002d31, 0x1002d32 ] };
+ key <LatN> { [ 0x1002d4f, 0x1002d50, 0x1002d51 ] };
+
+ include "level3(ralt_switch)"
+};
diff --git a/xorg-server/xkeyboard-config/symbols/nl b/xorg-server/xkeyboard-config/symbols/nl
index 727410545..4c94a65b2 100644
--- a/xorg-server/xkeyboard-config/symbols/nl
+++ b/xorg-server/xkeyboard-config/symbols/nl
@@ -1,150 +1,150 @@
-// Basic layout based on converted file, from keytable file to xkb/symbols/ file
-// with mk_xkb by root@linux.chanae.stben.be Tue Sep 30 00:53:29 MET DST 1997
-
-// Converted from the nl-latin.map of the Linux kbd package by
-// Pablo Saratxaga <srtxg@f2219.n293.z2.fidonet.org>
-
-// Official layout by Benno Schulenberg <bensberg@justemail.net>, January 2007,
-// based on http://www.xs4all.nl/~koospol/public/Xmodmap-nl-deadkeys.gz
-
-
-default partial alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin"
-
- name[Group1]="Netherlands";
-
- key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
- key <AE06> { [ 6, ampersand, threequarters, fiveeighths ] };
- key <AE07> { [ 7, underscore, sterling, seveneighths ] };
- key <AE08> { [ 8, parenleft, braceleft, bracketleft ] };
- key <AE09> { [ 9, parenright, braceright, bracketright ] };
- key <AE10> { [ 0, apostrophe, degree, trademark ] };
- key <AE11> { [ slash, question, backslash, questiondown ] };
- key <AE12> { [ degree, dead_tilde, dead_cedilla, dead_ogonek ] };
-
- key <AD03> { [ e, E, EuroSign, cent ] };
- key <AD05> { [ t, T, thorn, THORN ] };
- key <AD06> { [ y, Y, ydiaeresis, yen ] };
- key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
- key <AD08> { [ i, I, idiaeresis, Idiaeresis ] };
- key <AD09> { [ o, O, ograve, Ograve ] };
- key <AD10> { [ p, P, paragraph, THORN ] };
- key <AD11> { [dead_diaeresis, dead_circumflex, asciitilde, asciicircum] };
- key <AD12> { [ asterisk, bar, dead_tilde, dead_macron ] };
-
- key <AC01> { [ a, A, aacute, Aacute ] };
- key <AC04> { [ f, F, ordfeminine, ordfeminine ] };
- key <AC10> { [ plus, plusminus, dead_acute, dead_doubleacute ] };
- key <AC11> { [dead_acute, dead_grave, apostrophe, grave ] };
- key <TLDE> { [ at, section, notsign, notsign ] };
-
- key <BKSL> { [ less, greater, dead_grave, dead_breve ] };
- key <AB06> { [ n, N, ntilde, Ntilde ] };
- key <AB07> { [ m, M, Greek_mu, masculine ] };
- key <AB08> { [ comma, semicolon, cedilla, guillemotleft] };
- key <AB09> { [ period, colon, periodcentered, guillemotright ] };
- key <AB10> { [ minus, equal, hyphen, dead_abovedot] };
-
- key <LSGT> { [bracketright, bracketleft, bar, brokenbar ] };
-
- include "level3(ralt_switch)"
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "std" {
-
- name[Group1]= "Netherlands - Standard";
-
- key <TLDE> { [ at, section, notsign ] };
- key <AE01> { [ 1, exclam, onesuperior ] };
- key <AE02> { [ 2, quotedbl, twosuperior ] };
- key <AE03> { [ 3, numbersign, threesuperior ] };
- key <AE04> { [ 4, dollar, onequarter ] };
- key <AE05> { [ 5, percent, onehalf ] };
- key <AE06> { [ 6, ampersand, threequarters ] };
- key <AE07> { [ 7, underscore, sterling ] };
- key <AE08> { [ 8, parenleft, braceleft ] };
- key <AE09> { [ 9, parenright, braceright ] };
- key <AE10> { [ 0, apostrophe ] };
- key <AE11> { [ slash, question, backslash ] };
- key <AE12> { [ degree, dead_tilde, dead_cedilla ] };
-
- key <AD01> { [ q, Q ] };
- key <AD02> { [ w, W ] };
- key <AD03> { [ e, E, EuroSign ] };
- key <AD04> { [ r, R, paragraph ] };
- key <AD05> { [ t, T ] };
- key <AD06> { [ y, Y ] };
- key <AD07> { [ u, U ] };
- key <AD08> { [ i, I ] };
- key <AD09> { [ o, O ] };
- key <AD10> { [ p, P ] };
- key <AD11> { [ dead_diaeresis, dead_circumflex ] };
- key <AD12> { [ asterisk, bar ] };
- key <BKSL> { [ less, greater ] };
-
- key <AC01> { [ a, A ] };
- key <AC02> { [ s, S, ssharp ] };
- key <AC03> { [ d, D ] };
- key <AC04> { [ f, F ] };
- key <AC05> { [ g, G ] };
- key <AC06> { [ h, H ] };
- key <AC07> { [ j, J ] };
- key <AC08> { [ k, K ] };
- key <AC09> { [ l, L ] };
- key <AC10> { [ plus, plusminus ] };
- key <AC11> { [ dead_acute, dead_grave ] };
-
- key <LSGT> { [ bracketright, bracketleft, bar ] };
- key <AB01> { [ z, Z, guillemotleft ] };
- key <AB02> { [ x, X, guillemotright ] };
- key <AB03> { [ c, C, cent ] };
- key <AB04> { [ v, V ] };
- key <AB05> { [ b, B ] };
- key <AB06> { [ n, N ] };
- key <AB07> { [ m, M, mu ] };
- key <AB08> { [ comma, semicolon ] };
- key <AB09> { [ period, colon, periodcentered ] };
- key <AB10> { [ minus, equal ] };
-
- include "level3(ralt_switch)"
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "Sundeadkeys" {
-
- // For naming consistency
-
- include "nl(basic)"
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "sundeadkeys" {
-
- // For naming consistency
-
- include "nl(Sundeadkeys)"
- name[Group1]="Netherlands - Sun dead keys";
-};
-
-// Copied from macintosh_vndr/nl
-partial alphanumeric_keys
-xkb_symbols "mac" {
-
- // Describes the differences between a very simple mac_US
- // keyboard and a very simple netherland keybaord
-
- include "latin"
-
- name[Group1]= "Netherlands - Macintosh";
-
- include "level3(ralt_switch)"
-
-// do just nothing
-
-};
+// Basic layout based on converted file, from keytable file to xkb/symbols/ file
+// with mk_xkb by root@linux.chanae.stben.be Tue Sep 30 00:53:29 MET DST 1997
+
+// Converted from the nl-latin.map of the Linux kbd package by
+// Pablo Saratxaga <srtxg@f2219.n293.z2.fidonet.org>
+
+// Official layout by Benno Schulenberg <bensberg@justemail.net>, January 2007,
+// based on http://www.xs4all.nl/~koospol/public/Xmodmap-nl-deadkeys.gz
+
+
+default partial alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin"
+
+ name[Group1]="Dutch";
+
+ key <AE02> { [ 2, quotedbl, twosuperior, oneeighth ] };
+ key <AE06> { [ 6, ampersand, threequarters, fiveeighths ] };
+ key <AE07> { [ 7, underscore, sterling, seveneighths ] };
+ key <AE08> { [ 8, parenleft, braceleft, bracketleft ] };
+ key <AE09> { [ 9, parenright, braceright, bracketright ] };
+ key <AE10> { [ 0, apostrophe, degree, trademark ] };
+ key <AE11> { [ slash, question, backslash, questiondown ] };
+ key <AE12> { [ degree, dead_tilde, dead_cedilla, dead_ogonek ] };
+
+ key <AD03> { [ e, E, EuroSign, cent ] };
+ key <AD05> { [ t, T, thorn, THORN ] };
+ key <AD06> { [ y, Y, ydiaeresis, yen ] };
+ key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
+ key <AD08> { [ i, I, idiaeresis, Idiaeresis ] };
+ key <AD09> { [ o, O, ograve, Ograve ] };
+ key <AD10> { [ p, P, paragraph, THORN ] };
+ key <AD11> { [dead_diaeresis, dead_circumflex, asciitilde, asciicircum] };
+ key <AD12> { [ asterisk, bar, dead_tilde, dead_macron ] };
+
+ key <AC01> { [ a, A, aacute, Aacute ] };
+ key <AC04> { [ f, F, ordfeminine, ordfeminine ] };
+ key <AC10> { [ plus, plusminus, dead_acute, dead_doubleacute ] };
+ key <AC11> { [dead_acute, dead_grave, apostrophe, grave ] };
+ key <TLDE> { [ at, section, notsign, notsign ] };
+
+ key <BKSL> { [ less, greater, dead_grave, dead_breve ] };
+ key <AB06> { [ n, N, ntilde, Ntilde ] };
+ key <AB07> { [ m, M, Greek_mu, masculine ] };
+ key <AB08> { [ comma, semicolon, cedilla, guillemotleft] };
+ key <AB09> { [ period, colon, periodcentered, guillemotright ] };
+ key <AB10> { [ minus, equal, hyphen, dead_abovedot] };
+
+ key <LSGT> { [bracketright, bracketleft, bar, brokenbar ] };
+
+ include "level3(ralt_switch)"
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "std" {
+
+ name[Group1]= "Dutch (standard)";
+
+ key <TLDE> { [ at, section, notsign ] };
+ key <AE01> { [ 1, exclam, onesuperior ] };
+ key <AE02> { [ 2, quotedbl, twosuperior ] };
+ key <AE03> { [ 3, numbersign, threesuperior ] };
+ key <AE04> { [ 4, dollar, onequarter ] };
+ key <AE05> { [ 5, percent, onehalf ] };
+ key <AE06> { [ 6, ampersand, threequarters ] };
+ key <AE07> { [ 7, underscore, sterling ] };
+ key <AE08> { [ 8, parenleft, braceleft ] };
+ key <AE09> { [ 9, parenright, braceright ] };
+ key <AE10> { [ 0, apostrophe ] };
+ key <AE11> { [ slash, question, backslash ] };
+ key <AE12> { [ degree, dead_tilde, dead_cedilla ] };
+
+ key <AD01> { [ q, Q ] };
+ key <AD02> { [ w, W ] };
+ key <AD03> { [ e, E, EuroSign ] };
+ key <AD04> { [ r, R, paragraph ] };
+ key <AD05> { [ t, T ] };
+ key <AD06> { [ y, Y ] };
+ key <AD07> { [ u, U ] };
+ key <AD08> { [ i, I ] };
+ key <AD09> { [ o, O ] };
+ key <AD10> { [ p, P ] };
+ key <AD11> { [ dead_diaeresis, dead_circumflex ] };
+ key <AD12> { [ asterisk, bar ] };
+ key <BKSL> { [ less, greater ] };
+
+ key <AC01> { [ a, A ] };
+ key <AC02> { [ s, S, ssharp ] };
+ key <AC03> { [ d, D ] };
+ key <AC04> { [ f, F ] };
+ key <AC05> { [ g, G ] };
+ key <AC06> { [ h, H ] };
+ key <AC07> { [ j, J ] };
+ key <AC08> { [ k, K ] };
+ key <AC09> { [ l, L ] };
+ key <AC10> { [ plus, plusminus ] };
+ key <AC11> { [ dead_acute, dead_grave ] };
+
+ key <LSGT> { [ bracketright, bracketleft, bar ] };
+ key <AB01> { [ z, Z, guillemotleft ] };
+ key <AB02> { [ x, X, guillemotright ] };
+ key <AB03> { [ c, C, cent ] };
+ key <AB04> { [ v, V ] };
+ key <AB05> { [ b, B ] };
+ key <AB06> { [ n, N ] };
+ key <AB07> { [ m, M, mu ] };
+ key <AB08> { [ comma, semicolon ] };
+ key <AB09> { [ period, colon, periodcentered ] };
+ key <AB10> { [ minus, equal ] };
+
+ include "level3(ralt_switch)"
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+ // For naming consistency
+
+ include "nl(basic)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+
+ // For naming consistency
+
+ include "nl(Sundeadkeys)"
+ name[Group1]="Dutch (Sun dead keys)";
+};
+
+// Copied from macintosh_vndr/nl
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+ // Describes the differences between a very simple mac_US
+ // keyboard and a very simple netherland keybaord
+
+ include "latin"
+
+ name[Group1]= "Dutch (Macintosh)";
+
+ include "level3(ralt_switch)"
+
+// do just nothing
+
+};
diff --git a/xorg-server/xkeyboard-config/symbols/pt b/xorg-server/xkeyboard-config/symbols/pt
index 951639603..e4472d1ec 100644
--- a/xorg-server/xkeyboard-config/symbols/pt
+++ b/xorg-server/xkeyboard-config/symbols/pt
@@ -1,220 +1,220 @@
-// based on a keyboard map from an 'xkb/symbols/pt' file
-
-partial default alphanumeric_keys
-xkb_symbols "basic" {
-
- include "latin(type4)"
-
- name[Group1]="Portugal";
-
- key <LSGT> { [ less, greater ] };
- key <AE03> { [ 3, numbersign, sterling, sterling ] };
- key <AE04> { [ 4, dollar, section, dollar ] };
- key <AE11> { [apostrophe, question, backslash, questiondown ] };
- key <AE12> { [guillemotleft, guillemotright, dead_cedilla, dead_ogonek ] };
-
- key <AD11> { [ plus, asterisk, dead_diaeresis, dead_abovering ] };
- key <AD12> { [dead_acute, dead_grave, dead_tilde, dead_macron ] };
-
- key <AC10> { [ ccedilla, Ccedilla, dead_acute, dead_doubleacute ] };
- key <AC11> { [ masculine, ordfeminine, dead_circumflex, dead_caron ] };
- key <TLDE> { [ backslash, bar, notsign, notsign ] };
-
- key <BKSL> { [dead_tilde, dead_circumflex, dead_grave, dead_breve] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "Sundeadkeys" {
-
- include "pt(basic)" // for consistent naming
-
- key <AD11> { [plus, asterisk, dead_diaeresis, dead_diaeresis ] };
- key <BKSL> { [dead_tilde, dead_circumflex ] };
- key <AD12> { [dead_acute, dead_grave ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "sundeadkeys" {
- include "pt(Sundeadkeys)" // for consistent naming
-
- name[Group1]="Portugal - Sun dead keys";
-};
-
-partial alphanumeric_keys
-xkb_symbols "nodeadkeys" {
-
- include "pt(basic)" // for consistent naming
-
- name[Group1]="Portugal - Eliminate dead keys";
-
- key <AE12> { [guillemotleft, guillemotright, cedilla, ogonek ] };
- key <AD11> { [ plus, asterisk, quotedbl, quotedbl ] };
- key <AD12> { [ acute, grave ] };
- key <AC10> { [ ccedilla, Ccedilla, acute, doubleacute ] };
- key <AC11> { [ masculine, ordfeminine, asciicircum, caron ] };
- key <BKSL> { [asciitilde, asciicircum ] };
- key <AB10> { [ minus, underscore, dead_belowdot, abovedot ] };
-};
-
-// mac version from Ricardo Cabral <bfe00991@mail.telepac.pt>
-// Copied from macintosh_vndr/pt
-partial alphanumeric_keys
-xkb_symbols "mac" {
-
- // Describes the differences between a very simple en_US
- // keyboard and a very simple Portuguese keybaord
-
- include "pt"
- name[Group1]= "Portugal - Macintosh";
-
- key <AE06> { [ 6, ampersand, threequarters, fiveeighths ] };
- key <AE08> { [ 8, parenleft, bracketleft, braceleft ] };
- key <AE09> { [ 9, parenright, bracketright, braceright ] };
- key <AE12> { [ plus, asterisk, dead_diaeresis ] };
- key <AC11> { [ dead_tilde, dead_circumflex ] };
- key <AD11> { [ masculine, ordfeminine ] };
- key <BKSL> { [ backslash, bar, dead_grave, dead_breve ] };
- key <TLDE> { [ grave, asciitilde, notsign, notsign ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "mac_sundeadkeys" {
- include "pt(mac)"
- name[Group1]= "Portugal - Macintosh, Sun dead keys";
-
- key <AE12> { [ plus, asterisk, dead_diaeresis, dead_diaeresis ] };
- key <AC11> { [ dead_tilde, dead_circumflex ] };
- key <AD12> { [ dead_acute, dead_grave ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "mac_nodeadkeys" {
- include "pt(mac)"
- name[Group1]= "Portugal - Macintosh, eliminate dead keys";
-
- key <AE12> { [ plus, asterisk, quotedbl, quotedbl ] };
- key <AC11> { [ asciitilde, asciicircum ] };
- key <AD12> { [ acute, grave ] };
-};
-
-
-//
-// Teclado Nativo Portugues 2005-07-19
-// Portuguese Nativo Keyboard
-// This is a Dvorak-based layout, designed for the Portuguese language
-//
-// Ari Caldeira ari@tecladobrasileiro.com.br
-//
-partial alphanumeric_keys
-xkb_symbols "nativo" {
-
- name[Group1]="Portugal - Nativo";
-
-// Numeric row
- key <TLDE> { [ plus, asterisk, dead_diaeresis, plusminus ] };
- key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
- key <AE02> { [ 2, quotedbl, at, twosuperior ] };
- key <AE03> { [ 3, numbersign, sterling, threesuperior ] };
- key <AE04> { [ 4, dollar, section, onequarter ] };
- key <AE05> { [ 5, percent, cent, 0x01002030 ] };
- key <AE06> { [ 6, ampersand, notsign, diaeresis ] };
- key <AE07> { [ 7, slash, braceleft, 0x0100032D ] };
- key <AE08> { [ 8, parenleft, bracketleft, 0x01000331 ] };
- key <AE09> { [ 9, parenright, bracketright, dead_horn ] };
- key <AE10> { [ 0, equal, braceright, dead_hook ] };
- key <AE11> { [ masculine, ordfeminine, dead_ogonek, 0x01000326 ] };
- key <AE12> { [ less, greater, dead_cedilla, dead_abovering ] };
-
-// Upper row
- key <AD01> { [ apostrophe, question, degree, questiondown ] };
- key <AD02> { [ comma, semicolon, 0x01000329, 0x01000315 ] };
- key <AD03> { [ period, colon, 0x01002022, periodcentered ] };
- key <AD04> { [ h, H, paragraph, paragraph ] };
- key <AD05> { [ x, X, multiply, division ] };
- key <AD06> { [ w, W, ubreve, Ubreve ] };
- key <AD07> { [ l, L, lstroke, Lstroke ] };
- key <AD08> { [ t, T, trademark, trademark ] };
- key <AD09> { [ c, C, copyright, copyright ] };
- key <AD10> { [ p, P, thorn, THORN ] };
- key <AD11> { [ dead_tilde, dead_circumflex, dead_caron, dead_doubleacute ] };
- key <AD12> { [ minus, underscore, 0x01002015, 0x01000336 ] };
-
-// Central row
- key <AC01> { [ i, I, idotless, Iabovedot ] };
- key <AC02> { [ e, E, EuroSign, EuroSign ] };
- key <AC03> { [ a, A, ae, AE ] };
- key <AC04> { [ o, O, oe, OE ] };
- key <AC05> { [ u, U, oslash, Ooblique ] };
- key <AC06> { [ m, M, mu, mu ] };
- key <AC07> { [ d, D, eth, ETH ] };
- key <AC08> { [ s, S, ssharp, ssharp ] };
- key <AC09> { [ r, R, registered, registered ] };
- key <AC10> { [ n, N, eng, ENG ] };
- key <AC11> { [ dead_acute, dead_grave, dead_macron, dead_breve ] };
- key <BKSL> { [ backslash, bar, dead_belowdot, dead_abovedot ] };
-
-// Lower row
- key <LSGT> { [ guillemotleft, guillemotright, 0x01002039, 0x0100203A ] };
- key <AB01> { [ y, Y, yen, yen ] };
- key <AB02> { [ ccedilla, Ccedilla ] };
- key <AB03> { [ j, J, 0x01000292, 0x010001B7 ] };
- key <AB04> { [ b, B, apostrophe, quotedbl ] };
- key <AB05> { [ k, K, currency, brokenbar ] };
- key <AB06> { [ q, Q, 0x01000259, 0x0100018F ] };
- key <AB07> { [ v, V, doublelowquotemark, singlelowquotemark ] };
- key <AB08> { [ g, G, leftdoublequotemark, leftsinglequotemark ] };
- key <AB09> { [ f, F, rightdoublequotemark, rightsinglequotemark ] };
- key <AB10> { [ z, Z, 0x0100201F, 0x0100201B ] };
-
- key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
-
-// Configures the use of the AltGr key
- include "level3(ralt_switch)"
-
-};
-
-
-//
-// Teclado Nativo Portugues para o teclado estadunidense 2005-07-19
-// Portuguese Nativo Keyboard for USA keyboards
-//
-// Ari Caldeira ari@tecladobrasileiro.com.br
-//
-partial alphanumeric_keys
-xkb_symbols "nativo-us" {
- include "pt(nativo)"
-
- name[Group1]="Portugal - Nativo for USA keyboards";
-
-// Lower row
- key <AB01> { [ y, Y, ccedilla, Ccedilla ] };
- key <AB02> { [ guillemotleft, guillemotright, 0x01002039, 0x0100203A ] };
-
-};
-
-
-//
-// Teclado Nativo Portugues para digitacao em Esperanto 2005-07-19
-// Portuguese Nativo Keyboard for typing Esperanto
-//
-// Ari Caldeira ari@tecladobrasileiro.com.br
-//
-partial alphanumeric_keys
-xkb_symbols "nativo-epo" {
- include "pt(nativo)"
-
- name[Group1]="Portugal - Nativo for Esperanto";
-
-// Upper row Esperanto
- key <AD04> { [ h, H, hcircumflex, Hcircumflex ] };
- key <AD05> { [ ccircumflex, Ccircumflex, x, X ] };
- key <AD06> { [ ubreve, Ubreve, w, W ] };
-
-// Lower row Esperanto
- key <AB01> { [ jcircumflex, Jcircumflex, y, Y ] };
- key <AB02> { [ scircumflex, Scircumflex, ccedilla, Ccedilla ] };
- key <AB06> { [ gcircumflex, Gcircumflex, q, Q ] };
-
-};
+// based on a keyboard map from an 'xkb/symbols/pt' file
+
+partial default alphanumeric_keys
+xkb_symbols "basic" {
+
+ include "latin(type4)"
+
+ name[Group1]="Portuguese";
+
+ key <LSGT> { [ less, greater ] };
+ key <AE03> { [ 3, numbersign, sterling, sterling ] };
+ key <AE04> { [ 4, dollar, section, dollar ] };
+ key <AE11> { [apostrophe, question, backslash, questiondown ] };
+ key <AE12> { [guillemotleft, guillemotright, dead_cedilla, dead_ogonek ] };
+
+ key <AD11> { [ plus, asterisk, dead_diaeresis, dead_abovering ] };
+ key <AD12> { [dead_acute, dead_grave, dead_tilde, dead_macron ] };
+
+ key <AC10> { [ ccedilla, Ccedilla, dead_acute, dead_doubleacute ] };
+ key <AC11> { [ masculine, ordfeminine, dead_circumflex, dead_caron ] };
+ key <TLDE> { [ backslash, bar, notsign, notsign ] };
+
+ key <BKSL> { [dead_tilde, dead_circumflex, dead_grave, dead_breve] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+ include "pt(basic)" // for consistent naming
+
+ key <AD11> { [plus, asterisk, dead_diaeresis, dead_diaeresis ] };
+ key <BKSL> { [dead_tilde, dead_circumflex ] };
+ key <AD12> { [dead_acute, dead_grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+ include "pt(Sundeadkeys)" // for consistent naming
+
+ name[Group1]="Portuguese (Sun dead keys)";
+};
+
+partial alphanumeric_keys
+xkb_symbols "nodeadkeys" {
+
+ include "pt(basic)" // for consistent naming
+
+ name[Group1]="Portugal - Eliminate dead keys";
+
+ key <AE12> { [guillemotleft, guillemotright, cedilla, ogonek ] };
+ key <AD11> { [ plus, asterisk, quotedbl, quotedbl ] };
+ key <AD12> { [ acute, grave ] };
+ key <AC10> { [ ccedilla, Ccedilla, acute, doubleacute ] };
+ key <AC11> { [ masculine, ordfeminine, asciicircum, caron ] };
+ key <BKSL> { [asciitilde, asciicircum ] };
+ key <AB10> { [ minus, underscore, dead_belowdot, abovedot ] };
+};
+
+// mac version from Ricardo Cabral <bfe00991@mail.telepac.pt>
+// Copied from macintosh_vndr/pt
+partial alphanumeric_keys
+xkb_symbols "mac" {
+
+ // Describes the differences between a very simple en_US
+ // keyboard and a very simple Portuguese keybaord
+
+ include "pt"
+ name[Group1]= "Portugal - Macintosh";
+
+ key <AE06> { [ 6, ampersand, threequarters, fiveeighths ] };
+ key <AE08> { [ 8, parenleft, bracketleft, braceleft ] };
+ key <AE09> { [ 9, parenright, bracketright, braceright ] };
+ key <AE12> { [ plus, asterisk, dead_diaeresis ] };
+ key <AC11> { [ dead_tilde, dead_circumflex ] };
+ key <AD11> { [ masculine, ordfeminine ] };
+ key <BKSL> { [ backslash, bar, dead_grave, dead_breve ] };
+ key <TLDE> { [ grave, asciitilde, notsign, notsign ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "mac_sundeadkeys" {
+ include "pt(mac)"
+ name[Group1]= "Portugal - Macintosh, Sun dead keys";
+
+ key <AE12> { [ plus, asterisk, dead_diaeresis, dead_diaeresis ] };
+ key <AC11> { [ dead_tilde, dead_circumflex ] };
+ key <AD12> { [ dead_acute, dead_grave ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "mac_nodeadkeys" {
+ include "pt(mac)"
+ name[Group1]= "Portugal - Macintosh, eliminate dead keys";
+
+ key <AE12> { [ plus, asterisk, quotedbl, quotedbl ] };
+ key <AC11> { [ asciitilde, asciicircum ] };
+ key <AD12> { [ acute, grave ] };
+};
+
+
+//
+// Teclado Nativo Portugues 2005-07-19
+// Portuguese Nativo Keyboard
+// This is a Dvorak-based layout, designed for the Portuguese language
+//
+// Ari Caldeira ari@tecladobrasileiro.com.br
+//
+partial alphanumeric_keys
+xkb_symbols "nativo" {
+
+ name[Group1]="Portugal - Nativo";
+
+// Numeric row
+ key <TLDE> { [ plus, asterisk, dead_diaeresis, plusminus ] };
+ key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
+ key <AE02> { [ 2, quotedbl, at, twosuperior ] };
+ key <AE03> { [ 3, numbersign, sterling, threesuperior ] };
+ key <AE04> { [ 4, dollar, section, onequarter ] };
+ key <AE05> { [ 5, percent, cent, 0x01002030 ] };
+ key <AE06> { [ 6, ampersand, notsign, diaeresis ] };
+ key <AE07> { [ 7, slash, braceleft, 0x0100032D ] };
+ key <AE08> { [ 8, parenleft, bracketleft, 0x01000331 ] };
+ key <AE09> { [ 9, parenright, bracketright, dead_horn ] };
+ key <AE10> { [ 0, equal, braceright, dead_hook ] };
+ key <AE11> { [ masculine, ordfeminine, dead_ogonek, 0x01000326 ] };
+ key <AE12> { [ less, greater, dead_cedilla, dead_abovering ] };
+
+// Upper row
+ key <AD01> { [ apostrophe, question, degree, questiondown ] };
+ key <AD02> { [ comma, semicolon, 0x01000329, 0x01000315 ] };
+ key <AD03> { [ period, colon, 0x01002022, periodcentered ] };
+ key <AD04> { [ h, H, paragraph, paragraph ] };
+ key <AD05> { [ x, X, multiply, division ] };
+ key <AD06> { [ w, W, ubreve, Ubreve ] };
+ key <AD07> { [ l, L, lstroke, Lstroke ] };
+ key <AD08> { [ t, T, trademark, trademark ] };
+ key <AD09> { [ c, C, copyright, copyright ] };
+ key <AD10> { [ p, P, thorn, THORN ] };
+ key <AD11> { [ dead_tilde, dead_circumflex, dead_caron, dead_doubleacute ] };
+ key <AD12> { [ minus, underscore, 0x01002015, 0x01000336 ] };
+
+// Central row
+ key <AC01> { [ i, I, idotless, Iabovedot ] };
+ key <AC02> { [ e, E, EuroSign, EuroSign ] };
+ key <AC03> { [ a, A, ae, AE ] };
+ key <AC04> { [ o, O, oe, OE ] };
+ key <AC05> { [ u, U, oslash, Ooblique ] };
+ key <AC06> { [ m, M, mu, mu ] };
+ key <AC07> { [ d, D, eth, ETH ] };
+ key <AC08> { [ s, S, ssharp, ssharp ] };
+ key <AC09> { [ r, R, registered, registered ] };
+ key <AC10> { [ n, N, eng, ENG ] };
+ key <AC11> { [ dead_acute, dead_grave, dead_macron, dead_breve ] };
+ key <BKSL> { [ backslash, bar, dead_belowdot, dead_abovedot ] };
+
+// Lower row
+ key <LSGT> { [ guillemotleft, guillemotright, 0x01002039, 0x0100203A ] };
+ key <AB01> { [ y, Y, yen, yen ] };
+ key <AB02> { [ ccedilla, Ccedilla ] };
+ key <AB03> { [ j, J, 0x01000292, 0x010001B7 ] };
+ key <AB04> { [ b, B, apostrophe, quotedbl ] };
+ key <AB05> { [ k, K, currency, brokenbar ] };
+ key <AB06> { [ q, Q, 0x01000259, 0x0100018F ] };
+ key <AB07> { [ v, V, doublelowquotemark, singlelowquotemark ] };
+ key <AB08> { [ g, G, leftdoublequotemark, leftsinglequotemark ] };
+ key <AB09> { [ f, F, rightdoublequotemark, rightsinglequotemark ] };
+ key <AB10> { [ z, Z, 0x0100201F, 0x0100201B ] };
+
+ key <SPCE> { [ space, space, nobreakspace, nobreakspace ] };
+
+// Configures the use of the AltGr key
+ include "level3(ralt_switch)"
+
+};
+
+
+//
+// Teclado Nativo Portugues para o teclado estadunidense 2005-07-19
+// Portuguese Nativo Keyboard for USA keyboards
+//
+// Ari Caldeira ari@tecladobrasileiro.com.br
+//
+partial alphanumeric_keys
+xkb_symbols "nativo-us" {
+ include "pt(nativo)"
+
+ name[Group1]="Portugal - Nativo for USA keyboards";
+
+// Lower row
+ key <AB01> { [ y, Y, ccedilla, Ccedilla ] };
+ key <AB02> { [ guillemotleft, guillemotright, 0x01002039, 0x0100203A ] };
+
+};
+
+
+//
+// Teclado Nativo Portugues para digitacao em Esperanto 2005-07-19
+// Portuguese Nativo Keyboard for typing Esperanto
+//
+// Ari Caldeira ari@tecladobrasileiro.com.br
+//
+partial alphanumeric_keys
+xkb_symbols "nativo-epo" {
+ include "pt(nativo)"
+
+ name[Group1]="Portugal - Nativo for Esperanto";
+
+// Upper row Esperanto
+ key <AD04> { [ h, H, hcircumflex, Hcircumflex ] };
+ key <AD05> { [ ccircumflex, Ccircumflex, x, X ] };
+ key <AD06> { [ ubreve, Ubreve, w, W ] };
+
+// Lower row Esperanto
+ key <AB01> { [ jcircumflex, Jcircumflex, y, Y ] };
+ key <AB02> { [ scircumflex, Scircumflex, ccedilla, Ccedilla ] };
+ key <AB06> { [ gcircumflex, Gcircumflex, q, Q ] };
+
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ro b/xorg-server/xkeyboard-config/symbols/ro
index f37a60dac..1d405a76a 100644
--- a/xorg-server/xkeyboard-config/symbols/ro
+++ b/xorg-server/xkeyboard-config/symbols/ro
@@ -192,44 +192,24 @@ xkb_symbols "winkeys" {
};
-// Crimean Tatar (Crimean Turkish) layouts.
partial
-xkb_symbols "crh_f" {
- include "tr(crh_f)"
+xkb_symbols "crh_dobruja" {
+ // Romania-specific Crimean Tatar (Crimean Turkish) Q layout.
+ // This layout is not yet standard. Common Alt-Q and F layouts are now also
+ // available right next to this layout in the new language-centric UI.
+ // Reşat SABIQ <tilde.birlik @ gmail . com>, 2009, 2011
+ // Özgür Qarahan <qarahan @ gmail . com>, 2009
- name[Group1]="Romania - Crimean Tatar (Turkish F)";
-};
-
-partial
-xkb_symbols "crh_alt" {
- include "tr(crh_alt)"
-
- name[Group1]="Romania - Crimean Tatar (Turkish Alt-Q)";
-};
-
-partial
-xkb_symbols "crh_dobruca1" {
include "tr(crh)"
- name[Group1]="Romania - Crimean Tatar (Dobruca-1 Q)";
-
- key <AD05> { [ t, T, tcedilla, Tcedilla ] };
- key <AD10> { [ p, P, abreve, Abreve ] };
-
- key <AC04> { [ f, F, ibreve, Ibreve ] };
- key <AC07> { [ iacute, Iacute, j, J ] };
-
- key <AB07> { [ m, M, trademark, masculine ] };
-};
-
-partial
-xkb_symbols "crh_dobruca2" {
- include "ro(crh_dobruca1)"
-
- name[Group1]="Romania - Crimean Tatar (Dobruca-2 Q)";
+ name[Group1]="Romania - Crimean Tatar (Dobruja Q)";
- key <AC04> { [ f, F, iacute, Iacute ] };
- key <AC07> { [ ibreve, Ibreve, j, J ] };
+ key <AD02> { [ w, W, abreve, Abreve ] };
+ key <AD05> { [ t, T, 0x100021b, 0x100021a ] };
+ key <AD10> { [ p, P, section ] };
+ key <AC02> { [ s, S, 0x1000219, 0x1000218 ] };
+ key <AC07> { [ ibreve, Ibreve, j, J ] };
+ key <AB07> { [ m, M, trademark, masculine ] };
};
// EXTRAS:
diff --git a/xorg-server/xkeyboard-config/symbols/tr b/xorg-server/xkeyboard-config/symbols/tr
index 9e9758c0e..6092ce1c2 100644
--- a/xorg-server/xkeyboard-config/symbols/tr
+++ b/xorg-server/xkeyboard-config/symbols/tr
@@ -1,352 +1,354 @@
-// based on
-// Turkish keyboard symbols for PC and xkb
-// This file distributed without any expressed or implied warranty
-// Nilgün Belma Bugüner <nilgun@belgeler.org>, 2005
-
-//Default Layout (Turkish Q)
-default partial
-xkb_symbols "basic" {
-
- include "latin"
-
- name[Group1]="Turkey";
-
- key <AE01> { [ 1, exclam, greater, exclamdown ] };
- key <AE02> { [ 2, apostrophe, sterling, twosuperior ] };
- key <AE03> { [ 3, asciicircum, numbersign, threesuperior ] };
- key <AE04> { [ 4, plus, dollar, onequarter ] };
- key <AE06> { [ 6, ampersand, threequarters, VoidSymbol ] };
- key <AE07> { [ 7, slash, braceleft, VoidSymbol ] };
- key <AE08> { [ 8, parenleft, bracketleft, VoidSymbol ] };
- key <AE09> { [ 9, parenright, bracketright, plusminus ] };
- key <AE10> { [ 0, equal, braceright, degree ] };
- key <AE11> { [ asterisk, question, backslash, questiondown ] };
- key <AE12> { [ minus, underscore, bar, VoidSymbol ] };
-
- key <AD02> { [ w, W, VoidSymbol, VoidSymbol ] };
- key <AD03> { [ e, E, EuroSign, VoidSymbol ] };
- key <AD05> { [ t, T, trademark, VoidSymbol ] };
- key <AD07> { [ u, U, ucircumflex, Ucircumflex ] };
- key <AD08> { type[group1] = "FOUR_LEVEL_ALPHABETIC",
- [ idotless, I, icircumflex, Icircumflex ] };
- key <AD09> { [ o, O, ocircumflex, Ocircumflex ] };
- key <AD10> { [ p, P, VoidSymbol, VoidSymbol ] };
- key <AD11> { [ gbreve, Gbreve ] };
- key <AD12> { [udiaeresis, Udiaeresis, asciitilde, dead_macron ] };
-
- key <AC01> { [ a, A, acircumflex, Acircumflex ] };
- key <AC02> { [ s, S, section, VoidSymbol ] };
- key <AC03> { [ d, D, VoidSymbol, VoidSymbol ] };
- key <AC04> { [ f, F, ordfeminine, VoidSymbol ] };
- key <AC05> { [ g, G, VoidSymbol, VoidSymbol ] };
- key <AC06> { [ h, H, VoidSymbol, VoidSymbol ] };
- key <AC08> { [ k, K, VoidSymbol, VoidSymbol ] };
- key <AC09> { [ l, L, VoidSymbol, VoidSymbol ] };
- key <AC10> { [ scedilla, Scedilla, acute, dead_acute ] };
- key <AC11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
- [ i, Iabovedot, apostrophe, dead_caron ] };
- key <TLDE> { [ quotedbl, eacute, less, degree ] };
-
- key <BKSL> { [ comma, semicolon, grave, dead_grave ] };
- key <LSGT> { [ less, greater, bar, brokenbar ] };
- key <AB08> { [odiaeresis, Odiaeresis, multiply, VoidSymbol ] };
- key <AB09> { [ ccedilla, Ccedilla, periodcentered, division ] };
- key <AB10> { [ period, colon, dead_abovedot, dead_abovedot ] };
-
- include "kpdl(comma)"
- include "level3(ralt_switch)"
-};
-
-
-// Turkish F Layout
-partial
-xkb_symbols "f" {
-
- include "latin"
-
- name[Group1]="Turkey - (F)";
-
- key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
- key <AE02> { [ 2, quotedbl, twosuperior, VoidSymbol ] };
- key <AE03> { [ 3, asciicircum, numbersign, threesuperior ] };
- key <AE04> { [ 4, dollar, onequarter, VoidSymbol ] };
- key <AE06> { [ 6, ampersand, threequarters, VoidSymbol ] };
- key <AE07> { [ 7, apostrophe, braceleft, VoidSymbol ] };
- key <AE08> { [ 8, parenleft, bracketleft, VoidSymbol ] };
- key <AE09> { [ 9, parenright, bracketright, plusminus ] };
- key <AE10> { [ 0, equal, braceright, degree ] };
- key <AE11> { [ slash, question, backslash, questiondown ] };
- key <AE12> { [ minus, underscore, bar, VoidSymbol ] };
-
- key <AD01> { [ f, F, at, VoidSymbol ] };
- key <AD02> { [ g, G, VoidSymbol, VoidSymbol ] };
- key <AD03> { [ gbreve, Gbreve, VoidSymbol, VoidSymbol ] };
- key <AD04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
- [ idotless, I, paragraph, VoidSymbol ] };
- key <AD05> { [ o, O, ocircumflex, Ocircumflex ] };
- key <AD06> { [ d, D, yen, VoidSymbol ] };
- key <AD07> { [ r, R, registered, VoidSymbol ] };
- key <AD08> { [ n, N, VoidSymbol, VoidSymbol ] };
- key <AD09> { [ h, H, degree, VoidSymbol ] };
- key <AD10> { [ p, P, sterling, VoidSymbol ] };
- key <AD11> { [ q, Q, dead_diaeresis, dead_abovering ] };
- key <AD12> { [ w, W, asciitilde, dead_breve ] };
-
- key <AC01> { [ u, U, ucircumflex, Ucircumflex ] };
- key <AC02> { type[group1] = "FOUR_LEVEL_ALPHABETIC",
- [ i, Iabovedot, icircumflex, Icircumflex ] };
- key <AC03> { [ e, E, EuroSign, VoidSymbol ] };
- key <AC04> { [ a, A, acircumflex, Acircumflex ] };
- key <AC05> { [udiaeresis, Udiaeresis, ucircumflex, Ucircumflex ] };
- key <AC06> { [ t, T, trademark, VoidSymbol ] };
- key <AC07> { [ k, K, VoidSymbol, VoidSymbol ] };
- key <AC08> { [ m, M, mu, VoidSymbol ] };
- key <AC09> { [ l, L, VoidSymbol, VoidSymbol ] };
- key <AC10> { [ y, Y, acute, dead_acute ] };
- key <AC11> { [ scedilla, Scedilla, numbersign, dead_caron ] };
- key <TLDE> { [ plus, asterisk, notsign, plusminus ] };
-
- key <BKSL> { [ x, X, grave, dead_grave ] };
- key <AB01> { [ j, J, guillemotleft, VoidSymbol ] };
- key <AB02> { [odiaeresis, Odiaeresis, guillemotright, VoidSymbol ] };
- key <AB03> { [ v, V, leftdoublequotemark, VoidSymbol ] };
- key <AB04> { [ c, C, cent, copyright ] };
- key <AB05> { [ ccedilla, Ccedilla, rightdoublequotemark, VoidSymbol] };
- key <AB06> { [ z, Z, VoidSymbol, VoidSymbol ] };
- key <AB07> { [ s, S, section, VoidSymbol ] };
- key <AB08> { [ b, B, multiply, nobreakspace ] };
- key <AB09> { [ period, colon, division, dead_abovedot] };
- key <AB10> { [ comma, semicolon, periodcentered, VoidSymbol ] };
- key <LSGT> { [ less, greater, bar, brokenbar ] };
-
- include "kpdl(comma)"
- include "level3(ralt_switch)"
-};
-
-// Turkish Alt-Q Layout
-partial
-xkb_symbols "alt" {
-
- include "latin"
-
- name[Group1]="Turkey - Alt-Q";
-
- key <AE07> { [ 7, ampersand, lowleftcorner, upleftcorner ] };
- key <AE08> { [ 8, asterisk, leftt, topt ] };
- key <AE09> { [ 9, parenleft, rightt, bott ] };
- key <AE10> { [ 0, parenright, lowrightcorner, uprightcorner ] };
- key <AE11> { [ minus, underscore, horizlinescan5, vertbar ] };
- key <AE12> { [ equal, plus, crossinglines ] };
-
- key <AD03> { [ e, E, EuroSign, VoidSymbol ] };
-// key <AD05> { [ t, T, trademark, VoidSymbol >
- key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
- key <AD08> { [ i, I, idotless, Iabovedot ] };
- key <AD09> { [ o, O, odiaeresis, Odiaeresis ] };
- key <AC01> { [ a, A, acircumflex, Acircumflex ] };
- key <AC02> { [ s, S, scedilla, Scedilla ] };
- key <AC05> { [ g, G, gbreve, Gbreve ] };
-
- key <AB03> { [ c, C, ccedilla, Ccedilla ] };
-
- include "level3(ralt_switch)"
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "Sundeadkeys" {
-
- // For naming consistency
- include "tr(basic)"
-
-};
-
-partial alphanumeric_keys
-xkb_symbols "sundeadkeys" {
-
- // For naming consistency
- include "tr(Sundeadkeys)"
-
- name[Group1]="Turkey - Sun dead keys";
-};
-
-// Kurdish Q Layout
-// Erdal Ronahi <erdal.ronahi@gmail.com>, 2006
-// http://ferheng.org
-// http://www.pckurd.net
-
-partial
-xkb_symbols "ku" {
-
- include "tr(basic)"
-
- name[Group1]="Turkey - Kurdish, Latin Q";
-
- key <AD08> { [ i, I, idotless, I ] };
- key <AD11> { [ x, X, gbreve, Gbreve ] };
- key <AD12> { [ucircumflex, Ucircumflex, asciitilde, dead_macron] };
- key <AC11> { [icircumflex, Icircumflex, apostrophe, dead_caron ] };
- key <AB08> { [ecircumflex, Ecircumflex, odiaeresis, Odiaeresis ] };
-};
-
-// Kurdish F Layout
-partial
-xkb_symbols "ku_f" {
-
- include "tr(f)"
-
- name[Group1]="Turkey - Kurdish, (F)";
-
- key <AD03> { [ x, X, gbreve, Gbreve] };
- key <AD04> { [ i, I, paragraph, VoidSymbol ] };
- key <AD05> { [ o, O, ocircumflex, Ocircumflex ] };
-
- key <AC01> { [ ucircumflex, Ucircumflex, udiaeresis, Udiaeresis ] };
- key <AC02> { [ icircumflex, Icircumflex, i, Iabovedot ] };
- key <AC05> { [ u, U, udiaeresis, Udiaeresis ] };
- key <AB02> { [ecircumflex, Ecircumflex, odiaeresis, Odiaeresis ] };
-
-};
-
-// Kurdish Alt-Q Layout
-partial
-xkb_symbols "ku_alt" {
-
- include "tr(alt)"
-
- name[Group1]="Turkey - Kurdish, Latin Alt-Q";
-
- key <AD03> { [ e, E, ecircumflex, Ecircumflex ] };
- key <AD07> { [ u, U, ucircumflex, Ucircumflex ] };
- key <AD08> { [ i, I, icircumflex, Icircumflex ] };
- key <AD09> { [ o, O, odiaeresis, Odiaeresis ] };
-};
-
-// Turkish international Q Layout
-// Alexis Pellicier <alexis.pellicier@nds.k12.tr>, 2007
-partial
-xkb_symbols "intl" {
- include "latin"
-
- name[Group1]="Turkey - International (with dead keys)";
-
- key <AE01> { type[group1] = "FOUR_LEVEL", [ 1, exclam, onesuperior, exclamdown ] };
- key <AE02> { type[group1] = "FOUR_LEVEL", [ 2, apostrophe, sterling, twosuperior ] };
- key <AE03> { type[group1] = "FOUR_LEVEL", [ 3, dead_circumflex, numbersign, threesuperior ] };
- key <AE04> { type[group1] = "FOUR_LEVEL", [ 4, plus, dollar, onequarter ] };
- key <AE06> { type[group1] = "FOUR_LEVEL", [ 6, ampersand, threequarters, VoidSymbol ] };
- key <AE07> { type[group1] = "FOUR_LEVEL", [ 7, slash, braceleft, VoidSymbol ] };
- key <AE08> { type[group1] = "FOUR_LEVEL", [ 8, parenleft, bracketleft, VoidSymbol ] };
- key <AE09> { type[group1] = "FOUR_LEVEL", [ 9, parenright, bracketright, plusminus ] };
- key <AE10> { type[group1] = "FOUR_LEVEL", [ 0, equal, braceright, degree ] };
- key <AE11> { type[group1] = "FOUR_LEVEL", [ asterisk, question, backslash, questiondown ] };
- key <AE12> { type[group1] = "FOUR_LEVEL", [ minus, underscore, division, VoidSymbol ] };
- key <AD02> { [ w, W, VoidSymbol, VoidSymbol ] };
- key <AD03> { [ e, E, EuroSign, cent ] };
- key <AD05> { [ t, T, trademark, VoidSymbol ] };
- key <AD07> { [ u, U, ucircumflex, Ucircumflex ] };
- key <AD08> { [ idotless, I, icircumflex, Icircumflex ] };
- key <AD09> { [ o, O, ocircumflex, Ocircumflex ] };
- key <AD10> { [ p, P, VoidSymbol, VoidSymbol ] };
- key <AD11> { [ gbreve, Gbreve, dead_diaeresis ] };
- key <AD12> { [udiaeresis, Udiaeresis, dead_tilde, dead_macron ] };
- key <AC01> { [ a, A, acircumflex, Acircumflex ] };
- key <AC02> { [ s, S, section, VoidSymbol ] };
- key <AC03> { [ d, D, VoidSymbol, VoidSymbol ] };
- key <AC04> { [ f, F, ordfeminine, VoidSymbol ] };
- key <AC05> { [ g, G, VoidSymbol, VoidSymbol ] };
- key <AC06> { [ h, H, VoidSymbol, VoidSymbol ] };
- key <AC08> { [ k, K, VoidSymbol, VoidSymbol ] };
- key <AC09> { [ l, L, VoidSymbol, VoidSymbol ] };
- key <AC10> { [ scedilla, Scedilla, dead_acute, dead_acute ] };
- key <AC11> { [ i, Iabovedot, apostrophe, dead_caron ] };
- key <TLDE> { type[group1] = "FOUR_LEVEL",[ quotedbl, eacute, plusminus, degree ] };
- key <BKSL> { type[group1] = "FOUR_LEVEL",[ comma, semicolon, dead_grave, dead_grave ] };
- key <LSGT> { type[group1] = "FOUR_LEVEL",[ less, greater, bar, brokenbar ] };
- key <AB08> { [odiaeresis, Odiaeresis, multiply, VoidSymbol ] };
- key <AB09> { [ ccedilla, Ccedilla, periodcentered, division ] };
- key <AB10> { type[group1] = "FOUR_LEVEL",[ period, colon, dead_abovedot, dead_abovedot ] };
-
- include "nbsp(level3)"
- include "level3(ralt_switch)"
-};
-
-
-partial alphanumeric_keys
-xkb_symbols "olpc" {
- name[Group1]= "Turkey";
- include "tr(intl)"
-
- key <AE01> { [ 1, exclam, VoidSymbol, VoidSymbol ] };
- key <AE06> { [ 6, ampersand, VoidSymbol, VoidSymbol ] };
- key <AE12> { type[group1] = "FOUR_LEVEL", [ minus, underscore, bar, VoidSymbol ] };
-
-
- key <AB03> { [ c, C, leftdoublequotemark, VoidSymbol ] };
- key <AB04> { [ v, V, rightdoublequotemark, VoidSymbol ] };
- key <AB05> { [ b, B, VoidSymbol, VoidSymbol ] };
- key <AB08> { [odiaeresis, Odiaeresis, VoidSymbol, VoidSymbol ] };
-
- key <AB09> { [ ccedilla, Ccedilla, multiply, VoidSymbol ] };
- key <AB10> { [ period, colon, division, dead_abovedot ] };
-
- key <I219> { [ less, greater, VoidSymbol, VoidSymbol ] };
-
-};
-
-// Crimean Tatar (Crimean Turkish) layouts.
-// First released: 2009.
-// These layouts are currently experimental. In particular, the mapping of letter 'x',
-// included for foreign words and shortcuts, might change in the future...
-// Reşat SABIQ <tilde.birlik @ gmail . com>
-// Özgür Qarahan <qarahan @ gmail . com>
-
-// Crimean Tatar (Crimean Turkish) Q Layout
-partial
-xkb_symbols "crh" {
-
- include "tr(basic)"
-
- name[Group1]="Turkey - Crimean Tatar (Turkish Q)";
-
- key <AE11> { [ x, X, asterisk, question ] };
-
- key <AC04> { [ f, F, iacute, Iacute ] };
- key <AC07> { [ j, J, ibreve, Ibreve ] };
- key <TLDE> { [ quotedbl, backslash, less, degree ] };
-
- key <AB02> { [ ntilde, Ntilde, guillemotright, greater ] };
-};
-
-// Crimean Tatar (Crimean Turkish) F Layout
-partial
-xkb_symbols "crh_f" {
-
- include "tr(f)"
-
- name[Group1]="Turkey - Crimean Tatar (Turkish F)";
-
- key <AE11> { [ x, X, slash, question ] };
-
- key <AD04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
- [ idotless, I, iacute, Iacute ] };
-
- key <AC07> { [ k, K, ibreve, Ibreve ] };
- key <TLDE> { [ plus, asterisk, backslash, plusminus ] };
-
- key <BKSL> { [ ntilde, Ntilde, grave, dead_grave ] };
-};
-
-// Crimean Tatar (Crimean Turkish) Alt-Q Layout
-partial
-xkb_symbols "crh_alt" {
-
- include "tr(alt)"
-
- name[Group1]="Turkey - Crimean Tatar (Turkish Alt-Q)";
-
- key <AC04> { [ f, F, iacute, Iacute ] };
- key <AC07> { [ j, J, ibreve, Ibreve ] };
-
- key <AB06> { [ n, N, ntilde, Ntilde ] };
-};
+// based on
+// Turkish keyboard symbols for PC and xkb
+// This file distributed without any expressed or implied warranty
+// Nilgün Belma Bugüner <nilgun@belgeler.org>, 2005
+
+//Default Layout (Turkish Q)
+default partial
+xkb_symbols "basic" {
+
+ include "latin"
+
+ name[Group1]="Turkey";
+
+ key <AE01> { [ 1, exclam, greater, exclamdown ] };
+ key <AE02> { [ 2, apostrophe, sterling, twosuperior ] };
+ key <AE03> { [ 3, asciicircum, numbersign, threesuperior ] };
+ key <AE04> { [ 4, plus, dollar, onequarter ] };
+ key <AE06> { [ 6, ampersand, threequarters, VoidSymbol ] };
+ key <AE07> { [ 7, slash, braceleft, VoidSymbol ] };
+ key <AE08> { [ 8, parenleft, bracketleft, VoidSymbol ] };
+ key <AE09> { [ 9, parenright, bracketright, plusminus ] };
+ key <AE10> { [ 0, equal, braceright, degree ] };
+ key <AE11> { [ asterisk, question, backslash, questiondown ] };
+ key <AE12> { [ minus, underscore, bar, VoidSymbol ] };
+
+ key <AD02> { [ w, W, VoidSymbol, VoidSymbol ] };
+ key <AD03> { [ e, E, EuroSign, VoidSymbol ] };
+ key <AD05> { [ t, T, trademark, VoidSymbol ] };
+ key <AD07> { [ u, U, ucircumflex, Ucircumflex ] };
+ key <AD08> { type[group1] = "FOUR_LEVEL_ALPHABETIC",
+ [ idotless, I, icircumflex, Icircumflex ] };
+ key <AD09> { [ o, O, ocircumflex, Ocircumflex ] };
+ key <AD10> { [ p, P, VoidSymbol, VoidSymbol ] };
+ key <AD11> { [ gbreve, Gbreve ] };
+ key <AD12> { [udiaeresis, Udiaeresis, asciitilde, dead_macron ] };
+
+ key <AC01> { [ a, A, acircumflex, Acircumflex ] };
+ key <AC02> { [ s, S, section, VoidSymbol ] };
+ key <AC03> { [ d, D, VoidSymbol, VoidSymbol ] };
+ key <AC04> { [ f, F, ordfeminine, VoidSymbol ] };
+ key <AC05> { [ g, G, VoidSymbol, VoidSymbol ] };
+ key <AC06> { [ h, H, VoidSymbol, VoidSymbol ] };
+ key <AC08> { [ k, K, VoidSymbol, VoidSymbol ] };
+ key <AC09> { [ l, L, VoidSymbol, VoidSymbol ] };
+ key <AC10> { [ scedilla, Scedilla, acute, dead_acute ] };
+ key <AC11> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
+ [ i, Iabovedot, apostrophe, dead_caron ] };
+ key <TLDE> { [ quotedbl, eacute, less, degree ] };
+
+ key <BKSL> { [ comma, semicolon, grave, dead_grave ] };
+ key <LSGT> { [ less, greater, bar, brokenbar ] };
+ key <AB08> { [odiaeresis, Odiaeresis, multiply, VoidSymbol ] };
+ key <AB09> { [ ccedilla, Ccedilla, periodcentered, division ] };
+ key <AB10> { [ period, colon, dead_abovedot, dead_abovedot ] };
+
+ include "kpdl(comma)"
+ include "level3(ralt_switch)"
+};
+
+
+// Turkish F Layout
+partial
+xkb_symbols "f" {
+
+ include "latin"
+
+ name[Group1]="Turkey - (F)";
+
+ key <AE01> { [ 1, exclam, onesuperior, exclamdown ] };
+ key <AE02> { [ 2, quotedbl, twosuperior, VoidSymbol ] };
+ key <AE03> { [ 3, asciicircum, numbersign, threesuperior ] };
+ key <AE04> { [ 4, dollar, onequarter, VoidSymbol ] };
+ key <AE06> { [ 6, ampersand, threequarters, VoidSymbol ] };
+ key <AE07> { [ 7, apostrophe, braceleft, VoidSymbol ] };
+ key <AE08> { [ 8, parenleft, bracketleft, VoidSymbol ] };
+ key <AE09> { [ 9, parenright, bracketright, plusminus ] };
+ key <AE10> { [ 0, equal, braceright, degree ] };
+ key <AE11> { [ slash, question, backslash, questiondown ] };
+ key <AE12> { [ minus, underscore, bar, VoidSymbol ] };
+
+ key <AD01> { [ f, F, at, VoidSymbol ] };
+ key <AD02> { [ g, G, VoidSymbol, VoidSymbol ] };
+ key <AD03> { [ gbreve, Gbreve, VoidSymbol, VoidSymbol ] };
+ key <AD04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
+ [ idotless, I, paragraph, VoidSymbol ] };
+ key <AD05> { [ o, O, ocircumflex, Ocircumflex ] };
+ key <AD06> { [ d, D, yen, VoidSymbol ] };
+ key <AD07> { [ r, R, registered, VoidSymbol ] };
+ key <AD08> { [ n, N, VoidSymbol, VoidSymbol ] };
+ key <AD09> { [ h, H, degree, VoidSymbol ] };
+ key <AD10> { [ p, P, sterling, VoidSymbol ] };
+ key <AD11> { [ q, Q, dead_diaeresis, dead_abovering ] };
+ key <AD12> { [ w, W, asciitilde, dead_breve ] };
+
+ key <AC01> { [ u, U, ucircumflex, Ucircumflex ] };
+ key <AC02> { type[group1] = "FOUR_LEVEL_ALPHABETIC",
+ [ i, Iabovedot, icircumflex, Icircumflex ] };
+ key <AC03> { [ e, E, EuroSign, VoidSymbol ] };
+ key <AC04> { [ a, A, acircumflex, Acircumflex ] };
+ key <AC05> { [udiaeresis, Udiaeresis, ucircumflex, Ucircumflex ] };
+ key <AC06> { [ t, T, trademark, VoidSymbol ] };
+ key <AC07> { [ k, K, VoidSymbol, VoidSymbol ] };
+ key <AC08> { [ m, M, mu, VoidSymbol ] };
+ key <AC09> { [ l, L, VoidSymbol, VoidSymbol ] };
+ key <AC10> { [ y, Y, acute, dead_acute ] };
+ key <AC11> { [ scedilla, Scedilla, numbersign, dead_caron ] };
+ key <TLDE> { [ plus, asterisk, notsign, plusminus ] };
+
+ key <BKSL> { [ x, X, grave, dead_grave ] };
+ key <AB01> { [ j, J, guillemotleft, VoidSymbol ] };
+ key <AB02> { [odiaeresis, Odiaeresis, guillemotright, VoidSymbol ] };
+ key <AB03> { [ v, V, leftdoublequotemark, VoidSymbol ] };
+ key <AB04> { [ c, C, cent, copyright ] };
+ key <AB05> { [ ccedilla, Ccedilla, rightdoublequotemark, VoidSymbol] };
+ key <AB06> { [ z, Z, VoidSymbol, VoidSymbol ] };
+ key <AB07> { [ s, S, section, VoidSymbol ] };
+ key <AB08> { [ b, B, multiply, nobreakspace ] };
+ key <AB09> { [ period, colon, division, dead_abovedot] };
+ key <AB10> { [ comma, semicolon, periodcentered, VoidSymbol ] };
+ key <LSGT> { [ less, greater, bar, brokenbar ] };
+
+ include "kpdl(comma)"
+ include "level3(ralt_switch)"
+};
+
+// Turkish Alt-Q Layout
+partial
+xkb_symbols "alt" {
+
+ include "latin"
+
+ name[Group1]="Turkey - Alt-Q";
+
+ key <AE07> { [ 7, ampersand, lowleftcorner, upleftcorner ] };
+ key <AE08> { [ 8, asterisk, leftt, topt ] };
+ key <AE09> { [ 9, parenleft, rightt, bott ] };
+ key <AE10> { [ 0, parenright, lowrightcorner, uprightcorner ] };
+ key <AE11> { [ minus, underscore, horizlinescan5, vertbar ] };
+ key <AE12> { [ equal, plus, crossinglines ] };
+
+ key <AD03> { [ e, E, EuroSign, VoidSymbol ] };
+// key <AD05> { [ t, T, trademark, VoidSymbol >
+ key <AD07> { [ u, U, udiaeresis, Udiaeresis ] };
+ key <AD08> { [ i, I, idotless, Iabovedot ] };
+ key <AD09> { [ o, O, odiaeresis, Odiaeresis ] };
+ key <AC01> { [ a, A, acircumflex, Acircumflex ] };
+ key <AC02> { [ s, S, scedilla, Scedilla ] };
+ key <AC05> { [ g, G, gbreve, Gbreve ] };
+
+ key <AB03> { [ c, C, ccedilla, Ccedilla ] };
+
+ include "level3(ralt_switch)"
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "Sundeadkeys" {
+
+ // For naming consistency
+ include "tr(basic)"
+
+};
+
+partial alphanumeric_keys
+xkb_symbols "sundeadkeys" {
+
+ // For naming consistency
+ include "tr(Sundeadkeys)"
+
+ name[Group1]="Turkey - Sun dead keys";
+};
+
+// Kurdish Q Layout
+// Erdal Ronahi <erdal.ronahi@gmail.com>, 2006
+// http://ferheng.org
+// http://www.pckurd.net
+
+partial
+xkb_symbols "ku" {
+
+ include "tr(basic)"
+
+ name[Group1]="Turkey - Kurdish, Latin Q";
+
+ key <AD08> { [ i, I, idotless, I ] };
+ key <AD11> { [ x, X, gbreve, Gbreve ] };
+ key <AD12> { [ucircumflex, Ucircumflex, asciitilde, dead_macron] };
+ key <AC11> { [icircumflex, Icircumflex, apostrophe, dead_caron ] };
+ key <AB08> { [ecircumflex, Ecircumflex, odiaeresis, Odiaeresis ] };
+};
+
+// Kurdish F Layout
+partial
+xkb_symbols "ku_f" {
+
+ include "tr(f)"
+
+ name[Group1]="Turkey - Kurdish, (F)";
+
+ key <AD03> { [ x, X, gbreve, Gbreve] };
+ key <AD04> { [ i, I, paragraph, VoidSymbol ] };
+ key <AD05> { [ o, O, ocircumflex, Ocircumflex ] };
+
+ key <AC01> { [ ucircumflex, Ucircumflex, udiaeresis, Udiaeresis ] };
+ key <AC02> { [ icircumflex, Icircumflex, i, Iabovedot ] };
+ key <AC05> { [ u, U, udiaeresis, Udiaeresis ] };
+ key <AB02> { [ecircumflex, Ecircumflex, odiaeresis, Odiaeresis ] };
+
+};
+
+// Kurdish Alt-Q Layout
+partial
+xkb_symbols "ku_alt" {
+
+ include "tr(alt)"
+
+ name[Group1]="Turkey - Kurdish, Latin Alt-Q";
+
+ key <AD03> { [ e, E, ecircumflex, Ecircumflex ] };
+ key <AD07> { [ u, U, ucircumflex, Ucircumflex ] };
+ key <AD08> { [ i, I, icircumflex, Icircumflex ] };
+ key <AD09> { [ o, O, odiaeresis, Odiaeresis ] };
+};
+
+// Turkish international Q Layout
+// Alexis Pellicier <alexis.pellicier@nds.k12.tr>, 2007
+partial
+xkb_symbols "intl" {
+ include "latin"
+
+ name[Group1]="Turkey - International (with dead keys)";
+
+ key <AE01> { type[group1] = "FOUR_LEVEL", [ 1, exclam, onesuperior, exclamdown ] };
+ key <AE02> { type[group1] = "FOUR_LEVEL", [ 2, apostrophe, sterling, twosuperior ] };
+ key <AE03> { type[group1] = "FOUR_LEVEL", [ 3, dead_circumflex, numbersign, threesuperior ] };
+ key <AE04> { type[group1] = "FOUR_LEVEL", [ 4, plus, dollar, onequarter ] };
+ key <AE06> { type[group1] = "FOUR_LEVEL", [ 6, ampersand, threequarters, VoidSymbol ] };
+ key <AE07> { type[group1] = "FOUR_LEVEL", [ 7, slash, braceleft, VoidSymbol ] };
+ key <AE08> { type[group1] = "FOUR_LEVEL", [ 8, parenleft, bracketleft, VoidSymbol ] };
+ key <AE09> { type[group1] = "FOUR_LEVEL", [ 9, parenright, bracketright, plusminus ] };
+ key <AE10> { type[group1] = "FOUR_LEVEL", [ 0, equal, braceright, degree ] };
+ key <AE11> { type[group1] = "FOUR_LEVEL", [ asterisk, question, backslash, questiondown ] };
+ key <AE12> { type[group1] = "FOUR_LEVEL", [ minus, underscore, division, VoidSymbol ] };
+ key <AD02> { [ w, W, VoidSymbol, VoidSymbol ] };
+ key <AD03> { [ e, E, EuroSign, cent ] };
+ key <AD05> { [ t, T, trademark, VoidSymbol ] };
+ key <AD07> { [ u, U, ucircumflex, Ucircumflex ] };
+ key <AD08> { [ idotless, I, icircumflex, Icircumflex ] };
+ key <AD09> { [ o, O, ocircumflex, Ocircumflex ] };
+ key <AD10> { [ p, P, VoidSymbol, VoidSymbol ] };
+ key <AD11> { [ gbreve, Gbreve, dead_diaeresis ] };
+ key <AD12> { [udiaeresis, Udiaeresis, dead_tilde, dead_macron ] };
+ key <AC01> { [ a, A, acircumflex, Acircumflex ] };
+ key <AC02> { [ s, S, section, VoidSymbol ] };
+ key <AC03> { [ d, D, VoidSymbol, VoidSymbol ] };
+ key <AC04> { [ f, F, ordfeminine, VoidSymbol ] };
+ key <AC05> { [ g, G, VoidSymbol, VoidSymbol ] };
+ key <AC06> { [ h, H, VoidSymbol, VoidSymbol ] };
+ key <AC08> { [ k, K, VoidSymbol, VoidSymbol ] };
+ key <AC09> { [ l, L, VoidSymbol, VoidSymbol ] };
+ key <AC10> { [ scedilla, Scedilla, dead_acute, dead_acute ] };
+ key <AC11> { [ i, Iabovedot, apostrophe, dead_caron ] };
+ key <TLDE> { type[group1] = "FOUR_LEVEL",[ quotedbl, eacute, plusminus, degree ] };
+ key <BKSL> { type[group1] = "FOUR_LEVEL",[ comma, semicolon, dead_grave, dead_grave ] };
+ key <LSGT> { type[group1] = "FOUR_LEVEL",[ less, greater, bar, brokenbar ] };
+ key <AB08> { [odiaeresis, Odiaeresis, multiply, VoidSymbol ] };
+ key <AB09> { [ ccedilla, Ccedilla, periodcentered, division ] };
+ key <AB10> { type[group1] = "FOUR_LEVEL",[ period, colon, dead_abovedot, dead_abovedot ] };
+
+ include "nbsp(level3)"
+ include "level3(ralt_switch)"
+};
+
+
+partial alphanumeric_keys
+xkb_symbols "olpc" {
+ name[Group1]= "Turkey";
+ include "tr(intl)"
+
+ key <AE01> { [ 1, exclam, VoidSymbol, VoidSymbol ] };
+ key <AE06> { [ 6, ampersand, VoidSymbol, VoidSymbol ] };
+ key <AE12> { type[group1] = "FOUR_LEVEL", [ minus, underscore, bar, VoidSymbol ] };
+
+
+ key <AB03> { [ c, C, leftdoublequotemark, VoidSymbol ] };
+ key <AB04> { [ v, V, rightdoublequotemark, VoidSymbol ] };
+ key <AB05> { [ b, B, VoidSymbol, VoidSymbol ] };
+ key <AB08> { [odiaeresis, Odiaeresis, VoidSymbol, VoidSymbol ] };
+
+ key <AB09> { [ ccedilla, Ccedilla, multiply, VoidSymbol ] };
+ key <AB10> { [ period, colon, division, dead_abovedot ] };
+
+ key <I219> { [ less, greater, VoidSymbol, VoidSymbol ] };
+
+};
+
+// Crimean Tatar (Crimean Turkish) layouts.
+// First released (by Ubuntu): 2009-02-24.
+// These layouts are not yet standard. In particular, the mapping of
+// letter 'x' might change in the future. This letter is not used in the
+// current official alphabet, but is included in the layouts for foreign words
+// and shortcuts.
+// Reşat SABIQ <tilde.birlik @ gmail . com>, 2009
+// Özgür Qarahan <qarahan @ gmail . com>, 2009
+
+// Crimean Tatar (Crimean Turkish) Q Layout
+partial
+xkb_symbols "crh" {
+
+ include "tr(basic)"
+
+ name[Group1]="Turkey - Crimean Tatar (Turkish Q)";
+
+ key <AE11> { [ x, X, asterisk, question ] };
+
+ key <AC04> { [ f, F, iacute, Iacute ] };
+ key <AC07> { [ j, J, ibreve, Ibreve ] };
+ key <TLDE> { [ quotedbl, backslash, less, degree ] };
+
+ key <AB02> { [ ntilde, Ntilde, guillemotright, greater ] };
+};
+
+// Crimean Tatar (Crimean Turkish) F Layout
+partial
+xkb_symbols "crh_f" {
+
+ include "tr(f)"
+
+ name[Group1]="Turkey - Crimean Tatar (Turkish F)";
+
+ key <AE11> { [ x, X, slash, question ] };
+
+ key <AD04> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",
+ [ idotless, I, iacute, Iacute ] };
+
+ key <AC07> { [ k, K, ibreve, Ibreve ] };
+ key <TLDE> { [ plus, asterisk, backslash, plusminus ] };
+
+ key <BKSL> { [ ntilde, Ntilde, grave, dead_grave ] };
+};
+
+// Crimean Tatar (Crimean Turkish) Alt-Q Layout
+partial
+xkb_symbols "crh_alt" {
+
+ include "tr(alt)"
+
+ name[Group1]="Turkey - Crimean Tatar (Turkish Alt-Q)";
+
+ key <AC04> { [ f, F, iacute, Iacute ] };
+ key <AC07> { [ j, J, ibreve, Ibreve ] };
+
+ key <AB06> { [ n, N, ntilde, Ntilde ] };
+};
diff --git a/xorg-server/xkeyboard-config/symbols/ua b/xorg-server/xkeyboard-config/symbols/ua
index a585ea2b3..ac8e4a276 100644
--- a/xorg-server/xkeyboard-config/symbols/ua
+++ b/xorg-server/xkeyboard-config/symbols/ua
@@ -1,330 +1,308 @@
-// based on
-// ukrainian standard keyboard
-// AEN <aen@logic.ru> & Leon Kanter <leon@geon.donetsk.ua>
-// Last Changes 2007/10/03 by Andriy Rysin <arysin@yahoo.com>
-
-// Unicode - 3d level added with some Unicode symbols (typographic quotes, m-dash, n-dash etc),
-// some often used cyrillics from other slavic languages and some ASCII symbols used often (slash, brackets...)
-partial default alphanumeric_keys
-xkb_symbols "unicode" {
- include "ua(winkeys)"
-
- name[Group1]= "Ukraine";
-
- key <TLDE> { [ U2019, apostrophe, U0301, asciitilde ] }; // Apostrophe and Stress symbol
- key <AE02> { [ 1, exclam, onesuperior ] };
- key <AE02> { [ 2, quotedbl, twosuperior ] };
- key <AE03> { [ 3, numerosign, U00A7, U20B4 ] }; // Paragraph and Hryvnia sign
- key <AE04> { [ 4, semicolon, dollar, EuroSign ] };
- key <AE05> { [ 5, percent, degree ] };
- key <AE06> { [ 6, colon, less ] };
- key <AE07> { [ 7, question, greater ] };
- key <AE08> { [ 8, asterisk, enfilledcircbullet ] };
- key <AE09> { [ 9, parenleft, bracketleft, braceleft ] };
- key <AE10> { [ 0, parenright, bracketright, braceright] };
- key <AE11> { [ minus, underscore, emdash, endash ] };
- key <AE12> { [ equal, plus, notequal, plusminus ] };
-
- key <AD03> { [ Cyrillic_u, Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU ]};
- key <AD04> { [ Cyrillic_ka, Cyrillic_KA, registered ] }; // Registered tm
- key <AD05> { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_io, Cyrillic_IO ] };
- key <AD12> { [ Ukrainian_yi,Ukrainian_YI, Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
- key <AC02> { [ Ukrainian_i, Ukrainian_I, Cyrillic_yeru, Cyrillic_YERU ] };
- key <AC11> { [ Ukrainian_ie,Ukrainian_IE, Cyrillic_e, Cyrillic_E ] };
-
- key <BKSL> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN, backslash, bar ] };
-
- key <AB03> { [ Cyrillic_es, Cyrillic_ES, copyright ] };
- key <AB06> { [ Cyrillic_te, Cyrillic_TE, trademark ] };
- key <AB08> { [ Cyrillic_be, Cyrillic_BE, guillemotleft, doublelowquotemark ] };
- key <AB09> { [ Cyrillic_yu, Cyrillic_YU, guillemotright, leftdoublequotemark ] };
- key <AB10> { [ period, comma, slash, ellipsis ] };
-
- include "level3(ralt_switch)"
-};
-
-partial alphanumeric_keys
-xkb_symbols "legacy" {
-
- name[Group1]= "Ukraine - Legacy";
-
- key <TLDE> { [ apostrophe, asciitilde ] };
- key <AE01> { [ 1, exclam ] };
- key <AE02> { [ 2, quotedbl ] };
- key <AE03> { [ 3, numbersign ] };
- key <AE04> { [ 4, asterisk ] };
- key <AE05> { [ 5, colon ] };
- key <AE06> { [ 6, comma ] };
- key <AE07> { [ 7, period ] };
- key <AE08> { [ 8, semicolon ] };
- key <AE09> { [ 9, parenleft ] };
- key <AE10> { [ 0, parenright ] };
- key <AE11> { [ minus, underscore ] };
- key <AE12> { [ equal, plus ] };
-
- key <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
- key <AD02> { [ Cyrillic_tse, Cyrillic_TSE ] };
- key <AD03> { [ Cyrillic_u, Cyrillic_U ] };
- key <AD04> { [ Cyrillic_ka, Cyrillic_KA ] };
- key <AD05> { [ Cyrillic_ie, Cyrillic_IE ] };
- key <AD06> { [ Cyrillic_en, Cyrillic_EN ] };
- key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE ] };
- key <AD08> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD09> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
- key <AD10> { [ Cyrillic_ze, Cyrillic_ZE ] };
- key <AD11> { [ Cyrillic_ha, Cyrillic_HA ] };
- key <AD12> { [ Ukrainian_yi, Ukrainian_YI ] };
- key <BKSL> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
-
- key <AC01> { [ Cyrillic_ef, Cyrillic_EF ] };
- key <AC02> { [ Ukrainian_i, Ukrainian_I ] };
- key <AC03> { [ Cyrillic_ve, Cyrillic_VE ] };
- key <AC04> { [ Cyrillic_a, Cyrillic_A ] };
- key <AC05> { [ Cyrillic_pe, Cyrillic_PE ] };
- key <AC06> { [ Cyrillic_er, Cyrillic_ER ] };
- key <AC07> { [ Cyrillic_o, Cyrillic_O ] };
- key <AC08> { [ Cyrillic_el, Cyrillic_EL ] };
- key <AC09> { [ Cyrillic_de, Cyrillic_DE ] };
- key <AC10> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <AC11> { [ Ukrainian_ie, Ukrainian_IE ] };
-
- key <AB01> { [ Cyrillic_ya, Cyrillic_YA ] };
- key <AB02> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <AB03> { [ Cyrillic_es, Cyrillic_ES ] };
- key <AB04> { [ Cyrillic_em, Cyrillic_EM ] };
- key <AB06> { [ Cyrillic_te, Cyrillic_TE ] };
- key <AB05> { [ Cyrillic_i, Cyrillic_I ] };
- key <AB07> { [Cyrillic_softsign,Cyrillic_SOFTSIGN ] };
- key <AB08> { [ Cyrillic_be, Cyrillic_BE ] };
- key <AB09> { [ Cyrillic_yu, Cyrillic_YU ] };
- key <AB10> { [ slash, question ] };
-
- key <LSGT> { [ slash, bar ] };
- // End alphanumeric section
-};
-
-partial alphanumeric_keys
-xkb_symbols "winkeys" {
- include "ua(legacy)"
-
- name[Group1]= "Ukraine - Winkeys";
-
- key <AE03> { [ 3, numerosign ] };
- key <AE04> { [ 4, semicolon ] };
- key <AE05> { [ 5, percent ] };
- key <AE06> { [ 6, colon ] };
- key <AE07> { [ 7, question ] };
- key <AE08> { [ 8, asterisk ] };
- key <AB10> { [ period, comma ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "typewriter" {
- include "ua(legacy)"
-
- name[Group1]= "Ukraine - Typewriter";
-
- key <TLDE> { [ apostrophe, quotedbl ] };
- key <AE01> { [ exclam, 1 ] };
- key <AE02> { [ numerosign, 2 ] };
- key <AE03> { [ slash, 3 ] };
- key <AE04> { [ semicolon, 4 ] };
- key <AE05> { [ colon, 5 ] };
- key <AE06> { [ comma, 6 ] };
- key <AE07> { [ period, 7 ] };
- key <AE08> { [ underscore, 8 ] };
- key <AE09> { [ question, 9 ] };
- key <AE10> { [ percent, 0 ] };
-
- key <AD12> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
-
- key <AC02> { [ Cyrillic_i, Cyrillic_I ] };
-
- key <AB05> { [ Ukrainian_i, Ukrainian_I ] };
-
- key <AB10> { [ Ukrainian_yi, Ukrainian_YI ] };
-
- key <BKSL> { [ parenleft, parenright ] };
-};
-
-partial alphanumeric_keys
-xkb_symbols "phonetic" {
- include "ua(legacy)"
-
- name[Group1]= "Ukraine - Phonetic";
-
- key <LatQ> { [ Cyrillic_ya, Cyrillic_YA ] };
- key <LatW> { [ Cyrillic_ve, Cyrillic_VE ] };
- key <LatE> { [ Cyrillic_ie, Cyrillic_IE ] };
- key <LatR> { [ Cyrillic_er, Cyrillic_ER ] };
- key <LatT> { [ Cyrillic_te, Cyrillic_TE ] };
- key <LatY> { [ Cyrillic_i, Cyrillic_I ] };
- key <LatU> { [ Cyrillic_u, Cyrillic_U ] };
- key <LatI> { [ Ukrainian_i, Ukrainian_I ] };
- key <LatO> { [ Cyrillic_o, Cyrillic_O ] };
- key <LatP> { [ Cyrillic_pe, Cyrillic_PE ] };
- key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
-
- key <LatA> { [ Cyrillic_a, Cyrillic_A ] };
- key <LatS> { [ Cyrillic_es, Cyrillic_ES ] };
- key <LatD> { [ Cyrillic_de, Cyrillic_DE ] };
- key <LatF> { [ Cyrillic_ef, Cyrillic_EF ] };
- key <LatG> { [ Cyrillic_ghe, Cyrillic_GHE ] };
- key <LatH> { [ Cyrillic_ha, Cyrillic_HA ] };
- key <LatJ> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
- key <LatK> { [ Cyrillic_ka, Cyrillic_KA ] };
- key <LatL> { [ Cyrillic_el, Cyrillic_EL ] };
- key <AC10> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
- key <AC11> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <BKSL> { [ Cyrillic_yu, Cyrillic_YU ] };
-
- key <LatZ> { [ Cyrillic_ze, Cyrillic_ZE ] };
- key <LatX> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
- key <LatC> { [ Cyrillic_tse, Cyrillic_TSE ] };
- key <LatV> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <LatB> { [ Cyrillic_be, Cyrillic_BE ] };
- key <LatN> { [ Cyrillic_en, Cyrillic_EN ] };
- key <LatM> { [ Cyrillic_em, Cyrillic_EM ] };
- key <AB08> { [ Ukrainian_yi, Ukrainian_YI ] };
- key <AB09> { [ Ukrainian_ie, Ukrainian_IE ] };
- key <AB10> { [ slash, question ] };
-};
-
-// ukrainian keyboard layout RSTU 2019-91 (Respublikanskij STandart Ukrajiny)
-// Andrew Porokhnyak <aop@porokhnyak.org>
-partial alphanumeric_keys
-xkb_symbols "rstu" {
- include "ua(legacy)"
-
- name[Group1]= "Ukraine - Standard RSTU";
-
- key <TLDE> { [ apostrophe, question ] };
- key <AE01> { [ exclam, 1 ] };
- key <AE02> { [ quotedbl, 2 ] };
- key <AE03> { [ numbersign, 3 ] };
- key <AE04> { [ semicolon, 4 ] };
- key <AE05> { [ colon, 5 ] };
- key <AE06> { [ comma, 6 ] };
- key <AE07> { [ period, 7 ] };
- key <AE08> { [ asterisk, 8 ] };
- key <AE09> { [ parenleft, 9 ] };
- key <AE10> { [ parenright, 0 ] };
-
- key <AD12> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
-
- key <AC02> { [ Cyrillic_i, Cyrillic_I ] };
-
- key <AB05> { [ Ukrainian_i, Ukrainian_I ] };
-
- key <AB10> { [ Ukrainian_yi, Ukrainian_YI ] };
-
- key <BKSL> { [ slash, percent ] };
-};
-
-// russian keyboard layout RSTU 2019-91 (Respublikanskij STandart Ukrajiny)
-// Andrew Porokhnyak <aop@porokhnyak.org>
-partial alphanumeric_keys
-xkb_symbols "rstu_ru" {
- include "ru(common)"
- name[Group1]= "Ukraine - Standard RSTU on Russian layout";
-
- key <TLDE> { [ apostrophe, question ] };
- key <AE01> { [ exclam, 1 ] };
- key <AE02> { [ quotedbl, 2 ] };
- key <AE03> { [ numbersign, 3 ] };
- key <AE04> { [ semicolon, 4 ] };
- key <AE05> { [ colon, 5 ] };
- key <AE06> { [ comma, 6 ] };
- key <AE07> { [ period, 7 ] };
- key <AE08> { [ asterisk, 8 ] };
- key <AE09> { [ parenleft, 9 ] };
- key <AE10> { [ parenright, 0 ] };
- key <BKSL> { [ slash, percent ] };
-
-key.type[group1]="ALPHABETIC";
-
- key <AB10> { [ Cyrillic_io, Cyrillic_IO ] };
-};
-
-//Homophonic keyboard layout (Tomas Marko Miljenović)
-//Based on Ukrainian National Transliteration, commonly used phonetic layouts for Mac and Win.
-//Existing layout "phonetic" used as template.
-partial alphanumeric_keys
-xkb_symbols "homophonic" {
- include "ua(legacy)"
- name[Group1]= "Ukraine - Homophonic";
-
- key <TLDE> { [ grave, underscore ] };
- key <AE01> { [ 1, exclam ] };
- key <AE02> { [ 2, at ] };
- key <AE03> { [ 3, semicolon ] };
- key <AE04> { [ 4, colon ] };
- key <AE05> { [ 5, percent ] };
- key <AE06> { [ 6, apostrophe ] };
- key <AE07> { [ 7, quotedbl ] };
- key <AE08> { [ 8, asterisk ] };
- key <AE09> { [ 9, parenleft ] };
- key <AE10> { [ 0, parenright ] };
- key <AE11> { [ Ukrainian_ie, Ukrainian_IE ] };
- key <AE12> { [ Ukrainian_yi, Ukrainian_YI ] };
-
- key <LatQ> { [ Cyrillic_ya, Cyrillic_YA ] };
- key <LatW> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <LatE> { [ Cyrillic_ie, Cyrillic_IE ] };
- key <LatR> { [ Cyrillic_er, Cyrillic_ER ] };
- key <LatT> { [ Cyrillic_te, Cyrillic_TE ] };
- key <LatY> { [ Cyrillic_i, Cyrillic_I ] };
- key <LatU> { [ Cyrillic_u, Cyrillic_U ] };
- key <LatI> { [ Ukrainian_i, Ukrainian_I ] };
- key <LatO> { [ Cyrillic_o, Cyrillic_O ] };
- key <LatP> { [ Cyrillic_pe, Cyrillic_PE ] };
- key <AD11> { [ Cyrillic_yu, Cyrillic_YU ] };
- key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
-
- key <LatA> { [ Cyrillic_a, Cyrillic_A ] };
- key <LatS> { [ Cyrillic_es, Cyrillic_ES ] };
- key <LatD> { [ Cyrillic_de, Cyrillic_DE ] };
- key <LatF> { [ Cyrillic_ef, Cyrillic_EF ] };
- key <LatG> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
- key <LatH> { [ Cyrillic_ghe, Cyrillic_GHE ] };
- key <LatJ> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
- key <LatK> { [ Cyrillic_ka, Cyrillic_KA ] };
- key <LatL> { [ Cyrillic_el, Cyrillic_EL ] };
- key <AC10> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <AC11> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <BKSL> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
-
- key <LatZ> { [ Cyrillic_ze, Cyrillic_ZE ] };
- key <LatX> { [ Cyrillic_ha, Cyrillic_HA ] };
- key <LatC> { [ Cyrillic_tse, Cyrillic_TSE ] };
- key <LatV> { [ Cyrillic_ve, Cyrillic_VE ] };
- key <LatB> { [ Cyrillic_be, Cyrillic_BE ] };
- key <LatN> { [ Cyrillic_en, Cyrillic_EN ] };
- key <LatM> { [ Cyrillic_em, Cyrillic_EM ] };
- key <AB08> { [ comma, less ] };
- key <AB09> { [ period, greater ] };
- key <AB10> { [ slash, question ] };
-};
-
-// Crimean Tatar (Crimean Turkish) layouts.
-partial
-xkb_symbols "crh" {
- include "tr(crh)"
-
- name[Group1]="Ukraine - Crimean Tatar (Turkish Q)";
-};
-
-partial
-xkb_symbols "crh_f" {
- include "tr(crh_f)"
-
- name[Group1]="Ukraine - Crimean Tatar (Turkish F)";
-};
-
-partial
-xkb_symbols "crh_alt" {
- include "tr(crh_alt)"
-
- name[Group1]="Ukraine - Crimean Tatar (Turkish Alt-Q)";
-};
+// based on
+// ukrainian standard keyboard
+// AEN <aen@logic.ru> & Leon Kanter <leon@geon.donetsk.ua>
+// Last Changes 2007/10/03 by Andriy Rysin <arysin@yahoo.com>
+
+// Unicode - 3d level added with some Unicode symbols (typographic quotes, m-dash, n-dash etc),
+// some often used cyrillics from other slavic languages and some ASCII symbols used often (slash, brackets...)
+partial default alphanumeric_keys
+xkb_symbols "unicode" {
+ include "ua(winkeys)"
+
+ name[Group1]= "Ukraine";
+
+ key <TLDE> { [ U2019, apostrophe, U0301, asciitilde ] }; // Apostrophe and Stress symbol
+ key <AE02> { [ 1, exclam, onesuperior ] };
+ key <AE02> { [ 2, quotedbl, twosuperior ] };
+ key <AE03> { [ 3, numerosign, U00A7, U20B4 ] }; // Paragraph and Hryvnia sign
+ key <AE04> { [ 4, semicolon, dollar, EuroSign ] };
+ key <AE05> { [ 5, percent, degree ] };
+ key <AE06> { [ 6, colon, less ] };
+ key <AE07> { [ 7, question, greater ] };
+ key <AE08> { [ 8, asterisk, enfilledcircbullet ] };
+ key <AE09> { [ 9, parenleft, bracketleft, braceleft ] };
+ key <AE10> { [ 0, parenright, bracketright, braceright] };
+ key <AE11> { [ minus, underscore, emdash, endash ] };
+ key <AE12> { [ equal, plus, notequal, plusminus ] };
+
+ key <AD03> { [ Cyrillic_u, Cyrillic_U, Byelorussian_shortu, Byelorussian_SHORTU ]};
+ key <AD04> { [ Cyrillic_ka, Cyrillic_KA, registered ] }; // Registered tm
+ key <AD05> { [ Cyrillic_ie, Cyrillic_IE, Cyrillic_io, Cyrillic_IO ] };
+ key <AD12> { [ Ukrainian_yi,Ukrainian_YI, Cyrillic_hardsign, Cyrillic_HARDSIGN ] };
+ key <AC02> { [ Ukrainian_i, Ukrainian_I, Cyrillic_yeru, Cyrillic_YERU ] };
+ key <AC11> { [ Ukrainian_ie,Ukrainian_IE, Cyrillic_e, Cyrillic_E ] };
+
+ key <BKSL> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN, backslash, bar ] };
+
+ key <AB03> { [ Cyrillic_es, Cyrillic_ES, copyright ] };
+ key <AB06> { [ Cyrillic_te, Cyrillic_TE, trademark ] };
+ key <AB08> { [ Cyrillic_be, Cyrillic_BE, guillemotleft, doublelowquotemark ] };
+ key <AB09> { [ Cyrillic_yu, Cyrillic_YU, guillemotright, leftdoublequotemark ] };
+ key <AB10> { [ period, comma, slash, ellipsis ] };
+
+ include "level3(ralt_switch)"
+};
+
+partial alphanumeric_keys
+xkb_symbols "legacy" {
+
+ name[Group1]= "Ukraine - Legacy";
+
+ key <TLDE> { [ apostrophe, asciitilde ] };
+ key <AE01> { [ 1, exclam ] };
+ key <AE02> { [ 2, quotedbl ] };
+ key <AE03> { [ 3, numbersign ] };
+ key <AE04> { [ 4, asterisk ] };
+ key <AE05> { [ 5, colon ] };
+ key <AE06> { [ 6, comma ] };
+ key <AE07> { [ 7, period ] };
+ key <AE08> { [ 8, semicolon ] };
+ key <AE09> { [ 9, parenleft ] };
+ key <AE10> { [ 0, parenright ] };
+ key <AE11> { [ minus, underscore ] };
+ key <AE12> { [ equal, plus ] };
+
+ key <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
+ key <AD02> { [ Cyrillic_tse, Cyrillic_TSE ] };
+ key <AD03> { [ Cyrillic_u, Cyrillic_U ] };
+ key <AD04> { [ Cyrillic_ka, Cyrillic_KA ] };
+ key <AD05> { [ Cyrillic_ie, Cyrillic_IE ] };
+ key <AD06> { [ Cyrillic_en, Cyrillic_EN ] };
+ key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <AD08> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <AD09> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
+ key <AD10> { [ Cyrillic_ze, Cyrillic_ZE ] };
+ key <AD11> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <AD12> { [ Ukrainian_yi, Ukrainian_YI ] };
+ key <BKSL> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
+
+ key <AC01> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <AC02> { [ Ukrainian_i, Ukrainian_I ] };
+ key <AC03> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <AC04> { [ Cyrillic_a, Cyrillic_A ] };
+ key <AC05> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <AC06> { [ Cyrillic_er, Cyrillic_ER ] };
+ key <AC07> { [ Cyrillic_o, Cyrillic_O ] };
+ key <AC08> { [ Cyrillic_el, Cyrillic_EL ] };
+ key <AC09> { [ Cyrillic_de, Cyrillic_DE ] };
+ key <AC10> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <AC11> { [ Ukrainian_ie, Ukrainian_IE ] };
+
+ key <AB01> { [ Cyrillic_ya, Cyrillic_YA ] };
+ key <AB02> { [ Cyrillic_che, Cyrillic_CHE ] };
+ key <AB03> { [ Cyrillic_es, Cyrillic_ES ] };
+ key <AB04> { [ Cyrillic_em, Cyrillic_EM ] };
+ key <AB06> { [ Cyrillic_te, Cyrillic_TE ] };
+ key <AB05> { [ Cyrillic_i, Cyrillic_I ] };
+ key <AB07> { [Cyrillic_softsign,Cyrillic_SOFTSIGN ] };
+ key <AB08> { [ Cyrillic_be, Cyrillic_BE ] };
+ key <AB09> { [ Cyrillic_yu, Cyrillic_YU ] };
+ key <AB10> { [ slash, question ] };
+
+ key <LSGT> { [ slash, bar ] };
+ // End alphanumeric section
+};
+
+partial alphanumeric_keys
+xkb_symbols "winkeys" {
+ include "ua(legacy)"
+
+ name[Group1]= "Ukraine - Winkeys";
+
+ key <AE03> { [ 3, numerosign ] };
+ key <AE04> { [ 4, semicolon ] };
+ key <AE05> { [ 5, percent ] };
+ key <AE06> { [ 6, colon ] };
+ key <AE07> { [ 7, question ] };
+ key <AE08> { [ 8, asterisk ] };
+ key <AB10> { [ period, comma ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "typewriter" {
+ include "ua(legacy)"
+
+ name[Group1]= "Ukraine - Typewriter";
+
+ key <TLDE> { [ apostrophe, quotedbl ] };
+ key <AE01> { [ exclam, 1 ] };
+ key <AE02> { [ numerosign, 2 ] };
+ key <AE03> { [ slash, 3 ] };
+ key <AE04> { [ semicolon, 4 ] };
+ key <AE05> { [ colon, 5 ] };
+ key <AE06> { [ comma, 6 ] };
+ key <AE07> { [ period, 7 ] };
+ key <AE08> { [ underscore, 8 ] };
+ key <AE09> { [ question, 9 ] };
+ key <AE10> { [ percent, 0 ] };
+
+ key <AD12> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
+
+ key <AC02> { [ Cyrillic_i, Cyrillic_I ] };
+
+ key <AB05> { [ Ukrainian_i, Ukrainian_I ] };
+
+ key <AB10> { [ Ukrainian_yi, Ukrainian_YI ] };
+
+ key <BKSL> { [ parenleft, parenright ] };
+};
+
+partial alphanumeric_keys
+xkb_symbols "phonetic" {
+ include "ua(legacy)"
+
+ name[Group1]= "Ukraine - Phonetic";
+
+ key <LatQ> { [ Cyrillic_ya, Cyrillic_YA ] };
+ key <LatW> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <LatE> { [ Cyrillic_ie, Cyrillic_IE ] };
+ key <LatR> { [ Cyrillic_er, Cyrillic_ER ] };
+ key <LatT> { [ Cyrillic_te, Cyrillic_TE ] };
+ key <LatY> { [ Cyrillic_i, Cyrillic_I ] };
+ key <LatU> { [ Cyrillic_u, Cyrillic_U ] };
+ key <LatI> { [ Ukrainian_i, Ukrainian_I ] };
+ key <LatO> { [ Cyrillic_o, Cyrillic_O ] };
+ key <LatP> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
+
+ key <LatA> { [ Cyrillic_a, Cyrillic_A ] };
+ key <LatS> { [ Cyrillic_es, Cyrillic_ES ] };
+ key <LatD> { [ Cyrillic_de, Cyrillic_DE ] };
+ key <LatF> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <LatG> { [ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <LatH> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <LatJ> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
+ key <LatK> { [ Cyrillic_ka, Cyrillic_KA ] };
+ key <LatL> { [ Cyrillic_el, Cyrillic_EL ] };
+ key <AC10> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
+ key <AC11> { [ Cyrillic_che, Cyrillic_CHE ] };
+ key <BKSL> { [ Cyrillic_yu, Cyrillic_YU ] };
+
+ key <LatZ> { [ Cyrillic_ze, Cyrillic_ZE ] };
+ key <LatX> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
+ key <LatC> { [ Cyrillic_tse, Cyrillic_TSE ] };
+ key <LatV> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <LatB> { [ Cyrillic_be, Cyrillic_BE ] };
+ key <LatN> { [ Cyrillic_en, Cyrillic_EN ] };
+ key <LatM> { [ Cyrillic_em, Cyrillic_EM ] };
+ key <AB08> { [ Ukrainian_yi, Ukrainian_YI ] };
+ key <AB09> { [ Ukrainian_ie, Ukrainian_IE ] };
+ key <AB10> { [ slash, question ] };
+};
+
+// ukrainian keyboard layout RSTU 2019-91 (Respublikanskij STandart Ukrajiny)
+// Andrew Porokhnyak <aop@porokhnyak.org>
+partial alphanumeric_keys
+xkb_symbols "rstu" {
+ include "ua(legacy)"
+
+ name[Group1]= "Ukraine - Standard RSTU";
+
+ key <TLDE> { [ apostrophe, question ] };
+ key <AE01> { [ exclam, 1 ] };
+ key <AE02> { [ quotedbl, 2 ] };
+ key <AE03> { [ numbersign, 3 ] };
+ key <AE04> { [ semicolon, 4 ] };
+ key <AE05> { [ colon, 5 ] };
+ key <AE06> { [ comma, 6 ] };
+ key <AE07> { [ period, 7 ] };
+ key <AE08> { [ asterisk, 8 ] };
+ key <AE09> { [ parenleft, 9 ] };
+ key <AE10> { [ parenright, 0 ] };
+
+ key <AD12> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
+
+ key <AC02> { [ Cyrillic_i, Cyrillic_I ] };
+
+ key <AB05> { [ Ukrainian_i, Ukrainian_I ] };
+
+ key <AB10> { [ Ukrainian_yi, Ukrainian_YI ] };
+
+ key <BKSL> { [ slash, percent ] };
+};
+
+// russian keyboard layout RSTU 2019-91 (Respublikanskij STandart Ukrajiny)
+// Andrew Porokhnyak <aop@porokhnyak.org>
+partial alphanumeric_keys
+xkb_symbols "rstu_ru" {
+ include "ru(common)"
+ name[Group1]= "Ukraine - Standard RSTU on Russian layout";
+
+ key <TLDE> { [ apostrophe, question ] };
+ key <AE01> { [ exclam, 1 ] };
+ key <AE02> { [ quotedbl, 2 ] };
+ key <AE03> { [ numbersign, 3 ] };
+ key <AE04> { [ semicolon, 4 ] };
+ key <AE05> { [ colon, 5 ] };
+ key <AE06> { [ comma, 6 ] };
+ key <AE07> { [ period, 7 ] };
+ key <AE08> { [ asterisk, 8 ] };
+ key <AE09> { [ parenleft, 9 ] };
+ key <AE10> { [ parenright, 0 ] };
+ key <BKSL> { [ slash, percent ] };
+
+key.type[group1]="ALPHABETIC";
+
+ key <AB10> { [ Cyrillic_io, Cyrillic_IO ] };
+};
+
+//Homophonic keyboard layout (Tomas Marko Miljenović)
+//Based on Ukrainian National Transliteration, commonly used phonetic layouts for Mac and Win.
+//Existing layout "phonetic" used as template.
+partial alphanumeric_keys
+xkb_symbols "homophonic" {
+ include "ua(legacy)"
+ name[Group1]= "Ukraine - Homophonic";
+
+ key <TLDE> { [ grave, underscore ] };
+ key <AE01> { [ 1, exclam ] };
+ key <AE02> { [ 2, at ] };
+ key <AE03> { [ 3, semicolon ] };
+ key <AE04> { [ 4, colon ] };
+ key <AE05> { [ 5, percent ] };
+ key <AE06> { [ 6, apostrophe ] };
+ key <AE07> { [ 7, quotedbl ] };
+ key <AE08> { [ 8, asterisk ] };
+ key <AE09> { [ 9, parenleft ] };
+ key <AE10> { [ 0, parenright ] };
+ key <AE11> { [ Ukrainian_ie, Ukrainian_IE ] };
+ key <AE12> { [ Ukrainian_yi, Ukrainian_YI ] };
+
+ key <LatQ> { [ Cyrillic_ya, Cyrillic_YA ] };
+ key <LatW> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <LatE> { [ Cyrillic_ie, Cyrillic_IE ] };
+ key <LatR> { [ Cyrillic_er, Cyrillic_ER ] };
+ key <LatT> { [ Cyrillic_te, Cyrillic_TE ] };
+ key <LatY> { [ Cyrillic_i, Cyrillic_I ] };
+ key <LatU> { [ Cyrillic_u, Cyrillic_U ] };
+ key <LatI> { [ Ukrainian_i, Ukrainian_I ] };
+ key <LatO> { [ Cyrillic_o, Cyrillic_O ] };
+ key <LatP> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <AD11> { [ Cyrillic_yu, Cyrillic_YU ] };
+ key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] };
+
+ key <LatA> { [ Cyrillic_a, Cyrillic_A ] };
+ key <LatS> { [ Cyrillic_es, Cyrillic_ES ] };
+ key <LatD> { [ Cyrillic_de, Cyrillic_DE ] };
+ key <LatF> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <LatG> { [ Ukrainian_ghe_with_upturn, Ukrainian_GHE_WITH_UPTURN ] };
+ key <LatH> { [ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <LatJ> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
+ key <LatK> { [ Cyrillic_ka, Cyrillic_KA ] };
+ key <LatL> { [ Cyrillic_el, Cyrillic_EL ] };
+ key <AC10> { [ Cyrillic_che, Cyrillic_CHE ] };
+ key <AC11> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <BKSL> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] };
+
+ key <LatZ> { [ Cyrillic_ze, Cyrillic_ZE ] };
+ key <LatX> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <LatC> { [ Cyrillic_tse, Cyrillic_TSE ] };
+ key <LatV> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <LatB> { [ Cyrillic_be, Cyrillic_BE ] };
+ key <LatN> { [ Cyrillic_en, Cyrillic_EN ] };
+ key <LatM> { [ Cyrillic_em, Cyrillic_EM ] };
+ key <AB08> { [ comma, less ] };
+ key <AB09> { [ period, greater ] };
+ key <AB10> { [ slash, question ] };
+};
diff --git a/xorg-server/xkeyboard-config/symbols/us b/xorg-server/xkeyboard-config/symbols/us
index 871dfbdc6..cb9492287 100644
--- a/xorg-server/xkeyboard-config/symbols/us
+++ b/xorg-server/xkeyboard-config/symbols/us
@@ -2,7 +2,7 @@ default
partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
- name[Group1]= "USA";
+ name[Group1]= "English (USA)";
// Alphanumeric section
key <TLDE> { [ grave, asciitilde ] };
@@ -62,7 +62,7 @@ xkb_symbols "basic" {
partial alphanumeric_keys
xkb_symbols "euro" {
- name[Group1]= "USA - With EuroSign on 5";
+ name[Group1]= "English (US, with euro on 5)";
include "us(basic)"
@@ -75,7 +75,7 @@ xkb_symbols "euro" {
partial alphanumeric_keys
xkb_symbols "intl" {
- name[Group1]= "USA - International (with dead keys)";
+ name[Group1]= "English (US, international with dead keys)";
include "us(basic)"
@@ -165,7 +165,7 @@ xkb_symbols "intl" {
partial alphanumeric_keys
xkb_symbols "alt-intl" {
- name[Group1]= "USA - Alternative international";
+ name[Group1]= "English (US, alternative international)";
include "us"
@@ -194,7 +194,7 @@ xkb_symbols "alt-intl" {
partial alphanumeric_keys
xkb_symbols "dvorak" {
- name[Group1]= "USA - Dvorak";
+ name[Group1]= "English (Dvorak)";
// Alphanumeric section
@@ -259,7 +259,7 @@ xkb_symbols "dvorak" {
partial alphanumeric_keys
xkb_symbols "dvorak-intl" {
- name[Group1]= "USA - Dvorak international (with dead keys)";
+ name[Group1]= "English (Dvorak international with dead keys)";
include "us(dvorak)"
@@ -338,7 +338,7 @@ xkb_symbols "dvorak-intl" {
partial alphanumeric_keys
xkb_symbols "dvorak-alt-intl" {
- name[Group1]= "USA - Dvorak alternative international (no dead keys)";
+ name[Group1]= "English (Dvorak alternative international no dead keys)";
include "us(dvorak)"
@@ -373,7 +373,7 @@ partial alphanumeric_keys
xkb_symbols "dvorak-l" {
include "us(dvorak)"
- name[Group1]= "USA - Left handed Dvorak";
+ name[Group1]= "English (left handed Dvorak)";
key <AE01> { [ bracketleft, braceleft ] };
key <AE02> { [ bracketright, braceright ] };
@@ -429,7 +429,7 @@ partial alphanumeric_keys
xkb_symbols "dvorak-r" {
include "us(dvorak)"
- name[Group1]= "USA - Right handed Dvorak";
+ name[Group1]= "English (right handed Dvorak)";
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
@@ -488,7 +488,7 @@ xkb_symbols "dvorak-r" {
partial alphanumeric_keys
xkb_symbols "dvorak-classic" {
- name[Group1]= "USA - Classic Dvorak";
+ name[Group1]= "English (classic Dvorak)";
// Alphanumeric section
@@ -620,7 +620,7 @@ xkb_symbols "dvp" {
partial alphanumeric_keys
xkb_symbols "rus" {
- name[Group1]= "USA - Russian phonetic";
+ name[Group1]= "Russian (US, phonetic)";
include "us(basic)"
@@ -667,7 +667,7 @@ partial alphanumeric_keys
xkb_symbols "mac" {
include "us(basic)"
- name[Group1]= "USA - Macintosh";
+ name[Group1]= "English (Macintosh)";
key.type[group1]="FOUR_LEVEL";
// Slightly improvised from http://homepage.mac.com/thgewecke/kblayout.jpg
@@ -734,7 +734,7 @@ xkb_symbols "mac" {
partial alphanumeric_keys
xkb_symbols "colemak" {
include "us"
- name[Group1]= "USA - Colemak";
+ name[Group1]= "English (Colemak)";
// Alphanumeric section
key <TLDE> { [ grave, asciitilde, dead_tilde, asciitilde ] };
@@ -814,7 +814,7 @@ xkb_symbols "colemak" {
partial alphanumeric_keys
xkb_symbols "altgr-intl" {
- name[Group1]= "USA - International (AltGr dead keys)";
+ name[Group1]= "English (international AltGr dead keys)";
include "us(intl)"
@@ -1050,7 +1050,7 @@ xkb_symbols "olpc" {
partial alphanumeric_keys
xkb_symbols "olpc2" {
include "us(olpc)"
- name[Group1]= "USA - Layout toggle on multiply/divide key";
+ name[Group1]= "English (layout toggle on multiply/divide key)";
include "group(olpc)"
};
@@ -1060,7 +1060,7 @@ xkb_symbols "olpc2" {
partial alphanumeric_keys modifier_keys
xkb_symbols "chr" {
- name[Group1]= "USA - Cherokee";
+ name[Group1]= "Cherokee";
key.type[group1]="ALPHABETIC";
// Alphanumeric section
@@ -1123,7 +1123,7 @@ xkb_symbols "chr" {
partial alphanumeric_keys
xkb_symbols "hbs" {
- name[Group1]= "USA - Serbo-Croatian";
+ name[Group1]= "Serbo-Croatian (USA)";
include "us"
@@ -1146,7 +1146,7 @@ xkb_symbols "hbs" {
partial alphanumeric_keys
xkb_symbols "htcdream" {
include "inet(htcdream)"
- name[Group1]= "USA - htcdream";
+ name[Group1]= "English (USA)";
//second row
key <AD01> { [ q, Q, Tab, Tab ] };
diff --git a/xorg-server/xkeyboard-config/symbols/uz b/xorg-server/xkeyboard-config/symbols/uz
index a6c67e8d1..68862bbc7 100644
--- a/xorg-server/xkeyboard-config/symbols/uz
+++ b/xorg-server/xkeyboard-config/symbols/uz
@@ -1,120 +1,98 @@
-// Uzbek standard keyboard
-//
-// Mashrab Kuvatov <kmashrab@uni-bremen.de>
-//
-// History:
-//
-// Jun 2, 2003. Mashrab Kuvatov <kmashrab@uni-bremen.de>
-//
-// Created based on Russian standard keyboard. AEN <aen@logic.ru>
-// The following symbols of Russian standard keyboard were replaced:
-// minus (key <AE11>) with Byelorussian_shortu (U045e),
-// equal (key <AE12>) with Cyrillic_ka_descender (U049b)
-// Cyrillic_ha (key <AD11>) with Cyrillic_ghe_bar (U0493)
-// Cyrillic_hardsign (key <AD12>) with Cyrillic_ha_descender (U04b3)
-// The following symbols of Russian standard keyboard were moved:
-// Cyrillic_ze to key <AC02> (english 's'),
-// Cyrillic_sha to key <AD08> (english 'i'),
-// Cyrillic_ha to key <AD09> (english 'o'),
-// Cyrillic_hardsign to key <AD10> (english 'p').
-//
-// Feb 25, 2007. Mashrab Kuvatov <kmashrab@uni-bremen.de>
-//
-// Made cyrillic and latin variants. Default is cyrillic.
-// Cyrillic variant is standard compliant. The standard
-// was accepted by the official body of Uzbekistan. See
-// http://www.uznet.net/index.php?option=com_content&task=view&id=288&Itemid=58
-//
-// Latin variant is somewhat experimental, since there is no
-// official standard for it. It is a copy of "us" layout, where
-// apostrophe is replaced with U02BB.
-//
-
-partial default alphanumeric_keys
-xkb_symbols "cyrillic" {
-
- name[Group1]= "Uzbekistan";
-
- key <AE01> { [ 1, exclam ] };
- key <AE02> { [ 2, quotedbl ] };
- key <AE03> { [ 3, numerosign ] };
- key <AE04> { [ 4, semicolon ] };
- key <AE05> { [ 5, percent ] };
- key <AE06> { [ 6, colon ] };
- key <AE07> { [ 7, question ] };
- key <AE08> { [ 8, asterisk ] };
- key <AE09> { [ 9, parenleft ] };
- key <AE10> { [ 0, parenright ] };
- key <BKSL> { [ backslash, bar ] };
- key <AB10> { [ period, comma ] };
- key <LSGT> { [ slash, bar ] };
-
-key.type[group1]="ALPHABETIC";
-
- key <AE11> { [Cyrillic_ghe_bar, Cyrillic_GHE_bar ] };
- key <AE12> { [Cyrillic_ha_descender, Cyrillic_HA_descender ] };
- key <TLDE> { [ Cyrillic_io, Cyrillic_IO ] };
- key <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
- key <AD02> { [ Cyrillic_tse, Cyrillic_TSE ] };
- key <AD03> { [ Cyrillic_u, Cyrillic_U ] };
- key <AD04> { [ Cyrillic_ka, Cyrillic_KA ] };
- key <AD05> { [ Cyrillic_ie, Cyrillic_IE ] };
- key <AD06> { [ Cyrillic_en, Cyrillic_EN ] };
- key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE ] };
- key <AD08> { [ Cyrillic_sha, Cyrillic_SHA ] };
- key <AD09> { [ Byelorussian_shortu, Byelorussian_SHORTU ] };
- key <AD10> { [ Cyrillic_ze, Cyrillic_ZE ] };
- key <AD11> { [ Cyrillic_ha, Cyrillic_HA ] };
- key <AD12> { [Cyrillic_hardsign,Cyrillic_HARDSIGN ] };
- key <AC01> { [ Cyrillic_ef, Cyrillic_EF ] };
- key <AC02> { [Cyrillic_ka_descender, Cyrillic_KA_descender ] };
- key <AC03> { [ Cyrillic_ve, Cyrillic_VE ] };
- key <AC04> { [ Cyrillic_a, Cyrillic_A ] };
- key <AC05> { [ Cyrillic_pe, Cyrillic_PE ] };
- key <AC06> { [ Cyrillic_er, Cyrillic_ER ] };
- key <AC07> { [ Cyrillic_o, Cyrillic_O ] };
- key <AC08> { [ Cyrillic_el, Cyrillic_EL ] };
- key <AC09> { [ Cyrillic_de, Cyrillic_DE ] };
- key <AC10> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
- key <AC11> { [ Cyrillic_e, Cyrillic_E ] };
- key <AB01> { [ Cyrillic_ya, Cyrillic_YA ] };
- key <AB02> { [ Cyrillic_che, Cyrillic_CHE ] };
- key <AB03> { [ Cyrillic_es, Cyrillic_ES ] };
- key <AB04> { [ Cyrillic_em, Cyrillic_EM ] };
- key <AB06> { [ Cyrillic_te, Cyrillic_TE ] };
- key <AB05> { [ Cyrillic_i, Cyrillic_I ] };
- key <AB07> { [Cyrillic_softsign,Cyrillic_SOFTSIGN ] };
- key <AB08> { [ Cyrillic_be, Cyrillic_BE ] };
- key <AB09> { [ Cyrillic_yu, Cyrillic_YU ] };
-
- // End alphanumeric section
-};
-
-partial alphanumeric_keys
-xkb_symbols "latin" {
- include "us"
- name[Group1]= "Uzbekistan - Latin";
- key <AC11> { [0x010002BB, quotedbl] };
-};
-
-// Crimean Tatar (Crimean Turkish) layouts.
-partial
-xkb_symbols "crh" {
- include "tr(crh)"
-
- name[Group1]="Uzbekistan - Crimean Tatar (Turkish Q)";
-};
-
-partial
-xkb_symbols "crh_f" {
- include "tr(crh_f)"
-
- name[Group1]="Uzbekistan - Crimean Tatar (Turkish F)";
-};
-
-partial
-xkb_symbols "crh_alt" {
- include "tr(crh_alt)"
-
- name[Group1]="Uzbekistan - Crimean Tatar (Turkish Alt-Q)";
-};
+// Uzbek standard keyboard
+//
+// Mashrab Kuvatov <kmashrab@uni-bremen.de>
+//
+// History:
+//
+// Jun 2, 2003. Mashrab Kuvatov <kmashrab@uni-bremen.de>
+//
+// Created based on Russian standard keyboard. AEN <aen@logic.ru>
+// The following symbols of Russian standard keyboard were replaced:
+// minus (key <AE11>) with Byelorussian_shortu (U045e),
+// equal (key <AE12>) with Cyrillic_ka_descender (U049b)
+// Cyrillic_ha (key <AD11>) with Cyrillic_ghe_bar (U0493)
+// Cyrillic_hardsign (key <AD12>) with Cyrillic_ha_descender (U04b3)
+// The following symbols of Russian standard keyboard were moved:
+// Cyrillic_ze to key <AC02> (english 's'),
+// Cyrillic_sha to key <AD08> (english 'i'),
+// Cyrillic_ha to key <AD09> (english 'o'),
+// Cyrillic_hardsign to key <AD10> (english 'p').
+//
+// Feb 25, 2007. Mashrab Kuvatov <kmashrab@uni-bremen.de>
+//
+// Made cyrillic and latin variants. Default is cyrillic.
+// Cyrillic variant is standard compliant. The standard
+// was accepted by the official body of Uzbekistan. See
+// http://www.uznet.net/index.php?option=com_content&task=view&id=288&Itemid=58
+//
+// Latin variant is somewhat experimental, since there is no
+// official standard for it. It is a copy of "us" layout, where
+// apostrophe is replaced with U02BB.
+//
+
+partial default alphanumeric_keys
+xkb_symbols "cyrillic" {
+
+ name[Group1]= "Uzbekistan";
+
+ key <AE01> { [ 1, exclam ] };
+ key <AE02> { [ 2, quotedbl ] };
+ key <AE03> { [ 3, numerosign ] };
+ key <AE04> { [ 4, semicolon ] };
+ key <AE05> { [ 5, percent ] };
+ key <AE06> { [ 6, colon ] };
+ key <AE07> { [ 7, question ] };
+ key <AE08> { [ 8, asterisk ] };
+ key <AE09> { [ 9, parenleft ] };
+ key <AE10> { [ 0, parenright ] };
+ key <BKSL> { [ backslash, bar ] };
+ key <AB10> { [ period, comma ] };
+ key <LSGT> { [ slash, bar ] };
+
+key.type[group1]="ALPHABETIC";
+
+ key <AE11> { [Cyrillic_ghe_bar, Cyrillic_GHE_bar ] };
+ key <AE12> { [Cyrillic_ha_descender, Cyrillic_HA_descender ] };
+ key <TLDE> { [ Cyrillic_io, Cyrillic_IO ] };
+ key <AD01> { [ Cyrillic_shorti, Cyrillic_SHORTI ] };
+ key <AD02> { [ Cyrillic_tse, Cyrillic_TSE ] };
+ key <AD03> { [ Cyrillic_u, Cyrillic_U ] };
+ key <AD04> { [ Cyrillic_ka, Cyrillic_KA ] };
+ key <AD05> { [ Cyrillic_ie, Cyrillic_IE ] };
+ key <AD06> { [ Cyrillic_en, Cyrillic_EN ] };
+ key <AD07> { [ Cyrillic_ghe, Cyrillic_GHE ] };
+ key <AD08> { [ Cyrillic_sha, Cyrillic_SHA ] };
+ key <AD09> { [ Byelorussian_shortu, Byelorussian_SHORTU ] };
+ key <AD10> { [ Cyrillic_ze, Cyrillic_ZE ] };
+ key <AD11> { [ Cyrillic_ha, Cyrillic_HA ] };
+ key <AD12> { [Cyrillic_hardsign,Cyrillic_HARDSIGN ] };
+ key <AC01> { [ Cyrillic_ef, Cyrillic_EF ] };
+ key <AC02> { [Cyrillic_ka_descender, Cyrillic_KA_descender ] };
+ key <AC03> { [ Cyrillic_ve, Cyrillic_VE ] };
+ key <AC04> { [ Cyrillic_a, Cyrillic_A ] };
+ key <AC05> { [ Cyrillic_pe, Cyrillic_PE ] };
+ key <AC06> { [ Cyrillic_er, Cyrillic_ER ] };
+ key <AC07> { [ Cyrillic_o, Cyrillic_O ] };
+ key <AC08> { [ Cyrillic_el, Cyrillic_EL ] };
+ key <AC09> { [ Cyrillic_de, Cyrillic_DE ] };
+ key <AC10> { [ Cyrillic_zhe, Cyrillic_ZHE ] };
+ key <AC11> { [ Cyrillic_e, Cyrillic_E ] };
+ key <AB01> { [ Cyrillic_ya, Cyrillic_YA ] };
+ key <AB02> { [ Cyrillic_che, Cyrillic_CHE ] };
+ key <AB03> { [ Cyrillic_es, Cyrillic_ES ] };
+ key <AB04> { [ Cyrillic_em, Cyrillic_EM ] };
+ key <AB06> { [ Cyrillic_te, Cyrillic_TE ] };
+ key <AB05> { [ Cyrillic_i, Cyrillic_I ] };
+ key <AB07> { [Cyrillic_softsign,Cyrillic_SOFTSIGN ] };
+ key <AB08> { [ Cyrillic_be, Cyrillic_BE ] };
+ key <AB09> { [ Cyrillic_yu, Cyrillic_YU ] };
+
+ // End alphanumeric section
+};
+
+partial alphanumeric_keys
+xkb_symbols "latin" {
+ include "us"
+ name[Group1]= "Uzbekistan - Latin";
+ key <AC11> { [0x010002BB, quotedbl] };
+};