diff options
author | marha <marha@users.sourceforge.net> | 2014-02-07 23:46:30 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2014-02-07 23:46:30 +0100 |
commit | 6daf40f6b1138efad98dbb579cd35520cbc349bb (patch) | |
tree | 7f45dbb347f5e1a73b18a720633b9d801c968490 /xorg-server | |
parent | 5c64f94cf4cf8457a5616fe20b9a27174895f1a8 (diff) | |
parent | 982ac918afe6a1c02d5cf735d7b6c56443a048cc (diff) | |
download | vcxsrv-6daf40f6b1138efad98dbb579cd35520cbc349bb.tar.gz vcxsrv-6daf40f6b1138efad98dbb579cd35520cbc349bb.tar.bz2 vcxsrv-6daf40f6b1138efad98dbb579cd35520cbc349bb.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
xkbcomp xkeyboard-config libxcb libxtrans fontconfig libX11 libxcb mesa xserver git update 7 Feb 2014
Conflicts:
mesalib/src/glsl/glcpp/glcpp.c
openssl/Makefile
Diffstat (limited to 'xorg-server')
117 files changed, 30040 insertions, 29352 deletions
diff --git a/xorg-server/Makefile.am b/xorg-server/Makefile.am index add69d193..7c93d8d20 100644 --- a/xorg-server/Makefile.am +++ b/xorg-server/Makefile.am @@ -27,6 +27,14 @@ if PRESENT PRESENT_DIR=present endif +if PSEUDORAMIX +PSEUDORAMIX_DIR=pseudoramiX +endif + +if GLAMOR +GLAMOR_DIR=glamor +endif + SUBDIRS = \ doc \ man \ @@ -37,11 +45,11 @@ SUBDIRS = \ Xext \ miext \ os \ - pseudoramiX \ randr \ render \ Xi \ xkb \ + $(PSEUDORAMIX_DIR) \ $(DBE_DIR) \ $(RECORD_DIR) \ xfixes \ @@ -51,6 +59,7 @@ SUBDIRS = \ $(PRESENT_DIR) \ $(DRI3_DIR) \ exa \ + $(GLAMOR_DIR) \ config \ hw \ test @@ -102,6 +111,7 @@ DIST_SUBDIRS = \ composite \ glx \ exa \ + $(GLAMOR_DIR) \ config \ dri3 \ present \ diff --git a/xorg-server/Xi/xichangehierarchy.c b/xorg-server/Xi/xichangehierarchy.c index e2f4b8a0a..9e36354d1 100644 --- a/xorg-server/Xi/xichangehierarchy.c +++ b/xorg-server/Xi/xichangehierarchy.c @@ -143,6 +143,10 @@ add_master(ClientPtr client, xXIAddMasterInfo * c, int flags[MAXDEVICES]) int rc; name = calloc(c->name_len + 1, sizeof(char)); + if (name == NULL) { + rc = BadAlloc; + goto unwind; + } strncpy(name, (char *) &c[1], c->name_len); rc = AllocDevicePair(client, name, &ptr, &keybd, diff --git a/xorg-server/Xi/xipassivegrab.c b/xorg-server/Xi/xipassivegrab.c index 28c502f69..0e37e0e1b 100644 --- a/xorg-server/Xi/xipassivegrab.c +++ b/xorg-server/Xi/xipassivegrab.c @@ -63,7 +63,7 @@ SProcXIPassiveGrabDevice(ClientPtr client) swaps(&stuff->mask_len); swaps(&stuff->num_modifiers); - mods = (uint32_t *) &stuff[1]; + mods = (uint32_t *) &stuff[1] + stuff->mask_len; for (i = 0; i < stuff->num_modifiers; i++, mods++) { swapl(mods); diff --git a/xorg-server/config/Makefile.am b/xorg-server/config/Makefile.am index 327d07e7c..e0f0a8ddf 100644 --- a/xorg-server/config/Makefile.am +++ b/xorg-server/config/Makefile.am @@ -2,12 +2,19 @@ AM_CFLAGS = $(DIX_CFLAGS) noinst_LTLIBRARIES = libconfig.la libconfig_la_SOURCES = config.c config-backends.h +libconfig_la_LIBADD = + +if NEED_DBUS +AM_CFLAGS += $(DBUS_CFLAGS) +libconfig_la_SOURCES += dbus-core.c +libconfig_la_LIBADD += $(DBUS_LIBS) +endif if CONFIG_UDEV AM_CFLAGS += $(UDEV_CFLAGS) libconfig_la_SOURCES += udev.c -libconfig_la_LIBADD = $(UDEV_LIBS) +libconfig_la_LIBADD += $(UDEV_LIBS) if XORG xorgconfddir = $(datadir)/X11/$(XF86CONFIGDIR) @@ -16,23 +23,10 @@ endif else -if CONFIG_NEED_DBUS -AM_CFLAGS += $(DBUS_CFLAGS) -libconfig_la_SOURCES += dbus-core.c -libconfig_la_LIBADD = $(DBUS_LIBS) - -if CONFIG_DBUS_API -dbusconfigdir = $(sysconfdir)/dbus-1/system.d -dbusconfig_DATA = xorg-server.conf - -libconfig_la_SOURCES += dbus.c -endif - if CONFIG_HAL AM_CFLAGS += $(HAL_CFLAGS) libconfig_la_SOURCES += hal.c libconfig_la_LIBADD += $(HAL_LIBS) -endif else @@ -40,7 +34,7 @@ if CONFIG_WSCONS libconfig_la_SOURCES += wscons.c endif # CONFIG_WSCONS -endif # CONFIG_NEED_DBUS +endif # !CONFIG_HAL endif # !CONFIG_UDEV diff --git a/xorg-server/config/config-backends.h b/xorg-server/config/config-backends.h index 6423701fc..5f07557b7 100644 --- a/xorg-server/config/config-backends.h +++ b/xorg-server/config/config-backends.h @@ -37,41 +37,10 @@ int config_udev_pre_init(void); int config_udev_init(void); void config_udev_fini(void); void config_udev_odev_probe(config_odev_probe_proc_ptr probe_callback); -#else - -#ifdef CONFIG_NEED_DBUS -#include <dbus/dbus.h> - -typedef void (*config_dbus_core_connect_hook) (DBusConnection * connection, - void *data); -typedef void (*config_dbus_core_disconnect_hook) (void *data); - -struct config_dbus_core_hook { - config_dbus_core_connect_hook connect; - config_dbus_core_disconnect_hook disconnect; - void *data; - - struct config_dbus_core_hook *next; -}; - -int config_dbus_core_init(void); -void config_dbus_core_fini(void); -int config_dbus_core_add_hook(struct config_dbus_core_hook *hook); -void config_dbus_core_remove_hook(struct config_dbus_core_hook *hook); -#endif - -#ifdef CONFIG_DBUS_API -int config_dbus_init(void); -void config_dbus_fini(void); -#endif - -#ifdef CONFIG_HAL +#elif defined(CONFIG_HAL) int config_hal_init(void); void config_hal_fini(void); -#endif -#endif - -#ifdef CONFIG_WSCONS +#elif defined(CONFIG_WSCONS) int config_wscons_init(void); void config_wscons_fini(void); #endif diff --git a/xorg-server/config/config.c b/xorg-server/config/config.c index d0889a394..760cf193a 100644 --- a/xorg-server/config/config.c +++ b/xorg-server/config/config.c @@ -47,20 +47,9 @@ config_init(void) #ifdef CONFIG_UDEV if (!config_udev_init()) ErrorF("[config] failed to initialise udev\n"); -#elif defined(CONFIG_NEED_DBUS) - if (config_dbus_core_init()) { -#ifdef CONFIG_DBUS_API - if (!config_dbus_init()) - ErrorF("[config] failed to initialise D-Bus API\n"); -#endif -#ifdef CONFIG_HAL - if (!config_hal_init()) - ErrorF("[config] failed to initialise HAL\n"); -#endif - } - else { - ErrorF("[config] failed to initialise D-Bus core\n"); - } +#elif defined(CONFIG_HAL) + if (!config_hal_init()) + ErrorF("[config] failed to initialise HAL\n"); #elif defined(CONFIG_WSCONS) if (!config_wscons_init()) ErrorF("[config] failed to initialise wscons\n"); @@ -72,14 +61,8 @@ config_fini(void) { #if defined(CONFIG_UDEV) config_udev_fini(); -#elif defined(CONFIG_NEED_DBUS) -#ifdef CONFIG_HAL +#elif defined(CONFIG_HAL) config_hal_fini(); -#endif -#ifdef CONFIG_DBUS_API - config_dbus_fini(); -#endif - config_dbus_core_fini(); #elif defined(CONFIG_WSCONS) config_wscons_fini(); #endif diff --git a/xorg-server/config/dbus-core.c b/xorg-server/config/dbus-core.c index 768a98454..b0fd92de4 100644 --- a/xorg-server/config/dbus-core.c +++ b/xorg-server/config/dbus-core.c @@ -30,9 +30,9 @@ #include <dbus/dbus.h> #include <sys/select.h> -#include "config-backends.h" #include "dix.h" #include "os.h" +#include "dbus-core.h" /* How often to attempt reconnecting when we get booted off the bus. */ #define RECONNECT_DELAY (10 * 1000) /* in ms */ @@ -41,7 +41,7 @@ struct dbus_core_info { int fd; DBusConnection *connection; OsTimerPtr timer; - struct config_dbus_core_hook *hooks; + struct dbus_core_hook *hooks; }; static struct dbus_core_info bus_info; @@ -74,7 +74,7 @@ block_handler(void *data, struct timeval **tv, void *read_mask) static void teardown(void) { - struct config_dbus_core_hook *hook; + struct dbus_core_hook *hook; if (bus_info.timer) { TimerFree(bus_info.timer); @@ -112,7 +112,7 @@ message_filter(DBusConnection * connection, DBusMessage * message, void *data) * reconnect immediately (assuming it's just a restart). The * connection isn't valid at this point, so throw it out immediately. */ if (dbus_message_is_signal(message, DBUS_INTERFACE_LOCAL, "Disconnected")) { - DebugF("[config/dbus-core] disconnected from bus\n"); + DebugF("[dbus-core] disconnected from bus\n"); bus_info.connection = NULL; teardown(); @@ -136,12 +136,12 @@ static int connect_to_bus(void) { DBusError error; - struct config_dbus_core_hook *hook; + struct dbus_core_hook *hook; dbus_error_init(&error); bus_info.connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error); if (!bus_info.connection || dbus_error_is_set(&error)) { - DebugF("[config/dbus-core] error connecting to system bus: %s (%s)\n", + LogMessage(X_ERROR, "dbus-core: error connecting to system bus: %s (%s)\n", error.name, error.message); goto err_begin; } @@ -150,13 +150,13 @@ connect_to_bus(void) dbus_connection_set_exit_on_disconnect(bus_info.connection, FALSE); if (!dbus_connection_get_unix_fd(bus_info.connection, &bus_info.fd)) { - ErrorF("[config/dbus-core] couldn't get fd for system bus\n"); + ErrorF("[dbus-core] couldn't get fd for system bus\n"); goto err_unref; } if (!dbus_connection_add_filter(bus_info.connection, message_filter, &bus_info, NULL)) { - ErrorF("[config/dbus-core] couldn't add filter: %s (%s)\n", error.name, + ErrorF("[dbus-core] couldn't add filter: %s (%s)\n", error.name, error.message); goto err_fd; } @@ -198,9 +198,9 @@ reconnect_timer(OsTimerPtr timer, CARD32 time, void *arg) } int -config_dbus_core_add_hook(struct config_dbus_core_hook *hook) +dbus_core_add_hook(struct dbus_core_hook *hook) { - struct config_dbus_core_hook **prev; + struct dbus_core_hook **prev; for (prev = &bus_info.hooks; *prev; prev = &(*prev)->next); @@ -215,9 +215,9 @@ config_dbus_core_add_hook(struct config_dbus_core_hook *hook) } void -config_dbus_core_remove_hook(struct config_dbus_core_hook *hook) +dbus_core_remove_hook(struct dbus_core_hook *hook) { - struct config_dbus_core_hook **prev; + struct dbus_core_hook **prev; for (prev = &bus_info.hooks; *prev; prev = &(*prev)->next) { if (*prev == hook) { @@ -228,19 +228,19 @@ config_dbus_core_remove_hook(struct config_dbus_core_hook *hook) } int -config_dbus_core_init(void) +dbus_core_init(void) { memset(&bus_info, 0, sizeof(bus_info)); bus_info.fd = -1; bus_info.hooks = NULL; - bus_info.connection = NULL; - bus_info.timer = TimerSet(NULL, 0, 1, reconnect_timer, NULL); + if (!connect_to_bus()) + bus_info.timer = TimerSet(NULL, 0, 1, reconnect_timer, NULL); return 1; } void -config_dbus_core_fini(void) +dbus_core_fini(void) { teardown(); } diff --git a/xorg-server/config/dbus.c b/xorg-server/config/dbus.c deleted file mode 100644 index 99a1537e1..000000000 --- a/xorg-server/config/dbus.c +++ /dev/null @@ -1,407 +0,0 @@ -/* - * Copyright © 2006-2007 Daniel Stone - * - * 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: Daniel Stone <daniel@fooishbar.org> - */ - -#ifdef HAVE_DIX_CONFIG_H -#include <dix-config.h> -#endif - -#include <dbus/dbus.h> -#include <string.h> - -#include <X11/X.h> - -#include "config-backends.h" -#include "opaque.h" /* for 'display': there should be a better way. */ -#include "input.h" -#include "inputstr.h" - -#define API_VERSION 2 - -#define MATCH_RULE "type='method_call',interface='org.x.config.input'" - -#define MALFORMED_MSG "[config/dbus] malformed message, dropping" -#define MALFORMED_MESSAGE() { DebugF(MALFORMED_MSG "\n"); \ - ret = BadValue; \ - goto unwind; } -#define MALFORMED_MESSAGE_ERROR() { DebugF(MALFORMED_MSG ": %s, %s", \ - error->name, error->message); \ - ret = BadValue; \ - goto unwind; } - -struct connection_info { - char busobject[32]; - char busname[64]; - DBusConnection *connection; -}; - -static void -reset_info(struct connection_info *info) -{ - info->connection = NULL; - info->busname[0] = '\0'; - info->busobject[0] = '\0'; -} - -static int -add_device(DBusMessage * message, DBusMessage * reply, DBusError * error) -{ - DBusMessageIter iter, reply_iter, subiter; - InputOption *input_options = NULL; - int ret, err; - DeviceIntPtr dev = NULL; - - dbus_message_iter_init_append(reply, &reply_iter); - - if (!dbus_message_iter_init(message, &iter)) { - ErrorF("[config/dbus] couldn't initialise iterator\n"); - MALFORMED_MESSAGE(); - } - - input_options = input_option_new(input_options, "_source", "client/dbus"); - if (!input_options) { - ErrorF("[config/dbus] couldn't allocate first key/value pair\n"); - ret = BadAlloc; - goto unwind; - } - - /* signature should be [ss][ss]... */ - while (dbus_message_iter_get_arg_type(&iter) == DBUS_TYPE_ARRAY) { - char *key, *value; - - dbus_message_iter_recurse(&iter, &subiter); - - if (dbus_message_iter_get_arg_type(&subiter) != DBUS_TYPE_STRING) - MALFORMED_MESSAGE(); - - dbus_message_iter_get_basic(&subiter, &key); - if (!key) - MALFORMED_MESSAGE(); - /* The _ prefix refers to internal settings, and may not be given by - * the client. */ - if (key[0] == '_') { - ErrorF("[config/dbus] attempted subterfuge: option name %s given\n", - key); - MALFORMED_MESSAGE(); - } - - if (!dbus_message_iter_has_next(&subiter)) - MALFORMED_MESSAGE(); - dbus_message_iter_next(&subiter); - if (dbus_message_iter_get_arg_type(&subiter) != DBUS_TYPE_STRING) - MALFORMED_MESSAGE(); - - dbus_message_iter_get_basic(&subiter, &value); - if (!value) - MALFORMED_MESSAGE(); - - input_options = input_option_new(input_options, key, value); - - dbus_message_iter_next(&iter); - } - - ret = NewInputDeviceRequest(input_options, NULL, &dev); - if (ret != Success) { - DebugF("[config/dbus] NewInputDeviceRequest failed\n"); - goto unwind; - } - - if (!dev) { - DebugF("[config/dbus] NewInputDeviceRequest provided no device\n"); - ret = BadImplementation; - goto unwind; - } - - /* XXX: If we fail halfway through, we don't seem to have any way to - * empty the iterator, so you'll end up with some device IDs, - * plus an error. This seems to be a shortcoming in the D-Bus - * API. */ - for (; dev; dev = dev->next) { - if (!dbus_message_iter_append_basic(&reply_iter, DBUS_TYPE_INT32, - &dev->id)) { - ErrorF("[config/dbus] couldn't append to iterator\n"); - ret = BadAlloc; - goto unwind; - } - } - - unwind: - if (ret != Success) { - if (dev) - RemoveDevice(dev, TRUE); - - err = -ret; - dbus_message_iter_append_basic(&reply_iter, DBUS_TYPE_INT32, &err); - } - - input_option_free_list(&input_options); - - return ret; -} - -static int -remove_device(DBusMessage * message, DBusMessage * reply, DBusError * error) -{ - int deviceid, ret, err; - DeviceIntPtr dev; - DBusMessageIter iter, reply_iter; - - dbus_message_iter_init_append(reply, &reply_iter); - - if (!dbus_message_iter_init(message, &iter)) { - ErrorF("[config/dbus] failed to init iterator\n"); - MALFORMED_MESSAGE(); - } - - if (!dbus_message_get_args(message, error, DBUS_TYPE_UINT32, - &deviceid, DBUS_TYPE_INVALID)) { - MALFORMED_MESSAGE_ERROR(); - } - - dixLookupDevice(&dev, deviceid, serverClient, DixDestroyAccess); - if (!dev) { - DebugF("[config/dbus] bogus device id %d given\n", deviceid); - ret = BadMatch; - goto unwind; - } - - DebugF("[config/dbus] removing device %s (id %d)\n", dev->name, deviceid); - - /* Call PIE here so we don't try to dereference a device that's - * already been removed. */ - OsBlockSignals(); - ProcessInputEvents(); - DeleteInputDeviceRequest(dev); - OsReleaseSignals(); - - ret = Success; - - unwind: - err = (ret == Success) ? ret : -ret; - dbus_message_iter_append_basic(&reply_iter, DBUS_TYPE_INT32, &err); - - return ret; -} - -static int -list_devices(DBusMessage * message, DBusMessage * reply, DBusError * error) -{ - DeviceIntPtr dev; - DBusMessageIter iter, subiter; - - dbus_message_iter_init_append(reply, &iter); - - for (dev = inputInfo.devices; dev; dev = dev->next) { - if (!dbus_message_iter_open_container(&iter, DBUS_TYPE_STRUCT, NULL, - &subiter)) { - ErrorF("[config/dbus] couldn't init container\n"); - return BadAlloc; - } - if (!dbus_message_iter_append_basic(&subiter, DBUS_TYPE_UINT32, - &dev->id)) { - ErrorF("[config/dbus] couldn't append to iterator\n"); - return BadAlloc; - } - if (!dbus_message_iter_append_basic(&subiter, DBUS_TYPE_STRING, - &dev->name)) { - ErrorF("[config/dbus] couldn't append to iterator\n"); - return BadAlloc; - } - if (!dbus_message_iter_close_container(&iter, &subiter)) { - ErrorF("[config/dbus] couldn't close container\n"); - return BadAlloc; - } - } - - return Success; -} - -static int -get_version(DBusMessage * message, DBusMessage * reply, DBusError * error) -{ - DBusMessageIter iter; - unsigned int version = API_VERSION; - - dbus_message_iter_init_append(reply, &iter); - if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_UINT32, &version)) { - ErrorF("[config/dbus] couldn't append version\n"); - return BadAlloc; - } - - return Success; -} - -static DBusHandlerResult -message_handler(DBusConnection * connection, DBusMessage * message, void *data) -{ - DBusError error; - DBusMessage *reply; - struct connection_info *info = data; - - /* ret is the overall D-Bus handler result, whereas err is the internal - * X error from our individual functions. */ - int ret = DBUS_HANDLER_RESULT_NOT_YET_HANDLED; - int err; - - DebugF("[config/dbus] received a message for %s\n", - dbus_message_get_interface(message)); - - dbus_error_init(&error); - - reply = dbus_message_new_method_return(message); - if (!reply) { - ErrorF("[config/dbus] failed to create reply\n"); - ret = DBUS_HANDLER_RESULT_NEED_MEMORY; - goto err_start; - } - - if (strcmp(dbus_message_get_member(message), "add") == 0) - err = add_device(message, reply, &error); - else if (strcmp(dbus_message_get_member(message), "remove") == 0) - err = remove_device(message, reply, &error); - else if (strcmp(dbus_message_get_member(message), "listDevices") == 0) - err = list_devices(message, reply, &error); - else if (strcmp(dbus_message_get_member(message), "version") == 0) - err = get_version(message, reply, &error); - else - goto err_reply; - - /* Failure to allocate is a special case. */ - if (err == BadAlloc) { - ret = DBUS_HANDLER_RESULT_NEED_MEMORY; - goto err_reply; - } - - /* While failure here is always an OOM, we don't return that, - * since that would result in devices being double-added/removed. */ - if (dbus_connection_send(info->connection, reply, NULL)) - dbus_connection_flush(info->connection); - else - ErrorF("[config/dbus] failed to send reply\n"); - - ret = DBUS_HANDLER_RESULT_HANDLED; - - err_reply: - dbus_message_unref(reply); - err_start: - dbus_error_free(&error); - - return ret; -} - -static void -connect_hook(DBusConnection * connection, void *data) -{ - DBusError error; - DBusObjectPathVTable vtable = {.message_function = message_handler, }; - struct connection_info *info = data; - - info->connection = connection; - - dbus_error_init(&error); - - dbus_bus_request_name(info->connection, info->busname, 0, &error); - if (dbus_error_is_set(&error)) { - ErrorF("[config/dbus] couldn't take over org.x.config: %s (%s)\n", - error.name, error.message); - goto err_start; - } - - /* blocks until we get a reply. */ - dbus_bus_add_match(info->connection, MATCH_RULE, &error); - if (dbus_error_is_set(&error)) { - ErrorF("[config/dbus] couldn't add match: %s (%s)\n", error.name, - error.message); - goto err_name; - } - - if (!dbus_connection_register_object_path(info->connection, - info->busobject, &vtable, info)) { - ErrorF("[config/dbus] couldn't register object path\n"); - goto err_match; - } - - DebugF("[dbus] registered %s, %s\n", info->busname, info->busobject); - - dbus_error_free(&error); - - return; - - err_match: - dbus_bus_remove_match(info->connection, MATCH_RULE, &error); - err_name: - dbus_bus_release_name(info->connection, info->busname, &error); - err_start: - dbus_error_free(&error); - - reset_info(info); -} - -static void -disconnect_hook(void *data) -{ -} - -#if 0 -void -pre_disconnect_hook(void) -{ - DBusError error; - - dbus_error_init(&error); - dbus_connection_unregister_object_path(connection_data->connection, - connection_data->busobject); - dbus_bus_remove_match(connection_data->connection, MATCH_RULE, &error); - dbus_bus_release_name(connection_data->connection, - connection_data->busname, &error); - dbus_error_free(&error); -} -#endif - -static struct connection_info connection_data; - -static struct config_dbus_core_hook core_hook = { - .connect = connect_hook, - .disconnect = disconnect_hook, - .data = &connection_data, -}; - -int -config_dbus_init(void) -{ - snprintf(connection_data.busname, sizeof(connection_data.busname), - "org.x.config.display%d", atoi(display)); - snprintf(connection_data.busobject, sizeof(connection_data.busobject), - "/org/x/config/%d", atoi(display)); - - return config_dbus_core_add_hook(&core_hook); -} - -void -config_dbus_fini(void) -{ - config_dbus_core_remove_hook(&core_hook); - connection_data.busname[0] = '\0'; - connection_data.busobject[0] = '\0'; -} diff --git a/xorg-server/config/hal.c b/xorg-server/config/hal.c index 2ead556b0..94cb6e7cd 100644 --- a/xorg-server/config/hal.c +++ b/xorg-server/config/hal.c @@ -33,6 +33,7 @@ #include <string.h> #include <sys/select.h> +#include "dbus-core.h" #include "input.h" #include "inputstr.h" #include "hotplug.h" @@ -631,7 +632,7 @@ connect_hook(DBusConnection * connection, void *data) static struct config_hal_info hal_info; -static struct config_dbus_core_hook hook = { +static struct dbus_core_hook hook = { .connect = connect_hook, .disconnect = disconnect_hook, .data = &hal_info, @@ -644,7 +645,7 @@ config_hal_init(void) hal_info.system_bus = NULL; hal_info.hal_ctx = NULL; - if (!config_dbus_core_add_hook(&hook)) { + if (!dbus_core_add_hook(&hook)) { LogMessage(X_ERROR, "config/hal: failed to add D-Bus hook\n"); return 0; } @@ -658,5 +659,5 @@ config_hal_init(void) void config_hal_fini(void) { - config_dbus_core_remove_hook(&hook); + dbus_core_remove_hook(&hook); } diff --git a/xorg-server/config/xorg-server.conf b/xorg-server/config/xorg-server.conf deleted file mode 100644 index 47a9a7824..000000000 --- a/xorg-server/config/xorg-server.conf +++ /dev/null @@ -1,13 +0,0 @@ -<!DOCTYPE busconfig PUBLIC - "-//freedesktop//DTD D-BUS Bus Configuration 1.0//EN" - "http://www.freedesktop.org/standards/dbus/1.0/busconfig.dtd"> -<busconfig> - <policy context="default"> - <allow own="org.x.config.display0"/> - <allow send_destination="org.x.config.display0"/> - <allow send_interface="org.x.config.display0"/> - <allow own="org.x.config.display1"/> - <allow send_destination="org.x.config.display1"/> - <allow send_interface="org.x.config.display1"/> - </policy> -</busconfig> diff --git a/xorg-server/configure.ac b/xorg-server/configure.ac index 560c46030..c6764f5a8 100644 --- a/xorg-server/configure.ac +++ b/xorg-server/configure.ac @@ -614,7 +614,6 @@ AC_ARG_ENABLE(xf86bigfont, AS_HELP_STRING([--enable-xf86bigfont], [Build XF86 AC_ARG_ENABLE(dpms, AS_HELP_STRING([--disable-dpms], [Build DPMS extension (default: enabled)]), [DPMSExtension=$enableval], [DPMSExtension=yes]) AC_ARG_ENABLE(config-udev, AS_HELP_STRING([--enable-config-udev], [Build udev support (default: auto)]), [CONFIG_UDEV=$enableval], [CONFIG_UDEV=auto]) AC_ARG_ENABLE(config-udev-kms, AS_HELP_STRING([--enable-config-udev-kms], [Build udev kms support (default: auto)]), [CONFIG_UDEV_KMS=$enableval], [CONFIG_UDEV_KMS=auto]) -AC_ARG_ENABLE(config-dbus, AS_HELP_STRING([--enable-config-dbus], [Build D-BUS API support (default: no)]), [CONFIG_DBUS_API=$enableval], [CONFIG_DBUS_API=no]) AC_ARG_ENABLE(config-hal, AS_HELP_STRING([--disable-config-hal], [Build HAL support (default: auto)]), [CONFIG_HAL=$enableval], [CONFIG_HAL=auto]) AC_ARG_ENABLE(config-wscons, AS_HELP_STRING([--enable-config-wscons], [Build wscons config support (default: auto)]), [CONFIG_WSCONS=$enableval], [CONFIG_WSCONS=auto]) AC_ARG_ENABLE(xfree86-utils, AS_HELP_STRING([--enable-xfree86-utils], [Build xfree86 DDX utilities (default: enabled)]), [XF86UTILS=$enableval], [XF86UTILS=yes]) @@ -636,6 +635,7 @@ AC_ARG_ENABLE(xnest, AS_HELP_STRING([--enable-xnest], [Build Xnest serv AC_ARG_ENABLE(xquartz, AS_HELP_STRING([--enable-xquartz], [Build Xquartz server for OS-X (default: auto)]), [XQUARTZ=$enableval], [XQUARTZ=auto]) AC_ARG_ENABLE(standalone-xpbproxy, AS_HELP_STRING([--enable-standalone-xpbproxy], [Build a standalone xpbproxy (in addition to the one integrated into Xquartz as a separate thread) (default: no)]), [STANDALONE_XPBPROXY=$enableval], [STANDALONE_XPBPROXY=no]) AC_ARG_ENABLE(xwin, AS_HELP_STRING([--enable-xwin], [Build XWin server (default: auto)]), [XWIN=$enableval], [XWIN=auto]) +AC_ARG_ENABLE(glamor, AS_HELP_STRING([--enable-glamor], [Build glamor dix module (default: no)]), [GLAMOR=$enableval], [GLAMOR=no]) dnl kdrive and its subsystems AC_ARG_ENABLE(kdrive, AS_HELP_STRING([--enable-kdrive], [Build kdrive servers (default: no)]), [KDRIVE=$enableval], [KDRIVE=no]) AC_ARG_ENABLE(xephyr, AS_HELP_STRING([--enable-xephyr], [Build the kdrive Xephyr server (default: auto)]), [XEPHYR=$enableval], [XEPHYR=auto]) @@ -702,7 +702,6 @@ dnl DDX Detection... Yes, it's ugly to have it here... but we need to dnl handle this early on so that we don't require unsupported extensions case $host_os in cygwin* | mingw*) - CONFIG_DBUS_API=no CONFIG_HAL=no CONFIG_UDEV=no CONFIG_UDEV_KMS=no @@ -799,7 +798,7 @@ FIXESPROTO="fixesproto >= 5.0" DAMAGEPROTO="damageproto >= 1.1" XCMISCPROTO="xcmiscproto >= 1.2.0" BIGREQSPROTO="bigreqsproto >= 1.1.0" -XTRANS="xtrans >= 1.3.2" +XTRANS="xtrans >= 1.3.3" PRESENTPROTO="presentproto >= 1.0" dnl List of libraries that require a specific version @@ -830,9 +829,28 @@ AC_SUBST(SDK_REQUIRED_MODULES) REQUIRED_MODULES="$FIXESPROTO $DAMAGEPROTO $XCMISCPROTO $XTRANS $BIGREQSPROTO $SDK_REQUIRED_MODULES" -if test "x$CONFIG_UDEV" = xyes && - { test "x$CONFIG_DBUS_API" = xyes || test "x$CONFIG_HAL" = xyes; }; then - AC_MSG_ERROR([Hotplugging through both libudev and dbus/hal not allowed]) +dnl systemd socket activation +dnl activate the code in libxtrans that grabs systemd's socket fds +AC_ARG_WITH([systemd-daemon], + AS_HELP_STRING([--with-systemd-daemon], + [support systemd socket activation (default: auto)]), + [WITH_SYSTEMD_DAEMON=$withval], [WITH_SYSTEMD_DAEMON=auto]) +PKG_CHECK_MODULES([SYSTEMD_DAEMON], [libsystemd-daemon], + [HAVE_SYSTEMD_DAEMON=yes], [HAVE_SYSTEMD_DAEMON=no]) +if test "x$WITH_SYSTEMD_DAEMON" = xauto; then + WITH_SYSTEMD_DAEMON="$HAVE_SYSTEMD_DAEMON" +fi +if test "x$WITH_SYSTEMD_DAEMON" = xyes; then + if "x$HAVE_SYSTEMD_DAEMON" = xno; then + AC_MSG_ERROR([systemd support requested but no library has been found]) + fi + AC_DEFINE(HAVE_SYSTEMD_DAEMON, 1, [Define to 1 if libsystemd-daemon is available]) + REQUIRED_LIBS="$REQUIRED_LIBS libsystemd-daemon" +fi +AM_CONDITIONAL([HAVE_SYSTEMD_DAEMON], [test "x$HAVE_SYSTEMD_DAEMON" = "xyes"]) + +if test "x$CONFIG_UDEV" = xyes && test "x$CONFIG_HAL" = xyes; then + AC_MSG_ERROR([Hotplugging through both libudev and hal not allowed]) fi PKG_CHECK_MODULES(UDEV, $LIBUDEV, [HAVE_LIBUDEV=yes], [HAVE_LIBUDEV=no]) @@ -841,7 +859,6 @@ if test "x$CONFIG_UDEV" = xauto; then fi AM_CONDITIONAL(CONFIG_UDEV, [test "x$CONFIG_UDEV" = xyes]) if test "x$CONFIG_UDEV" = xyes; then - CONFIG_DBUS_API=no CONFIG_HAL=no if test "x$CONFIG_UDEV_KMS" = xauto; then CONFIG_UDEV_KMS="$HAVE_LIBUDEV" @@ -864,28 +881,12 @@ if test "x$CONFIG_UDEV" = xyes; then fi AM_CONDITIONAL(CONFIG_UDEV_KMS, [test "x$CONFIG_UDEV_KMS" = xyes]) -dnl HAVE_DBUS is true if we actually have the D-Bus library, whereas -dnl CONFIG_DBUS_API is true if we want to enable the D-Bus config -dnl API. PKG_CHECK_MODULES(DBUS, $LIBDBUS, [HAVE_DBUS=yes], [HAVE_DBUS=no]) if test "x$HAVE_DBUS" = xyes; then AC_DEFINE(HAVE_DBUS, 1, [Have D-Bus support]) fi AM_CONDITIONAL(HAVE_DBUS, [test "x$HAVE_DBUS" = xyes]) -if test "x$CONFIG_DBUS_API" = xauto; then - CONFIG_DBUS_API="$HAVE_DBUS" -fi -if test "x$CONFIG_DBUS_API" = xyes; then - if ! test "x$HAVE_DBUS" = xyes; then - AC_MSG_ERROR([D-Bus configuration API requested, but D-Bus is not installed.]) - fi - - AC_DEFINE(CONFIG_DBUS_API, 1, [Use the D-Bus input configuration API]) - CONFIG_NEED_DBUS="yes" -fi -AM_CONDITIONAL(CONFIG_DBUS_API, [test "x$CONFIG_DBUS_API" = xyes]) - PKG_CHECK_MODULES(HAL, hal, [HAVE_HAL=yes], [HAVE_HAL=no]) if test "x$CONFIG_HAL" = xauto; then CONFIG_HAL="$HAVE_HAL" @@ -896,14 +897,14 @@ if test "x$CONFIG_HAL" = xyes; then fi AC_DEFINE(CONFIG_HAL, 1, [Use the HAL hotplug API]) - CONFIG_NEED_DBUS="yes" + NEED_DBUS="yes" fi AM_CONDITIONAL(CONFIG_HAL, [test "x$CONFIG_HAL" = xyes]) -if test "x$CONFIG_NEED_DBUS" = xyes; then - AC_DEFINE(CONFIG_NEED_DBUS, 1, [Use D-Bus for input hotplug]) +if test "x$NEED_DBUS" = xyes; then + AC_DEFINE(NEED_DBUS, 1, [Enable D-Bus core]) fi -AM_CONDITIONAL(CONFIG_NEED_DBUS, [test "x$CONFIG_NEED_DBUS" = xyes]) +AM_CONDITIONAL(NEED_DBUS, [test "x$NEED_DBUS" = xyes]) if test "x$CONFIG_WSCONS" = xauto; then case $host_os in @@ -2063,6 +2064,14 @@ AM_CONDITIONAL([SOLARIS_VT], [test "x$solaris_vt" = xyes]) AM_CONDITIONAL([DGA], [test "x$DGA" = xyes]) AM_CONDITIONAL([XF86VIDMODE], [test "x$XF86VIDMODE" = xyes]) AM_CONDITIONAL([XORG_BUS_PLATFORM], [test "x$CONFIG_UDEV_KMS" = xyes]) + +dnl glamor +AM_CONDITIONAL([GLAMOR], [test "x$GLAMOR" = xyes]) +if test "x$GLAMOR" = xyes; then + AC_DEFINE(GLAMOR, 1, [Build glamor]) + PKG_CHECK_MODULES([GLAMOR], [egl gl]) +fi + dnl XWin DDX AC_MSG_CHECKING([whether to build XWin DDX]) @@ -2174,6 +2183,8 @@ if test "x$XQUARTZ" = xyes; then fi fi +AM_CONDITIONAL(PSEUDORAMIX, [test "x$XQUARTZ" = xyes -o "x$XWIN" = xyes ]) + # Support for objc in autotools is minimal and not documented. OBJC='$(CC)' OBJCLD='$(CCLD)' @@ -2432,6 +2443,7 @@ doc/Makefile doc/dtrace/Makefile man/Makefile fb/Makefile +glamor/Makefile record/Makefile config/Makefile mi/Makefile diff --git a/xorg-server/dix/dixfonts.c b/xorg-server/dix/dixfonts.c index 6260f48b9..49758d5b5 100755 --- a/xorg-server/dix/dixfonts.c +++ b/xorg-server/dix/dixfonts.c @@ -1829,11 +1829,14 @@ GetFontPath(ClientPtr client, int *count, int *length, unsigned char **result) fpe = font_path_elements[i]; len += fpe->name_length + 1; } - font_path_string = (unsigned char *) realloc(font_path_string, len); - if (!font_path_string) + c = realloc(font_path_string, len); + if (c == NULL) { + free(font_path_string); + font_path_string = NULL; return BadAlloc; + } - c = font_path_string; + font_path_string = c; *length = 0; for (i = 0; i < num_fpes; i++) { fpe = font_path_elements[i]; diff --git a/xorg-server/dix/protocol.txt b/xorg-server/dix/protocol.txt index 8e152edaa..f83f38c58 100644 --- a/xorg-server/dix/protocol.txt +++ b/xorg-server/dix/protocol.txt @@ -311,11 +311,22 @@ R028 RANDR:GetPanning R029 RANDR:SetPanning R030 RANDR:SetOutputPrimary R031 RANDR:GetOutputPrimary +R032 RANDR:RRGetProviders +R033 RANDR:RRGetProviderInfo +R034 RANDR:RRSetProviderOffloadSink +R035 RANDR:RRSetProviderOutputSource +R036 RANDR:RRListProviderProperties +R037 RANDR:RRQueryProviderProperty +R038 RANDR:RRConfigureProviderProperty +R039 RANDR:RRChangeProviderProperty +R040 RANDR:RRDeleteProviderProperty +R041 RANDR:RRGetProviderProperty V000 RANDR:ScreenChangeNotify V001 RANDR:Notify E000 RANDR:BadRROutput E001 RANDR:BadRRCrtc E002 RANDR:BadRRMode +E003 RANDR:BadRRProvider R000 RECORD:QueryVersion R001 RECORD:CreateContext R002 RECORD:RegisterClients diff --git a/xorg-server/glamor/Makefile.am b/xorg-server/glamor/Makefile.am index 2fd521f11..3fe25304d 100644 --- a/xorg-server/glamor/Makefile.am +++ b/xorg-server/glamor/Makefile.am @@ -1,18 +1,10 @@ -lib_LTLIBRARIES = libglamor.la +noinst_LTLIBRARIES = libglamor.la libglamor_egl_stubs.la -if GLAMOR_GLES2 -libglamor_la_LIBADD = $(GLESV2_LIBS) -else -libglamor_la_LIBADD = $(GL_LIBS) -endif +libglamor_la_LIBADD = $(GLAMOR_LIBS) -AM_CFLAGS = $(CWARNFLAGS) $(XORG_CFLAGS) $(LIBDRM_CFLAGS) - -libglamor_la_LDFLAGS = -version-info 0:0:0 +AM_CFLAGS = $(CWARNFLAGS) $(DIX_CFLAGS) $(GLAMOR_CFLAGS) libglamor_la_SOURCES = \ - compat-api.h \ - compiler.h \ glamor.c \ glamor_copyarea.c \ glamor_copywindow.c \ @@ -48,24 +40,8 @@ libglamor_la_SOURCES = \ glamor_compositerects.c\ glamor_xv.c\ glamor_utils.h\ - glamor.h\ - glapi.h - -sdk_HEADERS = glamor.h - -if EGL -LIBGLAMOREGL = libglamoregl.la -module_LTLIBRARIES = $(LIBGLAMOREGL) -libglamoregl_la_DEPENDENCIES = libglamor.la -libglamoregl_la_LDFLAGS = -avoid-version -module -libglamoregl_la_LIBADD = $(EGL_LIBS) $(GLX_SYS_LIBS) $(GBM_LIBS) libglamor.la -libglamoregl_la_SOURCES = glamor_eglmodule.c glamor_egl.c -libglamoregl_la_CFLAGS = \ - $(AM_CFLAGS) \ - $(GLX_DEFINES) \ - $(LIBDRM_CFLAGS) \ - $(EGL_CFLAGS) \ - $(GBM_CFLAGS) -endif + glamor.h +libglamor_egl_stubs_la_SOURCES = glamor_egl_stubs.c +sdk_HEADERS = glamor.h diff --git a/xorg-server/glamor/compat-api.h b/xorg-server/glamor/compat-api.h deleted file mode 100644 index 1608478f8..000000000 --- a/xorg-server/glamor/compat-api.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * Copyright 2012 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. - * - * Author: Dave Airlie <airlied@redhat.com> - */ - -/* this file provides API compat between server post 1.13 and pre it, - it should be reused inside as many drivers as possible */ -#ifndef COMPAT_API_H -#define COMPAT_API_H - -#ifndef GLYPH_HAS_GLYPH_PICTURE_ACCESSOR -#define GetGlyphPicture(g, s) GlyphPicture((g))[(s)->myNum] -#define SetGlyphPicture(g, s, p) GlyphPicture((g))[(s)->myNum] = p -#endif - -#ifndef XF86_HAS_SCRN_CONV -#define xf86ScreenToScrn(s) xf86Screens[(s)->myNum] -#define xf86ScrnToScreen(s) screenInfo.screens[(s)->scrnIndex] -#endif - -#ifndef XF86_SCRN_INTERFACE - -#define SCRN_ARG_TYPE int -#define SCRN_INFO_PTR(arg1) ScrnInfoPtr scrn = xf86Screens[(arg1)] - -#define SCREEN_ARG_TYPE int -#define SCREEN_PTR(arg1) ScreenPtr screen = screenInfo.screens[(arg1)] - -#define SCREEN_INIT_ARGS_DECL int scrnIndex, ScreenPtr screen, int argc, char **argv - -#define BLOCKHANDLER_ARGS_DECL int arg, pointer blockData, pointer timeout, pointer read_mask -#define BLOCKHANDLER_ARGS arg, blockData, timeout, read_mask - -#define WAKEUPHANDLER_ARGS_DECL int arg, pointer wakeupData, unsigned long result, pointer read_mask -#define WAKEUPHANDLER_ARGS arg, wakeupData, result, read_mask - -#define CLOSE_SCREEN_ARGS_DECL int scrnIndex, ScreenPtr screen -#define CLOSE_SCREEN_ARGS scrnIndex, screen - -#define ADJUST_FRAME_ARGS_DECL int arg, int x, int y, int flags -#define ADJUST_FRAME_ARGS(arg, x, y) (arg)->scrnIndex, x, y, 0 - -#define SWITCH_MODE_ARGS_DECL int arg, DisplayModePtr mode, int flags -#define SWITCH_MODE_ARGS(arg, m) (arg)->scrnIndex, m, 0 - -#define FREE_SCREEN_ARGS_DECL int arg, int flags -#define FREE_SCREEN_ARGS arg, flags - -#define VT_FUNC_ARGS_DECL int arg, int flags -#define VT_FUNC_ARGS(flags) scrn->scrnIndex, (flags) - -#define XF86_ENABLEDISABLEFB_ARG(x) ((x)->scrnIndex) - -#else -#define SCRN_ARG_TYPE ScrnInfoPtr -#define SCRN_INFO_PTR(arg1) ScrnInfoPtr scrn = (arg1) - -#define SCREEN_ARG_TYPE ScreenPtr -#define SCREEN_PTR(arg1) ScreenPtr screen = (arg1) - -#define SCREEN_INIT_ARGS_DECL ScreenPtr screen, int argc, char **argv - -#define BLOCKHANDLER_ARGS_DECL ScreenPtr arg, pointer timeout, pointer read_mask -#define BLOCKHANDLER_ARGS arg, timeout, read_mask - -#define WAKEUPHANDLER_ARGS_DECL ScreenPtr arg, unsigned long result, pointer read_mask -#define WAKEUPHANDLER_ARGS arg, result, read_mask - -#define CLOSE_SCREEN_ARGS_DECL ScreenPtr screen -#define CLOSE_SCREEN_ARGS screen - -#define ADJUST_FRAME_ARGS_DECL ScrnInfoPtr arg, int x, int y -#define ADJUST_FRAME_ARGS(arg, x, y) arg, x, y - -#define SWITCH_MODE_ARGS_DECL ScrnInfoPtr arg, DisplayModePtr mode -#define SWITCH_MODE_ARGS(arg, m) arg, m - -#define FREE_SCREEN_ARGS_DECL ScrnInfoPtr arg -#define FREE_SCREEN_ARGS arg - -#define VT_FUNC_ARGS_DECL ScrnInfoPtr arg -#define VT_FUNC_ARGS(flags) scrn - -#define XF86_ENABLEDISABLEFB_ARG(x) (x) - -#endif -#endif diff --git a/xorg-server/glamor/glamor.c b/xorg-server/glamor/glamor.c index 93d3c5e72..feb110a66 100644 --- a/xorg-server/glamor/glamor.c +++ b/xorg-server/glamor/glamor.c @@ -54,197 +54,192 @@ DevPrivateKey glamor_pixmap_private_key = &glamor_pixmap_private_key_index; PixmapPtr glamor_get_drawable_pixmap(DrawablePtr drawable) { - if (drawable->type == DRAWABLE_WINDOW) - return drawable-> - pScreen->GetWindowPixmap((WindowPtr) drawable); - else - return (PixmapPtr) drawable; + if (drawable->type == DRAWABLE_WINDOW) + return drawable->pScreen->GetWindowPixmap((WindowPtr) drawable); + else + return (PixmapPtr) drawable; } _X_EXPORT void glamor_set_pixmap_type(PixmapPtr pixmap, glamor_pixmap_type_t type) { - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - - pixmap_priv = dixLookupPrivate(&pixmap->devPrivates, - glamor_pixmap_private_key); - if (pixmap_priv == NULL) { - pixmap_priv = calloc(sizeof(*pixmap_priv), 1); - glamor_set_pixmap_private(pixmap, pixmap_priv); - pixmap_priv->base.pixmap = pixmap; - pixmap_priv->base.glamor_priv = glamor_priv; - } - pixmap_priv->type = type; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + + pixmap_priv = dixLookupPrivate(&pixmap->devPrivates, + glamor_pixmap_private_key); + if (pixmap_priv == NULL) { + pixmap_priv = calloc(sizeof(*pixmap_priv), 1); + glamor_set_pixmap_private(pixmap, pixmap_priv); + pixmap_priv->base.pixmap = pixmap; + pixmap_priv->base.glamor_priv = glamor_priv; + } + pixmap_priv->type = type; } _X_EXPORT void glamor_set_pixmap_texture(PixmapPtr pixmap, unsigned int tex) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv; - glamor_pixmap_fbo *fbo; - GLenum format; - - glamor_priv = glamor_get_screen_private(screen); - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (pixmap_priv->base.fbo) { - fbo = glamor_pixmap_detach_fbo(pixmap_priv); - glamor_destroy_fbo(fbo); - } - - gl_iformat_for_depth(pixmap->drawable.depth, &format); - fbo = glamor_create_fbo_from_tex(glamor_priv, pixmap->drawable.width, - pixmap->drawable.height, - format, tex, 0); - - if (fbo == NULL) { - ErrorF("XXX fail to create fbo.\n"); - return; - } - - glamor_pixmap_attach_fbo(pixmap, fbo); + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv; + glamor_pixmap_fbo *fbo; + GLenum format; + + glamor_priv = glamor_get_screen_private(screen); + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (pixmap_priv->base.fbo) { + fbo = glamor_pixmap_detach_fbo(pixmap_priv); + glamor_destroy_fbo(fbo); + } + + gl_iformat_for_depth(pixmap->drawable.depth, &format); + fbo = glamor_create_fbo_from_tex(glamor_priv, pixmap->drawable.width, + pixmap->drawable.height, format, tex, 0); + + if (fbo == NULL) { + ErrorF("XXX fail to create fbo.\n"); + return; + } + + glamor_pixmap_attach_fbo(pixmap, fbo); } void glamor_set_screen_pixmap(PixmapPtr screen_pixmap, PixmapPtr *back_pixmap) { - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv; - glamor_priv = glamor_get_screen_private(screen_pixmap->drawable.pScreen); - pixmap_priv = glamor_get_pixmap_private(screen_pixmap); - glamor_priv->screen_fbo = pixmap_priv->base.fbo->fb; + glamor_priv = glamor_get_screen_private(screen_pixmap->drawable.pScreen); + pixmap_priv = glamor_get_pixmap_private(screen_pixmap); + glamor_priv->screen_fbo = pixmap_priv->base.fbo->fb; - pixmap_priv->base.fbo->width = screen_pixmap->drawable.width; - pixmap_priv->base.fbo->height = screen_pixmap->drawable.height; + pixmap_priv->base.fbo->width = screen_pixmap->drawable.width; + pixmap_priv->base.fbo->height = screen_pixmap->drawable.height; - glamor_priv->back_pixmap = back_pixmap; + glamor_priv->back_pixmap = back_pixmap; } PixmapPtr glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, - unsigned int usage) + unsigned int usage) { - PixmapPtr pixmap; - glamor_pixmap_type_t type = GLAMOR_TEXTURE_ONLY; - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_pixmap_fbo *fbo; - int pitch; - GLenum format; - - if (w > 32767 || h > 32767) - return NullPixmap; - - if ((usage == GLAMOR_CREATE_PIXMAP_CPU - || (usage == CREATE_PIXMAP_USAGE_GLYPH_PICTURE && w <= 64 && h <= 64) - || (w == 0 && h == 0) - || !glamor_check_pixmap_fbo_depth(depth)) - || (!GLAMOR_TEXTURED_LARGE_PIXMAP && - !glamor_check_fbo_size(glamor_priv, w, h))) - return fbCreatePixmap(screen, w, h, depth, usage); - else - pixmap = fbCreatePixmap(screen, 0, 0, depth, usage); - - pixmap_priv = calloc(1, sizeof(*pixmap_priv)); - - if (!pixmap_priv) { - fbDestroyPixmap(pixmap); - return fbCreatePixmap(screen, w, h, depth, usage); - } - glamor_set_pixmap_private(pixmap, pixmap_priv); - - if (usage == GLAMOR_CREATE_PIXMAP_MAP) - type = GLAMOR_MEMORY_MAP; - - pixmap_priv->base.pixmap = pixmap; - pixmap_priv->base.glamor_priv = glamor_priv; - - gl_iformat_for_depth(depth, &format); - - pitch = (((w * pixmap->drawable.bitsPerPixel + 7) / 8) + 3) & ~3; - screen->ModifyPixmapHeader(pixmap, w, h, 0, 0, pitch, NULL); - - if (type == GLAMOR_MEMORY_MAP || glamor_check_fbo_size(glamor_priv, w, h)) { - pixmap_priv->type = type; - fbo = glamor_create_fbo(glamor_priv, w, h, format, usage); - } - else { - DEBUGF("Create LARGE pixmap %p width %d height %d\n", pixmap, w, h); - pixmap_priv->type = GLAMOR_TEXTURE_LARGE; - fbo = glamor_create_fbo_array(glamor_priv, w, h, format, usage, - glamor_priv->max_fbo_size, - glamor_priv->max_fbo_size, - pixmap_priv); - } - - if (fbo == NULL) { - fbDestroyPixmap(pixmap); - free(pixmap_priv); - return fbCreatePixmap(screen, w, h, depth, usage); - } - - glamor_pixmap_attach_fbo(pixmap, fbo); - - return pixmap; + PixmapPtr pixmap; + glamor_pixmap_type_t type = GLAMOR_TEXTURE_ONLY; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_fbo *fbo; + int pitch; + GLenum format; + + if (w > 32767 || h > 32767) + return NullPixmap; + + if ((usage == GLAMOR_CREATE_PIXMAP_CPU + || (usage == CREATE_PIXMAP_USAGE_GLYPH_PICTURE && w <= 64 && h <= 64) + || (w == 0 && h == 0) + || !glamor_check_pixmap_fbo_depth(depth)) + || (!GLAMOR_TEXTURED_LARGE_PIXMAP && + !glamor_check_fbo_size(glamor_priv, w, h))) + return fbCreatePixmap(screen, w, h, depth, usage); + else + pixmap = fbCreatePixmap(screen, 0, 0, depth, usage); + + pixmap_priv = calloc(1, sizeof(*pixmap_priv)); + + if (!pixmap_priv) { + fbDestroyPixmap(pixmap); + return fbCreatePixmap(screen, w, h, depth, usage); + } + glamor_set_pixmap_private(pixmap, pixmap_priv); + + if (usage == GLAMOR_CREATE_PIXMAP_MAP) + type = GLAMOR_MEMORY_MAP; + + pixmap_priv->base.pixmap = pixmap; + pixmap_priv->base.glamor_priv = glamor_priv; + + gl_iformat_for_depth(depth, &format); + + pitch = (((w * pixmap->drawable.bitsPerPixel + 7) / 8) + 3) & ~3; + screen->ModifyPixmapHeader(pixmap, w, h, 0, 0, pitch, NULL); + + if (type == GLAMOR_MEMORY_MAP || glamor_check_fbo_size(glamor_priv, w, h)) { + pixmap_priv->type = type; + fbo = glamor_create_fbo(glamor_priv, w, h, format, usage); + } + else { + DEBUGF("Create LARGE pixmap %p width %d height %d\n", pixmap, w, h); + pixmap_priv->type = GLAMOR_TEXTURE_LARGE; + fbo = glamor_create_fbo_array(glamor_priv, w, h, format, usage, + glamor_priv->max_fbo_size, + glamor_priv->max_fbo_size, pixmap_priv); + } + + if (fbo == NULL) { + fbDestroyPixmap(pixmap); + free(pixmap_priv); + return fbCreatePixmap(screen, w, h, depth, usage); + } + + glamor_pixmap_attach_fbo(pixmap, fbo); + + return pixmap; } void glamor_destroy_textured_pixmap(PixmapPtr pixmap) { - if (pixmap->refcnt == 1) { - glamor_pixmap_private *pixmap_priv; + if (pixmap->refcnt == 1) { + glamor_pixmap_private *pixmap_priv; - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv != NULL) - glamor_pixmap_destroy_fbo(pixmap_priv); - } + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (pixmap_priv != NULL) + glamor_pixmap_destroy_fbo(pixmap_priv); + } } Bool glamor_destroy_pixmap(PixmapPtr pixmap) { - glamor_screen_private - *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - if (glamor_priv->dri3_enabled) - glamor_egl_destroy_textured_pixmap(pixmap); - else - glamor_destroy_textured_pixmap(pixmap); - return fbDestroyPixmap(pixmap); + glamor_screen_private + *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); + if (glamor_priv->dri3_enabled) + glamor_egl_destroy_textured_pixmap(pixmap); + else + glamor_destroy_textured_pixmap(pixmap); + return fbDestroyPixmap(pixmap); } void glamor_block_handler(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->tick++; - dispatch->glFlush(); - glamor_fbo_expire(glamor_priv); - glamor_put_dispatch(glamor_priv); - if (glamor_priv->state == RENDER_STATE - && glamor_priv->render_idle_cnt++ > RENDER_IDEL_MAX) { - glamor_priv->state = IDLE_STATE; - glamor_priv->render_idle_cnt = 0; - } + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->tick++; + dispatch->glFlush(); + glamor_fbo_expire(glamor_priv); + glamor_put_dispatch(glamor_priv); + if (glamor_priv->state == RENDER_STATE + && glamor_priv->render_idle_cnt++ > RENDER_IDEL_MAX) { + glamor_priv->state = IDLE_STATE; + glamor_priv->render_idle_cnt = 0; + } } static void -_glamor_block_handler(void *data, OSTimePtr timeout, - void *last_select_mask) +_glamor_block_handler(void *data, OSTimePtr timeout, void *last_select_mask) { - glamor_screen_private *glamor_priv = data; - glamor_gl_dispatch *dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glFlush(); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv = data; + glamor_gl_dispatch *dispatch = glamor_get_dispatch(glamor_priv); + + dispatch->glFlush(); + glamor_put_dispatch(glamor_priv); } static void @@ -255,374 +250,366 @@ _glamor_wakeup_handler(void *data, int result, void *last_select_mask) static void glamor_set_debug_level(int *debug_level) { - char *debug_level_string; - debug_level_string = getenv("GLAMOR_DEBUG"); - if (debug_level_string - && sscanf(debug_level_string, "%d", debug_level) == 1) - return; - *debug_level = 0; + char *debug_level_string; + + debug_level_string = getenv("GLAMOR_DEBUG"); + if (debug_level_string + && sscanf(debug_level_string, "%d", debug_level) == 1) + return; + *debug_level = 0; } int glamor_debug_level; + /** Set up glamor for an already-configured GL context. */ Bool glamor_init(ScreenPtr screen, unsigned int flags) { - glamor_screen_private *glamor_priv; - int gl_version; + glamor_screen_private *glamor_priv; + int gl_version; #ifdef RENDER - PictureScreenPtr ps = GetPictureScreenIfSet(screen); + PictureScreenPtr ps = GetPictureScreenIfSet(screen); #endif - if (flags & ~GLAMOR_VALID_FLAGS) { - ErrorF("glamor_init: Invalid flags %x\n", flags); - return FALSE; - } - glamor_priv = calloc(1, sizeof(*glamor_priv)); - if (glamor_priv == NULL) - return FALSE; - - if (flags & GLAMOR_INVERTED_Y_AXIS) { - glamor_priv->yInverted = 1; - } else - glamor_priv->yInverted = 0; - - if (!dixRegisterPrivateKey - (glamor_screen_private_key, PRIVATE_SCREEN, 0)) { - LogMessage(X_WARNING, - "glamor%d: Failed to allocate screen private\n", - screen->myNum); - goto fail; - } - - glamor_set_screen_private(screen, glamor_priv); - - if (!dixRegisterPrivateKey - (glamor_pixmap_private_key, PRIVATE_PIXMAP, 0)) { - LogMessage(X_WARNING, - "glamor%d: Failed to allocate pixmap private\n", - screen->myNum); - goto fail;; - } - - gl_version = glamor_gl_get_version(); + if (flags & ~GLAMOR_VALID_FLAGS) { + ErrorF("glamor_init: Invalid flags %x\n", flags); + return FALSE; + } + glamor_priv = calloc(1, sizeof(*glamor_priv)); + if (glamor_priv == NULL) + return FALSE; + + if (flags & GLAMOR_INVERTED_Y_AXIS) { + glamor_priv->yInverted = 1; + } + else + glamor_priv->yInverted = 0; + + if (!dixRegisterPrivateKey(glamor_screen_private_key, PRIVATE_SCREEN, 0)) { + LogMessage(X_WARNING, + "glamor%d: Failed to allocate screen private\n", + screen->myNum); + goto fail; + } + + glamor_set_screen_private(screen, glamor_priv); + + if (!dixRegisterPrivateKey(glamor_pixmap_private_key, PRIVATE_PIXMAP, 0)) { + LogMessage(X_WARNING, + "glamor%d: Failed to allocate pixmap private\n", + screen->myNum); + goto fail;; + } + + gl_version = glamor_gl_get_version(); #ifndef GLAMOR_GLES2 - if (gl_version < GLAMOR_GL_VERSION_ENCODE(1, 3)) { - ErrorF("Require OpenGL version 1.3 or latter.\n"); - goto fail; - } + if (gl_version < GLAMOR_GL_VERSION_ENCODE(1, 3)) { + ErrorF("Require OpenGL version 1.3 or latter.\n"); + goto fail; + } #else - if (gl_version < GLAMOR_GL_VERSION_ENCODE(2, 0)) { - ErrorF("Require Open GLES2.0 or latter.\n"); - goto fail; - } + if (gl_version < GLAMOR_GL_VERSION_ENCODE(2, 0)) { + ErrorF("Require Open GLES2.0 or latter.\n"); + goto fail; + } #endif - glamor_gl_dispatch_init(screen, &glamor_priv->_dispatch, gl_version); + glamor_gl_dispatch_init(screen, &glamor_priv->_dispatch, gl_version); #ifdef GLAMOR_GLES2 - if (!glamor_gl_has_extension("GL_EXT_texture_format_BGRA8888")) { - ErrorF("GL_EXT_texture_format_BGRA8888 required\n"); - goto fail; - } + if (!glamor_gl_has_extension("GL_EXT_texture_format_BGRA8888")) { + ErrorF("GL_EXT_texture_format_BGRA8888 required\n"); + goto fail; + } #endif - glamor_priv->has_pack_invert = - glamor_gl_has_extension("GL_MESA_pack_invert"); - glamor_priv->has_fbo_blit = - glamor_gl_has_extension("GL_EXT_framebuffer_blit"); - glamor_priv->_dispatch.glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, - &glamor_priv->max_fbo_size); + glamor_priv->has_pack_invert = + glamor_gl_has_extension("GL_MESA_pack_invert"); + glamor_priv->has_fbo_blit = + glamor_gl_has_extension("GL_EXT_framebuffer_blit"); + glamor_priv->_dispatch.glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, + &glamor_priv->max_fbo_size); #ifdef MAX_FBO_SIZE - glamor_priv->max_fbo_size = MAX_FBO_SIZE; + glamor_priv->max_fbo_size = MAX_FBO_SIZE; #endif - glamor_set_debug_level(&glamor_debug_level); + glamor_set_debug_level(&glamor_debug_level); #ifdef GLAMOR_GLES2 - glamor_priv->gl_flavor = GLAMOR_GL_ES2; + glamor_priv->gl_flavor = GLAMOR_GL_ES2; #else - glamor_priv->gl_flavor = GLAMOR_GL_DESKTOP; + glamor_priv->gl_flavor = GLAMOR_GL_DESKTOP; #endif - /* If we are using egl screen, call egl screen init to - * register correct close screen function. */ - if (flags & GLAMOR_USE_EGL_SCREEN) - glamor_egl_screen_init(screen); + /* If we are using egl screen, call egl screen init to + * register correct close screen function. */ + if (flags & GLAMOR_USE_EGL_SCREEN) + glamor_egl_screen_init(screen); - glamor_priv->saved_procs.close_screen = screen->CloseScreen; - screen->CloseScreen = glamor_close_screen; + glamor_priv->saved_procs.close_screen = screen->CloseScreen; + screen->CloseScreen = glamor_close_screen; - if (flags & GLAMOR_USE_SCREEN) { - if (!RegisterBlockAndWakeupHandlers(_glamor_block_handler, - _glamor_wakeup_handler, - glamor_priv)) { - goto fail; - } + if (flags & GLAMOR_USE_SCREEN) { + if (!RegisterBlockAndWakeupHandlers(_glamor_block_handler, + _glamor_wakeup_handler, + glamor_priv)) { + goto fail; + } - glamor_priv->saved_procs.create_gc = screen->CreateGC; - screen->CreateGC = glamor_create_gc; + glamor_priv->saved_procs.create_gc = screen->CreateGC; + screen->CreateGC = glamor_create_gc; - glamor_priv->saved_procs.create_pixmap = screen->CreatePixmap; - screen->CreatePixmap = glamor_create_pixmap; + glamor_priv->saved_procs.create_pixmap = screen->CreatePixmap; + screen->CreatePixmap = glamor_create_pixmap; - glamor_priv->saved_procs.destroy_pixmap = screen->DestroyPixmap; - screen->DestroyPixmap = glamor_destroy_pixmap; + glamor_priv->saved_procs.destroy_pixmap = screen->DestroyPixmap; + screen->DestroyPixmap = glamor_destroy_pixmap; - glamor_priv->saved_procs.get_spans = screen->GetSpans; - screen->GetSpans = glamor_get_spans; + glamor_priv->saved_procs.get_spans = screen->GetSpans; + screen->GetSpans = glamor_get_spans; - glamor_priv->saved_procs.get_image = screen->GetImage; - screen->GetImage = glamor_get_image; + glamor_priv->saved_procs.get_image = screen->GetImage; + screen->GetImage = glamor_get_image; - glamor_priv->saved_procs.change_window_attributes = - screen->ChangeWindowAttributes; - screen->ChangeWindowAttributes = - glamor_change_window_attributes; + glamor_priv->saved_procs.change_window_attributes = + screen->ChangeWindowAttributes; + screen->ChangeWindowAttributes = glamor_change_window_attributes; - glamor_priv->saved_procs.copy_window = screen->CopyWindow; - screen->CopyWindow = glamor_copy_window; + glamor_priv->saved_procs.copy_window = screen->CopyWindow; + screen->CopyWindow = glamor_copy_window; - glamor_priv->saved_procs.bitmap_to_region = - screen->BitmapToRegion; - screen->BitmapToRegion = glamor_bitmap_to_region; - } + glamor_priv->saved_procs.bitmap_to_region = screen->BitmapToRegion; + screen->BitmapToRegion = glamor_bitmap_to_region; + } #ifdef RENDER - if (flags & GLAMOR_USE_PICTURE_SCREEN) { - glamor_priv->saved_procs.composite = ps->Composite; - ps->Composite = glamor_composite; + if (flags & GLAMOR_USE_PICTURE_SCREEN) { + glamor_priv->saved_procs.composite = ps->Composite; + ps->Composite = glamor_composite; + glamor_priv->saved_procs.trapezoids = ps->Trapezoids; + ps->Trapezoids = glamor_trapezoids; - glamor_priv->saved_procs.trapezoids = ps->Trapezoids; - ps->Trapezoids = glamor_trapezoids; + glamor_priv->saved_procs.triangles = ps->Triangles; + ps->Triangles = glamor_triangles; + glamor_priv->saved_procs.addtraps = ps->AddTraps; + ps->AddTraps = glamor_add_traps; - glamor_priv->saved_procs.triangles = ps->Triangles; - ps->Triangles = glamor_triangles; + } - glamor_priv->saved_procs.addtraps = ps->AddTraps; - ps->AddTraps = glamor_add_traps; + glamor_priv->saved_procs.composite_rects = ps->CompositeRects; + ps->CompositeRects = glamor_composite_rectangles; - } + glamor_priv->saved_procs.glyphs = ps->Glyphs; + ps->Glyphs = glamor_glyphs; - glamor_priv->saved_procs.composite_rects = ps->CompositeRects; - ps->CompositeRects = glamor_composite_rectangles; + glamor_priv->saved_procs.unrealize_glyph = ps->UnrealizeGlyph; + ps->UnrealizeGlyph = glamor_glyph_unrealize; - glamor_priv->saved_procs.glyphs = ps->Glyphs; - ps->Glyphs = glamor_glyphs; + glamor_priv->saved_procs.create_picture = ps->CreatePicture; + ps->CreatePicture = glamor_create_picture; - glamor_priv->saved_procs.unrealize_glyph = ps->UnrealizeGlyph; - ps->UnrealizeGlyph = glamor_glyph_unrealize; + glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap; + screen->SetWindowPixmap = glamor_set_window_pixmap; - glamor_priv->saved_procs.create_picture = ps->CreatePicture; - ps->CreatePicture = glamor_create_picture; - - glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap; - screen->SetWindowPixmap = glamor_set_window_pixmap; - - glamor_priv->saved_procs.destroy_picture = ps->DestroyPicture; - ps->DestroyPicture = glamor_destroy_picture; - glamor_init_composite_shaders(screen); + glamor_priv->saved_procs.destroy_picture = ps->DestroyPicture; + ps->DestroyPicture = glamor_destroy_picture; + glamor_init_composite_shaders(screen); #endif - glamor_init_pixmap_fbo(screen); - glamor_init_solid_shader(screen); - glamor_init_tile_shader(screen); + glamor_init_pixmap_fbo(screen); + glamor_init_solid_shader(screen); + glamor_init_tile_shader(screen); #ifdef GLAMOR_TRAPEZOID_SHADER - glamor_init_trapezoid_shader(screen); + glamor_init_trapezoid_shader(screen); #endif - glamor_init_putimage_shaders(screen); - glamor_init_finish_access_shaders(screen); + glamor_init_putimage_shaders(screen); + glamor_init_finish_access_shaders(screen); #ifdef GLAMOR_GRADIENT_SHADER - glamor_init_gradient_shader(screen); + glamor_init_gradient_shader(screen); #endif #ifdef GLAMOR_XV - glamor_init_xv_shader(screen); + glamor_init_xv_shader(screen); #endif - glamor_pixmap_init(screen); + glamor_pixmap_init(screen); - glamor_priv->flags = flags; - glamor_priv->screen = screen; + glamor_priv->flags = flags; + glamor_priv->screen = screen; - return TRUE; + return TRUE; - fail: - free(glamor_priv); - glamor_set_screen_private(screen, NULL); - return FALSE; + fail: + free(glamor_priv); + glamor_set_screen_private(screen, NULL); + return FALSE; } static void glamor_release_screen_priv(ScreenPtr screen) { - glamor_screen_private *glamor_priv; + glamor_screen_private *glamor_priv; - glamor_priv = glamor_get_screen_private(screen); + glamor_priv = glamor_get_screen_private(screen); #ifdef GLAMOR_XV - glamor_fini_xv_shader(screen); + glamor_fini_xv_shader(screen); #endif #ifdef RENDER - glamor_fini_composite_shaders(screen); + glamor_fini_composite_shaders(screen); #endif - glamor_fini_pixmap_fbo(screen); - glamor_fini_solid_shader(screen); - glamor_fini_tile_shader(screen); + glamor_fini_pixmap_fbo(screen); + glamor_fini_solid_shader(screen); + glamor_fini_tile_shader(screen); #ifdef GLAMOR_TRAPEZOID_SHADER - glamor_fini_trapezoid_shader(screen); + glamor_fini_trapezoid_shader(screen); #endif - glamor_fini_putimage_shaders(screen); - glamor_fini_finish_access_shaders(screen); + glamor_fini_putimage_shaders(screen); + glamor_fini_finish_access_shaders(screen); #ifdef GLAMOR_GRADIENT_SHADER - glamor_fini_gradient_shader(screen); + glamor_fini_gradient_shader(screen); #endif - glamor_pixmap_fini(screen); - free(glamor_priv); + glamor_pixmap_fini(screen); + free(glamor_priv); - glamor_set_screen_private(screen, NULL); + glamor_set_screen_private(screen, NULL); } _X_EXPORT void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv) { - glamor_pixmap_private *old_priv; - glamor_pixmap_fbo *fbo; - - old_priv = dixGetPrivate(&pixmap->devPrivates, glamor_pixmap_private_key); - - if (priv) { - assert(old_priv == NULL); - } else { - if (old_priv == NULL) - return; - fbo = glamor_pixmap_detach_fbo(old_priv); - glamor_purge_fbo(fbo); - free(old_priv); - } - - dixSetPrivate(&pixmap->devPrivates, - glamor_pixmap_private_key, - priv); + glamor_pixmap_private *old_priv; + glamor_pixmap_fbo *fbo; + + old_priv = dixGetPrivate(&pixmap->devPrivates, glamor_pixmap_private_key); + + if (priv) { + assert(old_priv == NULL); + } + else { + if (old_priv == NULL) + return; + fbo = glamor_pixmap_detach_fbo(old_priv); + glamor_purge_fbo(fbo); + free(old_priv); + } + + dixSetPrivate(&pixmap->devPrivates, glamor_pixmap_private_key, priv); } Bool -glamor_close_screen(CLOSE_SCREEN_ARGS_DECL) +glamor_close_screen(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - PixmapPtr screen_pixmap; - int flags; + glamor_screen_private *glamor_priv; + PixmapPtr screen_pixmap; + int flags; + #ifdef RENDER - PictureScreenPtr ps = GetPictureScreenIfSet(screen); + PictureScreenPtr ps = GetPictureScreenIfSet(screen); #endif - glamor_priv = glamor_get_screen_private(screen); - flags = glamor_priv->flags; - glamor_glyphs_fini(screen); - screen->CloseScreen = glamor_priv->saved_procs.close_screen; - if (flags & GLAMOR_USE_SCREEN) { - - screen->CreateGC = glamor_priv->saved_procs.create_gc; - screen->CreatePixmap = glamor_priv->saved_procs.create_pixmap; - screen->DestroyPixmap = glamor_priv->saved_procs.destroy_pixmap; - screen->GetSpans = glamor_priv->saved_procs.get_spans; - screen->ChangeWindowAttributes = - glamor_priv->saved_procs.change_window_attributes; - screen->CopyWindow = glamor_priv->saved_procs.copy_window; - screen->BitmapToRegion = glamor_priv->saved_procs.bitmap_to_region; - } + glamor_priv = glamor_get_screen_private(screen); + flags = glamor_priv->flags; + glamor_glyphs_fini(screen); + screen->CloseScreen = glamor_priv->saved_procs.close_screen; + if (flags & GLAMOR_USE_SCREEN) { + + screen->CreateGC = glamor_priv->saved_procs.create_gc; + screen->CreatePixmap = glamor_priv->saved_procs.create_pixmap; + screen->DestroyPixmap = glamor_priv->saved_procs.destroy_pixmap; + screen->GetSpans = glamor_priv->saved_procs.get_spans; + screen->ChangeWindowAttributes = + glamor_priv->saved_procs.change_window_attributes; + screen->CopyWindow = glamor_priv->saved_procs.copy_window; + screen->BitmapToRegion = glamor_priv->saved_procs.bitmap_to_region; + } #ifdef RENDER - if (ps && (flags & GLAMOR_USE_PICTURE_SCREEN)) { - - ps->Composite = glamor_priv->saved_procs.composite; - ps->Trapezoids = glamor_priv->saved_procs.trapezoids; - ps->Triangles = glamor_priv->saved_procs.triangles; - ps->CreatePicture = glamor_priv->saved_procs.create_picture; - } - ps->CompositeRects = glamor_priv->saved_procs.composite_rects; - ps->Glyphs = glamor_priv->saved_procs.glyphs; - ps->UnrealizeGlyph = glamor_priv->saved_procs.unrealize_glyph; - screen->SetWindowPixmap = glamor_priv->saved_procs.set_window_pixmap; + if (ps && (flags & GLAMOR_USE_PICTURE_SCREEN)) { + + ps->Composite = glamor_priv->saved_procs.composite; + ps->Trapezoids = glamor_priv->saved_procs.trapezoids; + ps->Triangles = glamor_priv->saved_procs.triangles; + ps->CreatePicture = glamor_priv->saved_procs.create_picture; + } + ps->CompositeRects = glamor_priv->saved_procs.composite_rects; + ps->Glyphs = glamor_priv->saved_procs.glyphs; + ps->UnrealizeGlyph = glamor_priv->saved_procs.unrealize_glyph; + screen->SetWindowPixmap = glamor_priv->saved_procs.set_window_pixmap; #endif - screen_pixmap = screen->GetScreenPixmap(screen); - glamor_set_pixmap_private(screen_pixmap, NULL); - if (glamor_priv->back_pixmap && *glamor_priv->back_pixmap) - glamor_set_pixmap_private(*glamor_priv->back_pixmap, NULL); + screen_pixmap = screen->GetScreenPixmap(screen); + glamor_set_pixmap_private(screen_pixmap, NULL); + if (glamor_priv->back_pixmap && *glamor_priv->back_pixmap) + glamor_set_pixmap_private(*glamor_priv->back_pixmap, NULL); - glamor_release_screen_priv(screen); + glamor_release_screen_priv(screen); - return screen->CloseScreen(CLOSE_SCREEN_ARGS); + return screen->CloseScreen(screen); } - void glamor_fini(ScreenPtr screen) { - /* Do nothing currently. */ + /* Do nothing currently. */ } -void glamor_enable_dri3(ScreenPtr screen) +void +glamor_enable_dri3(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_priv->dri3_enabled = TRUE; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + + glamor_priv->dri3_enabled = TRUE; } -Bool glamor_is_dri3_support_enabled(ScreenPtr screen) +Bool +glamor_is_dri3_support_enabled(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - return glamor_priv->dri3_enabled; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + + return glamor_priv->dri3_enabled; } int -glamor_dri3_fd_from_pixmap (ScreenPtr screen, - PixmapPtr pixmap, - CARD16 *stride, - CARD32 *size) +glamor_dri3_fd_from_pixmap(ScreenPtr screen, + PixmapPtr pixmap, CARD16 *stride, CARD32 *size) { - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv == NULL || !glamor_priv->dri3_enabled) - return -1; - switch (pixmap_priv->type) - { - case GLAMOR_TEXTURE_DRM: - case GLAMOR_TEXTURE_ONLY: - glamor_pixmap_ensure_fbo(pixmap, GL_RGBA, 0); - return glamor_egl_dri3_fd_name_from_tex(screen, - pixmap, - pixmap_priv->base.fbo->tex, - FALSE, - stride, - size); - default: break; - } - return -1; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (pixmap_priv == NULL || !glamor_priv->dri3_enabled) + return -1; + switch (pixmap_priv->type) { + case GLAMOR_TEXTURE_DRM: + case GLAMOR_TEXTURE_ONLY: + glamor_pixmap_ensure_fbo(pixmap, GL_RGBA, 0); + return glamor_egl_dri3_fd_name_from_tex(screen, + pixmap, + pixmap_priv->base.fbo->tex, + FALSE, stride, size); + default: + break; + } + return -1; } int -glamor_dri3_name_from_pixmap (PixmapPtr pixmap) +glamor_dri3_name_from_pixmap(PixmapPtr pixmap) { - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv == NULL || !glamor_priv->dri3_enabled) - return -1; - switch (pixmap_priv->type) - { - case GLAMOR_TEXTURE_DRM: - case GLAMOR_TEXTURE_ONLY: - glamor_pixmap_ensure_fbo(pixmap, GL_RGBA, 0); - return glamor_egl_dri3_fd_name_from_tex(pixmap->drawable.pScreen, - pixmap, - pixmap_priv->base.fbo->tex, - TRUE, - NULL, - NULL); - default: break; - } - return -1; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (pixmap_priv == NULL || !glamor_priv->dri3_enabled) + return -1; + switch (pixmap_priv->type) { + case GLAMOR_TEXTURE_DRM: + case GLAMOR_TEXTURE_ONLY: + glamor_pixmap_ensure_fbo(pixmap, GL_RGBA, 0); + return glamor_egl_dri3_fd_name_from_tex(pixmap->drawable.pScreen, + pixmap, + pixmap_priv->base.fbo->tex, + TRUE, NULL, NULL); + default: + break; + } + return -1; } diff --git a/xorg-server/glamor/glamor.h b/xorg-server/glamor/glamor.h index 1bb48ed74..05f565b12 100644 --- a/xorg-server/glamor/glamor.h +++ b/xorg-server/glamor/glamor.h @@ -30,14 +30,12 @@ #define GLAMOR_H #include <scrnintstr.h> -#include <xf86.h> -#include <xf86str.h> #include <pixmapstr.h> #include <gcstruct.h> #include <picturestr.h> #include <fb.h> #include <fbpict.h> -#include <xf86xv.h> + /* * glamor_pixmap_type : glamor pixmap's type. * @MEMORY: pixmap is in memory. @@ -48,15 +46,15 @@ * @DRM_ONLY: pixmap is in a external DRM buffer. * @TEXTURE_ONLY: pixmap is in an internal texture. */ -typedef enum glamor_pixmap_type { - GLAMOR_MEMORY, - GLAMOR_MEMORY_MAP, - GLAMOR_TEXTURE_DRM, - GLAMOR_SEPARATE_TEXTURE, - GLAMOR_DRM_ONLY, - GLAMOR_TEXTURE_ONLY, - GLAMOR_TEXTURE_LARGE, - GLAMOR_TEXTURE_PACK +typedef enum glamor_pixmap_type { + GLAMOR_MEMORY, + GLAMOR_MEMORY_MAP, + GLAMOR_TEXTURE_DRM, + GLAMOR_SEPARATE_TEXTURE, + GLAMOR_DRM_ONLY, + GLAMOR_TEXTURE_ONLY, + GLAMOR_TEXTURE_LARGE, + GLAMOR_TEXTURE_PACK } glamor_pixmap_type_t; #define GLAMOR_EGL_EXTERNAL_BUFFER 3 @@ -116,17 +114,13 @@ extern _X_EXPORT void glamor_fini(ScreenPtr screen); * screen pixmap which must be a glamor pixmap and requires * the internal data structure still exist at that time. * Otherwise, the glamor internal structure will not be freed.*/ -#ifndef XF86_SCRN_INTERFACE -extern _X_EXPORT Bool glamor_close_screen(int scrnIndex, ScreenPtr screen); -#else extern _X_EXPORT Bool glamor_close_screen(ScreenPtr screen); -#endif - /* Let glamor to know the screen's fbo. The low level * driver should already assign a tex * to this pixmap through the set_pixmap_texture. */ -extern _X_EXPORT void glamor_set_screen_pixmap(PixmapPtr screen_pixmap, PixmapPtr *back_pixmap); +extern _X_EXPORT void glamor_set_screen_pixmap(PixmapPtr screen_pixmap, + PixmapPtr *back_pixmap); /* @glamor_glyphs_init: Initialize glyphs internal data structures. * @@ -139,13 +133,14 @@ extern _X_EXPORT void glamor_set_screen_pixmap(PixmapPtr screen_pixmap, PixmapPt extern _X_EXPORT Bool glamor_glyphs_init(ScreenPtr pScreen); extern _X_EXPORT void glamor_set_pixmap_texture(PixmapPtr pixmap, - unsigned int tex); + unsigned int tex); -extern _X_EXPORT void glamor_set_pixmap_type(PixmapPtr pixmap, glamor_pixmap_type_t type); +extern _X_EXPORT void glamor_set_pixmap_type(PixmapPtr pixmap, + glamor_pixmap_type_t type); extern _X_EXPORT void glamor_destroy_textured_pixmap(PixmapPtr pixmap); extern _X_EXPORT void glamor_block_handler(ScreenPtr screen); -extern _X_EXPORT PixmapPtr glamor_create_pixmap(ScreenPtr screen, int w, int h, int depth, - unsigned int usage); +extern _X_EXPORT PixmapPtr glamor_create_pixmap(ScreenPtr screen, int w, int h, + int depth, unsigned int usage); extern _X_EXPORT void glamor_egl_screen_init(ScreenPtr screen); @@ -160,14 +155,21 @@ extern _X_EXPORT void glamor_egl_restore_context(ScreenPtr screen); * Used by the DRI2 page flip. This function will exchange the KHR images and * fbos of the two pixmaps. * */ -extern _X_EXPORT void glamor_egl_exchange_buffers(PixmapPtr front, PixmapPtr back); +extern _X_EXPORT void glamor_egl_exchange_buffers(PixmapPtr front, + PixmapPtr back); -extern _X_EXPORT void glamor_pixmap_exchange_fbos(PixmapPtr front, PixmapPtr back); +extern _X_EXPORT void glamor_pixmap_exchange_fbos(PixmapPtr front, + PixmapPtr back); /* The DDX is not supposed to call these three functions */ extern _X_EXPORT void glamor_enable_dri3(ScreenPtr screen); -extern _X_EXPORT unsigned int glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h); -extern _X_EXPORT int glamor_egl_dri3_fd_name_from_tex(ScreenPtr, PixmapPtr, unsigned int, Bool, CARD16*, CARD32*); +extern _X_EXPORT unsigned int glamor_egl_create_argb8888_based_texture(ScreenPtr + screen, + int w, + int h); +extern _X_EXPORT int glamor_egl_dri3_fd_name_from_tex(ScreenPtr, PixmapPtr, + unsigned int, Bool, + CARD16 *, CARD32 *); /* @glamor_is_dri3_support_enabled: Returns if DRI3 support is enabled. * @@ -194,10 +196,9 @@ extern _X_EXPORT Bool glamor_is_dri3_support_enabled(ScreenPtr screen); * content. * Returns the fd on success, -1 on error. * */ -extern _X_EXPORT int glamor_dri3_fd_from_pixmap (ScreenPtr screen, - PixmapPtr pixmap, - CARD16 *stride, - CARD32 *size); +extern _X_EXPORT int glamor_dri3_fd_from_pixmap(ScreenPtr screen, + PixmapPtr pixmap, + CARD16 *stride, CARD32 *size); /* @glamor_dri3_name_from_pixmap: helper to get an gem name from a pixmap. * @@ -208,7 +209,7 @@ extern _X_EXPORT int glamor_dri3_fd_from_pixmap (ScreenPtr screen, * glamor DRI3 support to be activated. * Returns the name on success, -1 on error. * */ -extern _X_EXPORT int glamor_dri3_name_from_pixmap (PixmapPtr pixmap); +extern _X_EXPORT int glamor_dri3_name_from_pixmap(PixmapPtr pixmap); /* @glamor_egl_dri3_pixmap_from_fd: DRI3 helper to get a pixmap from a dma-buf fd. * @@ -222,13 +223,13 @@ extern _X_EXPORT int glamor_dri3_name_from_pixmap (PixmapPtr pixmap); * * Returns a valid pixmap if the import succeeded, else NULL. * */ -extern _X_EXPORT PixmapPtr glamor_egl_dri3_pixmap_from_fd (ScreenPtr screen, - int fd, - CARD16 width, - CARD16 height, - CARD16 stride, - CARD8 depth, - CARD8 bpp); +extern _X_EXPORT PixmapPtr glamor_egl_dri3_pixmap_from_fd(ScreenPtr screen, + int fd, + CARD16 width, + CARD16 height, + CARD16 stride, + CARD8 depth, + CARD8 bpp); #ifdef GLAMOR_FOR_XORG @@ -265,8 +266,7 @@ extern _X_EXPORT Bool glamor_egl_init_textured_pixmap(ScreenPtr screen); * screen pixmap is a special, we handle it separately in this function. */ extern _X_EXPORT Bool glamor_egl_create_textured_screen(ScreenPtr screen, - int handle, - int stride); + int handle, int stride); /* @glamor_egl_create_textured_screen_ext: * @@ -275,9 +275,10 @@ extern _X_EXPORT Bool glamor_egl_create_textured_screen(ScreenPtr screen, * the DDX's close screen, we have to free all the glamor related resources. */ extern _X_EXPORT Bool glamor_egl_create_textured_screen_ext(ScreenPtr screen, - int handle, - int stride, - PixmapPtr *back_pixmap); + int handle, + int stride, + PixmapPtr + *back_pixmap); /* * @glamor_egl_create_textured_pixmap: Try to create a textured pixmap from @@ -292,8 +293,7 @@ extern _X_EXPORT Bool glamor_egl_create_textured_screen_ext(ScreenPtr screen, * as well. Return true if successful, otherwise return FALSE. */ extern _X_EXPORT Bool glamor_egl_create_textured_pixmap(PixmapPtr pixmap, - int handle, - int stride); + int handle, int stride); /* * @glamor_egl_create_textured_pixmap_from_bo: Try to create a textured pixmap @@ -305,8 +305,7 @@ extern _X_EXPORT Bool glamor_egl_create_textured_pixmap(PixmapPtr pixmap, * This function is similar to glamor_egl_create_textured_pixmap. */ extern _X_EXPORT Bool - glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, - void *bo); + glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, void *bo); #endif @@ -314,119 +313,131 @@ extern _X_EXPORT void glamor_egl_destroy_textured_pixmap(PixmapPtr pixmap); extern _X_EXPORT int glamor_create_gc(GCPtr gc); -extern _X_EXPORT void glamor_validate_gc(GCPtr gc, unsigned long changes, DrawablePtr drawable); +extern _X_EXPORT void glamor_validate_gc(GCPtr gc, unsigned long changes, + DrawablePtr drawable); /* Glamor rendering/drawing functions with XXX_nf. * nf means no fallback within glamor internal if possible. If glamor * fail to accelerate the operation, glamor will return a false, and the * caller need to implement fallback method. Return a true means the * rendering request get done successfully. */ extern _X_EXPORT Bool glamor_fill_spans_nf(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, - int *widths, int sorted); + GCPtr gc, + int n, DDXPointPtr points, + int *widths, int sorted); extern _X_EXPORT Bool glamor_poly_fill_rect_nf(DrawablePtr drawable, - GCPtr gc, - int nrect, - xRectangle * prect); + GCPtr gc, + int nrect, xRectangle *prect); extern _X_EXPORT Bool glamor_put_image_nf(DrawablePtr drawable, - GCPtr gc, int depth, int x, int y, - int w, int h, int left_pad, - int image_format, char *bits); + GCPtr gc, int depth, int x, int y, + int w, int h, int left_pad, + int image_format, char *bits); extern _X_EXPORT Bool glamor_copy_n_to_n_nf(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure); + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, Pixel bitplane, + void *closure); extern _X_EXPORT Bool glamor_composite_nf(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height); + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height); extern _X_EXPORT Bool glamor_trapezoids_nf(CARD8 op, - PicturePtr src, PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps); + PicturePtr src, PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, INT16 y_src, + int ntrap, xTrapezoid *traps); extern _X_EXPORT Bool glamor_glyphs_nf(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, int nlist, - GlyphListPtr list, GlyphPtr * glyphs); + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, int nlist, + GlyphListPtr list, GlyphPtr *glyphs); extern _X_EXPORT Bool glamor_triangles_nf(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, - int ntris, xTriangle * tris); - + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, + int ntris, xTriangle *tris); extern _X_EXPORT void glamor_glyph_unrealize(ScreenPtr screen, GlyphPtr glyph); -extern _X_EXPORT Bool glamor_set_spans_nf(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int n, int sorted); +extern _X_EXPORT Bool glamor_set_spans_nf(DrawablePtr drawable, GCPtr gc, + char *src, DDXPointPtr points, + int *widths, int n, int sorted); extern _X_EXPORT Bool glamor_get_spans_nf(DrawablePtr drawable, int wmax, - DDXPointPtr points, int *widths, int count, char *dst); + DDXPointPtr points, int *widths, + int count, char *dst); -extern _X_EXPORT Bool glamor_composite_rects_nf (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects); +extern _X_EXPORT Bool glamor_composite_rects_nf(CARD8 op, + PicturePtr pDst, + xRenderColor *color, + int nRect, xRectangle *rects); -extern _X_EXPORT Bool glamor_get_image_nf(DrawablePtr pDrawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d); +extern _X_EXPORT Bool glamor_get_image_nf(DrawablePtr pDrawable, int x, int y, + int w, int h, unsigned int format, + unsigned long planeMask, char *d); extern _X_EXPORT Bool glamor_add_traps_nf(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps); - -extern _X_EXPORT Bool glamor_copy_plane_nf(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane, RegionPtr *pRegion); - -extern _X_EXPORT Bool glamor_image_glyph_blt_nf(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase); + INT16 x_off, + INT16 y_off, int ntrap, + xTrap *traps); + +extern _X_EXPORT Bool glamor_copy_plane_nf(DrawablePtr pSrc, DrawablePtr pDst, + GCPtr pGC, int srcx, int srcy, int w, + int h, int dstx, int dsty, + unsigned long bitPlane, + RegionPtr *pRegion); + +extern _X_EXPORT Bool glamor_image_glyph_blt_nf(DrawablePtr pDrawable, + GCPtr pGC, int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + void *pglyphBase); extern _X_EXPORT Bool glamor_poly_glyph_blt_nf(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase); + int x, int y, + unsigned int nglyph, + CharInfoPtr *ppci, + void *pglyphBase); extern _X_EXPORT Bool glamor_push_pixels_nf(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y); + DrawablePtr pDrawable, int w, int h, + int x, int y); -extern _X_EXPORT Bool glamor_poly_point_nf(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt); +extern _X_EXPORT Bool glamor_poly_point_nf(DrawablePtr pDrawable, GCPtr pGC, + int mode, int npt, DDXPointPtr ppt); -extern _X_EXPORT Bool glamor_poly_segment_nf(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg); +extern _X_EXPORT Bool glamor_poly_segment_nf(DrawablePtr pDrawable, GCPtr pGC, + int nseg, xSegment *pSeg); -extern _X_EXPORT Bool glamor_poly_line_nf(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt); +extern _X_EXPORT Bool glamor_poly_line_nf(DrawablePtr pDrawable, GCPtr pGC, + int mode, int npt, DDXPointPtr ppt); -extern _X_EXPORT Bool glamor_poly_lines_nf(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points); +extern _X_EXPORT Bool glamor_poly_lines_nf(DrawablePtr drawable, GCPtr gc, + int mode, int n, DDXPointPtr points); -extern _X_EXPORT XF86VideoAdaptorPtr glamor_xv_init(ScreenPtr pScreen, int num_texture_ports); +#if 0 +extern _X_EXPORT XF86VideoAdaptorPtr glamor_xv_init(ScreenPtr pScreen, + int num_texture_ports); +#endif -#endif /* GLAMOR_H */ +#endif /* GLAMOR_H */ diff --git a/xorg-server/glamor/glamor_addtraps.c b/xorg-server/glamor/glamor_addtraps.c index ac852963c..655d87e3d 100644 --- a/xorg-server/glamor/glamor_addtraps.c +++ b/xorg-server/glamor/glamor_addtraps.c @@ -30,36 +30,32 @@ static Bool _glamor_add_traps(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps, - Bool fallback) + INT16 x_off, + INT16 y_off, int ntrap, xTrap *traps, Bool fallback) { - if (!fallback - && ( !pPicture->pDrawable - || glamor_ddx_fallback_check_pixmap(pPicture->pDrawable))) - return FALSE; + if (!fallback + && (!pPicture->pDrawable + || glamor_ddx_fallback_check_pixmap(pPicture->pDrawable))) + return FALSE; - if (glamor_prepare_access_picture(pPicture, GLAMOR_ACCESS_RW)) { - fbAddTraps(pPicture, x_off, y_off, ntrap, traps); - glamor_finish_access_picture(pPicture, GLAMOR_ACCESS_RW); - } + if (glamor_prepare_access_picture(pPicture, GLAMOR_ACCESS_RW)) { + fbAddTraps(pPicture, x_off, y_off, ntrap, traps); + glamor_finish_access_picture(pPicture, GLAMOR_ACCESS_RW); + } - return TRUE; + return TRUE; } void glamor_add_traps(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps) + INT16 x_off, INT16 y_off, int ntrap, xTrap *traps) { - _glamor_add_traps(pPicture, x_off, y_off, ntrap, traps, TRUE); + _glamor_add_traps(pPicture, x_off, y_off, ntrap, traps, TRUE); } Bool glamor_add_traps_nf(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps) + INT16 x_off, INT16 y_off, int ntrap, xTrap *traps) { - return _glamor_add_traps(pPicture, x_off, y_off, ntrap, traps, FALSE); + return _glamor_add_traps(pPicture, x_off, y_off, ntrap, traps, FALSE); } - diff --git a/xorg-server/glamor/glamor_compositerects.c b/xorg-server/glamor/glamor_compositerects.c index 1a5769958..3b6b2ed07 100644 --- a/xorg-server/glamor/glamor_compositerects.c +++ b/xorg-server/glamor/glamor_compositerects.c @@ -36,243 +36,241 @@ * compositeRects acceleration implementation */ -static int16_t bound(int16_t a, uint16_t b) +static int16_t +bound(int16_t a, uint16_t b) { - int v = (int)a + (int)b; - if (v > MAXSHORT) - return MAXSHORT; - return v; + int v = (int) a + (int) b; + + if (v > MAXSHORT) + return MAXSHORT; + return v; } static Bool -_pixman_region_init_clipped_rectangles(pixman_region16_t *region, - unsigned int num_rects, - xRectangle *rects, - int tx, int ty, - BoxPtr extents) +_pixman_region_init_clipped_rectangles(pixman_region16_t * region, + unsigned int num_rects, + xRectangle *rects, + int tx, int ty, BoxPtr extents) { - pixman_box16_t stack_boxes[64], *boxes = stack_boxes; - pixman_bool_t ret; - unsigned int i, j; - - if (num_rects > ARRAY_SIZE(stack_boxes)) { - boxes = malloc(sizeof(pixman_box16_t) * num_rects); - if (boxes == NULL) - return FALSE; - } - - for (i = j = 0; i < num_rects; i++) { - boxes[j].x1 = rects[i].x + tx; - if (boxes[j].x1 < extents->x1) - boxes[j].x1 = extents->x1; - - boxes[j].y1 = rects[i].y + ty; - if (boxes[j].y1 < extents->y1) - boxes[j].y1 = extents->y1; - - boxes[j].x2 = bound(rects[i].x + tx, rects[i].width); - if (boxes[j].x2 > extents->x2) - boxes[j].x2 = extents->x2; - - boxes[j].y2 = bound(rects[i].y + ty, rects[i].height); - if (boxes[j].y2 > extents->y2) - boxes[j].y2 = extents->y2; - - if (boxes[j].x2 > boxes[j].x1 && boxes[j].y2 > boxes[j].y1) - j++; - } - - ret = FALSE; - if (j) - ret = pixman_region_init_rects(region, boxes, j); - - if (boxes != stack_boxes) - free(boxes); - - DEBUGF("%s: nrects=%d, region=(%d, %d), (%d, %d) x %d\n", - __FUNCTION__, num_rects, - region->extents.x1, region->extents.y1, - region->extents.x2, region->extents.y2, - j); - return ret; + pixman_box16_t stack_boxes[64], *boxes = stack_boxes; + pixman_bool_t ret; + unsigned int i, j; + + if (num_rects > ARRAY_SIZE(stack_boxes)) { + boxes = malloc(sizeof(pixman_box16_t) * num_rects); + if (boxes == NULL) + return FALSE; + } + + for (i = j = 0; i < num_rects; i++) { + boxes[j].x1 = rects[i].x + tx; + if (boxes[j].x1 < extents->x1) + boxes[j].x1 = extents->x1; + + boxes[j].y1 = rects[i].y + ty; + if (boxes[j].y1 < extents->y1) + boxes[j].y1 = extents->y1; + + boxes[j].x2 = bound(rects[i].x + tx, rects[i].width); + if (boxes[j].x2 > extents->x2) + boxes[j].x2 = extents->x2; + + boxes[j].y2 = bound(rects[i].y + ty, rects[i].height); + if (boxes[j].y2 > extents->y2) + boxes[j].y2 = extents->y2; + + if (boxes[j].x2 > boxes[j].x1 && boxes[j].y2 > boxes[j].y1) + j++; + } + + ret = FALSE; + if (j) + ret = pixman_region_init_rects(region, boxes, j); + + if (boxes != stack_boxes) + free(boxes); + + DEBUGF("%s: nrects=%d, region=(%d, %d), (%d, %d) x %d\n", + __FUNCTION__, num_rects, + region->extents.x1, region->extents.y1, + region->extents.x2, region->extents.y2, j); + return ret; } - void -glamor_composite_rectangles(CARD8 op, - PicturePtr dst, - xRenderColor *color, - int num_rects, - xRectangle *rects) +glamor_composite_rectangles(CARD8 op, + PicturePtr dst, + xRenderColor * color, + int num_rects, xRectangle *rects) { - PixmapPtr pixmap; - struct glamor_pixmap_private *priv; - pixman_region16_t region; - pixman_box16_t *boxes; - int dst_x, dst_y; - int num_boxes; - PicturePtr source = NULL; - Bool need_free_region = FALSE; - - DEBUGF("%s(op=%d, %08x x %d [(%d, %d)x(%d, %d) ...])\n", - __FUNCTION__, op, - (color->alpha >> 8 << 24) | - (color->red >> 8 << 16) | - (color->green >> 8 << 8) | - (color->blue >> 8 << 0), - num_rects, - rects[0].x, rects[0].y, rects[0].width, rects[0].height); - - if (!num_rects) - return; - - if (region_is_empty(dst->pCompositeClip)) { - DEBUGF("%s: empty clip, skipping\n", __FUNCTION__); - return; - } - - if ((color->red|color->green|color->blue|color->alpha) <= 0x00ff) { - switch (op) { - case PictOpOver: - case PictOpOutReverse: - case PictOpAdd: - return; - case PictOpInReverse: - case PictOpSrc: - op = PictOpClear; - break; - case PictOpAtopReverse: - op = PictOpOut; - break; - case PictOpXor: - op = PictOpOverReverse; - break; - } - } - if (color->alpha <= 0x00ff) { - switch (op) { - case PictOpOver: - case PictOpOutReverse: - return; - case PictOpInReverse: - op = PictOpClear; - break; - case PictOpAtopReverse: - op = PictOpOut; - break; - case PictOpXor: - op = PictOpOverReverse; - break; - } - } else if (color->alpha >= 0xff00) { - switch (op) { - case PictOpOver: - op = PictOpSrc; - break; - case PictOpInReverse: - return; - case PictOpOutReverse: - op = PictOpClear; - break; - case PictOpAtopReverse: - op = PictOpOverReverse; - break; - case PictOpXor: - op = PictOpOut; - break; - } - } - DEBUGF("%s: converted to op %d\n", __FUNCTION__, op); - - if (!_pixman_region_init_clipped_rectangles(®ion, - num_rects, rects, - dst->pDrawable->x, - dst->pDrawable->y, - &dst->pCompositeClip->extents)) - { - DEBUGF("%s: allocation failed for region\n", __FUNCTION__); - return; - } - - pixmap = glamor_get_drawable_pixmap(dst->pDrawable); - priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv)) - goto fallback; - if (dst->alphaMap) { - DEBUGF("%s: fallback, dst has an alpha-map\n", __FUNCTION__); - goto fallback; - } - - need_free_region = TRUE; - - DEBUGF("%s: drawable extents (%d, %d),(%d, %d) x %d\n", - __FUNCTION__, - RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, - RegionExtents(®ion)->x2, RegionExtents(®ion)->y2, - RegionNumRects(®ion)); - - if (dst->pCompositeClip->data && - (!pixman_region_intersect(®ion, ®ion, dst->pCompositeClip) || - region_is_empty(®ion))) { - DEBUGF("%s: zero-intersection between rectangles and clip\n", - __FUNCTION__); - pixman_region_fini(®ion); - return; - } - - DEBUGF("%s: clipped extents (%d, %d),(%d, %d) x %d\n", - __FUNCTION__, - RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, - RegionExtents(®ion)->x2, RegionExtents(®ion)->y2, - RegionNumRects(®ion)); - - glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y); - pixman_region_translate(®ion, dst_x, dst_y); - - DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n", - __FUNCTION__, dst_x, dst_y, - RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, - RegionExtents(®ion)->x2, RegionExtents(®ion)->y2); - - - boxes = pixman_region_rectangles(®ion, &num_boxes); - if (op == PictOpSrc || op == PictOpClear) { - CARD32 pixel; - if (op == PictOpClear) - pixel = 0; - else - miRenderColorToPixel(dst->pFormat, color, &pixel); - glamor_solid_boxes(pixmap, boxes, num_boxes, pixel); - - goto done; - } else { - if (likely(priv->type != GLAMOR_TEXTURE_LARGE)) { - int error; - - source = CreateSolidPicture(0, color, &error); - if (!source) - goto done; - if (glamor_composite_clipped_region(op, source, - NULL, dst, - NULL, NULL, priv, - ®ion, - 0,0,0,0,0,0)) - goto done; - } - } -fallback: - miCompositeRects(op, dst, color, num_rects, rects); -done: - /* XXX xserver-1.8: CompositeRects is not tracked by Damage, so we must - * manually append the damaged regions ourselves. - */ - DamageRegionAppend(&pixmap->drawable, ®ion); - DamageRegionProcessPending(&pixmap->drawable); - - if (need_free_region) - pixman_region_fini(®ion); - if (source) - FreePicture(source, 0); - return; + PixmapPtr pixmap; + struct glamor_pixmap_private *priv; + pixman_region16_t region; + pixman_box16_t *boxes; + int dst_x, dst_y; + int num_boxes; + PicturePtr source = NULL; + Bool need_free_region = FALSE; + + DEBUGF("%s(op=%d, %08x x %d [(%d, %d)x(%d, %d) ...])\n", + __FUNCTION__, op, + (color->alpha >> 8 << 24) | + (color->red >> 8 << 16) | + (color->green >> 8 << 8) | + (color->blue >> 8 << 0), + num_rects, rects[0].x, rects[0].y, rects[0].width, rects[0].height); + + if (!num_rects) + return; + + if (RegionNil(dst->pCompositeClip)) { + DEBUGF("%s: empty clip, skipping\n", __FUNCTION__); + return; + } + + if ((color->red | color->green | color->blue | color->alpha) <= 0x00ff) { + switch (op) { + case PictOpOver: + case PictOpOutReverse: + case PictOpAdd: + return; + case PictOpInReverse: + case PictOpSrc: + op = PictOpClear; + break; + case PictOpAtopReverse: + op = PictOpOut; + break; + case PictOpXor: + op = PictOpOverReverse; + break; + } + } + if (color->alpha <= 0x00ff) { + switch (op) { + case PictOpOver: + case PictOpOutReverse: + return; + case PictOpInReverse: + op = PictOpClear; + break; + case PictOpAtopReverse: + op = PictOpOut; + break; + case PictOpXor: + op = PictOpOverReverse; + break; + } + } + else if (color->alpha >= 0xff00) { + switch (op) { + case PictOpOver: + op = PictOpSrc; + break; + case PictOpInReverse: + return; + case PictOpOutReverse: + op = PictOpClear; + break; + case PictOpAtopReverse: + op = PictOpOverReverse; + break; + case PictOpXor: + op = PictOpOut; + break; + } + } + DEBUGF("%s: converted to op %d\n", __FUNCTION__, op); + + if (!_pixman_region_init_clipped_rectangles(®ion, + num_rects, rects, + dst->pDrawable->x, + dst->pDrawable->y, + &dst->pCompositeClip->extents)) + { + DEBUGF("%s: allocation failed for region\n", __FUNCTION__); + return; + } + + pixmap = glamor_get_drawable_pixmap(dst->pDrawable); + priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(priv)) + goto fallback; + if (dst->alphaMap) { + DEBUGF("%s: fallback, dst has an alpha-map\n", __FUNCTION__); + goto fallback; + } + + need_free_region = TRUE; + + DEBUGF("%s: drawable extents (%d, %d),(%d, %d) x %d\n", + __FUNCTION__, + RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, + RegionExtents(®ion)->x2, RegionExtents(®ion)->y2, + RegionNumRects(®ion)); + + if (dst->pCompositeClip->data && + (!pixman_region_intersect(®ion, ®ion, dst->pCompositeClip) || + RegionNil(®ion))) { + DEBUGF("%s: zero-intersection between rectangles and clip\n", + __FUNCTION__); + pixman_region_fini(®ion); + return; + } + + DEBUGF("%s: clipped extents (%d, %d),(%d, %d) x %d\n", + __FUNCTION__, + RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, + RegionExtents(®ion)->x2, RegionExtents(®ion)->y2, + RegionNumRects(®ion)); + + glamor_get_drawable_deltas(dst->pDrawable, pixmap, &dst_x, &dst_y); + pixman_region_translate(®ion, dst_x, dst_y); + + DEBUGF("%s: pixmap +(%d, %d) extents (%d, %d),(%d, %d)\n", + __FUNCTION__, dst_x, dst_y, + RegionExtents(®ion)->x1, RegionExtents(®ion)->y1, + RegionExtents(®ion)->x2, RegionExtents(®ion)->y2); + + boxes = pixman_region_rectangles(®ion, &num_boxes); + if (op == PictOpSrc || op == PictOpClear) { + CARD32 pixel; + + if (op == PictOpClear) + pixel = 0; + else + miRenderColorToPixel(dst->pFormat, color, &pixel); + glamor_solid_boxes(pixmap, boxes, num_boxes, pixel); + + goto done; + } + else { + if (_X_LIKELY(priv->type != GLAMOR_TEXTURE_LARGE)) { + int error; + + source = CreateSolidPicture(0, color, &error); + if (!source) + goto done; + if (glamor_composite_clipped_region(op, source, + NULL, dst, + NULL, NULL, priv, + ®ion, 0, 0, 0, 0, 0, 0)) + goto done; + } + } + fallback: + miCompositeRects(op, dst, color, num_rects, rects); + done: + /* XXX xserver-1.8: CompositeRects is not tracked by Damage, so we must + * manually append the damaged regions ourselves. + */ + DamageRegionAppend(&pixmap->drawable, ®ion); + DamageRegionProcessPending(&pixmap->drawable); + + if (need_free_region) + pixman_region_fini(®ion); + if (source) + FreePicture(source, 0); + return; } diff --git a/xorg-server/glamor/glamor_copyarea.c b/xorg-server/glamor/glamor_copyarea.c index 4e6f953d2..2735ba0bc 100644 --- a/xorg-server/glamor/glamor_copyarea.c +++ b/xorg-server/glamor/glamor_copyarea.c @@ -34,643 +34,624 @@ #ifndef GLAMOR_GLES2 static Bool glamor_copy_n_to_n_fbo_blit(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, BoxPtr box, int nbox, int dx, int dy) + DrawablePtr dst, + GCPtr gc, BoxPtr box, int nbox, int dx, int dy) { - ScreenPtr screen = dst->pScreen; - PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); - PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); - glamor_pixmap_private *src_pixmap_priv, *dst_pixmap_priv; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - int dst_x_off, dst_y_off, src_x_off, src_y_off, i; - int fbo_x_off, fbo_y_off; - int src_fbo_x_off, src_fbo_y_off; - - if (!glamor_priv->has_fbo_blit) { - glamor_delayed_fallback(screen, - "no EXT_framebuffer_blit\n"); - return FALSE; - } - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); - - if (gc) { - if (gc->alu != GXcopy) { - glamor_delayed_fallback(screen, "non-copy ALU\n"); - return FALSE; - } - } - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv)) { - glamor_delayed_fallback(screen, "no src fbo\n"); - return FALSE; - } - - if (glamor_set_destination_pixmap(dst_pixmap)) - return FALSE; - - pixmap_priv_get_fbo_off(dst_pixmap_priv, &fbo_x_off, &fbo_y_off); - pixmap_priv_get_fbo_off(src_pixmap_priv, &src_fbo_x_off, &src_fbo_y_off); - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, - src_pixmap_priv->base.fbo->fb); - glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, - &dst_y_off); - glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, - &src_y_off); - dst_x_off += fbo_x_off; - dst_y_off += fbo_y_off; - src_y_off += dy + src_fbo_y_off; - src_x_off += src_fbo_x_off; - - for (i = 0; i < nbox; i++) { - if (glamor_priv->yInverted) { - dispatch->glBlitFramebuffer((box[i].x1 + dx + - src_x_off), - (box[i].y1 + - src_y_off), - (box[i].x2 + dx + - src_x_off), - (box[i].y2 + - src_y_off), - (box[i].x1 + - dst_x_off), - (box[i].y1 + - dst_y_off), - (box[i].x2 + - dst_x_off), - (box[i].y2 + - dst_y_off), - GL_COLOR_BUFFER_BIT, - GL_NEAREST); - } else { - int flip_dst_y1 = - dst_pixmap->drawable.height - (box[i].y2 + - dst_y_off); - int flip_dst_y2 = - dst_pixmap->drawable.height - (box[i].y1 + - dst_y_off); - int flip_src_y1 = - src_pixmap->drawable.height - (box[i].y2 + - src_y_off); - int flip_src_y2 = - src_pixmap->drawable.height - (box[i].y1 + - src_y_off); - - dispatch->glBlitFramebuffer(box[i].x1 + dx + - src_x_off, - flip_src_y1, - box[i].x2 + dx + - src_x_off, - flip_src_y2, - box[i].x1 + - dst_x_off, - flip_dst_y1, - box[i].x2 + - dst_x_off, - flip_dst_y2, - GL_COLOR_BUFFER_BIT, - GL_NEAREST); - } - } - glamor_put_dispatch(glamor_priv); - glamor_priv->state = BLIT_STATE; - return TRUE; + ScreenPtr screen = dst->pScreen; + PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); + PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); + glamor_pixmap_private *src_pixmap_priv, *dst_pixmap_priv; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + int dst_x_off, dst_y_off, src_x_off, src_y_off, i; + int fbo_x_off, fbo_y_off; + int src_fbo_x_off, src_fbo_y_off; + + if (!glamor_priv->has_fbo_blit) { + glamor_delayed_fallback(screen, "no EXT_framebuffer_blit\n"); + return FALSE; + } + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); + + if (gc) { + if (gc->alu != GXcopy) { + glamor_delayed_fallback(screen, "non-copy ALU\n"); + return FALSE; + } + } + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv)) { + glamor_delayed_fallback(screen, "no src fbo\n"); + return FALSE; + } + + if (glamor_set_destination_pixmap(dst_pixmap)) + return FALSE; + + pixmap_priv_get_fbo_off(dst_pixmap_priv, &fbo_x_off, &fbo_y_off); + pixmap_priv_get_fbo_off(src_pixmap_priv, &src_fbo_x_off, &src_fbo_y_off); + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glBindFramebuffer(GL_READ_FRAMEBUFFER_EXT, + src_pixmap_priv->base.fbo->fb); + glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); + glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); + dst_x_off += fbo_x_off; + dst_y_off += fbo_y_off; + src_y_off += dy + src_fbo_y_off; + src_x_off += src_fbo_x_off; + + for (i = 0; i < nbox; i++) { + if (glamor_priv->yInverted) { + dispatch->glBlitFramebuffer((box[i].x1 + dx + + src_x_off), + (box[i].y1 + + src_y_off), + (box[i].x2 + dx + + src_x_off), + (box[i].y2 + + src_y_off), + (box[i].x1 + + dst_x_off), + (box[i].y1 + + dst_y_off), + (box[i].x2 + + dst_x_off), + (box[i].y2 + + dst_y_off), + GL_COLOR_BUFFER_BIT, GL_NEAREST); + } + else { + int flip_dst_y1 = + dst_pixmap->drawable.height - (box[i].y2 + dst_y_off); + int flip_dst_y2 = + dst_pixmap->drawable.height - (box[i].y1 + dst_y_off); + int flip_src_y1 = + src_pixmap->drawable.height - (box[i].y2 + src_y_off); + int flip_src_y2 = + src_pixmap->drawable.height - (box[i].y1 + src_y_off); + + dispatch->glBlitFramebuffer(box[i].x1 + dx + + src_x_off, + flip_src_y1, + box[i].x2 + dx + + src_x_off, + flip_src_y2, + box[i].x1 + + dst_x_off, + flip_dst_y1, + box[i].x2 + + dst_x_off, + flip_dst_y2, + GL_COLOR_BUFFER_BIT, GL_NEAREST); + } + } + glamor_put_dispatch(glamor_priv); + glamor_priv->state = BLIT_STATE; + return TRUE; } #endif static Bool glamor_copy_n_to_n_textured(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, BoxPtr box, int nbox, int dx, int dy) + DrawablePtr dst, + GCPtr gc, BoxPtr box, int nbox, int dx, int dy) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(dst->pScreen); - glamor_gl_dispatch *dispatch; - PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); - PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); - int i; - float vertices[8], texcoords[8]; - glamor_pixmap_private *src_pixmap_priv; - glamor_pixmap_private *dst_pixmap_priv; - int src_x_off, src_y_off, dst_x_off, dst_y_off; - enum glamor_pixmap_status src_status = GLAMOR_NONE; - GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; - - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); - - if (!src_pixmap_priv->base.gl_fbo) { + glamor_screen_private *glamor_priv = + glamor_get_screen_private(dst->pScreen); + glamor_gl_dispatch *dispatch; + PixmapPtr src_pixmap = glamor_get_drawable_pixmap(src); + PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(dst); + int i; + float vertices[8], texcoords[8]; + glamor_pixmap_private *src_pixmap_priv; + glamor_pixmap_private *dst_pixmap_priv; + int src_x_off, src_y_off, dst_x_off, dst_y_off; + enum glamor_pixmap_status src_status = GLAMOR_NONE; + GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; + + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); + + if (!src_pixmap_priv->base.gl_fbo) { #ifndef GLAMOR_PIXMAP_DYNAMIC_UPLOAD - glamor_delayed_fallback(dst->pScreen, "src has no fbo.\n"); - return FALSE; + glamor_delayed_fallback(dst->pScreen, "src has no fbo.\n"); + return FALSE; #else - src_status = glamor_upload_pixmap_to_texture(src_pixmap); - if (src_status != GLAMOR_UPLOAD_DONE) - return FALSE; + src_status = glamor_upload_pixmap_to_texture(src_pixmap); + if (src_status != GLAMOR_UPLOAD_DONE) + return FALSE; - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); #endif - } + } + pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); + pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale); - pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); - pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale); + glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); - glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, - &dst_y_off); + dispatch = glamor_get_dispatch(glamor_priv); - dispatch = glamor_get_dispatch(glamor_priv); + glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); + dx += src_x_off; + dy += src_y_off; - glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - - glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, - &src_y_off); - dx += src_x_off; - dy += src_y_off; - - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glBindTexture(GL_TEXTURE_2D, - src_pixmap_priv->base.fbo->tex); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->base.fbo->tex); #ifndef GLAMOR_GLES2 - dispatch->glEnable(GL_TEXTURE_2D); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_BORDER); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_BORDER); + dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); #endif - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, - GL_FLOAT, GL_FALSE, - 2 * sizeof(float), - texcoords); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(glamor_priv->finish_access_prog[0]); - dispatch->glUniform1i(glamor_priv->finish_access_revert[0], - REVERT_NONE); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[0], - SWAP_NONE_UPLOADING); - - for (i = 0; i < nbox; i++) { - - glamor_set_normalize_vcoords(dst_pixmap_priv, - dst_xscale, dst_yscale, - box[i].x1 + dst_x_off, - box[i].y1 + dst_y_off, - box[i].x2 + dst_x_off, - box[i].y2 + dst_y_off, - glamor_priv->yInverted, - vertices); - - glamor_set_normalize_tcoords(src_pixmap_priv, - src_xscale, - src_yscale, - box[i].x1 + dx, - box[i].y1 + dy, - box[i].x2 + dx, - box[i].y2 + dy, - glamor_priv->yInverted, - texcoords); - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - } - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, + GL_FLOAT, GL_FALSE, + 2 * sizeof(float), texcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(glamor_priv->finish_access_prog[0]); + dispatch->glUniform1i(glamor_priv->finish_access_revert[0], REVERT_NONE); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[0], + SWAP_NONE_UPLOADING); + + for (i = 0; i < nbox; i++) { + + glamor_set_normalize_vcoords(dst_pixmap_priv, + dst_xscale, dst_yscale, + box[i].x1 + dst_x_off, + box[i].y1 + dst_y_off, + box[i].x2 + dst_x_off, + box[i].y2 + dst_y_off, + glamor_priv->yInverted, vertices); + + glamor_set_normalize_tcoords(src_pixmap_priv, + src_xscale, + src_yscale, + box[i].x1 + dx, + box[i].y1 + dy, + box[i].x2 + dx, + box[i].y2 + dy, + glamor_priv->yInverted, texcoords); + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + } + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); #ifndef GLAMOR_GLES2 - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glDisable(GL_TEXTURE_2D); #endif - dispatch->glUseProgram(0); - /* The source texture is bound to a fbo, we have to flush it here. */ - glamor_put_dispatch(glamor_priv); - glamor_priv->state = RENDER_STATE; - glamor_priv->render_idle_cnt = 0; - return TRUE; + dispatch->glUseProgram(0); + /* The source texture is bound to a fbo, we have to flush it here. */ + glamor_put_dispatch(glamor_priv); + glamor_priv->state = RENDER_STATE; + glamor_priv->render_idle_cnt = 0; + return TRUE; } static Bool __glamor_copy_n_to_n(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure) + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, Pixel bitplane, void *closure) { - PixmapPtr dst_pixmap, src_pixmap, temp_pixmap = NULL; - DrawablePtr temp_src = src; - glamor_pixmap_private *dst_pixmap_priv, *src_pixmap_priv; - glamor_screen_private *glamor_priv; - BoxRec bound; - ScreenPtr screen; - int temp_dx = dx; - int temp_dy = dy; - int src_x_off, src_y_off, dst_x_off, dst_y_off; - int i; - int overlaped = 0; - Bool ret = FALSE; - - dst_pixmap = glamor_get_drawable_pixmap(dst); - dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); - src_pixmap = glamor_get_drawable_pixmap(src); - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - screen = dst_pixmap->drawable.pScreen; - glamor_priv = glamor_get_screen_private(dst->pScreen); - glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, - &src_y_off); - - glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, - &dst_y_off); - - if (src_pixmap_priv->base.fbo - && src_pixmap_priv->base.fbo->fb == dst_pixmap_priv->base.fbo->fb) { - int x_shift = abs(src_x_off - dx - dst_x_off); - int y_shift = abs(src_y_off - dy - dst_y_off); - for (i = 0; i < nbox; i++) { - if (x_shift < abs(box[i].x2 - box[i].x1) - && y_shift < abs(box[i].y2 - box[i].y1)) { - overlaped = 1; - break; - } - } - } - DEBUGF("Copy %d %d %dx%d dx %d dy %d from %p to %p \n", - box[0].x1, box[0].y1, - box[0].x2 - box[0].x1, box[0].y2 - box[0].y1, - dx, dy, - src_pixmap, dst_pixmap); + PixmapPtr dst_pixmap, src_pixmap, temp_pixmap = NULL; + DrawablePtr temp_src = src; + glamor_pixmap_private *dst_pixmap_priv, *src_pixmap_priv; + glamor_screen_private *glamor_priv; + BoxRec bound; + ScreenPtr screen; + int temp_dx = dx; + int temp_dy = dy; + int src_x_off, src_y_off, dst_x_off, dst_y_off; + int i; + int overlaped = 0; + Bool ret = FALSE; + + dst_pixmap = glamor_get_drawable_pixmap(dst); + dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); + src_pixmap = glamor_get_drawable_pixmap(src); + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + screen = dst_pixmap->drawable.pScreen; + glamor_priv = glamor_get_screen_private(dst->pScreen); + glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); + + glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); + + if (src_pixmap_priv->base.fbo + && src_pixmap_priv->base.fbo->fb == dst_pixmap_priv->base.fbo->fb) { + int x_shift = abs(src_x_off - dx - dst_x_off); + int y_shift = abs(src_y_off - dy - dst_y_off); + + for (i = 0; i < nbox; i++) { + if (x_shift < abs(box[i].x2 - box[i].x1) + && y_shift < abs(box[i].y2 - box[i].y1)) { + overlaped = 1; + break; + } + } + } + DEBUGF("Copy %d %d %dx%d dx %d dy %d from %p to %p \n", + box[0].x1, box[0].y1, + box[0].x2 - box[0].x1, box[0].y2 - box[0].y1, + dx, dy, src_pixmap, dst_pixmap); #ifndef GLAMOR_GLES2 - if (!overlaped && - (glamor_priv->state != RENDER_STATE - || !src_pixmap_priv->base.gl_tex || !dst_pixmap_priv->base.gl_tex) - && glamor_copy_n_to_n_fbo_blit(src, dst, gc, box, nbox, dx, - dy)) { - ret = TRUE; - goto done; - } + if (!overlaped && + (glamor_priv->state != RENDER_STATE + || !src_pixmap_priv->base.gl_tex || !dst_pixmap_priv->base.gl_tex) + && glamor_copy_n_to_n_fbo_blit(src, dst, gc, box, nbox, dx, dy)) { + ret = TRUE; + goto done; + } #endif - glamor_calculate_boxes_bound(&bound, box, nbox); - - /* Overlaped indicate the src and dst are the same pixmap. */ - if (overlaped || (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv) - && (((bound.x2 - bound.x1) * (bound.y2 - bound.y1) - * 4 > - src_pixmap->drawable.width * - src_pixmap->drawable.height) - || !(glamor_check_fbo_size(glamor_priv, - src_pixmap->drawable.width, - src_pixmap->drawable.height))))) { - - temp_pixmap = glamor_create_pixmap(screen, - bound.x2 - bound.x1, - bound.y2 - bound.y1, - src_pixmap-> - drawable.depth, - overlaped ? 0 : - GLAMOR_CREATE_PIXMAP_CPU); - assert(bound.x2 - bound.x1 <= glamor_priv->max_fbo_size); - assert(bound.y2 - bound.y1 <= glamor_priv->max_fbo_size); - if (!temp_pixmap) - goto done; - glamor_translate_boxes(box, nbox, -bound.x1, -bound.y1); - temp_src = &temp_pixmap->drawable; - - if (overlaped) - glamor_copy_n_to_n_textured(src, temp_src, gc, box, - nbox, - temp_dx + bound.x1, - temp_dy + bound.y1); - else - fbCopyNtoN(src, temp_src, gc, box, nbox, - temp_dx + bound.x1, temp_dy + bound.y1, - reverse, upsidedown, bitplane, closure); - glamor_translate_boxes(box, nbox, bound.x1, bound.y1); - temp_dx = -bound.x1; - temp_dy = -bound.y1; - } else { - temp_dx = dx; - temp_dy = dy; - temp_src = src; - } - - if (glamor_copy_n_to_n_textured - (temp_src, dst, gc, box, nbox, temp_dx, temp_dy)) { - ret = TRUE; - } -done: - if (temp_src != src) - glamor_destroy_pixmap(temp_pixmap); - return ret; + glamor_calculate_boxes_bound(&bound, box, nbox); + + /* Overlaped indicate the src and dst are the same pixmap. */ + if (overlaped || (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv) + && (((bound.x2 - bound.x1) * (bound.y2 - bound.y1) + * 4 > + src_pixmap->drawable.width * + src_pixmap->drawable.height) + || !(glamor_check_fbo_size(glamor_priv, + src_pixmap->drawable.width, + src_pixmap->drawable. + height))))) { + + temp_pixmap = glamor_create_pixmap(screen, + bound.x2 - bound.x1, + bound.y2 - bound.y1, + src_pixmap->drawable.depth, + overlaped ? 0 : + GLAMOR_CREATE_PIXMAP_CPU); + assert(bound.x2 - bound.x1 <= glamor_priv->max_fbo_size); + assert(bound.y2 - bound.y1 <= glamor_priv->max_fbo_size); + if (!temp_pixmap) + goto done; + glamor_translate_boxes(box, nbox, -bound.x1, -bound.y1); + temp_src = &temp_pixmap->drawable; + + if (overlaped) + glamor_copy_n_to_n_textured(src, temp_src, gc, box, + nbox, + temp_dx + bound.x1, temp_dy + bound.y1); + else + fbCopyNtoN(src, temp_src, gc, box, nbox, + temp_dx + bound.x1, temp_dy + bound.y1, + reverse, upsidedown, bitplane, closure); + glamor_translate_boxes(box, nbox, bound.x1, bound.y1); + temp_dx = -bound.x1; + temp_dy = -bound.y1; + } + else { + temp_dx = dx; + temp_dy = dy; + temp_src = src; + } + + if (glamor_copy_n_to_n_textured + (temp_src, dst, gc, box, nbox, temp_dx, temp_dy)) { + ret = TRUE; + } + done: + if (temp_src != src) + glamor_destroy_pixmap(temp_pixmap); + return ret; } static Bool _glamor_copy_n_to_n(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure, Bool fallback) + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, Pixel bitplane, + void *closure, Bool fallback) { - PixmapPtr dst_pixmap, src_pixmap; - glamor_pixmap_private *dst_pixmap_priv, *src_pixmap_priv; - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - BoxPtr extent; - RegionRec region; - int src_x_off, src_y_off, dst_x_off, dst_y_off; - Bool ok = FALSE; - int force_clip = 0; - - if (nbox == 0) - return TRUE; - dst_pixmap = glamor_get_drawable_pixmap(dst); - dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); - src_pixmap = glamor_get_drawable_pixmap(src); - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - - glamor_priv = glamor_get_screen_private(dst->pScreen); - - DEBUGF("Copy %d %d %dx%d dx %d dy %d from %p to %p \n", - box[0].x1, box[0].y1, - box[0].x2 - box[0].x1, box[0].y2 - box[0].y1, - dx, dy, - src_pixmap, dst_pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) - goto fall_back; - - if (gc) { - if (!glamor_set_planemask(dst_pixmap, gc->planemask)) - goto fall_back; - dispatch = glamor_get_dispatch(glamor_priv); - if (!glamor_set_alu(dispatch, gc->alu)) { - glamor_put_dispatch(glamor_priv); - goto fail; - } - glamor_put_dispatch(glamor_priv); - } - - if (!src_pixmap_priv) { - glamor_set_pixmap_type(src_pixmap, GLAMOR_MEMORY); - src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); - } - - glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, - &src_y_off); - glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, - &dst_y_off); - - RegionInitBoxes(®ion, box, nbox); - extent = RegionExtents(®ion); - - if (!glamor_check_fbo_size(glamor_priv, - extent->x2 - extent->x1, extent->y2 - extent->y1) - && (src_pixmap_priv->type == GLAMOR_MEMORY - || (src_pixmap_priv == dst_pixmap_priv))) { - force_clip = 1; - } - - if (force_clip || dst_pixmap_priv->type == GLAMOR_TEXTURE_LARGE - || src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - glamor_pixmap_clipped_regions *clipped_dst_regions; - int n_dst_region, i, j; - PixmapPtr temp_source_pixmap; - glamor_pixmap_private *temp_source_priv = NULL; - - RegionTranslate(®ion, dst_x_off, dst_y_off); - if (!force_clip) - clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv, - ®ion, &n_dst_region, 0, - reverse, upsidedown); - else - clipped_dst_regions = glamor_compute_clipped_regions_ext(dst_pixmap_priv, - ®ion, &n_dst_region, - glamor_priv->max_fbo_size, - glamor_priv->max_fbo_size, - reverse, upsidedown); - for(i = 0; i < n_dst_region; i++) - { - int n_src_region; - glamor_pixmap_clipped_regions *clipped_src_regions; - BoxPtr current_boxes; - int n_current_boxes; - - SET_PIXMAP_FBO_CURRENT(dst_pixmap_priv, clipped_dst_regions[i].block_idx); - - temp_source_pixmap = NULL; - if (src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - RegionTranslate(clipped_dst_regions[i].region, - -dst_x_off + src_x_off + dx, -dst_y_off + src_y_off + dy); - clipped_src_regions = glamor_compute_clipped_regions(src_pixmap_priv, - clipped_dst_regions[i].region, - &n_src_region, 0, - reverse, upsidedown); - DEBUGF("Source is large pixmap.\n"); - for (j = 0; j < n_src_region; j++) - { - if (src_pixmap_priv != dst_pixmap_priv) - SET_PIXMAP_FBO_CURRENT(src_pixmap_priv, clipped_src_regions[j].block_idx); - else if (src_pixmap_priv == dst_pixmap_priv && - clipped_src_regions[j].block_idx != clipped_dst_regions[i].block_idx) { - /* source and the dest are the same, but need different block_idx. - * we create a empty pixmap and fill the required source fbo and box to - * it. It's a little hacky, but avoid extra copy. */ - temp_source_pixmap = glamor_create_pixmap(src->pScreen, 0, 0, - src->depth, 0); - if (!temp_source_pixmap) { - ok = FALSE; - goto fail; - } - src->pScreen->ModifyPixmapHeader(temp_source_pixmap, - src_pixmap->drawable.width, - src_pixmap->drawable.height, - 0, 0, src_pixmap->devKind, NULL); - temp_source_priv = glamor_get_pixmap_private(temp_source_pixmap); - *temp_source_priv = *src_pixmap_priv; - temp_source_priv->large.box = src_pixmap_priv->large.box_array[clipped_src_regions[j].block_idx]; - temp_source_priv->base.fbo = src_pixmap_priv->large.fbo_array[clipped_src_regions[j].block_idx]; - temp_source_priv->base.pixmap = temp_source_pixmap; - } - assert(temp_source_pixmap || !(src_pixmap_priv == dst_pixmap_priv - && (clipped_src_regions[j].block_idx != clipped_dst_regions[i].block_idx))); - - RegionTranslate(clipped_src_regions[j].region, - -src_x_off - dx, - -src_y_off - dy); - current_boxes = RegionRects(clipped_src_regions[j].region); - n_current_boxes = RegionNumRects(clipped_src_regions[j].region); - DEBUGF("dst pixmap fbo idx %d src pixmap fbo idx %d \n", - clipped_dst_regions[i].block_idx, - clipped_src_regions[j].block_idx); - DEBUGF("Copy %d %d %d %d dx %d dy %d from %p to %p \n", - current_boxes[0].x1, current_boxes[0].y1, - current_boxes[0].x2, current_boxes[0].y2, - dx, dy, src_pixmap, dst_pixmap); - if (!temp_source_pixmap) - ok = __glamor_copy_n_to_n(src, dst, gc, current_boxes, - n_current_boxes, dx, dy, reverse, - upsidedown, bitplane, closure); - else { - ok = __glamor_copy_n_to_n(&temp_source_pixmap->drawable, - dst, gc, current_boxes, - n_current_boxes, dx, dy, reverse, - upsidedown, bitplane, closure); - temp_source_priv->type = GLAMOR_MEMORY; - temp_source_priv->base.fbo = NULL; - glamor_destroy_pixmap(temp_source_pixmap); - temp_source_pixmap = NULL; - } - - RegionDestroy(clipped_src_regions[j].region); - if (!ok) { - assert(0); - goto fail; - } - } - - if (n_src_region == 0) - ok = TRUE; - free(clipped_src_regions); - } else { - RegionTranslate(clipped_dst_regions[i].region, - - dst_x_off, - - dst_y_off); - current_boxes = RegionRects(clipped_dst_regions[i].region); - n_current_boxes = RegionNumRects(clipped_dst_regions[i].region); - - DEBUGF("dest pixmap fbo idx %d \n", - clipped_dst_regions[i].block_idx); - DEBUGF("Copy %d %d %d %d dx %d dy %d from %p to %p \n", - current_boxes[0].x1, current_boxes[0].y1, - current_boxes[0].x2, current_boxes[0].y2, - dx, dy, src_pixmap, dst_pixmap); - - ok = __glamor_copy_n_to_n(src, dst, gc, current_boxes, - n_current_boxes, dx, dy, reverse, - upsidedown, bitplane, closure); - - } - RegionDestroy(clipped_dst_regions[i].region); - } - if (n_dst_region == 0) - ok = TRUE; - free(clipped_dst_regions); - RegionUninit(®ion); - } else { - ok = __glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, dy, - reverse, upsidedown, bitplane, - closure); - } - -fail: - dispatch = glamor_get_dispatch(glamor_priv); - glamor_set_alu(dispatch, GXcopy); - glamor_put_dispatch(glamor_priv); - - if (ok) - return TRUE; -fall_back: - if (!fallback - && glamor_ddx_fallback_check_pixmap(src) - && glamor_ddx_fallback_check_pixmap(dst)) - goto done; - - if (src_pixmap_priv->type == GLAMOR_DRM_ONLY - || dst_pixmap_priv->type == GLAMOR_DRM_ONLY) { - LogMessage(X_WARNING, - "Access a DRM only pixmap is not allowed within glamor.\n"); - return TRUE; - } - glamor_report_delayed_fallbacks(src->pScreen); - glamor_report_delayed_fallbacks(dst->pScreen); - - glamor_fallback("from %p to %p (%c,%c)\n", src, dst, - glamor_get_drawable_location(src), - glamor_get_drawable_location(dst)); - - if (glamor_prepare_access(dst, GLAMOR_ACCESS_RW)) { - if (dst == src - || glamor_prepare_access(src, GLAMOR_ACCESS_RO)) { - fbCopyNtoN(src, dst, gc, box, nbox, - dx, dy, reverse, upsidedown, bitplane, - closure); - if (dst != src) - glamor_finish_access(src, GLAMOR_ACCESS_RO); - } - glamor_finish_access(dst, GLAMOR_ACCESS_RW); - } - ok = TRUE; - - done: - glamor_clear_delayed_fallbacks(src->pScreen); - glamor_clear_delayed_fallbacks(dst->pScreen); - return ok; + PixmapPtr dst_pixmap, src_pixmap; + glamor_pixmap_private *dst_pixmap_priv, *src_pixmap_priv; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + BoxPtr extent; + RegionRec region; + int src_x_off, src_y_off, dst_x_off, dst_y_off; + Bool ok = FALSE; + int force_clip = 0; + + if (nbox == 0) + return TRUE; + dst_pixmap = glamor_get_drawable_pixmap(dst); + dst_pixmap_priv = glamor_get_pixmap_private(dst_pixmap); + src_pixmap = glamor_get_drawable_pixmap(src); + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + + glamor_priv = glamor_get_screen_private(dst->pScreen); + + DEBUGF("Copy %d %d %dx%d dx %d dy %d from %p to %p \n", + box[0].x1, box[0].y1, + box[0].x2 - box[0].x1, box[0].y2 - box[0].y1, + dx, dy, src_pixmap, dst_pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) + goto fall_back; + + if (gc) { + if (!glamor_set_planemask(dst_pixmap, gc->planemask)) + goto fall_back; + dispatch = glamor_get_dispatch(glamor_priv); + if (!glamor_set_alu(dispatch, gc->alu)) { + glamor_put_dispatch(glamor_priv); + goto fail; + } + glamor_put_dispatch(glamor_priv); + } + + if (!src_pixmap_priv) { + glamor_set_pixmap_type(src_pixmap, GLAMOR_MEMORY); + src_pixmap_priv = glamor_get_pixmap_private(src_pixmap); + } + + glamor_get_drawable_deltas(src, src_pixmap, &src_x_off, &src_y_off); + glamor_get_drawable_deltas(dst, dst_pixmap, &dst_x_off, &dst_y_off); + + RegionInitBoxes(®ion, box, nbox); + extent = RegionExtents(®ion); + + if (!glamor_check_fbo_size(glamor_priv, + extent->x2 - extent->x1, extent->y2 - extent->y1) + && (src_pixmap_priv->type == GLAMOR_MEMORY + || (src_pixmap_priv == dst_pixmap_priv))) { + force_clip = 1; + } + + if (force_clip || dst_pixmap_priv->type == GLAMOR_TEXTURE_LARGE + || src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + glamor_pixmap_clipped_regions *clipped_dst_regions; + int n_dst_region, i, j; + PixmapPtr temp_source_pixmap; + glamor_pixmap_private *temp_source_priv = NULL; + + RegionTranslate(®ion, dst_x_off, dst_y_off); + if (!force_clip) + clipped_dst_regions = + glamor_compute_clipped_regions(dst_pixmap_priv, ®ion, + &n_dst_region, 0, reverse, + upsidedown); + else + clipped_dst_regions = + glamor_compute_clipped_regions_ext(dst_pixmap_priv, ®ion, + &n_dst_region, + glamor_priv->max_fbo_size, + glamor_priv->max_fbo_size, + reverse, upsidedown); + for (i = 0; i < n_dst_region; i++) { + int n_src_region; + glamor_pixmap_clipped_regions *clipped_src_regions; + BoxPtr current_boxes; + int n_current_boxes; + + SET_PIXMAP_FBO_CURRENT(dst_pixmap_priv, + clipped_dst_regions[i].block_idx); + + temp_source_pixmap = NULL; + if (src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + RegionTranslate(clipped_dst_regions[i].region, + -dst_x_off + src_x_off + dx, + -dst_y_off + src_y_off + dy); + clipped_src_regions = + glamor_compute_clipped_regions(src_pixmap_priv, + clipped_dst_regions[i]. + region, &n_src_region, 0, + reverse, upsidedown); + DEBUGF("Source is large pixmap.\n"); + for (j = 0; j < n_src_region; j++) { + if (src_pixmap_priv != dst_pixmap_priv) + SET_PIXMAP_FBO_CURRENT(src_pixmap_priv, + clipped_src_regions[j]. + block_idx); + else if (src_pixmap_priv == dst_pixmap_priv && + clipped_src_regions[j].block_idx != + clipped_dst_regions[i].block_idx) { + /* source and the dest are the same, but need different block_idx. + * we create a empty pixmap and fill the required source fbo and box to + * it. It's a little hacky, but avoid extra copy. */ + temp_source_pixmap = + glamor_create_pixmap(src->pScreen, 0, 0, src->depth, + 0); + if (!temp_source_pixmap) { + ok = FALSE; + goto fail; + } + src->pScreen->ModifyPixmapHeader(temp_source_pixmap, + src_pixmap->drawable. + width, + src_pixmap->drawable. + height, 0, 0, + src_pixmap->devKind, + NULL); + temp_source_priv = + glamor_get_pixmap_private(temp_source_pixmap); + *temp_source_priv = *src_pixmap_priv; + temp_source_priv->large.box = + src_pixmap_priv->large. + box_array[clipped_src_regions[j].block_idx]; + temp_source_priv->base.fbo = + src_pixmap_priv->large. + fbo_array[clipped_src_regions[j].block_idx]; + temp_source_priv->base.pixmap = temp_source_pixmap; + } + assert(temp_source_pixmap || + !(src_pixmap_priv == dst_pixmap_priv && + (clipped_src_regions[j].block_idx != + clipped_dst_regions[i].block_idx))); + + RegionTranslate(clipped_src_regions[j].region, + -src_x_off - dx, -src_y_off - dy); + current_boxes = RegionRects(clipped_src_regions[j].region); + n_current_boxes = + RegionNumRects(clipped_src_regions[j].region); + DEBUGF("dst pixmap fbo idx %d src pixmap fbo idx %d \n", + clipped_dst_regions[i].block_idx, + clipped_src_regions[j].block_idx); + DEBUGF("Copy %d %d %d %d dx %d dy %d from %p to %p \n", + current_boxes[0].x1, current_boxes[0].y1, + current_boxes[0].x2, current_boxes[0].y2, dx, dy, + src_pixmap, dst_pixmap); + if (!temp_source_pixmap) + ok = __glamor_copy_n_to_n(src, dst, gc, current_boxes, + n_current_boxes, dx, dy, + reverse, upsidedown, bitplane, + closure); + else { + ok = __glamor_copy_n_to_n(&temp_source_pixmap->drawable, + dst, gc, current_boxes, + n_current_boxes, dx, dy, + reverse, upsidedown, bitplane, + closure); + temp_source_priv->type = GLAMOR_MEMORY; + temp_source_priv->base.fbo = NULL; + glamor_destroy_pixmap(temp_source_pixmap); + temp_source_pixmap = NULL; + } + + RegionDestroy(clipped_src_regions[j].region); + if (!ok) { + assert(0); + goto fail; + } + } + + if (n_src_region == 0) + ok = TRUE; + free(clipped_src_regions); + } + else { + RegionTranslate(clipped_dst_regions[i].region, + -dst_x_off, -dst_y_off); + current_boxes = RegionRects(clipped_dst_regions[i].region); + n_current_boxes = RegionNumRects(clipped_dst_regions[i].region); + + DEBUGF("dest pixmap fbo idx %d \n", + clipped_dst_regions[i].block_idx); + DEBUGF("Copy %d %d %d %d dx %d dy %d from %p to %p \n", + current_boxes[0].x1, current_boxes[0].y1, + current_boxes[0].x2, current_boxes[0].y2, + dx, dy, src_pixmap, dst_pixmap); + + ok = __glamor_copy_n_to_n(src, dst, gc, current_boxes, + n_current_boxes, dx, dy, reverse, + upsidedown, bitplane, closure); + + } + RegionDestroy(clipped_dst_regions[i].region); + } + if (n_dst_region == 0) + ok = TRUE; + free(clipped_dst_regions); + RegionUninit(®ion); + } + else { + ok = __glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, dy, + reverse, upsidedown, bitplane, closure); + } + + fail: + dispatch = glamor_get_dispatch(glamor_priv); + glamor_set_alu(dispatch, GXcopy); + glamor_put_dispatch(glamor_priv); + + if (ok) + return TRUE; + fall_back: + if (!fallback && glamor_ddx_fallback_check_pixmap(src) + && glamor_ddx_fallback_check_pixmap(dst)) + goto done; + + if (src_pixmap_priv->type == GLAMOR_DRM_ONLY + || dst_pixmap_priv->type == GLAMOR_DRM_ONLY) { + LogMessage(X_WARNING, + "Access a DRM only pixmap is not allowed within glamor.\n"); + return TRUE; + } + glamor_report_delayed_fallbacks(src->pScreen); + glamor_report_delayed_fallbacks(dst->pScreen); + + glamor_fallback("from %p to %p (%c,%c)\n", src, dst, + glamor_get_drawable_location(src), + glamor_get_drawable_location(dst)); + + if (glamor_prepare_access(dst, GLAMOR_ACCESS_RW)) { + if (dst == src || glamor_prepare_access(src, GLAMOR_ACCESS_RO)) { + fbCopyNtoN(src, dst, gc, box, nbox, + dx, dy, reverse, upsidedown, bitplane, closure); + if (dst != src) + glamor_finish_access(src, GLAMOR_ACCESS_RO); + } + glamor_finish_access(dst, GLAMOR_ACCESS_RW); + } + ok = TRUE; + + done: + glamor_clear_delayed_fallbacks(src->pScreen); + glamor_clear_delayed_fallbacks(dst->pScreen); + return ok; } RegionPtr glamor_copy_area(DrawablePtr src, DrawablePtr dst, GCPtr gc, - int srcx, int srcy, int width, int height, int dstx, - int dsty) + int srcx, int srcy, int width, int height, int dstx, int dsty) { - RegionPtr region; - region = miDoCopy(src, dst, gc, - srcx, srcy, width, height, - dstx, dsty, glamor_copy_n_to_n, 0, NULL); + RegionPtr region; - return region; + region = miDoCopy(src, dst, gc, + srcx, srcy, width, height, + dstx, dsty, glamor_copy_n_to_n, 0, NULL); + + return region; } void glamor_copy_n_to_n(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure) + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, Bool upsidedown, Pixel bitplane, void *closure) { - _glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, - dy, reverse, upsidedown, bitplane, closure, TRUE); + _glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, + dy, reverse, upsidedown, bitplane, closure, TRUE); } Bool glamor_copy_n_to_n_nf(DrawablePtr src, - DrawablePtr dst, - GCPtr gc, - BoxPtr box, - int nbox, - int dx, - int dy, - Bool reverse, - Bool upsidedown, Pixel bitplane, - void *closure) + DrawablePtr dst, + GCPtr gc, + BoxPtr box, + int nbox, + int dx, + int dy, + Bool reverse, + Bool upsidedown, Pixel bitplane, void *closure) { - return _glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, - dy, reverse, upsidedown, bitplane, closure, FALSE); + return _glamor_copy_n_to_n(src, dst, gc, box, nbox, dx, + dy, reverse, upsidedown, bitplane, closure, + FALSE); } - diff --git a/xorg-server/glamor/glamor_copyplane.c b/xorg-server/glamor/glamor_copyplane.c index 3f2652ac7..c42d33e94 100644 --- a/xorg-server/glamor/glamor_copyplane.c +++ b/xorg-server/glamor/glamor_copyplane.c @@ -30,43 +30,43 @@ static Bool _glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane, RegionPtr *pRegion, Bool fallback) + int srcx, int srcy, int w, int h, int dstx, int dsty, + unsigned long bitPlane, RegionPtr *pRegion, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_gc(pGC) - && glamor_ddx_fallback_check_pixmap(pSrc) - && glamor_ddx_fallback_check_pixmap(pDst)) - goto fail; + if (!fallback && glamor_ddx_fallback_check_gc(pGC) + && glamor_ddx_fallback_check_pixmap(pSrc) + && glamor_ddx_fallback_check_pixmap(pDst)) + goto fail; - glamor_prepare_access(pDst, GLAMOR_ACCESS_RW); - glamor_prepare_access(pSrc, GLAMOR_ACCESS_RO); - *pRegion = fbCopyPlane(pSrc, pDst, pGC, srcx, srcy, w, h, - dstx, dsty, bitPlane); - glamor_finish_access(pSrc, GLAMOR_ACCESS_RO); - glamor_finish_access(pDst, GLAMOR_ACCESS_RW); - return TRUE; + glamor_prepare_access(pDst, GLAMOR_ACCESS_RW); + glamor_prepare_access(pSrc, GLAMOR_ACCESS_RO); + *pRegion = fbCopyPlane(pSrc, pDst, pGC, srcx, srcy, w, h, + dstx, dsty, bitPlane); + glamor_finish_access(pSrc, GLAMOR_ACCESS_RO); + glamor_finish_access(pDst, GLAMOR_ACCESS_RW); + return TRUE; fail: - return FALSE; + return FALSE; } RegionPtr glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane) + int srcx, int srcy, int w, int h, int dstx, int dsty, + unsigned long bitPlane) { - RegionPtr ret; - _glamor_copy_plane(pSrc, pDst, pGC, srcx, srcy, w, h, - dstx, dsty, bitPlane, &ret, TRUE); - return ret; + RegionPtr ret; + + _glamor_copy_plane(pSrc, pDst, pGC, srcx, srcy, w, h, + dstx, dsty, bitPlane, &ret, TRUE); + return ret; } Bool glamor_copy_plane_nf(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane, RegionPtr *pRegion) + int srcx, int srcy, int w, int h, int dstx, int dsty, + unsigned long bitPlane, RegionPtr *pRegion) { - return _glamor_copy_plane(pSrc, pDst, pGC, srcx, srcy, w, h, - dstx, dsty, bitPlane, pRegion, FALSE); + return _glamor_copy_plane(pSrc, pDst, pGC, srcx, srcy, w, h, + dstx, dsty, bitPlane, pRegion, FALSE); } diff --git a/xorg-server/glamor/glamor_copywindow.c b/xorg-server/glamor/glamor_copywindow.c index b181ff529..1ced4b336 100644 --- a/xorg-server/glamor/glamor_copywindow.c +++ b/xorg-server/glamor/glamor_copywindow.c @@ -29,30 +29,28 @@ */ void -glamor_copy_window(WindowPtr win, DDXPointRec old_origin, - RegionPtr src_region) +glamor_copy_window(WindowPtr win, DDXPointRec old_origin, RegionPtr src_region) { - RegionRec dst_region; - int dx, dy; - PixmapPtr pixmap = win->drawable.pScreen->GetWindowPixmap(win); + RegionRec dst_region; + int dx, dy; + PixmapPtr pixmap = win->drawable.pScreen->GetWindowPixmap(win); - dx = old_origin.x - win->drawable.x; - dy = old_origin.y - win->drawable.y; - REGION_TRANSLATE(win->drawable.pScreen, src_region, -dx, -dy); + dx = old_origin.x - win->drawable.x; + dy = old_origin.y - win->drawable.y; + REGION_TRANSLATE(win->drawable.pScreen, src_region, -dx, -dy); - REGION_INIT(win->drawable.pScreen, &dst_region, NullBox, 0); + REGION_INIT(win->drawable.pScreen, &dst_region, NullBox, 0); - REGION_INTERSECT(win->drawable.pScreen, &dst_region, - &win->borderClip, src_region); + REGION_INTERSECT(win->drawable.pScreen, &dst_region, + &win->borderClip, src_region); #ifdef COMPOSITE - if (pixmap->screen_x || pixmap->screen_y) - REGION_TRANSLATE(win->drawable.pScreen, &dst_region, - -pixmap->screen_x, -pixmap->screen_y); + if (pixmap->screen_x || pixmap->screen_y) + REGION_TRANSLATE(win->drawable.pScreen, &dst_region, + -pixmap->screen_x, -pixmap->screen_y); #endif - miCopyRegion(&pixmap->drawable, &pixmap->drawable, - NULL, &dst_region, dx, dy, glamor_copy_n_to_n, 0, - NULL); + miCopyRegion(&pixmap->drawable, &pixmap->drawable, + NULL, &dst_region, dx, dy, glamor_copy_n_to_n, 0, NULL); - REGION_UNINIT(win->drawable.pScreen, &dst_region); + REGION_UNINIT(win->drawable.pScreen, &dst_region); } diff --git a/xorg-server/glamor/glamor_core.c b/xorg-server/glamor/glamor_core.c index eb1a08d43..4eac85603 100644 --- a/xorg-server/glamor/glamor_core.c +++ b/xorg-server/glamor/glamor_core.c @@ -38,76 +38,76 @@ const Bool glamor_get_drawable_location(const DrawablePtr drawable) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - glamor_screen_private *glamor_priv = - glamor_get_screen_private(drawable->pScreen); - if (pixmap_priv == NULL || pixmap_priv->base.gl_fbo == 0) - return 'm'; - if (pixmap_priv->base.fbo->fb == glamor_priv->screen_fbo) - return 's'; - else - return 'f'; + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_screen_private *glamor_priv = + glamor_get_screen_private(drawable->pScreen); + if (pixmap_priv == NULL || pixmap_priv->base.gl_fbo == 0) + return 'm'; + if (pixmap_priv->base.fbo->fb == glamor_priv->screen_fbo) + return 's'; + else + return 'f'; } GLint glamor_compile_glsl_prog(glamor_gl_dispatch * dispatch, GLenum type, - const char *source) + const char *source) { - GLint ok; - GLint prog; - - prog = dispatch->glCreateShader(type); - dispatch->glShaderSource(prog, 1, (const GLchar **) &source, NULL); - dispatch->glCompileShader(prog); - dispatch->glGetShaderiv(prog, GL_COMPILE_STATUS, &ok); - if (!ok) { - GLchar *info; - GLint size; - - dispatch->glGetShaderiv(prog, GL_INFO_LOG_LENGTH, &size); - info = malloc(size); - if (info) { - dispatch->glGetShaderInfoLog(prog, size, NULL, info); - ErrorF("Failed to compile %s: %s\n", - type == GL_FRAGMENT_SHADER ? "FS" : "VS", info); - ErrorF("Program source:\n%s", source); - free(info); - } else - ErrorF("Failed to get shader compilation info.\n"); - FatalError("GLSL compile failure\n"); - } - - return prog; + GLint ok; + GLint prog; + + prog = dispatch->glCreateShader(type); + dispatch->glShaderSource(prog, 1, (const GLchar **) &source, NULL); + dispatch->glCompileShader(prog); + dispatch->glGetShaderiv(prog, GL_COMPILE_STATUS, &ok); + if (!ok) { + GLchar *info; + GLint size; + + dispatch->glGetShaderiv(prog, GL_INFO_LOG_LENGTH, &size); + info = malloc(size); + if (info) { + dispatch->glGetShaderInfoLog(prog, size, NULL, info); + ErrorF("Failed to compile %s: %s\n", + type == GL_FRAGMENT_SHADER ? "FS" : "VS", info); + ErrorF("Program source:\n%s", source); + free(info); + } + else + ErrorF("Failed to get shader compilation info.\n"); + FatalError("GLSL compile failure\n"); + } + + return prog; } void glamor_link_glsl_prog(glamor_gl_dispatch * dispatch, GLint prog) { - GLint ok; + GLint ok; - dispatch->glLinkProgram(prog); - dispatch->glGetProgramiv(prog, GL_LINK_STATUS, &ok); - if (!ok) { - GLchar *info; - GLint size; + dispatch->glLinkProgram(prog); + dispatch->glGetProgramiv(prog, GL_LINK_STATUS, &ok); + if (!ok) { + GLchar *info; + GLint size; - dispatch->glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &size); - info = malloc(size); + dispatch->glGetProgramiv(prog, GL_INFO_LOG_LENGTH, &size); + info = malloc(size); - dispatch->glGetProgramInfoLog(prog, size, NULL, info); - ErrorF("Failed to link: %s\n", info); - FatalError("GLSL link failure\n"); - } + dispatch->glGetProgramInfoLog(prog, size, NULL, info); + ErrorF("Failed to link: %s\n", info); + FatalError("GLSL link failure\n"); + } } - Bool glamor_prepare_access(DrawablePtr drawable, glamor_access_t access) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - return glamor_download_pixmap_to_cpu(pixmap, access); + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + + return glamor_download_pixmap_to_cpu(pixmap, access); } /* @@ -142,221 +142,205 @@ glamor_prepare_access(DrawablePtr drawable, glamor_access_t access) void glamor_init_finish_access_shaders(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - const char *vs_source = - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord0;\n" - "varying vec2 source_texture;\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " source_texture = v_texcoord0.xy;\n" "}\n"; - - const char *common_source = - GLAMOR_DEFAULT_PRECISION - "varying vec2 source_texture;\n" - "uniform sampler2D sampler;\n" - "uniform int revert;\n" - "uniform int swap_rb;\n" - - "#define REVERT_NONE 0\n" - "#define REVERT_NORMAL 1\n" - "#define SWAP_NONE_DOWNLOADING 0\n" - "#define SWAP_DOWNLOADING 1\n" - "#define SWAP_UPLOADING 2\n" - "#define SWAP_NONE_UPLOADING 3\n"; - - const char *fs_source = - "void main()\n" - "{\n" - " if (revert == REVERT_NONE) \n" - " { \n" - " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" - " gl_FragColor = texture2D(sampler, source_texture).bgra;\n" - " else \n" - " gl_FragColor = texture2D(sampler, source_texture).rgba;\n" - " } \n" - " else \n" - " { \n" - " if (swap_rb == SWAP_DOWNLOADING) \n" - " gl_FragColor = texture2D(sampler, source_texture).argb;\n" - " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" - " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" - " else if (swap_rb == SWAP_UPLOADING)\n" - " gl_FragColor = texture2D(sampler, source_texture).gbar;\n" - " else if (swap_rb == SWAP_NONE_UPLOADING)\n" - " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" - " } \n" "}\n"; - - const char *set_alpha_source = - "void main()\n" - "{\n" - " if (revert == REVERT_NONE) \n" - " { \n" - " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" - " gl_FragColor = vec4(texture2D(sampler, source_texture).bgr, 1);\n" - " else \n" - " gl_FragColor = vec4(texture2D(sampler, source_texture).rgb, 1);\n" - " } \n" - " else \n" - " { \n" - " if (swap_rb == SWAP_DOWNLOADING) \n" - " gl_FragColor = vec4(1, texture2D(sampler, source_texture).rgb);\n" - " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" - " gl_FragColor = vec4(1, texture2D(sampler, source_texture).bgr);\n" - " else if (swap_rb == SWAP_UPLOADING)\n" - " gl_FragColor = vec4(texture2D(sampler, source_texture).gba, 1);\n" - " else if (swap_rb == SWAP_NONE_UPLOADING)\n" - " gl_FragColor = vec4(texture2D(sampler, source_texture).abg, 1);\n" - " } \n" - "}\n"; - GLint fs_prog, vs_prog, avs_prog, set_alpha_prog; - GLint sampler_uniform_location; - char *source; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->finish_access_prog[0] = dispatch->glCreateProgram(); - glamor_priv->finish_access_prog[1] = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, - vs_source); - - XNFasprintf(&source, "%s%s", common_source, fs_source); - fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - source); - free(source); - - dispatch->glAttachShader(glamor_priv->finish_access_prog[0], - vs_prog); - dispatch->glAttachShader(glamor_priv->finish_access_prog[0], - fs_prog); - - avs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, - vs_source); - - XNFasprintf(&source, "%s%s", common_source, set_alpha_source); - set_alpha_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - source); - free(source); - - dispatch->glAttachShader(glamor_priv->finish_access_prog[1], - avs_prog); - dispatch->glAttachShader(glamor_priv->finish_access_prog[1], - set_alpha_prog); - - dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[0], - GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[0], - GLAMOR_VERTEX_SOURCE, - "v_texcoord0"); - glamor_link_glsl_prog(dispatch, - glamor_priv->finish_access_prog[0]); - - dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[1], - GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[1], - GLAMOR_VERTEX_SOURCE, - "v_texcoord0"); - glamor_link_glsl_prog(dispatch, - glamor_priv->finish_access_prog[1]); - - glamor_priv->finish_access_revert[0] = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[0], - "revert"); - - glamor_priv->finish_access_swap_rb[0] = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[0], - "swap_rb"); - sampler_uniform_location = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[0], - "sampler"); - dispatch->glUseProgram(glamor_priv->finish_access_prog[0]); - dispatch->glUniform1i(sampler_uniform_location, 0); - dispatch->glUniform1i(glamor_priv->finish_access_revert[0], 0); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[0], 0); - dispatch->glUseProgram(0); - - glamor_priv->finish_access_revert[1] = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[1], - "revert"); - glamor_priv->finish_access_swap_rb[1] = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[1], - "swap_rb"); - sampler_uniform_location = - dispatch-> - glGetUniformLocation(glamor_priv->finish_access_prog[1], - "sampler"); - dispatch->glUseProgram(glamor_priv->finish_access_prog[1]); - dispatch->glUniform1i(glamor_priv->finish_access_revert[1], 0); - dispatch->glUniform1i(sampler_uniform_location, 0); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[1], 0); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + const char *vs_source = + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord0;\n" + "varying vec2 source_texture;\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " source_texture = v_texcoord0.xy;\n" + "}\n"; + + const char *common_source = + GLAMOR_DEFAULT_PRECISION + "varying vec2 source_texture;\n" + "uniform sampler2D sampler;\n" + "uniform int revert;\n" + "uniform int swap_rb;\n" + "#define REVERT_NONE 0\n" + "#define REVERT_NORMAL 1\n" + "#define SWAP_NONE_DOWNLOADING 0\n" + "#define SWAP_DOWNLOADING 1\n" + "#define SWAP_UPLOADING 2\n" + "#define SWAP_NONE_UPLOADING 3\n"; + + const char *fs_source = + "void main()\n" + "{\n" + " if (revert == REVERT_NONE) \n" + " { \n" + " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" + " gl_FragColor = texture2D(sampler, source_texture).bgra;\n" + " else \n" + " gl_FragColor = texture2D(sampler, source_texture).rgba;\n" + " } \n" + " else \n" + " { \n" + " if (swap_rb == SWAP_DOWNLOADING) \n" + " gl_FragColor = texture2D(sampler, source_texture).argb;\n" + " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" + " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" + " else if (swap_rb == SWAP_UPLOADING)\n" + " gl_FragColor = texture2D(sampler, source_texture).gbar;\n" + " else if (swap_rb == SWAP_NONE_UPLOADING)\n" + " gl_FragColor = texture2D(sampler, source_texture).abgr;\n" + " } \n" + "}\n"; + + const char *set_alpha_source = + "void main()\n" + "{\n" + " if (revert == REVERT_NONE) \n" + " { \n" + " if ((swap_rb != SWAP_NONE_DOWNLOADING) && (swap_rb != SWAP_NONE_UPLOADING)) \n" + " gl_FragColor = vec4(texture2D(sampler, source_texture).bgr, 1);\n" + " else \n" + " gl_FragColor = vec4(texture2D(sampler, source_texture).rgb, 1);\n" + " } \n" + " else \n" + " { \n" + " if (swap_rb == SWAP_DOWNLOADING) \n" + " gl_FragColor = vec4(1, texture2D(sampler, source_texture).rgb);\n" + " else if (swap_rb == SWAP_NONE_DOWNLOADING)\n" + " gl_FragColor = vec4(1, texture2D(sampler, source_texture).bgr);\n" + " else if (swap_rb == SWAP_UPLOADING)\n" + " gl_FragColor = vec4(texture2D(sampler, source_texture).gba, 1);\n" + " else if (swap_rb == SWAP_NONE_UPLOADING)\n" + " gl_FragColor = vec4(texture2D(sampler, source_texture).abg, 1);\n" + " } \n" + "}\n"; + GLint fs_prog, vs_prog, avs_prog, set_alpha_prog; + GLint sampler_uniform_location; + char *source; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->finish_access_prog[0] = dispatch->glCreateProgram(); + glamor_priv->finish_access_prog[1] = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, vs_source); + + XNFasprintf(&source, "%s%s", common_source, fs_source); + fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, source); + free(source); + + dispatch->glAttachShader(glamor_priv->finish_access_prog[0], vs_prog); + dispatch->glAttachShader(glamor_priv->finish_access_prog[0], fs_prog); + + avs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, vs_source); + + XNFasprintf(&source, "%s%s", common_source, set_alpha_source); + set_alpha_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, + source); + free(source); + + dispatch->glAttachShader(glamor_priv->finish_access_prog[1], avs_prog); + dispatch->glAttachShader(glamor_priv->finish_access_prog[1], + set_alpha_prog); + + dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[0], + GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[0], + GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + glamor_link_glsl_prog(dispatch, glamor_priv->finish_access_prog[0]); + + dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[1], + GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(glamor_priv->finish_access_prog[1], + GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + glamor_link_glsl_prog(dispatch, glamor_priv->finish_access_prog[1]); + + glamor_priv->finish_access_revert[0] = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[0], + "revert"); + + glamor_priv->finish_access_swap_rb[0] = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[0], + "swap_rb"); + sampler_uniform_location = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[0], + "sampler"); + dispatch->glUseProgram(glamor_priv->finish_access_prog[0]); + dispatch->glUniform1i(sampler_uniform_location, 0); + dispatch->glUniform1i(glamor_priv->finish_access_revert[0], 0); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[0], 0); + dispatch->glUseProgram(0); + + glamor_priv->finish_access_revert[1] = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[1], + "revert"); + glamor_priv->finish_access_swap_rb[1] = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[1], + "swap_rb"); + sampler_uniform_location = + dispatch->glGetUniformLocation(glamor_priv->finish_access_prog[1], + "sampler"); + dispatch->glUseProgram(glamor_priv->finish_access_prog[1]); + dispatch->glUniform1i(glamor_priv->finish_access_revert[1], 0); + dispatch->glUniform1i(sampler_uniform_location, 0); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[1], 0); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); } void glamor_fini_finish_access_shaders(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->finish_access_prog[0]); - dispatch->glDeleteProgram(glamor_priv->finish_access_prog[1]); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->finish_access_prog[0]); + dispatch->glDeleteProgram(glamor_priv->finish_access_prog[1]); + glamor_put_dispatch(glamor_priv); } void glamor_finish_access(DrawablePtr drawable, glamor_access_t access_mode) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - glamor_screen_private *glamor_priv = - glamor_get_screen_private(drawable->pScreen); + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_screen_private *glamor_priv = + glamor_get_screen_private(drawable->pScreen); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO_DOWNLOADED(pixmap_priv)) - return; + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO_DOWNLOADED(pixmap_priv)) + return; - if (access_mode != GLAMOR_ACCESS_RO) { - glamor_restore_pixmap_to_texture(pixmap); - } + if (access_mode != GLAMOR_ACCESS_RO) { + glamor_restore_pixmap_to_texture(pixmap); + } - if (pixmap_priv->base.fbo->pbo != 0 && pixmap_priv->base.fbo->pbo_valid) { - glamor_gl_dispatch *dispatch; + if (pixmap_priv->base.fbo->pbo != 0 && pixmap_priv->base.fbo->pbo_valid) { + glamor_gl_dispatch *dispatch; - assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); + assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - dispatch->glDeleteBuffers(1, &pixmap_priv->base.fbo->pbo); - glamor_put_dispatch(glamor_priv); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + dispatch->glDeleteBuffers(1, &pixmap_priv->base.fbo->pbo); + glamor_put_dispatch(glamor_priv); - pixmap_priv->base.fbo->pbo_valid = FALSE; - pixmap_priv->base.fbo->pbo = 0; - } else { - free(pixmap->devPrivate.ptr); - } + pixmap_priv->base.fbo->pbo_valid = FALSE; + pixmap_priv->base.fbo->pbo = 0; + } + else { + free(pixmap->devPrivate.ptr); + } - if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) - pixmap->devKind = pixmap_priv->base.drm_stride; + if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) + pixmap->devKind = pixmap_priv->base.drm_stride; - if (pixmap_priv->base.gl_fbo == GLAMOR_FBO_DOWNLOADED) - pixmap_priv->base.gl_fbo = GLAMOR_FBO_NORMAL; + if (pixmap_priv->base.gl_fbo == GLAMOR_FBO_DOWNLOADED) + pixmap_priv->base.gl_fbo = GLAMOR_FBO_NORMAL; - pixmap->devPrivate.ptr = NULL; + pixmap->devPrivate.ptr = NULL; } - /** * Calls uxa_prepare_access with UXA_PREPARE_SRC for the tile, if that is the * current fill style. @@ -368,22 +352,19 @@ glamor_finish_access(DrawablePtr drawable, glamor_access_t access_mode) Bool glamor_prepare_access_gc(GCPtr gc) { - if (gc->stipple) { - if (!glamor_prepare_access - (&gc->stipple->drawable, GLAMOR_ACCESS_RO)) - return FALSE; - } - if (gc->fillStyle == FillTiled) { - if (!glamor_prepare_access(&gc->tile.pixmap->drawable, - GLAMOR_ACCESS_RO)) { - if (gc->stipple) - glamor_finish_access(&gc-> - stipple->drawable, - GLAMOR_ACCESS_RO); - return FALSE; - } - } - return TRUE; + if (gc->stipple) { + if (!glamor_prepare_access(&gc->stipple->drawable, GLAMOR_ACCESS_RO)) + return FALSE; + } + if (gc->fillStyle == FillTiled) { + if (!glamor_prepare_access(&gc->tile.pixmap->drawable, + GLAMOR_ACCESS_RO)) { + if (gc->stipple) + glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RO); + return FALSE; + } + } + return TRUE; } /** @@ -392,45 +373,44 @@ glamor_prepare_access_gc(GCPtr gc) void glamor_finish_access_gc(GCPtr gc) { - if (gc->fillStyle == FillTiled) - glamor_finish_access(&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RO); - if (gc->stipple) - glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RO); + if (gc->fillStyle == FillTiled) + glamor_finish_access(&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RO); + if (gc->stipple) + glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RO); } Bool glamor_stipple(PixmapPtr pixmap, PixmapPtr stipple, - int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - unsigned long fg_pixel, unsigned long bg_pixel, - int stipple_x, int stipple_y) + int x, int y, int width, int height, + unsigned char alu, unsigned long planemask, + unsigned long fg_pixel, unsigned long bg_pixel, + int stipple_x, int stipple_y) { - glamor_fallback("stubbed out stipple depth %d\n", - pixmap->drawable.depth); - return FALSE; + glamor_fallback("stubbed out stipple depth %d\n", pixmap->drawable.depth); + return FALSE; } GCOps glamor_gc_ops = { - .FillSpans = glamor_fill_spans, - .SetSpans = glamor_set_spans, - .PutImage = glamor_put_image, - .CopyArea = glamor_copy_area, - .CopyPlane = glamor_copy_plane, - .PolyPoint = glamor_poly_point, - .Polylines = glamor_poly_lines, - .PolySegment = glamor_poly_segment, - .PolyRectangle = miPolyRectangle, - .PolyArc = miPolyArc, - .FillPolygon = miFillPolygon, - .PolyFillRect = glamor_poly_fill_rect, - .PolyFillArc = miPolyFillArc, - .PolyText8 = miPolyText8, - .PolyText16 = miPolyText16, - .ImageText8 = miImageText8, - .ImageText16 = miImageText16, - .ImageGlyphBlt = glamor_image_glyph_blt, //miImageGlyphBlt, - .PolyGlyphBlt = glamor_poly_glyph_blt, //miPolyGlyphBlt, - .PushPixels = glamor_push_pixels, //miPushPixels, + .FillSpans = glamor_fill_spans, + .SetSpans = glamor_set_spans, + .PutImage = glamor_put_image, + .CopyArea = glamor_copy_area, + .CopyPlane = glamor_copy_plane, + .PolyPoint = glamor_poly_point, + .Polylines = glamor_poly_lines, + .PolySegment = glamor_poly_segment, + .PolyRectangle = miPolyRectangle, + .PolyArc = miPolyArc, + .FillPolygon = miFillPolygon, + .PolyFillRect = glamor_poly_fill_rect, + .PolyFillArc = miPolyFillArc, + .PolyText8 = miPolyText8, + .PolyText16 = miPolyText16, + .ImageText8 = miImageText8, + .ImageText16 = miImageText16, + .ImageGlyphBlt = glamor_image_glyph_blt, //miImageGlyphBlt, + .PolyGlyphBlt = glamor_poly_glyph_blt, //miPolyGlyphBlt, + .PushPixels = glamor_push_pixels, //miPushPixels, }; /** @@ -440,104 +420,94 @@ GCOps glamor_gc_ops = { void glamor_validate_gc(GCPtr gc, unsigned long changes, DrawablePtr drawable) { - /* fbValidateGC will do direct access to pixmaps if the tiling has changed. - * Preempt fbValidateGC by doing its work and masking the change out, so - * that we can do the Prepare/finish_access. - */ + /* fbValidateGC will do direct access to pixmaps if the tiling has changed. + * Preempt fbValidateGC by doing its work and masking the change out, so + * that we can do the Prepare/finish_access. + */ #ifdef FB_24_32BIT - if ((changes & GCTile) && fbGetRotatedPixmap(gc)) { - gc->pScreen->DestroyPixmap(fbGetRotatedPixmap(gc)); - fbGetRotatedPixmap(gc) = 0; - } - - if (gc->fillStyle == FillTiled) { - PixmapPtr old_tile, new_tile; - - old_tile = gc->tile.pixmap; - if (old_tile->drawable.bitsPerPixel != - drawable->bitsPerPixel) { - new_tile = fbGetRotatedPixmap(gc); - if (!new_tile || - new_tile->drawable.bitsPerPixel != - drawable->bitsPerPixel) { - if (new_tile) - gc->pScreen->DestroyPixmap - (new_tile); - /* fb24_32ReformatTile will do direct access of a newly- - * allocated pixmap. - */ - glamor_fallback - ("GC %p tile FB_24_32 transformat %p.\n", - gc, old_tile); - - if (glamor_prepare_access - (&old_tile->drawable, - GLAMOR_ACCESS_RO)) { - new_tile = - fb24_32ReformatTile - (old_tile, - drawable->bitsPerPixel); - glamor_finish_access - (&old_tile->drawable, GLAMOR_ACCESS_RO); - } - } - if (new_tile) { - fbGetRotatedPixmap(gc) = old_tile; - gc->tile.pixmap = new_tile; - changes |= GCTile; - } - } - } + if ((changes & GCTile) && fbGetRotatedPixmap(gc)) { + gc->pScreen->DestroyPixmap(fbGetRotatedPixmap(gc)); + fbGetRotatedPixmap(gc) = 0; + } + + if (gc->fillStyle == FillTiled) { + PixmapPtr old_tile, new_tile; + + old_tile = gc->tile.pixmap; + if (old_tile->drawable.bitsPerPixel != drawable->bitsPerPixel) { + new_tile = fbGetRotatedPixmap(gc); + if (!new_tile || + new_tile->drawable.bitsPerPixel != drawable->bitsPerPixel) { + if (new_tile) + gc->pScreen->DestroyPixmap(new_tile); + /* fb24_32ReformatTile will do direct access of a newly- + * allocated pixmap. + */ + glamor_fallback + ("GC %p tile FB_24_32 transformat %p.\n", gc, old_tile); + + if (glamor_prepare_access + (&old_tile->drawable, GLAMOR_ACCESS_RO)) { + new_tile = + fb24_32ReformatTile(old_tile, drawable->bitsPerPixel); + glamor_finish_access(&old_tile->drawable, GLAMOR_ACCESS_RO); + } + } + if (new_tile) { + fbGetRotatedPixmap(gc) = old_tile; + gc->tile.pixmap = new_tile; + changes |= GCTile; + } + } + } #endif - if (changes & GCTile) { - if (!gc->tileIsPixel) { - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(gc->tile.pixmap); - if ((!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - && FbEvenTile(gc->tile.pixmap->drawable.width * - drawable->bitsPerPixel)) { - glamor_fallback - ("GC %p tile changed %p.\n", gc, - gc->tile.pixmap); - if (glamor_prepare_access - (&gc->tile.pixmap->drawable, - GLAMOR_ACCESS_RW)) { - fbPadPixmap(gc->tile.pixmap); - glamor_finish_access - (&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RW); - } - } - } - /* Mask out the GCTile change notification, now that we've done FB's - * job for it. - */ - changes &= ~GCTile; - } - - if (changes & GCStipple && gc->stipple) { - /* We can't inline stipple handling like we do for GCTile because - * it sets fbgc privates. - */ - if (glamor_prepare_access - (&gc->stipple->drawable, GLAMOR_ACCESS_RW)) { - fbValidateGC(gc, changes, drawable); - glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RW); - } - } else { - fbValidateGC(gc, changes, drawable); - } - - gc->ops = &glamor_gc_ops; + if (changes & GCTile) { + if (!gc->tileIsPixel) { + glamor_pixmap_private *pixmap_priv = + glamor_get_pixmap_private(gc->tile.pixmap); + if ((!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + && FbEvenTile(gc->tile.pixmap->drawable.width * + drawable->bitsPerPixel)) { + glamor_fallback + ("GC %p tile changed %p.\n", gc, gc->tile.pixmap); + if (glamor_prepare_access + (&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RW)) { + fbPadPixmap(gc->tile.pixmap); + glamor_finish_access + (&gc->tile.pixmap->drawable, GLAMOR_ACCESS_RW); + } + } + } + /* Mask out the GCTile change notification, now that we've done FB's + * job for it. + */ + changes &= ~GCTile; + } + + if (changes & GCStipple && gc->stipple) { + /* We can't inline stipple handling like we do for GCTile because + * it sets fbgc privates. + */ + if (glamor_prepare_access(&gc->stipple->drawable, GLAMOR_ACCESS_RW)) { + fbValidateGC(gc, changes, drawable); + glamor_finish_access(&gc->stipple->drawable, GLAMOR_ACCESS_RW); + } + } + else { + fbValidateGC(gc, changes, drawable); + } + + gc->ops = &glamor_gc_ops; } static GCFuncs glamor_gc_funcs = { - glamor_validate_gc, - miChangeGC, - miCopyGC, - miDestroyGC, - miChangeClip, - miDestroyClip, - miCopyClip + glamor_validate_gc, + miChangeGC, + miCopyGC, + miDestroyGC, + miChangeClip, + miDestroyClip, + miCopyClip }; /** @@ -547,66 +517,69 @@ static GCFuncs glamor_gc_funcs = { int glamor_create_gc(GCPtr gc) { - if (!fbCreateGC(gc)) - return FALSE; + if (!fbCreateGC(gc)) + return FALSE; - gc->funcs = &glamor_gc_funcs; + gc->funcs = &glamor_gc_funcs; - return TRUE; + return TRUE; } RegionPtr glamor_bitmap_to_region(PixmapPtr pixmap) { - RegionPtr ret; - glamor_fallback("pixmap %p \n", pixmap); - if (!glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO)) - return NULL; - ret = fbPixmapToRegion(pixmap); - glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); - return ret; + RegionPtr ret; + + glamor_fallback("pixmap %p \n", pixmap); + if (!glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO)) + return NULL; + ret = fbPixmapToRegion(pixmap); + glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); + return ret; } /* Borrow from cairo. */ Bool glamor_gl_has_extension(const char *extension) { - const char *pext; - int ext_len; - ext_len = strlen(extension); + const char *pext; + int ext_len; + + ext_len = strlen(extension); - pext = (const char*)glGetString(GL_EXTENSIONS); + pext = (const char *) glGetString(GL_EXTENSIONS); - if (pext == NULL || extension == NULL) - return FALSE; + if (pext == NULL || extension == NULL) + return FALSE; - while ((pext = strstr(pext, extension)) != NULL) { - if (pext[ext_len] == ' ' || pext[ext_len] == '\0') - return TRUE; - pext += ext_len; - } - return FALSE; + while ((pext = strstr(pext, extension)) != NULL) { + if (pext[ext_len] == ' ' || pext[ext_len] == '\0') + return TRUE; + pext += ext_len; + } + return FALSE; } int glamor_gl_get_version(void) { - int major, minor; - const char *version = (const char *) glGetString(GL_VERSION); - const char *dot = version == NULL ? NULL : strchr(version, '.'); - const char *major_start = dot; - - /* Sanity check */ - if (dot == NULL || dot == version || *(dot + 1) == '\0') { - major = 0; - minor = 0; - } else { - /* Find the start of the major version in the string */ - while (major_start > version && *major_start != ' ') - --major_start; - major = strtol(major_start, NULL, 10); - minor = strtol(dot + 1, NULL, 10); - } - - return GLAMOR_GL_VERSION_ENCODE(major, minor); + int major, minor; + const char *version = (const char *) glGetString(GL_VERSION); + const char *dot = version == NULL ? NULL : strchr(version, '.'); + const char *major_start = dot; + + /* Sanity check */ + if (dot == NULL || dot == version || *(dot + 1) == '\0') { + major = 0; + minor = 0; + } + else { + /* Find the start of the major version in the string */ + while (major_start > version && *major_start != ' ') + --major_start; + major = strtol(major_start, NULL, 10); + minor = strtol(dot + 1, NULL, 10); + } + + return GLAMOR_GL_VERSION_ENCODE(major, minor); } diff --git a/xorg-server/glamor/glamor_debug.h b/xorg-server/glamor/glamor_debug.h index f0c969b11..638bee20c 100644 --- a/xorg-server/glamor/glamor_debug.h +++ b/xorg-server/glamor/glamor_debug.h @@ -29,7 +29,6 @@ #ifndef __GLAMOR_DEBUG_H__ #define __GLAMOR_DEBUG_H__ - #define GLAMOR_DELAYED_STRING_MAX 64 #define GLAMOR_DEBUG_NONE 0 @@ -51,9 +50,6 @@ AbortServer(void) exit(1); \ } while(0) - - - #define __debug_output_message(_format_, _prefix_, ...) \ LogMessageVerb(X_NONE, 0, \ "%32s:\t" _format_ , \ @@ -69,7 +65,6 @@ AbortServer(void) ##__VA_ARGS__); \ } while(0) - #define glamor_fallback(_format_,...) \ do { \ if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) \ @@ -77,8 +72,6 @@ AbortServer(void) "Glamor fallback", \ ##__VA_ARGS__);} while(0) - - #define glamor_delayed_fallback(_screen_, _format_,...) \ do { \ if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) { \ @@ -90,7 +83,6 @@ AbortServer(void) "glamor delayed fallback: \t%s " _format_ , \ __FUNCTION__, ##__VA_ARGS__); } } while(0) - #define glamor_clear_delayed_fallbacks(_screen_) \ do { \ if (glamor_debug_level >= GLAMOR_DEBUG_FALLBACK) { \ @@ -112,5 +104,4 @@ AbortServer(void) #define DEBUGRegionPrint(x) do {} while (0) //#define DEBUGRegionPrint RegionPrint - #endif diff --git a/xorg-server/glamor/glamor_egl.c b/xorg-server/glamor/glamor_egl.c index ff4c0bdd9..2f97a839b 100644 --- a/xorg-server/glamor/glamor_egl.c +++ b/xorg-server/glamor/glamor_egl.c @@ -27,9 +27,7 @@ * */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include "dix-config.h" #define GLAMOR_FOR_XORG #include <xorg-server.h> @@ -60,50 +58,45 @@ #include <EGL/eglext.h> #include "glamor.h" -#include "compat-api.h" #include "glamor_gl_dispatch.h" -#ifdef GLX_USE_SHARED_DISPATCH -#include "glapi.h" -#endif static const char glamor_name[] = "glamor"; static DevPrivateKeyRec glamor_egl_pixmap_private_key_index; -DevPrivateKey glamor_egl_pixmap_private_key = &glamor_egl_pixmap_private_key_index; +DevPrivateKey glamor_egl_pixmap_private_key = + &glamor_egl_pixmap_private_key_index; static void glamor_identify(int flags) { - xf86Msg(X_INFO, "%s: OpenGL accelerated X.org driver based.\n", - glamor_name); + xf86Msg(X_INFO, "%s: OpenGL accelerated X.org driver based.\n", + glamor_name); } struct glamor_egl_screen_private { - EGLDisplay display; - EGLContext context; - EGLint major, minor; - - CreateScreenResourcesProcPtr CreateScreenResources; - CloseScreenProcPtr CloseScreen; - int fd; - EGLImageKHR front_image; - PixmapPtr *back_pixmap; - int cpp; + EGLDisplay display; + EGLContext context; + EGLint major, minor; + + CreateScreenResourcesProcPtr CreateScreenResources; + CloseScreenProcPtr CloseScreen; + int fd; + EGLImageKHR front_image; + PixmapPtr *back_pixmap; + int cpp; #ifdef GLAMOR_HAS_GBM - struct gbm_device *gbm; + struct gbm_device *gbm; #endif - int has_gem; - void *glamor_context; - void *current_context; - int gl_context_depth; - int dri3_capable; - - PFNEGLCREATEIMAGEKHRPROC egl_create_image_khr; - PFNEGLDESTROYIMAGEKHRPROC egl_destroy_image_khr; - PFNGLEGLIMAGETARGETTEXTURE2DOESPROC egl_image_target_texture2d_oes; - struct glamor_gl_dispatch *dispatch; - CloseScreenProcPtr saved_close_screen; - xf86FreeScreenProc *saved_free_screen; + int has_gem; + int gl_context_depth; + int dri3_capable; + + PFNEGLCREATEIMAGEKHRPROC egl_create_image_khr; + PFNEGLDESTROYIMAGEKHRPROC egl_destroy_image_khr; + PFNGLEGLIMAGETARGETTEXTURE2DOESPROC egl_image_target_texture2d_oes; + struct glamor_gl_dispatch *dispatch; + CloseScreenProcPtr saved_close_screen; + xf86FreeScreenProc *saved_free_screen; }; int xf86GlamorEGLPrivateIndex = -1; @@ -111,646 +104,625 @@ int xf86GlamorEGLPrivateIndex = -1; static struct glamor_egl_screen_private * glamor_egl_get_screen_private(ScrnInfoPtr scrn) { - return (struct glamor_egl_screen_private *) - scrn->privates[xf86GlamorEGLPrivateIndex].ptr; + return (struct glamor_egl_screen_private *) + scrn->privates[xf86GlamorEGLPrivateIndex].ptr; } -#ifdef GLX_USE_SHARED_DISPATCH + _X_EXPORT void glamor_egl_make_current(ScreenPtr screen) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - - if (glamor_egl->gl_context_depth++) - return; - - GET_CURRENT_CONTEXT(glamor_egl->current_context); - - if (glamor_egl->glamor_context != glamor_egl->current_context) { - eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE, - EGL_NO_SURFACE, EGL_NO_CONTEXT); - if (!eglMakeCurrent(glamor_egl->display, - EGL_NO_SURFACE, EGL_NO_SURFACE, - glamor_egl->context)) { - FatalError("Failed to make EGL context current\n"); - } - } + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + + if (glamor_egl->gl_context_depth++) + return; + + if (glamor_egl->context != eglGetCurrentContext()) { + eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE, + EGL_NO_SURFACE, EGL_NO_CONTEXT); + if (!eglMakeCurrent(glamor_egl->display, + EGL_NO_SURFACE, EGL_NO_SURFACE, + glamor_egl->context)) { + FatalError("Failed to make EGL context current\n"); + } + } } _X_EXPORT void glamor_egl_restore_context(ScreenPtr screen) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); - if (--glamor_egl->gl_context_depth) - return; + if (--glamor_egl->gl_context_depth) + return; - if (glamor_egl->current_context && - glamor_egl->glamor_context != glamor_egl->current_context) - SET_CURRENT_CONTEXT(glamor_egl->current_context); + eglMakeCurrent(glamor_egl->display, EGL_NO_SURFACE, + EGL_NO_SURFACE, EGL_NO_CONTEXT); } -#else -#define glamor_egl_make_current(x) -#define glamor_egl_restore_context(s) -#endif static EGLImageKHR _glamor_egl_create_image(struct glamor_egl_screen_private *glamor_egl, - int width, int height, int stride, int name, int depth) + int width, int height, int stride, int name, int depth) { - EGLImageKHR image; - EGLint attribs[] = { - EGL_WIDTH, 0, - EGL_HEIGHT, 0, - EGL_DRM_BUFFER_STRIDE_MESA, 0, - EGL_DRM_BUFFER_FORMAT_MESA, - EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, - EGL_DRM_BUFFER_USE_MESA, - EGL_DRM_BUFFER_USE_SHARE_MESA | - EGL_DRM_BUFFER_USE_SCANOUT_MESA, - EGL_NONE - }; - attribs[1] = width; - attribs[3] = height; - attribs[5] = stride; - if (depth != 32 && depth != 24) - return EGL_NO_IMAGE_KHR; - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - glamor_egl->context, - EGL_DRM_BUFFER_MESA, - (void *) (uintptr_t)name, attribs); - if (image == EGL_NO_IMAGE_KHR) - return EGL_NO_IMAGE_KHR; - - - return image; + EGLImageKHR image; + + EGLint attribs[] = { + EGL_WIDTH, 0, + EGL_HEIGHT, 0, + EGL_DRM_BUFFER_STRIDE_MESA, 0, + EGL_DRM_BUFFER_FORMAT_MESA, + EGL_DRM_BUFFER_FORMAT_ARGB32_MESA, + EGL_DRM_BUFFER_USE_MESA, + EGL_DRM_BUFFER_USE_SHARE_MESA | EGL_DRM_BUFFER_USE_SCANOUT_MESA, + EGL_NONE + }; + attribs[1] = width; + attribs[3] = height; + attribs[5] = stride; + if (depth != 32 && depth != 24) + return EGL_NO_IMAGE_KHR; + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + glamor_egl->context, + EGL_DRM_BUFFER_MESA, + (void *) (uintptr_t) name, + attribs); + if (image == EGL_NO_IMAGE_KHR) + return EGL_NO_IMAGE_KHR; + + return image; } static int glamor_get_flink_name(int fd, int handle, int *name) { - struct drm_gem_flink flink; - flink.handle = handle; - if (ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) - return FALSE; - *name = flink.name; - return TRUE; + struct drm_gem_flink flink; + + flink.handle = handle; + if (ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) + return FALSE; + *name = flink.name; + return TRUE; } static Bool glamor_create_texture_from_image(struct glamor_egl_screen_private - *glamor_egl, - EGLImageKHR image, GLuint * texture) + *glamor_egl, + EGLImageKHR image, GLuint * texture) { - glamor_egl->dispatch->glGenTextures(1, texture); - glamor_egl->dispatch->glBindTexture(GL_TEXTURE_2D, *texture); - glamor_egl->dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - glamor_egl->dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - - (glamor_egl->egl_image_target_texture2d_oes) (GL_TEXTURE_2D, - image); - glamor_egl->dispatch->glBindTexture(GL_TEXTURE_2D, 0); - return TRUE; + glamor_egl->dispatch->glGenTextures(1, texture); + glamor_egl->dispatch->glBindTexture(GL_TEXTURE_2D, *texture); + glamor_egl->dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glamor_egl->dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + (glamor_egl->egl_image_target_texture2d_oes) (GL_TEXTURE_2D, image); + glamor_egl->dispatch->glBindTexture(GL_TEXTURE_2D, 0); + return TRUE; } unsigned int -glamor_egl_create_argb8888_based_texture(ScreenPtr screen, - int w, - int h) +glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - EGLImageKHR image; - GLuint texture; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + EGLImageKHR image; + GLuint texture; + #ifdef GLAMOR_HAS_DRI3_SUPPORT - struct gbm_bo *bo; - EGLNativePixmapType native_pixmap; - glamor_egl = glamor_egl_get_screen_private(scrn); - bo = gbm_bo_create (glamor_egl->gbm, w, h, GBM_FORMAT_ARGB8888, - GBM_BO_USE_RENDERING | - GBM_BO_USE_SCANOUT); - if (!bo) - return 0; - - /* If the following assignment raises an error or a warning - * then that means EGLNativePixmapType is not struct gbm_bo * - * on your platform: This code won't work and you should not - * compile with dri3 support enabled */ - native_pixmap = bo; - - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - EGL_NO_CONTEXT, - EGL_NATIVE_PIXMAP_KHR, - native_pixmap, NULL); - gbm_bo_destroy(bo); - if (image == EGL_NO_IMAGE_KHR) - return 0; - glamor_create_texture_from_image(glamor_egl, image, &texture); - glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); - - return texture; + struct gbm_bo *bo; + EGLNativePixmapType native_pixmap; + + glamor_egl = glamor_egl_get_screen_private(scrn); + bo = gbm_bo_create(glamor_egl->gbm, w, h, GBM_FORMAT_ARGB8888, + GBM_BO_USE_RENDERING | GBM_BO_USE_SCANOUT); + if (!bo) + return 0; + + /* If the following assignment raises an error or a warning + * then that means EGLNativePixmapType is not struct gbm_bo * + * on your platform: This code won't work and you should not + * compile with dri3 support enabled */ + native_pixmap = bo; + + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + EGL_NO_CONTEXT, + EGL_NATIVE_PIXMAP_KHR, + native_pixmap, NULL); + gbm_bo_destroy(bo); + if (image == EGL_NO_IMAGE_KHR) + return 0; + glamor_create_texture_from_image(glamor_egl, image, &texture); + glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); + + return texture; #else - return 0; /* this path should never happen */ + return 0; /* this path should never happen */ #endif } Bool glamor_egl_create_textured_screen(ScreenPtr screen, int handle, int stride) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - PixmapPtr screen_pixmap; - - glamor_egl = glamor_egl_get_screen_private(scrn); - screen_pixmap = screen->GetScreenPixmap(screen); - - if (!glamor_egl_create_textured_pixmap(screen_pixmap, handle, stride)) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, "Failed to create textured screen."); - return FALSE; - } - - glamor_egl->front_image = dixLookupPrivate(&screen_pixmap->devPrivates, - glamor_egl_pixmap_private_key); - glamor_set_screen_pixmap(screen_pixmap, glamor_egl->back_pixmap); - return TRUE; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + PixmapPtr screen_pixmap; + + glamor_egl = glamor_egl_get_screen_private(scrn); + screen_pixmap = screen->GetScreenPixmap(screen); + + if (!glamor_egl_create_textured_pixmap(screen_pixmap, handle, stride)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Failed to create textured screen."); + return FALSE; + } + + glamor_egl->front_image = dixLookupPrivate(&screen_pixmap->devPrivates, + glamor_egl_pixmap_private_key); + glamor_set_screen_pixmap(screen_pixmap, glamor_egl->back_pixmap); + return TRUE; } Bool glamor_egl_create_textured_screen_ext(ScreenPtr screen, - int handle, - int stride, - PixmapPtr *back_pixmap) + int handle, + int stride, PixmapPtr *back_pixmap) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; - glamor_egl = glamor_egl_get_screen_private(scrn); + glamor_egl = glamor_egl_get_screen_private(scrn); - glamor_egl->back_pixmap = back_pixmap; - if (!glamor_egl_create_textured_screen(screen, handle, stride)) - return FALSE; - return TRUE; + glamor_egl->back_pixmap = back_pixmap; + if (!glamor_egl_create_textured_screen(screen, handle, stride)) + return FALSE; + return TRUE; } static Bool glamor_egl_check_has_gem(int fd) { - struct drm_gem_flink flink; - flink.handle = 0; + struct drm_gem_flink flink; - ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink); - if (errno == ENOENT || errno == EINVAL) - return TRUE; - return FALSE; + flink.handle = 0; + + ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink); + if (errno == ENOENT || errno == EINVAL) + return TRUE; + return FALSE; } Bool glamor_egl_create_textured_pixmap(PixmapPtr pixmap, int handle, int stride) { - ScreenPtr screen = pixmap->drawable.pScreen; - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - EGLImageKHR image; - GLuint texture; - int name; - Bool ret = FALSE; - - glamor_egl = glamor_egl_get_screen_private(scrn); - - glamor_egl_make_current(screen); - if (glamor_egl->has_gem) { - if (!glamor_get_flink_name(glamor_egl->fd, handle, &name)) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Couldn't flink pixmap handle\n"); - glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); - assert(0); - return FALSE; - } - } else - name = handle; - - image = _glamor_egl_create_image(glamor_egl, - pixmap->drawable.width, - pixmap->drawable.height, - ((stride * 8 + 7) / pixmap->drawable.bitsPerPixel), - name, - pixmap->drawable.depth); - if (image == EGL_NO_IMAGE_KHR) { - glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); - goto done; - } - glamor_create_texture_from_image(glamor_egl, image, &texture); - glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); - glamor_set_pixmap_texture(pixmap, texture); - dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, - image); - ret = TRUE; - -done: - glamor_egl_restore_context(screen); - return ret; + ScreenPtr screen = pixmap->drawable.pScreen; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + EGLImageKHR image; + GLuint texture; + int name; + Bool ret = FALSE; + + glamor_egl = glamor_egl_get_screen_private(scrn); + + glamor_egl_make_current(screen); + if (glamor_egl->has_gem) { + if (!glamor_get_flink_name(glamor_egl->fd, handle, &name)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Couldn't flink pixmap handle\n"); + glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); + assert(0); + return FALSE; + } + } + else + name = handle; + + image = _glamor_egl_create_image(glamor_egl, + pixmap->drawable.width, + pixmap->drawable.height, + ((stride * 8 + + 7) / pixmap->drawable.bitsPerPixel), + name, pixmap->drawable.depth); + if (image == EGL_NO_IMAGE_KHR) { + glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); + goto done; + } + glamor_create_texture_from_image(glamor_egl, image, &texture); + glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); + glamor_set_pixmap_texture(pixmap, texture); + dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, image); + ret = TRUE; + + done: + glamor_egl_restore_context(screen); + return ret; } Bool glamor_egl_create_textured_pixmap_from_gbm_bo(PixmapPtr pixmap, void *bo) { - ScreenPtr screen = pixmap->drawable.pScreen; - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - EGLImageKHR image; - GLuint texture; - Bool ret = FALSE; - - glamor_egl = glamor_egl_get_screen_private(scrn); - - glamor_egl_make_current(screen); - - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - glamor_egl->context, - EGL_NATIVE_PIXMAP_KHR, - bo, NULL); - if (image == EGL_NO_IMAGE_KHR) { - glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); - goto done; - } - glamor_create_texture_from_image(glamor_egl, image, &texture); - glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); - glamor_set_pixmap_texture(pixmap, texture); - dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, - image); - ret = TRUE; - -done: - glamor_egl_restore_context(screen); - return ret; + ScreenPtr screen = pixmap->drawable.pScreen; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + EGLImageKHR image; + GLuint texture; + Bool ret = FALSE; + + glamor_egl = glamor_egl_get_screen_private(scrn); + + glamor_egl_make_current(screen); + + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + glamor_egl->context, + EGL_NATIVE_PIXMAP_KHR, bo, NULL); + if (image == EGL_NO_IMAGE_KHR) { + glamor_set_pixmap_type(pixmap, GLAMOR_DRM_ONLY); + goto done; + } + glamor_create_texture_from_image(glamor_egl, image, &texture); + glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); + glamor_set_pixmap_texture(pixmap, texture); + dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, image); + ret = TRUE; + + done: + glamor_egl_restore_context(screen); + return ret; } #ifdef GLAMOR_HAS_DRI3_SUPPORT -int glamor_get_fd_from_bo (int gbm_fd, struct gbm_bo *bo, int *fd); -void glamor_get_name_from_bo (int gbm_fd, struct gbm_bo *bo, int *name); +int glamor_get_fd_from_bo(int gbm_fd, struct gbm_bo *bo, int *fd); +void glamor_get_name_from_bo(int gbm_fd, struct gbm_bo *bo, int *name); int -glamor_get_fd_from_bo (int gbm_fd, struct gbm_bo *bo, int *fd) +glamor_get_fd_from_bo(int gbm_fd, struct gbm_bo *bo, int *fd) { - union gbm_bo_handle handle; - struct drm_prime_handle args; - - handle = gbm_bo_get_handle(bo); - args.handle = handle.u32; - args.flags = DRM_CLOEXEC; - if (ioctl (gbm_fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &args)) - return FALSE; - *fd = args.fd; - return TRUE; + union gbm_bo_handle handle; + struct drm_prime_handle args; + + handle = gbm_bo_get_handle(bo); + args.handle = handle.u32; + args.flags = DRM_CLOEXEC; + if (ioctl(gbm_fd, DRM_IOCTL_PRIME_HANDLE_TO_FD, &args)) + return FALSE; + *fd = args.fd; + return TRUE; } void -glamor_get_name_from_bo (int gbm_fd, struct gbm_bo *bo, int *name) +glamor_get_name_from_bo(int gbm_fd, struct gbm_bo *bo, int *name) { - union gbm_bo_handle handle; + union gbm_bo_handle handle; - handle = gbm_bo_get_handle(bo); - if (!glamor_get_flink_name(gbm_fd, handle.u32, name)) - *name = -1; + handle = gbm_bo_get_handle(bo); + if (!glamor_get_flink_name(gbm_fd, handle.u32, name)) + *name = -1; } #endif -int glamor_egl_dri3_fd_name_from_tex (ScreenPtr screen, - PixmapPtr pixmap, - unsigned int tex, - Bool want_name, - CARD16 *stride, - CARD32 *size) +int +glamor_egl_dri3_fd_name_from_tex(ScreenPtr screen, + PixmapPtr pixmap, + unsigned int tex, + Bool want_name, CARD16 *stride, CARD32 *size) { #ifdef GLAMOR_HAS_DRI3_SUPPORT - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - EGLImageKHR image; - struct gbm_bo* bo; - int fd = -1; - - EGLint attribs[] = { - EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, - EGL_GL_TEXTURE_LEVEL_KHR, 0, - EGL_NONE - }; - - glamor_egl = glamor_egl_get_screen_private(scrn); - - glamor_egl_make_current(screen); - - image = dixLookupPrivate(&pixmap->devPrivates, - glamor_egl_pixmap_private_key); - - if (image == EGL_NO_IMAGE_KHR || image == NULL) - { - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - glamor_egl->context, - EGL_GL_TEXTURE_2D_KHR, - (EGLClientBuffer)(uintptr_t)tex, attribs); - if (image == EGL_NO_IMAGE_KHR) - goto failure; - - dixSetPrivate(&pixmap->devPrivates, - glamor_egl_pixmap_private_key, - image); - glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); - } - - bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_EGL_IMAGE, image, 0); - if (!bo) - goto failure; - - pixmap->devKind = gbm_bo_get_stride(bo); - - if (want_name) - { - if (glamor_egl->has_gem) - glamor_get_name_from_bo(glamor_egl->fd, bo, &fd); - } - else - { - if (glamor_get_fd_from_bo(glamor_egl->fd, bo, &fd)) - { - *stride = pixmap->devKind; - *size = pixmap->devKind * gbm_bo_get_height(bo); - } - } - - gbm_bo_destroy(bo); -failure: - glamor_egl_restore_context(screen); - return fd; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + EGLImageKHR image; + struct gbm_bo *bo; + int fd = -1; + + EGLint attribs[] = { + EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, + EGL_GL_TEXTURE_LEVEL_KHR, 0, + EGL_NONE + }; + + glamor_egl = glamor_egl_get_screen_private(scrn); + + glamor_egl_make_current(screen); + + image = dixLookupPrivate(&pixmap->devPrivates, + glamor_egl_pixmap_private_key); + + if (image == EGL_NO_IMAGE_KHR || image == NULL) { + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + glamor_egl->context, + EGL_GL_TEXTURE_2D_KHR, + (EGLClientBuffer) (uintptr_t) + tex, attribs); + if (image == EGL_NO_IMAGE_KHR) + goto failure; + + dixSetPrivate(&pixmap->devPrivates, + glamor_egl_pixmap_private_key, image); + glamor_set_pixmap_type(pixmap, GLAMOR_TEXTURE_DRM); + } + + bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_EGL_IMAGE, image, 0); + if (!bo) + goto failure; + + pixmap->devKind = gbm_bo_get_stride(bo); + + if (want_name) { + if (glamor_egl->has_gem) + glamor_get_name_from_bo(glamor_egl->fd, bo, &fd); + } + else { + if (glamor_get_fd_from_bo(glamor_egl->fd, bo, &fd)) { + *stride = pixmap->devKind; + *size = pixmap->devKind * gbm_bo_get_height(bo); + } + } + + gbm_bo_destroy(bo); + failure: + glamor_egl_restore_context(screen); + return fd; #else - return -1; + return -1; #endif } -PixmapPtr glamor_egl_dri3_pixmap_from_fd (ScreenPtr screen, - int fd, - CARD16 width, - CARD16 height, - CARD16 stride, - CARD8 depth, - CARD8 bpp) +PixmapPtr +glamor_egl_dri3_pixmap_from_fd(ScreenPtr screen, + int fd, + CARD16 width, + CARD16 height, + CARD16 stride, CARD8 depth, CARD8 bpp) { #ifdef GLAMOR_HAS_DRI3_SUPPORT - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl; - struct gbm_bo* bo; - EGLImageKHR image; - PixmapPtr pixmap; - Bool ret = FALSE; - EGLint attribs[] = { - EGL_WIDTH, 0, - EGL_HEIGHT, 0, - EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888, - EGL_DMA_BUF_PLANE0_FD_EXT, 0, - EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, - EGL_DMA_BUF_PLANE0_PITCH_EXT, 0, - EGL_NONE - }; - - glamor_egl = glamor_egl_get_screen_private(scrn); - - if (!glamor_egl->dri3_capable) - return NULL; - - if (bpp != 32 || !(depth == 24 || depth == 32) || width == 0 || height == 0) - return NULL; - - attribs[1] = width; - attribs[3] = height; - attribs[7] = fd; - attribs[11] = stride; - image = glamor_egl->egl_create_image_khr(glamor_egl->display, - EGL_NO_CONTEXT, - EGL_LINUX_DMA_BUF_EXT, - NULL, attribs); - - if (image == EGL_NO_IMAGE_KHR) - return NULL; - - /* EGL_EXT_image_dma_buf_import can impose restrictions on the - * usage of the image. Use gbm_bo to bypass the limitations. */ - - bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_EGL_IMAGE, image, 0); - glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); - - if (!bo) - return NULL; - - pixmap = screen->CreatePixmap(screen, 0, 0, depth, 0); - screen->ModifyPixmapHeader (pixmap, width, height, 0, 0, stride, NULL); - - ret = glamor_egl_create_textured_pixmap_from_gbm_bo(pixmap, bo); - gbm_bo_destroy(bo); - - if (ret) - return pixmap; - else - { - screen->DestroyPixmap(pixmap); - return NULL; - } + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl; + struct gbm_bo *bo; + EGLImageKHR image; + PixmapPtr pixmap; + Bool ret = FALSE; + + EGLint attribs[] = { + EGL_WIDTH, 0, + EGL_HEIGHT, 0, + EGL_LINUX_DRM_FOURCC_EXT, DRM_FORMAT_ARGB8888, + EGL_DMA_BUF_PLANE0_FD_EXT, 0, + EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0, + EGL_DMA_BUF_PLANE0_PITCH_EXT, 0, + EGL_NONE + }; + + glamor_egl = glamor_egl_get_screen_private(scrn); + + if (!glamor_egl->dri3_capable) + return NULL; + + if (bpp != 32 || !(depth == 24 || depth == 32) || width == 0 || height == 0) + return NULL; + + attribs[1] = width; + attribs[3] = height; + attribs[7] = fd; + attribs[11] = stride; + image = glamor_egl->egl_create_image_khr(glamor_egl->display, + EGL_NO_CONTEXT, + EGL_LINUX_DMA_BUF_EXT, + NULL, attribs); + + if (image == EGL_NO_IMAGE_KHR) + return NULL; + + /* EGL_EXT_image_dma_buf_import can impose restrictions on the + * usage of the image. Use gbm_bo to bypass the limitations. */ + + bo = gbm_bo_import(glamor_egl->gbm, GBM_BO_IMPORT_EGL_IMAGE, image, 0); + glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); + + if (!bo) + return NULL; + + pixmap = screen->CreatePixmap(screen, 0, 0, depth, 0); + screen->ModifyPixmapHeader(pixmap, width, height, 0, 0, stride, NULL); + + ret = glamor_egl_create_textured_pixmap_from_gbm_bo(pixmap, bo); + gbm_bo_destroy(bo); + + if (ret) + return pixmap; + else { + screen->DestroyPixmap(pixmap); + return NULL; + } #else - return NULL; + return NULL; #endif } static void _glamor_egl_destroy_pixmap_image(PixmapPtr pixmap) { - ScrnInfoPtr scrn = xf86ScreenToScrn(pixmap->drawable.pScreen); - EGLImageKHR image; - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - - image = dixLookupPrivate(&pixmap->devPrivates, - glamor_egl_pixmap_private_key); - if (image != EGL_NO_IMAGE_KHR && image != NULL) { - /* Before destroy an image which was attached to - * a texture. we must call glFlush to make sure the - * operation on that texture has been done.*/ - glamor_block_handler(pixmap->drawable.pScreen); - glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); - dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, NULL); - } + ScrnInfoPtr scrn = xf86ScreenToScrn(pixmap->drawable.pScreen); + EGLImageKHR image; + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + + image = dixLookupPrivate(&pixmap->devPrivates, + glamor_egl_pixmap_private_key); + if (image != EGL_NO_IMAGE_KHR && image != NULL) { + /* Before destroy an image which was attached to + * a texture. we must call glFlush to make sure the + * operation on that texture has been done.*/ + glamor_block_handler(pixmap->drawable.pScreen); + glamor_egl->egl_destroy_image_khr(glamor_egl->display, image); + dixSetPrivate(&pixmap->devPrivates, glamor_egl_pixmap_private_key, + NULL); + } } _X_EXPORT void glamor_egl_exchange_buffers(PixmapPtr front, PixmapPtr back) { - ScrnInfoPtr scrn = xf86ScreenToScrn(front->drawable.pScreen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - EGLImageKHR old_front_image; - EGLImageKHR new_front_image; - - glamor_pixmap_exchange_fbos(front, back); - new_front_image = dixLookupPrivate(&back->devPrivates, glamor_egl_pixmap_private_key); - old_front_image = dixLookupPrivate(&front->devPrivates, glamor_egl_pixmap_private_key); - dixSetPrivate(&front->devPrivates, glamor_egl_pixmap_private_key, new_front_image); - dixSetPrivate(&back->devPrivates, glamor_egl_pixmap_private_key, old_front_image); - glamor_set_pixmap_type(front, GLAMOR_TEXTURE_DRM); - glamor_set_pixmap_type(back, GLAMOR_TEXTURE_DRM); - glamor_egl->front_image = new_front_image; + ScrnInfoPtr scrn = xf86ScreenToScrn(front->drawable.pScreen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + EGLImageKHR old_front_image; + EGLImageKHR new_front_image; + + glamor_pixmap_exchange_fbos(front, back); + new_front_image = + dixLookupPrivate(&back->devPrivates, glamor_egl_pixmap_private_key); + old_front_image = + dixLookupPrivate(&front->devPrivates, glamor_egl_pixmap_private_key); + dixSetPrivate(&front->devPrivates, glamor_egl_pixmap_private_key, + new_front_image); + dixSetPrivate(&back->devPrivates, glamor_egl_pixmap_private_key, + old_front_image); + glamor_set_pixmap_type(front, GLAMOR_TEXTURE_DRM); + glamor_set_pixmap_type(back, GLAMOR_TEXTURE_DRM); + glamor_egl->front_image = new_front_image; } void glamor_egl_destroy_textured_pixmap(PixmapPtr pixmap) { - if (pixmap->refcnt == 1) - _glamor_egl_destroy_pixmap_image(pixmap); - glamor_destroy_textured_pixmap(pixmap); + if (pixmap->refcnt == 1) + _glamor_egl_destroy_pixmap_image(pixmap); + glamor_destroy_textured_pixmap(pixmap); } static Bool -glamor_egl_close_screen(CLOSE_SCREEN_ARGS_DECL) +glamor_egl_close_screen(ScreenPtr screen) { - ScrnInfoPtr scrn; - struct glamor_egl_screen_private *glamor_egl; - PixmapPtr screen_pixmap; - EGLImageKHR back_image; - - scrn = xf86ScreenToScrn(screen); - glamor_egl = glamor_egl_get_screen_private(scrn); - screen_pixmap = screen->GetScreenPixmap(screen); - - glamor_egl->egl_destroy_image_khr(glamor_egl->display, glamor_egl->front_image); - dixSetPrivate(&screen_pixmap->devPrivates, glamor_egl_pixmap_private_key, NULL); - glamor_egl->front_image = NULL; - if (glamor_egl->back_pixmap && *glamor_egl->back_pixmap) { - back_image = dixLookupPrivate(&(*glamor_egl->back_pixmap)->devPrivates, - glamor_egl_pixmap_private_key); - if (back_image != NULL && back_image != EGL_NO_IMAGE_KHR) { - glamor_egl->egl_destroy_image_khr(glamor_egl->display, back_image); - dixSetPrivate(&(*glamor_egl->back_pixmap)->devPrivates, - glamor_egl_pixmap_private_key, NULL); - } - } - - screen->CloseScreen = glamor_egl->saved_close_screen; - - return screen->CloseScreen(CLOSE_SCREEN_ARGS); + ScrnInfoPtr scrn; + struct glamor_egl_screen_private *glamor_egl; + PixmapPtr screen_pixmap; + EGLImageKHR back_image; + + scrn = xf86ScreenToScrn(screen); + glamor_egl = glamor_egl_get_screen_private(scrn); + screen_pixmap = screen->GetScreenPixmap(screen); + + glamor_egl->egl_destroy_image_khr(glamor_egl->display, + glamor_egl->front_image); + dixSetPrivate(&screen_pixmap->devPrivates, glamor_egl_pixmap_private_key, + NULL); + glamor_egl->front_image = NULL; + if (glamor_egl->back_pixmap && *glamor_egl->back_pixmap) { + back_image = dixLookupPrivate(&(*glamor_egl->back_pixmap)->devPrivates, + glamor_egl_pixmap_private_key); + if (back_image != NULL && back_image != EGL_NO_IMAGE_KHR) { + glamor_egl->egl_destroy_image_khr(glamor_egl->display, back_image); + dixSetPrivate(&(*glamor_egl->back_pixmap)->devPrivates, + glamor_egl_pixmap_private_key, NULL); + } + } + + screen->CloseScreen = glamor_egl->saved_close_screen; + + return screen->CloseScreen(screen); } static Bool glamor_egl_has_extension(struct glamor_egl_screen_private *glamor_egl, - const char *extension) + const char *extension) { - const char *pext; - int ext_len; - - ext_len = strlen(extension); - pext = - (const char *) eglQueryString(glamor_egl->display, - EGL_EXTENSIONS); - if (pext == NULL || extension == NULL) - return FALSE; - while ((pext = strstr(pext, extension)) != NULL) { - if (pext[ext_len] == ' ' || pext[ext_len] == '\0') - return TRUE; - pext += ext_len; - } - return FALSE; + const char *pext; + int ext_len; + + ext_len = strlen(extension); + pext = (const char *) eglQueryString(glamor_egl->display, EGL_EXTENSIONS); + if (pext == NULL || extension == NULL) + return FALSE; + while ((pext = strstr(pext, extension)) != NULL) { + if (pext[ext_len] == ' ' || pext[ext_len] == '\0') + return TRUE; + pext += ext_len; + } + return FALSE; } void glamor_egl_screen_init(ScreenPtr screen) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); - glamor_egl->saved_close_screen = screen->CloseScreen; - screen->CloseScreen = glamor_egl_close_screen; + glamor_egl->saved_close_screen = screen->CloseScreen; + screen->CloseScreen = glamor_egl_close_screen; } static void -glamor_egl_free_screen(FREE_SCREEN_ARGS_DECL) +glamor_egl_free_screen(ScrnInfoPtr scrn) { - ScrnInfoPtr scrn; - struct glamor_egl_screen_private *glamor_egl; -#ifndef XF86_SCRN_INTERFACE - scrn = xf86Screens[arg]; -#else - scrn = arg; -#endif + struct glamor_egl_screen_private *glamor_egl; - glamor_egl = glamor_egl_get_screen_private(scrn); - if (glamor_egl != NULL) { + glamor_egl = glamor_egl_get_screen_private(scrn); + if (glamor_egl != NULL) { - eglMakeCurrent(glamor_egl->display, - EGL_NO_SURFACE, EGL_NO_SURFACE, - EGL_NO_CONTEXT); + eglMakeCurrent(glamor_egl->display, + EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); #ifdef GLAMOR_HAS_GBM - if (glamor_egl->gbm) - gbm_device_destroy(glamor_egl->gbm); + if (glamor_egl->gbm) + gbm_device_destroy(glamor_egl->gbm); #endif - scrn->FreeScreen = glamor_egl->saved_free_screen; - free(glamor_egl); - scrn->FreeScreen(FREE_SCREEN_ARGS); - } + scrn->FreeScreen = glamor_egl->saved_free_screen; + free(glamor_egl); + scrn->FreeScreen(scrn); + } } Bool glamor_egl_init(ScrnInfoPtr scrn, int fd) { - struct glamor_egl_screen_private *glamor_egl; - const char *version; - EGLint config_attribs[] = { + struct glamor_egl_screen_private *glamor_egl; + const char *version; + + EGLint config_attribs[] = { #ifdef GLAMOR_GLES2 - EGL_CONTEXT_CLIENT_VERSION, 2, + EGL_CONTEXT_CLIENT_VERSION, 2, #endif - EGL_NONE - }; - - glamor_identify(0); - glamor_egl = calloc(sizeof(*glamor_egl), 1); - if (glamor_egl == NULL) - return FALSE; - if (xf86GlamorEGLPrivateIndex == -1) - xf86GlamorEGLPrivateIndex = - xf86AllocateScrnInfoPrivateIndex(); - - scrn->privates[xf86GlamorEGLPrivateIndex].ptr = glamor_egl; - glamor_egl->fd = fd; + EGL_NONE + }; + + glamor_identify(0); + glamor_egl = calloc(sizeof(*glamor_egl), 1); + if (glamor_egl == NULL) + return FALSE; + if (xf86GlamorEGLPrivateIndex == -1) + xf86GlamorEGLPrivateIndex = xf86AllocateScrnInfoPrivateIndex(); + + scrn->privates[xf86GlamorEGLPrivateIndex].ptr = glamor_egl; + glamor_egl->fd = fd; #ifdef GLAMOR_HAS_GBM - glamor_egl->gbm = gbm_create_device(glamor_egl->fd); - if (glamor_egl->gbm == NULL) { - ErrorF("couldn't get display device\n"); - return FALSE; - } - glamor_egl->display = eglGetDisplay(glamor_egl->gbm); + glamor_egl->gbm = gbm_create_device(glamor_egl->fd); + if (glamor_egl->gbm == NULL) { + ErrorF("couldn't get display device\n"); + return FALSE; + } + glamor_egl->display = eglGetDisplay(glamor_egl->gbm); #else - glamor_egl->display = eglGetDisplay((EGLNativeDisplayType)(intptr_t)fd); + glamor_egl->display = eglGetDisplay((EGLNativeDisplayType) (intptr_t) fd); #endif - glamor_egl->has_gem = glamor_egl_check_has_gem(fd); + glamor_egl->has_gem = glamor_egl_check_has_gem(fd); #ifndef GLAMOR_GLES2 - eglBindAPI(EGL_OPENGL_API); + eglBindAPI(EGL_OPENGL_API); #else - eglBindAPI(EGL_OPENGL_ES_API); + eglBindAPI(EGL_OPENGL_ES_API); #endif - if (!eglInitialize - (glamor_egl->display, &glamor_egl->major, &glamor_egl->minor)) - { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "eglInitialize() failed\n"); - return FALSE; - } + if (!eglInitialize + (glamor_egl->display, &glamor_egl->major, &glamor_egl->minor)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, "eglInitialize() failed\n"); + return FALSE; + } - version = eglQueryString(glamor_egl->display, EGL_VERSION); - xf86Msg(X_INFO, "%s: EGL version %s:\n", glamor_name, version); + version = eglQueryString(glamor_egl->display, EGL_VERSION); + xf86Msg(X_INFO, "%s: EGL version %s:\n", glamor_name, version); #define GLAMOR_CHECK_EGL_EXTENSION(EXT) \ if (!glamor_egl_has_extension(glamor_egl, "EGL_" #EXT)) { \ @@ -765,96 +737,89 @@ glamor_egl_init(ScrnInfoPtr scrn, int fd) return FALSE; \ } - GLAMOR_CHECK_EGL_EXTENSION(MESA_drm_image); - GLAMOR_CHECK_EGL_EXTENSION(KHR_gl_renderbuffer_image); + GLAMOR_CHECK_EGL_EXTENSION(MESA_drm_image); + GLAMOR_CHECK_EGL_EXTENSION(KHR_gl_renderbuffer_image); #ifdef GLAMOR_GLES2 - GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, KHR_surfaceless_gles2); + GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, KHR_surfaceless_gles2); #else - GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, KHR_surfaceless_opengl); + GLAMOR_CHECK_EGL_EXTENSIONS(KHR_surfaceless_context, + KHR_surfaceless_opengl); #endif #ifdef GLAMOR_HAS_DRI3_SUPPORT - if (glamor_egl_has_extension(glamor_egl, "EGL_KHR_gl_texture_2D_image") && - glamor_egl_has_extension(glamor_egl, "EGL_EXT_image_dma_buf_import") ) - glamor_egl->dri3_capable = TRUE; + if (glamor_egl_has_extension(glamor_egl, "EGL_KHR_gl_texture_2D_image") && + glamor_egl_has_extension(glamor_egl, "EGL_EXT_image_dma_buf_import")) + glamor_egl->dri3_capable = TRUE; #endif - glamor_egl->egl_create_image_khr = (PFNEGLCREATEIMAGEKHRPROC) - eglGetProcAddress("eglCreateImageKHR"); - - glamor_egl->egl_destroy_image_khr = (PFNEGLDESTROYIMAGEKHRPROC) - eglGetProcAddress("eglDestroyImageKHR"); - - glamor_egl->egl_image_target_texture2d_oes = - (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) - eglGetProcAddress("glEGLImageTargetTexture2DOES"); - - if (!glamor_egl->egl_create_image_khr - || !glamor_egl->egl_image_target_texture2d_oes) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "eglGetProcAddress() failed\n"); - return FALSE; - } - - glamor_egl->context = eglCreateContext(glamor_egl->display, - NULL, EGL_NO_CONTEXT, - config_attribs); - if (glamor_egl->context == EGL_NO_CONTEXT) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Failed to create EGL context\n"); - return FALSE; - } - - if (!eglMakeCurrent(glamor_egl->display, - EGL_NO_SURFACE, EGL_NO_SURFACE, - glamor_egl->context)) { - xf86DrvMsg(scrn->scrnIndex, X_ERROR, - "Failed to make EGL context current\n"); - return FALSE; - } -#ifdef GLX_USE_SHARED_DISPATCH - GET_CURRENT_CONTEXT(glamor_egl->glamor_context); -#endif - glamor_egl->saved_free_screen = scrn->FreeScreen; - scrn->FreeScreen = glamor_egl_free_screen; + glamor_egl->egl_create_image_khr = (PFNEGLCREATEIMAGEKHRPROC) + eglGetProcAddress("eglCreateImageKHR"); + + glamor_egl->egl_destroy_image_khr = (PFNEGLDESTROYIMAGEKHRPROC) + eglGetProcAddress("eglDestroyImageKHR"); + + glamor_egl->egl_image_target_texture2d_oes = + (PFNGLEGLIMAGETARGETTEXTURE2DOESPROC) + eglGetProcAddress("glEGLImageTargetTexture2DOES"); + + if (!glamor_egl->egl_create_image_khr + || !glamor_egl->egl_image_target_texture2d_oes) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, "eglGetProcAddress() failed\n"); + return FALSE; + } + + glamor_egl->context = eglCreateContext(glamor_egl->display, + NULL, EGL_NO_CONTEXT, + config_attribs); + if (glamor_egl->context == EGL_NO_CONTEXT) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, "Failed to create EGL context\n"); + return FALSE; + } + + if (!eglMakeCurrent(glamor_egl->display, + EGL_NO_SURFACE, EGL_NO_SURFACE, glamor_egl->context)) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Failed to make EGL context current\n"); + return FALSE; + } + glamor_egl->saved_free_screen = scrn->FreeScreen; + scrn->FreeScreen = glamor_egl_free_screen; #ifdef GLAMOR_GLES2 - xf86DrvMsg(scrn->scrnIndex, X_INFO, "Using GLES2.\n"); -#ifdef GLX_USE_SHARED_DISPATCH - xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Glamor is using GLES2 but GLX needs GL. " - "Indirect GLX may not work correctly.\n"); + xf86DrvMsg(scrn->scrnIndex, X_INFO, "Using GLES2.\n"); + xf86DrvMsg(scrn->scrnIndex, X_WARNING, + "Glamor is using GLES2 but GLX needs GL. " + "Indirect GLX may not work correctly.\n"); #endif -#endif - return TRUE; + return TRUE; } Bool glamor_egl_init_textured_pixmap(ScreenPtr screen) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - if (!dixRegisterPrivateKey - (glamor_egl_pixmap_private_key, PRIVATE_PIXMAP, 0)) { - LogMessage(X_WARNING, - "glamor%d: Failed to allocate egl pixmap private\n", - screen->myNum); - return FALSE; - } - if (glamor_egl->dri3_capable) - glamor_enable_dri3(screen); - return TRUE; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + if (!dixRegisterPrivateKey + (glamor_egl_pixmap_private_key, PRIVATE_PIXMAP, 0)) { + LogMessage(X_WARNING, + "glamor%d: Failed to allocate egl pixmap private\n", + screen->myNum); + return FALSE; + } + if (glamor_egl->dri3_capable) + glamor_enable_dri3(screen); + return TRUE; } Bool glamor_gl_dispatch_init(ScreenPtr screen, - struct glamor_gl_dispatch *dispatch, - int gl_version) + struct glamor_gl_dispatch *dispatch, int gl_version) { - ScrnInfoPtr scrn = xf86ScreenToScrn(screen); - struct glamor_egl_screen_private *glamor_egl = - glamor_egl_get_screen_private(scrn); - if (!glamor_gl_dispatch_init_impl - (dispatch, gl_version, (get_proc_address_t)eglGetProcAddress)) - return FALSE; - glamor_egl->dispatch = dispatch; - return TRUE; + ScrnInfoPtr scrn = xf86ScreenToScrn(screen); + struct glamor_egl_screen_private *glamor_egl = + glamor_egl_get_screen_private(scrn); + if (!glamor_gl_dispatch_init_impl + (dispatch, gl_version, (get_proc_address_t) eglGetProcAddress)) + return FALSE; + glamor_egl->dispatch = dispatch; + return TRUE; } diff --git a/xorg-server/glamor/glamor_egl_stubs.c b/xorg-server/glamor/glamor_egl_stubs.c new file mode 100644 index 000000000..1449d0874 --- /dev/null +++ b/xorg-server/glamor/glamor_egl_stubs.c @@ -0,0 +1,64 @@ +/* + * Copyright © 2013 Intel Corporation + * + * 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 glamor_egl_stubs.c + * + * Stubbed out glamor_egl.c functions for servers other than Xorg. + */ + +#include "glamor_priv.h" + +void +glamor_egl_screen_init(ScreenPtr screen) +{ +} + +void +glamor_egl_destroy_textured_pixmap(PixmapPtr pixmap) +{ +} + +void +glamor_egl_make_current(ScreenPtr screen) +{ +} + +void +glamor_egl_restore_context(ScreenPtr screen) +{ +} + +int +glamor_egl_dri3_fd_name_from_tex(ScreenPtr screen, + PixmapPtr pixmap, + unsigned int tex, + Bool want_name, CARD16 *stride, CARD32 *size) +{ + return 0; +} + +unsigned int +glamor_egl_create_argb8888_based_texture(ScreenPtr screen, int w, int h) +{ + return 0; +} diff --git a/xorg-server/glamor/glamor_eglmodule.c b/xorg-server/glamor/glamor_eglmodule.c index 9a0dec9f2..5ddd60235 100644 --- a/xorg-server/glamor/glamor_eglmodule.c +++ b/xorg-server/glamor/glamor_eglmodule.c @@ -27,9 +27,7 @@ * Zhigang Gong <zhigang.gong@gmail.com> */ -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif +#include "dix-config.h" #include <xorg-server.h> #define GLAMOR_FOR_XORG @@ -37,16 +35,16 @@ #include "glamor.h" static XF86ModuleVersionInfo VersRec = { - GLAMOR_EGL_MODULE_NAME, - MODULEVENDORSTRING, - MODINFOSTRING1, - MODINFOSTRING2, - XORG_VERSION_CURRENT, - PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL, - ABI_CLASS_ANSIC, /* Only need the ansic layer */ - ABI_ANSIC_VERSION, - MOD_CLASS_NONE, - {0, 0, 0, 0} /* signature, to be patched into the file by a tool */ + GLAMOR_EGL_MODULE_NAME, + MODULEVENDORSTRING, + MODINFOSTRING1, + MODINFOSTRING2, + XORG_VERSION_CURRENT, + PACKAGE_VERSION_MAJOR, PACKAGE_VERSION_MINOR, PACKAGE_VERSION_PATCHLEVEL, + ABI_CLASS_ANSIC, /* Only need the ansic layer */ + ABI_ANSIC_VERSION, + MOD_CLASS_NONE, + {0, 0, 0, 0} /* signature, to be patched into the file by a tool */ }; _X_EXPORT XF86ModuleData glamoreglModuleData = { &VersRec, NULL, NULL }; diff --git a/xorg-server/glamor/glamor_fbo.c b/xorg-server/glamor/glamor_fbo.c index d1b087ebe..d94e53071 100644 --- a/xorg-server/glamor/glamor_fbo.c +++ b/xorg-server/glamor/glamor_fbo.c @@ -44,547 +44,552 @@ &pos->member != (head); \ pos = __container_of(pos->member.prev, pos, member)) - #define xorg_list_for_each_entry_safe_reverse(pos, tmp, head, member) \ for (pos = __container_of((head)->prev, pos, member), \ tmp = __container_of(pos->member.prev, pos, member); \ &pos->member != (head); \ pos = tmp, tmp = __container_of(pos->member.prev, tmp, member)) -inline static int cache_wbucket(int size) +inline static int +cache_wbucket(int size) { - int order = __fls(size / 32); - if (order >= CACHE_BUCKET_WCOUNT) - order = CACHE_BUCKET_WCOUNT - 1; - return order; + int order = __fls(size / 32); + + if (order >= CACHE_BUCKET_WCOUNT) + order = CACHE_BUCKET_WCOUNT - 1; + return order; } -inline static int cache_hbucket(int size) +inline static int +cache_hbucket(int size) { - int order = __fls(size / 32); - if (order >= CACHE_BUCKET_HCOUNT) - order = CACHE_BUCKET_HCOUNT - 1; - return order; + int order = __fls(size / 32); + + if (order >= CACHE_BUCKET_HCOUNT) + order = CACHE_BUCKET_HCOUNT - 1; + return order; } static glamor_pixmap_fbo * glamor_pixmap_fbo_cache_get(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag) + int w, int h, GLenum format, int flag) { - struct xorg_list *cache; - glamor_pixmap_fbo *fbo_entry, *ret_fbo = NULL; - int n_format; + struct xorg_list *cache; + glamor_pixmap_fbo *fbo_entry, *ret_fbo = NULL; + int n_format; + #ifdef NO_FBO_CACHE - return NULL; + return NULL; #else - n_format = cache_format(format); - if (n_format == -1) - return NULL; - cache = &glamor_priv->fbo_cache[n_format] - [cache_wbucket(w)] - [cache_hbucket(h)]; - if (!(flag & GLAMOR_CACHE_EXACT_SIZE)) { - xorg_list_for_each_entry(fbo_entry, cache, list) { - if (fbo_entry->width >= w && fbo_entry->height >= h) { - - DEBUGF("Request w %d h %d format %x \n", w, h, format); - DEBUGF("got cache entry %p w %d h %d fbo %d tex %d format %x\n", - fbo_entry, fbo_entry->width, fbo_entry->height, - fbo_entry->fb, fbo_entry->tex); - xorg_list_del(&fbo_entry->list); - ret_fbo = fbo_entry; - break; - } - } - } - else { - xorg_list_for_each_entry(fbo_entry, cache, list) { - if (fbo_entry->width == w && fbo_entry->height == h) { - - DEBUGF("Request w %d h %d format %x \n", w, h, format); - DEBUGF("got cache entry %p w %d h %d fbo %d tex %d format %x\n", - fbo_entry, fbo_entry->width, fbo_entry->height, - fbo_entry->fb, fbo_entry->tex, fbo_entry->format); - assert(format == fbo_entry->format); - xorg_list_del(&fbo_entry->list); - ret_fbo = fbo_entry; - break; - } - } - } - - if (ret_fbo) - glamor_priv->fbo_cache_watermark -= ret_fbo->width * ret_fbo->height; - - assert(glamor_priv->fbo_cache_watermark >= 0); - - return ret_fbo; + n_format = cache_format(format); + if (n_format == -1) + return NULL; + cache = &glamor_priv->fbo_cache[n_format] + [cache_wbucket(w)] + [cache_hbucket(h)]; + if (!(flag & GLAMOR_CACHE_EXACT_SIZE)) { + xorg_list_for_each_entry(fbo_entry, cache, list) { + if (fbo_entry->width >= w && fbo_entry->height >= h) { + + DEBUGF("Request w %d h %d format %x \n", w, h, format); + DEBUGF("got cache entry %p w %d h %d fbo %d tex %d format %x\n", + fbo_entry, fbo_entry->width, fbo_entry->height, + fbo_entry->fb, fbo_entry->tex); + xorg_list_del(&fbo_entry->list); + ret_fbo = fbo_entry; + break; + } + } + } + else { + xorg_list_for_each_entry(fbo_entry, cache, list) { + if (fbo_entry->width == w && fbo_entry->height == h) { + + DEBUGF("Request w %d h %d format %x \n", w, h, format); + DEBUGF("got cache entry %p w %d h %d fbo %d tex %d format %x\n", + fbo_entry, fbo_entry->width, fbo_entry->height, + fbo_entry->fb, fbo_entry->tex, fbo_entry->format); + assert(format == fbo_entry->format); + xorg_list_del(&fbo_entry->list); + ret_fbo = fbo_entry; + break; + } + } + } + + if (ret_fbo) + glamor_priv->fbo_cache_watermark -= ret_fbo->width * ret_fbo->height; + + assert(glamor_priv->fbo_cache_watermark >= 0); + + return ret_fbo; #endif } void glamor_purge_fbo(glamor_pixmap_fbo *fbo) { - glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); - if (fbo->fb) - dispatch->glDeleteFramebuffers(1, &fbo->fb); - if (fbo->tex) - dispatch->glDeleteTextures(1, &fbo->tex); - if (fbo->pbo) - dispatch->glDeleteBuffers(1, &fbo->pbo); - glamor_put_dispatch(fbo->glamor_priv); - - free(fbo); + glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); + + if (fbo->fb) + dispatch->glDeleteFramebuffers(1, &fbo->fb); + if (fbo->tex) + dispatch->glDeleteTextures(1, &fbo->tex); + if (fbo->pbo) + dispatch->glDeleteBuffers(1, &fbo->pbo); + glamor_put_dispatch(fbo->glamor_priv); + + free(fbo); } static void glamor_pixmap_fbo_cache_put(glamor_pixmap_fbo *fbo) { - struct xorg_list *cache; - int n_format; + struct xorg_list *cache; + int n_format; #ifdef NO_FBO_CACHE - glamor_purge_fbo(fbo); - return; + glamor_purge_fbo(fbo); + return; #else - n_format = cache_format(fbo->format); - - if (fbo->fb == 0 || n_format == -1 - || fbo->glamor_priv->fbo_cache_watermark >= FBO_CACHE_THRESHOLD) { - fbo->glamor_priv->tick += GLAMOR_CACHE_EXPIRE_MAX; - glamor_fbo_expire(fbo->glamor_priv); - glamor_purge_fbo(fbo); - return; - } - - cache = &fbo->glamor_priv->fbo_cache[n_format] - [cache_wbucket(fbo->width)] - [cache_hbucket(fbo->height)]; - DEBUGF("Put cache entry %p to cache %p w %d h %d format %x fbo %d tex %d \n", fbo, cache, - fbo->width, fbo->height, fbo->format, fbo->fb, fbo->tex); - - fbo->glamor_priv->fbo_cache_watermark += fbo->width * fbo->height; - xorg_list_add(&fbo->list, cache); - fbo->expire = fbo->glamor_priv->tick + GLAMOR_CACHE_EXPIRE_MAX; + n_format = cache_format(fbo->format); + + if (fbo->fb == 0 || n_format == -1 + || fbo->glamor_priv->fbo_cache_watermark >= FBO_CACHE_THRESHOLD) { + fbo->glamor_priv->tick += GLAMOR_CACHE_EXPIRE_MAX; + glamor_fbo_expire(fbo->glamor_priv); + glamor_purge_fbo(fbo); + return; + } + + cache = &fbo->glamor_priv->fbo_cache[n_format] + [cache_wbucket(fbo->width)] + [cache_hbucket(fbo->height)]; + DEBUGF + ("Put cache entry %p to cache %p w %d h %d format %x fbo %d tex %d \n", + fbo, cache, fbo->width, fbo->height, fbo->format, fbo->fb, fbo->tex); + + fbo->glamor_priv->fbo_cache_watermark += fbo->width * fbo->height; + xorg_list_add(&fbo->list, cache); + fbo->expire = fbo->glamor_priv->tick + GLAMOR_CACHE_EXPIRE_MAX; #endif } static void glamor_pixmap_ensure_fb(glamor_pixmap_fbo *fbo) { - glamor_gl_dispatch *dispatch; - int status; - - dispatch = glamor_get_dispatch(fbo->glamor_priv); - - if (fbo->fb == 0) - dispatch->glGenFramebuffers(1, &fbo->fb); - assert(fbo->tex != 0); - dispatch->glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); - dispatch->glFramebufferTexture2D(GL_FRAMEBUFFER, - GL_COLOR_ATTACHMENT0, - GL_TEXTURE_2D, fbo->tex, - 0); - status = dispatch->glCheckFramebufferStatus(GL_FRAMEBUFFER); - if (status != GL_FRAMEBUFFER_COMPLETE) { - const char *str; - switch (status) { - case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: - str = "incomplete attachment"; - break; - case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: - str = "incomplete/missing attachment"; - break; - case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: - str = "incomplete draw buffer"; - break; - case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: - str = "incomplete read buffer"; - break; - case GL_FRAMEBUFFER_UNSUPPORTED: - str = "unsupported"; - break; - case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: - str = "incomplete multiple"; - break; - default: - str = "unknown error"; - break; - } - - FatalError("destination is framebuffer incomplete: %s [%x]\n", - str, status); - } - glamor_put_dispatch(fbo->glamor_priv); + glamor_gl_dispatch *dispatch; + int status; + + dispatch = glamor_get_dispatch(fbo->glamor_priv); + + if (fbo->fb == 0) + dispatch->glGenFramebuffers(1, &fbo->fb); + assert(fbo->tex != 0); + dispatch->glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); + dispatch->glFramebufferTexture2D(GL_FRAMEBUFFER, + GL_COLOR_ATTACHMENT0, + GL_TEXTURE_2D, fbo->tex, 0); + status = dispatch->glCheckFramebufferStatus(GL_FRAMEBUFFER); + if (status != GL_FRAMEBUFFER_COMPLETE) { + const char *str; + + switch (status) { + case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: + str = "incomplete attachment"; + break; + case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: + str = "incomplete/missing attachment"; + break; + case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: + str = "incomplete draw buffer"; + break; + case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: + str = "incomplete read buffer"; + break; + case GL_FRAMEBUFFER_UNSUPPORTED: + str = "unsupported"; + break; + case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: + str = "incomplete multiple"; + break; + default: + str = "unknown error"; + break; + } + + FatalError("destination is framebuffer incomplete: %s [%x]\n", + str, status); + } + glamor_put_dispatch(fbo->glamor_priv); } glamor_pixmap_fbo * glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, GLint tex, int flag) + int w, int h, GLenum format, GLint tex, int flag) { - glamor_pixmap_fbo *fbo; + glamor_pixmap_fbo *fbo; - fbo = calloc(1, sizeof(*fbo)); - if (fbo == NULL) - return NULL; + fbo = calloc(1, sizeof(*fbo)); + if (fbo == NULL) + return NULL; - xorg_list_init(&fbo->list); + xorg_list_init(&fbo->list); - fbo->tex = tex; - fbo->width = w; - fbo->height = h; - fbo->format = format; - fbo->glamor_priv = glamor_priv; + fbo->tex = tex; + fbo->width = w; + fbo->height = h; + fbo->format = format; + fbo->glamor_priv = glamor_priv; - if (flag == GLAMOR_CREATE_PIXMAP_MAP) { - glamor_gl_dispatch *dispatch; - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glGenBuffers(1, &fbo->pbo); - glamor_put_dispatch(glamor_priv); - goto done; - } + if (flag == GLAMOR_CREATE_PIXMAP_MAP) { + glamor_gl_dispatch *dispatch; - if (flag != GLAMOR_CREATE_FBO_NO_FBO) - glamor_pixmap_ensure_fb(fbo); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glGenBuffers(1, &fbo->pbo); + glamor_put_dispatch(glamor_priv); + goto done; + } -done: - return fbo; -} + if (flag != GLAMOR_CREATE_FBO_NO_FBO) + glamor_pixmap_ensure_fb(fbo); + done: + return fbo; +} void glamor_fbo_expire(glamor_screen_private *glamor_priv) { - struct xorg_list *cache; - glamor_pixmap_fbo *fbo_entry, *tmp; - int i,j,k; - - for(i = 0; i < CACHE_FORMAT_COUNT; i++) - for(j = 0; j < CACHE_BUCKET_WCOUNT; j++) - for(k = 0; k < CACHE_BUCKET_HCOUNT; k++) { - cache = &glamor_priv->fbo_cache[i][j][k]; - xorg_list_for_each_entry_safe_reverse(fbo_entry, tmp, cache, list) { - if (GLAMOR_TICK_AFTER(fbo_entry->expire, glamor_priv->tick)) { - break; - } - - glamor_priv->fbo_cache_watermark -= fbo_entry->width * fbo_entry->height; - xorg_list_del(&fbo_entry->list); - DEBUGF("cache %p fbo %p expired %d current %d \n", cache, fbo_entry, - fbo_entry->expire, glamor_priv->tick); - glamor_purge_fbo(fbo_entry); - } - } + struct xorg_list *cache; + glamor_pixmap_fbo *fbo_entry, *tmp; + int i, j, k; + + for (i = 0; i < CACHE_FORMAT_COUNT; i++) + for (j = 0; j < CACHE_BUCKET_WCOUNT; j++) + for (k = 0; k < CACHE_BUCKET_HCOUNT; k++) { + cache = &glamor_priv->fbo_cache[i][j][k]; + xorg_list_for_each_entry_safe_reverse(fbo_entry, tmp, cache, + list) { + if (GLAMOR_TICK_AFTER(fbo_entry->expire, glamor_priv->tick)) { + break; + } + + glamor_priv->fbo_cache_watermark -= + fbo_entry->width * fbo_entry->height; + xorg_list_del(&fbo_entry->list); + DEBUGF("cache %p fbo %p expired %d current %d \n", cache, + fbo_entry, fbo_entry->expire, glamor_priv->tick); + glamor_purge_fbo(fbo_entry); + } + } } void glamor_init_pixmap_fbo(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - int i,j,k; - - glamor_priv = glamor_get_screen_private(screen); - for(i = 0; i < CACHE_FORMAT_COUNT; i++) - for(j = 0; j < CACHE_BUCKET_WCOUNT; j++) - for(k = 0; k < CACHE_BUCKET_HCOUNT; k++) - { - xorg_list_init(&glamor_priv->fbo_cache[i][j][k]); - } - glamor_priv->fbo_cache_watermark = 0; + glamor_screen_private *glamor_priv; + int i, j, k; + + glamor_priv = glamor_get_screen_private(screen); + for (i = 0; i < CACHE_FORMAT_COUNT; i++) + for (j = 0; j < CACHE_BUCKET_WCOUNT; j++) + for (k = 0; k < CACHE_BUCKET_HCOUNT; k++) { + xorg_list_init(&glamor_priv->fbo_cache[i][j][k]); + } + glamor_priv->fbo_cache_watermark = 0; } void glamor_fini_pixmap_fbo(ScreenPtr screen) { - struct xorg_list *cache; - glamor_screen_private *glamor_priv; - glamor_pixmap_fbo *fbo_entry, *tmp; - int i,j,k; - - glamor_priv = glamor_get_screen_private(screen); - for(i = 0; i < CACHE_FORMAT_COUNT; i++) - for(j = 0; j < CACHE_BUCKET_WCOUNT; j++) - for(k = 0; k < CACHE_BUCKET_HCOUNT; k++) - { - cache = &glamor_priv->fbo_cache[i][j][k]; - xorg_list_for_each_entry_safe_reverse(fbo_entry, tmp, cache, list) { - xorg_list_del(&fbo_entry->list); - glamor_purge_fbo(fbo_entry); - } - } + struct xorg_list *cache; + glamor_screen_private *glamor_priv; + glamor_pixmap_fbo *fbo_entry, *tmp; + int i, j, k; + + glamor_priv = glamor_get_screen_private(screen); + for (i = 0; i < CACHE_FORMAT_COUNT; i++) + for (j = 0; j < CACHE_BUCKET_WCOUNT; j++) + for (k = 0; k < CACHE_BUCKET_HCOUNT; k++) { + cache = &glamor_priv->fbo_cache[i][j][k]; + xorg_list_for_each_entry_safe_reverse(fbo_entry, tmp, cache, + list) { + xorg_list_del(&fbo_entry->list); + glamor_purge_fbo(fbo_entry); + } + } } void glamor_destroy_fbo(glamor_pixmap_fbo *fbo) { - xorg_list_del(&fbo->list); - glamor_pixmap_fbo_cache_put(fbo); + xorg_list_del(&fbo->list); + glamor_pixmap_fbo_cache_put(fbo); } static int _glamor_create_tex(glamor_screen_private *glamor_priv, - int w, int h, GLenum format) + int w, int h, GLenum format) { - glamor_gl_dispatch *dispatch; - unsigned int tex = 0; - - /* With dri3, we want to allocate ARGB8888 pixmaps only. - * Depending on the implementation, GL_RGBA might not - * give us ARGB8888. We ask glamor_egl to use get - * an ARGB8888 based texture for us. */ - if (glamor_priv->dri3_enabled && format == GL_RGBA) - { - tex = glamor_egl_create_argb8888_based_texture(glamor_priv->screen, - w, h); - } - if (!tex) - { - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glGenTextures(1, &tex); - dispatch->glBindTexture(GL_TEXTURE_2D, tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - dispatch->glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, - format, GL_UNSIGNED_BYTE, NULL); - glamor_put_dispatch(glamor_priv); - } - return tex; + glamor_gl_dispatch *dispatch; + unsigned int tex = 0; + + /* With dri3, we want to allocate ARGB8888 pixmaps only. + * Depending on the implementation, GL_RGBA might not + * give us ARGB8888. We ask glamor_egl to use get + * an ARGB8888 based texture for us. */ + if (glamor_priv->dri3_enabled && format == GL_RGBA) { + tex = glamor_egl_create_argb8888_based_texture(glamor_priv->screen, + w, h); + } + if (!tex) { + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glGenTextures(1, &tex); + dispatch->glBindTexture(GL_TEXTURE_2D, tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, + GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, + GL_NEAREST); + dispatch->glTexImage2D(GL_TEXTURE_2D, 0, format, w, h, 0, + format, GL_UNSIGNED_BYTE, NULL); + glamor_put_dispatch(glamor_priv); + } + return tex; } glamor_pixmap_fbo * glamor_create_fbo(glamor_screen_private *glamor_priv, - int w, int h, - GLenum format, - int flag) + int w, int h, GLenum format, int flag) { - glamor_pixmap_fbo *fbo; - GLint tex = 0; - int cache_flag; - - if (!glamor_check_fbo_size(glamor_priv, w, h)) - return NULL; - - if (flag == GLAMOR_CREATE_FBO_NO_FBO) - goto new_fbo; - - if (flag == GLAMOR_CREATE_PIXMAP_MAP) - goto no_tex; - - if (flag == GLAMOR_CREATE_PIXMAP_FIXUP) - cache_flag = GLAMOR_CACHE_EXACT_SIZE; - else - cache_flag = 0; - - fbo = glamor_pixmap_fbo_cache_get(glamor_priv, w, h, - format, cache_flag); - if (fbo) - return fbo; -new_fbo: - tex = _glamor_create_tex(glamor_priv, w, h, format); -no_tex: - fbo = glamor_create_fbo_from_tex(glamor_priv, w, h, format, tex, flag); - - return fbo; + glamor_pixmap_fbo *fbo; + GLint tex = 0; + int cache_flag; + + if (!glamor_check_fbo_size(glamor_priv, w, h)) + return NULL; + + if (flag == GLAMOR_CREATE_FBO_NO_FBO) + goto new_fbo; + + if (flag == GLAMOR_CREATE_PIXMAP_MAP) + goto no_tex; + + if (flag == GLAMOR_CREATE_PIXMAP_FIXUP) + cache_flag = GLAMOR_CACHE_EXACT_SIZE; + else + cache_flag = 0; + + fbo = glamor_pixmap_fbo_cache_get(glamor_priv, w, h, format, cache_flag); + if (fbo) + return fbo; + new_fbo: + tex = _glamor_create_tex(glamor_priv, w, h, format); + no_tex: + fbo = glamor_create_fbo_from_tex(glamor_priv, w, h, format, tex, flag); + + return fbo; } static glamor_pixmap_fbo * _glamor_create_fbo_array(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag, - int block_w, int block_h, - glamor_pixmap_private *pixmap_priv, - int has_fbo) + int w, int h, GLenum format, int flag, + int block_w, int block_h, + glamor_pixmap_private *pixmap_priv, int has_fbo) { - int block_wcnt; - int block_hcnt; - glamor_pixmap_fbo **fbo_array; - BoxPtr box_array; - int i,j; - glamor_pixmap_private_large_t *priv; - - priv = &pixmap_priv->large; - - block_wcnt = (w + block_w - 1) / block_w; - block_hcnt = (h + block_h - 1) / block_h; - - box_array = calloc(block_wcnt * block_hcnt, sizeof(box_array[0])); - if (box_array == NULL) - return NULL; - - fbo_array = calloc(block_wcnt * block_hcnt, sizeof(glamor_pixmap_fbo*)); - if (fbo_array == NULL) { - free(box_array); - return FALSE; - } - for(i = 0; i < block_hcnt; i++) - { - int block_y1, block_y2; - int fbo_w, fbo_h; - - block_y1 = i * block_h; - block_y2 = (block_y1 + block_h) > h ? h : (block_y1 + block_h); - fbo_h = block_y2 - block_y1; - - for (j = 0; j < block_wcnt; j++) - { - box_array[i * block_wcnt + j].x1 = j * block_w; - box_array[i * block_wcnt + j].y1 = block_y1; - box_array[i * block_wcnt + j].x2 = (j + 1) * block_w > w ? w : (j + 1) * block_w; - box_array[i * block_wcnt + j].y2 = block_y2; - fbo_w = box_array[i * block_wcnt + j].x2 - box_array[i * block_wcnt + j].x1; - if (!has_fbo) - fbo_array[i * block_wcnt + j] = glamor_create_fbo(glamor_priv, - fbo_w, fbo_h, format, - GLAMOR_CREATE_PIXMAP_FIXUP); - else - fbo_array[i * block_wcnt + j] = priv->base.fbo; - if (fbo_array[i * block_wcnt + j] == NULL) - goto cleanup; - } - } - - priv->box = box_array[0]; - priv->box_array = box_array; - priv->fbo_array = fbo_array; - priv->block_wcnt = block_wcnt; - priv->block_hcnt = block_hcnt; - return fbo_array[0]; - -cleanup: - for(i = 0; i < block_wcnt * block_hcnt; i++) - if ((fbo_array)[i]) - glamor_destroy_fbo((fbo_array)[i]); - free(box_array); - free(fbo_array); - return NULL; + int block_wcnt; + int block_hcnt; + glamor_pixmap_fbo **fbo_array; + BoxPtr box_array; + int i, j; + glamor_pixmap_private_large_t *priv; + + priv = &pixmap_priv->large; + + block_wcnt = (w + block_w - 1) / block_w; + block_hcnt = (h + block_h - 1) / block_h; + + box_array = calloc(block_wcnt * block_hcnt, sizeof(box_array[0])); + if (box_array == NULL) + return NULL; + + fbo_array = calloc(block_wcnt * block_hcnt, sizeof(glamor_pixmap_fbo *)); + if (fbo_array == NULL) { + free(box_array); + return FALSE; + } + for (i = 0; i < block_hcnt; i++) { + int block_y1, block_y2; + int fbo_w, fbo_h; + + block_y1 = i * block_h; + block_y2 = (block_y1 + block_h) > h ? h : (block_y1 + block_h); + fbo_h = block_y2 - block_y1; + + for (j = 0; j < block_wcnt; j++) { + box_array[i * block_wcnt + j].x1 = j * block_w; + box_array[i * block_wcnt + j].y1 = block_y1; + box_array[i * block_wcnt + j].x2 = + (j + 1) * block_w > w ? w : (j + 1) * block_w; + box_array[i * block_wcnt + j].y2 = block_y2; + fbo_w = + box_array[i * block_wcnt + j].x2 - box_array[i * block_wcnt + + j].x1; + if (!has_fbo) + fbo_array[i * block_wcnt + j] = glamor_create_fbo(glamor_priv, + fbo_w, fbo_h, + format, + GLAMOR_CREATE_PIXMAP_FIXUP); + else + fbo_array[i * block_wcnt + j] = priv->base.fbo; + if (fbo_array[i * block_wcnt + j] == NULL) + goto cleanup; + } + } + + priv->box = box_array[0]; + priv->box_array = box_array; + priv->fbo_array = fbo_array; + priv->block_wcnt = block_wcnt; + priv->block_hcnt = block_hcnt; + return fbo_array[0]; + + cleanup: + for (i = 0; i < block_wcnt * block_hcnt; i++) + if ((fbo_array)[i]) + glamor_destroy_fbo((fbo_array)[i]); + free(box_array); + free(fbo_array); + return NULL; } - /* Create a fbo array to cover the w*h region, by using block_w*block_h * block.*/ glamor_pixmap_fbo * glamor_create_fbo_array(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag, - int block_w, int block_h, - glamor_pixmap_private *pixmap_priv) + int w, int h, GLenum format, int flag, + int block_w, int block_h, + glamor_pixmap_private *pixmap_priv) { - pixmap_priv->large.block_w = block_w; - pixmap_priv->large.block_h = block_h; - return _glamor_create_fbo_array(glamor_priv, w, h, format, flag, - block_w, block_h, pixmap_priv, 0); + pixmap_priv->large.block_w = block_w; + pixmap_priv->large.block_h = block_h; + return _glamor_create_fbo_array(glamor_priv, w, h, format, flag, + block_w, block_h, pixmap_priv, 0); } glamor_pixmap_fbo * glamor_pixmap_detach_fbo(glamor_pixmap_private *pixmap_priv) { - glamor_pixmap_fbo *fbo; + glamor_pixmap_fbo *fbo; - if (pixmap_priv == NULL) - return NULL; + if (pixmap_priv == NULL) + return NULL; - fbo = pixmap_priv->base.fbo; - if (fbo == NULL) - return NULL; + fbo = pixmap_priv->base.fbo; + if (fbo == NULL) + return NULL; - pixmap_priv->base.fbo = NULL; - return fbo; + pixmap_priv->base.fbo = NULL; + return fbo; } /* The pixmap must not be attached to another fbo. */ void glamor_pixmap_attach_fbo(PixmapPtr pixmap, glamor_pixmap_fbo *fbo) { - glamor_pixmap_private *pixmap_priv; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (pixmap_priv->base.fbo) - return; - - pixmap_priv->base.fbo = fbo; - - switch (pixmap_priv->type) { - case GLAMOR_TEXTURE_LARGE: - case GLAMOR_TEXTURE_ONLY: - case GLAMOR_TEXTURE_DRM: - pixmap_priv->base.gl_fbo = 1; - if (fbo->tex != 0) - pixmap_priv->base.gl_tex = 1; - else { - /* XXX For the Xephyr only, may be broken now.*/ - pixmap_priv->base.gl_tex = 0; - } - case GLAMOR_MEMORY_MAP: - pixmap->devPrivate.ptr = NULL; - break; - default: - break; - } + glamor_pixmap_private *pixmap_priv; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (pixmap_priv->base.fbo) + return; + + pixmap_priv->base.fbo = fbo; + + switch (pixmap_priv->type) { + case GLAMOR_TEXTURE_LARGE: + case GLAMOR_TEXTURE_ONLY: + case GLAMOR_TEXTURE_DRM: + pixmap_priv->base.gl_fbo = 1; + if (fbo->tex != 0) + pixmap_priv->base.gl_tex = 1; + else { + /* XXX For the Xephyr only, may be broken now. */ + pixmap_priv->base.gl_tex = 0; + } + case GLAMOR_MEMORY_MAP: + pixmap->devPrivate.ptr = NULL; + break; + default: + break; + } } void glamor_pixmap_destroy_fbo(glamor_pixmap_private *priv) { - glamor_pixmap_fbo *fbo; - if (priv->type == GLAMOR_TEXTURE_LARGE) { - int i; - glamor_pixmap_private_large_t *large = &priv->large; - for(i = 0; i < large->block_wcnt * large->block_hcnt; i++) - glamor_destroy_fbo(large->fbo_array[i]); - free(large->fbo_array); - } else { - fbo = glamor_pixmap_detach_fbo(priv); - if (fbo) - glamor_destroy_fbo(fbo); - } - - free(priv); + glamor_pixmap_fbo *fbo; + + if (priv->type == GLAMOR_TEXTURE_LARGE) { + int i; + glamor_pixmap_private_large_t *large = &priv->large; + + for (i = 0; i < large->block_wcnt * large->block_hcnt; i++) + glamor_destroy_fbo(large->fbo_array[i]); + free(large->fbo_array); + } + else { + fbo = glamor_pixmap_detach_fbo(priv); + if (fbo) + glamor_destroy_fbo(fbo); + } + + free(priv); } Bool glamor_pixmap_ensure_fbo(PixmapPtr pixmap, GLenum format, int flag) { - glamor_screen_private *glamor_priv; - glamor_pixmap_private *pixmap_priv; - glamor_pixmap_fbo *fbo; - - glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv->base.fbo == NULL) { - - fbo = glamor_create_fbo(glamor_priv, pixmap->drawable.width, - pixmap->drawable.height, - format, - flag); - if (fbo == NULL) - return FALSE; - - glamor_pixmap_attach_fbo(pixmap, fbo); - } else { - /* We do have a fbo, but it may lack of fb or tex. */ - if (!pixmap_priv->base.fbo->tex) - pixmap_priv->base.fbo->tex = _glamor_create_tex(glamor_priv, pixmap->drawable.width, - pixmap->drawable.height, format); - - if (flag != GLAMOR_CREATE_FBO_NO_FBO && pixmap_priv->base.fbo->fb == 0) - glamor_pixmap_ensure_fb(pixmap_priv->base.fbo); - } - - return TRUE; + glamor_screen_private *glamor_priv; + glamor_pixmap_private *pixmap_priv; + glamor_pixmap_fbo *fbo; + + glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (pixmap_priv->base.fbo == NULL) { + + fbo = glamor_create_fbo(glamor_priv, pixmap->drawable.width, + pixmap->drawable.height, format, flag); + if (fbo == NULL) + return FALSE; + + glamor_pixmap_attach_fbo(pixmap, fbo); + } + else { + /* We do have a fbo, but it may lack of fb or tex. */ + if (!pixmap_priv->base.fbo->tex) + pixmap_priv->base.fbo->tex = + _glamor_create_tex(glamor_priv, pixmap->drawable.width, + pixmap->drawable.height, format); + + if (flag != GLAMOR_CREATE_FBO_NO_FBO && pixmap_priv->base.fbo->fb == 0) + glamor_pixmap_ensure_fb(pixmap_priv->base.fbo); + } + + return TRUE; } _X_EXPORT void glamor_pixmap_exchange_fbos(PixmapPtr front, PixmapPtr back) { - glamor_pixmap_private *front_priv, *back_priv; - glamor_pixmap_fbo *temp_fbo; - - front_priv = glamor_get_pixmap_private(front); - back_priv = glamor_get_pixmap_private(back); - temp_fbo = front_priv->base.fbo; - front_priv->base.fbo = back_priv->base.fbo; - back_priv->base.fbo = temp_fbo; + glamor_pixmap_private *front_priv, *back_priv; + glamor_pixmap_fbo *temp_fbo; + + front_priv = glamor_get_pixmap_private(front); + back_priv = glamor_get_pixmap_private(back); + temp_fbo = front_priv->base.fbo; + front_priv->base.fbo = back_priv->base.fbo; + back_priv->base.fbo = temp_fbo; } diff --git a/xorg-server/glamor/glamor_fill.c b/xorg-server/glamor/glamor_fill.c index fbc87392e..d59e6204f 100644 --- a/xorg-server/glamor/glamor_fill.c +++ b/xorg-server/glamor/glamor_fill.c @@ -33,332 +33,325 @@ */ Bool glamor_fill(DrawablePtr drawable, - GCPtr gc, int x, int y, int width, int height, Bool fallback) + GCPtr gc, int x, int y, int width, int height, Bool fallback) { - PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(drawable); - int off_x, off_y; - PixmapPtr sub_pixmap = NULL; - glamor_access_t sub_pixmap_access; - DrawablePtr saved_drawable = NULL; - int saved_x = x, saved_y = y; - - glamor_get_drawable_deltas(drawable, dst_pixmap, &off_x, &off_y); - - switch (gc->fillStyle) { - case FillSolid: - if (!glamor_solid(dst_pixmap, - x + off_x, - y + off_y, - width, height, gc->alu, gc->planemask, - gc->fgPixel)) - goto fail; - break; - case FillStippled: - case FillOpaqueStippled: - if (!glamor_stipple(dst_pixmap, - gc->stipple, - x + off_x, - y + off_y, - width, - height, - gc->alu, - gc->planemask, - gc->fgPixel, - gc->bgPixel, gc->patOrg.x, - gc->patOrg.y)) - goto fail; - break; - case FillTiled: - if (!glamor_tile(dst_pixmap, - gc->tile.pixmap, - x + off_x, - y + off_y, - width, - height, - gc->alu, - gc->planemask, - x - drawable->x - gc->patOrg.x, - y - drawable->y - gc->patOrg.y)) - goto fail; - break; - } - return TRUE; - - fail: - if (!fallback) { - if (glamor_ddx_fallback_check_pixmap(&dst_pixmap->drawable) - && glamor_ddx_fallback_check_gc(gc)) - return FALSE; - } - /* Is it possible to set the access as WO? */ - - sub_pixmap_access = GLAMOR_ACCESS_RW; - - sub_pixmap = glamor_get_sub_pixmap(dst_pixmap, x + off_x, - y + off_y, width, height, - sub_pixmap_access); - - if (sub_pixmap != NULL) { - if (gc->fillStyle != FillSolid) { - gc->patOrg.x += (drawable->x - x); - gc->patOrg.y += (drawable->y - y); - } - saved_drawable = drawable; - drawable = &sub_pixmap->drawable; - saved_x = x; - saved_y = y; - x = 0; - y = 0; - } - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_gc(gc)) { - fbFill(drawable, gc, x, y, width, height); - glamor_finish_access_gc(gc); - } - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - - if (sub_pixmap != NULL) { - if (gc->fillStyle != FillSolid) { - gc->patOrg.x -= (saved_drawable->x - saved_x); - gc->patOrg.y -= (saved_drawable->y - saved_y); - } - - x = saved_x; - y = saved_y; - - glamor_put_sub_pixmap(sub_pixmap, dst_pixmap, - x + off_x, y + off_y, - width, height, sub_pixmap_access); - } - - return TRUE; + PixmapPtr dst_pixmap = glamor_get_drawable_pixmap(drawable); + int off_x, off_y; + PixmapPtr sub_pixmap = NULL; + glamor_access_t sub_pixmap_access; + DrawablePtr saved_drawable = NULL; + int saved_x = x, saved_y = y; + + glamor_get_drawable_deltas(drawable, dst_pixmap, &off_x, &off_y); + + switch (gc->fillStyle) { + case FillSolid: + if (!glamor_solid(dst_pixmap, + x + off_x, + y + off_y, + width, height, gc->alu, gc->planemask, gc->fgPixel)) + goto fail; + break; + case FillStippled: + case FillOpaqueStippled: + if (!glamor_stipple(dst_pixmap, + gc->stipple, + x + off_x, + y + off_y, + width, + height, + gc->alu, + gc->planemask, + gc->fgPixel, + gc->bgPixel, gc->patOrg.x, gc->patOrg.y)) + goto fail; + break; + case FillTiled: + if (!glamor_tile(dst_pixmap, + gc->tile.pixmap, + x + off_x, + y + off_y, + width, + height, + gc->alu, + gc->planemask, + x - drawable->x - gc->patOrg.x, + y - drawable->y - gc->patOrg.y)) + goto fail; + break; + } + return TRUE; + + fail: + if (!fallback) { + if (glamor_ddx_fallback_check_pixmap(&dst_pixmap->drawable) + && glamor_ddx_fallback_check_gc(gc)) + return FALSE; + } + /* Is it possible to set the access as WO? */ + + sub_pixmap_access = GLAMOR_ACCESS_RW; + + sub_pixmap = glamor_get_sub_pixmap(dst_pixmap, x + off_x, + y + off_y, width, height, + sub_pixmap_access); + + if (sub_pixmap != NULL) { + if (gc->fillStyle != FillSolid) { + gc->patOrg.x += (drawable->x - x); + gc->patOrg.y += (drawable->y - y); + } + saved_drawable = drawable; + drawable = &sub_pixmap->drawable; + saved_x = x; + saved_y = y; + x = 0; + y = 0; + } + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_gc(gc)) { + fbFill(drawable, gc, x, y, width, height); + glamor_finish_access_gc(gc); + } + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + + if (sub_pixmap != NULL) { + if (gc->fillStyle != FillSolid) { + gc->patOrg.x -= (saved_drawable->x - saved_x); + gc->patOrg.y -= (saved_drawable->y - saved_y); + } + + x = saved_x; + y = saved_y; + + glamor_put_sub_pixmap(sub_pixmap, dst_pixmap, + x + off_x, y + off_y, + width, height, sub_pixmap_access); + } + + return TRUE; } void glamor_init_solid_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - const char *solid_vs = - "attribute vec4 v_position;" - "void main()\n" "{\n" " gl_Position = v_position;\n" - "}\n"; - const char *solid_fs = - GLAMOR_DEFAULT_PRECISION "uniform vec4 color;\n" - "void main()\n" "{\n" " gl_FragColor = color;\n" "}\n"; - GLint fs_prog, vs_prog; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->solid_prog = dispatch->glCreateProgram(); - vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, solid_vs); - fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - solid_fs); - dispatch->glAttachShader(glamor_priv->solid_prog, vs_prog); - dispatch->glAttachShader(glamor_priv->solid_prog, fs_prog); - - dispatch->glBindAttribLocation(glamor_priv->solid_prog, - GLAMOR_VERTEX_POS, "v_position"); - glamor_link_glsl_prog(dispatch, glamor_priv->solid_prog); - - glamor_priv->solid_color_uniform_location = - dispatch->glGetUniformLocation(glamor_priv->solid_prog, - "color"); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + const char *solid_vs = + "attribute vec4 v_position;" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + "}\n"; + const char *solid_fs = + GLAMOR_DEFAULT_PRECISION + "uniform vec4 color;\n" + "void main()\n" + "{\n" + " gl_FragColor = color;\n" + "}\n"; + GLint fs_prog, vs_prog; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->solid_prog = dispatch->glCreateProgram(); + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, solid_vs); + fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, solid_fs); + dispatch->glAttachShader(glamor_priv->solid_prog, vs_prog); + dispatch->glAttachShader(glamor_priv->solid_prog, fs_prog); + + dispatch->glBindAttribLocation(glamor_priv->solid_prog, + GLAMOR_VERTEX_POS, "v_position"); + glamor_link_glsl_prog(dispatch, glamor_priv->solid_prog); + + glamor_priv->solid_color_uniform_location = + dispatch->glGetUniformLocation(glamor_priv->solid_prog, "color"); + glamor_put_dispatch(glamor_priv); } void glamor_fini_solid_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->solid_prog); - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->solid_prog); + glamor_put_dispatch(glamor_priv); } static void _glamor_solid_boxes(PixmapPtr pixmap, BoxPtr box, int nbox, float *color) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - glamor_gl_dispatch *dispatch; - GLfloat xscale, yscale; - float vertices[32]; - float *pvertices = vertices; - int valid_nbox = ARRAY_SIZE(vertices); - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glUseProgram(glamor_priv->solid_prog); - - dispatch->glUniform4fv(glamor_priv->solid_color_uniform_location, - 1, color); - - pixmap_priv_get_dest_scale(pixmap_priv, &xscale, &yscale); - - if (unlikely(nbox*4*2 > ARRAY_SIZE(vertices))) { - int allocated_box; - - if (nbox * 6 > GLAMOR_COMPOSITE_VBO_VERT_CNT) { - allocated_box = GLAMOR_COMPOSITE_VBO_VERT_CNT / 6; - } else - allocated_box = nbox; - pvertices = malloc(allocated_box * 4 * 2 * sizeof(float)); - if (pvertices) - valid_nbox = allocated_box; - else { - pvertices = vertices; - valid_nbox = ARRAY_SIZE(vertices) / (4*2); - } - } - - if (unlikely(nbox > 1)) - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - pvertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - - while(nbox) { - int box_cnt, i; - float *valid_vertices; - valid_vertices = pvertices; - box_cnt = nbox > valid_nbox ? valid_nbox : nbox; - for (i = 0; i < box_cnt; i++) { - glamor_set_normalize_vcoords(pixmap_priv, xscale, yscale, - box[i].x1, box[i].y1, - box[i].x2, box[i].y2, - glamor_priv->yInverted, - valid_vertices); - valid_vertices += 4*2; - } - if (box_cnt == 1) - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, box_cnt * 4); - else + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_gl_dispatch *dispatch; + GLfloat xscale, yscale; + float vertices[32]; + float *pvertices = vertices; + int valid_nbox = ARRAY_SIZE(vertices); + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glUseProgram(glamor_priv->solid_prog); + + dispatch->glUniform4fv(glamor_priv->solid_color_uniform_location, 1, color); + + pixmap_priv_get_dest_scale(pixmap_priv, &xscale, &yscale); + + if (_X_UNLIKELY(nbox * 4 * 2 > ARRAY_SIZE(vertices))) { + int allocated_box; + + if (nbox * 6 > GLAMOR_COMPOSITE_VBO_VERT_CNT) { + allocated_box = GLAMOR_COMPOSITE_VBO_VERT_CNT / 6; + } + else + allocated_box = nbox; + pvertices = malloc(allocated_box * 4 * 2 * sizeof(float)); + if (pvertices) + valid_nbox = allocated_box; + else { + pvertices = vertices; + valid_nbox = ARRAY_SIZE(vertices) / (4 * 2); + } + } + + if (_X_UNLIKELY(nbox > 1)) + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), pvertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + + while (nbox) { + int box_cnt, i; + float *valid_vertices; + + valid_vertices = pvertices; + box_cnt = nbox > valid_nbox ? valid_nbox : nbox; + for (i = 0; i < box_cnt; i++) { + glamor_set_normalize_vcoords(pixmap_priv, xscale, yscale, + box[i].x1, box[i].y1, + box[i].x2, box[i].y2, + glamor_priv->yInverted, + valid_vertices); + valid_vertices += 4 * 2; + } + if (box_cnt == 1) + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, box_cnt * 4); + else #ifndef GLAMOR_GLES2 - dispatch->glDrawRangeElements(GL_TRIANGLES, - 0, - box_cnt * 4, - box_cnt * 6, - GL_UNSIGNED_SHORT, - NULL); + dispatch->glDrawRangeElements(GL_TRIANGLES, + 0, + box_cnt * 4, + box_cnt * 6, GL_UNSIGNED_SHORT, NULL); #else - dispatch->glDrawElements(GL_TRIANGLES, - box_cnt * 6, - GL_UNSIGNED_SHORT, - NULL); + dispatch->glDrawElements(GL_TRIANGLES, + box_cnt * 6, GL_UNSIGNED_SHORT, NULL); #endif - nbox -= box_cnt; - box += box_cnt; - } - - if (pvertices != vertices) - free(pvertices); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - glamor_priv->state = RENDER_STATE; - glamor_priv->render_idle_cnt = 0; + nbox -= box_cnt; + box += box_cnt; + } + + if (pvertices != vertices) + free(pvertices); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + glamor_priv->state = RENDER_STATE; + glamor_priv->render_idle_cnt = 0; } Bool glamor_solid_boxes(PixmapPtr pixmap, - BoxPtr box, int nbox, - unsigned long fg_pixel) + BoxPtr box, int nbox, unsigned long fg_pixel) { - glamor_pixmap_private *pixmap_priv; - GLfloat color[4]; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return FALSE; - - glamor_get_rgba_from_pixel(fg_pixel, - &color[0], - &color[1], - &color[2], - &color[3], format_for_pixmap(pixmap)); - - if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - RegionRec region; - int n_region; - glamor_pixmap_clipped_regions *clipped_regions; - int i; - - RegionInitBoxes(®ion, box, nbox); - clipped_regions = glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, 0, 0, 0); - for(i = 0; i < n_region; i++) - { - BoxPtr inner_box; - int inner_nbox; - SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); - - inner_box = RegionRects(clipped_regions[i].region); - inner_nbox = RegionNumRects(clipped_regions[i].region); - _glamor_solid_boxes(pixmap, inner_box, inner_nbox, color); - RegionDestroy(clipped_regions[i].region); - } - free(clipped_regions); - RegionUninit(®ion); - } else - _glamor_solid_boxes(pixmap, box, nbox, color); - - return TRUE; + glamor_pixmap_private *pixmap_priv; + GLfloat color[4]; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return FALSE; + + glamor_get_rgba_from_pixel(fg_pixel, + &color[0], + &color[1], + &color[2], &color[3], format_for_pixmap(pixmap)); + + if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + RegionRec region; + int n_region; + glamor_pixmap_clipped_regions *clipped_regions; + int i; + + RegionInitBoxes(®ion, box, nbox); + clipped_regions = + glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, 0, + 0, 0); + for (i = 0; i < n_region; i++) { + BoxPtr inner_box; + int inner_nbox; + + SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); + + inner_box = RegionRects(clipped_regions[i].region); + inner_nbox = RegionNumRects(clipped_regions[i].region); + _glamor_solid_boxes(pixmap, inner_box, inner_nbox, color); + RegionDestroy(clipped_regions[i].region); + } + free(clipped_regions); + RegionUninit(®ion); + } + else + _glamor_solid_boxes(pixmap, box, nbox, color); + + return TRUE; } Bool glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - unsigned long fg_pixel) + unsigned char alu, unsigned long planemask, unsigned long fg_pixel) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_pixmap_private *pixmap_priv; - glamor_gl_dispatch *dispatch; - BoxRec box; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return FALSE; - - if (!glamor_set_planemask(pixmap, planemask)) { - glamor_fallback - ("Failedto set planemask in glamor_solid.\n"); - return FALSE; - } - - dispatch = glamor_get_dispatch(glamor_priv); - if (!glamor_set_alu(dispatch, alu)) { - if (alu == GXclear) - fg_pixel = 0; - else { - glamor_fallback("unsupported alu %x\n", alu); - glamor_put_dispatch(glamor_priv); - return FALSE; - } - } - box.x1 = x; - box.y1 = y; - box.x2 = x + width; - box.y2 = y + height; - glamor_solid_boxes(pixmap, &box, 1, fg_pixel); - - glamor_set_alu(dispatch, GXcopy); - glamor_put_dispatch(glamor_priv); - - return TRUE; + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_private *pixmap_priv; + glamor_gl_dispatch *dispatch; + BoxRec box; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return FALSE; + + if (!glamor_set_planemask(pixmap, planemask)) { + glamor_fallback("Failedto set planemask in glamor_solid.\n"); + return FALSE; + } + + dispatch = glamor_get_dispatch(glamor_priv); + if (!glamor_set_alu(dispatch, alu)) { + if (alu == GXclear) + fg_pixel = 0; + else { + glamor_fallback("unsupported alu %x\n", alu); + glamor_put_dispatch(glamor_priv); + return FALSE; + } + } + box.x1 = x; + box.y1 = y; + box.x2 = x + width; + box.y2 = y + height; + glamor_solid_boxes(pixmap, &box, 1, fg_pixel); + + glamor_set_alu(dispatch, GXcopy); + glamor_put_dispatch(glamor_priv); + + return TRUE; } - diff --git a/xorg-server/glamor/glamor_fillspans.c b/xorg-server/glamor/glamor_fillspans.c index 35e881f61..7261d2842 100644 --- a/xorg-server/glamor/glamor_fillspans.c +++ b/xorg-server/glamor/glamor_fillspans.c @@ -28,86 +28,81 @@ static Bool _glamor_fill_spans(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, int *widths, int sorted, Bool fallback) + GCPtr gc, + int n, DDXPointPtr points, int *widths, int sorted, + Bool fallback) { - DDXPointPtr ppt; - int nbox; - BoxPtr pbox; - int x1, x2, y; - RegionPtr pClip = fbGetCompositeClip(gc); - Bool ret = FALSE; + DDXPointPtr ppt; + int nbox; + BoxPtr pbox; + int x1, x2, y; + RegionPtr pClip = fbGetCompositeClip(gc); + Bool ret = FALSE; - if (gc->fillStyle != FillSolid && gc->fillStyle != FillTiled) - goto fail; + if (gc->fillStyle != FillSolid && gc->fillStyle != FillTiled) + goto fail; - ppt = points; - while (n--) { - x1 = ppt->x; - y = ppt->y; - x2 = x1 + (int) *widths; - ppt++; - widths++; + ppt = points; + while (n--) { + x1 = ppt->x; + y = ppt->y; + x2 = x1 + (int) *widths; + ppt++; + widths++; - nbox = REGION_NUM_RECTS(pClip); - pbox = REGION_RECTS(pClip); - while (nbox--) { - int real_x1 = x1, real_x2 = x2; + nbox = REGION_NUM_RECTS(pClip); + pbox = REGION_RECTS(pClip); + while (nbox--) { + int real_x1 = x1, real_x2 = x2; - if (real_x1 < pbox->x1) - real_x1 = pbox->x1; + if (real_x1 < pbox->x1) + real_x1 = pbox->x1; - if (real_x2 > pbox->x2) - real_x2 = pbox->x2; + if (real_x2 > pbox->x2) + real_x2 = pbox->x2; - if (real_x2 > real_x1 && pbox->y1 <= y && pbox->y2 > y) { - if (!glamor_fill(drawable, gc, real_x1, y, - real_x2 - real_x1, 1, fallback)) - goto fail; - } - pbox++; - } - } - ret = TRUE; - goto done; + if (real_x2 > real_x1 && pbox->y1 <= y && pbox->y2 > y) { + if (!glamor_fill(drawable, gc, real_x1, y, + real_x2 - real_x1, 1, fallback)) + goto fail; + } + pbox++; + } + } + ret = TRUE; + goto done; -fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable) - && glamor_ddx_fallback_check_gc(gc)) { - goto done; - } - glamor_fallback("to %p (%c)\n", drawable, - glamor_get_drawable_location(drawable)); - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_gc(gc)) { - fbFillSpans(drawable, gc, n, points, widths, - sorted); - glamor_finish_access_gc(gc); - } - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - ret = TRUE; + fail: + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable) + && glamor_ddx_fallback_check_gc(gc)) { + goto done; + } + glamor_fallback("to %p (%c)\n", drawable, + glamor_get_drawable_location(drawable)); + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_gc(gc)) { + fbFillSpans(drawable, gc, n, points, widths, sorted); + glamor_finish_access_gc(gc); + } + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + ret = TRUE; -done: - return ret; + done: + return ret; } - void glamor_fill_spans(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, int *widths, int sorted) + GCPtr gc, int n, DDXPointPtr points, int *widths, int sorted) { - _glamor_fill_spans(drawable, gc, n, points, widths, sorted, TRUE); + _glamor_fill_spans(drawable, gc, n, points, widths, sorted, TRUE); } Bool glamor_fill_spans_nf(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, int *widths, int sorted) + GCPtr gc, + int n, DDXPointPtr points, int *widths, int sorted) { - return _glamor_fill_spans(drawable, gc, n, points, widths, sorted, FALSE); + return _glamor_fill_spans(drawable, gc, n, points, widths, sorted, FALSE); } - - diff --git a/xorg-server/glamor/glamor_getimage.c b/xorg-server/glamor/glamor_getimage.c index 5df576c45..5609e707f 100644 --- a/xorg-server/glamor/glamor_getimage.c +++ b/xorg-server/glamor/glamor_getimage.c @@ -28,74 +28,71 @@ #include "glamor_priv.h" - static Bool _glamor_get_image(DrawablePtr drawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d, - Bool fallback) + unsigned int format, unsigned long planeMask, char *d, + Bool fallback) { - PixmapPtr pixmap, sub_pixmap; - struct glamor_pixmap_private *pixmap_priv; - int x_off, y_off; - int stride; - void *data; - - pixmap = glamor_get_drawable_pixmap(drawable); - glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + PixmapPtr pixmap, sub_pixmap; + struct glamor_pixmap_private *pixmap_priv; + int x_off, y_off; + int stride; + void *data; - if (format != ZPixmap) - goto fall_back; - pixmap = glamor_get_drawable_pixmap(drawable); - glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + pixmap = glamor_get_drawable_pixmap(drawable); + glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); - if (!glamor_set_planemask(pixmap, planeMask)) { - glamor_fallback - ("Failedto set planemask in glamor_solid.\n"); - goto fall_back; - } - pixmap_priv = glamor_get_pixmap_private(pixmap); + if (format != ZPixmap) + goto fall_back; + pixmap = glamor_get_drawable_pixmap(drawable); + glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + if (!glamor_set_planemask(pixmap, planeMask)) { + glamor_fallback("Failedto set planemask in glamor_solid.\n"); + goto fall_back; + } + pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - goto fall_back; - stride = PixmapBytePad(w, drawable->depth); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + goto fall_back; + stride = PixmapBytePad(w, drawable->depth); - x += drawable->x + x_off; - y += drawable->y + y_off; + x += drawable->x + x_off; + y += drawable->y + y_off; - data = glamor_download_sub_pixmap_to_cpu(pixmap, x, y, w, h, stride, - d, 0, GLAMOR_ACCESS_RO); - if (data != NULL) { - assert(data == d); - return TRUE; - } -fall_back: - sub_pixmap = glamor_get_sub_pixmap(pixmap, x + x_off + drawable->x, - y + y_off + drawable->y, w, h, - GLAMOR_ACCESS_RO); - if (sub_pixmap) { - fbGetImage(&sub_pixmap->drawable, 0, 0, w, h, format, planeMask, d); - glamor_put_sub_pixmap(sub_pixmap, pixmap, - x + x_off + drawable->x, - y + y_off + drawable->y, - w, h, GLAMOR_ACCESS_RO); - } else - miGetImage(drawable, x, y, w, h, format, planeMask, d); + data = glamor_download_sub_pixmap_to_cpu(pixmap, x, y, w, h, stride, + d, 0, GLAMOR_ACCESS_RO); + if (data != NULL) { + assert(data == d); + return TRUE; + } + fall_back: + sub_pixmap = glamor_get_sub_pixmap(pixmap, x + x_off + drawable->x, + y + y_off + drawable->y, w, h, + GLAMOR_ACCESS_RO); + if (sub_pixmap) { + fbGetImage(&sub_pixmap->drawable, 0, 0, w, h, format, planeMask, d); + glamor_put_sub_pixmap(sub_pixmap, pixmap, + x + x_off + drawable->x, + y + y_off + drawable->y, w, h, GLAMOR_ACCESS_RO); + } + else + miGetImage(drawable, x, y, w, h, format, planeMask, d); - return TRUE; + return TRUE; } void glamor_get_image(DrawablePtr pDrawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d) + unsigned int format, unsigned long planeMask, char *d) { - _glamor_get_image(pDrawable, x, y, w, h, format, planeMask, d, TRUE); + _glamor_get_image(pDrawable, x, y, w, h, format, planeMask, d, TRUE); } Bool glamor_get_image_nf(DrawablePtr pDrawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d) + unsigned int format, unsigned long planeMask, char *d) { - return _glamor_get_image(pDrawable, x, y, w, - h, format, planeMask, d, FALSE); + return _glamor_get_image(pDrawable, x, y, w, + h, format, planeMask, d, FALSE); } diff --git a/xorg-server/glamor/glamor_getspans.c b/xorg-server/glamor/glamor_getspans.c index 6d6c8e9a4..ff58725d6 100644 --- a/xorg-server/glamor/glamor_getspans.c +++ b/xorg-server/glamor/glamor_getspans.c @@ -28,68 +28,65 @@ #include "glamor_priv.h" -static Bool +static Bool _glamor_get_spans(DrawablePtr drawable, - int wmax, - DDXPointPtr points, int *widths, int count, char *dst, - Bool fallback) + int wmax, + DDXPointPtr points, int *widths, int count, char *dst, + Bool fallback) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - int i; - uint8_t *readpixels_dst = (uint8_t *) dst; - void *data; - int x_off, y_off; - Bool ret = FALSE; + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + int i; + uint8_t *readpixels_dst = (uint8_t *) dst; + void *data; + int x_off, y_off; + Bool ret = FALSE; - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - goto fail; + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + goto fail; - glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); - for (i = 0; i < count; i++) { - data = glamor_download_sub_pixmap_to_cpu(pixmap, points[i].x + x_off, - points[i].y + y_off, widths[i], 1, - PixmapBytePad(widths[i], drawable->depth), - readpixels_dst, 0, GLAMOR_ACCESS_RO); - assert(data == readpixels_dst); - readpixels_dst += PixmapBytePad(widths[i], drawable->depth); - } + glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + for (i = 0; i < count; i++) { + data = glamor_download_sub_pixmap_to_cpu(pixmap, points[i].x + x_off, + points[i].y + y_off, widths[i], + 1, PixmapBytePad(widths[i], + drawable-> + depth), + readpixels_dst, 0, + GLAMOR_ACCESS_RO); + (void)data; + assert(data == readpixels_dst); + readpixels_dst += PixmapBytePad(widths[i], drawable->depth); + } - ret = TRUE; - goto done; -fail: + ret = TRUE; + goto done; + fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable)) - goto done; + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable)) + goto done; - ret = TRUE; - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RO)) { - fbGetSpans(drawable, wmax, points, widths, count, dst); - glamor_finish_access(drawable, GLAMOR_ACCESS_RO); - } -done: - return ret; + ret = TRUE; + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RO)) { + fbGetSpans(drawable, wmax, points, widths, count, dst); + glamor_finish_access(drawable, GLAMOR_ACCESS_RO); + } + done: + return ret; } void glamor_get_spans(DrawablePtr drawable, - int wmax, - DDXPointPtr points, int *widths, int count, char *dst) + int wmax, + DDXPointPtr points, int *widths, int count, char *dst) { - _glamor_get_spans(drawable, wmax, points, - widths, count, dst, TRUE); + _glamor_get_spans(drawable, wmax, points, widths, count, dst, TRUE); } Bool glamor_get_spans_nf(DrawablePtr drawable, - int wmax, - DDXPointPtr points, int *widths, int count, char *dst) + int wmax, + DDXPointPtr points, int *widths, int count, char *dst) { - return _glamor_get_spans(drawable, wmax, points, - widths, count, dst, FALSE); + return _glamor_get_spans(drawable, wmax, points, widths, count, dst, FALSE); } - - - diff --git a/xorg-server/glamor/glamor_gl_dispatch.c b/xorg-server/glamor/glamor_gl_dispatch.c index da99e2627..0bdda9c34 100644 --- a/xorg-server/glamor/glamor_gl_dispatch.c +++ b/xorg-server/glamor/glamor_gl_dispatch.c @@ -41,78 +41,78 @@ _X_EXPORT Bool glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch, - int gl_version, - void *(*get_proc_address) (const char *)) + int gl_version, + void *(*get_proc_address) (const char *)) { #ifndef GLAMOR_GLES2 - INIT_FUNC(dispatch, glMatrixMode, get_proc_address); - INIT_FUNC(dispatch, glLoadIdentity, get_proc_address); - INIT_FUNC(dispatch, glRasterPos2i, get_proc_address); - INIT_FUNC(dispatch, glDrawPixels, get_proc_address); - INIT_FUNC(dispatch, glLogicOp, get_proc_address); - INIT_FUNC(dispatch, glMapBuffer, get_proc_address); - INIT_FUNC(dispatch, glMapBufferRange, get_proc_address); - INIT_FUNC(dispatch, glUnmapBuffer, get_proc_address); - INIT_FUNC(dispatch, glBlitFramebuffer, get_proc_address); - INIT_FUNC(dispatch, glDrawRangeElements, get_proc_address); + INIT_FUNC(dispatch, glMatrixMode, get_proc_address); + INIT_FUNC(dispatch, glLoadIdentity, get_proc_address); + INIT_FUNC(dispatch, glRasterPos2i, get_proc_address); + INIT_FUNC(dispatch, glDrawPixels, get_proc_address); + INIT_FUNC(dispatch, glLogicOp, get_proc_address); + INIT_FUNC(dispatch, glMapBuffer, get_proc_address); + INIT_FUNC(dispatch, glMapBufferRange, get_proc_address); + INIT_FUNC(dispatch, glUnmapBuffer, get_proc_address); + INIT_FUNC(dispatch, glBlitFramebuffer, get_proc_address); + INIT_FUNC(dispatch, glDrawRangeElements, get_proc_address); #endif - INIT_FUNC(dispatch, glViewport, get_proc_address); - INIT_FUNC(dispatch, glDrawArrays, get_proc_address); - INIT_FUNC(dispatch, glDrawElements, get_proc_address); - INIT_FUNC(dispatch, glReadPixels, get_proc_address); - INIT_FUNC(dispatch, glPixelStorei, get_proc_address); - INIT_FUNC(dispatch, glTexParameteri, get_proc_address); - INIT_FUNC(dispatch, glTexImage2D, get_proc_address); - INIT_FUNC(dispatch, glGenTextures, get_proc_address); - INIT_FUNC(dispatch, glDeleteTextures, get_proc_address); - INIT_FUNC(dispatch, glBindTexture, get_proc_address); - INIT_FUNC(dispatch, glTexSubImage2D, get_proc_address); - INIT_FUNC(dispatch, glFlush, get_proc_address); - INIT_FUNC(dispatch, glFinish, get_proc_address); - INIT_FUNC(dispatch, glGetIntegerv, get_proc_address); - INIT_FUNC(dispatch, glGetString, get_proc_address); - INIT_FUNC(dispatch, glScissor, get_proc_address); - INIT_FUNC(dispatch, glEnable, get_proc_address); - INIT_FUNC(dispatch, glDisable, get_proc_address); - INIT_FUNC(dispatch, glBlendFunc, get_proc_address); - INIT_FUNC(dispatch, glActiveTexture, get_proc_address); - INIT_FUNC(dispatch, glGenBuffers, get_proc_address); - INIT_FUNC(dispatch, glBufferData, get_proc_address); - INIT_FUNC(dispatch, glBindBuffer, get_proc_address); - INIT_FUNC(dispatch, glDeleteBuffers, get_proc_address); - INIT_FUNC(dispatch, glFramebufferTexture2D, get_proc_address); - INIT_FUNC(dispatch, glBindFramebuffer, get_proc_address); - INIT_FUNC(dispatch, glDeleteFramebuffers, get_proc_address); - INIT_FUNC(dispatch, glGenFramebuffers, get_proc_address); - INIT_FUNC(dispatch, glCheckFramebufferStatus, get_proc_address); - INIT_FUNC(dispatch, glVertexAttribPointer, get_proc_address); - INIT_FUNC(dispatch, glDisableVertexAttribArray, get_proc_address); - INIT_FUNC(dispatch, glEnableVertexAttribArray, get_proc_address); - INIT_FUNC(dispatch, glBindAttribLocation, get_proc_address); - INIT_FUNC(dispatch, glLinkProgram, get_proc_address); - INIT_FUNC(dispatch, glShaderSource, get_proc_address); + INIT_FUNC(dispatch, glViewport, get_proc_address); + INIT_FUNC(dispatch, glDrawArrays, get_proc_address); + INIT_FUNC(dispatch, glDrawElements, get_proc_address); + INIT_FUNC(dispatch, glReadPixels, get_proc_address); + INIT_FUNC(dispatch, glPixelStorei, get_proc_address); + INIT_FUNC(dispatch, glTexParameteri, get_proc_address); + INIT_FUNC(dispatch, glTexImage2D, get_proc_address); + INIT_FUNC(dispatch, glGenTextures, get_proc_address); + INIT_FUNC(dispatch, glDeleteTextures, get_proc_address); + INIT_FUNC(dispatch, glBindTexture, get_proc_address); + INIT_FUNC(dispatch, glTexSubImage2D, get_proc_address); + INIT_FUNC(dispatch, glFlush, get_proc_address); + INIT_FUNC(dispatch, glFinish, get_proc_address); + INIT_FUNC(dispatch, glGetIntegerv, get_proc_address); + INIT_FUNC(dispatch, glGetString, get_proc_address); + INIT_FUNC(dispatch, glScissor, get_proc_address); + INIT_FUNC(dispatch, glEnable, get_proc_address); + INIT_FUNC(dispatch, glDisable, get_proc_address); + INIT_FUNC(dispatch, glBlendFunc, get_proc_address); + INIT_FUNC(dispatch, glActiveTexture, get_proc_address); + INIT_FUNC(dispatch, glGenBuffers, get_proc_address); + INIT_FUNC(dispatch, glBufferData, get_proc_address); + INIT_FUNC(dispatch, glBindBuffer, get_proc_address); + INIT_FUNC(dispatch, glDeleteBuffers, get_proc_address); + INIT_FUNC(dispatch, glFramebufferTexture2D, get_proc_address); + INIT_FUNC(dispatch, glBindFramebuffer, get_proc_address); + INIT_FUNC(dispatch, glDeleteFramebuffers, get_proc_address); + INIT_FUNC(dispatch, glGenFramebuffers, get_proc_address); + INIT_FUNC(dispatch, glCheckFramebufferStatus, get_proc_address); + INIT_FUNC(dispatch, glVertexAttribPointer, get_proc_address); + INIT_FUNC(dispatch, glDisableVertexAttribArray, get_proc_address); + INIT_FUNC(dispatch, glEnableVertexAttribArray, get_proc_address); + INIT_FUNC(dispatch, glBindAttribLocation, get_proc_address); + INIT_FUNC(dispatch, glLinkProgram, get_proc_address); + INIT_FUNC(dispatch, glShaderSource, get_proc_address); - INIT_FUNC(dispatch, glUseProgram, get_proc_address); - INIT_FUNC(dispatch, glUniform1i, get_proc_address); - INIT_FUNC(dispatch, glUniform1f, get_proc_address); - INIT_FUNC(dispatch, glUniform4f, get_proc_address); - INIT_FUNC(dispatch, glUniform4fv, get_proc_address); - INIT_FUNC(dispatch, glUniform1fv, get_proc_address); - INIT_FUNC(dispatch, glUniform2fv, get_proc_address); - INIT_FUNC(dispatch, glUniformMatrix3fv, get_proc_address); - INIT_FUNC(dispatch, glCreateProgram, get_proc_address); - INIT_FUNC(dispatch, glDeleteProgram, get_proc_address); - INIT_FUNC(dispatch, glCreateShader, get_proc_address); - INIT_FUNC(dispatch, glCompileShader, get_proc_address); - INIT_FUNC(dispatch, glAttachShader, get_proc_address); - INIT_FUNC(dispatch, glDeleteShader, get_proc_address); - INIT_FUNC(dispatch, glGetShaderiv, get_proc_address); - INIT_FUNC(dispatch, glGetShaderInfoLog, get_proc_address); - INIT_FUNC(dispatch, glGetProgramiv, get_proc_address); - INIT_FUNC(dispatch, glGetProgramInfoLog, get_proc_address); - INIT_FUNC(dispatch, glGetUniformLocation, get_proc_address); + INIT_FUNC(dispatch, glUseProgram, get_proc_address); + INIT_FUNC(dispatch, glUniform1i, get_proc_address); + INIT_FUNC(dispatch, glUniform1f, get_proc_address); + INIT_FUNC(dispatch, glUniform4f, get_proc_address); + INIT_FUNC(dispatch, glUniform4fv, get_proc_address); + INIT_FUNC(dispatch, glUniform1fv, get_proc_address); + INIT_FUNC(dispatch, glUniform2fv, get_proc_address); + INIT_FUNC(dispatch, glUniformMatrix3fv, get_proc_address); + INIT_FUNC(dispatch, glCreateProgram, get_proc_address); + INIT_FUNC(dispatch, glDeleteProgram, get_proc_address); + INIT_FUNC(dispatch, glCreateShader, get_proc_address); + INIT_FUNC(dispatch, glCompileShader, get_proc_address); + INIT_FUNC(dispatch, glAttachShader, get_proc_address); + INIT_FUNC(dispatch, glDeleteShader, get_proc_address); + INIT_FUNC(dispatch, glGetShaderiv, get_proc_address); + INIT_FUNC(dispatch, glGetShaderInfoLog, get_proc_address); + INIT_FUNC(dispatch, glGetProgramiv, get_proc_address); + INIT_FUNC(dispatch, glGetProgramInfoLog, get_proc_address); + INIT_FUNC(dispatch, glGetUniformLocation, get_proc_address); - return TRUE; - fail: - return FALSE; + return TRUE; + fail: + return FALSE; } diff --git a/xorg-server/glamor/glamor_gl_dispatch.h b/xorg-server/glamor/glamor_gl_dispatch.h index 76dadd49e..63790b41f 100644 --- a/xorg-server/glamor/glamor_gl_dispatch.h +++ b/xorg-server/glamor/glamor_gl_dispatch.h @@ -1,138 +1,128 @@ typedef struct glamor_gl_dispatch { - /* Transformation functions */ - void (*glMatrixMode) (GLenum mode); - void (*glLoadIdentity) (void); - void (*glViewport) (GLint x, GLint y, GLsizei width, - GLsizei height); - /* Drawing functions */ - void (*glRasterPos2i) (GLint x, GLint y); - - /* Vertex Array */ - void (*glDrawArrays) (GLenum mode, GLint first, GLsizei count); - - /* Elements Array*/ - void (*glDrawElements) (GLenum mode, GLsizei count, GLenum type, const GLvoid * indices); - void (*glDrawRangeElements) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid * indices); - - /* Raster functions */ - void (*glReadPixels) (GLint x, GLint y, - GLsizei width, GLsizei height, - GLenum format, GLenum type, GLvoid * pixels); - - void (*glDrawPixels) (GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid * pixels); - void (*glPixelStorei) (GLenum pname, GLint param); - /* Texture Mapping */ - - void (*glTexParameteri) (GLenum target, GLenum pname, GLint param); - void (*glTexImage2D) (GLenum target, GLint level, - GLint internalFormat, - GLsizei width, GLsizei height, - GLint border, GLenum format, GLenum type, - const GLvoid * pixels); - /* 1.1 */ - void (*glGenTextures) (GLsizei n, GLuint * textures); - void (*glDeleteTextures) (GLsizei n, const GLuint * textures); - void (*glBindTexture) (GLenum target, GLuint texture); - void (*glTexSubImage2D) (GLenum target, GLint level, - GLint xoffset, GLint yoffset, - GLsizei width, GLsizei height, - GLenum format, GLenum type, - const GLvoid * pixels); - /* MISC */ - void (*glFlush) (void); - void (*glFinish) (void); - void (*glGetIntegerv) (GLenum pname, GLint * params); - const GLubyte *(*glGetString) (GLenum name); - void (*glScissor) (GLint x, GLint y, GLsizei width, - GLsizei height); - void (*glEnable) (GLenum cap); - void (*glDisable) (GLenum cap); - void (*glBlendFunc) (GLenum sfactor, GLenum dfactor); - void (*glLogicOp) (GLenum opcode); - - /* 1.3 */ - void (*glActiveTexture) (GLenum texture); - - /* GL Extentions */ - void (*glGenBuffers) (GLsizei n, GLuint * buffers); - void (*glBufferData) (GLenum target, GLsizeiptr size, - const GLvoid * data, GLenum usage); - GLvoid *(*glMapBuffer) (GLenum target, GLenum access); - GLvoid *(*glMapBufferRange) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); - GLboolean (*glUnmapBuffer) (GLenum target); - void (*glBindBuffer) (GLenum target, GLuint buffer); - void (*glDeleteBuffers) (GLsizei n, const GLuint * buffers); - - void (*glFramebufferTexture2D) (GLenum target, GLenum attachment, - GLenum textarget, GLuint texture, - GLint level); - void (*glBindFramebuffer) (GLenum target, GLuint framebuffer); - void (*glDeleteFramebuffers) (GLsizei n, - const GLuint * framebuffers); - void (*glGenFramebuffers) (GLsizei n, GLuint * framebuffers); - GLenum (*glCheckFramebufferStatus) (GLenum target); - void (*glBlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1, - GLint srcY1, GLint dstX0, GLint dstY0, - GLint dstX1, GLint dstY1, - GLbitfield mask, GLenum filter); - - void (*glVertexAttribPointer) (GLuint index, GLint size, - GLenum type, GLboolean normalized, - GLsizei stride, - const GLvoid * pointer); - void (*glDisableVertexAttribArray) (GLuint index); - void (*glEnableVertexAttribArray) (GLuint index); - void (*glBindAttribLocation) (GLuint program, GLuint index, - const GLchar * name); - - void (*glLinkProgram) (GLuint program); - void (*glShaderSource) (GLuint shader, GLsizei count, - const GLchar * *string, - const GLint * length); - void (*glUseProgram) (GLuint program); - void (*glUniform1i) (GLint location, GLint v0); - void (*glUniform1f) (GLint location, GLfloat v0); - void (*glUniform4f) (GLint location, GLfloat v0, GLfloat v1, - GLfloat v2, GLfloat v3); - void (*glUniform1fv) (GLint location, GLsizei count, - const GLfloat * value); - void (*glUniform2fv) (GLint location, GLsizei count, - const GLfloat * value); - void (*glUniform4fv) (GLint location, GLsizei count, - const GLfloat * value); - void (*glUniformMatrix3fv) (GLint location, GLsizei count, - GLboolean transpose, const GLfloat* value); - GLuint (*glCreateProgram) (void); - GLuint (*glDeleteProgram) (GLuint); - GLuint (*glCreateShader) (GLenum type); - void (*glCompileShader) (GLuint shader); - void (*glAttachShader) (GLuint program, GLuint shader); - void (*glDeleteShader) (GLuint shader); - void (*glGetShaderiv) (GLuint shader, GLenum pname, - GLint * params); - void (*glGetShaderInfoLog) (GLuint shader, GLsizei bufSize, - GLsizei * length, GLchar * infoLog); - void (*glGetProgramiv) (GLuint program, GLenum pname, - GLint * params); - void (*glGetProgramInfoLog) (GLuint program, GLsizei bufSize, - GLsizei * length, GLchar * infoLog); - GLint (*glGetUniformLocation) (GLuint program, - const GLchar * name); + /* Transformation functions */ + void (*glMatrixMode) (GLenum mode); + void (*glLoadIdentity) (void); + void (*glViewport) (GLint x, GLint y, GLsizei width, GLsizei height); + /* Drawing functions */ + void (*glRasterPos2i) (GLint x, GLint y); + + /* Vertex Array */ + void (*glDrawArrays) (GLenum mode, GLint first, GLsizei count); + + /* Elements Array */ + void (*glDrawElements) (GLenum mode, GLsizei count, GLenum type, + const GLvoid * indices); + void (*glDrawRangeElements) (GLenum mode, GLuint start, GLuint end, + GLsizei count, GLenum type, + const GLvoid * indices); + + /* Raster functions */ + void (*glReadPixels) (GLint x, GLint y, + GLsizei width, GLsizei height, + GLenum format, GLenum type, GLvoid * pixels); + + void (*glDrawPixels) (GLsizei width, GLsizei height, + GLenum format, GLenum type, const GLvoid * pixels); + void (*glPixelStorei) (GLenum pname, GLint param); + /* Texture Mapping */ + + void (*glTexParameteri) (GLenum target, GLenum pname, GLint param); + void (*glTexImage2D) (GLenum target, GLint level, + GLint internalFormat, + GLsizei width, GLsizei height, + GLint border, GLenum format, GLenum type, + const GLvoid * pixels); + /* 1.1 */ + void (*glGenTextures) (GLsizei n, GLuint * textures); + void (*glDeleteTextures) (GLsizei n, const GLuint * textures); + void (*glBindTexture) (GLenum target, GLuint texture); + void (*glTexSubImage2D) (GLenum target, GLint level, + GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, + GLenum format, GLenum type, const GLvoid * pixels); + /* MISC */ + void (*glFlush) (void); + void (*glFinish) (void); + void (*glGetIntegerv) (GLenum pname, GLint * params); + const GLubyte *(*glGetString) (GLenum name); + void (*glScissor) (GLint x, GLint y, GLsizei width, GLsizei height); + void (*glEnable) (GLenum cap); + void (*glDisable) (GLenum cap); + void (*glBlendFunc) (GLenum sfactor, GLenum dfactor); + void (*glLogicOp) (GLenum opcode); + + /* 1.3 */ + void (*glActiveTexture) (GLenum texture); + + /* GL Extentions */ + void (*glGenBuffers) (GLsizei n, GLuint * buffers); + void (*glBufferData) (GLenum target, GLsizeiptr size, + const GLvoid * data, GLenum usage); + GLvoid *(*glMapBuffer) (GLenum target, GLenum access); + GLvoid *(*glMapBufferRange) (GLenum target, GLintptr offset, + GLsizeiptr length, GLbitfield access); + GLboolean(*glUnmapBuffer) (GLenum target); + void (*glBindBuffer) (GLenum target, GLuint buffer); + void (*glDeleteBuffers) (GLsizei n, const GLuint * buffers); + + void (*glFramebufferTexture2D) (GLenum target, GLenum attachment, + GLenum textarget, GLuint texture, + GLint level); + void (*glBindFramebuffer) (GLenum target, GLuint framebuffer); + void (*glDeleteFramebuffers) (GLsizei n, const GLuint * framebuffers); + void (*glGenFramebuffers) (GLsizei n, GLuint * framebuffers); + GLenum(*glCheckFramebufferStatus) (GLenum target); + void (*glBlitFramebuffer) (GLint srcX0, GLint srcY0, GLint srcX1, + GLint srcY1, GLint dstX0, GLint dstY0, + GLint dstX1, GLint dstY1, + GLbitfield mask, GLenum filter); + + void (*glVertexAttribPointer) (GLuint index, GLint size, + GLenum type, GLboolean normalized, + GLsizei stride, const GLvoid * pointer); + void (*glDisableVertexAttribArray) (GLuint index); + void (*glEnableVertexAttribArray) (GLuint index); + void (*glBindAttribLocation) (GLuint program, GLuint index, + const GLchar * name); + + void (*glLinkProgram) (GLuint program); + void (*glShaderSource) (GLuint shader, GLsizei count, + const GLchar * *string, const GLint * length); + void (*glUseProgram) (GLuint program); + void (*glUniform1i) (GLint location, GLint v0); + void (*glUniform1f) (GLint location, GLfloat v0); + void (*glUniform4f) (GLint location, GLfloat v0, GLfloat v1, + GLfloat v2, GLfloat v3); + void (*glUniform1fv) (GLint location, GLsizei count, const GLfloat * value); + void (*glUniform2fv) (GLint location, GLsizei count, const GLfloat * value); + void (*glUniform4fv) (GLint location, GLsizei count, const GLfloat * value); + void (*glUniformMatrix3fv) (GLint location, GLsizei count, + GLboolean transpose, const GLfloat * value); + GLuint(*glCreateProgram) (void); + GLuint(*glDeleteProgram) (GLuint); + GLuint(*glCreateShader) (GLenum type); + void (*glCompileShader) (GLuint shader); + void (*glAttachShader) (GLuint program, GLuint shader); + void (*glDeleteShader) (GLuint shader); + void (*glGetShaderiv) (GLuint shader, GLenum pname, GLint * params); + void (*glGetShaderInfoLog) (GLuint shader, GLsizei bufSize, + GLsizei * length, GLchar * infoLog); + void (*glGetProgramiv) (GLuint program, GLenum pname, GLint * params); + void (*glGetProgramInfoLog) (GLuint program, GLsizei bufSize, + GLsizei * length, GLchar * infoLog); + GLint(*glGetUniformLocation) (GLuint program, const GLchar * name); } glamor_gl_dispatch; - typedef void *(*get_proc_address_t) (const char *); _X_EXPORT Bool -glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch, - int gl_version, - get_proc_address_t get_proc_address); +glamor_gl_dispatch_init_impl(struct glamor_gl_dispatch *dispatch, + int gl_version, + get_proc_address_t get_proc_address); _X_EXPORT Bool + glamor_gl_dispatch_init(ScreenPtr screen, - struct glamor_gl_dispatch *dispatch, - int gl_version); + struct glamor_gl_dispatch *dispatch, int gl_version); diff --git a/xorg-server/glamor/glamor_glext.h b/xorg-server/glamor/glamor_glext.h index 1f7206b99..2a220c32f 100644 --- a/xorg-server/glamor/glamor_glext.h +++ b/xorg-server/glamor/glamor_glext.h @@ -26,7 +26,6 @@ * */ - #ifdef GLAMOR_GLES2 #define GL_BGRA GL_BGRA_EXT diff --git a/xorg-server/glamor/glamor_glyphblt.c b/xorg-server/glamor/glamor_glyphblt.c index b55327c4b..6f754ce2b 100644 --- a/xorg-server/glamor/glamor_glyphblt.c +++ b/xorg-server/glamor/glamor_glyphblt.c @@ -30,89 +30,90 @@ static Bool _glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase, Bool fallback) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_pixmap(pDrawable) - && glamor_ddx_fallback_check_gc(pGC)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_pixmap(pDrawable) + && glamor_ddx_fallback_check_gc(pGC)) + return FALSE; - miImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); - return TRUE; + miImageGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + return TRUE; } void glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase) { - _glamor_image_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, TRUE); + _glamor_image_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, + TRUE); } Bool glamor_image_glyph_blt_nf(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase) { - return _glamor_image_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, FALSE); + return _glamor_image_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, + pglyphBase, FALSE); } static Bool _glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase, Bool fallback) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_pixmap(pDrawable) - && glamor_ddx_fallback_check_gc(pGC)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_pixmap(pDrawable) + && glamor_ddx_fallback_check_gc(pGC)) + return FALSE; - miPolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); - return TRUE; + miPolyGlyphBlt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase); + return TRUE; } void glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase) { - _glamor_poly_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, TRUE); + _glamor_poly_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, + TRUE); } Bool glamor_poly_glyph_blt_nf(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase) + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase) { - return _glamor_poly_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, pglyphBase, FALSE); + return _glamor_poly_glyph_blt(pDrawable, pGC, x, y, nglyph, ppci, + pglyphBase, FALSE); } static Bool _glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y, Bool fallback) + DrawablePtr pDrawable, int w, int h, int x, int y, + Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_pixmap(pDrawable) - && glamor_ddx_fallback_check_pixmap(&pBitmap->drawable) - && glamor_ddx_fallback_check_gc(pGC)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_pixmap(pDrawable) + && glamor_ddx_fallback_check_pixmap(&pBitmap->drawable) + && glamor_ddx_fallback_check_gc(pGC)) + return FALSE; - miPushPixels(pGC, pBitmap, pDrawable, w, h, x, y); - return TRUE; + miPushPixels(pGC, pBitmap, pDrawable, w, h, x, y); + return TRUE; } void glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y) + DrawablePtr pDrawable, int w, int h, int x, int y) { - _glamor_push_pixels(pGC, pBitmap, pDrawable, w, h, x, y, TRUE); + _glamor_push_pixels(pGC, pBitmap, pDrawable, w, h, x, y, TRUE); } Bool glamor_push_pixels_nf(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y) + DrawablePtr pDrawable, int w, int h, int x, int y) { - return _glamor_push_pixels(pGC, pBitmap, pDrawable, w, h, x, y, FALSE); + return _glamor_push_pixels(pGC, pBitmap, pDrawable, w, h, x, y, FALSE); } - diff --git a/xorg-server/glamor/glamor_glyphs.c b/xorg-server/glamor/glamor_glyphs.c index fc361df42..3586b33da 100644 --- a/xorg-server/glamor/glamor_glyphs.c +++ b/xorg-server/glamor/glamor_glyphs.c @@ -71,25 +71,25 @@ #define MASK_CACHE_MASK ((1LL << (MASK_CACHE_WIDTH)) - 1) typedef struct { - PicturePtr source; - glamor_composite_rect_t rects[GLYPH_BUFFER_SIZE + 4]; - int count; + PicturePtr source; + glamor_composite_rect_t rects[GLYPH_BUFFER_SIZE + 4]; + int count; } glamor_glyph_buffer_t; struct glamor_glyph { - glamor_glyph_cache_t *cache; - uint16_t x, y; - uint16_t size, pos; - unsigned long long left_x1_map, left_x2_map; - unsigned long long right_x1_map, right_x2_map; /* Use to check real intersect or not. */ - Bool has_edge_map; - Bool cached; + glamor_glyph_cache_t *cache; + uint16_t x, y; + uint16_t size, pos; + unsigned long long left_x1_map, left_x2_map; + unsigned long long right_x1_map, right_x2_map; /* Use to check real intersect or not. */ + Bool has_edge_map; + Bool cached; }; typedef enum { - GLAMOR_GLYPH_SUCCESS, /* Glyph added to render buffer */ - GLAMOR_GLYPH_FAIL, /* out of memory, etc */ - GLAMOR_GLYPH_NEED_FLUSH, /* would evict a glyph already in the buffer */ + GLAMOR_GLYPH_SUCCESS, /* Glyph added to render buffer */ + GLAMOR_GLYPH_FAIL, /* out of memory, etc */ + GLAMOR_GLYPH_NEED_FLUSH, /* would evict a glyph already in the buffer */ } glamor_glyph_cache_result_t; #define NeedsComponent(f) (PICT_FORMAT_A(f) != 0 && PICT_FORMAT_RGB(f) != 0) @@ -98,7 +98,7 @@ static DevPrivateKeyRec glamor_glyph_key; static inline struct glamor_glyph * glamor_glyph_get_private(GlyphPtr glyph) { - return (struct glamor_glyph*)glyph->devPrivates; + return (struct glamor_glyph *) glyph->devPrivates; } /* @@ -122,170 +122,175 @@ glamor_glyph_get_private(GlyphPtr glyph) */ struct glamor_glyph_mask_cache_entry { - int idx; - int width; - int height; - int x; - int y; + int idx; + int width; + int height; + int x; + int y; }; static struct glamor_glyph_mask_cache { - PixmapPtr pixmap; - struct glamor_glyph_mask_cache_entry mcache[MASK_CACHE_WIDTH]; - unsigned int free_bitmap; - unsigned int cleared_bitmap; -}*mask_cache[GLAMOR_NUM_GLYPH_CACHE_FORMATS] = {NULL}; + PixmapPtr pixmap; + struct glamor_glyph_mask_cache_entry mcache[MASK_CACHE_WIDTH]; + unsigned int free_bitmap; + unsigned int cleared_bitmap; +} *mask_cache[GLAMOR_NUM_GLYPH_CACHE_FORMATS] = { +NULL}; static void clear_mask_cache_bitmap(struct glamor_glyph_mask_cache *maskcache, - unsigned int clear_mask_bits) + unsigned int clear_mask_bits) { - unsigned int i = 0; - BoxRec box[MASK_CACHE_WIDTH]; - int box_cnt = 0; - - assert((clear_mask_bits & ~MASK_CACHE_MASK) == 0); - for(i = 0; i < MASK_CACHE_WIDTH;i++) - { - if (clear_mask_bits & (1 << i)) { - box[box_cnt].x1 = maskcache->mcache[i].x; - box[box_cnt].x2 = maskcache->mcache[i].x + MASK_CACHE_MAX_SIZE; - box[box_cnt].y1 = maskcache->mcache[i].y; - box[box_cnt].y2 = maskcache->mcache[i].y + MASK_CACHE_MAX_SIZE; - box_cnt++; - } - } - glamor_solid_boxes(maskcache->pixmap, box, box_cnt, 0); - maskcache->cleared_bitmap |= clear_mask_bits; + unsigned int i = 0; + BoxRec box[MASK_CACHE_WIDTH]; + int box_cnt = 0; + + assert((clear_mask_bits & ~MASK_CACHE_MASK) == 0); + for (i = 0; i < MASK_CACHE_WIDTH; i++) { + if (clear_mask_bits & (1 << i)) { + box[box_cnt].x1 = maskcache->mcache[i].x; + box[box_cnt].x2 = maskcache->mcache[i].x + MASK_CACHE_MAX_SIZE; + box[box_cnt].y1 = maskcache->mcache[i].y; + box[box_cnt].y2 = maskcache->mcache[i].y + MASK_CACHE_MAX_SIZE; + box_cnt++; + } + } + glamor_solid_boxes(maskcache->pixmap, box, box_cnt, 0); + maskcache->cleared_bitmap |= clear_mask_bits; } static void clear_mask_cache(struct glamor_glyph_mask_cache *maskcache) { - int x = 0; - int cnt = MASK_CACHE_WIDTH; - unsigned int i = 0; - struct glamor_glyph_mask_cache_entry *mce; - glamor_solid(maskcache->pixmap, 0, CACHE_PICTURE_SIZE, CACHE_PICTURE_SIZE, - MASK_CACHE_MAX_SIZE, GXcopy, 0xFFFFFFFF, 0); - mce = &maskcache->mcache[0]; - while(cnt--) { - mce->width = 0; - mce->height = 0; - mce->x = x; - mce->y = CACHE_PICTURE_SIZE; - mce->idx = i++; - x += MASK_CACHE_MAX_SIZE; - mce++; - } - maskcache->free_bitmap = MASK_CACHE_MASK; - maskcache->cleared_bitmap = MASK_CACHE_MASK; + int x = 0; + int cnt = MASK_CACHE_WIDTH; + unsigned int i = 0; + struct glamor_glyph_mask_cache_entry *mce; + + glamor_solid(maskcache->pixmap, 0, CACHE_PICTURE_SIZE, CACHE_PICTURE_SIZE, + MASK_CACHE_MAX_SIZE, GXcopy, 0xFFFFFFFF, 0); + mce = &maskcache->mcache[0]; + while (cnt--) { + mce->width = 0; + mce->height = 0; + mce->x = x; + mce->y = CACHE_PICTURE_SIZE; + mce->idx = i++; + x += MASK_CACHE_MAX_SIZE; + mce++; + } + maskcache->free_bitmap = MASK_CACHE_MASK; + maskcache->cleared_bitmap = MASK_CACHE_MASK; } static int find_continuous_bits(unsigned int bits, int bits_cnt, unsigned int *pbits_mask) { - int idx = 0; - unsigned int bits_mask; - bits_mask = ((1LL << bits_cnt) - 1); - - if (unlikely(bits_cnt > 56)) { - while(bits) { - if ((bits & bits_mask) == bits_mask) { - *pbits_mask = bits_mask << idx; - return idx; - } - bits >>= 1; - idx++; - } - } else { - idx = __fls(bits); - while(bits) { - unsigned int temp_bits; - temp_bits = bits_mask << (idx - bits_cnt + 1); - if ((bits & temp_bits) == temp_bits) { - *pbits_mask = temp_bits; - return (idx - bits_cnt + 1); - } - /* Find first zero. And clear the tested bit.*/ - bits &= ~(1LL<<idx); - idx = __fls(~bits); - bits &= ~((1LL << idx) - 1); - idx--; - } - } - return -1; + int idx = 0; + unsigned int bits_mask; + + bits_mask = ((1LL << bits_cnt) - 1); + + if (_X_UNLIKELY(bits_cnt > 56)) { + while (bits) { + if ((bits & bits_mask) == bits_mask) { + *pbits_mask = bits_mask << idx; + return idx; + } + bits >>= 1; + idx++; + } + } + else { + idx = __fls(bits); + while (bits) { + unsigned int temp_bits; + + temp_bits = bits_mask << (idx - bits_cnt + 1); + if ((bits & temp_bits) == temp_bits) { + *pbits_mask = temp_bits; + return (idx - bits_cnt + 1); + } + /* Find first zero. And clear the tested bit. */ + bits &= ~(1LL << idx); + idx = __fls(~bits); + bits &= ~((1LL << idx) - 1); + idx--; + } + } + return -1; } static struct glamor_glyph_mask_cache_entry * get_mask_cache(struct glamor_glyph_mask_cache *maskcache, int blocks) { - int free_cleared_bit, idx = -1; - int retry_cnt = 0; - unsigned int bits_mask = 0; - - if (maskcache->free_bitmap == 0) - return NULL; -retry: - free_cleared_bit = maskcache->free_bitmap & maskcache->cleared_bitmap; - if (free_cleared_bit && blocks == 1) { - idx = __fls(free_cleared_bit); - bits_mask = 1 << idx; - } else if (free_cleared_bit && blocks > 1) { - idx = find_continuous_bits(free_cleared_bit, blocks, &bits_mask); - } - - if (idx < 0) { - clear_mask_cache_bitmap(maskcache, maskcache->free_bitmap); - if (retry_cnt++ > 2) - return NULL; - goto retry; - } - - maskcache->cleared_bitmap &= ~bits_mask; - maskcache->free_bitmap &= ~bits_mask; - DEBUGF("get idx %d free %x clear %x \n", - idx, maskcache->free_bitmap, maskcache->cleared_bitmap); - return &maskcache->mcache[idx]; + int free_cleared_bit, idx = -1; + int retry_cnt = 0; + unsigned int bits_mask = 0; + + if (maskcache->free_bitmap == 0) + return NULL; + retry: + free_cleared_bit = maskcache->free_bitmap & maskcache->cleared_bitmap; + if (free_cleared_bit && blocks == 1) { + idx = __fls(free_cleared_bit); + bits_mask = 1 << idx; + } + else if (free_cleared_bit && blocks > 1) { + idx = find_continuous_bits(free_cleared_bit, blocks, &bits_mask); + } + + if (idx < 0) { + clear_mask_cache_bitmap(maskcache, maskcache->free_bitmap); + if (retry_cnt++ > 2) + return NULL; + goto retry; + } + + maskcache->cleared_bitmap &= ~bits_mask; + maskcache->free_bitmap &= ~bits_mask; + DEBUGF("get idx %d free %x clear %x \n", + idx, maskcache->free_bitmap, maskcache->cleared_bitmap); + return &maskcache->mcache[idx]; } static void put_mask_cache_bitmap(struct glamor_glyph_mask_cache *maskcache, - unsigned int bitmap) + unsigned int bitmap) { - maskcache->free_bitmap |= bitmap; - DEBUGF("put bitmap %x free %x clear %x \n", - bitmap, maskcache->free_bitmap, maskcache->cleared_bitmap); + maskcache->free_bitmap |= bitmap; + DEBUGF("put bitmap %x free %x clear %x \n", + bitmap, maskcache->free_bitmap, maskcache->cleared_bitmap); } static void glamor_unrealize_glyph_caches(ScreenPtr pScreen) { - glamor_screen_private *glamor = glamor_get_screen_private(pScreen); - int i; + glamor_screen_private *glamor = glamor_get_screen_private(pScreen); + int i; - if (!glamor->glyph_cache_initialized) - return; + if (!glamor->glyph_cache_initialized) + return; - for (i = 0; i < GLAMOR_NUM_GLYPH_CACHE_FORMATS; i++) { - glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; + for (i = 0; i < GLAMOR_NUM_GLYPH_CACHE_FORMATS; i++) { + glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; - if (cache->picture) - FreePicture(cache->picture, 0); + if (cache->picture) + FreePicture(cache->picture, 0); - if (cache->glyphs) - free(cache->glyphs); + if (cache->glyphs) + free(cache->glyphs); - if (mask_cache[i]) - free(mask_cache[i]); - } - glamor->glyph_cache_initialized = FALSE; + if (mask_cache[i]) + free(mask_cache[i]); + } + glamor->glyph_cache_initialized = FALSE; } void glamor_glyphs_fini(ScreenPtr pScreen) { - glamor_unrealize_glyph_caches(pScreen); + glamor_unrealize_glyph_caches(pScreen); } /* All caches for a single format share a single pixmap for glyph storage, @@ -301,80 +306,80 @@ glamor_glyphs_fini(ScreenPtr pScreen) static Bool glamor_realize_glyph_caches(ScreenPtr pScreen) { - glamor_screen_private *glamor = glamor_get_screen_private(pScreen); - unsigned int formats[] = { - PIXMAN_a8, - PIXMAN_a8r8g8b8, - }; - int i; - - if (glamor->glyph_cache_initialized) - return TRUE; - - glamor->glyph_cache_initialized = TRUE; - memset(glamor->glyphCaches, 0, sizeof(glamor->glyphCaches)); - - for (i = 0; i < sizeof(formats) / sizeof(formats[0]); i++) { - glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; - PixmapPtr pixmap; - PicturePtr picture; - XID component_alpha; - int depth = PIXMAN_FORMAT_DEPTH(formats[i]); - int error; - PictFormatPtr pPictFormat = - PictureMatchFormat(pScreen, depth, formats[i]); - if (!pPictFormat) - goto bail; - - /* Now allocate the pixmap and picture */ - pixmap = pScreen->CreatePixmap(pScreen, - CACHE_PICTURE_SIZE, - CACHE_PICTURE_SIZE + MASK_CACHE_MAX_SIZE, depth, - 0); - if (!pixmap) - goto bail; - - component_alpha = NeedsComponent(pPictFormat->format); - picture = CreatePicture(0, &pixmap->drawable, pPictFormat, - CPComponentAlpha, &component_alpha, - serverClient, &error); - - pScreen->DestroyPixmap(pixmap); - if (!picture) - goto bail; - - ValidatePicture(picture); - - cache->picture = picture; - cache->glyphs = calloc(sizeof(GlyphPtr), GLYPH_CACHE_SIZE); - if (!cache->glyphs) - goto bail; - - cache->evict = rand() % GLYPH_CACHE_SIZE; - mask_cache[i] = calloc(1, sizeof(*mask_cache[i])); - mask_cache[i]->pixmap = pixmap; - clear_mask_cache(mask_cache[i]); - } - assert(i == GLAMOR_NUM_GLYPH_CACHE_FORMATS); - - return TRUE; - - bail: - glamor_unrealize_glyph_caches(pScreen); - return FALSE; + glamor_screen_private *glamor = glamor_get_screen_private(pScreen); + + unsigned int formats[] = { + PIXMAN_a8, + PIXMAN_a8r8g8b8, + }; + int i; + + if (glamor->glyph_cache_initialized) + return TRUE; + + glamor->glyph_cache_initialized = TRUE; + memset(glamor->glyphCaches, 0, sizeof(glamor->glyphCaches)); + + for (i = 0; i < sizeof(formats) / sizeof(formats[0]); i++) { + glamor_glyph_cache_t *cache = &glamor->glyphCaches[i]; + PixmapPtr pixmap; + PicturePtr picture; + XID component_alpha; + int depth = PIXMAN_FORMAT_DEPTH(formats[i]); + int error; + PictFormatPtr pPictFormat = + PictureMatchFormat(pScreen, depth, formats[i]); + if (!pPictFormat) + goto bail; + + /* Now allocate the pixmap and picture */ + pixmap = pScreen->CreatePixmap(pScreen, + CACHE_PICTURE_SIZE, + CACHE_PICTURE_SIZE + MASK_CACHE_MAX_SIZE, + depth, 0); + if (!pixmap) + goto bail; + + component_alpha = NeedsComponent(pPictFormat->format); + picture = CreatePicture(0, &pixmap->drawable, pPictFormat, + CPComponentAlpha, &component_alpha, + serverClient, &error); + + pScreen->DestroyPixmap(pixmap); + if (!picture) + goto bail; + + ValidatePicture(picture); + + cache->picture = picture; + cache->glyphs = calloc(sizeof(GlyphPtr), GLYPH_CACHE_SIZE); + if (!cache->glyphs) + goto bail; + + cache->evict = rand() % GLYPH_CACHE_SIZE; + mask_cache[i] = calloc(1, sizeof(*mask_cache[i])); + mask_cache[i]->pixmap = pixmap; + clear_mask_cache(mask_cache[i]); + } + assert(i == GLAMOR_NUM_GLYPH_CACHE_FORMATS); + + return TRUE; + + bail: + glamor_unrealize_glyph_caches(pScreen); + return FALSE; } - Bool glamor_glyphs_init(ScreenPtr pScreen) { - if (!dixRegisterPrivateKey(&glamor_glyph_key, - PRIVATE_GLYPH, sizeof(struct glamor_glyph))) - return FALSE; + if (!dixRegisterPrivateKey(&glamor_glyph_key, + PRIVATE_GLYPH, sizeof(struct glamor_glyph))) + return FALSE; - /* Skip pixmap creation if we don't intend to use it. */ + /* Skip pixmap creation if we don't intend to use it. */ - return glamor_realize_glyph_caches(pScreen); + return glamor_realize_glyph_caches(pScreen); } /* The most efficient thing to way to upload the glyph to the screen @@ -382,209 +387,209 @@ glamor_glyphs_init(ScreenPtr pScreen) */ static void glamor_glyph_cache_upload_glyph(ScreenPtr screen, - glamor_glyph_cache_t * cache, - GlyphPtr glyph, int x, int y) + glamor_glyph_cache_t *cache, + GlyphPtr glyph, int x, int y) { - PicturePtr pGlyphPicture = GlyphPicture(glyph)[screen->myNum]; - PixmapPtr pGlyphPixmap = (PixmapPtr) pGlyphPicture->pDrawable; - PixmapPtr pCachePixmap = (PixmapPtr) cache->picture->pDrawable; - PixmapPtr scratch; - BoxRec box; - GCPtr gc; - - gc = GetScratchGC(pCachePixmap->drawable.depth, screen); - if (!gc) - return; - - ValidateGC(&pCachePixmap->drawable, gc); - - scratch = pGlyphPixmap; - if (pGlyphPixmap->drawable.depth != pCachePixmap->drawable.depth) { - - scratch = glamor_create_pixmap(screen, - glyph->info.width, - glyph->info.height, - pCachePixmap-> - drawable.depth, 0); - if (scratch) { - PicturePtr picture; - int error; - - picture = - CreatePicture(0, - &scratch->drawable, - PictureMatchFormat - (screen, - pCachePixmap-> - drawable.depth, - cache->picture->format), - 0, NULL, serverClient, - &error); - if (picture) { - ValidatePicture(picture); - glamor_composite(PictOpSrc, - pGlyphPicture, - NULL, picture, - 0, 0, 0, 0, 0, - 0, - glyph->info.width, - glyph->info.height); - FreePicture(picture, 0); - } - } else { - scratch = pGlyphPixmap; - } - } - - box.x1 = x; - box.y1 = y; - box.x2 = x + glyph->info.width; - box.y2 = y + glyph->info.height; - glamor_copy_n_to_n_nf(&scratch->drawable, - &pCachePixmap->drawable, NULL, - &box, 1, - -x, -y, - FALSE, FALSE, 0, NULL); - if (scratch != pGlyphPixmap) - screen->DestroyPixmap(scratch); - - FreeScratchGC(gc); + PicturePtr pGlyphPicture = GlyphPicture(glyph)[screen->myNum]; + PixmapPtr pGlyphPixmap = (PixmapPtr) pGlyphPicture->pDrawable; + PixmapPtr pCachePixmap = (PixmapPtr) cache->picture->pDrawable; + PixmapPtr scratch; + BoxRec box; + GCPtr gc; + + gc = GetScratchGC(pCachePixmap->drawable.depth, screen); + if (!gc) + return; + + ValidateGC(&pCachePixmap->drawable, gc); + + scratch = pGlyphPixmap; + if (pGlyphPixmap->drawable.depth != pCachePixmap->drawable.depth) { + + scratch = glamor_create_pixmap(screen, + glyph->info.width, + glyph->info.height, + pCachePixmap->drawable.depth, 0); + if (scratch) { + PicturePtr picture; + int error; + + picture = + CreatePicture(0, + &scratch->drawable, + PictureMatchFormat + (screen, + pCachePixmap->drawable.depth, + cache->picture->format), + 0, NULL, serverClient, &error); + if (picture) { + ValidatePicture(picture); + glamor_composite(PictOpSrc, + pGlyphPicture, + NULL, picture, + 0, 0, 0, 0, 0, + 0, glyph->info.width, glyph->info.height); + FreePicture(picture, 0); + } + } + else { + scratch = pGlyphPixmap; + } + } + + box.x1 = x; + box.y1 = y; + box.x2 = x + glyph->info.width; + box.y2 = y + glyph->info.height; + glamor_copy_n_to_n_nf(&scratch->drawable, + &pCachePixmap->drawable, NULL, + &box, 1, -x, -y, FALSE, FALSE, 0, NULL); + if (scratch != pGlyphPixmap) + screen->DestroyPixmap(scratch); + + FreeScratchGC(gc); } - void glamor_glyph_unrealize(ScreenPtr screen, GlyphPtr glyph) { - struct glamor_glyph *priv; + struct glamor_glyph *priv; - /* Use Lookup in case we have not attached to this glyph. */ - priv = glamor_glyph_get_private(glyph); + /* Use Lookup in case we have not attached to this glyph. */ + priv = glamor_glyph_get_private(glyph); - if (priv->cached) - priv->cache->glyphs[priv->pos] = NULL; + if (priv->cached) + priv->cache->glyphs[priv->pos] = NULL; } /* Cut and paste from render/glyph.c - probably should export it instead */ static void glamor_glyph_extents(int nlist, - GlyphListPtr list, GlyphPtr * glyphs, BoxPtr extents) + GlyphListPtr list, GlyphPtr *glyphs, BoxPtr extents) { - int x1, x2, y1, y2; - int x, y, n; - - x1 = y1 = MAXSHORT; - x2 = y2 = MINSHORT; - x = y = 0; - while (nlist--) { - x += list->xOff; - y += list->yOff; - n = list->len; - list++; - while (n--) { - GlyphPtr glyph = *glyphs++; - int v; - - v = x - glyph->info.x; - if (v < x1) - x1 = v; - v += glyph->info.width; - if (v > x2) - x2 = v; - - v = y - glyph->info.y; - if (v < y1) - y1 = v; - v += glyph->info.height; - if (v > y2) - y2 = v; - - x += glyph->info.xOff; - y += glyph->info.yOff; - } - } - - extents->x1 = x1 < MINSHORT ? MINSHORT : x1; - extents->x2 = x2 > MAXSHORT ? MAXSHORT : x2; - extents->y1 = y1 < MINSHORT ? MINSHORT : y1; - extents->y2 = y2 > MAXSHORT ? MAXSHORT : y2; + int x1, x2, y1, y2; + int x, y, n; + + x1 = y1 = MAXSHORT; + x2 = y2 = MINSHORT; + x = y = 0; + while (nlist--) { + x += list->xOff; + y += list->yOff; + n = list->len; + list++; + while (n--) { + GlyphPtr glyph = *glyphs++; + int v; + + v = x - glyph->info.x; + if (v < x1) + x1 = v; + v += glyph->info.width; + if (v > x2) + x2 = v; + + v = y - glyph->info.y; + if (v < y1) + y1 = v; + v += glyph->info.height; + if (v > y2) + y2 = v; + + x += glyph->info.xOff; + y += glyph->info.yOff; + } + } + + extents->x1 = x1 < MINSHORT ? MINSHORT : x1; + extents->x2 = x2 > MAXSHORT ? MAXSHORT : x2; + extents->y1 = y1 < MINSHORT ? MINSHORT : y1; + extents->y2 = y2 > MAXSHORT ? MAXSHORT : y2; } static void glamor_glyph_priv_get_edge_map(GlyphPtr glyph, struct glamor_glyph *priv, - PicturePtr glyph_picture) + PicturePtr glyph_picture) { - PixmapPtr glyph_pixmap = (PixmapPtr) glyph_picture->pDrawable; - int j; - unsigned long long left_x1_map = 0, left_x2_map = 0; - unsigned long long right_x1_map = 0, right_x2_map = 0; - int bitsPerPixel; - int stride; - void *bits; - int width; - unsigned int left_x1_data = 0, left_x2_data = 0; - unsigned int right_x1_data = 0, right_x2_data = 0; - - bitsPerPixel = glyph_pixmap->drawable.bitsPerPixel; - stride = glyph_pixmap->devKind; - bits = glyph_pixmap->devPrivate.ptr; - width = glyph->info.width; - - if (glyph_pixmap->drawable.width < 2 - || !(glyph_pixmap->drawable.depth == 8 - || glyph_pixmap->drawable.depth == 1 - || glyph_pixmap->drawable.depth == 32)) { - priv->has_edge_map = FALSE; - return; - } - - left_x1_map = left_x2_map = 0; - right_x1_map = right_x2_map = 0; - - for(j = 0; j < glyph_pixmap->drawable.height; j++) - { - if (bitsPerPixel == 8) { - unsigned char *data; - data = (unsigned char*)((unsigned char*)bits + stride * j); - left_x1_data = *data++; - left_x2_data = *data; - data = (unsigned char*)((unsigned char*)bits + stride * j + width - 2); - right_x1_data = *data++; - right_x2_data = *data; - } else if (bitsPerPixel == 32) { - left_x1_data = *((unsigned int*)bits + stride/4 * j); - left_x2_data = *((unsigned int*)bits + stride/4 * j + 1); - right_x1_data = *((unsigned int*)bits + stride/4 * j + width - 2); - right_x2_data = *((unsigned int*)bits + stride/4 * j + width - 1); - } else if (bitsPerPixel == 1) { - unsigned char temp; - temp = *((unsigned char*)glyph_pixmap->devPrivate.ptr - + glyph_pixmap->devKind * j) & 0x3; - left_x1_data = temp & 0x1; - left_x2_data = temp & 0x2; - - temp = *((unsigned char*)glyph_pixmap->devPrivate.ptr - + glyph_pixmap->devKind * j - + (glyph_pixmap->drawable.width - 2)/8); - right_x1_data = temp - & (1 << ((glyph_pixmap->drawable.width - 2) % 8)); - temp = *((unsigned char*)glyph_pixmap->devPrivate.ptr - + glyph_pixmap->devKind * j - + (glyph_pixmap->drawable.width - 1)/8); - right_x2_data = temp - & (1 << ((glyph_pixmap->drawable.width - 1) % 8)); - } - left_x1_map |= (left_x1_data !=0) << j; - left_x2_map |= (left_x2_data !=0) << j; - right_x1_map |= (right_x1_data !=0) << j; - right_x2_map |= (right_x2_data !=0) << j; - } - - priv->left_x1_map = left_x1_map; - priv->left_x2_map = left_x2_map; - priv->right_x1_map = right_x1_map; - priv->right_x2_map = right_x2_map; - priv->has_edge_map = TRUE; - return; + PixmapPtr glyph_pixmap = (PixmapPtr) glyph_picture->pDrawable; + int j; + unsigned long long left_x1_map = 0, left_x2_map = 0; + unsigned long long right_x1_map = 0, right_x2_map = 0; + int bitsPerPixel; + int stride; + void *bits; + int width; + unsigned int left_x1_data = 0, left_x2_data = 0; + unsigned int right_x1_data = 0, right_x2_data = 0; + + bitsPerPixel = glyph_pixmap->drawable.bitsPerPixel; + stride = glyph_pixmap->devKind; + bits = glyph_pixmap->devPrivate.ptr; + width = glyph->info.width; + + if (glyph_pixmap->drawable.width < 2 + || !(glyph_pixmap->drawable.depth == 8 + || glyph_pixmap->drawable.depth == 1 + || glyph_pixmap->drawable.depth == 32)) { + priv->has_edge_map = FALSE; + return; + } + + left_x1_map = left_x2_map = 0; + right_x1_map = right_x2_map = 0; + + for (j = 0; j < glyph_pixmap->drawable.height; j++) { + if (bitsPerPixel == 8) { + unsigned char *data; + + data = (unsigned char *) ((unsigned char *) bits + stride * j); + left_x1_data = *data++; + left_x2_data = *data; + data = + (unsigned char *) ((unsigned char *) bits + stride * j + width - + 2); + right_x1_data = *data++; + right_x2_data = *data; + } + else if (bitsPerPixel == 32) { + left_x1_data = *((unsigned int *) bits + stride / 4 * j); + left_x2_data = *((unsigned int *) bits + stride / 4 * j + 1); + right_x1_data = + *((unsigned int *) bits + stride / 4 * j + width - 2); + right_x2_data = + *((unsigned int *) bits + stride / 4 * j + width - 1); + } + else if (bitsPerPixel == 1) { + unsigned char temp; + + temp = *((unsigned char *) glyph_pixmap->devPrivate.ptr + + glyph_pixmap->devKind * j) & 0x3; + left_x1_data = temp & 0x1; + left_x2_data = temp & 0x2; + + temp = *((unsigned char *) glyph_pixmap->devPrivate.ptr + + glyph_pixmap->devKind * j + + (glyph_pixmap->drawable.width - 2) / 8); + right_x1_data = temp + & (1 << ((glyph_pixmap->drawable.width - 2) % 8)); + temp = *((unsigned char *) glyph_pixmap->devPrivate.ptr + + glyph_pixmap->devKind * j + + (glyph_pixmap->drawable.width - 1) / 8); + right_x2_data = temp + & (1 << ((glyph_pixmap->drawable.width - 1) % 8)); + } + left_x1_map |= (left_x1_data != 0) << j; + left_x2_map |= (left_x2_data != 0) << j; + right_x1_map |= (right_x1_data != 0) << j; + right_x2_map |= (right_x2_data != 0) << j; + } + + priv->left_x1_map = left_x1_map; + priv->left_x2_map = left_x2_map; + priv->right_x1_map = right_x1_map; + priv->right_x2_map = right_x2_map; + priv->has_edge_map = TRUE; + return; } /** @@ -597,82 +602,80 @@ glamor_glyph_priv_get_edge_map(GlyphPtr glyph, struct glamor_glyph *priv, #define INTERSECTED 1 struct glamor_glyph_list { - int nlist; - GlyphListPtr list; - GlyphPtr *glyphs; - int type; + int nlist; + GlyphListPtr list; + GlyphPtr *glyphs; + int type; }; static Bool glyph_new_fixed_list(struct glamor_glyph_list *fixed_list, - GlyphPtr *cur_glyphs, - GlyphPtr **head_glyphs, - GlyphListPtr cur_list, - int cur_pos, int cur_x, int cur_y, - int x1, int y1, int x2, int y2, - GlyphListPtr *head_list, - int *head_pos, - int *head_x, - int *head_y, - int *fixed_cnt, - int type, - BoxPtr prev_extents - ) + GlyphPtr *cur_glyphs, + GlyphPtr ** head_glyphs, + GlyphListPtr cur_list, + int cur_pos, int cur_x, int cur_y, + int x1, int y1, int x2, int y2, + GlyphListPtr *head_list, + int *head_pos, + int *head_x, + int *head_y, int *fixed_cnt, int type, BoxPtr prev_extents) { - int x_off = 0; - int y_off = 0; - int n_off = 0; - int list_cnt; - if (type == NON_INTERSECTED) { - if (x1 < prev_extents->x2 && x2 > prev_extents->x1 - && y1 < prev_extents->y2 && y2 > prev_extents->y1) - return FALSE; - x_off = (*(cur_glyphs-1))->info.xOff; - y_off = (*(cur_glyphs-1))->info.yOff; - n_off = 1; - } - - list_cnt = cur_list - *head_list + 1; - if (cur_pos <= n_off) { - DEBUGF("break at %d n_off %d\n", cur_pos, n_off); - list_cnt--; - if (cur_pos < n_off) { - /* we overlap with previous list's last glyph. */ - x_off += cur_list->xOff; - y_off += cur_list->yOff; - cur_list--; - cur_pos = cur_list->len; - if (cur_pos <= n_off) { - list_cnt--; - } - } - } - DEBUGF("got %d lists\n", list_cnt); - if (list_cnt != 0) { - fixed_list->list = malloc(list_cnt * sizeof(*cur_list)); - memcpy(fixed_list->list, *head_list, list_cnt * sizeof(*cur_list)); - fixed_list->list[0].xOff = *head_x; - fixed_list->list[0].yOff = *head_y; - fixed_list->glyphs = *head_glyphs; - fixed_list->type = type & INTERSECTED_TYPE_MASK; - fixed_list->nlist = list_cnt; - if (cur_list != *head_list) { - fixed_list->list[0].len = (*head_list)->len - *head_pos; - if (cur_pos != n_off) - fixed_list->list[list_cnt - 1].len = cur_pos - n_off; - } else - fixed_list->list[0].len = cur_pos - *head_pos - n_off; - (*fixed_cnt)++; - } - - if (type <= INTERSECTED) { - *head_list = cur_list; - *head_pos = cur_pos - n_off; - *head_x = cur_x - x_off; - *head_y = cur_y - y_off; - *head_glyphs = cur_glyphs - n_off; - } - return TRUE; + int x_off = 0; + int y_off = 0; + int n_off = 0; + int list_cnt; + + if (type == NON_INTERSECTED) { + if (x1 < prev_extents->x2 && x2 > prev_extents->x1 + && y1 < prev_extents->y2 && y2 > prev_extents->y1) + return FALSE; + x_off = (*(cur_glyphs - 1))->info.xOff; + y_off = (*(cur_glyphs - 1))->info.yOff; + n_off = 1; + } + + list_cnt = cur_list - *head_list + 1; + if (cur_pos <= n_off) { + DEBUGF("break at %d n_off %d\n", cur_pos, n_off); + list_cnt--; + if (cur_pos < n_off) { + /* we overlap with previous list's last glyph. */ + x_off += cur_list->xOff; + y_off += cur_list->yOff; + cur_list--; + cur_pos = cur_list->len; + if (cur_pos <= n_off) { + list_cnt--; + } + } + } + DEBUGF("got %d lists\n", list_cnt); + if (list_cnt != 0) { + fixed_list->list = malloc(list_cnt * sizeof(*cur_list)); + memcpy(fixed_list->list, *head_list, list_cnt * sizeof(*cur_list)); + fixed_list->list[0].xOff = *head_x; + fixed_list->list[0].yOff = *head_y; + fixed_list->glyphs = *head_glyphs; + fixed_list->type = type & INTERSECTED_TYPE_MASK; + fixed_list->nlist = list_cnt; + if (cur_list != *head_list) { + fixed_list->list[0].len = (*head_list)->len - *head_pos; + if (cur_pos != n_off) + fixed_list->list[list_cnt - 1].len = cur_pos - n_off; + } + else + fixed_list->list[0].len = cur_pos - *head_pos - n_off; + (*fixed_cnt)++; + } + + if (type <= INTERSECTED) { + *head_list = cur_list; + *head_pos = cur_pos - n_off; + *head_x = cur_x - x_off; + *head_y = cur_y - y_off; + *head_glyphs = cur_glyphs - n_off; + } + return TRUE; } /* @@ -692,463 +695,469 @@ glyph_new_fixed_list(struct glamor_glyph_list *fixed_list, **/ static int -glamor_glyphs_intersect(int nlist, GlyphListPtr list, GlyphPtr * glyphs, - PictFormatShort mask_format, - ScreenPtr screen, Bool check_fake_overlap, - struct glamor_glyph_list * fixed_list, - int fixed_size) +glamor_glyphs_intersect(int nlist, GlyphListPtr list, GlyphPtr *glyphs, + PictFormatShort mask_format, + ScreenPtr screen, Bool check_fake_overlap, + struct glamor_glyph_list *fixed_list, int fixed_size) { - int x1, x2, y1, y2; - int n; - int x, y; - BoxPtr extents; - BoxRec prev_extents; - Bool first = TRUE, first_list = TRUE; - Bool need_free_list_region = FALSE; - Bool need_free_fixed_list = FALSE; - struct glamor_glyph *priv = NULL; - Bool in_non_intersected_list = -1; - GlyphListPtr head_list; - int head_x, head_y, head_pos; - int fixed_cnt = 0; - GlyphPtr *head_glyphs; - GlyphListPtr cur_list = list; - RegionRec list_region; - RegionRec current_region; - BoxRec current_box; - - if (nlist > 1) { - pixman_region_init(&list_region); - need_free_list_region = TRUE; - } - - pixman_region_init(¤t_region); - - extents = pixman_region_extents(¤t_region); - - x = 0; - y = 0; - x1 = x2 = y1 = y2 = 0; - n = 0; - extents->x1 = 0; - extents->y1 = 0; - extents->x2 = 0; - extents->y2 = 0; - - head_list = list; - DEBUGF("has %d lists.\n", nlist); - while (nlist--) { - BoxRec left_box, right_box = {0}; - Bool has_left_edge_box = FALSE, has_right_edge_box = FALSE; - Bool left_to_right; - struct glamor_glyph *left_priv = NULL, *right_priv = NULL; - - x += list->xOff; - y += list->yOff; - n = list->len; - left_to_right = TRUE; - cur_list = list++; - - if (unlikely(!first_list)) { - pixman_region_init_with_extents(¤t_region, extents); - pixman_region_union(&list_region, &list_region, ¤t_region); - first = TRUE; - } else { - head_list = cur_list; - head_pos = cur_list->len - n; - head_x = x; - head_y = y; - head_glyphs = glyphs; - } - - DEBUGF("current list %p has %d glyphs\n", cur_list, n); - while (n--) { - GlyphPtr glyph = *glyphs++; - - DEBUGF("the %dth glyph\n", cur_list->len - n - 1); - if (glyph->info.width == 0 - || glyph->info.height == 0) { - x += glyph->info.xOff; - y += glyph->info.yOff; - continue; - } - if (mask_format - && mask_format != GlyphPicture(glyph)[screen->myNum]->format) { - need_free_fixed_list = TRUE; - goto done; - } - - x1 = x - glyph->info.x; - if (x1 < MINSHORT) - x1 = MINSHORT; - y1 = y - glyph->info.y; - if (y1 < MINSHORT) - y1 = MINSHORT; - if (check_fake_overlap) - priv = glamor_glyph_get_private(glyph); - - x2 = x1 + glyph->info.width; - y2 = y1 + glyph->info.height; - - if (x2 > MAXSHORT) - x2 = MAXSHORT; - if (y2 > MAXSHORT) - y2 = MAXSHORT; - - if (first) { - extents->x1 = x1; - extents->y1 = y1; - extents->x2 = x2; - extents->y2 = y2; - - prev_extents = *extents; - - first = FALSE; - if (check_fake_overlap && priv - && priv->has_edge_map && glyph->info.yOff == 0) { - left_box.x1 = x1; - left_box.x2 = x1 + 1; - left_box.y1 = y1; - - right_box.x1 = x2 - 2; - right_box.x2 = x2 - 1; - right_box.y1 = y1; - left_priv = right_priv = priv; - has_left_edge_box = TRUE; - has_right_edge_box = TRUE; - } - } else { - if (unlikely(!first_list)) { - current_box.x1 = x1; - current_box.y1 = y1; - current_box.x2 = x2; - current_box.y2 = y2; - if (pixman_region_contains_rectangle(&list_region, ¤t_box) != PIXMAN_REGION_OUT) { - need_free_fixed_list = TRUE; - goto done; - } - } - - if (x1 < extents->x2 && x2 > extents->x1 - && y1 < extents->y2 - && y2 > extents->y1) { - - if (check_fake_overlap && (has_left_edge_box || has_right_edge_box) - && priv->has_edge_map && glyph->info.yOff == 0) { - int left_dx, right_dx; - unsigned long long intersected; - - left_dx = has_left_edge_box ? 1 : 0; - right_dx = has_right_edge_box ? 1 : 0; - if (x1 + 1 < extents->x2 - right_dx && x2 - 1 > extents->x1 + left_dx) - goto real_intersected; - - if (left_to_right && has_right_edge_box) { - if (x1 == right_box.x1) { - intersected = ((priv->left_x1_map & right_priv->right_x1_map) - | (priv->left_x2_map & right_priv->right_x2_map)); - if (intersected) - goto real_intersected; - } else if (x1 == right_box.x2) { - intersected = (priv->left_x1_map & right_priv->right_x2_map); - if (intersected) { - #ifdef GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK - /* tolerate with two pixels overlap. */ - intersected &= ~(1<<__fls(intersected)); - if ((intersected & (intersected - 1))) - #endif - goto real_intersected; - } - } - } else if (!left_to_right && has_left_edge_box) { - if (x2 - 1 == left_box.x1) { - intersected = (priv->right_x2_map & left_priv->left_x1_map); - if (intersected) { - #ifdef GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK - /* tolerate with two pixels overlap. */ - intersected &= ~(1<<__fls(intersected)); - if ((intersected & (intersected - 1))) - #endif - goto real_intersected; - } - } else if (x2 - 1 == right_box.x2) { - if ((priv->right_x1_map & left_priv->left_x1_map) - || (priv->right_x2_map & left_priv->left_x2_map)) - goto real_intersected; - } - } else { - if (x1 < extents->x2 && x1 + 2 > extents->x1) - goto real_intersected; - } - goto non_intersected; - } else { -real_intersected: - DEBUGF("overlap with previous glyph.\n"); - if (in_non_intersected_list == 1) { - if (fixed_cnt >= fixed_size) { - need_free_fixed_list = TRUE; - goto done; - } - if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], - glyphs - 1, - &head_glyphs, - cur_list, - cur_list->len - (n + 1), x, y, - x1, y1, x2, y2, - &head_list, - &head_pos, - &head_x, - &head_y, &fixed_cnt, - NON_INTERSECTED, - &prev_extents - )){ - need_free_fixed_list = TRUE; - goto done; - } - } - - in_non_intersected_list = 0; - - } - } else { -non_intersected: - DEBUGF("doesn't overlap with previous glyph.\n"); - if (in_non_intersected_list == 0) { - if (fixed_cnt >= fixed_size) { - need_free_fixed_list = TRUE; - goto done; - } - if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], - glyphs - 1, - &head_glyphs, - cur_list, - cur_list->len - (n + 1), x, y, - x1, y1, x2, y2, - &head_list, - &head_pos, - &head_x, - &head_y, &fixed_cnt, - INTERSECTED, - &prev_extents - )) { - need_free_fixed_list = TRUE; - goto done; - } - } - in_non_intersected_list = 1; - } - prev_extents = *extents; - } - - if (check_fake_overlap && priv - && priv->has_edge_map && glyph->info.yOff == 0) { - if (!has_left_edge_box || x1 < extents->x1) { - left_box.x1 = x1; - left_box.x2 = x1 + 1; - left_box.y1 = y1; - has_left_edge_box = TRUE; - left_priv = priv; - } - - if (!has_right_edge_box || x2 > extents->x2) { - right_box.x1 = x2 - 2; - right_box.x2 = x2 - 1; - right_box.y1 = y1; - has_right_edge_box = TRUE; - right_priv = priv; - } - } - - if (x1 < extents->x1) - extents->x1 = x1; - if (x2 > extents->x2) - extents->x2 = x2; - - if (y1 < extents->y1) - extents->y1 = y1; - if (y2 > extents->y2) - extents->y2 = y2; - - x += glyph->info.xOff; - y += glyph->info.yOff; - } - first_list = FALSE; - } - - if (in_non_intersected_list == 0 && fixed_cnt == 0) { - fixed_cnt = -1; - goto done; - } - - if ((in_non_intersected_list != -1 - || head_pos != n) && (fixed_cnt > 0)) { - if (fixed_cnt >= fixed_size) { - need_free_fixed_list = TRUE; - goto done; - } - if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], - glyphs - 1, - &head_glyphs, - cur_list, - cur_list->len - (n + 1), x, y, - x1, y1, x2, y2, - &head_list, - &head_pos, - &head_x, - &head_y, &fixed_cnt, - (!in_non_intersected_list) | 0x80, - &prev_extents - )) { - need_free_fixed_list = TRUE; - goto done; - } - } - -done: - if (need_free_list_region) - pixman_region_fini(&list_region); - pixman_region_fini(¤t_region); - - if (need_free_fixed_list && fixed_cnt >= 0) { - while(fixed_cnt--) { - free(fixed_list[fixed_cnt].list); - } - } - - DEBUGF("Got %d fixed list \n", fixed_cnt); - return fixed_cnt; + int x1, x2, y1, y2; + int n; + int x, y; + BoxPtr extents; + BoxRec prev_extents; + Bool first = TRUE, first_list = TRUE; + Bool need_free_list_region = FALSE; + Bool need_free_fixed_list = FALSE; + struct glamor_glyph *priv = NULL; + Bool in_non_intersected_list = -1; + GlyphListPtr head_list; + int head_x, head_y, head_pos; + int fixed_cnt = 0; + GlyphPtr *head_glyphs; + GlyphListPtr cur_list = list; + RegionRec list_region; + RegionRec current_region; + BoxRec current_box; + + if (nlist > 1) { + pixman_region_init(&list_region); + need_free_list_region = TRUE; + } + + pixman_region_init(¤t_region); + + extents = pixman_region_extents(¤t_region); + + x = 0; + y = 0; + x1 = x2 = y1 = y2 = 0; + n = 0; + extents->x1 = 0; + extents->y1 = 0; + extents->x2 = 0; + extents->y2 = 0; + + head_list = list; + DEBUGF("has %d lists.\n", nlist); + while (nlist--) { + BoxRec left_box, right_box = { 0 }; + Bool has_left_edge_box = FALSE, has_right_edge_box = FALSE; + Bool left_to_right; + struct glamor_glyph *left_priv = NULL, *right_priv = NULL; + + x += list->xOff; + y += list->yOff; + n = list->len; + left_to_right = TRUE; + cur_list = list++; + + if (_X_UNLIKELY(!first_list)) { + pixman_region_init_with_extents(¤t_region, extents); + pixman_region_union(&list_region, &list_region, ¤t_region); + first = TRUE; + } + else { + head_list = cur_list; + head_pos = cur_list->len - n; + head_x = x; + head_y = y; + head_glyphs = glyphs; + } + + DEBUGF("current list %p has %d glyphs\n", cur_list, n); + while (n--) { + GlyphPtr glyph = *glyphs++; + + DEBUGF("the %dth glyph\n", cur_list->len - n - 1); + if (glyph->info.width == 0 || glyph->info.height == 0) { + x += glyph->info.xOff; + y += glyph->info.yOff; + continue; + } + if (mask_format + && mask_format != GlyphPicture(glyph)[screen->myNum]->format) { + need_free_fixed_list = TRUE; + goto done; + } + + x1 = x - glyph->info.x; + if (x1 < MINSHORT) + x1 = MINSHORT; + y1 = y - glyph->info.y; + if (y1 < MINSHORT) + y1 = MINSHORT; + if (check_fake_overlap) + priv = glamor_glyph_get_private(glyph); + + x2 = x1 + glyph->info.width; + y2 = y1 + glyph->info.height; + + if (x2 > MAXSHORT) + x2 = MAXSHORT; + if (y2 > MAXSHORT) + y2 = MAXSHORT; + + if (first) { + extents->x1 = x1; + extents->y1 = y1; + extents->x2 = x2; + extents->y2 = y2; + + prev_extents = *extents; + + first = FALSE; + if (check_fake_overlap && priv + && priv->has_edge_map && glyph->info.yOff == 0) { + left_box.x1 = x1; + left_box.x2 = x1 + 1; + left_box.y1 = y1; + + right_box.x1 = x2 - 2; + right_box.x2 = x2 - 1; + right_box.y1 = y1; + left_priv = right_priv = priv; + has_left_edge_box = TRUE; + has_right_edge_box = TRUE; + } + } + else { + if (_X_UNLIKELY(!first_list)) { + current_box.x1 = x1; + current_box.y1 = y1; + current_box.x2 = x2; + current_box.y2 = y2; + if (pixman_region_contains_rectangle + (&list_region, ¤t_box) != PIXMAN_REGION_OUT) { + need_free_fixed_list = TRUE; + goto done; + } + } + + if (x1 < extents->x2 && x2 > extents->x1 + && y1 < extents->y2 && y2 > extents->y1) { + + if (check_fake_overlap && + (has_left_edge_box || has_right_edge_box) + && priv->has_edge_map && glyph->info.yOff == 0) { + int left_dx, right_dx; + unsigned long long intersected; + + left_dx = has_left_edge_box ? 1 : 0; + right_dx = has_right_edge_box ? 1 : 0; + if (x1 + 1 < extents->x2 - right_dx && + x2 - 1 > extents->x1 + left_dx) + goto real_intersected; + + if (left_to_right && has_right_edge_box) { + if (x1 == right_box.x1) { + intersected = + ((priv->left_x1_map & right_priv-> + right_x1_map) + | (priv->left_x2_map & right_priv-> + right_x2_map)); + if (intersected) + goto real_intersected; + } + else if (x1 == right_box.x2) { + intersected = + (priv->left_x1_map & right_priv-> + right_x2_map); + if (intersected) { +#ifdef GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK + /* tolerate with two pixels overlap. */ + intersected &= ~(1 << __fls(intersected)); + if ((intersected & (intersected - 1))) +#endif + goto real_intersected; + } + } + } + else if (!left_to_right && has_left_edge_box) { + if (x2 - 1 == left_box.x1) { + intersected = + (priv->right_x2_map & left_priv-> + left_x1_map); + if (intersected) { +#ifdef GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK + /* tolerate with two pixels overlap. */ + intersected &= ~(1 << __fls(intersected)); + if ((intersected & (intersected - 1))) +#endif + goto real_intersected; + } + } + else if (x2 - 1 == right_box.x2) { + if ((priv->right_x1_map & left_priv-> + left_x1_map) + || (priv->right_x2_map & left_priv-> + left_x2_map)) + goto real_intersected; + } + } + else { + if (x1 < extents->x2 && x1 + 2 > extents->x1) + goto real_intersected; + } + goto non_intersected; + } + else { + real_intersected: + DEBUGF("overlap with previous glyph.\n"); + if (in_non_intersected_list == 1) { + if (fixed_cnt >= fixed_size) { + need_free_fixed_list = TRUE; + goto done; + } + if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], + glyphs - 1, + &head_glyphs, + cur_list, + cur_list->len - (n + 1), + x, y, x1, y1, x2, y2, + &head_list, &head_pos, + &head_x, &head_y, + &fixed_cnt, + NON_INTERSECTED, + &prev_extents)) { + need_free_fixed_list = TRUE; + goto done; + } + } + + in_non_intersected_list = 0; + + } + } + else { + non_intersected: + DEBUGF("doesn't overlap with previous glyph.\n"); + if (in_non_intersected_list == 0) { + if (fixed_cnt >= fixed_size) { + need_free_fixed_list = TRUE; + goto done; + } + if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], + glyphs - 1, + &head_glyphs, + cur_list, + cur_list->len - (n + 1), x, y, + x1, y1, x2, y2, + &head_list, + &head_pos, + &head_x, + &head_y, &fixed_cnt, + INTERSECTED, &prev_extents)) { + need_free_fixed_list = TRUE; + goto done; + } + } + in_non_intersected_list = 1; + } + prev_extents = *extents; + } + + if (check_fake_overlap && priv + && priv->has_edge_map && glyph->info.yOff == 0) { + if (!has_left_edge_box || x1 < extents->x1) { + left_box.x1 = x1; + left_box.x2 = x1 + 1; + left_box.y1 = y1; + has_left_edge_box = TRUE; + left_priv = priv; + } + + if (!has_right_edge_box || x2 > extents->x2) { + right_box.x1 = x2 - 2; + right_box.x2 = x2 - 1; + right_box.y1 = y1; + has_right_edge_box = TRUE; + right_priv = priv; + } + } + + if (x1 < extents->x1) + extents->x1 = x1; + if (x2 > extents->x2) + extents->x2 = x2; + + if (y1 < extents->y1) + extents->y1 = y1; + if (y2 > extents->y2) + extents->y2 = y2; + + x += glyph->info.xOff; + y += glyph->info.yOff; + } + first_list = FALSE; + } + + if (in_non_intersected_list == 0 && fixed_cnt == 0) { + fixed_cnt = -1; + goto done; + } + + if ((in_non_intersected_list != -1 || head_pos != n) && (fixed_cnt > 0)) { + if (fixed_cnt >= fixed_size) { + need_free_fixed_list = TRUE; + goto done; + } + if (!glyph_new_fixed_list(&fixed_list[fixed_cnt], + glyphs - 1, + &head_glyphs, + cur_list, + cur_list->len - (n + 1), x, y, + x1, y1, x2, y2, + &head_list, + &head_pos, + &head_x, + &head_y, &fixed_cnt, + (!in_non_intersected_list) | 0x80, + &prev_extents)) { + need_free_fixed_list = TRUE; + goto done; + } + } + + done: + if (need_free_list_region) + pixman_region_fini(&list_region); + pixman_region_fini(¤t_region); + + if (need_free_fixed_list && fixed_cnt >= 0) { + while (fixed_cnt--) { + free(fixed_list[fixed_cnt].list); + } + } + + DEBUGF("Got %d fixed list \n", fixed_cnt); + return fixed_cnt; } static inline unsigned int glamor_glyph_size_to_count(int size) { - size /= GLYPH_MIN_SIZE; - return size * size; + size /= GLYPH_MIN_SIZE; + return size * size; } static inline unsigned int glamor_glyph_count_to_mask(int count) { - return ~(count - 1); + return ~(count - 1); } static inline unsigned int glamor_glyph_size_to_mask(int size) { - return - glamor_glyph_count_to_mask(glamor_glyph_size_to_count(size)); + return glamor_glyph_count_to_mask(glamor_glyph_size_to_count(size)); } static PicturePtr glamor_glyph_cache(glamor_screen_private *glamor, GlyphPtr glyph, int *out_x, - int *out_y) + int *out_y) { - ScreenPtr screen = glamor->screen; - PicturePtr glyph_picture = GlyphPicture(glyph)[screen->myNum]; - glamor_glyph_cache_t *cache = - &glamor->glyphCaches[PICT_FORMAT_RGB(glyph_picture->format) != - 0]; - struct glamor_glyph *priv = NULL, *evicted_priv = NULL; - int size, mask, pos, s; - - if (glyph->info.width > GLYPH_MAX_SIZE - || glyph->info.height > GLYPH_MAX_SIZE) - return NULL; - - for (size = GLYPH_MIN_SIZE; size <= GLYPH_MAX_SIZE; size *= 2) - if (glyph->info.width <= size - && glyph->info.height <= size) - break; - - s = glamor_glyph_size_to_count(size); - mask = glamor_glyph_count_to_mask(s); - pos = (cache->count + s - 1) & mask; - - priv = glamor_glyph_get_private(glyph); - if (pos < GLYPH_CACHE_SIZE) { - cache->count = pos + s; - } else { - for (s = size; s <= GLYPH_MAX_SIZE; s *= 2) { - int i = - cache->evict & glamor_glyph_size_to_mask(s); - GlyphPtr evicted = cache->glyphs[i]; - if (evicted == NULL) - continue; - - evicted_priv = glamor_glyph_get_private(evicted); - assert(evicted_priv->pos == i); - if (evicted_priv->size >= s) { - cache->glyphs[i] = NULL; - evicted_priv->cached = FALSE; - pos = cache->evict & - glamor_glyph_size_to_mask(size); - } else - evicted_priv = NULL; - break; - } - if (evicted_priv == NULL) { - int count = glamor_glyph_size_to_count(size); - mask = glamor_glyph_count_to_mask(count); - pos = cache->evict & mask; - for (s = 0; s < count; s++) { - GlyphPtr evicted = cache->glyphs[pos + s]; - if (evicted != NULL) { - - evicted_priv = - glamor_glyph_get_private - (evicted); - - assert(evicted_priv->pos == pos + s); - evicted_priv->cached = FALSE; - cache->glyphs[pos + s] = NULL; - } - } - - } - /* And pick a new eviction position */ - cache->evict = rand() % GLYPH_CACHE_SIZE; - } - - - cache->glyphs[pos] = glyph; - - priv->cache = cache; - priv->size = size; - priv->pos = pos; - s = pos / ((GLYPH_MAX_SIZE / GLYPH_MIN_SIZE) * - (GLYPH_MAX_SIZE / GLYPH_MIN_SIZE)); - priv->x = - s % (CACHE_PICTURE_SIZE / GLYPH_MAX_SIZE) * GLYPH_MAX_SIZE; - priv->y = - (s / (CACHE_PICTURE_SIZE / GLYPH_MAX_SIZE)) * GLYPH_MAX_SIZE; - for (s = GLYPH_MIN_SIZE; s < GLYPH_MAX_SIZE; s *= 2) { - if (pos & 1) - priv->x += s; - if (pos & 2) - priv->y += s; - pos >>= 2; - } - - glamor_glyph_cache_upload_glyph(screen, cache, glyph, priv->x, - priv->y); + ScreenPtr screen = glamor->screen; + PicturePtr glyph_picture = GlyphPicture(glyph)[screen->myNum]; + glamor_glyph_cache_t *cache = + &glamor->glyphCaches[PICT_FORMAT_RGB(glyph_picture->format) != 0]; + struct glamor_glyph *priv = NULL, *evicted_priv = NULL; + int size, mask, pos, s; + + if (glyph->info.width > GLYPH_MAX_SIZE + || glyph->info.height > GLYPH_MAX_SIZE) + return NULL; + + for (size = GLYPH_MIN_SIZE; size <= GLYPH_MAX_SIZE; size *= 2) + if (glyph->info.width <= size && glyph->info.height <= size) + break; + + s = glamor_glyph_size_to_count(size); + mask = glamor_glyph_count_to_mask(s); + pos = (cache->count + s - 1) & mask; + + priv = glamor_glyph_get_private(glyph); + if (pos < GLYPH_CACHE_SIZE) { + cache->count = pos + s; + } + else { + for (s = size; s <= GLYPH_MAX_SIZE; s *= 2) { + int i = cache->evict & glamor_glyph_size_to_mask(s); + GlyphPtr evicted = cache->glyphs[i]; + + if (evicted == NULL) + continue; + + evicted_priv = glamor_glyph_get_private(evicted); + assert(evicted_priv->pos == i); + if (evicted_priv->size >= s) { + cache->glyphs[i] = NULL; + evicted_priv->cached = FALSE; + pos = cache->evict & glamor_glyph_size_to_mask(size); + } + else + evicted_priv = NULL; + break; + } + if (evicted_priv == NULL) { + int count = glamor_glyph_size_to_count(size); + + mask = glamor_glyph_count_to_mask(count); + pos = cache->evict & mask; + for (s = 0; s < count; s++) { + GlyphPtr evicted = cache->glyphs[pos + s]; + + if (evicted != NULL) { + + evicted_priv = glamor_glyph_get_private(evicted); + + assert(evicted_priv->pos == pos + s); + evicted_priv->cached = FALSE; + cache->glyphs[pos + s] = NULL; + } + } + + } + /* And pick a new eviction position */ + cache->evict = rand() % GLYPH_CACHE_SIZE; + } + + cache->glyphs[pos] = glyph; + + priv->cache = cache; + priv->size = size; + priv->pos = pos; + s = pos / ((GLYPH_MAX_SIZE / GLYPH_MIN_SIZE) * + (GLYPH_MAX_SIZE / GLYPH_MIN_SIZE)); + priv->x = s % (CACHE_PICTURE_SIZE / GLYPH_MAX_SIZE) * GLYPH_MAX_SIZE; + priv->y = (s / (CACHE_PICTURE_SIZE / GLYPH_MAX_SIZE)) * GLYPH_MAX_SIZE; + for (s = GLYPH_MIN_SIZE; s < GLYPH_MAX_SIZE; s *= 2) { + if (pos & 1) + priv->x += s; + if (pos & 2) + priv->y += s; + pos >>= 2; + } + + glamor_glyph_cache_upload_glyph(screen, cache, glyph, priv->x, priv->y); #ifndef GLYPHS_NO_EDEGEMAP_OVERLAP_CHECK - if (priv->has_edge_map == FALSE && glyph->info.width >= 2) - glamor_glyph_priv_get_edge_map(glyph, priv, glyph_picture); + if (priv->has_edge_map == FALSE && glyph->info.width >= 2) + glamor_glyph_priv_get_edge_map(glyph, priv, glyph_picture); #endif - priv->cached = TRUE; + priv->cached = TRUE; - *out_x = priv->x; - *out_y = priv->y; - return cache->picture; + *out_x = priv->x; + *out_y = priv->y; + return cache->picture; } -typedef void (*glyphs_flush_func)(void * arg); + +typedef void (*glyphs_flush_func) (void *arg); struct glyphs_flush_dst_arg { - CARD8 op; - PicturePtr src; - PicturePtr dst; - glamor_glyph_buffer_t * buffer; - int x_src,y_src; - int x_dst, y_dst; + CARD8 op; + PicturePtr src; + PicturePtr dst; + glamor_glyph_buffer_t *buffer; + int x_src, y_src; + int x_dst, y_dst; }; static struct glyphs_flush_dst_arg dst_arg; @@ -1157,650 +1166,638 @@ static glamor_glyph_buffer_t dst_buffer; static glamor_glyph_buffer_t mask_buffer; unsigned long long mask_glyphs_cnt = 0; unsigned long long dst_glyphs_cnt = 0; + #define GLYPHS_DST_MODE_VIA_MASK 0 #define GLYPHS_DST_MODE_VIA_MASK_CACHE 1 #define GLYPHS_DST_MODE_TO_DST 2 #define GLYPHS_DST_MODE_MASK_TO_DST 3 struct glyphs_flush_mask_arg { - PicturePtr mask; - glamor_glyph_buffer_t *buffer; - struct glamor_glyph_mask_cache *maskcache; - unsigned int used_bitmap; + PicturePtr mask; + glamor_glyph_buffer_t *buffer; + struct glamor_glyph_mask_cache *maskcache; + unsigned int used_bitmap; }; static void glamor_glyphs_flush_mask(struct glyphs_flush_mask_arg *arg) { - if (arg->buffer->count>0) { + if (arg->buffer->count > 0) { #ifdef RENDER - glamor_composite_glyph_rects(PictOpAdd, arg->buffer->source, - NULL, arg->mask, - arg->buffer->count, - arg->buffer->rects); + glamor_composite_glyph_rects(PictOpAdd, arg->buffer->source, + NULL, arg->mask, + arg->buffer->count, arg->buffer->rects); #endif - } - arg->buffer->count = 0; - arg->buffer->source = NULL; + } + arg->buffer->count = 0; + arg->buffer->source = NULL; } static void -glamor_glyphs_flush_dst(struct glyphs_flush_dst_arg * arg) +glamor_glyphs_flush_dst(struct glyphs_flush_dst_arg *arg) { - if (!arg->buffer) - return; - - if (mask_buffer.count > 0) { - glamor_glyphs_flush_mask(&mask_arg); - } - if (mask_arg.used_bitmap) { - put_mask_cache_bitmap(mask_arg.maskcache, mask_arg.used_bitmap); - mask_arg.used_bitmap = 0; - } - - if (arg->buffer->count > 0) { - glamor_composite_glyph_rects(arg->op, arg->src, - arg->buffer->source, arg->dst, - arg->buffer->count, - &arg->buffer->rects[0]); - arg->buffer->count = 0; - arg->buffer->source = NULL; - } + if (!arg->buffer) + return; + + if (mask_buffer.count > 0) { + glamor_glyphs_flush_mask(&mask_arg); + } + if (mask_arg.used_bitmap) { + put_mask_cache_bitmap(mask_arg.maskcache, mask_arg.used_bitmap); + mask_arg.used_bitmap = 0; + } + + if (arg->buffer->count > 0) { + glamor_composite_glyph_rects(arg->op, arg->src, + arg->buffer->source, arg->dst, + arg->buffer->count, + &arg->buffer->rects[0]); + arg->buffer->count = 0; + arg->buffer->source = NULL; + } } - static glamor_glyph_cache_result_t glamor_buffer_glyph(glamor_screen_private *glamor_priv, - glamor_glyph_buffer_t * buffer, - PictFormatShort format, - GlyphPtr glyph, struct glamor_glyph *priv, - int x_glyph, int y_glyph, - int dx, int dy, int w, int h, - int glyphs_dst_mode, - glyphs_flush_func glyphs_flush, void *flush_arg) + glamor_glyph_buffer_t *buffer, + PictFormatShort format, + GlyphPtr glyph, struct glamor_glyph *priv, + int x_glyph, int y_glyph, + int dx, int dy, int w, int h, + int glyphs_dst_mode, + glyphs_flush_func glyphs_flush, void *flush_arg) { - ScreenPtr screen = glamor_priv->screen; - glamor_composite_rect_t *rect; - PicturePtr source; - int x, y; - glamor_glyph_cache_t *cache; - - if (glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST) - priv = glamor_glyph_get_private(glyph); - - if (PICT_FORMAT_BPP(format) == 1) - format = PICT_a8; - - cache = - &glamor_priv->glyphCaches[PICT_FORMAT_RGB(format) != 0]; - - if (buffer->source - && buffer->source != cache->picture - && glyphs_flush) { - (*glyphs_flush)(flush_arg); - glyphs_flush = NULL; - } - - if (buffer->count == GLYPH_BUFFER_SIZE - && glyphs_flush) { - (*glyphs_flush)(flush_arg); - glyphs_flush = NULL; - } - - if (priv && priv->cached) { - rect = &buffer->rects[buffer->count++]; - rect->x_src = priv->x + dx; - rect->y_src = priv->y + dy; - if (buffer->source == NULL) - buffer->source = priv->cache->picture; - if (glyphs_dst_mode <= GLYPHS_DST_MODE_VIA_MASK_CACHE) - assert(priv->cache->glyphs[priv->pos] == glyph); - } else { - assert(glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST); - if (glyphs_flush) - (*glyphs_flush)(flush_arg); - source = glamor_glyph_cache(glamor_priv, glyph, &x, &y); - - if (source != NULL) { - rect = &buffer->rects[buffer->count++]; - rect->x_src = x + dx; - rect->y_src = y + dy; - if (buffer->source == NULL) - buffer->source = source; - if (glyphs_dst_mode == GLYPHS_DST_MODE_VIA_MASK_CACHE) { - glamor_gl_dispatch *dispatch; - /* mode 1 means we are using global mask cache, - * thus we have to composite from the cache picture - * to the cache picture, we need a flush here to make - * sure latter we get the corret glyphs data.*/ - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glFlush(); - glamor_put_dispatch(glamor_priv); - } - } else { - /* Couldn't find the glyph in the cache, use the glyph picture directly */ - source = GlyphPicture(glyph)[screen->myNum]; - if (buffer->source - && buffer->source != source - && glyphs_flush) - (*glyphs_flush)(flush_arg); - buffer->source = source; - - rect = &buffer->rects[buffer->count++]; - rect->x_src = 0 + dx; - rect->y_src = 0 + dy; - } - priv = glamor_glyph_get_private(glyph); - } - - rect->x_dst = x_glyph; - rect->y_dst = y_glyph; - if (glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST) { - rect->x_dst -= glyph->info.x; - rect->y_dst -= glyph->info.y; - } - rect->width = w; - rect->height = h; - if (glyphs_dst_mode > GLYPHS_DST_MODE_VIA_MASK_CACHE) { - rect->x_mask = rect->x_src; - rect->y_mask = rect->y_src; - rect->x_src = dst_arg.x_src + rect->x_dst - dst_arg.x_dst; - rect->y_src = dst_arg.y_src + rect->y_dst - dst_arg.y_dst; - } - - return GLAMOR_GLYPH_SUCCESS; + ScreenPtr screen = glamor_priv->screen; + glamor_composite_rect_t *rect; + PicturePtr source; + int x, y; + glamor_glyph_cache_t *cache; + + if (glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST) + priv = glamor_glyph_get_private(glyph); + + if (PICT_FORMAT_BPP(format) == 1) + format = PICT_a8; + + cache = &glamor_priv->glyphCaches[PICT_FORMAT_RGB(format) != 0]; + + if (buffer->source && buffer->source != cache->picture && glyphs_flush) { + (*glyphs_flush) (flush_arg); + glyphs_flush = NULL; + } + + if (buffer->count == GLYPH_BUFFER_SIZE && glyphs_flush) { + (*glyphs_flush) (flush_arg); + glyphs_flush = NULL; + } + + if (priv && priv->cached) { + rect = &buffer->rects[buffer->count++]; + rect->x_src = priv->x + dx; + rect->y_src = priv->y + dy; + if (buffer->source == NULL) + buffer->source = priv->cache->picture; + if (glyphs_dst_mode <= GLYPHS_DST_MODE_VIA_MASK_CACHE) + assert(priv->cache->glyphs[priv->pos] == glyph); + } + else { + assert(glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST); + if (glyphs_flush) + (*glyphs_flush) (flush_arg); + source = glamor_glyph_cache(glamor_priv, glyph, &x, &y); + + if (source != NULL) { + rect = &buffer->rects[buffer->count++]; + rect->x_src = x + dx; + rect->y_src = y + dy; + if (buffer->source == NULL) + buffer->source = source; + if (glyphs_dst_mode == GLYPHS_DST_MODE_VIA_MASK_CACHE) { + glamor_gl_dispatch *dispatch; + + /* mode 1 means we are using global mask cache, + * thus we have to composite from the cache picture + * to the cache picture, we need a flush here to make + * sure latter we get the corret glyphs data.*/ + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glFlush(); + glamor_put_dispatch(glamor_priv); + } + } + else { + /* Couldn't find the glyph in the cache, use the glyph picture directly */ + source = GlyphPicture(glyph)[screen->myNum]; + if (buffer->source && buffer->source != source && glyphs_flush) + (*glyphs_flush) (flush_arg); + buffer->source = source; + + rect = &buffer->rects[buffer->count++]; + rect->x_src = 0 + dx; + rect->y_src = 0 + dy; + } + priv = glamor_glyph_get_private(glyph); + } + + rect->x_dst = x_glyph; + rect->y_dst = y_glyph; + if (glyphs_dst_mode != GLYPHS_DST_MODE_MASK_TO_DST) { + rect->x_dst -= glyph->info.x; + rect->y_dst -= glyph->info.y; + } + rect->width = w; + rect->height = h; + if (glyphs_dst_mode > GLYPHS_DST_MODE_VIA_MASK_CACHE) { + rect->x_mask = rect->x_src; + rect->y_mask = rect->y_src; + rect->x_src = dst_arg.x_src + rect->x_dst - dst_arg.x_dst; + rect->y_src = dst_arg.y_src + rect->y_dst - dst_arg.y_dst; + } + + return GLAMOR_GLYPH_SUCCESS; } - static void glamor_buffer_glyph_clip(glamor_screen_private *glamor_priv, - BoxPtr rects, - int nrect, PictFormatShort format, - GlyphPtr glyph, struct glamor_glyph *priv, - int glyph_x, int glyph_y, - int glyph_dx, int glyph_dy, - int width, int height, - int glyphs_mode, - glyphs_flush_func flush_func, - void *arg - ) + BoxPtr rects, + int nrect, PictFormatShort format, + GlyphPtr glyph, struct glamor_glyph *priv, + int glyph_x, int glyph_y, + int glyph_dx, int glyph_dy, + int width, int height, + int glyphs_mode, + glyphs_flush_func flush_func, void *arg) { - int i; - for (i = 0; i < nrect; i++) { - int dst_x, dst_y; - int dx, dy; - int x2, y2; - - dst_x = glyph_x - glyph_dx; - dst_y = glyph_y - glyph_dy; - x2 = dst_x + width; - y2 = dst_y + height; - dx = dy = 0; - if (rects[i].y1 >= y2) - break; - - if (dst_x < rects[i].x1) - dx = rects[i].x1 - dst_x, dst_x = rects[i].x1; - if (x2 > rects[i].x2) - x2 = rects[i].x2; - if (dst_y < rects[i].y1) - dy = rects[i].y1 - dst_y, dst_y = rects[i].y1; - if (y2 > rects[i].y2) - y2 = rects[i].y2; - if (dst_x < x2 && dst_y < y2) { - - glamor_buffer_glyph(glamor_priv, - &dst_buffer, - format, - glyph, priv, - dst_x + glyph_dx, - dst_y + glyph_dy, - dx, dy, - x2 - dst_x, y2 - dst_y, - glyphs_mode, - flush_func, - arg); - } - } + int i; + + for (i = 0; i < nrect; i++) { + int dst_x, dst_y; + int dx, dy; + int x2, y2; + + dst_x = glyph_x - glyph_dx; + dst_y = glyph_y - glyph_dy; + x2 = dst_x + width; + y2 = dst_y + height; + dx = dy = 0; + if (rects[i].y1 >= y2) + break; + + if (dst_x < rects[i].x1) + dx = rects[i].x1 - dst_x, dst_x = rects[i].x1; + if (x2 > rects[i].x2) + x2 = rects[i].x2; + if (dst_y < rects[i].y1) + dy = rects[i].y1 - dst_y, dst_y = rects[i].y1; + if (y2 > rects[i].y2) + y2 = rects[i].y2; + if (dst_x < x2 && dst_y < y2) { + + glamor_buffer_glyph(glamor_priv, + &dst_buffer, + format, + glyph, priv, + dst_x + glyph_dx, + dst_y + glyph_dy, + dx, dy, + x2 - dst_x, y2 - dst_y, + glyphs_mode, flush_func, arg); + } + } } - static void glamor_glyphs_via_mask(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, - int nlist, GlyphListPtr list, GlyphPtr * glyphs, - Bool use_mask_cache) + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, + int nlist, GlyphListPtr list, GlyphPtr *glyphs, + Bool use_mask_cache) { - PixmapPtr mask_pixmap = 0; - PicturePtr mask; - ScreenPtr screen = dst->pDrawable->pScreen; - int width = 0, height = 0; - int x, y; - int x_dst = list->xOff, y_dst = list->yOff; - int n; - GlyphPtr glyph; - int error; - BoxRec extents = { 0, 0, 0, 0 }; - XID component_alpha; - glamor_screen_private *glamor_priv; - int need_free_mask = FALSE; - glamor_glyph_buffer_t buffer; - struct glyphs_flush_mask_arg arg; - glamor_glyph_buffer_t *pmask_buffer; - struct glyphs_flush_mask_arg *pmask_arg; - struct glamor_glyph_mask_cache_entry *mce = NULL; - struct glamor_glyph_mask_cache *maskcache; - glamor_glyph_cache_t *cache; - int glyphs_dst_mode; - - glamor_glyph_extents(nlist, list, glyphs, &extents); - - if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1) - return; - glamor_priv = glamor_get_screen_private(screen); - width = extents.x2 - extents.x1; - height = extents.y2 - extents.y1; - - if (mask_format->depth == 1) { - PictFormatPtr a8Format = - PictureMatchFormat(screen, 8, PICT_a8); - - if (a8Format) - mask_format = a8Format; - } - - cache = &glamor_priv->glyphCaches - [PICT_FORMAT_RGB(mask_format->format) != 0]; - maskcache = mask_cache[PICT_FORMAT_RGB(mask_format->format) != 0]; - - x = -extents.x1; - y = -extents.y1; - if (!use_mask_cache - || width > (CACHE_PICTURE_SIZE/4) - || height > MASK_CACHE_MAX_SIZE) { -new_mask_pixmap: - mask_pixmap = glamor_create_pixmap(screen, width, height, - mask_format->depth, - CREATE_PIXMAP_USAGE_SCRATCH); - if (!mask_pixmap) { - glamor_destroy_pixmap(mask_pixmap); - return; - } - glamor_solid(mask_pixmap, 0, 0, width, height, GXcopy, 0xFFFFFFFF, 0); - component_alpha = NeedsComponent(mask_format->format); - mask = CreatePicture(0, &mask_pixmap->drawable, - mask_format, CPComponentAlpha, - &component_alpha, serverClient, &error); - if (!mask) - return; - need_free_mask = TRUE; - pmask_arg = &arg; - pmask_buffer = &buffer; - pmask_buffer->count = 0; - pmask_buffer->source = NULL; - pmask_arg->used_bitmap = 0; - glyphs_dst_mode = GLYPHS_DST_MODE_VIA_MASK; - } else { - int retry_cnt = 0; -retry: - mce = get_mask_cache(maskcache, - (width + MASK_CACHE_MAX_SIZE - 1) / MASK_CACHE_MAX_SIZE); - - if (mce == NULL) { - glamor_glyphs_flush_dst(&dst_arg); - retry_cnt++; - if (retry_cnt > 2) { - assert(0); - goto new_mask_pixmap; - } - goto retry; - } - - mask = cache->picture; - x += mce->x; - y += mce->y; - mce->width = (width + MASK_CACHE_MAX_SIZE - 1) / MASK_CACHE_MAX_SIZE; - mce->height = 1; - if (mask_arg.mask && mask_arg.mask != mask - && mask_buffer.count != 0) - glamor_glyphs_flush_dst(&dst_arg); - pmask_arg = &mask_arg; - pmask_buffer = &mask_buffer; - pmask_arg->maskcache = maskcache; - glyphs_dst_mode = GLYPHS_DST_MODE_VIA_MASK_CACHE; - } - pmask_arg->mask = mask; - pmask_arg->buffer = pmask_buffer; - while (nlist--) { - x += list->xOff; - y += list->yOff; - n = list->len; - mask_glyphs_cnt += n; - while (n--) { - glyph = *glyphs++; - if (glyph->info.width > 0 - && glyph->info.height > 0) { - glyphs_flush_func flush_func; - void *temp_arg; - if (need_free_mask) { - if (pmask_buffer->count) - flush_func = (glyphs_flush_func)glamor_glyphs_flush_mask; - else - flush_func = NULL; - temp_arg = pmask_arg; - } else { - /* If we are using global mask cache, then we need to - * flush dst instead of mask. As some dst depends on the - * previous mask result. Just flush mask can't get all previous's - * overlapped glyphs.*/ - if (dst_buffer.count || mask_buffer.count) - flush_func = (glyphs_flush_func)glamor_glyphs_flush_dst; - else - flush_func = NULL; - temp_arg = &dst_arg; - } - glamor_buffer_glyph(glamor_priv, pmask_buffer, - mask_format->format, - glyph, NULL, x, y, - 0, 0, - glyph->info.width, glyph->info.height, - glyphs_dst_mode, - flush_func, - (void*)temp_arg); - } - x += glyph->info.xOff; - y += glyph->info.yOff; - } - list++; - } - - x = extents.x1; - y = extents.y1; - if (need_free_mask) { - glamor_glyphs_flush_mask(pmask_arg); - CompositePicture(op, - src, - mask, - dst, - x_src + x - x_dst, - y_src + y - y_dst, 0, 0, x, y, width, height); - FreePicture(mask, 0); - glamor_destroy_pixmap(mask_pixmap); - } else { - struct glamor_glyph priv; - glyphs_flush_func flush_func; - BoxPtr rects; - int nrect; - - priv.cache = cache; - priv.x = mce->x; - priv.y = mce->y; - priv.cached = TRUE; - rects = REGION_RECTS(dst->pCompositeClip); - nrect = REGION_NUM_RECTS(dst->pCompositeClip); - - pmask_arg->used_bitmap |= ((1 << mce->width) - 1) << mce->idx; - dst_arg.op = op; - dst_arg.src = src; - dst_arg.dst = dst; - dst_arg.buffer = &dst_buffer; - dst_arg.x_src = x_src; - dst_arg.y_src = y_src; - dst_arg.x_dst = x_dst; - dst_arg.y_dst = y_dst; - - if (dst_buffer.source == NULL) { - dst_buffer.source = cache->picture; - } else if (dst_buffer.source != cache->picture) { - glamor_glyphs_flush_dst(&dst_arg); - dst_buffer.source = cache->picture; - } - - x += dst->pDrawable->x; - y += dst->pDrawable->y; - - if (dst_buffer.count || mask_buffer.count) - flush_func = (glyphs_flush_func)glamor_glyphs_flush_dst; - else - flush_func = NULL; - - glamor_buffer_glyph_clip(glamor_priv, - rects, nrect, - mask_format->format, - NULL, &priv, - x, y, - 0, 0, - width, height, - GLYPHS_DST_MODE_MASK_TO_DST, - flush_func, - (void *)&dst_arg - ); - } + PixmapPtr mask_pixmap = 0; + PicturePtr mask; + ScreenPtr screen = dst->pDrawable->pScreen; + int width = 0, height = 0; + int x, y; + int x_dst = list->xOff, y_dst = list->yOff; + int n; + GlyphPtr glyph; + int error; + BoxRec extents = { 0, 0, 0, 0 }; + XID component_alpha; + glamor_screen_private *glamor_priv; + int need_free_mask = FALSE; + glamor_glyph_buffer_t buffer; + struct glyphs_flush_mask_arg arg; + glamor_glyph_buffer_t *pmask_buffer; + struct glyphs_flush_mask_arg *pmask_arg; + struct glamor_glyph_mask_cache_entry *mce = NULL; + struct glamor_glyph_mask_cache *maskcache; + glamor_glyph_cache_t *cache; + int glyphs_dst_mode; + + glamor_glyph_extents(nlist, list, glyphs, &extents); + + if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1) + return; + glamor_priv = glamor_get_screen_private(screen); + width = extents.x2 - extents.x1; + height = extents.y2 - extents.y1; + + if (mask_format->depth == 1) { + PictFormatPtr a8Format = PictureMatchFormat(screen, 8, PICT_a8); + + if (a8Format) + mask_format = a8Format; + } + + cache = &glamor_priv->glyphCaches + [PICT_FORMAT_RGB(mask_format->format) != 0]; + maskcache = mask_cache[PICT_FORMAT_RGB(mask_format->format) != 0]; + + x = -extents.x1; + y = -extents.y1; + if (!use_mask_cache || width > (CACHE_PICTURE_SIZE / 4) + || height > MASK_CACHE_MAX_SIZE) { + new_mask_pixmap: + mask_pixmap = glamor_create_pixmap(screen, width, height, + mask_format->depth, + CREATE_PIXMAP_USAGE_SCRATCH); + if (!mask_pixmap) { + glamor_destroy_pixmap(mask_pixmap); + return; + } + glamor_solid(mask_pixmap, 0, 0, width, height, GXcopy, 0xFFFFFFFF, 0); + component_alpha = NeedsComponent(mask_format->format); + mask = CreatePicture(0, &mask_pixmap->drawable, + mask_format, CPComponentAlpha, + &component_alpha, serverClient, &error); + if (!mask) + return; + need_free_mask = TRUE; + pmask_arg = &arg; + pmask_buffer = &buffer; + pmask_buffer->count = 0; + pmask_buffer->source = NULL; + pmask_arg->used_bitmap = 0; + glyphs_dst_mode = GLYPHS_DST_MODE_VIA_MASK; + } + else { + int retry_cnt = 0; + + retry: + mce = get_mask_cache(maskcache, + (width + MASK_CACHE_MAX_SIZE - + 1) / MASK_CACHE_MAX_SIZE); + + if (mce == NULL) { + glamor_glyphs_flush_dst(&dst_arg); + retry_cnt++; + if (retry_cnt > 2) { + assert(0); + goto new_mask_pixmap; + } + goto retry; + } + + mask = cache->picture; + x += mce->x; + y += mce->y; + mce->width = (width + MASK_CACHE_MAX_SIZE - 1) / MASK_CACHE_MAX_SIZE; + mce->height = 1; + if (mask_arg.mask && mask_arg.mask != mask && mask_buffer.count != 0) + glamor_glyphs_flush_dst(&dst_arg); + pmask_arg = &mask_arg; + pmask_buffer = &mask_buffer; + pmask_arg->maskcache = maskcache; + glyphs_dst_mode = GLYPHS_DST_MODE_VIA_MASK_CACHE; + } + pmask_arg->mask = mask; + pmask_arg->buffer = pmask_buffer; + while (nlist--) { + x += list->xOff; + y += list->yOff; + n = list->len; + mask_glyphs_cnt += n; + while (n--) { + glyph = *glyphs++; + if (glyph->info.width > 0 && glyph->info.height > 0) { + glyphs_flush_func flush_func; + void *temp_arg; + + if (need_free_mask) { + if (pmask_buffer->count) + flush_func = + (glyphs_flush_func) glamor_glyphs_flush_mask; + else + flush_func = NULL; + temp_arg = pmask_arg; + } + else { + /* If we are using global mask cache, then we need to + * flush dst instead of mask. As some dst depends on the + * previous mask result. Just flush mask can't get all previous's + * overlapped glyphs.*/ + if (dst_buffer.count || mask_buffer.count) + flush_func = + (glyphs_flush_func) glamor_glyphs_flush_dst; + else + flush_func = NULL; + temp_arg = &dst_arg; + } + glamor_buffer_glyph(glamor_priv, pmask_buffer, + mask_format->format, + glyph, NULL, x, y, + 0, 0, + glyph->info.width, glyph->info.height, + glyphs_dst_mode, + flush_func, (void *) temp_arg); + } + x += glyph->info.xOff; + y += glyph->info.yOff; + } + list++; + } + + x = extents.x1; + y = extents.y1; + if (need_free_mask) { + glamor_glyphs_flush_mask(pmask_arg); + CompositePicture(op, + src, + mask, + dst, + x_src + x - x_dst, + y_src + y - y_dst, 0, 0, x, y, width, height); + FreePicture(mask, 0); + glamor_destroy_pixmap(mask_pixmap); + } + else { + struct glamor_glyph priv; + glyphs_flush_func flush_func; + BoxPtr rects; + int nrect; + + priv.cache = cache; + priv.x = mce->x; + priv.y = mce->y; + priv.cached = TRUE; + rects = REGION_RECTS(dst->pCompositeClip); + nrect = REGION_NUM_RECTS(dst->pCompositeClip); + + pmask_arg->used_bitmap |= ((1 << mce->width) - 1) << mce->idx; + dst_arg.op = op; + dst_arg.src = src; + dst_arg.dst = dst; + dst_arg.buffer = &dst_buffer; + dst_arg.x_src = x_src; + dst_arg.y_src = y_src; + dst_arg.x_dst = x_dst; + dst_arg.y_dst = y_dst; + + if (dst_buffer.source == NULL) { + dst_buffer.source = cache->picture; + } + else if (dst_buffer.source != cache->picture) { + glamor_glyphs_flush_dst(&dst_arg); + dst_buffer.source = cache->picture; + } + + x += dst->pDrawable->x; + y += dst->pDrawable->y; + + if (dst_buffer.count || mask_buffer.count) + flush_func = (glyphs_flush_func) glamor_glyphs_flush_dst; + else + flush_func = NULL; + + glamor_buffer_glyph_clip(glamor_priv, + rects, nrect, + mask_format->format, + NULL, &priv, + x, y, + 0, 0, + width, height, + GLYPHS_DST_MODE_MASK_TO_DST, + flush_func, (void *) &dst_arg); + } } static void glamor_glyphs_to_dst(CARD8 op, - PicturePtr src, - PicturePtr dst, - INT16 x_src, - INT16 y_src, - int nlist, GlyphListPtr list, - GlyphPtr * glyphs) + PicturePtr src, + PicturePtr dst, + INT16 x_src, + INT16 y_src, + int nlist, GlyphListPtr list, GlyphPtr *glyphs) { - ScreenPtr screen = dst->pDrawable->pScreen; - int x = 0, y = 0; - int x_dst = list->xOff, y_dst = list->yOff; - int n; - GlyphPtr glyph; - BoxPtr rects; - int nrect; - glamor_screen_private *glamor_priv; - - rects = REGION_RECTS(dst->pCompositeClip); - nrect = REGION_NUM_RECTS(dst->pCompositeClip); - - glamor_priv = glamor_get_screen_private(screen); - - dst_arg.op = op; - dst_arg.src = src; - dst_arg.dst = dst; - dst_arg.buffer = &dst_buffer; - dst_arg.x_src = x_src; - dst_arg.y_src = y_src; - dst_arg.x_dst = x_dst; - dst_arg.y_dst = y_dst; - - x = dst->pDrawable->x; - y = dst->pDrawable->y; - - while (nlist--) { - x += list->xOff; - y += list->yOff; - n = list->len; - dst_glyphs_cnt += n; - while (n--) { - glyph = *glyphs++; - - if (glyph->info.width > 0 - && glyph->info.height > 0) { - glyphs_flush_func flush_func; - - if (dst_buffer.count || mask_buffer.count) - flush_func = (glyphs_flush_func)glamor_glyphs_flush_dst; - else - flush_func = NULL; - glamor_buffer_glyph_clip(glamor_priv, - rects, nrect, - (GlyphPicture(glyph)[screen->myNum])->format, - glyph, NULL, - x, y, - glyph->info.x, glyph->info.y, - glyph->info.width, glyph->info.height, - GLYPHS_DST_MODE_TO_DST, - flush_func, - (void *)&dst_arg - ); - } - - x += glyph->info.xOff; - y += glyph->info.yOff; - } - list++; - } + ScreenPtr screen = dst->pDrawable->pScreen; + int x = 0, y = 0; + int x_dst = list->xOff, y_dst = list->yOff; + int n; + GlyphPtr glyph; + BoxPtr rects; + int nrect; + glamor_screen_private *glamor_priv; + + rects = REGION_RECTS(dst->pCompositeClip); + nrect = REGION_NUM_RECTS(dst->pCompositeClip); + + glamor_priv = glamor_get_screen_private(screen); + + dst_arg.op = op; + dst_arg.src = src; + dst_arg.dst = dst; + dst_arg.buffer = &dst_buffer; + dst_arg.x_src = x_src; + dst_arg.y_src = y_src; + dst_arg.x_dst = x_dst; + dst_arg.y_dst = y_dst; + + x = dst->pDrawable->x; + y = dst->pDrawable->y; + + while (nlist--) { + x += list->xOff; + y += list->yOff; + n = list->len; + dst_glyphs_cnt += n; + while (n--) { + glyph = *glyphs++; + + if (glyph->info.width > 0 && glyph->info.height > 0) { + glyphs_flush_func flush_func; + + if (dst_buffer.count || mask_buffer.count) + flush_func = (glyphs_flush_func) glamor_glyphs_flush_dst; + else + flush_func = NULL; + glamor_buffer_glyph_clip(glamor_priv, + rects, nrect, + (GlyphPicture(glyph)[screen->myNum])-> + format, glyph, NULL, x, y, + glyph->info.x, glyph->info.y, + glyph->info.width, glyph->info.height, + GLYPHS_DST_MODE_TO_DST, flush_func, + (void *) &dst_arg); + } + + x += glyph->info.xOff; + y += glyph->info.yOff; + } + list++; + } } + #define MAX_FIXED_SIZE static void glamor_glyphs_reset_buffer(glamor_glyph_buffer_t *buffer) { - buffer->count = 0; - buffer->source = NULL; + buffer->count = 0; + buffer->source = NULL; } static Bool _glamor_glyphs(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, int nlist, GlyphListPtr list, - GlyphPtr * glyphs, Bool fallback) + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, int nlist, GlyphListPtr list, + GlyphPtr *glyphs, Bool fallback) { - PictFormatShort format; - int fixed_size, fixed_cnt = 0; - struct glamor_glyph_list *fixed_list = NULL; - Bool need_free_list = FALSE; + PictFormatShort format; + int fixed_size, fixed_cnt = 0; + struct glamor_glyph_list *fixed_list = NULL; + Bool need_free_list = FALSE; + #ifndef GLYPHS_NO_EDEGEMAP_OVERLAP_CHECK - Bool check_fake_overlap = TRUE; - if (!(op == PictOpOver - || op == PictOpAdd - || op == PictOpXor)) { - /* C = (0,0,0,0) D = glyphs , SRC = A, DEST = B (faked overlapped glyphs, overlapped with (0,0,0,0)). - * For those op, (A IN (C ADD D)) OP B != (A IN D) OP ((A IN C) OP B) - * or (A IN (D ADD C)) OP B != (A IN C) OP ((A IN D) OP B) - * We need to split the faked regions to three or two, and composite the disoverlapped small - * boxes one by one. For other Ops, it's safe to composite the whole box. */ - check_fake_overlap = FALSE; - } + Bool check_fake_overlap = TRUE; + + if (!(op == PictOpOver || op == PictOpAdd || op == PictOpXor)) { + /* C = (0,0,0,0) D = glyphs , SRC = A, DEST = B (faked overlapped glyphs, overlapped with (0,0,0,0)). + * For those op, (A IN (C ADD D)) OP B != (A IN D) OP ((A IN C) OP B) + * or (A IN (D ADD C)) OP B != (A IN C) OP ((A IN D) OP B) + * We need to split the faked regions to three or two, and composite the disoverlapped small + * boxes one by one. For other Ops, it's safe to composite the whole box. */ + check_fake_overlap = FALSE; + } #else - Bool check_fake_overlap = FALSE; + Bool check_fake_overlap = FALSE; #endif - if (mask_format) - format = mask_format->depth << 24 | mask_format->format; - else - format = 0; - - fixed_size = 32; - glamor_glyphs_reset_buffer(&dst_buffer); - - if (!mask_format || (((nlist == 1 && list->len == 1) || op == PictOpAdd) - && (dst->format == ((mask_format->depth << 24) | mask_format->format)))) { - glamor_glyphs_to_dst(op, src, dst, x_src, y_src, nlist, - list, glyphs); - goto last_flush; - } - - glamor_glyphs_reset_buffer(&mask_buffer); - - /* We have mask_format. Need to check the real overlap or not.*/ - format = mask_format->depth << 24 | mask_format->format; - - fixed_list = calloc(fixed_size, sizeof(*fixed_list)); - if (unlikely(fixed_list == NULL)) - fixed_size = 0; - fixed_cnt = glamor_glyphs_intersect(nlist, list, glyphs, - format, dst->pDrawable->pScreen, - check_fake_overlap, - fixed_list, fixed_size); - if (fixed_cnt == 0) - mask_format = NULL; - need_free_list = TRUE; - - if (fixed_cnt <= 0) { - if (mask_format == NULL) { - glamor_glyphs_to_dst(op, src, dst, x_src, y_src, nlist, - list, glyphs); - goto last_flush; - } else { - glamor_glyphs_via_mask(op, src, dst, mask_format, - x_src, y_src, nlist, list, glyphs, - FALSE); - goto free_fixed_list; - } - } else { - - /* We have splitted the original list to serval list, some are overlapped - * and some are non-overlapped. For the non-overlapped, we render it to - * dst directly. For the overlapped, we render it to mask picture firstly, - * then render the mask to dst. If we can use mask cache which is in the - * glyphs cache's last row, we can accumulate the rendering of mask to dst - * with the other dst_buffer's rendering operations thus can reduce the call - * of glDrawElements. - * - * */ - struct glamor_glyph_list *saved_list; - - saved_list = fixed_list; - mask_arg.used_bitmap = 0; - while(fixed_cnt--) { - if (fixed_list->type == NON_INTERSECTED) { - glamor_glyphs_to_dst(op, src, dst, - x_src, y_src, - fixed_list->nlist, - fixed_list->list, - fixed_list->glyphs); - } - else - glamor_glyphs_via_mask(op, src, dst, - mask_format, x_src, y_src, - fixed_list->nlist, - fixed_list->list, - fixed_list->glyphs, TRUE); - - free(fixed_list->list); - fixed_list++; - } - free(saved_list); - need_free_list = FALSE; - } - -last_flush: - if (dst_buffer.count || mask_buffer.count) - glamor_glyphs_flush_dst(&dst_arg); -free_fixed_list: - if(need_free_list) { - assert(fixed_cnt <= 0); - free(fixed_list); - } - return TRUE; + if (mask_format) + format = mask_format->depth << 24 | mask_format->format; + else + format = 0; + + fixed_size = 32; + glamor_glyphs_reset_buffer(&dst_buffer); + + if (!mask_format || (((nlist == 1 && list->len == 1) || op == PictOpAdd) + && (dst->format == + ((mask_format->depth << 24) | mask_format-> + format)))) { + glamor_glyphs_to_dst(op, src, dst, x_src, y_src, nlist, list, glyphs); + goto last_flush; + } + + glamor_glyphs_reset_buffer(&mask_buffer); + + /* We have mask_format. Need to check the real overlap or not. */ + format = mask_format->depth << 24 | mask_format->format; + + fixed_list = calloc(fixed_size, sizeof(*fixed_list)); + if (_X_UNLIKELY(fixed_list == NULL)) + fixed_size = 0; + fixed_cnt = glamor_glyphs_intersect(nlist, list, glyphs, + format, dst->pDrawable->pScreen, + check_fake_overlap, + fixed_list, fixed_size); + if (fixed_cnt == 0) + mask_format = NULL; + need_free_list = TRUE; + + if (fixed_cnt <= 0) { + if (mask_format == NULL) { + glamor_glyphs_to_dst(op, src, dst, x_src, y_src, nlist, + list, glyphs); + goto last_flush; + } + else { + glamor_glyphs_via_mask(op, src, dst, mask_format, + x_src, y_src, nlist, list, glyphs, FALSE); + goto free_fixed_list; + } + } + else { + + /* We have splitted the original list to serval list, some are overlapped + * and some are non-overlapped. For the non-overlapped, we render it to + * dst directly. For the overlapped, we render it to mask picture firstly, + * then render the mask to dst. If we can use mask cache which is in the + * glyphs cache's last row, we can accumulate the rendering of mask to dst + * with the other dst_buffer's rendering operations thus can reduce the call + * of glDrawElements. + * + * */ + struct glamor_glyph_list *saved_list; + + saved_list = fixed_list; + mask_arg.used_bitmap = 0; + while (fixed_cnt--) { + if (fixed_list->type == NON_INTERSECTED) { + glamor_glyphs_to_dst(op, src, dst, + x_src, y_src, + fixed_list->nlist, + fixed_list->list, fixed_list->glyphs); + } + else + glamor_glyphs_via_mask(op, src, dst, + mask_format, x_src, y_src, + fixed_list->nlist, + fixed_list->list, + fixed_list->glyphs, TRUE); + + free(fixed_list->list); + fixed_list++; + } + free(saved_list); + need_free_list = FALSE; + } + + last_flush: + if (dst_buffer.count || mask_buffer.count) + glamor_glyphs_flush_dst(&dst_arg); + free_fixed_list: + if (need_free_list) { + assert(fixed_cnt <= 0); + free(fixed_list); + } + return TRUE; } void glamor_glyphs(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, int nlist, GlyphListPtr list, GlyphPtr * glyphs) + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, int nlist, GlyphListPtr list, GlyphPtr *glyphs) { - _glamor_glyphs(op, src, dst, mask_format, x_src, - y_src, nlist, list, glyphs, TRUE); + _glamor_glyphs(op, src, dst, mask_format, x_src, + y_src, nlist, list, glyphs, TRUE); } Bool glamor_glyphs_nf(CARD8 op, - PicturePtr src, - PicturePtr dst, - PictFormatPtr mask_format, - INT16 x_src, - INT16 y_src, int nlist, - GlyphListPtr list, GlyphPtr * glyphs) + PicturePtr src, + PicturePtr dst, + PictFormatPtr mask_format, + INT16 x_src, + INT16 y_src, int nlist, GlyphListPtr list, GlyphPtr *glyphs) { - return _glamor_glyphs(op, src, dst, mask_format, x_src, - y_src, nlist, list, glyphs, FALSE); + return _glamor_glyphs(op, src, dst, mask_format, x_src, + y_src, nlist, list, glyphs, FALSE); } - diff --git a/xorg-server/glamor/glamor_gradient.c b/xorg-server/glamor/glamor_gradient.c index 4abc82d74..df2ccb8a0 100644 --- a/xorg-server/glamor/glamor_gradient.c +++ b/xorg-server/glamor/glamor_gradient.c @@ -43,15 +43,16 @@ #ifdef GLAMOR_GRADIENT_SHADER static GLint -_glamor_create_getcolor_fs_program(ScreenPtr screen, int stops_count, int use_array) +_glamor_create_getcolor_fs_program(ScreenPtr screen, int stops_count, + int use_array) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - char *gradient_fs = NULL; - GLint fs_getcolor_prog; + char *gradient_fs = NULL; + GLint fs_getcolor_prog; - #define gradient_fs_getcolor\ +#define gradient_fs_getcolor\ GLAMOR_DEFAULT_PRECISION\ "uniform int n_stop;\n"\ "uniform float stops[%d];\n"\ @@ -82,163 +83,166 @@ _glamor_create_getcolor_fs_program(ScreenPtr screen, int stops_count, int use_ar " return gradient_color;\n"\ "}\n" - /* Because the array access for shader is very slow, the performance is very low - if use array. So use global uniform to replace for it if the number of n_stops is small.*/ - const char *gradient_fs_getcolor_no_array = - GLAMOR_DEFAULT_PRECISION - "uniform int n_stop;\n" - "uniform float stop0;\n" - "uniform float stop1;\n" - "uniform float stop2;\n" - "uniform float stop3;\n" - "uniform float stop4;\n" - "uniform float stop5;\n" - "uniform float stop6;\n" - "uniform float stop7;\n" - "uniform vec4 stop_color0;\n" - "uniform vec4 stop_color1;\n" - "uniform vec4 stop_color2;\n" - "uniform vec4 stop_color3;\n" - "uniform vec4 stop_color4;\n" - "uniform vec4 stop_color5;\n" - "uniform vec4 stop_color6;\n" - "uniform vec4 stop_color7;\n" - "\n" - "vec4 get_color(float stop_len)\n" - "{\n" - " float stop_after;\n" - " float stop_before;\n" - " vec4 stop_color_before;\n" - " vec4 stop_color_after;\n" - " float new_alpha; \n" - " vec4 gradient_color;\n" - " float percentage; \n" - " \n" - " if((stop_len < stop0) && (n_stop >= 1)) {\n" - " stop_color_before = stop_color0;\n" - " stop_color_after = stop_color0;\n" - " stop_after = stop0;\n" - " stop_before = stop0;\n" - " } else if((stop_len < stop1) && (n_stop >= 2)) {\n" - " stop_color_before = stop_color0;\n" - " stop_color_after = stop_color1;\n" - " stop_after = stop1;\n" - " stop_before = stop0;\n" - " } else if((stop_len < stop2) && (n_stop >= 3)) {\n" - " stop_color_before = stop_color1;\n" - " stop_color_after = stop_color2;\n" - " stop_after = stop2;\n" - " stop_before = stop1;\n" - " } else if((stop_len < stop3) && (n_stop >= 4)){\n" - " stop_color_before = stop_color2;\n" - " stop_color_after = stop_color3;\n" - " stop_after = stop3;\n" - " stop_before = stop2;\n" - " } else if((stop_len < stop4) && (n_stop >= 5)){\n" - " stop_color_before = stop_color3;\n" - " stop_color_after = stop_color4;\n" - " stop_after = stop4;\n" - " stop_before = stop3;\n" - " } else if((stop_len < stop5) && (n_stop >= 6)){\n" - " stop_color_before = stop_color4;\n" - " stop_color_after = stop_color5;\n" - " stop_after = stop5;\n" - " stop_before = stop4;\n" - " } else if((stop_len < stop6) && (n_stop >= 7)){\n" - " stop_color_before = stop_color5;\n" - " stop_color_after = stop_color6;\n" - " stop_after = stop6;\n" - " stop_before = stop5;\n" - " } else if((stop_len < stop7) && (n_stop >= 8)){\n" - " stop_color_before = stop_color6;\n" - " stop_color_after = stop_color7;\n" - " stop_after = stop7;\n" - " stop_before = stop6;\n" - " } else {\n" - " stop_color_before = stop_color7;\n" - " stop_color_after = stop_color7;\n" - " stop_after = stop7;\n" - " stop_before = stop7;\n" - " }\n" - " if(stop_after - stop_before > 2.0)\n" - " percentage = 0.0;\n"//For comply with pixman, walker->stepper overflow. - " else if(stop_after - stop_before < 0.000001)\n" - " percentage = 0.0;\n" - " else \n" - " percentage = (stop_len - stop_before)/(stop_after - stop_before);\n" - " new_alpha = percentage * stop_color_after.a + \n" - " (1.0-percentage) * stop_color_before.a; \n" - " gradient_color = vec4((percentage * stop_color_after.rgb \n" - " + (1.0-percentage) * stop_color_before.rgb)*new_alpha, \n" - " new_alpha);\n" - " \n" - " return gradient_color;\n" - "}\n"; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - if(use_array) { - XNFasprintf(&gradient_fs, - gradient_fs_getcolor, stops_count, stops_count); - fs_getcolor_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - gradient_fs); - free(gradient_fs); - } else { - fs_getcolor_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - gradient_fs_getcolor_no_array); - } - - return fs_getcolor_prog; + /* Because the array access for shader is very slow, the performance is very low + if use array. So use global uniform to replace for it if the number of n_stops is small. */ + const char *gradient_fs_getcolor_no_array = + GLAMOR_DEFAULT_PRECISION + "uniform int n_stop;\n" + "uniform float stop0;\n" + "uniform float stop1;\n" + "uniform float stop2;\n" + "uniform float stop3;\n" + "uniform float stop4;\n" + "uniform float stop5;\n" + "uniform float stop6;\n" + "uniform float stop7;\n" + "uniform vec4 stop_color0;\n" + "uniform vec4 stop_color1;\n" + "uniform vec4 stop_color2;\n" + "uniform vec4 stop_color3;\n" + "uniform vec4 stop_color4;\n" + "uniform vec4 stop_color5;\n" + "uniform vec4 stop_color6;\n" + "uniform vec4 stop_color7;\n" + "\n" + "vec4 get_color(float stop_len)\n" + "{\n" + " float stop_after;\n" + " float stop_before;\n" + " vec4 stop_color_before;\n" + " vec4 stop_color_after;\n" + " float new_alpha; \n" + " vec4 gradient_color;\n" + " float percentage; \n" + " \n" + " if((stop_len < stop0) && (n_stop >= 1)) {\n" + " stop_color_before = stop_color0;\n" + " stop_color_after = stop_color0;\n" + " stop_after = stop0;\n" + " stop_before = stop0;\n" + " } else if((stop_len < stop1) && (n_stop >= 2)) {\n" + " stop_color_before = stop_color0;\n" + " stop_color_after = stop_color1;\n" + " stop_after = stop1;\n" + " stop_before = stop0;\n" + " } else if((stop_len < stop2) && (n_stop >= 3)) {\n" + " stop_color_before = stop_color1;\n" + " stop_color_after = stop_color2;\n" + " stop_after = stop2;\n" + " stop_before = stop1;\n" + " } else if((stop_len < stop3) && (n_stop >= 4)){\n" + " stop_color_before = stop_color2;\n" + " stop_color_after = stop_color3;\n" + " stop_after = stop3;\n" + " stop_before = stop2;\n" + " } else if((stop_len < stop4) && (n_stop >= 5)){\n" + " stop_color_before = stop_color3;\n" + " stop_color_after = stop_color4;\n" + " stop_after = stop4;\n" + " stop_before = stop3;\n" + " } else if((stop_len < stop5) && (n_stop >= 6)){\n" + " stop_color_before = stop_color4;\n" + " stop_color_after = stop_color5;\n" + " stop_after = stop5;\n" + " stop_before = stop4;\n" + " } else if((stop_len < stop6) && (n_stop >= 7)){\n" + " stop_color_before = stop_color5;\n" + " stop_color_after = stop_color6;\n" + " stop_after = stop6;\n" + " stop_before = stop5;\n" + " } else if((stop_len < stop7) && (n_stop >= 8)){\n" + " stop_color_before = stop_color6;\n" + " stop_color_after = stop_color7;\n" + " stop_after = stop7;\n" + " stop_before = stop6;\n" + " } else {\n" + " stop_color_before = stop_color7;\n" + " stop_color_after = stop_color7;\n" + " stop_after = stop7;\n" + " stop_before = stop7;\n" + " }\n" + " if(stop_after - stop_before > 2.0)\n" + " percentage = 0.0;\n" //For comply with pixman, walker->stepper overflow. + " else if(stop_after - stop_before < 0.000001)\n" + " percentage = 0.0;\n" + " else \n" + " percentage = (stop_len - stop_before)/(stop_after - stop_before);\n" + " new_alpha = percentage * stop_color_after.a + \n" + " (1.0-percentage) * stop_color_before.a; \n" + " gradient_color = vec4((percentage * stop_color_after.rgb \n" + " + (1.0-percentage) * stop_color_before.rgb)*new_alpha, \n" + " new_alpha);\n" + " \n" + " return gradient_color;\n" + "}\n"; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + if (use_array) { + XNFasprintf(&gradient_fs, + gradient_fs_getcolor, stops_count, stops_count); + fs_getcolor_prog = + glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, gradient_fs); + free(gradient_fs); + } + else { + fs_getcolor_prog = + glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, + gradient_fs_getcolor_no_array); + } + + return fs_getcolor_prog; } static void -_glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, int dyn_gen) +_glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, + int dyn_gen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - int index; - - GLint gradient_prog = 0; - char *gradient_fs = NULL; - GLint fs_main_prog, fs_getcolor_prog, vs_prog; - - const char *gradient_vs = - GLAMOR_DEFAULT_PRECISION - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord;\n" - "varying vec2 source_texture;\n" - "\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " source_texture = v_texcoord.xy;\n" - "}\n"; - - /* - * Refer to pixman radial gradient. - * - * The problem is given the two circles of c1 and c2 with the radius of r1 and - * r1, we need to caculate the t, which is used to do interpolate with stops, - * using the fomula: - * length((1-t)*c1 + t*c2 - p) = (1-t)*r1 + t*r2 - * expand the fomula with xy coond, get the following: - * sqrt(sqr((1-t)*c1.x + t*c2.x - p.x) + sqr((1-t)*c1.y + t*c2.y - p.y)) - * = (1-t)r1 + t*r2 - * <====> At*t- 2Bt + C = 0 - * where A = sqr(c2.x - c1.x) + sqr(c2.y - c1.y) - sqr(r2 -r1) - * B = (p.x - c1.x)*(c2.x - c1.x) + (p.y - c1.y)*(c2.y - c1.y) + r1*(r2 -r1) - * C = sqr(p.x - c1.x) + sqr(p.y - c1.y) - r1*r1 - * - * solve the fomula and we get the result of - * t = (B + sqrt(B*B - A*C)) / A or - * t = (B - sqrt(B*B - A*C)) / A (quadratic equation have two solutions) - * - * The solution we are going to prefer is the bigger one, unless the - * radius associated to it is negative (or it falls outside the valid t range) - */ - - #define gradient_radial_fs_template\ + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + int index; + + GLint gradient_prog = 0; + char *gradient_fs = NULL; + GLint fs_main_prog, fs_getcolor_prog, vs_prog; + + const char *gradient_vs = + GLAMOR_DEFAULT_PRECISION + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord;\n" + "varying vec2 source_texture;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " source_texture = v_texcoord.xy;\n" + "}\n"; + + /* + * Refer to pixman radial gradient. + * + * The problem is given the two circles of c1 and c2 with the radius of r1 and + * r1, we need to caculate the t, which is used to do interpolate with stops, + * using the fomula: + * length((1-t)*c1 + t*c2 - p) = (1-t)*r1 + t*r2 + * expand the fomula with xy coond, get the following: + * sqrt(sqr((1-t)*c1.x + t*c2.x - p.x) + sqr((1-t)*c1.y + t*c2.y - p.y)) + * = (1-t)r1 + t*r2 + * <====> At*t- 2Bt + C = 0 + * where A = sqr(c2.x - c1.x) + sqr(c2.y - c1.y) - sqr(r2 -r1) + * B = (p.x - c1.x)*(c2.x - c1.x) + (p.y - c1.y)*(c2.y - c1.y) + r1*(r2 -r1) + * C = sqr(p.x - c1.x) + sqr(p.y - c1.y) - r1*r1 + * + * solve the fomula and we get the result of + * t = (B + sqrt(B*B - A*C)) / A or + * t = (B - sqrt(B*B - A*C)) / A (quadratic equation have two solutions) + * + * The solution we are going to prefer is the bigger one, unless the + * radius associated to it is negative (or it falls outside the valid t range) + */ + +#define gradient_radial_fs_template\ GLAMOR_DEFAULT_PRECISION\ "uniform mat3 transform_mat;\n"\ "uniform int repeat_type;\n"\ @@ -344,149 +348,165 @@ _glamor_create_radial_gradient_program(ScreenPtr screen, int stops_count, int dy " }\n"\ "}\n" - glamor_priv = glamor_get_screen_private(screen); - - if ((glamor_priv->radial_max_nstops >= stops_count) && (dyn_gen)) { - /* Very Good, not to generate again. */ - return; - } - - dispatch = glamor_get_dispatch(glamor_priv); - - if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]) { - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2]); - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0; - - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2]); - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = 0; - - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2]); - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0; - - dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]); - glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2] = 0; - } - - gradient_prog = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, - GL_VERTEX_SHADER, gradient_vs); - - XNFasprintf(&gradient_fs, - gradient_radial_fs_template, - PIXMAN_REPEAT_NONE, PIXMAN_REPEAT_NORMAL, PIXMAN_REPEAT_REFLECT); - - fs_main_prog = glamor_compile_glsl_prog(dispatch, - GL_FRAGMENT_SHADER, gradient_fs); - - free(gradient_fs); - - fs_getcolor_prog = - _glamor_create_getcolor_fs_program(screen, stops_count, (stops_count > 0)); - - dispatch->glAttachShader(gradient_prog, vs_prog); - dispatch->glAttachShader(gradient_prog, fs_getcolor_prog); - dispatch->glAttachShader(gradient_prog, fs_main_prog); - - dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_positionsition"); - dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord"); - - glamor_link_glsl_prog(dispatch, gradient_prog); - - dispatch->glUseProgram(0); - - if (dyn_gen) { - index = 2; - glamor_priv->radial_max_nstops = stops_count; - } else if (stops_count) { - index = 1; - } else { - index = 0; - } - - glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][index] = gradient_prog; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] = vs_prog; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] = fs_main_prog; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] = fs_getcolor_prog; - - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + + if ((glamor_priv->radial_max_nstops >= stops_count) && (dyn_gen)) { + /* Very Good, not to generate again. */ + return; + } + + dispatch = glamor_get_dispatch(glamor_priv); + + if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]) { + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_VS_PROG][2]); + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0; + + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_FS_MAIN_PROG][2]); + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = + 0; + + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_FS_GETCOLOR_PROG][2]); + glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0; + + dispatch->glDeleteProgram(glamor_priv-> + gradient_prog[SHADER_GRADIENT_RADIAL][2]); + glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2] = 0; + } + + gradient_prog = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, gradient_vs); + + XNFasprintf(&gradient_fs, + gradient_radial_fs_template, + PIXMAN_REPEAT_NONE, PIXMAN_REPEAT_NORMAL, + PIXMAN_REPEAT_REFLECT); + + fs_main_prog = glamor_compile_glsl_prog(dispatch, + GL_FRAGMENT_SHADER, gradient_fs); + + free(gradient_fs); + + fs_getcolor_prog = + _glamor_create_getcolor_fs_program(screen, stops_count, + (stops_count > 0)); + + dispatch->glAttachShader(gradient_prog, vs_prog); + dispatch->glAttachShader(gradient_prog, fs_getcolor_prog); + dispatch->glAttachShader(gradient_prog, fs_main_prog); + + dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, + "v_positionsition"); + dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, + "v_texcoord"); + + glamor_link_glsl_prog(dispatch, gradient_prog); + + dispatch->glUseProgram(0); + + if (dyn_gen) { + index = 2; + glamor_priv->radial_max_nstops = stops_count; + } + else if (stops_count) { + index = 1; + } + else { + index = 0; + } + + glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][index] = gradient_prog; + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] = + vs_prog; + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] = + fs_main_prog; + glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] = + fs_getcolor_prog; + + glamor_put_dispatch(glamor_priv); } static void -_glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, int dyn_gen) +_glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, + int dyn_gen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - - int index = 0; - GLint gradient_prog = 0; - char *gradient_fs = NULL; - GLint fs_main_prog, fs_getcolor_prog, vs_prog; - - const char *gradient_vs = - GLAMOR_DEFAULT_PRECISION - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord;\n" - "varying vec2 source_texture;\n" - "\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " source_texture = v_texcoord.xy;\n" - "}\n"; - - /* - * | - * |\ - * | \ - * | \ - * | \ - * |\ \ - * | \ \ - * cos_val = |\ p1d \ / - * sqrt(1/(slope*slope+1.0)) ------>\ \ \ / - * | \ \ \ - * | \ \ / \ - * | \ *Pt1\ - * *p1 | \ \ *P - * \ | / \ \ / - * \ | / \ \ / - * \ | pd \ - * \ | \ / \ - * p2* | \ / \ / - * slope = (p2.y - p1.y) / | / p2d / - * (p2.x - p1.x) | / \ / - * | / \ / - * | / / - * | / / - * | / *Pt2 - * | / - * | / - * | / - * | / - * | / - * -------+--------------------------------- - * O| - * | - * | - * - * step 1: compute the distance of p, pt1 and pt2 in the slope direction. - * Caculate the distance on Y axis first and multiply cos_val to - * get the value on slope direction(pd, p1d and p2d represent the - * distance of p, pt1, and pt2 respectively). - * - * step 2: caculate the percentage of (pd - p1d)/(p2d - p1d). - * If (pd - p1d) > (p2d - p1d) or < 0, then sub or add (p2d - p1d) - * to make it in the range of [0, (p2d - p1d)]. - * - * step 3: compare the percentage to every stop and find the stpos just - * before and after it. Use the interpolation fomula to compute RGBA. - */ - - #define gradient_fs_template \ + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + + int index = 0; + GLint gradient_prog = 0; + char *gradient_fs = NULL; + GLint fs_main_prog, fs_getcolor_prog, vs_prog; + + const char *gradient_vs = + GLAMOR_DEFAULT_PRECISION + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord;\n" + "varying vec2 source_texture;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " source_texture = v_texcoord.xy;\n" + "}\n"; + + /* + * | + * |\ + * | \ + * | \ + * | \ + * |\ \ + * | \ \ + * cos_val = |\ p1d \ / + * sqrt(1/(slope*slope+1.0)) ------>\ \ \ / + * | \ \ \ + * | \ \ / \ + * | \ *Pt1\ + * *p1 | \ \ *P + * \ | / \ \ / + * \ | / \ \ / + * \ | pd \ + * \ | \ / \ + * p2* | \ / \ / + * slope = (p2.y - p1.y) / | / p2d / + * (p2.x - p1.x) | / \ / + * | / \ / + * | / / + * | / / + * | / *Pt2 + * | / + * | / + * | / + * | / + * | / + * -------+--------------------------------- + * O| + * | + * | + * + * step 1: compute the distance of p, pt1 and pt2 in the slope direction. + * Caculate the distance on Y axis first and multiply cos_val to + * get the value on slope direction(pd, p1d and p2d represent the + * distance of p, pt1, and pt2 respectively). + * + * step 2: caculate the percentage of (pd - p1d)/(p2d - p1d). + * If (pd - p1d) > (p2d - p1d) or < 0, then sub or add (p2d - p1d) + * to make it in the range of [0, (p2d - p1d)]. + * + * step 3: compare the percentage to every stop and find the stpos just + * before and after it. Use the interpolation fomula to compute RGBA. + */ + +#define gradient_fs_template \ GLAMOR_DEFAULT_PRECISION\ "uniform mat3 transform_mat;\n"\ "uniform int repeat_type;\n"\ @@ -569,209 +589,238 @@ _glamor_create_linear_gradient_program(ScreenPtr screen, int stops_count, int dy " gl_FragColor = get_color(stop_len);\n"\ "}\n" - glamor_priv = glamor_get_screen_private(screen); - - if ((glamor_priv->linear_max_nstops >= stops_count) && (dyn_gen)) { - /* Very Good, not to generate again. */ - return; - } - - dispatch = glamor_get_dispatch(glamor_priv); - if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]) { - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2]); - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0; - - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2]); - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = 0; - - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2]); - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0; - - dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]); - glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2] = 0; - } - - gradient_prog = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, - GL_VERTEX_SHADER, gradient_vs); - - XNFasprintf(&gradient_fs, - gradient_fs_template, - PIXMAN_REPEAT_NORMAL, PIXMAN_REPEAT_REFLECT); - - fs_main_prog = glamor_compile_glsl_prog(dispatch, - GL_FRAGMENT_SHADER, gradient_fs); - free(gradient_fs); - - fs_getcolor_prog = - _glamor_create_getcolor_fs_program(screen, stops_count, (stops_count > 0)); - - dispatch->glAttachShader(gradient_prog, vs_prog); - dispatch->glAttachShader(gradient_prog, fs_getcolor_prog); - dispatch->glAttachShader(gradient_prog, fs_main_prog); - - dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, "v_texcoord"); - - glamor_link_glsl_prog(dispatch, gradient_prog); - - dispatch->glUseProgram(0); - - if (dyn_gen) { - index = 2; - glamor_priv->linear_max_nstops = stops_count; - } else if (stops_count) { - index = 1; - } else { - index = 0; - } - - glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][index] = gradient_prog; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] = vs_prog; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] = fs_main_prog; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] = fs_getcolor_prog; - - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + + if ((glamor_priv->linear_max_nstops >= stops_count) && (dyn_gen)) { + /* Very Good, not to generate again. */ + return; + } + + dispatch = glamor_get_dispatch(glamor_priv); + if (dyn_gen && glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]) { + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_VS_PROG][2]); + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][2] = 0; + + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_FS_MAIN_PROG][2]); + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][2] = + 0; + + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_FS_GETCOLOR_PROG][2]); + glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][2] = 0; + + dispatch->glDeleteProgram(glamor_priv-> + gradient_prog[SHADER_GRADIENT_LINEAR][2]); + glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2] = 0; + } + + gradient_prog = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, gradient_vs); + + XNFasprintf(&gradient_fs, + gradient_fs_template, + PIXMAN_REPEAT_NORMAL, PIXMAN_REPEAT_REFLECT); + + fs_main_prog = glamor_compile_glsl_prog(dispatch, + GL_FRAGMENT_SHADER, gradient_fs); + free(gradient_fs); + + fs_getcolor_prog = + _glamor_create_getcolor_fs_program(screen, stops_count, + (stops_count > 0)); + + dispatch->glAttachShader(gradient_prog, vs_prog); + dispatch->glAttachShader(gradient_prog, fs_getcolor_prog); + dispatch->glAttachShader(gradient_prog, fs_main_prog); + + dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_POS, + "v_position"); + dispatch->glBindAttribLocation(gradient_prog, GLAMOR_VERTEX_SOURCE, + "v_texcoord"); + + glamor_link_glsl_prog(dispatch, gradient_prog); + + dispatch->glUseProgram(0); + + if (dyn_gen) { + index = 2; + glamor_priv->linear_max_nstops = stops_count; + } + else if (stops_count) { + index = 1; + } + else { + index = 0; + } + + glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][index] = gradient_prog; + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][index] = + vs_prog; + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][index] = + fs_main_prog; + glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][index] = + fs_getcolor_prog; + + glamor_put_dispatch(glamor_priv); } void glamor_init_gradient_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - int i; - - glamor_priv = glamor_get_screen_private(screen); - - for (i = 0; i < 3; i++) { - glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i] = 0; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] = 0; - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0; - - glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i] = 0; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] = 0; - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0; - } - glamor_priv->linear_max_nstops = 0; - glamor_priv->radial_max_nstops = 0; - - _glamor_create_linear_gradient_program(screen, 0, 0); - _glamor_create_linear_gradient_program(screen, LINEAR_LARGE_STOPS, 0); - - _glamor_create_radial_gradient_program(screen, 0, 0); - _glamor_create_radial_gradient_program(screen, RADIAL_LARGE_STOPS, 0); + glamor_screen_private *glamor_priv; + int i; + + glamor_priv = glamor_get_screen_private(screen); + + for (i = 0; i < 3; i++) { + glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i] = 0; + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0; + glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] = + 0; + glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0; + + glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i] = 0; + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i] = 0; + glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i] = + 0; + glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i] = 0; + } + glamor_priv->linear_max_nstops = 0; + glamor_priv->radial_max_nstops = 0; + + _glamor_create_linear_gradient_program(screen, 0, 0); + _glamor_create_linear_gradient_program(screen, LINEAR_LARGE_STOPS, 0); + + _glamor_create_radial_gradient_program(screen, 0, 0); + _glamor_create_radial_gradient_program(screen, RADIAL_LARGE_STOPS, 0); } void glamor_fini_gradient_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - int i = 0; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - for (i = 0; i < 3; i++) { - /* Linear Gradient */ - if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]); - - if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]); - - if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]); - - if (glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i]) - dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i]); - - /* Radial Gradient */ - if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]); - - if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]); - - if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]) - dispatch->glDeleteShader( - glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]); - - if (glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i]) - dispatch->glDeleteProgram(glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i]); - } - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + int i = 0; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + for (i = 0; i < 3; i++) { + /* Linear Gradient */ + if (glamor_priv->linear_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_VS_PROG][i]); + + if (glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_FS_MAIN_PROG][i]); + + if (glamor_priv-> + linear_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + linear_gradient_shaders + [SHADER_GRADIENT_FS_GETCOLOR_PROG][i]); + + if (glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][i]) + dispatch->glDeleteProgram(glamor_priv-> + gradient_prog[SHADER_GRADIENT_LINEAR][i]); + + /* Radial Gradient */ + if (glamor_priv->radial_gradient_shaders[SHADER_GRADIENT_VS_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_VS_PROG][i]); + + if (glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_MAIN_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_FS_MAIN_PROG][i]); + + if (glamor_priv-> + radial_gradient_shaders[SHADER_GRADIENT_FS_GETCOLOR_PROG][i]) + dispatch->glDeleteShader(glamor_priv-> + radial_gradient_shaders + [SHADER_GRADIENT_FS_GETCOLOR_PROG][i]); + + if (glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][i]) + dispatch->glDeleteProgram(glamor_priv-> + gradient_prog[SHADER_GRADIENT_RADIAL][i]); + } + + glamor_put_dispatch(glamor_priv); } static void _glamor_gradient_convert_trans_matrix(PictTransform *from, float to[3][3], - int width, int height, int normalize) + int width, int height, int normalize) { - /* - * Because in the shader program, we normalize all the pixel cood to [0, 1], - * so with the transform matrix, the correct logic should be: - * v_s = A*T*v - * v_s: point vector in shader after normalized. - * A: The transition matrix from width X height --> 1.0 X 1.0 - * T: The transform matrix. - * v: point vector in width X height space. - * - * result is OK if we use this fomula. But for every point in width X height space, - * we can just use their normalized point vector in shader, namely we can just - * use the result of A*v in shader. So we have no chance to insert T in A*v. - * We can just convert v_s = A*T*v to v_s = A*T*inv(A)*A*v, where inv(A) is the - * inverse matrix of A. Now, v_s = (A*T*inv(A)) * (A*v) - * So, to get the correct v_s, we need to cacula1 the matrix: (A*T*inv(A)), and - * we name this matrix T_s. - * - * Firstly, because A is for the scale convertion, we find - * -- -- - * |1/w 0 0 | - * A = | 0 1/h 0 | - * | 0 0 1.0| - * -- -- - * so T_s = A*T*inv(a) and result - * - * -- -- - * | t11 h*t12/w t13/w| - * T_s = | w*t21/h t22 t23/h| - * | w*t31 h*t32 t33 | - * -- -- - */ - - to[0][0] = (float)pixman_fixed_to_double(from->matrix[0][0]); - to[0][1] = (float)pixman_fixed_to_double(from->matrix[0][1]) - * (normalize ? (((float)height) / ((float)width)) : 1.0); - to[0][2] = (float)pixman_fixed_to_double(from->matrix[0][2]) - / (normalize ? ((float)width) : 1.0); - - to[1][0] = (float)pixman_fixed_to_double(from->matrix[1][0]) - * (normalize ? (((float)width) / ((float)height)) : 1.0); - to[1][1] = (float)pixman_fixed_to_double(from->matrix[1][1]); - to[1][2] = (float)pixman_fixed_to_double(from->matrix[1][2]) - / (normalize ? ((float)height) : 1.0); - - to[2][0] = (float)pixman_fixed_to_double(from->matrix[2][0]) - * (normalize ? ((float)width) : 1.0); - to[2][1] = (float)pixman_fixed_to_double(from->matrix[2][1]) - * (normalize ? ((float)height) : 1.0); - to[2][2] = (float)pixman_fixed_to_double(from->matrix[2][2]); - - DEBUGF("the transform matrix is:\n%f\t%f\t%f\n%f\t%f\t%f\n%f\t%f\t%f\n", - to[0][0], to[0][1], to[0][2], - to[1][0], to[1][1], to[1][2], - to[2][0], to[2][1], to[2][2]); + /* + * Because in the shader program, we normalize all the pixel cood to [0, 1], + * so with the transform matrix, the correct logic should be: + * v_s = A*T*v + * v_s: point vector in shader after normalized. + * A: The transition matrix from width X height --> 1.0 X 1.0 + * T: The transform matrix. + * v: point vector in width X height space. + * + * result is OK if we use this fomula. But for every point in width X height space, + * we can just use their normalized point vector in shader, namely we can just + * use the result of A*v in shader. So we have no chance to insert T in A*v. + * We can just convert v_s = A*T*v to v_s = A*T*inv(A)*A*v, where inv(A) is the + * inverse matrix of A. Now, v_s = (A*T*inv(A)) * (A*v) + * So, to get the correct v_s, we need to cacula1 the matrix: (A*T*inv(A)), and + * we name this matrix T_s. + * + * Firstly, because A is for the scale convertion, we find + * -- -- + * |1/w 0 0 | + * A = | 0 1/h 0 | + * | 0 0 1.0| + * -- -- + * so T_s = A*T*inv(a) and result + * + * -- -- + * | t11 h*t12/w t13/w| + * T_s = | w*t21/h t22 t23/h| + * | w*t31 h*t32 t33 | + * -- -- + */ + + to[0][0] = (float) pixman_fixed_to_double(from->matrix[0][0]); + to[0][1] = (float) pixman_fixed_to_double(from->matrix[0][1]) + * (normalize ? (((float) height) / ((float) width)) : 1.0); + to[0][2] = (float) pixman_fixed_to_double(from->matrix[0][2]) + / (normalize ? ((float) width) : 1.0); + + to[1][0] = (float) pixman_fixed_to_double(from->matrix[1][0]) + * (normalize ? (((float) width) / ((float) height)) : 1.0); + to[1][1] = (float) pixman_fixed_to_double(from->matrix[1][1]); + to[1][2] = (float) pixman_fixed_to_double(from->matrix[1][2]) + / (normalize ? ((float) height) : 1.0); + + to[2][0] = (float) pixman_fixed_to_double(from->matrix[2][0]) + * (normalize ? ((float) width) : 1.0); + to[2][1] = (float) pixman_fixed_to_double(from->matrix[2][1]) + * (normalize ? ((float) height) : 1.0); + to[2][2] = (float) pixman_fixed_to_double(from->matrix[2][2]); + + DEBUGF("the transform matrix is:\n%f\t%f\t%f\n%f\t%f\t%f\n%f\t%f\t%f\n", + to[0][0], to[0][1], to[0][2], + to[1][0], to[1][1], to[1][2], to[2][0], to[2][1], to[2][2]); } static int @@ -782,803 +831,844 @@ _glamor_gradient_set_pixmap_destination(ScreenPtr screen, int x_source, int y_source, float vertices[8], float tex_vertices[8], - int tex_normalize) + int tex_normalize) { - glamor_pixmap_private *pixmap_priv; - PixmapPtr pixmap = NULL; - glamor_gl_dispatch *dispatch = NULL; - - pixmap = glamor_get_drawable_pixmap(dst_picture->pDrawable); - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { /* should always have here. */ - return 0; - } - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - - pixmap_priv_get_dest_scale(pixmap_priv, xscale, yscale); - - DEBUGF("xscale = %f, yscale = %f," - " x_source = %d, y_source = %d, width = %d, height = %d\n", - *xscale, *yscale, x_source, y_source, - dst_picture->pDrawable->width, dst_picture->pDrawable->height); - - glamor_set_normalize_vcoords_tri_strip(*xscale, *yscale, - 0, 0, - (INT16)(dst_picture->pDrawable->width), - (INT16)(dst_picture->pDrawable->height), - glamor_priv->yInverted, vertices); - - if (tex_normalize) { - glamor_set_normalize_tcoords_tri_stripe(*xscale, *yscale, - x_source, y_source, - (INT16)(dst_picture->pDrawable->width + x_source), - (INT16)(dst_picture->pDrawable->height + y_source), - glamor_priv->yInverted, tex_vertices); - } else { - glamor_set_tcoords_tri_strip((INT16)(dst_picture->pDrawable->width), - (INT16)(dst_picture->pDrawable->height), - x_source, y_source, - (INT16)(dst_picture->pDrawable->width) + x_source, - (INT16)(dst_picture->pDrawable->height) + y_source, - glamor_priv->yInverted, tex_vertices); - } - - DEBUGF("vertices --> leftup : %f X %f, rightup: %f X %f," - "rightbottom: %f X %f, leftbottom : %f X %f\n", - vertices[0], vertices[1], vertices[2], vertices[3], - vertices[4], vertices[5], vertices[6], vertices[7]); - DEBUGF("tex_vertices --> leftup : %f X %f, rightup: %f X %f," - "rightbottom: %f X %f, leftbottom : %f X %f\n", - tex_vertices[0], tex_vertices[1], tex_vertices[2], tex_vertices[3], - tex_vertices[4], tex_vertices[5], tex_vertices[6], tex_vertices[7]); - - dispatch = glamor_get_dispatch(glamor_priv); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 0, vertices); - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, - GL_FALSE, 0, tex_vertices); - - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - - glamor_put_dispatch(glamor_priv); - - return 1; + glamor_pixmap_private *pixmap_priv; + PixmapPtr pixmap = NULL; + glamor_gl_dispatch *dispatch = NULL; + + pixmap = glamor_get_drawable_pixmap(dst_picture->pDrawable); + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { /* should always have here. */ + return 0; + } + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + pixmap_priv_get_dest_scale(pixmap_priv, xscale, yscale); + + DEBUGF("xscale = %f, yscale = %f," + " x_source = %d, y_source = %d, width = %d, height = %d\n", + *xscale, *yscale, x_source, y_source, + dst_picture->pDrawable->width, dst_picture->pDrawable->height); + + glamor_set_normalize_vcoords_tri_strip(*xscale, *yscale, + 0, 0, + (INT16) (dst_picture->pDrawable-> + width), + (INT16) (dst_picture->pDrawable-> + height), + glamor_priv->yInverted, vertices); + + if (tex_normalize) { + glamor_set_normalize_tcoords_tri_stripe(*xscale, *yscale, + x_source, y_source, + (INT16) (dst_picture-> + pDrawable->width + + x_source), + (INT16) (dst_picture-> + pDrawable->height + + y_source), + glamor_priv->yInverted, + tex_vertices); + } + else { + glamor_set_tcoords_tri_strip((INT16) (dst_picture->pDrawable->width), + (INT16) (dst_picture->pDrawable->height), + x_source, y_source, + (INT16) (dst_picture->pDrawable->width) + + x_source, + (INT16) (dst_picture->pDrawable->height) + + y_source, glamor_priv->yInverted, + tex_vertices); + } + + DEBUGF("vertices --> leftup : %f X %f, rightup: %f X %f," + "rightbottom: %f X %f, leftbottom : %f X %f\n", + vertices[0], vertices[1], vertices[2], vertices[3], + vertices[4], vertices[5], vertices[6], vertices[7]); + DEBUGF("tex_vertices --> leftup : %f X %f, rightup: %f X %f," + "rightbottom: %f X %f, leftbottom : %f X %f\n", + tex_vertices[0], tex_vertices[1], tex_vertices[2], tex_vertices[3], + tex_vertices[4], tex_vertices[5], tex_vertices[6], tex_vertices[7]); + + dispatch = glamor_get_dispatch(glamor_priv); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 0, vertices); + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, + GL_FALSE, 0, tex_vertices); + + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + glamor_put_dispatch(glamor_priv); + + return 1; } static int -_glamor_gradient_set_stops(PicturePtr src_picture, PictGradient * pgradient, - GLfloat *stop_colors, GLfloat *n_stops) +_glamor_gradient_set_stops(PicturePtr src_picture, PictGradient *pgradient, + GLfloat *stop_colors, GLfloat *n_stops) { - int i; - int count = 1; - - for (i = 0; i < pgradient->nstops; i++) { - stop_colors[count*4] = pixman_fixed_to_double( - pgradient->stops[i].color.red); - stop_colors[count*4+1] = pixman_fixed_to_double( - pgradient->stops[i].color.green); - stop_colors[count*4+2] = pixman_fixed_to_double( - pgradient->stops[i].color.blue); - stop_colors[count*4+3] = pixman_fixed_to_double( - pgradient->stops[i].color.alpha); - - n_stops[count] = (GLfloat)pixman_fixed_to_double( - pgradient->stops[i].x); - count++; - } - - /* for the end stop. */ - count++; - - switch (src_picture->repeatType) { + int i; + int count = 1; + + for (i = 0; i < pgradient->nstops; i++) { + stop_colors[count * 4] = + pixman_fixed_to_double(pgradient->stops[i].color.red); + stop_colors[count * 4 + 1] = + pixman_fixed_to_double(pgradient->stops[i].color.green); + stop_colors[count * 4 + 2] = + pixman_fixed_to_double(pgradient->stops[i].color.blue); + stop_colors[count * 4 + 3] = + pixman_fixed_to_double(pgradient->stops[i].color.alpha); + + n_stops[count] = + (GLfloat) pixman_fixed_to_double(pgradient->stops[i].x); + count++; + } + + /* for the end stop. */ + count++; + + switch (src_picture->repeatType) { #define REPEAT_FILL_STOPS(m, n) \ stop_colors[(m)*4 + 0] = stop_colors[(n)*4 + 0]; \ stop_colors[(m)*4 + 1] = stop_colors[(n)*4 + 1]; \ stop_colors[(m)*4 + 2] = stop_colors[(n)*4 + 2]; \ stop_colors[(m)*4 + 3] = stop_colors[(n)*4 + 3]; - default: - case PIXMAN_REPEAT_NONE: - stop_colors[0] = 0.0; //R - stop_colors[1] = 0.0; //G - stop_colors[2] = 0.0; //B - stop_colors[3] = 0.0; //Alpha - n_stops[0] = -(float)INT_MAX; //should be small enough. - - stop_colors[0 + (count-1)*4] = 0.0; //R - stop_colors[1 + (count-1)*4] = 0.0; //G - stop_colors[2 + (count-1)*4] = 0.0; //B - stop_colors[3 + (count-1)*4] = 0.0; //Alpha - n_stops[count-1] = (float)INT_MAX; //should be large enough. - break; - case PIXMAN_REPEAT_NORMAL: - REPEAT_FILL_STOPS(0, count - 2); - n_stops[0] = n_stops[count-2] - 1.0; - - REPEAT_FILL_STOPS(count - 1, 1); - n_stops[count-1] = n_stops[1] + 1.0; - break; - case PIXMAN_REPEAT_REFLECT: - REPEAT_FILL_STOPS(0, 1); - n_stops[0] = -n_stops[1]; - - REPEAT_FILL_STOPS(count - 1, count - 2); - n_stops[count-1] = 1.0 + 1.0 - n_stops[count-2]; - break; - case PIXMAN_REPEAT_PAD: - REPEAT_FILL_STOPS(0, 1); - n_stops[0] = -(float)INT_MAX; - - REPEAT_FILL_STOPS(count - 1, count - 2); - n_stops[count-1] = (float)INT_MAX; - break; + default: + case PIXMAN_REPEAT_NONE: + stop_colors[0] = 0.0; //R + stop_colors[1] = 0.0; //G + stop_colors[2] = 0.0; //B + stop_colors[3] = 0.0; //Alpha + n_stops[0] = -(float) INT_MAX; //should be small enough. + + stop_colors[0 + (count - 1) * 4] = 0.0; //R + stop_colors[1 + (count - 1) * 4] = 0.0; //G + stop_colors[2 + (count - 1) * 4] = 0.0; //B + stop_colors[3 + (count - 1) * 4] = 0.0; //Alpha + n_stops[count - 1] = (float) INT_MAX; //should be large enough. + break; + case PIXMAN_REPEAT_NORMAL: + REPEAT_FILL_STOPS(0, count - 2); + n_stops[0] = n_stops[count - 2] - 1.0; + + REPEAT_FILL_STOPS(count - 1, 1); + n_stops[count - 1] = n_stops[1] + 1.0; + break; + case PIXMAN_REPEAT_REFLECT: + REPEAT_FILL_STOPS(0, 1); + n_stops[0] = -n_stops[1]; + + REPEAT_FILL_STOPS(count - 1, count - 2); + n_stops[count - 1] = 1.0 + 1.0 - n_stops[count - 2]; + break; + case PIXMAN_REPEAT_PAD: + REPEAT_FILL_STOPS(0, 1); + n_stops[0] = -(float) INT_MAX; + + REPEAT_FILL_STOPS(count - 1, count - 2); + n_stops[count - 1] = (float) INT_MAX; + break; #undef REPEAT_FILL_STOPS - } + } - for (i = 0; i < count; i++) { - DEBUGF("n_stops[%d] = %f, color = r:%f g:%f b:%f a:%f\n", - i, n_stops[i], - stop_colors[i*4], stop_colors[i*4+1], - stop_colors[i*4+2], stop_colors[i*4+3]); - } + for (i = 0; i < count; i++) { + DEBUGF("n_stops[%d] = %f, color = r:%f g:%f b:%f a:%f\n", + i, n_stops[i], + stop_colors[i * 4], stop_colors[i * 4 + 1], + stop_colors[i * 4 + 2], stop_colors[i * 4 + 3]); + } - return count; + return count; } PicturePtr glamor_generate_radial_gradient_picture(ScreenPtr screen, - PicturePtr src_picture, - int x_source, int y_source, - int width, int height, - PictFormatShort format) + PicturePtr src_picture, + int x_source, int y_source, + int width, int height, + PictFormatShort format) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - PicturePtr dst_picture = NULL; - PixmapPtr pixmap = NULL; - GLint gradient_prog = 0; - int error; - float tex_vertices[8]; - int stops_count = 0; - int count = 0; - GLfloat *stop_colors = NULL; - GLfloat *n_stops = NULL; - GLfloat xscale, yscale; - float vertices[8]; - float transform_mat[3][3]; - static const float identity_mat[3][3] = {{1.0, 0.0, 0.0}, - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0}}; - GLfloat stop_colors_st[RADIAL_SMALL_STOPS*4]; - GLfloat n_stops_st[RADIAL_SMALL_STOPS]; - GLfloat A_value; - GLfloat cxy[4]; - float c1x, c1y, c2x, c2y, r1, r2; - - GLint transform_mat_uniform_location = 0; - GLint repeat_type_uniform_location = 0; - GLint n_stop_uniform_location = 0; - GLint stops_uniform_location = 0; - GLint stop_colors_uniform_location = 0; - GLint stop0_uniform_location = 0; - GLint stop1_uniform_location = 0; - GLint stop2_uniform_location = 0; - GLint stop3_uniform_location = 0; - GLint stop4_uniform_location = 0; - GLint stop5_uniform_location = 0; - GLint stop6_uniform_location = 0; - GLint stop7_uniform_location = 0; - GLint stop_color0_uniform_location = 0; - GLint stop_color1_uniform_location = 0; - GLint stop_color2_uniform_location = 0; - GLint stop_color3_uniform_location = 0; - GLint stop_color4_uniform_location = 0; - GLint stop_color5_uniform_location = 0; - GLint stop_color6_uniform_location = 0; - GLint stop_color7_uniform_location = 0; - GLint A_value_uniform_location = 0; - GLint c1_uniform_location = 0; - GLint r1_uniform_location = 0; - GLint c2_uniform_location = 0; - GLint r2_uniform_location = 0; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - /* Create a pixmap with VBO. */ - pixmap = glamor_create_pixmap(screen, - width, height, - PIXMAN_FORMAT_DEPTH(format), - 0); - if (!pixmap) - goto GRADIENT_FAIL; - - dst_picture = CreatePicture(0, &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), format), - 0, 0, serverClient, &error); - - /* Release the reference, picture will hold the last one. */ - glamor_destroy_pixmap(pixmap); - - if (!dst_picture) - goto GRADIENT_FAIL; - - ValidatePicture(dst_picture); - - stops_count = src_picture->pSourcePict->radial.nstops + 2; - - /* Because the max value of nstops is unkown, so create a program - when nstops > LINEAR_LARGE_STOPS.*/ - if (stops_count <= RADIAL_SMALL_STOPS) { - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][0]; - } else if (stops_count <= RADIAL_LARGE_STOPS) { - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][1]; - } else { - _glamor_create_radial_gradient_program(screen, - src_picture->pSourcePict->linear.nstops + 2, - 1); - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]; - } - - /* Bind all the uniform vars .*/ - transform_mat_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "transform_mat"); - repeat_type_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); - n_stop_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "n_stop"); - A_value_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "A_value"); - repeat_type_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); - c1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "c1"); - r1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "r1"); - c2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "c2"); - r2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "r2"); - - if (src_picture->pSourcePict->radial.nstops + 2 <= RADIAL_SMALL_STOPS) { - stop0_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop0"); - stop1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop1"); - stop2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop2"); - stop3_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop3"); - stop4_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop4"); - stop5_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop5"); - stop6_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop6"); - stop7_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop7"); - - stop_color0_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color0"); - stop_color1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color1"); - stop_color2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color2"); - stop_color3_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color3"); - stop_color4_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color4"); - stop_color5_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color5"); - stop_color6_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color6"); - stop_color7_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color7"); - } else { - stops_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stops"); - stop_colors_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_colors"); - } - - dispatch->glUseProgram(gradient_prog); - - dispatch->glUniform1i(repeat_type_uniform_location, src_picture->repeatType); - - - if (src_picture->transform) { - _glamor_gradient_convert_trans_matrix(src_picture->transform, - transform_mat, - width, height, 0); - dispatch->glUniformMatrix3fv(transform_mat_uniform_location, - 1, 1, &transform_mat[0][0]); - } else { - dispatch->glUniformMatrix3fv(transform_mat_uniform_location, - 1, 1, &identity_mat[0][0]); - } - - if (!_glamor_gradient_set_pixmap_destination(screen, glamor_priv, dst_picture, - &xscale, &yscale, x_source, y_source, - vertices, tex_vertices, 0)) - goto GRADIENT_FAIL; - - /* Set all the stops and colors to shader. */ - if (stops_count > RADIAL_SMALL_STOPS) { - stop_colors = malloc(4 * stops_count * sizeof(float)); - if (stop_colors == NULL) { - ErrorF("Failed to allocate stop_colors memory.\n"); - goto GRADIENT_FAIL; - } - - n_stops = malloc(stops_count * sizeof(float)); - if (n_stops == NULL) { - ErrorF("Failed to allocate n_stops memory.\n"); - goto GRADIENT_FAIL; - } - } else { - stop_colors = stop_colors_st; - n_stops = n_stops_st; - } - - count = _glamor_gradient_set_stops(src_picture, &src_picture->pSourcePict->gradient, - stop_colors, n_stops); - - if (src_picture->pSourcePict->linear.nstops + 2 <= RADIAL_SMALL_STOPS) { - int j = 0; - dispatch->glUniform4f(stop_color0_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color1_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color2_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color3_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color4_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color5_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color6_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color7_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - - j = 0; - dispatch->glUniform1f(stop0_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop1_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop2_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop3_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop4_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop5_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop6_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop7_uniform_location, n_stops[j++]); - dispatch->glUniform1i(n_stop_uniform_location, count); - } else { - dispatch->glUniform4fv(stop_colors_uniform_location, count, stop_colors); - dispatch->glUniform1fv(stops_uniform_location, count, n_stops); - dispatch->glUniform1i(n_stop_uniform_location, count); - } - - c1x = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.x); - c1y = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.y); - c2x = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.x); - c2y = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.y); - - r1 = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.radius); - r2 = (float)pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.radius); - - glamor_set_circle_centre(width, height, c1x, c1y, glamor_priv->yInverted, cxy); - dispatch->glUniform2fv(c1_uniform_location, 1, cxy); - dispatch->glUniform1f(r1_uniform_location, r1); - - glamor_set_circle_centre(width, height, c2x, c2y, glamor_priv->yInverted, cxy); - dispatch->glUniform2fv(c2_uniform_location, 1, cxy); - dispatch->glUniform1f(r2_uniform_location, r2); - - A_value = (c2x - c1x) * (c2x - c1x) + (c2y - c1y) * (c2y - c1y) - (r2 - r1) * (r2 - r1); - dispatch->glUniform1f(A_value_uniform_location, A_value); - - DEBUGF("C1:(%f, %f) R1:%f\nC2:(%f, %f) R2:%f\nA = %f\n", - c1x, c1y, r1, c2x, c2y, r2, A_value); - - /* Now rendering. */ - dispatch->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - /* Do the clear logic.*/ - if (stops_count > RADIAL_SMALL_STOPS) { - free(n_stops); - free(stop_colors); - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - - glamor_put_dispatch(glamor_priv); - return dst_picture; - -GRADIENT_FAIL: - if (dst_picture) { - FreePicture(dst_picture, 0); - } - - if (stops_count > RADIAL_SMALL_STOPS) { - if (n_stops) - free(n_stops); - if (stop_colors) - free(stop_colors); - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - return NULL; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + PicturePtr dst_picture = NULL; + PixmapPtr pixmap = NULL; + GLint gradient_prog = 0; + int error; + float tex_vertices[8]; + int stops_count = 0; + int count = 0; + GLfloat *stop_colors = NULL; + GLfloat *n_stops = NULL; + GLfloat xscale, yscale; + float vertices[8]; + float transform_mat[3][3]; + static const float identity_mat[3][3] = { {1.0, 0.0, 0.0}, + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; + GLfloat stop_colors_st[RADIAL_SMALL_STOPS * 4]; + GLfloat n_stops_st[RADIAL_SMALL_STOPS]; + GLfloat A_value; + GLfloat cxy[4]; + float c1x, c1y, c2x, c2y, r1, r2; + + GLint transform_mat_uniform_location = 0; + GLint repeat_type_uniform_location = 0; + GLint n_stop_uniform_location = 0; + GLint stops_uniform_location = 0; + GLint stop_colors_uniform_location = 0; + GLint stop0_uniform_location = 0; + GLint stop1_uniform_location = 0; + GLint stop2_uniform_location = 0; + GLint stop3_uniform_location = 0; + GLint stop4_uniform_location = 0; + GLint stop5_uniform_location = 0; + GLint stop6_uniform_location = 0; + GLint stop7_uniform_location = 0; + GLint stop_color0_uniform_location = 0; + GLint stop_color1_uniform_location = 0; + GLint stop_color2_uniform_location = 0; + GLint stop_color3_uniform_location = 0; + GLint stop_color4_uniform_location = 0; + GLint stop_color5_uniform_location = 0; + GLint stop_color6_uniform_location = 0; + GLint stop_color7_uniform_location = 0; + GLint A_value_uniform_location = 0; + GLint c1_uniform_location = 0; + GLint r1_uniform_location = 0; + GLint c2_uniform_location = 0; + GLint r2_uniform_location = 0; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + /* Create a pixmap with VBO. */ + pixmap = glamor_create_pixmap(screen, + width, height, + PIXMAN_FORMAT_DEPTH(format), 0); + if (!pixmap) + goto GRADIENT_FAIL; + + dst_picture = CreatePicture(0, &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH(format), + format), 0, 0, serverClient, + &error); + + /* Release the reference, picture will hold the last one. */ + glamor_destroy_pixmap(pixmap); + + if (!dst_picture) + goto GRADIENT_FAIL; + + ValidatePicture(dst_picture); + + stops_count = src_picture->pSourcePict->radial.nstops + 2; + + /* Because the max value of nstops is unkown, so create a program + when nstops > LINEAR_LARGE_STOPS. */ + if (stops_count <= RADIAL_SMALL_STOPS) { + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][0]; + } + else if (stops_count <= RADIAL_LARGE_STOPS) { + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][1]; + } + else { + _glamor_create_radial_gradient_program(screen, + src_picture->pSourcePict->linear. + nstops + 2, 1); + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_RADIAL][2]; + } + + /* Bind all the uniform vars . */ + transform_mat_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "transform_mat"); + repeat_type_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); + n_stop_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "n_stop"); + A_value_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "A_value"); + repeat_type_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); + c1_uniform_location = dispatch->glGetUniformLocation(gradient_prog, "c1"); + r1_uniform_location = dispatch->glGetUniformLocation(gradient_prog, "r1"); + c2_uniform_location = dispatch->glGetUniformLocation(gradient_prog, "c2"); + r2_uniform_location = dispatch->glGetUniformLocation(gradient_prog, "r2"); + + if (src_picture->pSourcePict->radial.nstops + 2 <= RADIAL_SMALL_STOPS) { + stop0_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop0"); + stop1_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop1"); + stop2_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop2"); + stop3_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop3"); + stop4_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop4"); + stop5_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop5"); + stop6_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop6"); + stop7_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop7"); + + stop_color0_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color0"); + stop_color1_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color1"); + stop_color2_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color2"); + stop_color3_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color3"); + stop_color4_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color4"); + stop_color5_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color5"); + stop_color6_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color6"); + stop_color7_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color7"); + } + else { + stops_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stops"); + stop_colors_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_colors"); + } + + dispatch->glUseProgram(gradient_prog); + + dispatch->glUniform1i(repeat_type_uniform_location, + src_picture->repeatType); + + if (src_picture->transform) { + _glamor_gradient_convert_trans_matrix(src_picture->transform, + transform_mat, width, height, 0); + dispatch->glUniformMatrix3fv(transform_mat_uniform_location, + 1, 1, &transform_mat[0][0]); + } + else { + dispatch->glUniformMatrix3fv(transform_mat_uniform_location, + 1, 1, &identity_mat[0][0]); + } + + if (!_glamor_gradient_set_pixmap_destination + (screen, glamor_priv, dst_picture, &xscale, &yscale, x_source, y_source, + vertices, tex_vertices, 0)) + goto GRADIENT_FAIL; + + /* Set all the stops and colors to shader. */ + if (stops_count > RADIAL_SMALL_STOPS) { + stop_colors = malloc(4 * stops_count * sizeof(float)); + if (stop_colors == NULL) { + ErrorF("Failed to allocate stop_colors memory.\n"); + goto GRADIENT_FAIL; + } + + n_stops = malloc(stops_count * sizeof(float)); + if (n_stops == NULL) { + ErrorF("Failed to allocate n_stops memory.\n"); + goto GRADIENT_FAIL; + } + } + else { + stop_colors = stop_colors_st; + n_stops = n_stops_st; + } + + count = + _glamor_gradient_set_stops(src_picture, + &src_picture->pSourcePict->gradient, + stop_colors, n_stops); + + if (src_picture->pSourcePict->linear.nstops + 2 <= RADIAL_SMALL_STOPS) { + int j = 0; + + dispatch->glUniform4f(stop_color0_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color1_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color2_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color3_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color4_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color5_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color6_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color7_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + + j = 0; + dispatch->glUniform1f(stop0_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop1_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop2_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop3_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop4_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop5_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop6_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop7_uniform_location, n_stops[j++]); + dispatch->glUniform1i(n_stop_uniform_location, count); + } + else { + dispatch->glUniform4fv(stop_colors_uniform_location, count, + stop_colors); + dispatch->glUniform1fv(stops_uniform_location, count, n_stops); + dispatch->glUniform1i(n_stop_uniform_location, count); + } + + c1x = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.x); + c1y = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c1.y); + c2x = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.x); + c2y = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c2.y); + + r1 = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c1. + radius); + r2 = (float) pixman_fixed_to_double(src_picture->pSourcePict->radial.c2. + radius); + + glamor_set_circle_centre(width, height, c1x, c1y, glamor_priv->yInverted, + cxy); + dispatch->glUniform2fv(c1_uniform_location, 1, cxy); + dispatch->glUniform1f(r1_uniform_location, r1); + + glamor_set_circle_centre(width, height, c2x, c2y, glamor_priv->yInverted, + cxy); + dispatch->glUniform2fv(c2_uniform_location, 1, cxy); + dispatch->glUniform1f(r2_uniform_location, r2); + + A_value = + (c2x - c1x) * (c2x - c1x) + (c2y - c1y) * (c2y - c1y) - (r2 - + r1) * (r2 - + r1); + dispatch->glUniform1f(A_value_uniform_location, A_value); + + DEBUGF("C1:(%f, %f) R1:%f\nC2:(%f, %f) R2:%f\nA = %f\n", + c1x, c1y, r1, c2x, c2y, r2, A_value); + + /* Now rendering. */ + dispatch->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + /* Do the clear logic. */ + if (stops_count > RADIAL_SMALL_STOPS) { + free(n_stops); + free(stop_colors); + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + + glamor_put_dispatch(glamor_priv); + return dst_picture; + + GRADIENT_FAIL: + if (dst_picture) { + FreePicture(dst_picture, 0); + } + + if (stops_count > RADIAL_SMALL_STOPS) { + if (n_stops) + free(n_stops); + if (stop_colors) + free(stop_colors); + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + return NULL; } PicturePtr glamor_generate_linear_gradient_picture(ScreenPtr screen, - PicturePtr src_picture, - int x_source, int y_source, - int width, int height, - PictFormatShort format) + PicturePtr src_picture, + int x_source, int y_source, + int width, int height, + PictFormatShort format) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - PicturePtr dst_picture = NULL; - PixmapPtr pixmap = NULL; - GLint gradient_prog = 0; - int error; - float pt_distance; - float p1_distance; - GLfloat cos_val; - float tex_vertices[8]; - int stops_count = 0; - GLfloat *stop_colors = NULL; - GLfloat *n_stops = NULL; - int count = 0; - float slope; - GLfloat xscale, yscale; - GLfloat pt1[2], pt2[2]; - float vertices[8]; - float transform_mat[3][3]; - static const float identity_mat[3][3] = {{1.0, 0.0, 0.0}, - {0.0, 1.0, 0.0}, - {0.0, 0.0, 1.0}}; - GLfloat stop_colors_st[LINEAR_SMALL_STOPS*4]; - GLfloat n_stops_st[LINEAR_SMALL_STOPS]; - - GLint transform_mat_uniform_location = 0; - GLint n_stop_uniform_location = 0; - GLint stops_uniform_location = 0; - GLint stop0_uniform_location = 0; - GLint stop1_uniform_location = 0; - GLint stop2_uniform_location = 0; - GLint stop3_uniform_location = 0; - GLint stop4_uniform_location = 0; - GLint stop5_uniform_location = 0; - GLint stop6_uniform_location = 0; - GLint stop7_uniform_location = 0; - GLint stop_colors_uniform_location = 0; - GLint stop_color0_uniform_location = 0; - GLint stop_color1_uniform_location = 0; - GLint stop_color2_uniform_location = 0; - GLint stop_color3_uniform_location = 0; - GLint stop_color4_uniform_location = 0; - GLint stop_color5_uniform_location = 0; - GLint stop_color6_uniform_location = 0; - GLint stop_color7_uniform_location = 0; - GLint pt_slope_uniform_location = 0; - GLint repeat_type_uniform_location = 0; - GLint hor_ver_uniform_location = 0; - GLint cos_val_uniform_location = 0; - GLint p1_distance_uniform_location = 0; - GLint pt_distance_uniform_location = 0; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - /* Create a pixmap with VBO. */ - pixmap = glamor_create_pixmap(screen, - width, height, - PIXMAN_FORMAT_DEPTH(format), - 0); - - if (!pixmap) - goto GRADIENT_FAIL; - - dst_picture = CreatePicture(0, &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), format), - 0, 0, serverClient, &error); - - /* Release the reference, picture will hold the last one. */ - glamor_destroy_pixmap(pixmap); - - if (!dst_picture) - goto GRADIENT_FAIL; - - ValidatePicture(dst_picture); - - stops_count = src_picture->pSourcePict->linear.nstops + 2; - - /* Because the max value of nstops is unkown, so create a program - when nstops > LINEAR_LARGE_STOPS.*/ - if (stops_count <= LINEAR_SMALL_STOPS) { - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][0]; - } else if (stops_count <= LINEAR_LARGE_STOPS) { - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][1]; - } else { - _glamor_create_linear_gradient_program(screen, - src_picture->pSourcePict->linear.nstops + 2, 1); - gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]; - } - - /* Bind all the uniform vars .*/ - n_stop_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "n_stop"); - pt_slope_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "pt_slope"); - repeat_type_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); - hor_ver_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "hor_ver"); - transform_mat_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "transform_mat"); - cos_val_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "cos_val"); - p1_distance_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "p1_distance"); - pt_distance_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "pt_distance"); - - if (src_picture->pSourcePict->linear.nstops + 2 <= LINEAR_SMALL_STOPS) { - stop0_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop0"); - stop1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop1"); - stop2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop2"); - stop3_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop3"); - stop4_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop4"); - stop5_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop5"); - stop6_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop6"); - stop7_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop7"); - - stop_color0_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color0"); - stop_color1_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color1"); - stop_color2_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color2"); - stop_color3_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color3"); - stop_color4_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color4"); - stop_color5_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color5"); - stop_color6_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color6"); - stop_color7_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_color7"); - } else { - stops_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stops"); - stop_colors_uniform_location = - dispatch->glGetUniformLocation(gradient_prog, "stop_colors"); - } - - dispatch->glUseProgram(gradient_prog); - - dispatch->glUniform1i(repeat_type_uniform_location, src_picture->repeatType); - - /* set the transform matrix. */ - if (src_picture->transform) { - _glamor_gradient_convert_trans_matrix(src_picture->transform, - transform_mat, - width, height, 1); - dispatch->glUniformMatrix3fv(transform_mat_uniform_location, - 1, 1, &transform_mat[0][0]); - } else { - dispatch->glUniformMatrix3fv(transform_mat_uniform_location, - 1, 1, &identity_mat[0][0]); - } - - if (!_glamor_gradient_set_pixmap_destination(screen, glamor_priv, dst_picture, - &xscale, &yscale, x_source, y_source, - vertices, tex_vertices, 1)) - goto GRADIENT_FAIL; - - /* Normalize the PTs. */ - glamor_set_normalize_pt(xscale, yscale, - pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.x), - pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.y), - glamor_priv->yInverted, - pt1); - DEBUGF("pt1:(%f, %f) ---> (%f %f)\n", pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.x), - pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.y), pt1[0], pt1[1]); - - glamor_set_normalize_pt(xscale, yscale, - pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.x), - pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.y), - glamor_priv->yInverted, - pt2); - DEBUGF("pt2:(%f, %f) ---> (%f %f)\n", pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.x), - pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.y), pt2[0], pt2[1]); - - /* Set all the stops and colors to shader. */ - if (stops_count > LINEAR_SMALL_STOPS) { - stop_colors = malloc(4 * stops_count * sizeof(float)); - if (stop_colors == NULL) { - ErrorF("Failed to allocate stop_colors memory.\n"); - goto GRADIENT_FAIL; - } - - n_stops = malloc(stops_count * sizeof(float)); - if (n_stops == NULL) { - ErrorF("Failed to allocate n_stops memory.\n"); - goto GRADIENT_FAIL; - } - } else { - stop_colors = stop_colors_st; - n_stops = n_stops_st; - } - - count = _glamor_gradient_set_stops(src_picture, &src_picture->pSourcePict->gradient, - stop_colors, n_stops); - - if (src_picture->pSourcePict->linear.nstops + 2 <= LINEAR_SMALL_STOPS) { - int j = 0; - dispatch->glUniform4f(stop_color0_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color1_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color2_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color3_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color4_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color5_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color6_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - j++; - dispatch->glUniform4f(stop_color7_uniform_location, - stop_colors[4*j+0], stop_colors[4*j+1], - stop_colors[4*j+2], stop_colors[4*j+3]); - - j = 0; - dispatch->glUniform1f(stop0_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop1_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop2_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop3_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop4_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop5_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop6_uniform_location, n_stops[j++]); - dispatch->glUniform1f(stop7_uniform_location, n_stops[j++]); - - dispatch->glUniform1i(n_stop_uniform_location, count); - } else { - dispatch->glUniform4fv(stop_colors_uniform_location, count, stop_colors); - dispatch->glUniform1fv(stops_uniform_location, count, n_stops); - dispatch->glUniform1i(n_stop_uniform_location, count); - } - - if (src_picture->pSourcePict->linear.p2.y == - src_picture->pSourcePict->linear.p1.y) { // The horizontal case. - dispatch->glUniform1i(hor_ver_uniform_location, 1); - DEBUGF("p1.y: %f, p2.y: %f, enter the horizontal case\n", - pt1[1], pt2[1]); - - p1_distance = pt1[0]; - pt_distance = (pt2[0] - p1_distance); - dispatch->glUniform1f(p1_distance_uniform_location, p1_distance); - dispatch->glUniform1f(pt_distance_uniform_location, pt_distance); - } else { - /* The slope need to compute here. In shader, the viewport set will change - the orginal slope and the slope which is vertical to it will not be correct.*/ - slope = - (float)(src_picture->pSourcePict->linear.p2.x - - src_picture->pSourcePict->linear.p1.x) / - (float)(src_picture->pSourcePict->linear.p2.y - - src_picture->pSourcePict->linear.p1.y); - slope = slope * yscale / xscale; - dispatch->glUniform1f(pt_slope_uniform_location, slope); - dispatch->glUniform1i(hor_ver_uniform_location, 0); - - cos_val = sqrt(1.0 / (slope * slope + 1.0)); - dispatch->glUniform1f(cos_val_uniform_location, cos_val); - - p1_distance = (pt1[1] - pt1[0] * slope) * cos_val; - pt_distance = (pt2[1] - pt2[0] * slope) * cos_val - p1_distance; - dispatch->glUniform1f(p1_distance_uniform_location, p1_distance); - dispatch->glUniform1f(pt_distance_uniform_location, pt_distance); - } - - /* Now rendering. */ - dispatch->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); - - /* Do the clear logic.*/ - if (stops_count > LINEAR_SMALL_STOPS) { - free(n_stops); - free(stop_colors); - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - - glamor_put_dispatch(glamor_priv); - return dst_picture; - -GRADIENT_FAIL: - if (dst_picture) { - FreePicture(dst_picture, 0); - } - - if (stops_count > LINEAR_SMALL_STOPS) { - if (n_stops) - free(n_stops); - if (stop_colors) - free(stop_colors); - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - return NULL; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + PicturePtr dst_picture = NULL; + PixmapPtr pixmap = NULL; + GLint gradient_prog = 0; + int error; + float pt_distance; + float p1_distance; + GLfloat cos_val; + float tex_vertices[8]; + int stops_count = 0; + GLfloat *stop_colors = NULL; + GLfloat *n_stops = NULL; + int count = 0; + float slope; + GLfloat xscale, yscale; + GLfloat pt1[2], pt2[2]; + float vertices[8]; + float transform_mat[3][3]; + static const float identity_mat[3][3] = { {1.0, 0.0, 0.0}, + {0.0, 1.0, 0.0}, + {0.0, 0.0, 1.0} + }; + GLfloat stop_colors_st[LINEAR_SMALL_STOPS * 4]; + GLfloat n_stops_st[LINEAR_SMALL_STOPS]; + + GLint transform_mat_uniform_location = 0; + GLint n_stop_uniform_location = 0; + GLint stops_uniform_location = 0; + GLint stop0_uniform_location = 0; + GLint stop1_uniform_location = 0; + GLint stop2_uniform_location = 0; + GLint stop3_uniform_location = 0; + GLint stop4_uniform_location = 0; + GLint stop5_uniform_location = 0; + GLint stop6_uniform_location = 0; + GLint stop7_uniform_location = 0; + GLint stop_colors_uniform_location = 0; + GLint stop_color0_uniform_location = 0; + GLint stop_color1_uniform_location = 0; + GLint stop_color2_uniform_location = 0; + GLint stop_color3_uniform_location = 0; + GLint stop_color4_uniform_location = 0; + GLint stop_color5_uniform_location = 0; + GLint stop_color6_uniform_location = 0; + GLint stop_color7_uniform_location = 0; + GLint pt_slope_uniform_location = 0; + GLint repeat_type_uniform_location = 0; + GLint hor_ver_uniform_location = 0; + GLint cos_val_uniform_location = 0; + GLint p1_distance_uniform_location = 0; + GLint pt_distance_uniform_location = 0; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + /* Create a pixmap with VBO. */ + pixmap = glamor_create_pixmap(screen, + width, height, + PIXMAN_FORMAT_DEPTH(format), 0); + + if (!pixmap) + goto GRADIENT_FAIL; + + dst_picture = CreatePicture(0, &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH(format), + format), 0, 0, serverClient, + &error); + + /* Release the reference, picture will hold the last one. */ + glamor_destroy_pixmap(pixmap); + + if (!dst_picture) + goto GRADIENT_FAIL; + + ValidatePicture(dst_picture); + + stops_count = src_picture->pSourcePict->linear.nstops + 2; + + /* Because the max value of nstops is unkown, so create a program + when nstops > LINEAR_LARGE_STOPS. */ + if (stops_count <= LINEAR_SMALL_STOPS) { + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][0]; + } + else if (stops_count <= LINEAR_LARGE_STOPS) { + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][1]; + } + else { + _glamor_create_linear_gradient_program(screen, + src_picture->pSourcePict->linear. + nstops + 2, 1); + gradient_prog = glamor_priv->gradient_prog[SHADER_GRADIENT_LINEAR][2]; + } + + /* Bind all the uniform vars . */ + n_stop_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "n_stop"); + pt_slope_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "pt_slope"); + repeat_type_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "repeat_type"); + hor_ver_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "hor_ver"); + transform_mat_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "transform_mat"); + cos_val_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "cos_val"); + p1_distance_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "p1_distance"); + pt_distance_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "pt_distance"); + + if (src_picture->pSourcePict->linear.nstops + 2 <= LINEAR_SMALL_STOPS) { + stop0_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop0"); + stop1_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop1"); + stop2_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop2"); + stop3_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop3"); + stop4_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop4"); + stop5_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop5"); + stop6_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop6"); + stop7_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop7"); + + stop_color0_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color0"); + stop_color1_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color1"); + stop_color2_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color2"); + stop_color3_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color3"); + stop_color4_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color4"); + stop_color5_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color5"); + stop_color6_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color6"); + stop_color7_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_color7"); + } + else { + stops_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stops"); + stop_colors_uniform_location = + dispatch->glGetUniformLocation(gradient_prog, "stop_colors"); + } + + dispatch->glUseProgram(gradient_prog); + + dispatch->glUniform1i(repeat_type_uniform_location, + src_picture->repeatType); + + /* set the transform matrix. */ + if (src_picture->transform) { + _glamor_gradient_convert_trans_matrix(src_picture->transform, + transform_mat, width, height, 1); + dispatch->glUniformMatrix3fv(transform_mat_uniform_location, + 1, 1, &transform_mat[0][0]); + } + else { + dispatch->glUniformMatrix3fv(transform_mat_uniform_location, + 1, 1, &identity_mat[0][0]); + } + + if (!_glamor_gradient_set_pixmap_destination + (screen, glamor_priv, dst_picture, &xscale, &yscale, x_source, y_source, + vertices, tex_vertices, 1)) + goto GRADIENT_FAIL; + + /* Normalize the PTs. */ + glamor_set_normalize_pt(xscale, yscale, + pixman_fixed_to_double(src_picture->pSourcePict-> + linear.p1.x), + pixman_fixed_to_double(src_picture->pSourcePict-> + linear.p1.y), + glamor_priv->yInverted, pt1); + DEBUGF("pt1:(%f, %f) ---> (%f %f)\n", + pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.x), + pixman_fixed_to_double(src_picture->pSourcePict->linear.p1.y), + pt1[0], pt1[1]); + + glamor_set_normalize_pt(xscale, yscale, + pixman_fixed_to_double(src_picture->pSourcePict-> + linear.p2.x), + pixman_fixed_to_double(src_picture->pSourcePict-> + linear.p2.y), + glamor_priv->yInverted, pt2); + DEBUGF("pt2:(%f, %f) ---> (%f %f)\n", + pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.x), + pixman_fixed_to_double(src_picture->pSourcePict->linear.p2.y), + pt2[0], pt2[1]); + + /* Set all the stops and colors to shader. */ + if (stops_count > LINEAR_SMALL_STOPS) { + stop_colors = malloc(4 * stops_count * sizeof(float)); + if (stop_colors == NULL) { + ErrorF("Failed to allocate stop_colors memory.\n"); + goto GRADIENT_FAIL; + } + + n_stops = malloc(stops_count * sizeof(float)); + if (n_stops == NULL) { + ErrorF("Failed to allocate n_stops memory.\n"); + goto GRADIENT_FAIL; + } + } + else { + stop_colors = stop_colors_st; + n_stops = n_stops_st; + } + + count = + _glamor_gradient_set_stops(src_picture, + &src_picture->pSourcePict->gradient, + stop_colors, n_stops); + + if (src_picture->pSourcePict->linear.nstops + 2 <= LINEAR_SMALL_STOPS) { + int j = 0; + + dispatch->glUniform4f(stop_color0_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color1_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color2_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color3_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color4_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color5_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color6_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + j++; + dispatch->glUniform4f(stop_color7_uniform_location, + stop_colors[4 * j + 0], stop_colors[4 * j + 1], + stop_colors[4 * j + 2], stop_colors[4 * j + 3]); + + j = 0; + dispatch->glUniform1f(stop0_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop1_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop2_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop3_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop4_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop5_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop6_uniform_location, n_stops[j++]); + dispatch->glUniform1f(stop7_uniform_location, n_stops[j++]); + + dispatch->glUniform1i(n_stop_uniform_location, count); + } + else { + dispatch->glUniform4fv(stop_colors_uniform_location, count, + stop_colors); + dispatch->glUniform1fv(stops_uniform_location, count, n_stops); + dispatch->glUniform1i(n_stop_uniform_location, count); + } + + if (src_picture->pSourcePict->linear.p2.y == src_picture->pSourcePict->linear.p1.y) { // The horizontal case. + dispatch->glUniform1i(hor_ver_uniform_location, 1); + DEBUGF("p1.y: %f, p2.y: %f, enter the horizontal case\n", + pt1[1], pt2[1]); + + p1_distance = pt1[0]; + pt_distance = (pt2[0] - p1_distance); + dispatch->glUniform1f(p1_distance_uniform_location, p1_distance); + dispatch->glUniform1f(pt_distance_uniform_location, pt_distance); + } + else { + /* The slope need to compute here. In shader, the viewport set will change + the orginal slope and the slope which is vertical to it will not be correct. */ + slope = -(float) (src_picture->pSourcePict->linear.p2.x + - src_picture->pSourcePict->linear.p1.x) / + (float) (src_picture->pSourcePict->linear.p2.y + - src_picture->pSourcePict->linear.p1.y); + slope = slope * yscale / xscale; + dispatch->glUniform1f(pt_slope_uniform_location, slope); + dispatch->glUniform1i(hor_ver_uniform_location, 0); + + cos_val = sqrt(1.0 / (slope * slope + 1.0)); + dispatch->glUniform1f(cos_val_uniform_location, cos_val); + + p1_distance = (pt1[1] - pt1[0] * slope) * cos_val; + pt_distance = (pt2[1] - pt2[0] * slope) * cos_val - p1_distance; + dispatch->glUniform1f(p1_distance_uniform_location, p1_distance); + dispatch->glUniform1f(pt_distance_uniform_location, pt_distance); + } + + /* Now rendering. */ + dispatch->glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); + + /* Do the clear logic. */ + if (stops_count > LINEAR_SMALL_STOPS) { + free(n_stops); + free(stop_colors); + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + + glamor_put_dispatch(glamor_priv); + return dst_picture; + + GRADIENT_FAIL: + if (dst_picture) { + FreePicture(dst_picture, 0); + } + + if (stops_count > LINEAR_SMALL_STOPS) { + if (n_stops) + free(n_stops); + if (stop_colors) + free(stop_colors); + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + return NULL; } -#endif /* End of GLAMOR_GRADIENT_SHADER */ +#endif /* End of GLAMOR_GRADIENT_SHADER */ -#endif /* End of RENDER */ +#endif /* End of RENDER */ diff --git a/xorg-server/glamor/glamor_largepixmap.c b/xorg-server/glamor/glamor_largepixmap.c index 91ee8f2df..b8c064038 100644 --- a/xorg-server/glamor/glamor_largepixmap.c +++ b/xorg-server/glamor/glamor_largepixmap.c @@ -17,117 +17,117 @@ static glamor_pixmap_clipped_regions * __glamor_compute_clipped_regions(int block_w, - int block_h, - int block_stride, - int x, int y, - int w, int h, - RegionPtr region, - int *n_region, - int reverse, - int upsidedown) + int block_h, + int block_stride, + int x, int y, + int w, int h, + RegionPtr region, + int *n_region, int reverse, int upsidedown) { - glamor_pixmap_clipped_regions * clipped_regions; - BoxPtr extent; - int start_x, start_y, end_x, end_y; - int start_block_x, start_block_y; - int end_block_x, end_block_y; - int loop_start_block_x, loop_start_block_y; - int loop_end_block_x, loop_end_block_y; - int loop_block_stride; - int i, j, delta_i, delta_j; - RegionRec temp_region; - RegionPtr current_region; - int block_idx; - int k = 0; - int temp_block_idx; - - extent = RegionExtents(region); - start_x = MAX(x, extent->x1); - start_y = MAX(y, extent->y1); - end_x = MIN(x + w, extent->x2); - end_y = MIN(y + h, extent->y2); - - DEBUGF("start compute clipped regions:\n"); - DEBUGF("block w %d h %d x %d y %d w %d h %d, block_stride %d \n", - block_w, block_h, x, y, w, h, block_stride); - DEBUGRegionPrint(region); - - DEBUGF("start_x %d start_y %d end_x %d end_y %d \n", start_x, start_y, end_x, end_y); - - if (start_x >= end_x || start_y >= end_y) { - *n_region = 0; - return NULL; - } - - start_block_x = (start_x - x)/ block_w; - start_block_y = (start_y - y)/ block_h; - end_block_x = (end_x - x)/ block_w; - end_block_y = (end_y - y)/ block_h; - - clipped_regions = calloc((end_block_x - start_block_x + 1) - * (end_block_y - start_block_y + 1), - sizeof(*clipped_regions)); - - - DEBUGF("startx %d starty %d endx %d endy %d \n", - start_x, start_y, end_x, end_y); - DEBUGF("start_block_x %d end_block_x %d \n", start_block_x, end_block_x); - DEBUGF("start_block_y %d end_block_y %d \n", start_block_y, end_block_y); - - if (!reverse) { - loop_start_block_x = start_block_x; - loop_end_block_x = end_block_x + 1; - delta_i = 1; - } else { - loop_start_block_x = end_block_x; - loop_end_block_x = start_block_x - 1; - delta_i = -1; - } - - if (!upsidedown) { - loop_start_block_y = start_block_y; - loop_end_block_y = end_block_y + 1; - delta_j = 1; - } else { - loop_start_block_y = end_block_y; - loop_end_block_y = start_block_y - 1; - delta_j = -1; - } - - loop_block_stride = delta_j * block_stride; - block_idx = (loop_start_block_y - delta_j) * block_stride; - - for(j = loop_start_block_y; j != loop_end_block_y; j += delta_j) - { - block_idx += loop_block_stride; - temp_block_idx = block_idx + loop_start_block_x; - for(i = loop_start_block_x; - i != loop_end_block_x; i += delta_i, temp_block_idx += delta_i) - { - BoxRec temp_box; - temp_box.x1 = x + i * block_w; - temp_box.y1 = y + j * block_h; - temp_box.x2 = MIN(temp_box.x1 + block_w, end_x); - temp_box.y2 = MIN(temp_box.y1 + block_h, end_y); - RegionInitBoxes(&temp_region, &temp_box, 1); - DEBUGF("block idx %d \n",temp_block_idx); - DEBUGRegionPrint(&temp_region); - current_region = RegionCreate(NULL, 4); - RegionIntersect(current_region, &temp_region, region); - DEBUGF("i %d j %d region: \n",i ,j); - DEBUGRegionPrint(current_region); - if (RegionNumRects(current_region)) { - clipped_regions[k].region = current_region; - clipped_regions[k].block_idx = temp_block_idx; - k++; - } else - RegionDestroy(current_region); - RegionUninit(&temp_region); - } - } - - *n_region = k; - return clipped_regions; + glamor_pixmap_clipped_regions *clipped_regions; + BoxPtr extent; + int start_x, start_y, end_x, end_y; + int start_block_x, start_block_y; + int end_block_x, end_block_y; + int loop_start_block_x, loop_start_block_y; + int loop_end_block_x, loop_end_block_y; + int loop_block_stride; + int i, j, delta_i, delta_j; + RegionRec temp_region; + RegionPtr current_region; + int block_idx; + int k = 0; + int temp_block_idx; + + extent = RegionExtents(region); + start_x = MAX(x, extent->x1); + start_y = MAX(y, extent->y1); + end_x = MIN(x + w, extent->x2); + end_y = MIN(y + h, extent->y2); + + DEBUGF("start compute clipped regions:\n"); + DEBUGF("block w %d h %d x %d y %d w %d h %d, block_stride %d \n", + block_w, block_h, x, y, w, h, block_stride); + DEBUGRegionPrint(region); + + DEBUGF("start_x %d start_y %d end_x %d end_y %d \n", start_x, start_y, + end_x, end_y); + + if (start_x >= end_x || start_y >= end_y) { + *n_region = 0; + return NULL; + } + + start_block_x = (start_x - x) / block_w; + start_block_y = (start_y - y) / block_h; + end_block_x = (end_x - x) / block_w; + end_block_y = (end_y - y) / block_h; + + clipped_regions = calloc((end_block_x - start_block_x + 1) + * (end_block_y - start_block_y + 1), + sizeof(*clipped_regions)); + + DEBUGF("startx %d starty %d endx %d endy %d \n", + start_x, start_y, end_x, end_y); + DEBUGF("start_block_x %d end_block_x %d \n", start_block_x, end_block_x); + DEBUGF("start_block_y %d end_block_y %d \n", start_block_y, end_block_y); + + if (!reverse) { + loop_start_block_x = start_block_x; + loop_end_block_x = end_block_x + 1; + delta_i = 1; + } + else { + loop_start_block_x = end_block_x; + loop_end_block_x = start_block_x - 1; + delta_i = -1; + } + + if (!upsidedown) { + loop_start_block_y = start_block_y; + loop_end_block_y = end_block_y + 1; + delta_j = 1; + } + else { + loop_start_block_y = end_block_y; + loop_end_block_y = start_block_y - 1; + delta_j = -1; + } + + loop_block_stride = delta_j * block_stride; + block_idx = (loop_start_block_y - delta_j) * block_stride; + + for (j = loop_start_block_y; j != loop_end_block_y; j += delta_j) { + block_idx += loop_block_stride; + temp_block_idx = block_idx + loop_start_block_x; + for (i = loop_start_block_x; + i != loop_end_block_x; i += delta_i, temp_block_idx += delta_i) { + BoxRec temp_box; + + temp_box.x1 = x + i * block_w; + temp_box.y1 = y + j * block_h; + temp_box.x2 = MIN(temp_box.x1 + block_w, end_x); + temp_box.y2 = MIN(temp_box.y1 + block_h, end_y); + RegionInitBoxes(&temp_region, &temp_box, 1); + DEBUGF("block idx %d \n", temp_block_idx); + DEBUGRegionPrint(&temp_region); + current_region = RegionCreate(NULL, 4); + RegionIntersect(current_region, &temp_region, region); + DEBUGF("i %d j %d region: \n", i, j); + DEBUGRegionPrint(current_region); + if (RegionNumRects(current_region)) { + clipped_regions[k].region = current_region; + clipped_regions[k].block_idx = temp_block_idx; + k++; + } + else + RegionDestroy(current_region); + RegionUninit(&temp_region); + } + } + + *n_region = k; + return clipped_regions; } /** @@ -145,82 +145,87 @@ __glamor_compute_clipped_regions(int block_w, glamor_pixmap_clipped_regions * glamor_compute_clipped_regions_ext(glamor_pixmap_private *pixmap_priv, - RegionPtr region, - int *n_region, - int inner_block_w, int inner_block_h, - int reverse, int upsidedown) + RegionPtr region, + int *n_region, + int inner_block_w, int inner_block_h, + int reverse, int upsidedown) { - glamor_pixmap_clipped_regions * clipped_regions, *inner_regions, *result_regions; - int i, j, x, y, k, inner_n_regions; - int width, height; - glamor_pixmap_private_large_t *priv; - priv = &pixmap_priv->large; - - DEBUGF("ext called \n"); - - if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { - clipped_regions = calloc(1, sizeof(*clipped_regions)); - if (clipped_regions == NULL) { - *n_region = 0; - return NULL; - } - clipped_regions[0].region = RegionCreate(NULL, 1); - clipped_regions[0].block_idx = 0; - RegionCopy(clipped_regions[0].region, region); - *n_region = 1; - priv->block_w = priv->base.pixmap->drawable.width; - priv->block_h = priv->base.pixmap->drawable.height; - priv->box_array = &priv->box; - priv->box.x1 = priv->box.y1 = 0; - priv->box.x2 = priv->block_w; - priv->box.y2 = priv->block_h; - } else { - clipped_regions = __glamor_compute_clipped_regions(priv->block_w, - priv->block_h, - priv->block_wcnt, - 0, 0, - priv->base.pixmap->drawable.width, - priv->base.pixmap->drawable.height, - region, n_region, reverse, upsidedown - ); - - if (clipped_regions == NULL) { - *n_region = 0; - return NULL; - } - } - if (inner_block_w >= priv->block_w - && inner_block_h >= priv->block_h) - return clipped_regions; - result_regions = calloc(*n_region - * ((priv->block_w + inner_block_w - 1)/inner_block_w) - * ((priv->block_h + inner_block_h - 1)/ inner_block_h), - sizeof(*result_regions)); - k = 0; - for(i = 0; i < *n_region; i++) - { - x = priv->box_array[clipped_regions[i].block_idx].x1; - y = priv->box_array[clipped_regions[i].block_idx].y1; - width = priv->box_array[clipped_regions[i].block_idx].x2 - x; - height = priv->box_array[clipped_regions[i].block_idx].y2 - y; - inner_regions = __glamor_compute_clipped_regions(inner_block_w, - inner_block_h, - 0, x, y, - width, - height, - clipped_regions[i].region, - &inner_n_regions, reverse, upsidedown); - for(j = 0; j < inner_n_regions; j++) - { - result_regions[k].region = inner_regions[j].region; - result_regions[k].block_idx = clipped_regions[i].block_idx; - k++; - } - free(inner_regions); - } - *n_region = k; - free(clipped_regions); - return result_regions; + glamor_pixmap_clipped_regions *clipped_regions, *inner_regions, + *result_regions; + int i, j, x, y, k, inner_n_regions; + int width, height; + glamor_pixmap_private_large_t *priv; + + priv = &pixmap_priv->large; + + DEBUGF("ext called \n"); + + if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + clipped_regions = calloc(1, sizeof(*clipped_regions)); + if (clipped_regions == NULL) { + *n_region = 0; + return NULL; + } + clipped_regions[0].region = RegionCreate(NULL, 1); + clipped_regions[0].block_idx = 0; + RegionCopy(clipped_regions[0].region, region); + *n_region = 1; + priv->block_w = priv->base.pixmap->drawable.width; + priv->block_h = priv->base.pixmap->drawable.height; + priv->box_array = &priv->box; + priv->box.x1 = priv->box.y1 = 0; + priv->box.x2 = priv->block_w; + priv->box.y2 = priv->block_h; + } + else { + clipped_regions = __glamor_compute_clipped_regions(priv->block_w, + priv->block_h, + priv->block_wcnt, + 0, 0, + priv->base.pixmap-> + drawable.width, + priv->base.pixmap-> + drawable.height, + region, n_region, + reverse, upsidedown); + + if (clipped_regions == NULL) { + *n_region = 0; + return NULL; + } + } + if (inner_block_w >= priv->block_w && inner_block_h >= priv->block_h) + return clipped_regions; + result_regions = calloc(*n_region + * ((priv->block_w + inner_block_w - 1) / + inner_block_w) + * ((priv->block_h + inner_block_h - 1) / + inner_block_h), sizeof(*result_regions)); + k = 0; + for (i = 0; i < *n_region; i++) { + x = priv->box_array[clipped_regions[i].block_idx].x1; + y = priv->box_array[clipped_regions[i].block_idx].y1; + width = priv->box_array[clipped_regions[i].block_idx].x2 - x; + height = priv->box_array[clipped_regions[i].block_idx].y2 - y; + inner_regions = __glamor_compute_clipped_regions(inner_block_w, + inner_block_h, + 0, x, y, + width, + height, + clipped_regions[i]. + region, + &inner_n_regions, + reverse, upsidedown); + for (j = 0; j < inner_n_regions; j++) { + result_regions[k].region = inner_regions[j].region; + result_regions[k].block_idx = clipped_regions[i].block_idx; + k++; + } + free(inner_regions); + } + *n_region = k; + free(clipped_regions); + return result_regions; } /* @@ -232,35 +237,36 @@ glamor_compute_clipped_regions_ext(glamor_pixmap_private *pixmap_priv, static RegionPtr _glamor_convert_pad_region(RegionPtr region, int w, int h) { - RegionPtr pad_region; - int nrect; - BoxPtr box; - int overlap; - - nrect = RegionNumRects(region); - box = RegionRects(region); - pad_region = RegionCreate(NULL, 4); - if (pad_region == NULL) - return NULL; - while(nrect--) { - BoxRec pad_box; - RegionRec temp_region; - pad_box = *box; - if (pad_box.x1 < 0 && pad_box.x2 <= 0) - pad_box.x2 = 1; - else if (pad_box.x1 >= w && pad_box.x2 > w) - pad_box.x1 = w - 1; - if (pad_box.y1 < 0 && pad_box.y2 <=0) - pad_box.y2 = 1; - else if (pad_box.y1 >= h && pad_box.y2 > h) - pad_box.y1 = h - 1; - RegionInitBoxes(&temp_region, &pad_box, 1); - RegionAppend(pad_region, &temp_region); - RegionUninit(&temp_region); - box++; - } - RegionValidate(pad_region, &overlap); - return pad_region; + RegionPtr pad_region; + int nrect; + BoxPtr box; + int overlap; + + nrect = RegionNumRects(region); + box = RegionRects(region); + pad_region = RegionCreate(NULL, 4); + if (pad_region == NULL) + return NULL; + while (nrect--) { + BoxRec pad_box; + RegionRec temp_region; + + pad_box = *box; + if (pad_box.x1 < 0 && pad_box.x2 <= 0) + pad_box.x2 = 1; + else if (pad_box.x1 >= w && pad_box.x2 > w) + pad_box.x1 = w - 1; + if (pad_box.y1 < 0 && pad_box.y2 <= 0) + pad_box.y2 = 1; + else if (pad_box.y1 >= h && pad_box.y2 > h) + pad_box.y1 = h - 1; + RegionInitBoxes(&temp_region, &pad_box, 1); + RegionAppend(pad_region, &temp_region); + RegionUninit(&temp_region); + box++; + } + RegionValidate(pad_region, &overlap); + return pad_region; } /* @@ -278,32 +284,35 @@ _glamor_convert_pad_region(RegionPtr region, int w, int h) static void _glamor_largepixmap_reflect_fixup(short *xy1, short *xy2, int wh) { - int odd1, odd2; - int c1, c2; - - if (*xy2 - *xy1 > wh) { - *xy1 = 0; - *xy2 = wh; - return; - } - modulus(*xy1, wh, c1); - odd1 = ((*xy1 - c1) / wh) & 0x1; - modulus(*xy2, wh, c2); - odd2 = ((*xy2 - c2) / wh) & 0x1; - - if (odd1 && odd2) { - *xy1 = wh - c2; - *xy2 = wh - c1; - } else if (odd1 && !odd2) { - *xy1 = 0; - *xy2 = MAX(c2, wh - c1); - } else if (!odd1 && odd2) { - *xy2 = wh; - *xy1 = MIN(c1, wh - c2); - } else { - *xy1 = c1; - *xy2 = c2; - } + int odd1, odd2; + int c1, c2; + + if (*xy2 - *xy1 > wh) { + *xy1 = 0; + *xy2 = wh; + return; + } + modulus(*xy1, wh, c1); + odd1 = ((*xy1 - c1) / wh) & 0x1; + modulus(*xy2, wh, c2); + odd2 = ((*xy2 - c2) / wh) & 0x1; + + if (odd1 && odd2) { + *xy1 = wh - c2; + *xy2 = wh - c1; + } + else if (odd1 && !odd2) { + *xy1 = 0; + *xy2 = MAX(c2, wh - c1); + } + else if (!odd1 && odd2) { + *xy2 = wh; + *xy1 = MIN(c1, wh - c2); + } + else { + *xy1 = c1; + *xy2 = c2; + } } /** @@ -317,366 +326,404 @@ _glamor_largepixmap_reflect_fixup(short *xy1, short *xy2, int wh) */ static glamor_pixmap_clipped_regions * _glamor_compute_clipped_regions(glamor_pixmap_private *pixmap_priv, - RegionPtr region, int *n_region, - int repeat_type, int is_transform, - int reverse, int upsidedown) + RegionPtr region, int *n_region, + int repeat_type, int is_transform, + int reverse, int upsidedown) { - glamor_pixmap_clipped_regions * clipped_regions; - BoxPtr extent; - int i, j; - RegionPtr current_region; - int pixmap_width, pixmap_height; - int m; - BoxRec repeat_box; - RegionRec repeat_region; - int right_shift = 0; - int down_shift = 0; - int x_center_shift = 0, y_center_shift = 0; - glamor_pixmap_private_large_t *priv; - priv = &pixmap_priv->large; - - DEBUGRegionPrint(region); - if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { - clipped_regions = calloc(1, sizeof(*clipped_regions)); - clipped_regions[0].region = RegionCreate(NULL, 1); - clipped_regions[0].block_idx = 0; - RegionCopy(clipped_regions[0].region, region); - *n_region = 1; - return clipped_regions; - } - - pixmap_width = priv->base.pixmap->drawable.width; - pixmap_height = priv->base.pixmap->drawable.height; - if (repeat_type == 0 || repeat_type == RepeatPad) { - RegionPtr saved_region = NULL; - if (repeat_type == RepeatPad) { - saved_region = region; - region = _glamor_convert_pad_region(saved_region, pixmap_width, pixmap_height); - if (region == NULL) { - *n_region = 0; - return NULL; - } - } - clipped_regions = __glamor_compute_clipped_regions(priv->block_w, - priv->block_h, - priv->block_wcnt, - 0, 0, - priv->base.pixmap->drawable.width, - priv->base.pixmap->drawable.height, - region, n_region, reverse, upsidedown - ); - if (saved_region) - RegionDestroy(region); - return clipped_regions; - } - extent = RegionExtents(region); - - x_center_shift = extent->x1 / pixmap_width; - if (x_center_shift < 0) - x_center_shift--; - if (abs(x_center_shift) & 1) - x_center_shift++; - y_center_shift = extent->y1 / pixmap_height; - if (y_center_shift < 0) - y_center_shift--; - if (abs(y_center_shift) & 1) - y_center_shift++; - - if (extent->x1 < 0) - right_shift = ((-extent->x1 + pixmap_width - 1) / pixmap_width ); - if (extent->y1 < 0) - down_shift = ((-extent->y1 + pixmap_height - 1) / pixmap_height ); - - if (right_shift != 0 || down_shift != 0) { - if (repeat_type == RepeatReflect) { - right_shift = (right_shift + 1)&~1; - down_shift = (down_shift + 1)&~1; - } - RegionTranslate(region, right_shift * pixmap_width, down_shift * pixmap_height); - } - - extent = RegionExtents(region); - /* Tile a large pixmap to another large pixmap. - * We can't use the target large pixmap as the - * loop variable, instead we need to loop for all - * the blocks in the tile pixmap. - * - * simulate repeat each single block to cover the - * target's blocks. Two special case: - * a block_wcnt == 1 or block_hcnt ==1, then we - * only need to loop one direction as the other - * direction is fully included in the first block. - * - * For the other cases, just need to start - * from a proper shiftx/shifty, and then increase - * y by tile_height each time to walk trhough the - * target block and then walk trhough the target - * at x direction by increate tile_width each time. - * - * This way, we can consolidate all the sub blocks - * of the target boxes into one tile source's block. - * - * */ - m = 0; - clipped_regions = calloc(priv->block_wcnt * priv->block_hcnt, - sizeof(*clipped_regions)); - if (clipped_regions == NULL) { - *n_region = 0; - return NULL; - } - if (right_shift != 0 || down_shift != 0) { - DEBUGF("region to be repeated shifted \n"); - DEBUGRegionPrint(region); - } - DEBUGF("repeat pixmap width %d height %d \n", pixmap_width, pixmap_height); - DEBUGF("extent x1 %d y1 %d x2 %d y2 %d \n", extent->x1, extent->y1, extent->x2, extent->y2); - for(j = 0; j < priv->block_hcnt; j++) - { - for(i = 0; i < priv->block_wcnt; i++) - { - int dx = pixmap_width; - int dy = pixmap_height; - int idx; - int shift_x; - int shift_y; - int saved_y1, saved_y2; - int x_idx = 0, y_idx = 0, saved_y_idx = 0; - RegionRec temp_region; - BoxRec reflect_repeat_box; - BoxPtr valid_repeat_box; - - shift_x = (extent->x1 / pixmap_width) * pixmap_width; - shift_y = (extent->y1 / pixmap_height) * pixmap_height; - idx = j * priv->block_wcnt + i; - if (repeat_type == RepeatReflect) { - x_idx = (extent->x1 / pixmap_width); - y_idx = (extent->y1 / pixmap_height); - } - - /* Construct a rect to clip the target region. */ - repeat_box.x1 = shift_x + priv->box_array[idx].x1; - repeat_box.y1 = shift_y + priv->box_array[idx].y1; - if (priv->block_wcnt == 1) { - repeat_box.x2 = extent->x2; - dx = extent->x2 - repeat_box.x1; - } else - repeat_box.x2 = shift_x + priv->box_array[idx].x2; - if (priv->block_hcnt == 1) { - repeat_box.y2 = extent->y2; - dy = extent->y2 - repeat_box.y1; - } else - repeat_box.y2 = shift_y + priv->box_array[idx].y2; - - current_region = RegionCreate(NULL, 4); - RegionInit(&temp_region, NULL, 4); - DEBUGF("init repeat box %d %d %d %d \n", - repeat_box.x1, repeat_box.y1, repeat_box.x2, repeat_box.y2); - - if (repeat_type == RepeatNormal) { - saved_y1 = repeat_box.y1; - saved_y2 = repeat_box.y2; - for(; repeat_box.x1 < extent->x2; - repeat_box.x1 += dx, repeat_box.x2 += dx) - { - repeat_box.y1 = saved_y1; - repeat_box.y2 = saved_y2; - for( repeat_box.y1 = saved_y1, repeat_box.y2 = saved_y2; - repeat_box.y1 < extent->y2; - repeat_box.y1 += dy, repeat_box.y2 += dy) - { - - RegionInitBoxes(&repeat_region, &repeat_box, 1); - DEBUGF("Start to clip repeat region: \n"); - DEBUGRegionPrint(&repeat_region); - RegionIntersect(&temp_region, &repeat_region, region); - DEBUGF("clip result:\n"); - DEBUGRegionPrint(&temp_region); - RegionAppend(current_region, &temp_region); - RegionUninit(&repeat_region); - } - } - } else if (repeat_type == RepeatReflect) { - saved_y1 = repeat_box.y1; - saved_y2 = repeat_box.y2; - saved_y_idx = y_idx; - for(; ; repeat_box.x1 += dx, repeat_box.x2 += dx) - { - repeat_box.y1 = saved_y1; - repeat_box.y2 = saved_y2; - y_idx = saved_y_idx; - reflect_repeat_box.x1 = (x_idx & 1) ? - ((2 * x_idx + 1) * dx - repeat_box.x2) : repeat_box.x1; - reflect_repeat_box.x2 = (x_idx & 1) ? - ((2 * x_idx + 1) * dx - repeat_box.x1) : repeat_box.x2; - valid_repeat_box = &reflect_repeat_box; - - if (valid_repeat_box->x1 >= extent->x2) - break; - for( repeat_box.y1 = saved_y1, repeat_box.y2 = saved_y2; - ; - repeat_box.y1 += dy, repeat_box.y2 += dy) - { - - DEBUGF("x_idx %d y_idx %d dx %d dy %d\n", x_idx, y_idx, dx, dy); - DEBUGF("repeat box %d %d %d %d \n", - repeat_box.x1, repeat_box.y1, repeat_box.x2, repeat_box.y2); - - if (priv->block_hcnt > 1) { - reflect_repeat_box.y1 = (y_idx & 1) ? - ((2 * y_idx + 1) * dy - repeat_box.y2) : repeat_box.y1; - reflect_repeat_box.y2 = (y_idx & 1) ? - ((2 * y_idx + 1) * dy - repeat_box.y1) : repeat_box.y2; - } else { - reflect_repeat_box.y1 = repeat_box.y1; - reflect_repeat_box.y2 = repeat_box.y2; - } - - DEBUGF("valid_repeat_box x1 %d y1 %d \n", - valid_repeat_box->x1, valid_repeat_box->y1); - if (valid_repeat_box->y1 >= extent->y2) - break; - RegionInitBoxes(&repeat_region, valid_repeat_box, 1); - DEBUGF("start to clip repeat[reflect] region: \n"); - DEBUGRegionPrint(&repeat_region); - RegionIntersect(&temp_region, &repeat_region, region); - DEBUGF("result:\n"); - DEBUGRegionPrint(&temp_region); - if (is_transform && RegionNumRects(&temp_region)) { - BoxRec temp_box; - BoxPtr temp_extent; - temp_extent = RegionExtents(&temp_region); - if (priv->block_wcnt > 1) { - if (x_idx & 1) { - temp_box.x1 = ((2 * x_idx + 1)*dx - temp_extent->x2); - temp_box.x2 = ((2 * x_idx + 1)*dx - temp_extent->x1); - } else { - temp_box.x1 = temp_extent->x1; - temp_box.x2 = temp_extent->x2; - } - modulus(temp_box.x1, pixmap_width, temp_box.x1); - modulus(temp_box.x2, pixmap_width, temp_box.x2); - if (temp_box.x2 == 0) temp_box.x2 = pixmap_width; - } else { - temp_box.x1 = temp_extent->x1; - temp_box.x2 = temp_extent->x2; - _glamor_largepixmap_reflect_fixup(&temp_box.x1, &temp_box.x2, pixmap_width); - } - - if (priv->block_hcnt > 1) { - if (y_idx & 1) { - temp_box.y1 = ((2 * y_idx + 1)*dy - temp_extent->y2); - temp_box.y2 = ((2 * y_idx + 1)*dy - temp_extent->y1); - } else { - temp_box.y1 = temp_extent->y1; - temp_box.y2 = temp_extent->y2; - } - - modulus(temp_box.y1, pixmap_height, temp_box.y1); - modulus(temp_box.y2, pixmap_height, temp_box.y2); - if (temp_box.y2 == 0) temp_box.y2 = pixmap_height; - } else { - temp_box.y1 = temp_extent->y1; - temp_box.y2 = temp_extent->y2; - _glamor_largepixmap_reflect_fixup(&temp_box.y1, &temp_box.y2, pixmap_height); - } - - RegionInitBoxes(&temp_region, &temp_box, 1); - RegionTranslate(&temp_region, x_center_shift * pixmap_width, y_center_shift * pixmap_height); - DEBUGF("for transform result:\n"); - DEBUGRegionPrint(&temp_region); - } - RegionAppend(current_region, &temp_region); - RegionUninit(&repeat_region); - y_idx++; - } - x_idx++; - } - } - DEBUGF("dx %d dy %d \n", dx, dy); - - if (RegionNumRects(current_region)) { - - if ((right_shift != 0 || down_shift != 0) && !(is_transform && repeat_type == RepeatReflect)) - RegionTranslate(current_region, - -right_shift * pixmap_width, - -down_shift * pixmap_height); - clipped_regions[m].region = current_region; - clipped_regions[m].block_idx = idx; - m++; - } else - RegionDestroy(current_region); - RegionUninit(&temp_region); - } - } - - if (right_shift != 0 || down_shift != 0) - RegionTranslate(region, -right_shift * pixmap_width, -down_shift * pixmap_height); - *n_region = m; - - return clipped_regions; + glamor_pixmap_clipped_regions *clipped_regions; + BoxPtr extent; + int i, j; + RegionPtr current_region; + int pixmap_width, pixmap_height; + int m; + BoxRec repeat_box; + RegionRec repeat_region; + int right_shift = 0; + int down_shift = 0; + int x_center_shift = 0, y_center_shift = 0; + glamor_pixmap_private_large_t *priv; + + priv = &pixmap_priv->large; + + DEBUGRegionPrint(region); + if (pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + clipped_regions = calloc(1, sizeof(*clipped_regions)); + clipped_regions[0].region = RegionCreate(NULL, 1); + clipped_regions[0].block_idx = 0; + RegionCopy(clipped_regions[0].region, region); + *n_region = 1; + return clipped_regions; + } + + pixmap_width = priv->base.pixmap->drawable.width; + pixmap_height = priv->base.pixmap->drawable.height; + if (repeat_type == 0 || repeat_type == RepeatPad) { + RegionPtr saved_region = NULL; + + if (repeat_type == RepeatPad) { + saved_region = region; + region = + _glamor_convert_pad_region(saved_region, pixmap_width, + pixmap_height); + if (region == NULL) { + *n_region = 0; + return NULL; + } + } + clipped_regions = __glamor_compute_clipped_regions(priv->block_w, + priv->block_h, + priv->block_wcnt, + 0, 0, + priv->base.pixmap-> + drawable.width, + priv->base.pixmap-> + drawable.height, + region, n_region, + reverse, upsidedown); + if (saved_region) + RegionDestroy(region); + return clipped_regions; + } + extent = RegionExtents(region); + + x_center_shift = extent->x1 / pixmap_width; + if (x_center_shift < 0) + x_center_shift--; + if (abs(x_center_shift) & 1) + x_center_shift++; + y_center_shift = extent->y1 / pixmap_height; + if (y_center_shift < 0) + y_center_shift--; + if (abs(y_center_shift) & 1) + y_center_shift++; + + if (extent->x1 < 0) + right_shift = ((-extent->x1 + pixmap_width - 1) / pixmap_width); + if (extent->y1 < 0) + down_shift = ((-extent->y1 + pixmap_height - 1) / pixmap_height); + + if (right_shift != 0 || down_shift != 0) { + if (repeat_type == RepeatReflect) { + right_shift = (right_shift + 1) & ~1; + down_shift = (down_shift + 1) & ~1; + } + RegionTranslate(region, right_shift * pixmap_width, + down_shift * pixmap_height); + } + + extent = RegionExtents(region); + /* Tile a large pixmap to another large pixmap. + * We can't use the target large pixmap as the + * loop variable, instead we need to loop for all + * the blocks in the tile pixmap. + * + * simulate repeat each single block to cover the + * target's blocks. Two special case: + * a block_wcnt == 1 or block_hcnt ==1, then we + * only need to loop one direction as the other + * direction is fully included in the first block. + * + * For the other cases, just need to start + * from a proper shiftx/shifty, and then increase + * y by tile_height each time to walk trhough the + * target block and then walk trhough the target + * at x direction by increate tile_width each time. + * + * This way, we can consolidate all the sub blocks + * of the target boxes into one tile source's block. + * + * */ + m = 0; + clipped_regions = calloc(priv->block_wcnt * priv->block_hcnt, + sizeof(*clipped_regions)); + if (clipped_regions == NULL) { + *n_region = 0; + return NULL; + } + if (right_shift != 0 || down_shift != 0) { + DEBUGF("region to be repeated shifted \n"); + DEBUGRegionPrint(region); + } + DEBUGF("repeat pixmap width %d height %d \n", pixmap_width, pixmap_height); + DEBUGF("extent x1 %d y1 %d x2 %d y2 %d \n", extent->x1, extent->y1, + extent->x2, extent->y2); + for (j = 0; j < priv->block_hcnt; j++) { + for (i = 0; i < priv->block_wcnt; i++) { + int dx = pixmap_width; + int dy = pixmap_height; + int idx; + int shift_x; + int shift_y; + int saved_y1, saved_y2; + int x_idx = 0, y_idx = 0, saved_y_idx = 0; + RegionRec temp_region; + BoxRec reflect_repeat_box; + BoxPtr valid_repeat_box; + + shift_x = (extent->x1 / pixmap_width) * pixmap_width; + shift_y = (extent->y1 / pixmap_height) * pixmap_height; + idx = j * priv->block_wcnt + i; + if (repeat_type == RepeatReflect) { + x_idx = (extent->x1 / pixmap_width); + y_idx = (extent->y1 / pixmap_height); + } + + /* Construct a rect to clip the target region. */ + repeat_box.x1 = shift_x + priv->box_array[idx].x1; + repeat_box.y1 = shift_y + priv->box_array[idx].y1; + if (priv->block_wcnt == 1) { + repeat_box.x2 = extent->x2; + dx = extent->x2 - repeat_box.x1; + } + else + repeat_box.x2 = shift_x + priv->box_array[idx].x2; + if (priv->block_hcnt == 1) { + repeat_box.y2 = extent->y2; + dy = extent->y2 - repeat_box.y1; + } + else + repeat_box.y2 = shift_y + priv->box_array[idx].y2; + + current_region = RegionCreate(NULL, 4); + RegionInit(&temp_region, NULL, 4); + DEBUGF("init repeat box %d %d %d %d \n", + repeat_box.x1, repeat_box.y1, repeat_box.x2, repeat_box.y2); + + if (repeat_type == RepeatNormal) { + saved_y1 = repeat_box.y1; + saved_y2 = repeat_box.y2; + for (; repeat_box.x1 < extent->x2; + repeat_box.x1 += dx, repeat_box.x2 += dx) { + repeat_box.y1 = saved_y1; + repeat_box.y2 = saved_y2; + for (repeat_box.y1 = saved_y1, repeat_box.y2 = saved_y2; + repeat_box.y1 < extent->y2; + repeat_box.y1 += dy, repeat_box.y2 += dy) { + + RegionInitBoxes(&repeat_region, &repeat_box, 1); + DEBUGF("Start to clip repeat region: \n"); + DEBUGRegionPrint(&repeat_region); + RegionIntersect(&temp_region, &repeat_region, region); + DEBUGF("clip result:\n"); + DEBUGRegionPrint(&temp_region); + RegionAppend(current_region, &temp_region); + RegionUninit(&repeat_region); + } + } + } + else if (repeat_type == RepeatReflect) { + saved_y1 = repeat_box.y1; + saved_y2 = repeat_box.y2; + saved_y_idx = y_idx; + for (;; repeat_box.x1 += dx, repeat_box.x2 += dx) { + repeat_box.y1 = saved_y1; + repeat_box.y2 = saved_y2; + y_idx = saved_y_idx; + reflect_repeat_box.x1 = (x_idx & 1) ? + ((2 * x_idx + 1) * dx - repeat_box.x2) : repeat_box.x1; + reflect_repeat_box.x2 = (x_idx & 1) ? + ((2 * x_idx + 1) * dx - repeat_box.x1) : repeat_box.x2; + valid_repeat_box = &reflect_repeat_box; + + if (valid_repeat_box->x1 >= extent->x2) + break; + for (repeat_box.y1 = saved_y1, repeat_box.y2 = saved_y2;; + repeat_box.y1 += dy, repeat_box.y2 += dy) { + + DEBUGF("x_idx %d y_idx %d dx %d dy %d\n", x_idx, y_idx, + dx, dy); + DEBUGF("repeat box %d %d %d %d \n", repeat_box.x1, + repeat_box.y1, repeat_box.x2, repeat_box.y2); + + if (priv->block_hcnt > 1) { + reflect_repeat_box.y1 = (y_idx & 1) ? + ((2 * y_idx + 1) * dy - + repeat_box.y2) : repeat_box.y1; + reflect_repeat_box.y2 = + (y_idx & 1) ? ((2 * y_idx + 1) * dy - + repeat_box.y1) : repeat_box.y2; + } + else { + reflect_repeat_box.y1 = repeat_box.y1; + reflect_repeat_box.y2 = repeat_box.y2; + } + + DEBUGF("valid_repeat_box x1 %d y1 %d \n", + valid_repeat_box->x1, valid_repeat_box->y1); + if (valid_repeat_box->y1 >= extent->y2) + break; + RegionInitBoxes(&repeat_region, valid_repeat_box, 1); + DEBUGF("start to clip repeat[reflect] region: \n"); + DEBUGRegionPrint(&repeat_region); + RegionIntersect(&temp_region, &repeat_region, region); + DEBUGF("result:\n"); + DEBUGRegionPrint(&temp_region); + if (is_transform && RegionNumRects(&temp_region)) { + BoxRec temp_box; + BoxPtr temp_extent; + + temp_extent = RegionExtents(&temp_region); + if (priv->block_wcnt > 1) { + if (x_idx & 1) { + temp_box.x1 = + ((2 * x_idx + 1) * dx - + temp_extent->x2); + temp_box.x2 = + ((2 * x_idx + 1) * dx - + temp_extent->x1); + } + else { + temp_box.x1 = temp_extent->x1; + temp_box.x2 = temp_extent->x2; + } + modulus(temp_box.x1, pixmap_width, temp_box.x1); + modulus(temp_box.x2, pixmap_width, temp_box.x2); + if (temp_box.x2 == 0) + temp_box.x2 = pixmap_width; + } + else { + temp_box.x1 = temp_extent->x1; + temp_box.x2 = temp_extent->x2; + _glamor_largepixmap_reflect_fixup(&temp_box.x1, + &temp_box.x2, + pixmap_width); + } + + if (priv->block_hcnt > 1) { + if (y_idx & 1) { + temp_box.y1 = + ((2 * y_idx + 1) * dy - + temp_extent->y2); + temp_box.y2 = + ((2 * y_idx + 1) * dy - + temp_extent->y1); + } + else { + temp_box.y1 = temp_extent->y1; + temp_box.y2 = temp_extent->y2; + } + + modulus(temp_box.y1, pixmap_height, + temp_box.y1); + modulus(temp_box.y2, pixmap_height, + temp_box.y2); + if (temp_box.y2 == 0) + temp_box.y2 = pixmap_height; + } + else { + temp_box.y1 = temp_extent->y1; + temp_box.y2 = temp_extent->y2; + _glamor_largepixmap_reflect_fixup(&temp_box.y1, + &temp_box.y2, + pixmap_height); + } + + RegionInitBoxes(&temp_region, &temp_box, 1); + RegionTranslate(&temp_region, + x_center_shift * pixmap_width, + y_center_shift * pixmap_height); + DEBUGF("for transform result:\n"); + DEBUGRegionPrint(&temp_region); + } + RegionAppend(current_region, &temp_region); + RegionUninit(&repeat_region); + y_idx++; + } + x_idx++; + } + } + DEBUGF("dx %d dy %d \n", dx, dy); + + if (RegionNumRects(current_region)) { + + if ((right_shift != 0 || down_shift != 0) && + !(is_transform && repeat_type == RepeatReflect)) + RegionTranslate(current_region, -right_shift * pixmap_width, + -down_shift * pixmap_height); + clipped_regions[m].region = current_region; + clipped_regions[m].block_idx = idx; + m++; + } + else + RegionDestroy(current_region); + RegionUninit(&temp_region); + } + } + + if (right_shift != 0 || down_shift != 0) + RegionTranslate(region, -right_shift * pixmap_width, + -down_shift * pixmap_height); + *n_region = m; + + return clipped_regions; } glamor_pixmap_clipped_regions * glamor_compute_clipped_regions(glamor_pixmap_private *priv, RegionPtr region, - int *n_region, int repeat_type, - int reverse, int upsidedown) + int *n_region, int repeat_type, + int reverse, int upsidedown) { - return _glamor_compute_clipped_regions(priv, region, n_region, repeat_type, 0, reverse, upsidedown); + return _glamor_compute_clipped_regions(priv, region, n_region, repeat_type, + 0, reverse, upsidedown); } /* XXX overflow still exist. maybe we need to change to use region32. * by default. Or just use region32 for repeat cases? **/ glamor_pixmap_clipped_regions * -glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, struct pixman_transform *transform, - RegionPtr region, int *n_region, int dx, int dy, int repeat_type, - int reverse, int upsidedown) +glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, + struct pixman_transform *transform, + RegionPtr region, int *n_region, + int dx, int dy, int repeat_type, + int reverse, int upsidedown) { - BoxPtr temp_extent; - struct pixman_box32 temp_box; - struct pixman_box16 short_box; - RegionPtr temp_region; - glamor_pixmap_clipped_regions *ret; - - temp_region = RegionCreate(NULL, 4); - temp_extent = RegionExtents(region); - DEBUGF("dest region \n"); - DEBUGRegionPrint(region); - /* dx/dy may exceed MAX SHORT. we have to use - * a box32 to represent it.*/ - temp_box.x1 = temp_extent->x1 + dx; - temp_box.x2 = temp_extent->x2 + dx; - temp_box.y1 = temp_extent->y1 + dy; - temp_box.y2 = temp_extent->y2 + dy; - - DEBUGF("source box %d %d %d %d \n", temp_box.x1, temp_box.y1, temp_box.x2, temp_box.y2); - if (transform) - glamor_get_transform_extent_from_box(&temp_box, transform); - if (repeat_type == RepeatNone) { - if (temp_box.x1 < 0) temp_box.x1 = 0; - if (temp_box.y1 < 0) temp_box.y1 = 0; - temp_box.x2 = MIN(temp_box.x2, priv->base.pixmap->drawable.width); - temp_box.y2 = MIN(temp_box.y2, priv->base.pixmap->drawable.height); - } - /* Now copy back the box32 to a box16 box. */ - short_box.x1 = temp_box.x1; - short_box.y1 = temp_box.y1; - short_box.x2 = temp_box.x2; - short_box.y2 = temp_box.y2; - RegionInitBoxes(temp_region, &short_box, 1); - DEBUGF("copy to temp source region \n"); - DEBUGRegionPrint(temp_region); - ret = _glamor_compute_clipped_regions(priv, - temp_region, - n_region, - repeat_type, - 1, reverse, - upsidedown); - DEBUGF("n_regions = %d \n", *n_region); - RegionDestroy(temp_region); - - return ret; + BoxPtr temp_extent; + struct pixman_box32 temp_box; + struct pixman_box16 short_box; + RegionPtr temp_region; + glamor_pixmap_clipped_regions *ret; + + temp_region = RegionCreate(NULL, 4); + temp_extent = RegionExtents(region); + DEBUGF("dest region \n"); + DEBUGRegionPrint(region); + /* dx/dy may exceed MAX SHORT. we have to use + * a box32 to represent it.*/ + temp_box.x1 = temp_extent->x1 + dx; + temp_box.x2 = temp_extent->x2 + dx; + temp_box.y1 = temp_extent->y1 + dy; + temp_box.y2 = temp_extent->y2 + dy; + + DEBUGF("source box %d %d %d %d \n", temp_box.x1, temp_box.y1, temp_box.x2, + temp_box.y2); + if (transform) + glamor_get_transform_extent_from_box(&temp_box, transform); + if (repeat_type == RepeatNone) { + if (temp_box.x1 < 0) + temp_box.x1 = 0; + if (temp_box.y1 < 0) + temp_box.y1 = 0; + temp_box.x2 = MIN(temp_box.x2, priv->base.pixmap->drawable.width); + temp_box.y2 = MIN(temp_box.y2, priv->base.pixmap->drawable.height); + } + /* Now copy back the box32 to a box16 box. */ + short_box.x1 = temp_box.x1; + short_box.y1 = temp_box.y1; + short_box.x2 = temp_box.x2; + short_box.y2 = temp_box.y2; + RegionInitBoxes(temp_region, &short_box, 1); + DEBUGF("copy to temp source region \n"); + DEBUGRegionPrint(temp_region); + ret = _glamor_compute_clipped_regions(priv, + temp_region, + n_region, + repeat_type, 1, reverse, upsidedown); + DEBUGF("n_regions = %d \n", *n_region); + RegionDestroy(temp_region); + + return ret; } + /* * As transform and repeatpad mode. * We may get a clipped result which in multipe regions. @@ -689,120 +736,121 @@ glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, struct pix * if the clipped result cross the region boundary. */ static void -glamor_merge_clipped_regions(glamor_pixmap_private *pixmap_priv, int repeat_type, - glamor_pixmap_clipped_regions *clipped_regions, - int *n_regions, int *need_clean_fbo) +glamor_merge_clipped_regions(glamor_pixmap_private *pixmap_priv, + int repeat_type, + glamor_pixmap_clipped_regions *clipped_regions, + int *n_regions, int *need_clean_fbo) { - BoxPtr temp_extent; - BoxRec temp_box, copy_box; - RegionPtr temp_region; - glamor_pixmap_private *temp_priv; - PixmapPtr temp_pixmap; - int overlap; - int i; - int pixmap_width, pixmap_height; - glamor_pixmap_private_large_t *priv; - - priv = &pixmap_priv->large; - pixmap_width = priv->base.pixmap->drawable.width; - pixmap_height = priv->base.pixmap->drawable.height; - - temp_region = RegionCreate(NULL, 4); - for(i = 0; i < *n_regions; i++) - { - DEBUGF("Region %d:\n", i); - DEBUGRegionPrint(clipped_regions[i].region); - RegionAppend(temp_region, clipped_regions[i].region); - } - - RegionValidate(temp_region, &overlap); - DEBUGF("temp region: \n"); - DEBUGRegionPrint(temp_region); - temp_extent = RegionExtents(temp_region); - - temp_box = *temp_extent; - - DEBUGF("need copy region: \n"); - DEBUGF("%d %d %d %d \n", temp_box.x1, temp_box.y1, temp_box.x2, temp_box.y2); - temp_pixmap = glamor_create_pixmap(priv->base.pixmap->drawable.pScreen, - temp_box.x2 - temp_box.x1, - temp_box.y2 - temp_box.y1, - priv->base.pixmap->drawable.depth, - GLAMOR_CREATE_PIXMAP_FIXUP); - if (temp_pixmap == NULL) { - assert(0); - return; - } - - temp_priv = glamor_get_pixmap_private(temp_pixmap); - assert(temp_priv->type != GLAMOR_TEXTURE_LARGE); - - priv->box = temp_box; - if (temp_extent->x1 >= 0 && temp_extent->x2 <= pixmap_width - && temp_extent->y1 >= 0 && temp_extent->y2 <= pixmap_height) { - int dx, dy; - copy_box.x1 = 0; - copy_box.y1 = 0; - copy_box.x2 = temp_extent->x2 - temp_extent->x1; - copy_box.y2 = temp_extent->y2 - temp_extent->y1; - dx = temp_extent->x1; - dy = temp_extent->y1; - glamor_copy_n_to_n(&priv->base.pixmap->drawable, - &temp_pixmap->drawable, - NULL, ©_box, 1, dx, - dy, 0, 0, 0, NULL); -// glamor_solid(temp_pixmap, 0, 0, temp_pixmap->drawable.width, -// temp_pixmap->drawable.height, GXcopy, 0xffffffff, 0xff00); - } else { - for (i = 0; i < *n_regions; i++) - { - BoxPtr box; - int nbox; - box = REGION_RECTS(clipped_regions[i].region); - nbox = REGION_NUM_RECTS(clipped_regions[i].region); - while(nbox--) { - int dx, dy, c, d; - DEBUGF("box x1 %d y1 %d x2 %d y2 %d \n", - box->x1, box->y1, box->x2, box->y2); - modulus(box->x1, pixmap_width, c); - dx = c - (box->x1 - temp_box.x1); - copy_box.x1 = box->x1 - temp_box.x1; - copy_box.x2 = box->x2 - temp_box.x1; - - modulus(box->y1, pixmap_height, d); - dy = d - (box->y1 - temp_box.y1); - copy_box.y1 = box->y1 - temp_box.y1; - copy_box.y2 = box->y2 - temp_box.y1; - - DEBUGF("copying box %d %d %d %d, dx %d dy %d\n", - copy_box.x1, copy_box.y1, copy_box.x2, - copy_box.y2, dx, dy); - - glamor_copy_n_to_n(&priv->base.pixmap->drawable, - &temp_pixmap->drawable, - NULL, ©_box, 1, dx, - dy, 0, 0, 0, NULL); - box++; - } - } - //glamor_solid(temp_pixmap, 0, 0, temp_pixmap->drawable.width, - // temp_pixmap->drawable.height, GXcopy, 0xffffffff, 0xff); - } - /* The first region will be released at caller side. */ - for(i = 1; i < *n_regions; i++) - RegionDestroy(clipped_regions[i].region); - RegionDestroy(temp_region); - priv->box = temp_box; - priv->base.fbo = glamor_pixmap_detach_fbo(temp_priv); - DEBUGF("priv box x1 %d y1 %d x2 %d y2 %d \n", - priv->box.x1, priv->box.y1, priv->box.x2, priv->box.y2); - glamor_destroy_pixmap(temp_pixmap); - *need_clean_fbo = 1; - *n_regions = 1; + BoxPtr temp_extent; + BoxRec temp_box, copy_box; + RegionPtr temp_region; + glamor_pixmap_private *temp_priv; + PixmapPtr temp_pixmap; + int overlap; + int i; + int pixmap_width, pixmap_height; + glamor_pixmap_private_large_t *priv; + + priv = &pixmap_priv->large; + pixmap_width = priv->base.pixmap->drawable.width; + pixmap_height = priv->base.pixmap->drawable.height; + + temp_region = RegionCreate(NULL, 4); + for (i = 0; i < *n_regions; i++) { + DEBUGF("Region %d:\n", i); + DEBUGRegionPrint(clipped_regions[i].region); + RegionAppend(temp_region, clipped_regions[i].region); + } + + RegionValidate(temp_region, &overlap); + DEBUGF("temp region: \n"); + DEBUGRegionPrint(temp_region); + temp_extent = RegionExtents(temp_region); + + temp_box = *temp_extent; + + DEBUGF("need copy region: \n"); + DEBUGF("%d %d %d %d \n", temp_box.x1, temp_box.y1, temp_box.x2, + temp_box.y2); + temp_pixmap = + glamor_create_pixmap(priv->base.pixmap->drawable.pScreen, + temp_box.x2 - temp_box.x1, + temp_box.y2 - temp_box.y1, + priv->base.pixmap->drawable.depth, + GLAMOR_CREATE_PIXMAP_FIXUP); + if (temp_pixmap == NULL) { + assert(0); + return; + } + + temp_priv = glamor_get_pixmap_private(temp_pixmap); + assert(temp_priv->type != GLAMOR_TEXTURE_LARGE); + + priv->box = temp_box; + if (temp_extent->x1 >= 0 && temp_extent->x2 <= pixmap_width + && temp_extent->y1 >= 0 && temp_extent->y2 <= pixmap_height) { + int dx, dy; + + copy_box.x1 = 0; + copy_box.y1 = 0; + copy_box.x2 = temp_extent->x2 - temp_extent->x1; + copy_box.y2 = temp_extent->y2 - temp_extent->y1; + dx = temp_extent->x1; + dy = temp_extent->y1; + glamor_copy_n_to_n(&priv->base.pixmap->drawable, + &temp_pixmap->drawable, + NULL, ©_box, 1, dx, dy, 0, 0, 0, NULL); +// glamor_solid(temp_pixmap, 0, 0, temp_pixmap->drawable.width, +// temp_pixmap->drawable.height, GXcopy, 0xffffffff, 0xff00); + } + else { + for (i = 0; i < *n_regions; i++) { + BoxPtr box; + int nbox; + + box = REGION_RECTS(clipped_regions[i].region); + nbox = REGION_NUM_RECTS(clipped_regions[i].region); + while (nbox--) { + int dx, dy, c, d; + + DEBUGF("box x1 %d y1 %d x2 %d y2 %d \n", + box->x1, box->y1, box->x2, box->y2); + modulus(box->x1, pixmap_width, c); + dx = c - (box->x1 - temp_box.x1); + copy_box.x1 = box->x1 - temp_box.x1; + copy_box.x2 = box->x2 - temp_box.x1; + + modulus(box->y1, pixmap_height, d); + dy = d - (box->y1 - temp_box.y1); + copy_box.y1 = box->y1 - temp_box.y1; + copy_box.y2 = box->y2 - temp_box.y1; + + DEBUGF("copying box %d %d %d %d, dx %d dy %d\n", + copy_box.x1, copy_box.y1, copy_box.x2, + copy_box.y2, dx, dy); + + glamor_copy_n_to_n(&priv->base.pixmap->drawable, + &temp_pixmap->drawable, + NULL, ©_box, 1, dx, dy, 0, 0, 0, NULL); + box++; + } + } + //glamor_solid(temp_pixmap, 0, 0, temp_pixmap->drawable.width, + // temp_pixmap->drawable.height, GXcopy, 0xffffffff, 0xff); + } + /* The first region will be released at caller side. */ + for (i = 1; i < *n_regions; i++) + RegionDestroy(clipped_regions[i].region); + RegionDestroy(temp_region); + priv->box = temp_box; + priv->base.fbo = glamor_pixmap_detach_fbo(temp_priv); + DEBUGF("priv box x1 %d y1 %d x2 %d y2 %d \n", + priv->box.x1, priv->box.y1, priv->box.x2, priv->box.y2); + glamor_destroy_pixmap(temp_pixmap); + *need_clean_fbo = 1; + *n_regions = 1; } - - /** * Given an expected transformed block width and block height, * @@ -817,45 +865,47 @@ glamor_merge_clipped_regions(glamor_pixmap_private *pixmap_priv, int repeat_type **/ Bool glamor_get_transform_block_size(struct pixman_transform *transform, - int block_w, int block_h, - int *transformed_block_w, - int *transformed_block_h) + int block_w, int block_h, + int *transformed_block_w, + int *transformed_block_h) { - double a,b,c,d,e,f,g,h; - double scale; - int width, height; - a = pixman_fixed_to_double(transform->matrix[0][0]); - b = pixman_fixed_to_double(transform->matrix[0][1]); - c = pixman_fixed_to_double(transform->matrix[1][0]); - d = pixman_fixed_to_double(transform->matrix[1][1]); - scale = pixman_fixed_to_double(transform->matrix[2][2]); - if (block_w > 2048) { - /* For large block size, we shrink it to smaller box, - * thus latter we may get less cross boundary regions and - * thus can avoid some extra copy. - * - **/ - width = block_w / 4; - height = block_h / 4; - } else { - width = block_w - 2; - height = block_h - 2; - } - e = a + b; - f = c + d; - - g = a - b; - h = c - d; - - e = MIN(block_w, floor(width * scale) / MAX(fabs(e), fabs(g))); - f = MIN(block_h, floor(height * scale) / MAX(fabs(f), fabs(h))); - *transformed_block_w = MIN(e, f) - 1; - *transformed_block_h = *transformed_block_w; - if (*transformed_block_w <= 0 || *transformed_block_h <= 0) - return FALSE; - DEBUGF("original block_w/h %d %d, fixed %d %d \n", block_w, block_h, - *transformed_block_w, *transformed_block_h); - return TRUE; + double a, b, c, d, e, f, g, h; + double scale; + int width, height; + + a = pixman_fixed_to_double(transform->matrix[0][0]); + b = pixman_fixed_to_double(transform->matrix[0][1]); + c = pixman_fixed_to_double(transform->matrix[1][0]); + d = pixman_fixed_to_double(transform->matrix[1][1]); + scale = pixman_fixed_to_double(transform->matrix[2][2]); + if (block_w > 2048) { + /* For large block size, we shrink it to smaller box, + * thus latter we may get less cross boundary regions and + * thus can avoid some extra copy. + * + **/ + width = block_w / 4; + height = block_h / 4; + } + else { + width = block_w - 2; + height = block_h - 2; + } + e = a + b; + f = c + d; + + g = a - b; + h = c - d; + + e = MIN(block_w, floor(width * scale) / MAX(fabs(e), fabs(g))); + f = MIN(block_h, floor(height * scale) / MAX(fabs(f), fabs(h))); + *transformed_block_w = MIN(e, f) - 1; + *transformed_block_h = *transformed_block_w; + if (*transformed_block_w <= 0 || *transformed_block_h <= 0) + return FALSE; + DEBUGF("original block_w/h %d %d, fixed %d %d \n", block_w, block_h, + *transformed_block_w, *transformed_block_h); + return TRUE; } #define VECTOR_FROM_POINT(p, x, y) \ @@ -864,314 +914,341 @@ glamor_get_transform_block_size(struct pixman_transform *transform, p.v[2] = 1.0; void glamor_get_transform_extent_from_box(struct pixman_box32 *box, - struct pixman_transform *transform) + struct pixman_transform *transform) { - struct pixman_f_vector p0, p1, p2, p3; - float min_x, min_y, max_x, max_y; - - struct pixman_f_transform ftransform; - - VECTOR_FROM_POINT(p0, box->x1, box->y1) - VECTOR_FROM_POINT(p1, box->x2, box->y1) - VECTOR_FROM_POINT(p2, box->x2, box->y2) - VECTOR_FROM_POINT(p3, box->x1, box->y2) - - pixman_f_transform_from_pixman_transform(&ftransform, transform); - pixman_f_transform_point(&ftransform, &p0); - pixman_f_transform_point(&ftransform, &p1); - pixman_f_transform_point(&ftransform, &p2); - pixman_f_transform_point(&ftransform, &p3); - - min_x = MIN(p0.v[0], p1.v[0]); - min_x = MIN(min_x, p2.v[0]); - min_x = MIN(min_x, p3.v[0]); - - min_y = MIN(p0.v[1], p1.v[1]); - min_y = MIN(min_y, p2.v[1]); - min_y = MIN(min_y, p3.v[1]); - - max_x = MAX(p0.v[0], p1.v[0]); - max_x = MAX(max_x, p2.v[0]); - max_x = MAX(max_x, p3.v[0]); - - max_y = MAX(p0.v[1], p1.v[1]); - max_y = MAX(max_y, p2.v[1]); - max_y = MAX(max_y, p3.v[1]); - box->x1 = floor(min_x) - 1; - box->y1 = floor(min_y) - 1; - box->x2 = ceil(max_x) + 1; - box->y2 = ceil(max_y) + 1; + struct pixman_f_vector p0, p1, p2, p3; + float min_x, min_y, max_x, max_y; + + struct pixman_f_transform ftransform; + + VECTOR_FROM_POINT(p0, box->x1, box->y1) + VECTOR_FROM_POINT(p1, box->x2, box->y1) + VECTOR_FROM_POINT(p2, box->x2, box->y2) + VECTOR_FROM_POINT(p3, box->x1, box->y2) + + pixman_f_transform_from_pixman_transform(&ftransform, transform); + pixman_f_transform_point(&ftransform, &p0); + pixman_f_transform_point(&ftransform, &p1); + pixman_f_transform_point(&ftransform, &p2); + pixman_f_transform_point(&ftransform, &p3); + + min_x = MIN(p0.v[0], p1.v[0]); + min_x = MIN(min_x, p2.v[0]); + min_x = MIN(min_x, p3.v[0]); + + min_y = MIN(p0.v[1], p1.v[1]); + min_y = MIN(min_y, p2.v[1]); + min_y = MIN(min_y, p3.v[1]); + + max_x = MAX(p0.v[0], p1.v[0]); + max_x = MAX(max_x, p2.v[0]); + max_x = MAX(max_x, p3.v[0]); + + max_y = MAX(p0.v[1], p1.v[1]); + max_y = MAX(max_y, p2.v[1]); + max_y = MAX(max_y, p3.v[1]); + box->x1 = floor(min_x) - 1; + box->y1 = floor(min_y) - 1; + box->x2 = ceil(max_x) + 1; + box->y2 = ceil(max_y) + 1; } static void _glamor_process_transformed_clipped_region(glamor_pixmap_private *priv, - int repeat_type, - glamor_pixmap_clipped_regions *clipped_regions, - int *n_regions, int *need_clean_fbo) + int repeat_type, + glamor_pixmap_clipped_regions * + clipped_regions, int *n_regions, + int *need_clean_fbo) { - int shift_x, shift_y; - if (*n_regions != 1) { - /* Merge all source regions into one region. */ - glamor_merge_clipped_regions(priv, repeat_type, - clipped_regions, n_regions, - need_clean_fbo); - } else { - SET_PIXMAP_FBO_CURRENT(priv, - clipped_regions[0].block_idx); - if (repeat_type == RepeatReflect || repeat_type == RepeatNormal) { - /* The required source areas are in one region, - * we need to shift the corresponding box's coords to proper position, - * thus we can calculate the relative coords correctly.*/ - BoxPtr temp_box; - int rem; - temp_box = RegionExtents(clipped_regions[0].region); - modulus(temp_box->x1, priv->base.pixmap->drawable.width, rem); - shift_x = (temp_box->x1 - rem) / priv->base.pixmap->drawable.width; - modulus(temp_box->y1, priv->base.pixmap->drawable.height, rem); - shift_y = (temp_box->y1 - rem) / priv->base.pixmap->drawable.height; - - if (shift_x != 0) { - priv->large.box.x1 += shift_x * priv->base.pixmap->drawable.width; - priv->large.box.x2 += shift_x * priv->base.pixmap->drawable.width; - } - if (shift_y != 0) { - priv->large.box.y1 += shift_y * priv->base.pixmap->drawable.height; - priv->large.box.y2 += shift_y * priv->base.pixmap->drawable.height; - } - } - } + int shift_x, shift_y; + + if (*n_regions != 1) { + /* Merge all source regions into one region. */ + glamor_merge_clipped_regions(priv, repeat_type, + clipped_regions, n_regions, + need_clean_fbo); + } + else { + SET_PIXMAP_FBO_CURRENT(priv, clipped_regions[0].block_idx); + if (repeat_type == RepeatReflect || repeat_type == RepeatNormal) { + /* The required source areas are in one region, + * we need to shift the corresponding box's coords to proper position, + * thus we can calculate the relative coords correctly.*/ + BoxPtr temp_box; + int rem; + + temp_box = RegionExtents(clipped_regions[0].region); + modulus(temp_box->x1, priv->base.pixmap->drawable.width, rem); + shift_x = (temp_box->x1 - rem) / priv->base.pixmap->drawable.width; + modulus(temp_box->y1, priv->base.pixmap->drawable.height, rem); + shift_y = (temp_box->y1 - rem) / priv->base.pixmap->drawable.height; + + if (shift_x != 0) { + priv->large.box.x1 += + shift_x * priv->base.pixmap->drawable.width; + priv->large.box.x2 += + shift_x * priv->base.pixmap->drawable.width; + } + if (shift_y != 0) { + priv->large.box.y1 += + shift_y * priv->base.pixmap->drawable.height; + priv->large.box.y2 += + shift_y * priv->base.pixmap->drawable.height; + } + } + } } - Bool glamor_composite_largepixmap_region(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private * source_pixmap_priv, - glamor_pixmap_private * mask_pixmap_priv, - glamor_pixmap_private * dest_pixmap_priv, - RegionPtr region, Bool force_clip, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + RegionPtr region, Bool force_clip, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height) { - glamor_screen_private *glamor_priv; - glamor_pixmap_clipped_regions *clipped_dest_regions; - glamor_pixmap_clipped_regions *clipped_source_regions; - glamor_pixmap_clipped_regions *clipped_mask_regions; - int n_dest_regions; - int n_mask_regions; - int n_source_regions; - int i,j,k; - int need_clean_source_fbo = 0; - int need_clean_mask_fbo = 0; - int is_normal_source_fbo = 0; - int is_normal_mask_fbo = 0; - int fixed_block_width, fixed_block_height; - int null_source, null_mask; - glamor_pixmap_private * need_free_source_pixmap_priv = NULL; - glamor_pixmap_private * need_free_mask_pixmap_priv = NULL; - int source_repeat_type = 0, mask_repeat_type = 0; - int ok = TRUE; - - if (source->repeat) - source_repeat_type = source->repeatType; - else - source_repeat_type = RepeatNone; - - if (mask && mask->repeat) - mask_repeat_type = mask->repeatType; - else - mask_repeat_type = RepeatNone; - - glamor_priv = dest_pixmap_priv->base.glamor_priv; - fixed_block_width = glamor_priv->max_fbo_size; - fixed_block_height = glamor_priv->max_fbo_size; - /* If we got an totally out-of-box region for a source or mask - * region without repeat, we need to set it as null_source and - * give it a solid color (0,0,0,0). */ - null_source = 0; - null_mask = 0; - RegionTranslate(region, -dest->pDrawable->x, - -dest->pDrawable->y); - - /* need to transform the dest region to the correct sourcei/mask region. - * it's a little complex, as one single edge of the - * target region may be transformed to cross a block boundary of the - * source or mask. Then it's impossible to handle it as usual way. - * We may have to split the original dest region to smaller region, and - * make sure each region's transformed region can fit into one texture, - * and then continue this loop again, and each time when a transformed region - * cross the bound, we need to copy it to a single pixmap and do the composition - * with the new pixmap. If the transformed region doesn't cross a source/mask's - * boundary then we don't need to copy. - * - */ - if (source_pixmap_priv - && source->transform - && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - int source_transformed_block_width, source_transformed_block_height; - if (!glamor_get_transform_block_size(source->transform, - source_pixmap_priv->large.block_w, - source_pixmap_priv->large.block_h, - &source_transformed_block_width, - &source_transformed_block_height)) { - DEBUGF("source block size less than 1, fallback.\n"); - RegionTranslate(region, dest->pDrawable->x, - dest->pDrawable->y); - return FALSE; - } - fixed_block_width = min(fixed_block_width , source_transformed_block_width); - fixed_block_height = min(fixed_block_height , source_transformed_block_height); - DEBUGF("new source block size %d x %d \n", fixed_block_width, fixed_block_height); - } - - if (mask_pixmap_priv - && mask->transform - && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - int mask_transformed_block_width, mask_transformed_block_height; - if (!glamor_get_transform_block_size(mask->transform, - mask_pixmap_priv->large.block_w, - mask_pixmap_priv->large.block_h, - &mask_transformed_block_width, - &mask_transformed_block_height)) { - DEBUGF("mask block size less than 1, fallback.\n"); - RegionTranslate(region, dest->pDrawable->x, - dest->pDrawable->y); - return FALSE; - } - fixed_block_width = min(fixed_block_width , mask_transformed_block_width); - fixed_block_height = min(fixed_block_height , mask_transformed_block_height); - DEBUGF("new mask block size %d x %d \n", fixed_block_width, fixed_block_height); - } - - /*compute the correct block width and height whose transformed source/mask - *region can fit into one texture.*/ - if (force_clip || fixed_block_width < glamor_priv->max_fbo_size - || fixed_block_height < glamor_priv->max_fbo_size) - clipped_dest_regions = glamor_compute_clipped_regions_ext(dest_pixmap_priv, - region, - &n_dest_regions, - fixed_block_width, - fixed_block_height, - 0, 0); - else - clipped_dest_regions = glamor_compute_clipped_regions(dest_pixmap_priv, - region, - &n_dest_regions, - 0, 0, 0); - DEBUGF("dest clipped result %d region: \n", n_dest_regions); - if (source_pixmap_priv - && (source_pixmap_priv == dest_pixmap_priv || source_pixmap_priv == mask_pixmap_priv) - && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - /* XXX self-copy...*/ - need_free_source_pixmap_priv = source_pixmap_priv; - source_pixmap_priv = malloc(sizeof(*source_pixmap_priv)); - *source_pixmap_priv = *need_free_source_pixmap_priv; - need_free_source_pixmap_priv = source_pixmap_priv; - } - assert(mask_pixmap_priv != dest_pixmap_priv); - - for(i = 0; i < n_dest_regions; i++) - { - DEBUGF("dest region %d idx %d\n", i, clipped_dest_regions[i].block_idx); - DEBUGRegionPrint(clipped_dest_regions[i].region); - SET_PIXMAP_FBO_CURRENT(dest_pixmap_priv, clipped_dest_regions[i].block_idx); - if ( source_pixmap_priv && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - if (!source->transform && source_repeat_type != RepeatPad) { - RegionTranslate(clipped_dest_regions[i].region, - x_source - x_dest, - y_source - y_dest); - clipped_source_regions = glamor_compute_clipped_regions(source_pixmap_priv, - clipped_dest_regions[i].region, - &n_source_regions, source_repeat_type, - 0, 0); - is_normal_source_fbo = 1; - } - else { - clipped_source_regions = glamor_compute_transform_clipped_regions(source_pixmap_priv, - source->transform, - clipped_dest_regions[i].region, - &n_source_regions, - x_source - x_dest, y_source - y_dest, - source_repeat_type, 0, 0); - is_normal_source_fbo = 0; - if (n_source_regions == 0) { - /* Pad the out-of-box region to (0,0,0,0). */ - null_source = 1; - n_source_regions = 1; - } else - _glamor_process_transformed_clipped_region(source_pixmap_priv, - source_repeat_type, clipped_source_regions, &n_source_regions, - &need_clean_source_fbo); - } - DEBUGF("source clipped result %d region: \n", n_source_regions); - for(j = 0; j < n_source_regions; j++) - { - if (is_normal_source_fbo) - SET_PIXMAP_FBO_CURRENT(source_pixmap_priv, - clipped_source_regions[j].block_idx); - - if (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - if (is_normal_mask_fbo && is_normal_source_fbo) { - /* both mask and source are normal fbo box without transform or repeatpad. - * The region is clipped against source and then we clip it against mask here.*/ - DEBUGF("source region %d idx %d\n", j, clipped_source_regions[j].block_idx); - DEBUGRegionPrint(clipped_source_regions[j].region); - RegionTranslate(clipped_source_regions[j].region, - - x_source + x_mask, - - y_source + y_mask); - clipped_mask_regions = glamor_compute_clipped_regions(mask_pixmap_priv, - clipped_source_regions[j].region, - &n_mask_regions, mask_repeat_type, - 0, 0); - is_normal_mask_fbo = 1; - } else if (is_normal_mask_fbo && !is_normal_source_fbo) { - assert(n_source_regions == 1); - /* The source fbo is not a normal fbo box, it has transform or repeatpad. - * the valid clip region should be the clip dest region rather than the - * clip source region.*/ - RegionTranslate(clipped_dest_regions[i].region, - - x_dest + x_mask, - - y_dest + y_mask); - clipped_mask_regions = glamor_compute_clipped_regions(mask_pixmap_priv, - clipped_dest_regions[i].region, - &n_mask_regions, mask_repeat_type, - 0, 0); - is_normal_mask_fbo = 1; - } else { - /* This mask region has transform or repeatpad, we need clip it agains the previous - * valid region rather than the mask region. */ - if (!is_normal_source_fbo) - clipped_mask_regions = glamor_compute_transform_clipped_regions(mask_pixmap_priv, - mask->transform, - clipped_dest_regions[i].region, - &n_mask_regions, - x_mask - x_dest, - y_mask - y_dest, - mask_repeat_type, 0, 0); - else - clipped_mask_regions = glamor_compute_transform_clipped_regions(mask_pixmap_priv, - mask->transform, - clipped_source_regions[j].region, - &n_mask_regions, - x_mask - x_source, y_mask - y_source, - mask_repeat_type, 0, 0); - is_normal_mask_fbo = 0; - if (n_mask_regions == 0) { - /* Pad the out-of-box region to (0,0,0,0). */ - null_mask = 1; - n_mask_regions = 1; - } else - _glamor_process_transformed_clipped_region(mask_pixmap_priv, - mask_repeat_type, clipped_mask_regions, &n_mask_regions, - &need_clean_mask_fbo); - } - DEBUGF("mask clipped result %d region: \n", n_mask_regions); + glamor_screen_private *glamor_priv; + glamor_pixmap_clipped_regions *clipped_dest_regions; + glamor_pixmap_clipped_regions *clipped_source_regions; + glamor_pixmap_clipped_regions *clipped_mask_regions; + int n_dest_regions; + int n_mask_regions; + int n_source_regions; + int i, j, k; + int need_clean_source_fbo = 0; + int need_clean_mask_fbo = 0; + int is_normal_source_fbo = 0; + int is_normal_mask_fbo = 0; + int fixed_block_width, fixed_block_height; + int null_source, null_mask; + glamor_pixmap_private *need_free_source_pixmap_priv = NULL; + glamor_pixmap_private *need_free_mask_pixmap_priv = NULL; + int source_repeat_type = 0, mask_repeat_type = 0; + int ok = TRUE; + + if (source->repeat) + source_repeat_type = source->repeatType; + else + source_repeat_type = RepeatNone; + + if (mask && mask->repeat) + mask_repeat_type = mask->repeatType; + else + mask_repeat_type = RepeatNone; + + glamor_priv = dest_pixmap_priv->base.glamor_priv; + fixed_block_width = glamor_priv->max_fbo_size; + fixed_block_height = glamor_priv->max_fbo_size; + /* If we got an totally out-of-box region for a source or mask + * region without repeat, we need to set it as null_source and + * give it a solid color (0,0,0,0). */ + null_source = 0; + null_mask = 0; + RegionTranslate(region, -dest->pDrawable->x, -dest->pDrawable->y); + + /* need to transform the dest region to the correct sourcei/mask region. + * it's a little complex, as one single edge of the + * target region may be transformed to cross a block boundary of the + * source or mask. Then it's impossible to handle it as usual way. + * We may have to split the original dest region to smaller region, and + * make sure each region's transformed region can fit into one texture, + * and then continue this loop again, and each time when a transformed region + * cross the bound, we need to copy it to a single pixmap and do the composition + * with the new pixmap. If the transformed region doesn't cross a source/mask's + * boundary then we don't need to copy. + * + */ + if (source_pixmap_priv + && source->transform + && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + int source_transformed_block_width, source_transformed_block_height; + + if (!glamor_get_transform_block_size(source->transform, + source_pixmap_priv->large.block_w, + source_pixmap_priv->large.block_h, + &source_transformed_block_width, + &source_transformed_block_height)) + { + DEBUGF("source block size less than 1, fallback.\n"); + RegionTranslate(region, dest->pDrawable->x, dest->pDrawable->y); + return FALSE; + } + fixed_block_width = + min(fixed_block_width, source_transformed_block_width); + fixed_block_height = + min(fixed_block_height, source_transformed_block_height); + DEBUGF("new source block size %d x %d \n", fixed_block_width, + fixed_block_height); + } + + if (mask_pixmap_priv + && mask->transform && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + int mask_transformed_block_width, mask_transformed_block_height; + + if (!glamor_get_transform_block_size(mask->transform, + mask_pixmap_priv->large.block_w, + mask_pixmap_priv->large.block_h, + &mask_transformed_block_width, + &mask_transformed_block_height)) { + DEBUGF("mask block size less than 1, fallback.\n"); + RegionTranslate(region, dest->pDrawable->x, dest->pDrawable->y); + return FALSE; + } + fixed_block_width = + min(fixed_block_width, mask_transformed_block_width); + fixed_block_height = + min(fixed_block_height, mask_transformed_block_height); + DEBUGF("new mask block size %d x %d \n", fixed_block_width, + fixed_block_height); + } + + /*compute the correct block width and height whose transformed source/mask + *region can fit into one texture.*/ + if (force_clip || fixed_block_width < glamor_priv->max_fbo_size + || fixed_block_height < glamor_priv->max_fbo_size) + clipped_dest_regions = + glamor_compute_clipped_regions_ext(dest_pixmap_priv, region, + &n_dest_regions, + fixed_block_width, + fixed_block_height, 0, 0); + else + clipped_dest_regions = glamor_compute_clipped_regions(dest_pixmap_priv, + region, + &n_dest_regions, + 0, 0, 0); + DEBUGF("dest clipped result %d region: \n", n_dest_regions); + if (source_pixmap_priv + && (source_pixmap_priv == dest_pixmap_priv || + source_pixmap_priv == mask_pixmap_priv) + && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + /* XXX self-copy... */ + need_free_source_pixmap_priv = source_pixmap_priv; + source_pixmap_priv = malloc(sizeof(*source_pixmap_priv)); + *source_pixmap_priv = *need_free_source_pixmap_priv; + need_free_source_pixmap_priv = source_pixmap_priv; + } + assert(mask_pixmap_priv != dest_pixmap_priv); + + for (i = 0; i < n_dest_regions; i++) { + DEBUGF("dest region %d idx %d\n", i, + clipped_dest_regions[i].block_idx); + DEBUGRegionPrint(clipped_dest_regions[i].region); + SET_PIXMAP_FBO_CURRENT(dest_pixmap_priv, + clipped_dest_regions[i].block_idx); + if (source_pixmap_priv && + source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (!source->transform && source_repeat_type != RepeatPad) { + RegionTranslate(clipped_dest_regions[i].region, + x_source - x_dest, y_source - y_dest); + clipped_source_regions = + glamor_compute_clipped_regions(source_pixmap_priv, + clipped_dest_regions[i]. + region, &n_source_regions, + source_repeat_type, 0, 0); + is_normal_source_fbo = 1; + } + else { + clipped_source_regions = + glamor_compute_transform_clipped_regions(source_pixmap_priv, + source->transform, + clipped_dest_regions + [i].region, + &n_source_regions, + x_source - x_dest, + y_source - y_dest, + source_repeat_type, + 0, 0); + is_normal_source_fbo = 0; + if (n_source_regions == 0) { + /* Pad the out-of-box region to (0,0,0,0). */ + null_source = 1; + n_source_regions = 1; + } + else + _glamor_process_transformed_clipped_region + (source_pixmap_priv, source_repeat_type, + clipped_source_regions, &n_source_regions, + &need_clean_source_fbo); + } + DEBUGF("source clipped result %d region: \n", n_source_regions); + for (j = 0; j < n_source_regions; j++) { + if (is_normal_source_fbo) + SET_PIXMAP_FBO_CURRENT(source_pixmap_priv, + clipped_source_regions[j].block_idx); + + if (mask_pixmap_priv && + mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (is_normal_mask_fbo && is_normal_source_fbo) { + /* both mask and source are normal fbo box without transform or repeatpad. + * The region is clipped against source and then we clip it against mask here.*/ + DEBUGF("source region %d idx %d\n", j, + clipped_source_regions[j].block_idx); + DEBUGRegionPrint(clipped_source_regions[j].region); + RegionTranslate(clipped_source_regions[j].region, + -x_source + x_mask, -y_source + y_mask); + clipped_mask_regions = + glamor_compute_clipped_regions(mask_pixmap_priv, + clipped_source_regions + [j].region, + &n_mask_regions, + mask_repeat_type, 0, + 0); + is_normal_mask_fbo = 1; + } + else if (is_normal_mask_fbo && !is_normal_source_fbo) { + assert(n_source_regions == 1); + /* The source fbo is not a normal fbo box, it has transform or repeatpad. + * the valid clip region should be the clip dest region rather than the + * clip source region.*/ + RegionTranslate(clipped_dest_regions[i].region, + -x_dest + x_mask, -y_dest + y_mask); + clipped_mask_regions = + glamor_compute_clipped_regions(mask_pixmap_priv, + clipped_dest_regions + [i].region, + &n_mask_regions, + mask_repeat_type, 0, + 0); + is_normal_mask_fbo = 1; + } + else { + /* This mask region has transform or repeatpad, we need clip it agains the previous + * valid region rather than the mask region. */ + if (!is_normal_source_fbo) + clipped_mask_regions = + glamor_compute_transform_clipped_regions + (mask_pixmap_priv, mask->transform, + clipped_dest_regions[i].region, + &n_mask_regions, x_mask - x_dest, + y_mask - y_dest, mask_repeat_type, 0, 0); + else + clipped_mask_regions = + glamor_compute_transform_clipped_regions + (mask_pixmap_priv, mask->transform, + clipped_source_regions[j].region, + &n_mask_regions, x_mask - x_source, + y_mask - y_source, mask_repeat_type, 0, 0); + is_normal_mask_fbo = 0; + if (n_mask_regions == 0) { + /* Pad the out-of-box region to (0,0,0,0). */ + null_mask = 1; + n_mask_regions = 1; + } + else + _glamor_process_transformed_clipped_region + (mask_pixmap_priv, mask_repeat_type, + clipped_mask_regions, &n_mask_regions, + &need_clean_mask_fbo); + } + DEBUGF("mask clipped result %d region: \n", n_mask_regions); #define COMPOSITE_REGION(region) do { \ if (!glamor_composite_clipped_region(op, \ @@ -1186,139 +1263,157 @@ glamor_composite_largepixmap_region(CARD8 op, } \ } while(0) - for(k = 0; k < n_mask_regions; k++) - { - DEBUGF("mask region %d idx %d\n", k, clipped_mask_regions[k].block_idx); - DEBUGRegionPrint(clipped_mask_regions[k].region); - if (is_normal_mask_fbo) { - SET_PIXMAP_FBO_CURRENT(mask_pixmap_priv, - clipped_mask_regions[k].block_idx); - DEBUGF("mask fbo off %d %d \n", - mask_pixmap_priv->large.box.x1, - mask_pixmap_priv->large.box.y1); - DEBUGF("start composite mask hasn't transform.\n"); - RegionTranslate(clipped_mask_regions[k].region, - x_dest - x_mask + dest->pDrawable->x, - y_dest - y_mask + dest->pDrawable->y); - COMPOSITE_REGION(clipped_mask_regions[k].region); - } else if (!is_normal_mask_fbo && !is_normal_source_fbo) { - DEBUGF("start composite both mask and source have transform.\n"); - RegionTranslate(clipped_dest_regions[i].region, - dest->pDrawable->x, - dest->pDrawable->y); - COMPOSITE_REGION(clipped_dest_regions[i].region); - } else { - DEBUGF("start composite only mask has transform.\n"); - RegionTranslate(clipped_source_regions[j].region, - x_dest - x_source + dest->pDrawable->x, - y_dest - y_source + dest->pDrawable->y); - COMPOSITE_REGION(clipped_source_regions[j].region); - } - RegionDestroy(clipped_mask_regions[k].region); - } - free(clipped_mask_regions); - if (null_mask) null_mask = 0; - if (need_clean_mask_fbo) { - assert(is_normal_mask_fbo == 0); - glamor_destroy_fbo(mask_pixmap_priv->base.fbo); - mask_pixmap_priv->base.fbo = NULL; - need_clean_mask_fbo = 0; - } - } else { - if (is_normal_source_fbo) { - RegionTranslate(clipped_source_regions[j].region, - -x_source + x_dest + dest->pDrawable->x, - -y_source + y_dest + dest->pDrawable->y); - COMPOSITE_REGION(clipped_source_regions[j].region); - } else { - /* Source has transform or repeatPad. dest regions is the right - * region to do the composite. */ - RegionTranslate(clipped_dest_regions[i].region, - dest->pDrawable->x, - dest->pDrawable->y); - COMPOSITE_REGION(clipped_dest_regions[i].region); - } - } - if (clipped_source_regions && clipped_source_regions[j].region) - RegionDestroy(clipped_source_regions[j].region); - } - free(clipped_source_regions); - if (null_source) null_source = 0; - if (need_clean_source_fbo) { - assert(is_normal_source_fbo == 0); - glamor_destroy_fbo(source_pixmap_priv->base.fbo); - source_pixmap_priv->base.fbo = NULL; - need_clean_source_fbo = 0; - } - } - else { - if (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - if (!mask->transform && mask_repeat_type != RepeatPad) { - RegionTranslate(clipped_dest_regions[i].region, - x_mask - x_dest, - y_mask - y_dest); - clipped_mask_regions = glamor_compute_clipped_regions(mask_pixmap_priv, - clipped_dest_regions[i].region, - &n_mask_regions, mask_repeat_type, 0, 0); - is_normal_mask_fbo = 1; - } - else { - clipped_mask_regions = glamor_compute_transform_clipped_regions(mask_pixmap_priv, - mask->transform, - clipped_dest_regions[i].region, - &n_mask_regions, - x_mask - x_dest, y_mask - y_dest, - mask_repeat_type, 0, 0); - is_normal_mask_fbo = 0; - if (n_mask_regions == 0) { - /* Pad the out-of-box region to (0,0,0,0). */ - null_mask = 1; - n_mask_regions = 1; - } else - _glamor_process_transformed_clipped_region(mask_pixmap_priv, - mask_repeat_type, clipped_mask_regions, &n_mask_regions, - &need_clean_mask_fbo); - } - - for(k = 0; k < n_mask_regions; k++) - { - DEBUGF("mask region %d idx %d\n", k, clipped_mask_regions[k].block_idx); - DEBUGRegionPrint(clipped_mask_regions[k].region); - if (is_normal_mask_fbo) { - SET_PIXMAP_FBO_CURRENT(mask_pixmap_priv, - clipped_mask_regions[k].block_idx); - RegionTranslate(clipped_mask_regions[k].region, - x_dest - x_mask + dest->pDrawable->x, - y_dest - y_mask + dest->pDrawable->y); - COMPOSITE_REGION(clipped_mask_regions[k].region); - } else { - RegionTranslate(clipped_dest_regions[i].region, - dest->pDrawable->x, - dest->pDrawable->y); - COMPOSITE_REGION(clipped_dest_regions[i].region); - } - RegionDestroy(clipped_mask_regions[k].region); - } - free(clipped_mask_regions); - if (null_mask) null_mask = 0; - if (need_clean_mask_fbo) { - glamor_destroy_fbo(mask_pixmap_priv->base.fbo); - mask_pixmap_priv->base.fbo = NULL; - need_clean_mask_fbo = 0; - } - } - else { - RegionTranslate(clipped_dest_regions[i].region, - dest->pDrawable->x, - dest->pDrawable->y); - COMPOSITE_REGION(clipped_dest_regions[i].region); - } - } - RegionDestroy(clipped_dest_regions[i].region); - } - free(clipped_dest_regions); - free(need_free_source_pixmap_priv); - free(need_free_mask_pixmap_priv); - ok = TRUE; - return ok; + for (k = 0; k < n_mask_regions; k++) { + DEBUGF("mask region %d idx %d\n", k, + clipped_mask_regions[k].block_idx); + DEBUGRegionPrint(clipped_mask_regions[k].region); + if (is_normal_mask_fbo) { + SET_PIXMAP_FBO_CURRENT(mask_pixmap_priv, + clipped_mask_regions[k]. + block_idx); + DEBUGF("mask fbo off %d %d \n", + mask_pixmap_priv->large.box.x1, + mask_pixmap_priv->large.box.y1); + DEBUGF("start composite mask hasn't transform.\n"); + RegionTranslate(clipped_mask_regions[k].region, + x_dest - x_mask + + dest->pDrawable->x, + y_dest - y_mask + + dest->pDrawable->y); + COMPOSITE_REGION(clipped_mask_regions[k].region); + } + else if (!is_normal_mask_fbo && !is_normal_source_fbo) { + DEBUGF + ("start composite both mask and source have transform.\n"); + RegionTranslate(clipped_dest_regions[i].region, + dest->pDrawable->x, + dest->pDrawable->y); + COMPOSITE_REGION(clipped_dest_regions[i].region); + } + else { + DEBUGF + ("start composite only mask has transform.\n"); + RegionTranslate(clipped_source_regions[j].region, + x_dest - x_source + + dest->pDrawable->x, + y_dest - y_source + + dest->pDrawable->y); + COMPOSITE_REGION(clipped_source_regions[j].region); + } + RegionDestroy(clipped_mask_regions[k].region); + } + free(clipped_mask_regions); + if (null_mask) + null_mask = 0; + if (need_clean_mask_fbo) { + assert(is_normal_mask_fbo == 0); + glamor_destroy_fbo(mask_pixmap_priv->base.fbo); + mask_pixmap_priv->base.fbo = NULL; + need_clean_mask_fbo = 0; + } + } + else { + if (is_normal_source_fbo) { + RegionTranslate(clipped_source_regions[j].region, + -x_source + x_dest + dest->pDrawable->x, + -y_source + y_dest + + dest->pDrawable->y); + COMPOSITE_REGION(clipped_source_regions[j].region); + } + else { + /* Source has transform or repeatPad. dest regions is the right + * region to do the composite. */ + RegionTranslate(clipped_dest_regions[i].region, + dest->pDrawable->x, dest->pDrawable->y); + COMPOSITE_REGION(clipped_dest_regions[i].region); + } + } + if (clipped_source_regions && clipped_source_regions[j].region) + RegionDestroy(clipped_source_regions[j].region); + } + free(clipped_source_regions); + if (null_source) + null_source = 0; + if (need_clean_source_fbo) { + assert(is_normal_source_fbo == 0); + glamor_destroy_fbo(source_pixmap_priv->base.fbo); + source_pixmap_priv->base.fbo = NULL; + need_clean_source_fbo = 0; + } + } + else { + if (mask_pixmap_priv && + mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (!mask->transform && mask_repeat_type != RepeatPad) { + RegionTranslate(clipped_dest_regions[i].region, + x_mask - x_dest, y_mask - y_dest); + clipped_mask_regions = + glamor_compute_clipped_regions(mask_pixmap_priv, + clipped_dest_regions[i]. + region, &n_mask_regions, + mask_repeat_type, 0, 0); + is_normal_mask_fbo = 1; + } + else { + clipped_mask_regions = + glamor_compute_transform_clipped_regions + (mask_pixmap_priv, mask->transform, + clipped_dest_regions[i].region, &n_mask_regions, + x_mask - x_dest, y_mask - y_dest, mask_repeat_type, 0, + 0); + is_normal_mask_fbo = 0; + if (n_mask_regions == 0) { + /* Pad the out-of-box region to (0,0,0,0). */ + null_mask = 1; + n_mask_regions = 1; + } + else + _glamor_process_transformed_clipped_region + (mask_pixmap_priv, mask_repeat_type, + clipped_mask_regions, &n_mask_regions, + &need_clean_mask_fbo); + } + + for (k = 0; k < n_mask_regions; k++) { + DEBUGF("mask region %d idx %d\n", k, + clipped_mask_regions[k].block_idx); + DEBUGRegionPrint(clipped_mask_regions[k].region); + if (is_normal_mask_fbo) { + SET_PIXMAP_FBO_CURRENT(mask_pixmap_priv, + clipped_mask_regions[k]. + block_idx); + RegionTranslate(clipped_mask_regions[k].region, + x_dest - x_mask + dest->pDrawable->x, + y_dest - y_mask + dest->pDrawable->y); + COMPOSITE_REGION(clipped_mask_regions[k].region); + } + else { + RegionTranslate(clipped_dest_regions[i].region, + dest->pDrawable->x, dest->pDrawable->y); + COMPOSITE_REGION(clipped_dest_regions[i].region); + } + RegionDestroy(clipped_mask_regions[k].region); + } + free(clipped_mask_regions); + if (null_mask) + null_mask = 0; + if (need_clean_mask_fbo) { + glamor_destroy_fbo(mask_pixmap_priv->base.fbo); + mask_pixmap_priv->base.fbo = NULL; + need_clean_mask_fbo = 0; + } + } + else { + RegionTranslate(clipped_dest_regions[i].region, + dest->pDrawable->x, dest->pDrawable->y); + COMPOSITE_REGION(clipped_dest_regions[i].region); + } + } + RegionDestroy(clipped_dest_regions[i].region); + } + free(clipped_dest_regions); + free(need_free_source_pixmap_priv); + free(need_free_mask_pixmap_priv); + ok = TRUE; + return ok; } diff --git a/xorg-server/glamor/glamor_picture.c b/xorg-server/glamor/glamor_picture.c index 7d5ffbb76..f51a7e459 100644 --- a/xorg-server/glamor/glamor_picture.c +++ b/xorg-server/glamor/glamor_picture.c @@ -37,30 +37,30 @@ enum glamor_pixmap_status glamor_upload_picture_to_texture(PicturePtr picture) { - PixmapPtr pixmap; - assert(picture->pDrawable); - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + PixmapPtr pixmap; - return glamor_upload_pixmap_to_texture(pixmap); -} + assert(picture->pDrawable); + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + return glamor_upload_pixmap_to_texture(pixmap); +} Bool glamor_prepare_access_picture(PicturePtr picture, glamor_access_t access) { - if (!picture || !picture->pDrawable) - return TRUE; + if (!picture || !picture->pDrawable) + return TRUE; - return glamor_prepare_access(picture->pDrawable, access); + return glamor_prepare_access(picture->pDrawable, access); } void glamor_finish_access_picture(PicturePtr picture, glamor_access_t access) { - if (!picture || !picture->pDrawable) - return; + if (!picture || !picture->pDrawable) + return; - glamor_finish_access(picture->pDrawable, access); + glamor_finish_access(picture->pDrawable, access); } /* @@ -71,61 +71,62 @@ glamor_finish_access_picture(PicturePtr picture, glamor_access_t access) int glamor_create_picture(PicturePtr picture) { - PixmapPtr pixmap; - glamor_pixmap_private *pixmap_priv; - - if (!picture || !picture->pDrawable) - return 0; - - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!pixmap_priv) { - /* We must create a pixmap priv to track the picture format even - * if the pixmap is a pure in memory pixmap. The reason is that - * we may need to upload this pixmap to a texture on the fly. During - * the uploading, we need to know the picture format. */ - glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); - pixmap_priv = glamor_get_pixmap_private(pixmap); - } else { - if (GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { - /* If the picture format is not compatible with glamor fbo format, - * we have to mark this pixmap as a separated texture, and don't - * fallback to DDX layer. */ - if (pixmap_priv->type == GLAMOR_TEXTURE_DRM - && !glamor_pict_format_is_compatible(picture->format, - pixmap->drawable.depth)) - glamor_set_pixmap_type(pixmap, GLAMOR_SEPARATE_TEXTURE); - } - } - - pixmap_priv->base.is_picture = 1; - pixmap_priv->base.picture = picture; - - return miCreatePicture(picture); + PixmapPtr pixmap; + glamor_pixmap_private *pixmap_priv; + + if (!picture || !picture->pDrawable) + return 0; + + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (!pixmap_priv) { + /* We must create a pixmap priv to track the picture format even + * if the pixmap is a pure in memory pixmap. The reason is that + * we may need to upload this pixmap to a texture on the fly. During + * the uploading, we need to know the picture format. */ + glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); + pixmap_priv = glamor_get_pixmap_private(pixmap); + } + else { + if (GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { + /* If the picture format is not compatible with glamor fbo format, + * we have to mark this pixmap as a separated texture, and don't + * fallback to DDX layer. */ + if (pixmap_priv->type == GLAMOR_TEXTURE_DRM + && !glamor_pict_format_is_compatible(picture->format, + pixmap->drawable.depth)) + glamor_set_pixmap_type(pixmap, GLAMOR_SEPARATE_TEXTURE); + } + } + + pixmap_priv->base.is_picture = 1; + pixmap_priv->base.picture = picture; + + return miCreatePicture(picture); } void glamor_destroy_picture(PicturePtr picture) { - PixmapPtr pixmap; - glamor_pixmap_private *pixmap_priv; + PixmapPtr pixmap; + glamor_pixmap_private *pixmap_priv; - if (!picture || !picture->pDrawable) - return; + if (!picture || !picture->pDrawable) + return; - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - pixmap_priv = glamor_get_pixmap_private(pixmap); + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + pixmap_priv = glamor_get_pixmap_private(pixmap); - if (pixmap_priv) { - pixmap_priv->base.is_picture = 0; - pixmap_priv->base.picture = NULL; - } - miDestroyPicture(picture); + if (pixmap_priv) { + pixmap_priv->base.is_picture = 0; + pixmap_priv->base.picture = NULL; + } + miDestroyPicture(picture); } void glamor_picture_format_fixup(PicturePtr picture, - glamor_pixmap_private * pixmap_priv) + glamor_pixmap_private *pixmap_priv) { - pixmap_priv->base.picture = picture; + pixmap_priv->base.picture = picture; } diff --git a/xorg-server/glamor/glamor_pixmap.c b/xorg-server/glamor/glamor_pixmap.c index 84694ec3c..f7de59c39 100644 --- a/xorg-server/glamor/glamor_pixmap.c +++ b/xorg-server/glamor/glamor_pixmap.c @@ -37,21 +37,20 @@ */ void glamor_get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap, - int *x, int *y) + int *x, int *y) { #ifdef COMPOSITE - if (drawable->type == DRAWABLE_WINDOW) { - *x = -pixmap->screen_x; - *y = -pixmap->screen_y; - return; - } + if (drawable->type == DRAWABLE_WINDOW) { + *x = -pixmap->screen_x; + *y = -pixmap->screen_y; + return; + } #endif - *x = 0; - *y = 0; + *x = 0; + *y = 0; } - void glamor_pixmap_init(ScreenPtr screen) { @@ -64,173 +63,168 @@ glamor_pixmap_fini(ScreenPtr screen) } void -glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo * fbo, int x0, int y0, int width, int height) +glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo *fbo, int x0, int y0, + int width, int height) { - glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); - dispatch->glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); + glamor_gl_dispatch *dispatch = glamor_get_dispatch(fbo->glamor_priv); + + dispatch->glBindFramebuffer(GL_FRAMEBUFFER, fbo->fb); #ifndef GLAMOR_GLES2 - dispatch->glMatrixMode(GL_PROJECTION); - dispatch->glLoadIdentity(); - dispatch->glMatrixMode(GL_MODELVIEW); - dispatch->glLoadIdentity(); + dispatch->glMatrixMode(GL_PROJECTION); + dispatch->glLoadIdentity(); + dispatch->glMatrixMode(GL_MODELVIEW); + dispatch->glLoadIdentity(); #endif - dispatch->glViewport(x0, y0, - width, height); + dispatch->glViewport(x0, y0, width, height); - glamor_put_dispatch(fbo->glamor_priv); + glamor_put_dispatch(fbo->glamor_priv); } void -glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private * pixmap_priv) +glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private *pixmap_priv) { - int w,h; + int w, h; - PIXMAP_PRIV_GET_ACTUAL_SIZE(pixmap_priv, w, h); - glamor_set_destination_pixmap_fbo(pixmap_priv->base.fbo, 0, 0, - w, h); + PIXMAP_PRIV_GET_ACTUAL_SIZE(pixmap_priv, w, h); + glamor_set_destination_pixmap_fbo(pixmap_priv->base.fbo, 0, 0, w, h); } int -glamor_set_destination_pixmap_priv(glamor_pixmap_private * pixmap_priv) +glamor_set_destination_pixmap_priv(glamor_pixmap_private *pixmap_priv) { - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return -1; + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return -1; - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - return 0; + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + return 0; } int glamor_set_destination_pixmap(PixmapPtr pixmap) { - int err; - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); + int err; + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - err = glamor_set_destination_pixmap_priv(pixmap_priv); - return err; + err = glamor_set_destination_pixmap_priv(pixmap_priv); + return err; } Bool glamor_set_planemask(PixmapPtr pixmap, unsigned long planemask) { - if (glamor_pm_is_solid(&pixmap->drawable, planemask)) { - return GL_TRUE; - } + if (glamor_pm_is_solid(&pixmap->drawable, planemask)) { + return GL_TRUE; + } - glamor_fallback("unsupported planemask %lx\n", planemask); - return GL_FALSE; + glamor_fallback("unsupported planemask %lx\n", planemask); + return GL_FALSE; } Bool glamor_set_alu(struct glamor_gl_dispatch *dispatch, unsigned char alu) { #ifndef GLAMOR_GLES2 - if (alu == GXcopy) { - dispatch->glDisable(GL_COLOR_LOGIC_OP); - return TRUE; - } - dispatch->glEnable(GL_COLOR_LOGIC_OP); - switch (alu) { - case GXclear: - dispatch->glLogicOp(GL_CLEAR); - break; - case GXand: - dispatch->glLogicOp(GL_AND); - break; - case GXandReverse: - dispatch->glLogicOp(GL_AND_REVERSE); - break; - case GXandInverted: - dispatch->glLogicOp(GL_AND_INVERTED); - break; - case GXnoop: - dispatch->glLogicOp(GL_NOOP); - break; - case GXxor: - dispatch->glLogicOp(GL_XOR); - break; - case GXor: - dispatch->glLogicOp(GL_OR); - break; - case GXnor: - dispatch->glLogicOp(GL_NOR); - break; - case GXequiv: - dispatch->glLogicOp(GL_EQUIV); - break; - case GXinvert: - dispatch->glLogicOp(GL_INVERT); - break; - case GXorReverse: - dispatch->glLogicOp(GL_OR_REVERSE); - break; - case GXcopyInverted: - dispatch->glLogicOp(GL_COPY_INVERTED); - break; - case GXorInverted: - dispatch->glLogicOp(GL_OR_INVERTED); - break; - case GXnand: - dispatch->glLogicOp(GL_NAND); - break; - case GXset: - dispatch->glLogicOp(GL_SET); - break; - default: - glamor_fallback("unsupported alu %x\n", alu); - return FALSE; - } + if (alu == GXcopy) { + dispatch->glDisable(GL_COLOR_LOGIC_OP); + return TRUE; + } + dispatch->glEnable(GL_COLOR_LOGIC_OP); + switch (alu) { + case GXclear: + dispatch->glLogicOp(GL_CLEAR); + break; + case GXand: + dispatch->glLogicOp(GL_AND); + break; + case GXandReverse: + dispatch->glLogicOp(GL_AND_REVERSE); + break; + case GXandInverted: + dispatch->glLogicOp(GL_AND_INVERTED); + break; + case GXnoop: + dispatch->glLogicOp(GL_NOOP); + break; + case GXxor: + dispatch->glLogicOp(GL_XOR); + break; + case GXor: + dispatch->glLogicOp(GL_OR); + break; + case GXnor: + dispatch->glLogicOp(GL_NOR); + break; + case GXequiv: + dispatch->glLogicOp(GL_EQUIV); + break; + case GXinvert: + dispatch->glLogicOp(GL_INVERT); + break; + case GXorReverse: + dispatch->glLogicOp(GL_OR_REVERSE); + break; + case GXcopyInverted: + dispatch->glLogicOp(GL_COPY_INVERTED); + break; + case GXorInverted: + dispatch->glLogicOp(GL_OR_INVERTED); + break; + case GXnand: + dispatch->glLogicOp(GL_NAND); + break; + case GXset: + dispatch->glLogicOp(GL_SET); + break; + default: + glamor_fallback("unsupported alu %x\n", alu); + return FALSE; + } #else - if (alu != GXcopy) - return FALSE; + if (alu != GXcopy) + return FALSE; #endif - return TRUE; + return TRUE; } static void * -_glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, int stride, int revert) +_glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, + int stride, int revert) { - PictFormatShort dst_format, src_format; - pixman_image_t *dst_image; - pixman_image_t *src_image; - int src_stride; - - if (revert == REVERT_UPLOADING_A1) { - src_format = PICT_a1; - dst_format = PICT_a8; - src_stride = PixmapBytePad(w, 1); - } else { - dst_format = PICT_a1; - src_format = PICT_a8; - src_stride = (((w * 8 + 7) / 8) + 3) & ~3; - } - - dst_image = pixman_image_create_bits(dst_format, - w, h, - dst_bits, - stride); - if (dst_image == NULL) { - return NULL; - } - - src_image = pixman_image_create_bits(src_format, - w, h, - src_bits, - src_stride); - - if (src_image == NULL) { - pixman_image_unref(dst_image); - return NULL; - } - - pixman_image_composite(PictOpSrc, src_image, NULL, dst_image, - 0, 0, 0, 0, 0, 0, - w,h); - - pixman_image_unref(src_image); - pixman_image_unref(dst_image); - return dst_bits; + PictFormatShort dst_format, src_format; + pixman_image_t *dst_image; + pixman_image_t *src_image; + int src_stride; + + if (revert == REVERT_UPLOADING_A1) { + src_format = PICT_a1; + dst_format = PICT_a8; + src_stride = PixmapBytePad(w, 1); + } + else { + dst_format = PICT_a1; + src_format = PICT_a8; + src_stride = (((w * 8 + 7) / 8) + 3) & ~3; + } + + dst_image = pixman_image_create_bits(dst_format, w, h, dst_bits, stride); + if (dst_image == NULL) { + return NULL; + } + + src_image = pixman_image_create_bits(src_format, + w, h, src_bits, src_stride); + + if (src_image == NULL) { + pixman_image_unref(dst_image); + return NULL; + } + + pixman_image_composite(PictOpSrc, src_image, NULL, dst_image, + 0, 0, 0, 0, 0, 0, w, h); + + pixman_image_unref(src_image); + pixman_image_unref(dst_image); + return dst_bits; } #define ADJUST_BITS(d, src_bits, dst_bits) (((dst_bits) == (src_bits)) ? (d) : \ @@ -248,7 +242,7 @@ _glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, int st b_shift, b_bits, \ g_shift, g_bits, \ r_shift, r_bits) \ - { \ + do { \ typeof(src) a,b,g,r; \ typeof(src) a_mask_src, b_mask_src, g_mask_src, r_mask_src;\ a_mask_src = (((1 << (a_bits_src)) - 1) << a_shift_src);\ @@ -270,79 +264,80 @@ _glamor_color_convert_a1_a8(void *src_bits, void *dst_bits, int w, int h, int st (*dst) = ((a) << (a_shift)) | ((b) << (b_shift)) | ((g) << (g_shift)) | ((r) << (r_shift)); \ else \ (*dst) = ((a) << (a_shift)) | ((r) << (b_shift)) | ((g) << (g_shift)) | ((b) << (r_shift)); \ - } + } while (0) static void * -_glamor_color_revert_x2b10g10r10(void *src_bits, void *dst_bits, int w, int h, int stride, int no_alpha, int revert, int swap_rb) +_glamor_color_revert_x2b10g10r10(void *src_bits, void *dst_bits, int w, int h, + int stride, int no_alpha, int revert, + int swap_rb) { - int x,y; - unsigned int *words, *saved_words, *source_words; - int swap = !(swap_rb == SWAP_NONE_DOWNLOADING || swap_rb == SWAP_NONE_UPLOADING); - - source_words = src_bits; - words = dst_bits; - saved_words = words; - - for (y = 0; y < h; y++) - { - DEBUGF("Line %d : ", y); - for (x = 0; x < w; x++) - { - unsigned int pixel = source_words[x]; - - if (revert == REVERT_DOWNLOADING_2_10_10_10) - GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, - 24, 8, 16, 8, 8, 8, 0, 8, - 30, 2, 20, 10, 10, 10, 0, 10) - else - GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, - 30, 2, 20, 10, 10, 10, 0, 10, - 24, 8, 16, 8, 8, 8, 0, 8); - DEBUGF("%x:%x ", pixel, words[x]); - } - DEBUGF("\n"); - words += stride / sizeof(*words); - source_words += stride / sizeof(*words); - } - DEBUGF("\n"); - return saved_words; + int x, y; + unsigned int *words, *saved_words, *source_words; + int swap = !(swap_rb == SWAP_NONE_DOWNLOADING || + swap_rb == SWAP_NONE_UPLOADING); + + source_words = src_bits; + words = dst_bits; + saved_words = words; + + for (y = 0; y < h; y++) { + DEBUGF("Line %d : ", y); + for (x = 0; x < w; x++) { + unsigned int pixel = source_words[x]; + + if (revert == REVERT_DOWNLOADING_2_10_10_10) + GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, + 24, 8, 16, 8, 8, 8, 0, 8, + 30, 2, 20, 10, 10, 10, 0, 10); + else + GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, + 30, 2, 20, 10, 10, 10, 0, 10, + 24, 8, 16, 8, 8, 8, 0, 8); + DEBUGF("%x:%x ", pixel, words[x]); + } + DEBUGF("\n"); + words += stride / sizeof(*words); + source_words += stride / sizeof(*words); + } + DEBUGF("\n"); + return saved_words; } static void * -_glamor_color_revert_x1b5g5r5(void *src_bits, void *dst_bits, int w, int h, int stride, int no_alpha, int revert, int swap_rb) +_glamor_color_revert_x1b5g5r5(void *src_bits, void *dst_bits, int w, int h, + int stride, int no_alpha, int revert, int swap_rb) { - int x,y; - unsigned short *words, *saved_words, *source_words; - int swap = !(swap_rb == SWAP_NONE_DOWNLOADING || swap_rb == SWAP_NONE_UPLOADING); - - words = dst_bits; - source_words = src_bits; - saved_words = words; - - for (y = 0; y < h; y++) - { - DEBUGF("Line %d : ", y); - for (x = 0; x < w; x++) - { - unsigned short pixel = source_words[x]; - - if (revert == REVERT_DOWNLOADING_1_5_5_5) - GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, - 0, 1, 1, 5, 6, 5, 11, 5, - 15, 1, 10, 5, 5, 5, 0, 5) - else - GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, - 15, 1, 10, 5, 5, 5, 0, 5, - 0, 1, 1, 5, 6, 5, 11, 5); - DEBUGF("%04x:%04x ", pixel, words[x]); - } - DEBUGF("\n"); - words += stride / sizeof(*words); - source_words += stride / sizeof(*words); - } - DEBUGF("\n"); - return saved_words; + int x, y; + unsigned short *words, *saved_words, *source_words; + int swap = !(swap_rb == SWAP_NONE_DOWNLOADING || + swap_rb == SWAP_NONE_UPLOADING); + + words = dst_bits; + source_words = src_bits; + saved_words = words; + + for (y = 0; y < h; y++) { + DEBUGF("Line %d : ", y); + for (x = 0; x < w; x++) { + unsigned short pixel = source_words[x]; + + if (revert == REVERT_DOWNLOADING_1_5_5_5) + GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, + 0, 1, 1, 5, 6, 5, 11, 5, + 15, 1, 10, 5, 5, 5, 0, 5); + else + GLAMOR_DO_CONVERT(pixel, &words[x], no_alpha, swap, + 15, 1, 10, 5, 5, 5, 0, 5, + 0, 1, 1, 5, 6, 5, 11, 5); + DEBUGF("%04x:%04x ", pixel, words[x]); + } + DEBUGF("\n"); + words += stride / sizeof(*words); + source_words += stride / sizeof(*words); + } + DEBUGF("\n"); + return saved_words; } /* @@ -364,18 +359,28 @@ _glamor_color_revert_x1b5g5r5(void *src_bits, void *dst_bits, int w, int h, int */ static void * -glamor_color_convert_to_bits(void *src_bits, void *dst_bits, int w, int h, int stride, int no_alpha, int revert, int swap_rb) +glamor_color_convert_to_bits(void *src_bits, void *dst_bits, int w, int h, + int stride, int no_alpha, int revert, int swap_rb) { - if (revert == REVERT_DOWNLOADING_A1 || revert == REVERT_UPLOADING_A1) { - return _glamor_color_convert_a1_a8(src_bits, dst_bits, w, h, stride, revert); - } else if (revert == REVERT_DOWNLOADING_2_10_10_10 || revert == REVERT_UPLOADING_2_10_10_10) { - return _glamor_color_revert_x2b10g10r10(src_bits, dst_bits, w, h, stride, no_alpha, revert, swap_rb); - } else if (revert == REVERT_DOWNLOADING_1_5_5_5 || revert == REVERT_UPLOADING_1_5_5_5) { - return _glamor_color_revert_x1b5g5r5(src_bits, dst_bits, w, h, stride, no_alpha, revert, swap_rb); - } else - ErrorF("convert a non-supported mode %x.\n", revert); - - return NULL; + if (revert == REVERT_DOWNLOADING_A1 || revert == REVERT_UPLOADING_A1) { + return _glamor_color_convert_a1_a8(src_bits, dst_bits, w, h, stride, + revert); + } + else if (revert == REVERT_DOWNLOADING_2_10_10_10 || + revert == REVERT_UPLOADING_2_10_10_10) { + return _glamor_color_revert_x2b10g10r10(src_bits, dst_bits, w, h, + stride, no_alpha, revert, + swap_rb); + } + else if (revert == REVERT_DOWNLOADING_1_5_5_5 || + revert == REVERT_UPLOADING_1_5_5_5) { + return _glamor_color_revert_x1b5g5r5(src_bits, dst_bits, w, h, stride, + no_alpha, revert, swap_rb); + } + else + ErrorF("convert a non-supported mode %x.\n", revert); + + return NULL; } /** @@ -385,198 +390,182 @@ glamor_color_convert_to_bits(void *src_bits, void *dst_bits, int w, int h, int s int in_restore = 0; static void __glamor_upload_pixmap_to_texture(PixmapPtr pixmap, unsigned int *tex, - GLenum format, - GLenum type, - int x, int y, int w, int h, - void *bits, int pbo) + GLenum format, + GLenum type, + int x, int y, int w, int h, + void *bits, int pbo) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch; - int non_sub = 0; - unsigned int iformat = 0; - - dispatch = glamor_get_dispatch(glamor_priv); - if (*tex == 0) { - dispatch->glGenTextures(1, tex); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - gl_iformat_for_depth(pixmap->drawable.depth, &iformat); - else - iformat = format; - non_sub = 1; - assert(x == 0 && y == 0); - } - - dispatch->glBindTexture(GL_TEXTURE_2D, *tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - dispatch->glPixelStorei(GL_UNPACK_ALIGNMENT, 4); - - if (bits == NULL) - dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, - pbo); - if (non_sub) - dispatch->glTexImage2D(GL_TEXTURE_2D, - 0, iformat, w, h, 0, - format, type, - bits); - else - dispatch->glTexSubImage2D(GL_TEXTURE_2D, - 0, x, y, w, h, - format, type, - bits); - - if (bits == NULL) - dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + glamor_gl_dispatch *dispatch; + int non_sub = 0; + unsigned int iformat = 0; + + dispatch = glamor_get_dispatch(glamor_priv); + if (*tex == 0) { + dispatch->glGenTextures(1, tex); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + gl_iformat_for_depth(pixmap->drawable.depth, &iformat); + else + iformat = format; + non_sub = 1; + assert(x == 0 && y == 0); + } + + dispatch->glBindTexture(GL_TEXTURE_2D, *tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + dispatch->glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + + if (bits == NULL) + dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, pbo); + if (non_sub) + dispatch->glTexImage2D(GL_TEXTURE_2D, + 0, iformat, w, h, 0, format, type, bits); + else + dispatch->glTexSubImage2D(GL_TEXTURE_2D, + 0, x, y, w, h, format, type, bits); + + if (bits == NULL) + dispatch->glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); + glamor_put_dispatch(glamor_priv); } static Bool -_glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, GLenum type, - int no_alpha, int revert, - int swap_rb, int x, int y, int w, int h, - int stride, void* bits, int pbo) +_glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, + GLenum type, int no_alpha, int revert, + int swap_rb, int x, int y, int w, int h, + int stride, void *bits, int pbo) { - glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - glamor_screen_private *glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch; - static float vertices[8]; - static float texcoords[8] = { 0, 1, - 1, 1, - 1, 0, - 0, 0 - }; - static float texcoords_inv[8] = { 0, 0, - 1, 0, - 1, 1, - 0, 1 - }; - float *ptexcoords; - float dst_xscale, dst_yscale; - GLuint tex = 0; - int need_flip; - int need_free_bits = 0; - - need_flip = !glamor_priv->yInverted; - - if (bits == NULL) - goto ready_to_upload; - - if (revert > REVERT_NORMAL) { - /* XXX if we are restoring the pixmap, then we may not need to allocate - * new buffer */ - void *converted_bits; - - if (pixmap->drawable.depth == 1) - stride = (((w * 8 + 7) / 8) + 3) & ~3; - - converted_bits = malloc(h * stride); - - if (converted_bits == NULL) - return FALSE; - bits = glamor_color_convert_to_bits(bits, converted_bits, w, h, - stride, - no_alpha, revert, swap_rb); - if (bits == NULL) { - ErrorF("Failed to convert pixmap no_alpha %d," - "revert mode %d, swap mode %d\n", no_alpha, revert, swap_rb); - return FALSE; - } - no_alpha = 0; - revert = REVERT_NONE; - swap_rb = SWAP_NONE_UPLOADING; - need_free_bits = TRUE; - } - -ready_to_upload: - - /* Try fast path firstly, upload the pixmap to the texture attached - * to the fbo directly. */ - if (no_alpha == 0 - && revert == REVERT_NONE - && swap_rb == SWAP_NONE_UPLOADING - && !need_flip + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + glamor_gl_dispatch *dispatch; + static float vertices[8]; + + static float texcoords[8] = { 0, 1, + 1, 1, + 1, 0, + 0, 0 + }; + static float texcoords_inv[8] = { 0, 0, + 1, 0, + 1, 1, + 0, 1 + }; + float *ptexcoords; + float dst_xscale, dst_yscale; + GLuint tex = 0; + int need_flip; + int need_free_bits = 0; + + need_flip = !glamor_priv->yInverted; + + if (bits == NULL) + goto ready_to_upload; + + if (revert > REVERT_NORMAL) { + /* XXX if we are restoring the pixmap, then we may not need to allocate + * new buffer */ + void *converted_bits; + + if (pixmap->drawable.depth == 1) + stride = (((w * 8 + 7) / 8) + 3) & ~3; + + converted_bits = malloc(h * stride); + + if (converted_bits == NULL) + return FALSE; + bits = glamor_color_convert_to_bits(bits, converted_bits, w, h, + stride, no_alpha, revert, swap_rb); + if (bits == NULL) { + ErrorF("Failed to convert pixmap no_alpha %d," + "revert mode %d, swap mode %d\n", no_alpha, revert, swap_rb); + return FALSE; + } + no_alpha = 0; + revert = REVERT_NONE; + swap_rb = SWAP_NONE_UPLOADING; + need_free_bits = TRUE; + } + + ready_to_upload: + + /* Try fast path firstly, upload the pixmap to the texture attached + * to the fbo directly. */ + if (no_alpha == 0 + && revert == REVERT_NONE && swap_rb == SWAP_NONE_UPLOADING && !need_flip #ifdef WALKAROUND_LARGE_TEXTURE_MAP - && pixmap_priv->type != GLAMOR_TEXTURE_LARGE + && pixmap_priv->type != GLAMOR_TEXTURE_LARGE #endif - ) { - int fbo_x_off, fbo_y_off; - assert(pixmap_priv->base.fbo->tex); - pixmap_priv_get_fbo_off(pixmap_priv, &fbo_x_off, &fbo_y_off); - - assert(x + fbo_x_off >= 0 && y + fbo_y_off >= 0); - assert(x + fbo_x_off + w <= pixmap_priv->base.fbo->width); - assert(y + fbo_y_off + h <= pixmap_priv->base.fbo->height); - __glamor_upload_pixmap_to_texture(pixmap, &pixmap_priv->base.fbo->tex, - format, type, - x + fbo_x_off, y + fbo_y_off, w, h, - bits, pbo); - return TRUE; - } - - if (need_flip) - ptexcoords = texcoords; - else - ptexcoords = texcoords_inv; - - pixmap_priv_get_dest_scale(pixmap_priv, &dst_xscale, &dst_yscale); - glamor_set_normalize_vcoords(pixmap_priv, dst_xscale, - dst_yscale, - x, y, - x + w, y + h, - glamor_priv->yInverted, - vertices); - /* Slow path, we need to flip y or wire alpha to 1. */ - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - ptexcoords); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - __glamor_upload_pixmap_to_texture(pixmap, &tex, - format, type, - 0, 0, w, h, - bits, pbo); - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glBindTexture(GL_TEXTURE_2D, tex); - - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); + ) { + int fbo_x_off, fbo_y_off; + + assert(pixmap_priv->base.fbo->tex); + pixmap_priv_get_fbo_off(pixmap_priv, &fbo_x_off, &fbo_y_off); + + assert(x + fbo_x_off >= 0 && y + fbo_y_off >= 0); + assert(x + fbo_x_off + w <= pixmap_priv->base.fbo->width); + assert(y + fbo_y_off + h <= pixmap_priv->base.fbo->height); + __glamor_upload_pixmap_to_texture(pixmap, &pixmap_priv->base.fbo->tex, + format, type, + x + fbo_x_off, y + fbo_y_off, w, h, + bits, pbo); + return TRUE; + } + + if (need_flip) + ptexcoords = texcoords; + else + ptexcoords = texcoords_inv; + + pixmap_priv_get_dest_scale(pixmap_priv, &dst_xscale, &dst_yscale); + glamor_set_normalize_vcoords(pixmap_priv, dst_xscale, + dst_yscale, + x, y, + x + w, y + h, + glamor_priv->yInverted, vertices); + /* Slow path, we need to flip y or wire alpha to 1. */ + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), ptexcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + __glamor_upload_pixmap_to_texture(pixmap, &tex, + format, type, 0, 0, w, h, bits, pbo); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, tex); + + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); #ifndef GLAMOR_GLES2 - dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glEnable(GL_TEXTURE_2D); #endif - dispatch->glUseProgram(glamor_priv->finish_access_prog[no_alpha]); - dispatch->glUniform1i(glamor_priv-> - finish_access_revert[no_alpha], - revert); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[no_alpha], - swap_rb); + dispatch->glUseProgram(glamor_priv->finish_access_prog[no_alpha]); + dispatch->glUniform1i(glamor_priv->finish_access_revert[no_alpha], revert); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[no_alpha], + swap_rb); - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); #ifndef GLAMOR_GLES2 - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glDisable(GL_TEXTURE_2D); #endif - dispatch->glUseProgram(0); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDeleteTextures(1, &tex); - dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); + dispatch->glUseProgram(0); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDeleteTextures(1, &tex); + dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); - glamor_put_dispatch(glamor_priv); + glamor_put_dispatch(glamor_priv); - if (need_free_bits) - free(bits); - return TRUE; + if (need_free_bits) + free(bits); + return TRUE; } /* @@ -587,54 +576,53 @@ ready_to_upload: * 2. no_alpha != 0, we need to wire the alpha. * */ static int -glamor_pixmap_upload_prepare(PixmapPtr pixmap, GLenum format, int no_alpha, int revert, int swap_rb) +glamor_pixmap_upload_prepare(PixmapPtr pixmap, GLenum format, int no_alpha, + int revert, int swap_rb) { - int flag = 0; - glamor_pixmap_private *pixmap_priv; - glamor_screen_private *glamor_priv; - glamor_pixmap_fbo *fbo; - GLenum iformat; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - - if (pixmap_priv->base.gl_fbo) - return 0; - - if (pixmap_priv->base.fbo - && (pixmap_priv->base.fbo->width < pixmap->drawable.width - || pixmap_priv->base.fbo->height < pixmap->drawable.height)) { - fbo = glamor_pixmap_detach_fbo(pixmap_priv); - glamor_destroy_fbo(fbo); - } - - if (pixmap_priv->base.fbo && pixmap_priv->base.fbo->fb) - return 0; - - if (!(no_alpha - || (revert == REVERT_NORMAL) - || (swap_rb != SWAP_NONE_UPLOADING) - || !glamor_priv->yInverted)) { - /* We don't need a fbo, a simple texture uploading should work. */ - - flag = GLAMOR_CREATE_FBO_NO_FBO; - } - - if ((flag == GLAMOR_CREATE_FBO_NO_FBO - && pixmap_priv->base.fbo && pixmap_priv->base.fbo->tex) - || (flag == 0 - && pixmap_priv->base.fbo && pixmap_priv->base.fbo->fb)) - return 0; - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - gl_iformat_for_depth(pixmap->drawable.depth, &iformat); - else - iformat = format; - - if (!glamor_pixmap_ensure_fbo(pixmap, iformat, flag)) - return -1; - - return 0; + int flag = 0; + glamor_pixmap_private *pixmap_priv; + glamor_screen_private *glamor_priv; + glamor_pixmap_fbo *fbo; + GLenum iformat; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); + + if (pixmap_priv->base.gl_fbo) + return 0; + + if (pixmap_priv->base.fbo + && (pixmap_priv->base.fbo->width < pixmap->drawable.width + || pixmap_priv->base.fbo->height < pixmap->drawable.height)) { + fbo = glamor_pixmap_detach_fbo(pixmap_priv); + glamor_destroy_fbo(fbo); + } + + if (pixmap_priv->base.fbo && pixmap_priv->base.fbo->fb) + return 0; + + if (!(no_alpha || (revert == REVERT_NORMAL) + || (swap_rb != SWAP_NONE_UPLOADING) + || !glamor_priv->yInverted)) { + /* We don't need a fbo, a simple texture uploading should work. */ + + flag = GLAMOR_CREATE_FBO_NO_FBO; + } + + if ((flag == GLAMOR_CREATE_FBO_NO_FBO + && pixmap_priv->base.fbo && pixmap_priv->base.fbo->tex) + || (flag == 0 && pixmap_priv->base.fbo && pixmap_priv->base.fbo->fb)) + return 0; + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + gl_iformat_for_depth(pixmap->drawable.depth, &iformat); + else + iformat = format; + + if (!glamor_pixmap_ensure_fbo(pixmap, iformat, flag)) + return -1; + + return 0; } /* @@ -642,185 +630,188 @@ glamor_pixmap_upload_prepare(PixmapPtr pixmap, GLenum format, int no_alpha, int * */ static void glamor_put_bits(char *dst_bits, int dst_stride, char *src_bits, - int src_stride, int bpp, - int x, int y, int w, int h) + int src_stride, int bpp, int x, int y, int w, int h) { - int j; - int byte_per_pixel; - - byte_per_pixel = bpp / 8; - src_bits += y * src_stride + (x * byte_per_pixel); - - for(j = y; j < y + h; j++) - { - memcpy(dst_bits, src_bits, w * byte_per_pixel); - src_bits += src_stride; - dst_bits += dst_stride; - } + int j; + int byte_per_pixel; + + byte_per_pixel = bpp / 8; + src_bits += y * src_stride + (x * byte_per_pixel); + + for (j = y; j < y + h; j++) { + memcpy(dst_bits, src_bits, w * byte_per_pixel); + src_bits += src_stride; + dst_bits += dst_stride; + } } + /* * download sub region from a large region. */ static void glamor_get_bits(char *dst_bits, int dst_stride, char *src_bits, - int src_stride, int bpp, - int x, int y, int w, int h) + int src_stride, int bpp, int x, int y, int w, int h) { - int j; - int byte_per_pixel; - - byte_per_pixel = bpp / 8; - dst_bits += y * dst_stride + x * byte_per_pixel; - - for(j = y; j < y + h; j++) - { - memcpy(dst_bits, src_bits, w * byte_per_pixel); - src_bits += src_stride; - dst_bits += dst_stride; - } -} + int j; + int byte_per_pixel; + byte_per_pixel = bpp / 8; + dst_bits += y * dst_stride + x * byte_per_pixel; + + for (j = y; j < y + h; j++) { + memcpy(dst_bits, src_bits, w * byte_per_pixel); + src_bits += src_stride; + dst_bits += dst_stride; + } +} Bool -glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, int h, - int stride, void *bits, int pbo) +glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, + int h, int stride, void *bits, int pbo) { - GLenum format, type; - int no_alpha, revert, swap_rb; - glamor_pixmap_private *pixmap_priv; - Bool force_clip; - - if (glamor_get_tex_format_type_from_pixmap(pixmap, - &format, - &type, - &no_alpha, - &revert, - &swap_rb, 1)) { - glamor_fallback("Unknown pixmap depth %d.\n", - pixmap->drawable.depth); - return TRUE; - } - if (glamor_pixmap_upload_prepare(pixmap, format, no_alpha, revert, swap_rb)) - return FALSE; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - force_clip = pixmap_priv->base.glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP - && !glamor_check_fbo_size(pixmap_priv->base.glamor_priv, w, h); - - if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { - RegionRec region; - BoxRec box; - int n_region; - glamor_pixmap_clipped_regions *clipped_regions; - void *sub_bits; - int i,j; - - sub_bits = malloc(h * stride); - if (sub_bits == NULL) - return FALSE; - box.x1 = x; - box.y1 = y; - box.x2 = x + w; - box.y2 = y + h; - RegionInitBoxes(®ion, &box, 1); - if (!force_clip) - clipped_regions = glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, 0, 0, 0); - else - clipped_regions = glamor_compute_clipped_regions_ext(pixmap_priv, ®ion, &n_region, - pixmap_priv->base.glamor_priv->max_fbo_size, - pixmap_priv->base.glamor_priv->max_fbo_size, 0, 0); - DEBUGF("prepare upload %dx%d to a large pixmap %p\n", w, h, pixmap); - for(i = 0; i < n_region; i++) - { - BoxPtr boxes; - int nbox; - int temp_stride; - void *temp_bits; - - assert(pbo == 0); - - SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); - - boxes = RegionRects(clipped_regions[i].region); - nbox = RegionNumRects(clipped_regions[i].region); - DEBUGF("split to %d boxes\n", nbox); - for(j = 0; j < nbox; j++) - { - temp_stride = PixmapBytePad(boxes[j].x2 - boxes[j].x1, - pixmap->drawable.depth); - - if (boxes[j].x1 == x && temp_stride == stride) { - temp_bits = (char*)bits + (boxes[j].y1 - y) * stride; - } else { - temp_bits = sub_bits; - glamor_put_bits(temp_bits, temp_stride, bits, stride, - pixmap->drawable.bitsPerPixel, - boxes[j].x1 - x, boxes[j].y1 - y, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1); - } - DEBUGF("upload x %d y %d w %d h %d temp stride %d \n", - boxes[j].x1 - x, boxes[j].y1 - y, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1, temp_stride); - if (_glamor_upload_bits_to_pixmap_texture(pixmap, format, type, no_alpha, - revert, swap_rb, boxes[j].x1, boxes[j].y1, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1, - temp_stride, temp_bits, pbo) == FALSE) { - RegionUninit(®ion); - free(sub_bits); - assert(0); - return FALSE; - } - } - RegionDestroy(clipped_regions[i].region); - } - free(sub_bits); - free(clipped_regions); - RegionUninit(®ion); - return TRUE; - } else - return _glamor_upload_bits_to_pixmap_texture(pixmap, format, type, no_alpha, revert, swap_rb, - x, y, w, h, stride, bits, pbo); + GLenum format, type; + int no_alpha, revert, swap_rb; + glamor_pixmap_private *pixmap_priv; + Bool force_clip; + + if (glamor_get_tex_format_type_from_pixmap(pixmap, + &format, + &type, + &no_alpha, + &revert, &swap_rb, 1)) { + glamor_fallback("Unknown pixmap depth %d.\n", pixmap->drawable.depth); + return TRUE; + } + if (glamor_pixmap_upload_prepare(pixmap, format, no_alpha, revert, swap_rb)) + return FALSE; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + force_clip = pixmap_priv->base.glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP + && !glamor_check_fbo_size(pixmap_priv->base.glamor_priv, w, h); + + if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { + RegionRec region; + BoxRec box; + int n_region; + glamor_pixmap_clipped_regions *clipped_regions; + void *sub_bits; + int i, j; + + sub_bits = malloc(h * stride); + if (sub_bits == NULL) + return FALSE; + box.x1 = x; + box.y1 = y; + box.x2 = x + w; + box.y2 = y + h; + RegionInitBoxes(®ion, &box, 1); + if (!force_clip) + clipped_regions = + glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, + 0, 0, 0); + else + clipped_regions = + glamor_compute_clipped_regions_ext(pixmap_priv, ®ion, + &n_region, + pixmap_priv->base. + glamor_priv->max_fbo_size, + pixmap_priv->base. + glamor_priv->max_fbo_size, 0, + 0); + DEBUGF("prepare upload %dx%d to a large pixmap %p\n", w, h, pixmap); + for (i = 0; i < n_region; i++) { + BoxPtr boxes; + int nbox; + int temp_stride; + void *temp_bits; + + assert(pbo == 0); + + SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); + + boxes = RegionRects(clipped_regions[i].region); + nbox = RegionNumRects(clipped_regions[i].region); + DEBUGF("split to %d boxes\n", nbox); + for (j = 0; j < nbox; j++) { + temp_stride = PixmapBytePad(boxes[j].x2 - boxes[j].x1, + pixmap->drawable.depth); + + if (boxes[j].x1 == x && temp_stride == stride) { + temp_bits = (char *) bits + (boxes[j].y1 - y) * stride; + } + else { + temp_bits = sub_bits; + glamor_put_bits(temp_bits, temp_stride, bits, stride, + pixmap->drawable.bitsPerPixel, + boxes[j].x1 - x, boxes[j].y1 - y, + boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1); + } + DEBUGF("upload x %d y %d w %d h %d temp stride %d \n", + boxes[j].x1 - x, boxes[j].y1 - y, + boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1, temp_stride); + if (_glamor_upload_bits_to_pixmap_texture + (pixmap, format, type, no_alpha, revert, swap_rb, + boxes[j].x1, boxes[j].y1, boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1, temp_stride, temp_bits, + pbo) == FALSE) { + RegionUninit(®ion); + free(sub_bits); + assert(0); + return FALSE; + } + } + RegionDestroy(clipped_regions[i].region); + } + free(sub_bits); + free(clipped_regions); + RegionUninit(®ion); + return TRUE; + } + else + return _glamor_upload_bits_to_pixmap_texture(pixmap, format, type, + no_alpha, revert, swap_rb, + x, y, w, h, stride, bits, + pbo); } enum glamor_pixmap_status glamor_upload_pixmap_to_texture(PixmapPtr pixmap) { - glamor_pixmap_private *pixmap_priv; - void *data; - int pbo; - int ret; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if ((pixmap_priv->base.fbo) - && (pixmap_priv->base.fbo->pbo_valid)) { - data = NULL; - pbo = pixmap_priv->base.fbo->pbo; - } else { - data = pixmap->devPrivate.ptr; - pbo = 0; - } - - if (glamor_upload_sub_pixmap_to_texture(pixmap, 0, 0, - pixmap->drawable.width, - pixmap->drawable.height, - pixmap->devKind, - data, pbo)) - ret = GLAMOR_UPLOAD_DONE; - else - ret = GLAMOR_UPLOAD_FAILED; - - return ret; + glamor_pixmap_private *pixmap_priv; + void *data; + int pbo; + int ret; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if ((pixmap_priv->base.fbo) + && (pixmap_priv->base.fbo->pbo_valid)) { + data = NULL; + pbo = pixmap_priv->base.fbo->pbo; + } + else { + data = pixmap->devPrivate.ptr; + pbo = 0; + } + + if (glamor_upload_sub_pixmap_to_texture(pixmap, 0, 0, + pixmap->drawable.width, + pixmap->drawable.height, + pixmap->devKind, data, pbo)) + ret = GLAMOR_UPLOAD_DONE; + else + ret = GLAMOR_UPLOAD_FAILED; + + return ret; } void glamor_restore_pixmap_to_texture(PixmapPtr pixmap) { - if (glamor_upload_pixmap_to_texture(pixmap) != GLAMOR_UPLOAD_DONE) - LogMessage(X_WARNING, "Failed to restore pixmap to texture.\n"); + if (glamor_upload_pixmap_to_texture(pixmap) != GLAMOR_UPLOAD_DONE) + LogMessage(X_WARNING, "Failed to restore pixmap to texture.\n"); } /* @@ -832,83 +823,68 @@ glamor_restore_pixmap_to_texture(PixmapPtr pixmap) * */ glamor_pixmap_fbo * -glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, GLenum format, - GLenum type, int no_alpha, int revert, int swap_rb) - +glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, + GLenum format, GLenum type, int no_alpha, + int revert, int swap_rb) { - glamor_pixmap_private *source_priv; - glamor_screen_private *glamor_priv; - ScreenPtr screen; - glamor_pixmap_fbo *temp_fbo; - glamor_gl_dispatch *dispatch; - float temp_xscale, temp_yscale, source_xscale, source_yscale; - static float vertices[8]; - static float texcoords[8]; - - screen = source->drawable.pScreen; - - glamor_priv = glamor_get_screen_private(screen); - source_priv = glamor_get_pixmap_private(source); - temp_fbo = glamor_create_fbo(glamor_priv, - w, h, - format, - 0); - if (temp_fbo == NULL) - return NULL; - - dispatch = glamor_get_dispatch(glamor_priv); - temp_xscale = 1.0 / w; - temp_yscale = 1.0 / h; - - glamor_set_normalize_vcoords((struct glamor_pixmap_private*)NULL,temp_xscale, - temp_yscale, - 0, 0, - w, h, - glamor_priv->yInverted, - vertices); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - - pixmap_priv_get_scale(source_priv, &source_xscale, &source_yscale); - glamor_set_normalize_tcoords(source_priv, source_xscale, - source_yscale, - x, y, - x + w, y + h, - glamor_priv->yInverted, - texcoords); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - texcoords); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glBindTexture(GL_TEXTURE_2D, source_priv->base.fbo->tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - - glamor_set_destination_pixmap_fbo(temp_fbo, 0, 0, w, h); - dispatch->glUseProgram(glamor_priv->finish_access_prog[no_alpha]); - dispatch->glUniform1i(glamor_priv-> - finish_access_revert[no_alpha], - revert); - dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[no_alpha], - swap_rb); - - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - return temp_fbo; + glamor_pixmap_private *source_priv; + glamor_screen_private *glamor_priv; + ScreenPtr screen; + glamor_pixmap_fbo *temp_fbo; + glamor_gl_dispatch *dispatch; + float temp_xscale, temp_yscale, source_xscale, source_yscale; + static float vertices[8]; + static float texcoords[8]; + + screen = source->drawable.pScreen; + + glamor_priv = glamor_get_screen_private(screen); + source_priv = glamor_get_pixmap_private(source); + temp_fbo = glamor_create_fbo(glamor_priv, w, h, format, 0); + if (temp_fbo == NULL) + return NULL; + + dispatch = glamor_get_dispatch(glamor_priv); + temp_xscale = 1.0 / w; + temp_yscale = 1.0 / h; + + glamor_set_normalize_vcoords((struct glamor_pixmap_private *) NULL, + temp_xscale, temp_yscale, 0, 0, w, h, + glamor_priv->yInverted, vertices); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + + pixmap_priv_get_scale(source_priv, &source_xscale, &source_yscale); + glamor_set_normalize_tcoords(source_priv, source_xscale, + source_yscale, + x, y, + x + w, y + h, + glamor_priv->yInverted, texcoords); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), texcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, source_priv->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + + glamor_set_destination_pixmap_fbo(temp_fbo, 0, 0, w, h); + dispatch->glUseProgram(glamor_priv->finish_access_prog[no_alpha]); + dispatch->glUniform1i(glamor_priv->finish_access_revert[no_alpha], revert); + dispatch->glUniform1i(glamor_priv->finish_access_swap_rb[no_alpha], + swap_rb); + + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + return temp_fbo; } /* @@ -918,263 +894,263 @@ glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, GLe static void * _glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, GLenum format, - GLenum type, int no_alpha, - int revert, int swap_rb, - int x, int y, int w, int h, - int stride, void *bits, int pbo, glamor_access_t access) + GLenum type, int no_alpha, + int revert, int swap_rb, + int x, int y, int w, int h, + int stride, void *bits, int pbo, + glamor_access_t access) { - glamor_pixmap_private *pixmap_priv; - GLenum gl_access = 0, gl_usage = 0; - void *data, *read; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch; - glamor_pixmap_fbo *temp_fbo = NULL; - int need_post_conversion = 0; - int need_free_data = 0; - int fbo_x_off, fbo_y_off; - - data = bits; - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return NULL; - - switch (access) { - case GLAMOR_ACCESS_RO: - gl_access = GL_READ_ONLY; - gl_usage = GL_STREAM_READ; - break; - case GLAMOR_ACCESS_WO: - return bits; - case GLAMOR_ACCESS_RW: - gl_access = GL_READ_WRITE; - gl_usage = GL_DYNAMIC_DRAW; - break; - default: - ErrorF("Glamor: Invalid access code. %d\n", access); - assert(0); - } - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - - need_post_conversion = (revert > REVERT_NORMAL); - if (need_post_conversion) { - if (pixmap->drawable.depth == 1) { - int temp_stride; - temp_stride = (((w * 8 + 7) / 8) + 3) & ~3; - data = malloc(temp_stride * h); - if (data == NULL) - return NULL; - need_free_data = 1; - } - } - - pixmap_priv_get_fbo_off(pixmap_priv, &fbo_x_off, &fbo_y_off); - - if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 - && !need_post_conversion - && (swap_rb != SWAP_NONE_DOWNLOADING || revert != REVERT_NONE)) { - if (!(temp_fbo = glamor_es2_pixmap_read_prepare(pixmap, x, y, w, h, - format, type, no_alpha, - revert, swap_rb))) { - free(data); - return NULL; - } - x = 0; - y = 0; - fbo_x_off = 0; - fbo_y_off = 0; - } - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glPixelStorei(GL_PACK_ALIGNMENT, 4); - - if (glamor_priv->has_pack_invert || glamor_priv->yInverted) { - - if (!glamor_priv->yInverted) { - assert(glamor_priv->gl_flavor == - GLAMOR_GL_DESKTOP); - dispatch->glPixelStorei(GL_PACK_INVERT_MESA, 1); - } - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && data == NULL) { - assert(pbo > 0); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo); - dispatch->glBufferData(GL_PIXEL_PACK_BUFFER, - stride * - h, - NULL, gl_usage); - } - - dispatch->glReadPixels(x + fbo_x_off, y + fbo_y_off, w, h, format, type, data); - - if (!glamor_priv->yInverted) { - assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); - dispatch->glPixelStorei(GL_PACK_INVERT_MESA, 0); - } - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && bits == NULL) { - bits = dispatch->glMapBuffer(GL_PIXEL_PACK_BUFFER, - gl_access); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - } - } else { - unsigned int temp_pbo; - int yy; - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glGenBuffers(1, &temp_pbo); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, - temp_pbo); - dispatch->glBufferData(GL_PIXEL_PACK_BUFFER, - stride * - h, - NULL, GL_STREAM_READ); - dispatch->glReadPixels(x + fbo_x_off, y + fbo_y_off, w, h, - format, type, 0); - read = dispatch->glMapBuffer(GL_PIXEL_PACK_BUFFER, - GL_READ_ONLY); - for (yy = 0; yy < pixmap->drawable.height; yy++) - memcpy((char*)data + yy * stride, - (char*)read + (h - yy - 1) * stride, stride); - dispatch->glUnmapBuffer(GL_PIXEL_PACK_BUFFER); - dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); - dispatch->glDeleteBuffers(1, &temp_pbo); - } - - dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); - glamor_put_dispatch(glamor_priv); - - if (need_post_conversion) { - /* As OpenGL desktop version never enters here. - * Don't need to consider if the pbo is valid.*/ - bits = glamor_color_convert_to_bits(data, bits, - w, h, - stride, - no_alpha, - revert, swap_rb); - } - - if (temp_fbo != NULL) - glamor_destroy_fbo(temp_fbo); - if (need_free_data) - free(data); - - return bits; + glamor_pixmap_private *pixmap_priv; + GLenum gl_access = 0, gl_usage = 0; + void *data, *read; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + glamor_gl_dispatch *dispatch; + glamor_pixmap_fbo *temp_fbo = NULL; + int need_post_conversion = 0; + int need_free_data = 0; + int fbo_x_off, fbo_y_off; + + data = bits; + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return NULL; + + switch (access) { + case GLAMOR_ACCESS_RO: + gl_access = GL_READ_ONLY; + gl_usage = GL_STREAM_READ; + break; + case GLAMOR_ACCESS_WO: + return bits; + case GLAMOR_ACCESS_RW: + gl_access = GL_READ_WRITE; + gl_usage = GL_DYNAMIC_DRAW; + break; + default: + ErrorF("Glamor: Invalid access code. %d\n", access); + assert(0); + } + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + need_post_conversion = (revert > REVERT_NORMAL); + if (need_post_conversion) { + if (pixmap->drawable.depth == 1) { + int temp_stride; + + temp_stride = (((w * 8 + 7) / 8) + 3) & ~3; + data = malloc(temp_stride * h); + if (data == NULL) + return NULL; + need_free_data = 1; + } + } + + pixmap_priv_get_fbo_off(pixmap_priv, &fbo_x_off, &fbo_y_off); + + if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 + && !need_post_conversion + && (swap_rb != SWAP_NONE_DOWNLOADING || revert != REVERT_NONE)) { + if (!(temp_fbo = glamor_es2_pixmap_read_prepare(pixmap, x, y, w, h, + format, type, no_alpha, + revert, swap_rb))) { + free(data); + return NULL; + } + x = 0; + y = 0; + fbo_x_off = 0; + fbo_y_off = 0; + } + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glPixelStorei(GL_PACK_ALIGNMENT, 4); + + if (glamor_priv->has_pack_invert || glamor_priv->yInverted) { + + if (!glamor_priv->yInverted) { + assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); + dispatch->glPixelStorei(GL_PACK_INVERT_MESA, 1); + } + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && data == NULL) { + assert(pbo > 0); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, pbo); + dispatch->glBufferData(GL_PIXEL_PACK_BUFFER, + stride * h, NULL, gl_usage); + } + + dispatch->glReadPixels(x + fbo_x_off, y + fbo_y_off, w, h, format, type, + data); + + if (!glamor_priv->yInverted) { + assert(glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP); + dispatch->glPixelStorei(GL_PACK_INVERT_MESA, 0); + } + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP && bits == NULL) { + bits = dispatch->glMapBuffer(GL_PIXEL_PACK_BUFFER, gl_access); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + } + } + else { + unsigned int temp_pbo; + int yy; + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glGenBuffers(1, &temp_pbo); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, temp_pbo); + dispatch->glBufferData(GL_PIXEL_PACK_BUFFER, + stride * h, NULL, GL_STREAM_READ); + dispatch->glReadPixels(x + fbo_x_off, y + fbo_y_off, w, h, + format, type, 0); + read = dispatch->glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY); + for (yy = 0; yy < pixmap->drawable.height; yy++) + memcpy((char *) data + yy * stride, + (char *) read + (h - yy - 1) * stride, stride); + dispatch->glUnmapBuffer(GL_PIXEL_PACK_BUFFER); + dispatch->glBindBuffer(GL_PIXEL_PACK_BUFFER, 0); + dispatch->glDeleteBuffers(1, &temp_pbo); + } + + dispatch->glBindFramebuffer(GL_FRAMEBUFFER, 0); + glamor_put_dispatch(glamor_priv); + + if (need_post_conversion) { + /* As OpenGL desktop version never enters here. + * Don't need to consider if the pbo is valid.*/ + bits = glamor_color_convert_to_bits(data, bits, + w, h, + stride, no_alpha, revert, swap_rb); + } + + if (temp_fbo != NULL) + glamor_destroy_fbo(temp_fbo); + if (need_free_data) + free(data); + + return bits; } void * glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, int h, - int stride, void *bits, int pbo, glamor_access_t access) + int stride, void *bits, int pbo, + glamor_access_t access) { - GLenum format, type; - int no_alpha, revert, swap_rb; - glamor_pixmap_private *pixmap_priv; - Bool force_clip; - - if (glamor_get_tex_format_type_from_pixmap(pixmap, - &format, - &type, - &no_alpha, - &revert, - &swap_rb, 0)) { - glamor_fallback("Unknown pixmap depth %d.\n", - pixmap->drawable.depth); - return NULL; - } - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return NULL; - - force_clip = pixmap_priv->base.glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP - && !glamor_check_fbo_size(pixmap_priv->base.glamor_priv, w, h); - - if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { - - RegionRec region; - BoxRec box; - int n_region; - glamor_pixmap_clipped_regions *clipped_regions; - void *sub_bits; - int i,j; - - sub_bits = malloc(h * stride); - if (sub_bits == NULL) - return FALSE; - box.x1 = x; - box.y1 = y; - box.x2 = x + w; - box.y2 = y + h; - RegionInitBoxes(®ion, &box, 1); - - if (!force_clip) - clipped_regions = glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, 0, 0, 0); - else - clipped_regions = glamor_compute_clipped_regions_ext(pixmap_priv, ®ion, &n_region, - pixmap_priv->base.glamor_priv->max_fbo_size, - pixmap_priv->base.glamor_priv->max_fbo_size, 0, 0); - - DEBUGF("start download large pixmap %p %dx%d \n", pixmap, w, h); - for(i = 0; i < n_region; i++) - { - BoxPtr boxes; - int nbox; - int temp_stride; - void *temp_bits; - - assert(pbo == 0); - SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); - - boxes = RegionRects(clipped_regions[i].region); - nbox = RegionNumRects(clipped_regions[i].region); - for(j = 0; j < nbox; j++) - { - temp_stride = PixmapBytePad(boxes[j].x2 - boxes[j].x1, - pixmap->drawable.depth); - - if (boxes[j].x1 == x && temp_stride == stride) { - temp_bits = (char*)bits + (boxes[j].y1 - y) * stride; - } else { - temp_bits = sub_bits; - } - DEBUGF("download x %d y %d w %d h %d temp stride %d \n", - boxes[j].x1, boxes[j].y1, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1, temp_stride); - - /* For large pixmap, we don't support pbo currently.*/ - assert(pbo == 0); - if (_glamor_download_sub_pixmap_to_cpu(pixmap, format, type, no_alpha, - revert, swap_rb, boxes[j].x1, boxes[j].y1, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1, - temp_stride, temp_bits, pbo, access) == FALSE) { - RegionUninit(®ion); - free(sub_bits); - assert(0); - return NULL; - } - if (boxes[j].x1 != x || temp_stride != stride) - glamor_get_bits(bits, stride, temp_bits, temp_stride, - pixmap->drawable.bitsPerPixel, - boxes[j].x1 - x , boxes[j].y1 - y, - boxes[j].x2 - boxes[j].x1, - boxes[j].y2 - boxes[j].y1); - } - - RegionDestroy(clipped_regions[i].region); - } - free(sub_bits); - free(clipped_regions); - RegionUninit(®ion); - return bits; - } else - return _glamor_download_sub_pixmap_to_cpu(pixmap, format, type, no_alpha, revert, swap_rb, - x, y, w, h, stride, - bits, pbo, access); + GLenum format, type; + int no_alpha, revert, swap_rb; + glamor_pixmap_private *pixmap_priv; + Bool force_clip; + + if (glamor_get_tex_format_type_from_pixmap(pixmap, + &format, + &type, + &no_alpha, + &revert, &swap_rb, 0)) { + glamor_fallback("Unknown pixmap depth %d.\n", pixmap->drawable.depth); + return NULL; + } + + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return NULL; + + force_clip = pixmap_priv->base.glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP + && !glamor_check_fbo_size(pixmap_priv->base.glamor_priv, w, h); + + if (pixmap_priv->type == GLAMOR_TEXTURE_LARGE || force_clip) { + + RegionRec region; + BoxRec box; + int n_region; + glamor_pixmap_clipped_regions *clipped_regions; + void *sub_bits; + int i, j; + + sub_bits = malloc(h * stride); + if (sub_bits == NULL) + return FALSE; + box.x1 = x; + box.y1 = y; + box.x2 = x + w; + box.y2 = y + h; + RegionInitBoxes(®ion, &box, 1); + + if (!force_clip) + clipped_regions = + glamor_compute_clipped_regions(pixmap_priv, ®ion, &n_region, + 0, 0, 0); + else + clipped_regions = + glamor_compute_clipped_regions_ext(pixmap_priv, ®ion, + &n_region, + pixmap_priv->base. + glamor_priv->max_fbo_size, + pixmap_priv->base. + glamor_priv->max_fbo_size, 0, + 0); + + DEBUGF("start download large pixmap %p %dx%d \n", pixmap, w, h); + for (i = 0; i < n_region; i++) { + BoxPtr boxes; + int nbox; + int temp_stride; + void *temp_bits; + + assert(pbo == 0); + SET_PIXMAP_FBO_CURRENT(pixmap_priv, clipped_regions[i].block_idx); + + boxes = RegionRects(clipped_regions[i].region); + nbox = RegionNumRects(clipped_regions[i].region); + for (j = 0; j < nbox; j++) { + temp_stride = PixmapBytePad(boxes[j].x2 - boxes[j].x1, + pixmap->drawable.depth); + + if (boxes[j].x1 == x && temp_stride == stride) { + temp_bits = (char *) bits + (boxes[j].y1 - y) * stride; + } + else { + temp_bits = sub_bits; + } + DEBUGF("download x %d y %d w %d h %d temp stride %d \n", + boxes[j].x1, boxes[j].y1, + boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1, temp_stride); + + /* For large pixmap, we don't support pbo currently. */ + assert(pbo == 0); + if (_glamor_download_sub_pixmap_to_cpu + (pixmap, format, type, no_alpha, revert, swap_rb, + boxes[j].x1, boxes[j].y1, boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1, temp_stride, temp_bits, pbo, + access) == FALSE) { + RegionUninit(®ion); + free(sub_bits); + assert(0); + return NULL; + } + if (boxes[j].x1 != x || temp_stride != stride) + glamor_get_bits(bits, stride, temp_bits, temp_stride, + pixmap->drawable.bitsPerPixel, + boxes[j].x1 - x, boxes[j].y1 - y, + boxes[j].x2 - boxes[j].x1, + boxes[j].y2 - boxes[j].y1); + } + + RegionDestroy(clipped_regions[i].region); + } + free(sub_bits); + free(clipped_regions); + RegionUninit(®ion); + return bits; + } + else + return _glamor_download_sub_pixmap_to_cpu(pixmap, format, type, + no_alpha, revert, swap_rb, x, + y, w, h, stride, bits, pbo, + access); } - /** * Move a pixmap to CPU memory. * The input data is the pixmap's fbo. @@ -1187,67 +1163,64 @@ glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, int h, Bool glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access) { - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - unsigned int stride; - void *data = NULL, *dst; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(pixmap->drawable.pScreen); - glamor_gl_dispatch *dispatch; - int pbo = 0; - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return TRUE; - - glamor_debug_output(GLAMOR_DEBUG_TEXTURE_DOWNLOAD, - "Downloading pixmap %p %dx%d depth%d\n", - pixmap, - pixmap->drawable.width, - pixmap->drawable.height, - pixmap->drawable.depth); - - stride = pixmap->devKind; - - if (access == GLAMOR_ACCESS_WO - || glamor_priv->gl_flavor == GLAMOR_GL_ES2 - || (!glamor_priv->has_pack_invert && !glamor_priv->yInverted) - || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - data = malloc(stride * pixmap->drawable.height); - } else { - dispatch = glamor_get_dispatch(glamor_priv); - if (pixmap_priv->base.fbo->pbo == 0) - dispatch->glGenBuffers(1, - &pixmap_priv->base.fbo->pbo); - glamor_put_dispatch(glamor_priv); - pbo = pixmap_priv->base.fbo->pbo; - } - - if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) { - stride = PixmapBytePad(pixmap->drawable.width, pixmap->drawable.depth); - pixmap_priv->base.drm_stride = pixmap->devKind; - pixmap->devKind = stride; - } - - dst = glamor_download_sub_pixmap_to_cpu(pixmap, 0, 0, - pixmap->drawable.width, - pixmap->drawable.height, - pixmap->devKind, - data, pbo, access); - - if (!dst) { - if (data) - free(data); - return FALSE; - } - - if (pbo != 0) - pixmap_priv->base.fbo->pbo_valid = 1; - - pixmap_priv->base.gl_fbo = GLAMOR_FBO_DOWNLOADED; - - pixmap->devPrivate.ptr = dst; - - return TRUE; + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + unsigned int stride; + void *data = NULL, *dst; + glamor_screen_private *glamor_priv = + glamor_get_screen_private(pixmap->drawable.pScreen); + glamor_gl_dispatch *dispatch; + int pbo = 0; + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return TRUE; + + glamor_debug_output(GLAMOR_DEBUG_TEXTURE_DOWNLOAD, + "Downloading pixmap %p %dx%d depth%d\n", + pixmap, + pixmap->drawable.width, + pixmap->drawable.height, pixmap->drawable.depth); + + stride = pixmap->devKind; + + if (access == GLAMOR_ACCESS_WO + || glamor_priv->gl_flavor == GLAMOR_GL_ES2 + || (!glamor_priv->has_pack_invert && !glamor_priv->yInverted) + || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + data = malloc(stride * pixmap->drawable.height); + } + else { + dispatch = glamor_get_dispatch(glamor_priv); + if (pixmap_priv->base.fbo->pbo == 0) + dispatch->glGenBuffers(1, &pixmap_priv->base.fbo->pbo); + glamor_put_dispatch(glamor_priv); + pbo = pixmap_priv->base.fbo->pbo; + } + + if (pixmap_priv->type == GLAMOR_TEXTURE_DRM) { + stride = PixmapBytePad(pixmap->drawable.width, pixmap->drawable.depth); + pixmap_priv->base.drm_stride = pixmap->devKind; + pixmap->devKind = stride; + } + + dst = glamor_download_sub_pixmap_to_cpu(pixmap, 0, 0, + pixmap->drawable.width, + pixmap->drawable.height, + pixmap->devKind, data, pbo, access); + + if (!dst) { + if (data) + free(data); + return FALSE; + } + + if (pbo != 0) + pixmap_priv->base.fbo->pbo_valid = 1; + + pixmap_priv->base.gl_fbo = GLAMOR_FBO_DOWNLOADED; + + pixmap->devPrivate.ptr = dst; + + return TRUE; } /* fixup a fbo to the exact size as the pixmap. */ @@ -1255,60 +1228,58 @@ glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access) Bool glamor_fixup_pixmap_priv(ScreenPtr screen, glamor_pixmap_private *pixmap_priv) { - glamor_pixmap_fbo *old_fbo; - glamor_pixmap_fbo *new_fbo = NULL; - PixmapPtr scratch = NULL; - glamor_pixmap_private *scratch_priv; - DrawablePtr drawable; - GCPtr gc = NULL; - int ret = FALSE; - - drawable = &pixmap_priv->base.pixmap->drawable; - - if (!GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(pixmap_priv)) - return TRUE; - - old_fbo = pixmap_priv->base.fbo; - - if (!old_fbo) - return FALSE; - - gc = GetScratchGC(drawable->depth, screen); - if (!gc) - goto fail; - - scratch = glamor_create_pixmap(screen, drawable->width, drawable->height, - drawable->depth, - GLAMOR_CREATE_PIXMAP_FIXUP); - - scratch_priv = glamor_get_pixmap_private(scratch); - - if (!scratch_priv->base.fbo) - goto fail; - - ValidateGC(&scratch->drawable, gc); - glamor_copy_area(drawable, - &scratch->drawable, - gc, 0, 0, - drawable->width, drawable->height, - 0, 0); - old_fbo = glamor_pixmap_detach_fbo(pixmap_priv); - new_fbo = glamor_pixmap_detach_fbo(scratch_priv); - glamor_pixmap_attach_fbo(pixmap_priv->base.pixmap, new_fbo); - glamor_pixmap_attach_fbo(scratch, old_fbo); - - DEBUGF("old %dx%d type %d\n", - drawable->width, drawable->height, pixmap_priv->type); - DEBUGF("copy tex %d %dx%d to tex %d %dx%d \n", - old_fbo->tex, old_fbo->width, old_fbo->height, new_fbo->tex, new_fbo->width, new_fbo->height); - ret = TRUE; -fail: - if (gc) - FreeScratchGC(gc); - if (scratch) - glamor_destroy_pixmap(scratch); - - return ret; + glamor_pixmap_fbo *old_fbo; + glamor_pixmap_fbo *new_fbo = NULL; + PixmapPtr scratch = NULL; + glamor_pixmap_private *scratch_priv; + DrawablePtr drawable; + GCPtr gc = NULL; + int ret = FALSE; + + drawable = &pixmap_priv->base.pixmap->drawable; + + if (!GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(pixmap_priv)) + return TRUE; + + old_fbo = pixmap_priv->base.fbo; + + if (!old_fbo) + return FALSE; + + gc = GetScratchGC(drawable->depth, screen); + if (!gc) + goto fail; + + scratch = glamor_create_pixmap(screen, drawable->width, drawable->height, + drawable->depth, GLAMOR_CREATE_PIXMAP_FIXUP); + + scratch_priv = glamor_get_pixmap_private(scratch); + + if (!scratch_priv->base.fbo) + goto fail; + + ValidateGC(&scratch->drawable, gc); + glamor_copy_area(drawable, + &scratch->drawable, + gc, 0, 0, drawable->width, drawable->height, 0, 0); + old_fbo = glamor_pixmap_detach_fbo(pixmap_priv); + new_fbo = glamor_pixmap_detach_fbo(scratch_priv); + glamor_pixmap_attach_fbo(pixmap_priv->base.pixmap, new_fbo); + glamor_pixmap_attach_fbo(scratch, old_fbo); + + DEBUGF("old %dx%d type %d\n", + drawable->width, drawable->height, pixmap_priv->type); + DEBUGF("copy tex %d %dx%d to tex %d %dx%d \n", + old_fbo->tex, old_fbo->width, old_fbo->height, new_fbo->tex, + new_fbo->width, new_fbo->height); + ret = TRUE; + fail: + if (gc) + FreeScratchGC(gc); + if (scratch) + glamor_destroy_pixmap(scratch); + + return ret; } /* @@ -1328,106 +1299,120 @@ fail: * * */ PixmapPtr -glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y, int w, int h, glamor_access_t access) +glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y, int w, int h, + glamor_access_t access) { - glamor_screen_private *glamor_priv; - PixmapPtr sub_pixmap; - glamor_pixmap_private *sub_pixmap_priv, *pixmap_priv; - void *data; - int pbo; - int flag; - if (x < 0 || y < 0) - return NULL; - w = (x + w) > pixmap->drawable.width ? (pixmap->drawable.width - x) : w; - h = (y + h) > pixmap->drawable.height ? (pixmap->drawable.height - y) : h; - if (access == GLAMOR_ACCESS_WO) { - sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, - pixmap->drawable.depth, GLAMOR_CREATE_PIXMAP_CPU); - return sub_pixmap; - } - - glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) - return NULL; - if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) - flag = GLAMOR_CREATE_PIXMAP_CPU; - else - flag = GLAMOR_CREATE_PIXMAP_MAP; - - sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, - pixmap->drawable.depth, flag); - - if (sub_pixmap == NULL) - return NULL; - - sub_pixmap_priv = glamor_get_pixmap_private(sub_pixmap); - pbo = sub_pixmap_priv ? (sub_pixmap_priv->base.fbo ? sub_pixmap_priv->base.fbo->pbo : 0): 0; - - if (pixmap_priv->base.is_picture) { - sub_pixmap_priv->base.picture = pixmap_priv->base.picture; - sub_pixmap_priv->base.is_picture = pixmap_priv->base.is_picture; - } - - if (pbo) - data = NULL; - else - data = sub_pixmap->devPrivate.ptr; - - data = glamor_download_sub_pixmap_to_cpu(pixmap, x, y, w, h, sub_pixmap->devKind, - data, pbo, access); - if(data == NULL) { - fbDestroyPixmap(sub_pixmap); - return NULL; - } - if (pbo) { - assert(sub_pixmap->devPrivate.ptr == NULL); - sub_pixmap->devPrivate.ptr = data; - sub_pixmap_priv->base.fbo->pbo_valid = 1; - } + glamor_screen_private *glamor_priv; + PixmapPtr sub_pixmap; + glamor_pixmap_private *sub_pixmap_priv, *pixmap_priv; + void *data; + int pbo; + int flag; + + if (x < 0 || y < 0) + return NULL; + w = (x + w) > pixmap->drawable.width ? (pixmap->drawable.width - x) : w; + h = (y + h) > pixmap->drawable.height ? (pixmap->drawable.height - y) : h; + if (access == GLAMOR_ACCESS_WO) { + sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, + pixmap->drawable.depth, + GLAMOR_CREATE_PIXMAP_CPU); + return sub_pixmap; + } + + glamor_priv = glamor_get_screen_private(pixmap->drawable.pScreen); + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) + return NULL; + if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 || + pixmap_priv->type == GLAMOR_TEXTURE_LARGE) + flag = GLAMOR_CREATE_PIXMAP_CPU; + else + flag = GLAMOR_CREATE_PIXMAP_MAP; + + sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, + pixmap->drawable.depth, flag); + + if (sub_pixmap == NULL) + return NULL; + + sub_pixmap_priv = glamor_get_pixmap_private(sub_pixmap); + pbo = + sub_pixmap_priv ? (sub_pixmap_priv->base.fbo ? sub_pixmap_priv->base. + fbo->pbo : 0) : 0; + + if (pixmap_priv->base.is_picture) { + sub_pixmap_priv->base.picture = pixmap_priv->base.picture; + sub_pixmap_priv->base.is_picture = pixmap_priv->base.is_picture; + } + + if (pbo) + data = NULL; + else + data = sub_pixmap->devPrivate.ptr; + + data = + glamor_download_sub_pixmap_to_cpu(pixmap, x, y, w, h, + sub_pixmap->devKind, data, pbo, + access); + if (data == NULL) { + fbDestroyPixmap(sub_pixmap); + return NULL; + } + if (pbo) { + assert(sub_pixmap->devPrivate.ptr == NULL); + sub_pixmap->devPrivate.ptr = data; + sub_pixmap_priv->base.fbo->pbo_valid = 1; + } #if 0 - struct pixman_box16 box; - PixmapPtr new_sub_pixmap; - int dx, dy; - box.x1 = 0; - box.y1 = 0; - box.x2 = w; - box.y2 = h; - - dx = x; - dy = y; - - new_sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, - pixmap->drawable.depth, GLAMOR_CREATE_PIXMAP_CPU); - glamor_copy_n_to_n(&pixmap->drawable, &new_sub_pixmap->drawable, NULL, &box, 1, dx, dy, 0, 0, 0, NULL); - glamor_compare_pixmaps(new_sub_pixmap, sub_pixmap, 0, 0, w, h, 1, 1); + struct pixman_box16 box; + PixmapPtr new_sub_pixmap; + int dx, dy; + + box.x1 = 0; + box.y1 = 0; + box.x2 = w; + box.y2 = h; + + dx = x; + dy = y; + + new_sub_pixmap = glamor_create_pixmap(pixmap->drawable.pScreen, w, h, + pixmap->drawable.depth, + GLAMOR_CREATE_PIXMAP_CPU); + glamor_copy_n_to_n(&pixmap->drawable, &new_sub_pixmap->drawable, NULL, &box, + 1, dx, dy, 0, 0, 0, NULL); + glamor_compare_pixmaps(new_sub_pixmap, sub_pixmap, 0, 0, w, h, 1, 1); #endif - return sub_pixmap; + return sub_pixmap; } void -glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y, int w, int h, glamor_access_t access) +glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y, + int w, int h, glamor_access_t access) { - void *bits; - int pbo; - glamor_pixmap_private *sub_pixmap_priv; - if (access != GLAMOR_ACCESS_RO) { - sub_pixmap_priv = glamor_get_pixmap_private(sub_pixmap); - if (sub_pixmap_priv->base.fbo - && sub_pixmap_priv->base.fbo->pbo_valid) { - bits = NULL; - pbo = sub_pixmap_priv->base.fbo->pbo; - } else { - bits = sub_pixmap->devPrivate.ptr; - pbo = 0; - } - - assert(x >= 0 && y >= 0); - w = (w > sub_pixmap->drawable.width) ? sub_pixmap->drawable.width : w; - h = (h > sub_pixmap->drawable.height) ? sub_pixmap->drawable.height : h; - glamor_upload_sub_pixmap_to_texture(pixmap, x, y, w, h, sub_pixmap->devKind, bits, pbo); - } - glamor_destroy_pixmap(sub_pixmap); + void *bits; + int pbo; + glamor_pixmap_private *sub_pixmap_priv; + + if (access != GLAMOR_ACCESS_RO) { + sub_pixmap_priv = glamor_get_pixmap_private(sub_pixmap); + if (sub_pixmap_priv->base.fbo && sub_pixmap_priv->base.fbo->pbo_valid) { + bits = NULL; + pbo = sub_pixmap_priv->base.fbo->pbo; + } + else { + bits = sub_pixmap->devPrivate.ptr; + pbo = 0; + } + + assert(x >= 0 && y >= 0); + w = (w > sub_pixmap->drawable.width) ? sub_pixmap->drawable.width : w; + h = (h > sub_pixmap->drawable.height) ? sub_pixmap->drawable.height : h; + glamor_upload_sub_pixmap_to_texture(pixmap, x, y, w, h, + sub_pixmap->devKind, bits, pbo); + } + glamor_destroy_pixmap(sub_pixmap); } diff --git a/xorg-server/glamor/glamor_polyfillrect.c b/xorg-server/glamor/glamor_polyfillrect.c index 4e1f7b3a9..a25fc4ed5 100644 --- a/xorg-server/glamor/glamor_polyfillrect.c +++ b/xorg-server/glamor/glamor_polyfillrect.c @@ -35,93 +35,90 @@ static Bool _glamor_poly_fill_rect(DrawablePtr drawable, - GCPtr gc, int nrect, xRectangle * prect, Bool fallback) + GCPtr gc, int nrect, xRectangle *prect, Bool fallback) { - int fullX1, fullX2, fullY1, fullY2; - int xorg, yorg; - int n; - register BoxPtr pbox; - RegionPtr pClip = fbGetCompositeClip(gc); - Bool ret = FALSE; + int fullX1, fullX2, fullY1, fullY2; + int xorg, yorg; + int n; + register BoxPtr pbox; + RegionPtr pClip = fbGetCompositeClip(gc); + Bool ret = FALSE; - xorg = drawable->x; - yorg = drawable->y; + xorg = drawable->x; + yorg = drawable->y; - while (nrect--) { - fullX1 = prect->x + xorg; - fullY1 = prect->y + yorg; - fullX2 = fullX1 + (int) prect->width; - fullY2 = fullY1 + (int) prect->height; + while (nrect--) { + fullX1 = prect->x + xorg; + fullY1 = prect->y + yorg; + fullX2 = fullX1 + (int) prect->width; + fullY2 = fullY1 + (int) prect->height; - n = REGION_NUM_RECTS(pClip); - pbox = REGION_RECTS(pClip); - /* - * clip the rectangle to each box in the clip region - * this is logically equivalent to calling Intersect(), - * but rectangles may overlap each other here. - */ - while (n--) { - int x1 = fullX1; - int x2 = fullX2; - int y1 = fullY1; - int y2 = fullY2; + n = REGION_NUM_RECTS(pClip); + pbox = REGION_RECTS(pClip); + /* + * clip the rectangle to each box in the clip region + * this is logically equivalent to calling Intersect(), + * but rectangles may overlap each other here. + */ + while (n--) { + int x1 = fullX1; + int x2 = fullX2; + int y1 = fullY1; + int y2 = fullY2; - if (pbox->x1 > x1) - x1 = pbox->x1; - if (pbox->x2 < x2) - x2 = pbox->x2; - if (pbox->y1 > y1) - y1 = pbox->y1; - if (pbox->y2 < y2) - y2 = pbox->y2; + if (pbox->x1 > x1) + x1 = pbox->x1; + if (pbox->x2 < x2) + x2 = pbox->x2; + if (pbox->y1 > y1) + y1 = pbox->y1; + if (pbox->y2 < y2) + y2 = pbox->y2; - pbox++; - if (x1 >= x2 || y1 >= y2) - continue; - if (!glamor_fill(drawable, gc, x1, y1, x2 - x1, - y2 - y1, fallback)) { - nrect++; - goto fail; - } - } - prect++; - } - ret = TRUE; - goto done; + pbox++; + if (x1 >= x2 || y1 >= y2) + continue; + if (!glamor_fill(drawable, gc, x1, y1, x2 - x1, y2 - y1, fallback)) { + nrect++; + goto fail; + } + } + prect++; + } + ret = TRUE; + goto done; -fail: + fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable) - && glamor_ddx_fallback_check_gc(gc)) - goto done; + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable) + && glamor_ddx_fallback_check_gc(gc)) + goto done; - glamor_fallback(" to %p (%c)\n", - drawable, glamor_get_drawable_location(drawable)); - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_gc(gc)) { - fbPolyFillRect(drawable, gc, nrect, prect); - glamor_finish_access_gc(gc); - } - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - ret = TRUE; + glamor_fallback(" to %p (%c)\n", + drawable, glamor_get_drawable_location(drawable)); + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_gc(gc)) { + fbPolyFillRect(drawable, gc, nrect, prect); + glamor_finish_access_gc(gc); + } + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + ret = TRUE; -done: - return ret; + done: + return ret; } - void glamor_poly_fill_rect(DrawablePtr drawable, - GCPtr gc, int nrect, xRectangle * prect) + GCPtr gc, int nrect, xRectangle *prect) { - _glamor_poly_fill_rect(drawable, gc, nrect, prect, TRUE); + _glamor_poly_fill_rect(drawable, gc, nrect, prect, TRUE); } Bool glamor_poly_fill_rect_nf(DrawablePtr drawable, - GCPtr gc, int nrect, xRectangle * prect) + GCPtr gc, int nrect, xRectangle *prect) { - return _glamor_poly_fill_rect(drawable, gc, nrect, prect, FALSE); + return _glamor_poly_fill_rect(drawable, gc, nrect, prect, FALSE); } diff --git a/xorg-server/glamor/glamor_polylines.c b/xorg-server/glamor/glamor_polylines.c index e723e9500..b94161760 100644 --- a/xorg-server/glamor/glamor_polylines.c +++ b/xorg-server/glamor/glamor_polylines.c @@ -40,96 +40,97 @@ */ static Bool _glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points, Bool fallback) + DDXPointPtr points, Bool fallback) { - xRectangle *rects; - int x1, x2, y1, y2; - int i; + xRectangle *rects; + int x1, x2, y1, y2; + int i; - /* Don't try to do wide lines or non-solid fill style. */ - if (gc->lineWidth != 0) { - /* This ends up in miSetSpans, which is accelerated as well as we - * can hope X wide lines will be. - */ - goto wide_line; - } - if (gc->lineStyle != LineSolid) { - glamor_fallback - ("non-solid fill line style %d\n", - gc->lineStyle); - goto fail; - } - rects = malloc(sizeof(xRectangle) * (n - 1)); - x1 = points[0].x; - y1 = points[0].y; - /* If we have any non-horizontal/vertical, fall back. */ - for (i = 0; i < n - 1; i++) { - if (mode == CoordModePrevious) { - x2 = x1 + points[i + 1].x; - y2 = y1 + points[i + 1].y; - } else { - x2 = points[i + 1].x; - y2 = points[i + 1].y; - } - if (x1 != x2 && y1 != y2) { - free(rects); - glamor_fallback("stub diagonal poly_line\n"); - goto fail; - } - if (x1 < x2) { - rects[i].x = x1; - rects[i].width = x2 - x1 + 1; - } else { - rects[i].x = x2; - rects[i].width = x1 - x2 + 1; - } - if (y1 < y2) { - rects[i].y = y1; - rects[i].height = y2 - y1 + 1; - } else { - rects[i].y = y2; - rects[i].height = y1 - y2 + 1; - } + /* Don't try to do wide lines or non-solid fill style. */ + if (gc->lineWidth != 0) { + /* This ends up in miSetSpans, which is accelerated as well as we + * can hope X wide lines will be. + */ + goto wide_line; + } + if (gc->lineStyle != LineSolid) { + glamor_fallback("non-solid fill line style %d\n", gc->lineStyle); + goto fail; + } + rects = malloc(sizeof(xRectangle) * (n - 1)); + x1 = points[0].x; + y1 = points[0].y; + /* If we have any non-horizontal/vertical, fall back. */ + for (i = 0; i < n - 1; i++) { + if (mode == CoordModePrevious) { + x2 = x1 + points[i + 1].x; + y2 = y1 + points[i + 1].y; + } + else { + x2 = points[i + 1].x; + y2 = points[i + 1].y; + } + if (x1 != x2 && y1 != y2) { + free(rects); + glamor_fallback("stub diagonal poly_line\n"); + goto fail; + } + if (x1 < x2) { + rects[i].x = x1; + rects[i].width = x2 - x1 + 1; + } + else { + rects[i].x = x2; + rects[i].width = x1 - x2 + 1; + } + if (y1 < y2) { + rects[i].y = y1; + rects[i].height = y2 - y1 + 1; + } + else { + rects[i].y = y2; + rects[i].height = y1 - y2 + 1; + } - x1 = x2; - y1 = y2; - } - gc->ops->PolyFillRect(drawable, gc, n - 1, rects); - free(rects); - return TRUE; + x1 = x2; + y1 = y2; + } + gc->ops->PolyFillRect(drawable, gc, n - 1, rects); + free(rects); + return TRUE; - fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable) - && glamor_ddx_fallback_check_gc(gc)) - return FALSE; + fail: + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable) + && glamor_ddx_fallback_check_gc(gc)) + return FALSE; - if (gc->lineWidth == 0) { - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_gc(gc)) { - fbPolyLine(drawable, gc, mode, n, points); - glamor_finish_access_gc(gc); - } - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - } else { -wide_line: - /* fb calls mi functions in the lineWidth != 0 case. */ - fbPolyLine(drawable, gc, mode, n, points); - } - return TRUE; + if (gc->lineWidth == 0) { + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_gc(gc)) { + fbPolyLine(drawable, gc, mode, n, points); + glamor_finish_access_gc(gc); + } + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + } + else { + wide_line: + /* fb calls mi functions in the lineWidth != 0 case. */ + fbPolyLine(drawable, gc, mode, n, points); + } + return TRUE; } void glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points) + DDXPointPtr points) { - _glamor_poly_lines(drawable, gc, mode, n, points, TRUE); + _glamor_poly_lines(drawable, gc, mode, n, points, TRUE); } Bool glamor_poly_lines_nf(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points) + DDXPointPtr points) { - return _glamor_poly_lines(drawable, gc, mode, n, points, FALSE); + return _glamor_poly_lines(drawable, gc, mode, n, points, FALSE); } diff --git a/xorg-server/glamor/glamor_polyops.c b/xorg-server/glamor/glamor_polyops.c index 59301784d..1484d80f1 100644 --- a/xorg-server/glamor/glamor_polyops.c +++ b/xorg-server/glamor/glamor_polyops.c @@ -30,56 +30,53 @@ static Bool _glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt, Bool fallback) + DDXPointPtr ppt, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_gc(pGC) - && glamor_ddx_fallback_check_pixmap(pDrawable)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_gc(pGC) + && glamor_ddx_fallback_check_pixmap(pDrawable)) + return FALSE; - miPolyPoint(pDrawable, pGC, mode, npt, ppt); + miPolyPoint(pDrawable, pGC, mode, npt, ppt); - return TRUE; + return TRUE; } void glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt) + DDXPointPtr ppt) { - _glamor_poly_point(pDrawable, pGC, mode, npt, ppt, TRUE); + _glamor_poly_point(pDrawable, pGC, mode, npt, ppt, TRUE); } Bool glamor_poly_point_nf(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt) + DDXPointPtr ppt) { - return _glamor_poly_point(pDrawable, pGC, mode, npt, ppt, FALSE); + return _glamor_poly_point(pDrawable, pGC, mode, npt, ppt, FALSE); } static Bool _glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg, Bool fallback) + xSegment *pSeg, Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_gc(pGC) - && glamor_ddx_fallback_check_pixmap(pDrawable)) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_gc(pGC) + && glamor_ddx_fallback_check_pixmap(pDrawable)) + return FALSE; - miPolySegment(pDrawable, pGC, nseg, pSeg); + miPolySegment(pDrawable, pGC, nseg, pSeg); - return TRUE; + return TRUE; } void -glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg) +glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, xSegment *pSeg) { - _glamor_poly_segment(pDrawable, pGC, nseg, pSeg, TRUE); + _glamor_poly_segment(pDrawable, pGC, nseg, pSeg, TRUE); } Bool glamor_poly_segment_nf(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg) + xSegment *pSeg) { - return _glamor_poly_segment(pDrawable, pGC, nseg, pSeg, FALSE); + return _glamor_poly_segment(pDrawable, pGC, nseg, pSeg, FALSE); } diff --git a/xorg-server/glamor/glamor_priv.h b/xorg-server/glamor/glamor_priv.h index 7b8f762c9..dc3873013 100644 --- a/xorg-server/glamor/glamor_priv.h +++ b/xorg-server/glamor/glamor_priv.h @@ -27,20 +27,13 @@ #ifndef GLAMOR_PRIV_H #define GLAMOR_PRIV_H -#ifdef HAVE_CONFIG_H -#include "config.h" -#endif - -#include "compiler.h" +#include "dix-config.h" #include <xorg-server.h> #ifndef DEBUG #define NDEBUG #endif #include "glamor.h" -#include "compat-api.h" - -#define GL_GLEXT_PROTOTYPES #ifdef GLAMOR_GLES2 #include <GLES2/gl2.h> @@ -61,125 +54,110 @@ #include "glamor_debug.h" #include <list.h> -/* The list.h rename all the function to add xorg_ prefix. - We add hack here to avoid the compile error when using - old version xserver header file. - These will be removed in future. */ -#ifndef xorg_list_entry -#define xorg_list list -#define xorg_list_for_each_entry list_for_each_entry -#define xorg_list_for_each_entry_safe list_for_each_entry_safe -#define xorg_list_del list_del -#define xorg_list_add list_add -#define xorg_list_append list_append -#define xorg_list_init list_init -#endif struct glamor_pixmap_private; typedef struct glamor_composite_shader { - GLuint prog; - GLint dest_to_dest_uniform_location; - GLint dest_to_source_uniform_location; - GLint dest_to_mask_uniform_location; - GLint source_uniform_location; - GLint mask_uniform_location; - GLint source_wh; - GLint mask_wh; - GLint source_repeat_mode; - GLint mask_repeat_mode; - union { - float source_solid_color[4]; - struct { - struct glamor_pixmap_private *source_priv; - PicturePtr source; - }; - }; - - union { - float mask_solid_color[4]; - struct { - struct glamor_pixmap_private *mask_priv; - PicturePtr mask; - }; - }; + GLuint prog; + GLint dest_to_dest_uniform_location; + GLint dest_to_source_uniform_location; + GLint dest_to_mask_uniform_location; + GLint source_uniform_location; + GLint mask_uniform_location; + GLint source_wh; + GLint mask_wh; + GLint source_repeat_mode; + GLint mask_repeat_mode; + union { + float source_solid_color[4]; + struct { + struct glamor_pixmap_private *source_priv; + PicturePtr source; + }; + }; + + union { + float mask_solid_color[4]; + struct { + struct glamor_pixmap_private *mask_priv; + PicturePtr mask; + }; + }; } glamor_composite_shader; enum shader_source { - SHADER_SOURCE_SOLID, - SHADER_SOURCE_TEXTURE, - SHADER_SOURCE_TEXTURE_ALPHA, - SHADER_SOURCE_COUNT, + SHADER_SOURCE_SOLID, + SHADER_SOURCE_TEXTURE, + SHADER_SOURCE_TEXTURE_ALPHA, + SHADER_SOURCE_COUNT, }; enum shader_mask { - SHADER_MASK_NONE, - SHADER_MASK_SOLID, - SHADER_MASK_TEXTURE, - SHADER_MASK_TEXTURE_ALPHA, - SHADER_MASK_COUNT, + SHADER_MASK_NONE, + SHADER_MASK_SOLID, + SHADER_MASK_TEXTURE, + SHADER_MASK_TEXTURE_ALPHA, + SHADER_MASK_COUNT, }; enum shader_in { - SHADER_IN_SOURCE_ONLY, - SHADER_IN_NORMAL, - SHADER_IN_CA_SOURCE, - SHADER_IN_CA_ALPHA, - SHADER_IN_COUNT, + SHADER_IN_SOURCE_ONLY, + SHADER_IN_NORMAL, + SHADER_IN_CA_SOURCE, + SHADER_IN_CA_ALPHA, + SHADER_IN_COUNT, }; struct shader_key { - enum shader_source source; - enum shader_mask mask; - enum shader_in in; + enum shader_source source; + enum shader_mask mask; + enum shader_in in; }; struct blendinfo { - Bool dest_alpha; - Bool source_alpha; - GLenum source_blend; - GLenum dest_blend; + Bool dest_alpha; + Bool source_alpha; + GLenum source_blend; + GLenum dest_blend; }; typedef struct { - INT16 x_src; - INT16 y_src; - INT16 x_mask; - INT16 y_mask; - INT16 x_dst; - INT16 y_dst; - INT16 width; - INT16 height; + INT16 x_src; + INT16 y_src; + INT16 x_mask; + INT16 y_mask; + INT16 x_dst; + INT16 y_dst; + INT16 width; + INT16 height; } glamor_composite_rect_t; - enum glamor_vertex_type { - GLAMOR_VERTEX_POS, - GLAMOR_VERTEX_SOURCE, - GLAMOR_VERTEX_MASK + GLAMOR_VERTEX_POS, + GLAMOR_VERTEX_SOURCE, + GLAMOR_VERTEX_MASK }; - enum gradient_shader { - SHADER_GRADIENT_LINEAR, - SHADER_GRADIENT_RADIAL, - SHADER_GRADIENT_CONICAL, - SHADER_GRADIENT_COUNT, + SHADER_GRADIENT_LINEAR, + SHADER_GRADIENT_RADIAL, + SHADER_GRADIENT_CONICAL, + SHADER_GRADIENT_COUNT, }; enum gradient_shader_prog { - SHADER_GRADIENT_VS_PROG, - SHADER_GRADIENT_FS_MAIN_PROG, - SHADER_GRADIENT_FS_GETCOLOR_PROG, - SHADER_GRADIENT_PROG_COUNT, + SHADER_GRADIENT_VS_PROG, + SHADER_GRADIENT_FS_MAIN_PROG, + SHADER_GRADIENT_FS_GETCOLOR_PROG, + SHADER_GRADIENT_PROG_COUNT, }; struct glamor_screen_private; struct glamor_pixmap_private; enum glamor_gl_flavor { - GLAMOR_GL_DESKTOP, // OPENGL API - GLAMOR_GL_ES2 // OPENGL ES2.0 API + GLAMOR_GL_DESKTOP, // OPENGL API + GLAMOR_GL_ES2 // OPENGL ES2.0 API }; #define GLAMOR_CREATE_PIXMAP_CPU 0x100 @@ -194,34 +172,34 @@ enum glamor_gl_flavor { #define GLAMOR_COMPOSITE_VBO_VERT_CNT (64*1024) typedef struct { - PicturePtr picture; /* Where the glyphs of the cache are stored */ - GlyphPtr *glyphs; - uint16_t count; - uint16_t evict; + PicturePtr picture; /* Where the glyphs of the cache are stored */ + GlyphPtr *glyphs; + uint16_t count; + uint16_t evict; } glamor_glyph_cache_t; #include "glamor_gl_dispatch.h" -struct glamor_saved_procs { - CloseScreenProcPtr close_screen; - CreateGCProcPtr create_gc; - CreatePixmapProcPtr create_pixmap; - DestroyPixmapProcPtr destroy_pixmap; - GetSpansProcPtr get_spans; - GetImageProcPtr get_image; - CompositeProcPtr composite; - CompositeRectsProcPtr composite_rects; - TrapezoidsProcPtr trapezoids; - GlyphsProcPtr glyphs; - ChangeWindowAttributesProcPtr change_window_attributes; - CopyWindowProcPtr copy_window; - BitmapToRegionProcPtr bitmap_to_region; - TrianglesProcPtr triangles; - AddTrapsProcPtr addtraps; - CreatePictureProcPtr create_picture; - DestroyPictureProcPtr destroy_picture; - UnrealizeGlyphProcPtr unrealize_glyph; - SetWindowPixmapProcPtr set_window_pixmap; +struct glamor_saved_procs { + CloseScreenProcPtr close_screen; + CreateGCProcPtr create_gc; + CreatePixmapProcPtr create_pixmap; + DestroyPixmapProcPtr destroy_pixmap; + GetSpansProcPtr get_spans; + GetImageProcPtr get_image; + CompositeProcPtr composite; + CompositeRectsProcPtr composite_rects; + TrapezoidsProcPtr trapezoids; + GlyphsProcPtr glyphs; + ChangeWindowAttributesProcPtr change_window_attributes; + CopyWindowProcPtr copy_window; + BitmapToRegionProcPtr bitmap_to_region; + TrianglesProcPtr triangles; + AddTrapsProcPtr addtraps; + CreatePictureProcPtr create_picture; + DestroyPictureProcPtr destroy_picture; + UnrealizeGlyphProcPtr unrealize_glyph; + SetWindowPixmapProcPtr set_window_pixmap; }; #ifdef GLAMOR_GLES2 @@ -242,79 +220,80 @@ struct glamor_saved_procs { #define RENDER_IDEL_MAX 32 typedef struct glamor_screen_private { - struct glamor_gl_dispatch _dispatch; - int yInverted; - unsigned int tick; - enum glamor_gl_flavor gl_flavor; - int has_pack_invert; - int has_fbo_blit; - int max_fbo_size; - - struct xorg_list fbo_cache[CACHE_FORMAT_COUNT][CACHE_BUCKET_WCOUNT][CACHE_BUCKET_HCOUNT]; - unsigned long fbo_cache_watermark; - - /* glamor_solid */ - GLint solid_prog; - GLint solid_color_uniform_location; - - /* vertext/elment_index buffer object for render */ - GLuint vbo, ebo; - int vbo_offset; - int vbo_size; - char *vb; - int vb_stride; - Bool has_source_coords, has_mask_coords; - int render_nr_verts; - glamor_composite_shader composite_shader[SHADER_SOURCE_COUNT] - [SHADER_MASK_COUNT] - [SHADER_IN_COUNT]; - glamor_glyph_cache_t glyphCaches[GLAMOR_NUM_GLYPH_CACHE_FORMATS]; - Bool glyph_cache_initialized; - - /* shaders to restore a texture to another texture.*/ - GLint finish_access_prog[2]; - GLint finish_access_revert[2]; - GLint finish_access_swap_rb[2]; - - /* glamor_tile */ - GLint tile_prog; - GLint tile_wh; - - /* glamor gradient, 0 for small nstops, 1 for - large nstops and 2 for dynamic generate. */ - GLint gradient_prog[SHADER_GRADIENT_COUNT][3]; - GLint linear_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3]; - int linear_max_nstops; - GLint radial_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3]; - int radial_max_nstops; - - /* glamor trapezoid shader. */ - GLint trapezoid_prog; - - /* glamor_putimage */ - GLint put_image_xybitmap_prog; - GLint put_image_xybitmap_fg_uniform_location; - GLint put_image_xybitmap_bg_uniform_location; - - PixmapPtr *back_pixmap; - int screen_fbo; - struct glamor_saved_procs saved_procs; - char delayed_fallback_string[GLAMOR_DELAYED_STRING_MAX + 1]; - int delayed_fallback_pending; - int flags; - int state; - unsigned int render_idle_cnt; - ScreenPtr screen; - int dri3_enabled; - - /* xv */ - GLint xv_prog; + struct glamor_gl_dispatch _dispatch; + int yInverted; + unsigned int tick; + enum glamor_gl_flavor gl_flavor; + int has_pack_invert; + int has_fbo_blit; + int max_fbo_size; + + struct xorg_list + fbo_cache[CACHE_FORMAT_COUNT][CACHE_BUCKET_WCOUNT][CACHE_BUCKET_HCOUNT]; + unsigned long fbo_cache_watermark; + + /* glamor_solid */ + GLint solid_prog; + GLint solid_color_uniform_location; + + /* vertext/elment_index buffer object for render */ + GLuint vbo, ebo; + int vbo_offset; + int vbo_size; + char *vb; + int vb_stride; + Bool has_source_coords, has_mask_coords; + int render_nr_verts; + glamor_composite_shader composite_shader[SHADER_SOURCE_COUNT] + [SHADER_MASK_COUNT] + [SHADER_IN_COUNT]; + glamor_glyph_cache_t glyphCaches[GLAMOR_NUM_GLYPH_CACHE_FORMATS]; + Bool glyph_cache_initialized; + + /* shaders to restore a texture to another texture. */ + GLint finish_access_prog[2]; + GLint finish_access_revert[2]; + GLint finish_access_swap_rb[2]; + + /* glamor_tile */ + GLint tile_prog; + GLint tile_wh; + + /* glamor gradient, 0 for small nstops, 1 for + large nstops and 2 for dynamic generate. */ + GLint gradient_prog[SHADER_GRADIENT_COUNT][3]; + GLint linear_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3]; + int linear_max_nstops; + GLint radial_gradient_shaders[SHADER_GRADIENT_PROG_COUNT][3]; + int radial_max_nstops; + + /* glamor trapezoid shader. */ + GLint trapezoid_prog; + + /* glamor_putimage */ + GLint put_image_xybitmap_prog; + GLint put_image_xybitmap_fg_uniform_location; + GLint put_image_xybitmap_bg_uniform_location; + + PixmapPtr *back_pixmap; + int screen_fbo; + struct glamor_saved_procs saved_procs; + char delayed_fallback_string[GLAMOR_DELAYED_STRING_MAX + 1]; + int delayed_fallback_pending; + int flags; + int state; + unsigned int render_idle_cnt; + ScreenPtr screen; + int dri3_enabled; + + /* xv */ + GLint xv_prog; } glamor_screen_private; typedef enum glamor_access { - GLAMOR_ACCESS_RO, - GLAMOR_ACCESS_RW, - GLAMOR_ACCESS_WO, + GLAMOR_ACCESS_RO, + GLAMOR_ACCESS_RW, + GLAMOR_ACCESS_WO, } glamor_access_t; #define GLAMOR_FBO_NORMAL 1 @@ -335,17 +314,17 @@ typedef enum glamor_access { * @glamor_priv: point to glamor private data. */ typedef struct glamor_pixmap_fbo { - struct xorg_list list; - unsigned int expire; - unsigned char pbo_valid; - GLuint tex; - GLuint fb; - GLuint pbo; - int width; - int height; - GLenum format; - GLenum type; - glamor_screen_private *glamor_priv; + struct xorg_list list; + unsigned int expire; + unsigned char pbo_valid; + GLuint tex; + GLuint fb; + GLuint pbo; + int width; + int height; + GLenum format; + GLenum type; + glamor_screen_private *glamor_priv; } glamor_pixmap_fbo; /* @@ -414,9 +393,9 @@ typedef struct glamor_pixmap_fbo { * **/ -typedef struct glamor_pixmap_clipped_regions{ - int block_idx; - RegionPtr region; +typedef struct glamor_pixmap_clipped_regions { + int block_idx; + RegionPtr region; } glamor_pixmap_clipped_regions; #define SET_PIXMAP_FBO_CURRENT(priv, idx) \ @@ -428,16 +407,16 @@ typedef struct glamor_pixmap_clipped_regions{ } while(0) typedef struct glamor_pixmap_private_base { - glamor_pixmap_type_t type; - unsigned char gl_fbo:2; - unsigned char is_picture:1; - unsigned char gl_tex:1; - glamor_pixmap_fbo *fbo; - PixmapPtr pixmap; - int drm_stride; - glamor_screen_private *glamor_priv; - PicturePtr picture; -}glamor_pixmap_private_base_t; + glamor_pixmap_type_t type; + unsigned char gl_fbo:2; + unsigned char is_picture:1; + unsigned char gl_tex:1; + glamor_pixmap_fbo *fbo; + PixmapPtr pixmap; + int drm_stride; + glamor_screen_private *glamor_priv; + PicturePtr picture; +} glamor_pixmap_private_base_t; /* * @base.fbo: current fbo. @@ -452,39 +431,39 @@ typedef struct glamor_pixmap_private_base { * **/ typedef struct glamor_pixmap_private_large { - union { - glamor_pixmap_type_t type; - glamor_pixmap_private_base_t base; - }; - BoxRec box; - int block_w; - int block_h; - int block_wcnt; - int block_hcnt; - int nbox; - BoxPtr box_array; - glamor_pixmap_fbo **fbo_array; -}glamor_pixmap_private_large_t; + union { + glamor_pixmap_type_t type; + glamor_pixmap_private_base_t base; + }; + BoxRec box; + int block_w; + int block_h; + int block_wcnt; + int block_hcnt; + int nbox; + BoxPtr box_array; + glamor_pixmap_fbo **fbo_array; +} glamor_pixmap_private_large_t; /* * @box: the relative coords in the corresponding fbo. */ typedef struct glamor_pixmap_private_atlas { - union { - glamor_pixmap_type_t type; - glamor_pixmap_private_base_t base; - }; - BoxRec box; -}glamor_pixmap_private_atlas_t; + union { + glamor_pixmap_type_t type; + glamor_pixmap_private_base_t base; + }; + BoxRec box; +} glamor_pixmap_private_atlas_t; typedef struct glamor_pixmap_private { - union { - glamor_pixmap_type_t type; - glamor_pixmap_private_base_t base; - glamor_pixmap_private_large_t large; - glamor_pixmap_private_atlas_t atlas; - }; -}glamor_pixmap_private; + union { + glamor_pixmap_type_t type; + glamor_pixmap_private_base_t base; + glamor_pixmap_private_large_t large; + glamor_pixmap_private_atlas_t atlas; + }; +} glamor_pixmap_private; /* * Pixmap dynamic status, used by dynamic upload feature. @@ -496,10 +475,10 @@ typedef struct glamor_pixmap_private { * * */ typedef enum glamor_pixmap_status { - GLAMOR_NONE, - GLAMOR_UPLOAD_PENDING, - GLAMOR_UPLOAD_DONE, - GLAMOR_UPLOAD_FAILED + GLAMOR_NONE, + GLAMOR_UPLOAD_PENDING, + GLAMOR_UPLOAD_DONE, + GLAMOR_UPLOAD_FAILED } glamor_pixmap_status_t; extern DevPrivateKey glamor_screen_private_key; @@ -507,33 +486,28 @@ extern DevPrivateKey glamor_pixmap_private_key; static inline glamor_screen_private * glamor_get_screen_private(ScreenPtr screen) { - return (glamor_screen_private *) - dixLookupPrivate(&screen->devPrivates, - glamor_screen_private_key); + return (glamor_screen_private *) + dixLookupPrivate(&screen->devPrivates, glamor_screen_private_key); } static inline void glamor_set_screen_private(ScreenPtr screen, glamor_screen_private *priv) { - dixSetPrivate(&screen->devPrivates, - glamor_screen_private_key, - priv); + dixSetPrivate(&screen->devPrivates, glamor_screen_private_key, priv); } - - static inline glamor_pixmap_private * glamor_get_pixmap_private(PixmapPtr pixmap) { - glamor_pixmap_private *priv; - priv = dixLookupPrivate(&pixmap->devPrivates, - glamor_pixmap_private_key); - if (!priv) { - glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); - priv = dixLookupPrivate(&pixmap->devPrivates, - glamor_pixmap_private_key); - } - return priv; + glamor_pixmap_private *priv; + + priv = dixLookupPrivate(&pixmap->devPrivates, glamor_pixmap_private_key); + if (!priv) { + glamor_set_pixmap_type(pixmap, GLAMOR_MEMORY); + priv = dixLookupPrivate(&pixmap->devPrivates, + glamor_pixmap_private_key); + } + return priv; } void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv); @@ -545,8 +519,8 @@ void glamor_set_pixmap_private(PixmapPtr pixmap, glamor_pixmap_private *priv); static inline Bool glamor_pm_is_solid(DrawablePtr drawable, unsigned long planemask) { - return (planemask & FbFullMask(drawable->depth)) == - FbFullMask(drawable->depth); + return (planemask & FbFullMask(drawable->depth)) == + FbFullMask(drawable->depth); } extern int glamor_debug_level; @@ -556,12 +530,15 @@ PixmapPtr glamor_get_drawable_pixmap(DrawablePtr drawable); Bool glamor_destroy_pixmap(PixmapPtr pixmap); -glamor_pixmap_fbo* glamor_pixmap_detach_fbo(glamor_pixmap_private *pixmap_priv); +glamor_pixmap_fbo *glamor_pixmap_detach_fbo(glamor_pixmap_private * + pixmap_priv); void glamor_pixmap_attach_fbo(PixmapPtr pixmap, glamor_pixmap_fbo *fbo); -glamor_pixmap_fbo * glamor_create_fbo_from_tex(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, GLint tex, int flag); -glamor_pixmap_fbo * glamor_create_fbo(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag); +glamor_pixmap_fbo *glamor_create_fbo_from_tex(glamor_screen_private * + glamor_priv, int w, int h, + GLenum format, GLint tex, + int flag); +glamor_pixmap_fbo *glamor_create_fbo(glamor_screen_private *glamor_priv, int w, + int h, GLenum format, int flag); void glamor_destroy_fbo(glamor_pixmap_fbo *fbo); void glamor_pixmap_destroy_fbo(glamor_pixmap_private *priv); void glamor_purge_fbo(glamor_pixmap_fbo *fbo); @@ -571,23 +548,23 @@ void glamor_fini_pixmap_fbo(ScreenPtr screen); Bool glamor_pixmap_fbo_fixup(ScreenPtr screen, PixmapPtr pixmap); void glamor_fbo_expire(glamor_screen_private *glamor_priv); -glamor_pixmap_fbo * -glamor_create_fbo_array(glamor_screen_private *glamor_priv, - int w, int h, GLenum format, int flag, - int block_w, int block_h, glamor_pixmap_private *); +glamor_pixmap_fbo *glamor_create_fbo_array(glamor_screen_private *glamor_priv, + int w, int h, GLenum format, + int flag, int block_w, int block_h, + glamor_pixmap_private *); /* glamor_copyarea.c */ RegionPtr + glamor_copy_area(DrawablePtr src, DrawablePtr dst, GCPtr gc, - int srcx, int srcy, int width, int height, int dstx, - int dsty); + int srcx, int srcy, int width, int height, int dstx, int dsty); void glamor_copy_n_to_n(DrawablePtr src, DrawablePtr dst, GCPtr gc, - BoxPtr box, int nbox, int dx, int dy, Bool reverse, - Bool upsidedown, Pixel bitplane, void *closure); + BoxPtr box, int nbox, int dx, int dy, Bool reverse, + Bool upsidedown, Pixel bitplane, void *closure); /* glamor_copywindow.c */ void glamor_copy_window(WindowPtr win, DDXPointRec old_origin, - RegionPtr src_region); + RegionPtr src_region); /* glamor_core.c */ Bool glamor_prepare_access(DrawablePtr drawable, glamor_access_t access); @@ -600,36 +577,34 @@ void glamor_init_finish_access_shaders(ScreenPtr screen); void glamor_fini_finish_access_shaders(ScreenPtr screen); const Bool glamor_get_drawable_location(const DrawablePtr drawable); void glamor_get_drawable_deltas(DrawablePtr drawable, PixmapPtr pixmap, - int *x, int *y); + int *x, int *y); Bool glamor_stipple(PixmapPtr pixmap, PixmapPtr stipple, - int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - unsigned long fg_pixel, unsigned long bg_pixel, - int stipple_x, int stipple_y); -GLint glamor_compile_glsl_prog(glamor_gl_dispatch * dispatch, GLenum type, - const char *source); -void glamor_link_glsl_prog(glamor_gl_dispatch * dispatch, GLint prog); + int x, int y, int width, int height, + unsigned char alu, unsigned long planemask, + unsigned long fg_pixel, unsigned long bg_pixel, + int stipple_x, int stipple_y); +GLint glamor_compile_glsl_prog(glamor_gl_dispatch *dispatch, GLenum type, + const char *source); +void glamor_link_glsl_prog(glamor_gl_dispatch *dispatch, GLint prog); void glamor_get_color_4f_from_pixel(PixmapPtr pixmap, - unsigned long fg_pixel, - GLfloat * color); + unsigned long fg_pixel, GLfloat *color); int glamor_set_destination_pixmap(PixmapPtr pixmap); -int glamor_set_destination_pixmap_priv(glamor_pixmap_private * - pixmap_priv); +int glamor_set_destination_pixmap_priv(glamor_pixmap_private *pixmap_priv); void glamor_set_destination_pixmap_fbo(glamor_pixmap_fbo *, int, int, int, int); /* nc means no check. caller must ensure this pixmap has valid fbo. * usually use the GLAMOR_PIXMAP_PRIV_HAS_FBO firstly. * */ -void glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private * - pixmap_priv); +void glamor_set_destination_pixmap_priv_nc(glamor_pixmap_private *pixmap_priv); -glamor_pixmap_fbo * -glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, int y, int w, int h, GLenum format, - GLenum type, int no_alpha, int revert, int swap_rb); +glamor_pixmap_fbo *glamor_es2_pixmap_read_prepare(PixmapPtr source, int x, + int y, int w, int h, + GLenum format, GLenum type, + int no_alpha, int revert, + int swap_rb); -Bool glamor_set_alu(struct glamor_gl_dispatch *dispatch, - unsigned char alu); +Bool glamor_set_alu(struct glamor_gl_dispatch *dispatch, unsigned char alu); Bool glamor_set_planemask(PixmapPtr pixmap, unsigned long planemask); Bool glamor_change_window_attributes(WindowPtr pWin, unsigned long mask); RegionPtr glamor_bitmap_to_region(PixmapPtr pixmap); @@ -640,107 +615,88 @@ int glamor_gl_get_version(void); ((major) * 256) \ + ((minor) * 1)) - - - /* glamor_fill.c */ Bool glamor_fill(DrawablePtr drawable, - GCPtr gc, int x, int y, int width, int height, Bool fallback); + GCPtr gc, int x, int y, int width, int height, Bool fallback); Bool glamor_solid(PixmapPtr pixmap, int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - unsigned long fg_pixel); -Bool -glamor_solid_boxes(PixmapPtr pixmap, - BoxPtr box, int nbox, - unsigned long fg_pixel); + unsigned char alu, unsigned long planemask, + unsigned long fg_pixel); +Bool glamor_solid_boxes(PixmapPtr pixmap, + BoxPtr box, int nbox, unsigned long fg_pixel); /* glamor_fillspans.c */ void glamor_fill_spans(DrawablePtr drawable, - GCPtr gc, - int n, DDXPointPtr points, int *widths, int sorted); + GCPtr gc, + int n, DDXPointPtr points, int *widths, int sorted); void glamor_init_solid_shader(ScreenPtr screen); void glamor_fini_solid_shader(ScreenPtr screen); /* glamor_getspans.c */ -void - -glamor_get_spans(DrawablePtr drawable, - int wmax, - DDXPointPtr points, - int *widths, int nspans, char *dst_start); +void glamor_get_spans(DrawablePtr drawable, + int wmax, DDXPointPtr points, int *widths, + int nspans, char *dst_start); /* glamor_glyphs.c */ void glamor_glyphs_fini(ScreenPtr screen); void glamor_glyphs(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, - INT16 ySrc, int nlist, GlyphListPtr list, - GlyphPtr * glyphs); + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, + INT16 ySrc, int nlist, GlyphListPtr list, GlyphPtr *glyphs); /* glamor_setspans.c */ void glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int n, int sorted); + DDXPointPtr points, int *widths, int n, int sorted); /* glamor_polyfillrect.c */ -void -glamor_poly_fill_rect(DrawablePtr drawable, - GCPtr gc, int nrect, xRectangle * prect); +void glamor_poly_fill_rect(DrawablePtr drawable, + GCPtr gc, int nrect, xRectangle *prect); /* glamor_polylines.c */ -void - -glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, - DDXPointPtr points); +void glamor_poly_lines(DrawablePtr drawable, GCPtr gc, int mode, int n, + DDXPointPtr points); /* glamor_putimage.c */ -void - -glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, - int w, int h, int leftPad, int format, char *bits); +void glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, + int w, int h, int leftPad, int format, char *bits); void glamor_init_putimage_shaders(ScreenPtr screen); void glamor_fini_putimage_shaders(ScreenPtr screen); /* glamor_render.c */ -Bool -glamor_composite_clipped_region(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private *soruce_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, - RegionPtr region, - int x_source, - int y_source, - int x_mask, - int y_mask, - int x_dest, - int y_dest); +Bool glamor_composite_clipped_region(CARD8 op, + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *soruce_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + RegionPtr region, + int x_source, + int y_source, + int x_mask, int y_mask, + int x_dest, int y_dest); void glamor_composite(CARD8 op, - PicturePtr pSrc, - PicturePtr pMask, - PicturePtr pDst, - INT16 xSrc, - INT16 ySrc, - INT16 xMask, - INT16 yMask, - INT16 xDst, INT16 yDst, CARD16 width, CARD16 height); + PicturePtr pSrc, + PicturePtr pMask, + PicturePtr pDst, + INT16 xSrc, + INT16 ySrc, + INT16 xMask, + INT16 yMask, + INT16 xDst, INT16 yDst, CARD16 width, CARD16 height); void glamor_init_composite_shaders(ScreenPtr screen); void glamor_fini_composite_shaders(ScreenPtr screen); void glamor_composite_glyph_rects(CARD8 op, - PicturePtr src, PicturePtr mask, - PicturePtr dst, int nrect, - glamor_composite_rect_t * rects); -void glamor_composite_rects (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects); + PicturePtr src, PicturePtr mask, + PicturePtr dst, int nrect, + glamor_composite_rect_t *rects); +void glamor_composite_rects(CARD8 op, + PicturePtr pDst, + xRenderColor *color, int nRect, xRectangle *rects); void glamor_init_trapezoid_shader(ScreenPtr screen); void glamor_fini_trapezoid_shader(ScreenPtr screen); PicturePtr glamor_convert_gradient_picture(ScreenPtr screen, @@ -752,19 +708,18 @@ Bool glamor_composite_choose_shader(CARD8 op, PicturePtr source, PicturePtr mask, PicturePtr dest, - glamor_pixmap_private *source_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, struct shader_key *s_key, - glamor_composite_shader **shader, - struct blendinfo *op_info, + glamor_composite_shader ** shader, + struct blendinfo *op_info, PictFormatShort *psaved_source_format); -void -glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv, - struct shader_key *key, - glamor_composite_shader *shader, - struct blendinfo *op_info); +void glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv, + struct shader_key *key, + glamor_composite_shader *shader, + struct blendinfo *op_info); void glamor_setup_composite_vbo(ScreenPtr screen, int n_verts); void glamor_emit_composite_vert(ScreenPtr screen, @@ -774,15 +729,15 @@ void glamor_emit_composite_vert(ScreenPtr screen, /* glamor_trapezoid.c */ void glamor_trapezoids(CARD8 op, - PicturePtr src, PicturePtr dst, - PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps); + PicturePtr src, PicturePtr dst, + PictFormatPtr mask_format, INT16 x_src, INT16 y_src, + int ntrap, xTrapezoid *traps); /* glamor_tile.c */ Bool glamor_tile(PixmapPtr pixmap, PixmapPtr tile, - int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - int tile_x, int tile_y); + int x, int y, int width, int height, + unsigned char alu, unsigned long planemask, + int tile_x, int tile_y); void glamor_init_tile_shader(ScreenPtr screen); void glamor_fini_tile_shader(ScreenPtr screen); @@ -801,18 +756,17 @@ PicturePtr glamor_generate_radial_gradient_picture(ScreenPtr screen, PictFormatShort format); /* glamor_triangles.c */ -void - -glamor_triangles(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris); +void glamor_triangles(CARD8 op, + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris); /* glamor_pixmap.c */ void glamor_pixmap_init(ScreenPtr screen); void glamor_pixmap_fini(ScreenPtr screen); + /** * Download a pixmap's texture to cpu memory. If success, * One copy of current pixmap's texture will be put into @@ -822,13 +776,11 @@ void glamor_pixmap_fini(ScreenPtr screen); * gl_tex must be 1. Used by glamor_prepare_access. * */ -Bool glamor_download_pixmap_to_cpu(PixmapPtr pixmap, - glamor_access_t access); - -void * -glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, int h, - int stride, void *bits, int pbo, glamor_access_t access); +Bool glamor_download_pixmap_to_cpu(PixmapPtr pixmap, glamor_access_t access); +void *glamor_download_sub_pixmap_to_cpu(PixmapPtr pixmap, int x, int y, int w, + int h, int stride, void *bits, int pbo, + glamor_access_t access); /** * Restore a pixmap's data which is downloaded by @@ -848,85 +800,81 @@ void glamor_restore_pixmap_to_texture(PixmapPtr pixmap); * the fbo has valid texture and attach to a valid fb. * If the fbo already has a valid glfbo then do nothing. */ -Bool -glamor_pixmap_ensure_fbo(PixmapPtr pixmap, GLenum format, int flag); +Bool glamor_pixmap_ensure_fbo(PixmapPtr pixmap, GLenum format, int flag); /** * Upload a pixmap to gl texture. Used by dynamic pixmap * uploading feature. The pixmap must be a software pixmap. * This function will change current FBO and current shaders. */ -enum glamor_pixmap_status glamor_upload_pixmap_to_texture(PixmapPtr - pixmap); +enum glamor_pixmap_status glamor_upload_pixmap_to_texture(PixmapPtr pixmap); -Bool -glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, int h, - int stride, void *bits, int pbo); +Bool glamor_upload_sub_pixmap_to_texture(PixmapPtr pixmap, int x, int y, int w, + int h, int stride, void *bits, + int pbo); -PixmapPtr -glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y, - int w, int h, glamor_access_t access); -void -glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y, - int w, int h, glamor_access_t access); +PixmapPtr glamor_get_sub_pixmap(PixmapPtr pixmap, int x, int y, + int w, int h, glamor_access_t access); +void glamor_put_sub_pixmap(PixmapPtr sub_pixmap, PixmapPtr pixmap, int x, int y, + int w, int h, glamor_access_t access); glamor_pixmap_clipped_regions * -glamor_compute_clipped_regions(glamor_pixmap_private *priv, RegionPtr region, - int *clipped_nbox, int repeat_type, - int reverse, int upsidedown); +glamor_compute_clipped_regions(glamor_pixmap_private *priv, + RegionPtr region, int *clipped_nbox, + int repeat_type, int reverse, + int upsidedown); glamor_pixmap_clipped_regions * glamor_compute_clipped_regions_ext(glamor_pixmap_private *pixmap_priv, - RegionPtr region, - int *n_region, - int inner_block_w, int inner_block_h, - int reverse, int upsidedown); + RegionPtr region, int *n_region, + int inner_block_w, int inner_block_h, + int reverse, int upsidedown); glamor_pixmap_clipped_regions * -glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, struct pixman_transform *transform, - RegionPtr region, int *n_region, int dx, int dy, int repeat_type, - int reverse, int upsidedown); - -Bool -glamor_composite_largepixmap_region(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private * source_pixmap_priv, - glamor_pixmap_private * mask_pixmap_priv, - glamor_pixmap_private * dest_pixmap_priv, - RegionPtr region, Bool force_clip, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height); - -Bool -glamor_get_transform_block_size(struct pixman_transform *transform, - int block_w, int block_h, - int *transformed_block_w, - int *transformed_block_h); - -void -glamor_get_transform_extent_from_box(struct pixman_box32 *temp_box, - struct pixman_transform *transform); +glamor_compute_transform_clipped_regions(glamor_pixmap_private *priv, + struct pixman_transform *transform, + RegionPtr region, + int *n_region, int dx, int dy, + int repeat_type, int reverse, + int upsidedown); + +Bool glamor_composite_largepixmap_region(CARD8 op, + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + RegionPtr region, Bool force_clip, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height); + +Bool glamor_get_transform_block_size(struct pixman_transform *transform, + int block_w, int block_h, + int *transformed_block_w, + int *transformed_block_h); + +void glamor_get_transform_extent_from_box(struct pixman_box32 *temp_box, + struct pixman_transform *transform); /** * Upload a picture to gl texture. Similar to the * glamor_upload_pixmap_to_texture. Used in rendering. **/ -enum glamor_pixmap_status - glamor_upload_picture_to_texture(PicturePtr picture); +enum glamor_pixmap_status glamor_upload_picture_to_texture(PicturePtr picture); /** * Upload bits to a pixmap's texture. This function will * convert the bits to the specified format/type format * if the conversion is unavoidable. **/ -Bool glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, GLenum type, - int no_alpha, int revert, int swap_rb, void *bits); +Bool glamor_upload_bits_to_pixmap_texture(PixmapPtr pixmap, GLenum format, + GLenum type, int no_alpha, int revert, + int swap_rb, void *bits); /** * Destroy all the resources allocated on the uploading @@ -938,72 +886,59 @@ int glamor_create_picture(PicturePtr picture); void glamor_set_window_pixmap(WindowPtr pWindow, PixmapPtr pPixmap); -Bool -glamor_prepare_access_picture(PicturePtr picture, glamor_access_t access); +Bool glamor_prepare_access_picture(PicturePtr picture, glamor_access_t access); void glamor_finish_access_picture(PicturePtr picture, glamor_access_t access); void glamor_destroy_picture(PicturePtr picture); /* fixup a fbo to the exact size as the pixmap. */ -Bool -glamor_fixup_pixmap_priv(ScreenPtr screen, glamor_pixmap_private *pixmap_priv); +Bool glamor_fixup_pixmap_priv(ScreenPtr screen, + glamor_pixmap_private *pixmap_priv); -void -glamor_picture_format_fixup(PicturePtr picture, - glamor_pixmap_private * pixmap_priv); +void glamor_picture_format_fixup(PicturePtr picture, + glamor_pixmap_private *pixmap_priv); -void -glamor_get_image(DrawablePtr pDrawable, int x, int y, int w, int h, - unsigned int format, unsigned long planeMask, char *d); +void glamor_get_image(DrawablePtr pDrawable, int x, int y, int w, int h, + unsigned int format, unsigned long planeMask, char *d); -void -glamor_add_traps(PicturePtr pPicture, - INT16 x_off, - INT16 y_off, int ntrap, xTrap * traps); +void glamor_add_traps(PicturePtr pPicture, + INT16 x_off, INT16 y_off, int ntrap, xTrap *traps); -RegionPtr -glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, - int srcx, int srcy, int w, int h, int dstx, int dsty, - unsigned long bitPlane); - -void -glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase); - -void -glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, - int x, int y, unsigned int nglyph, - CharInfoPtr * ppci, pointer pglyphBase); - -void -glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, - DrawablePtr pDrawable, int w, int h, int x, int y); - -void -glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt); - -void -glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, - xSegment *pSeg); - -void -glamor_poly_line(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, - DDXPointPtr ppt); - -void -glamor_composite_rectangles(CARD8 op, - PicturePtr dst, - xRenderColor *color, - int num_rects, - xRectangle *rects); +RegionPtr glamor_copy_plane(DrawablePtr pSrc, DrawablePtr pDst, GCPtr pGC, + int srcx, int srcy, int w, int h, + int dstx, int dsty, + unsigned long bitPlane); + +void glamor_image_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase); + +void glamor_poly_glyph_blt(DrawablePtr pDrawable, GCPtr pGC, + int x, int y, unsigned int nglyph, + CharInfoPtr *ppci, void *pglyphBase); + +void glamor_push_pixels(GCPtr pGC, PixmapPtr pBitmap, + DrawablePtr pDrawable, int w, int h, int x, int y); + +void glamor_poly_point(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, + DDXPointPtr ppt); + +void glamor_poly_segment(DrawablePtr pDrawable, GCPtr pGC, int nseg, + xSegment *pSeg); + +void glamor_poly_line(DrawablePtr pDrawable, GCPtr pGC, int mode, int npt, + DDXPointPtr ppt); + +void glamor_composite_rectangles(CARD8 op, + PicturePtr dst, + xRenderColor *color, + int num_rects, xRectangle *rects); /* glamor_xv */ typedef struct { - uint32_t transform_index; - uint32_t gamma; /* gamma value x 1000 */ + uint32_t transform_index; + uint32_t gamma; /* gamma value x 1000 */ int brightness; int saturation; int hue; @@ -1016,8 +951,8 @@ typedef struct { int src_w, src_h, dst_w, dst_h; int src_x, src_y, drw_x, drw_y; int w, h; - RegionRec clip; - PixmapPtr src_pix[3]; /* y, u, v for planar */ + RegionRec clip; + PixmapPtr src_pix[3]; /* y, u, v for planar */ int src_pix_w, src_pix_h; } glamor_port_private; @@ -1039,9 +974,9 @@ void glamor_fini_xv_shader(ScreenPtr screen); #define GLAMOR_TEXTURED_LARGE_PIXMAP 1 #define WALKAROUND_LARGE_TEXTURE_MAP #if 0 -#define MAX_FBO_SIZE 32 /* For test purpose only. */ +#define MAX_FBO_SIZE 32 /* For test purpose only. */ #endif //#define GLYPHS_NO_EDEGEMAP_OVERLAP_CHECK #define GLYPHS_EDEGE_OVERLAP_LOOSE_CHECK -#endif /* GLAMOR_PRIV_H */ +#endif /* GLAMOR_PRIV_H */ diff --git a/xorg-server/glamor/glamor_putimage.c b/xorg-server/glamor/glamor_putimage.c index 99f7ac6f5..6b25bec84 100644 --- a/xorg-server/glamor/glamor_putimage.c +++ b/xorg-server/glamor/glamor_putimage.c @@ -26,7 +26,6 @@ * */ - /** @file glamor_putaimge.c * * XPutImage implementation @@ -37,54 +36,61 @@ void glamor_init_putimage_shaders(ScreenPtr screen) { #if 0 - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - const char *xybitmap_vs = - "uniform float x_bias;\n" "uniform float x_scale;\n" - "uniform float y_bias;\n" "uniform float y_scale;\n" - "varying vec2 bitmap_coords;\n" "void main()\n" "{\n" - " gl_Position = vec4((gl_Vertex.x + x_bias) * x_scale,\n" - " (gl_Vertex.y + y_bias) * y_scale,\n" - " 0,\n" - " 1);\n" - " bitmap_coords = gl_MultiTexCoord0.xy;\n" "}\n"; - const char *xybitmap_fs = - "uniform vec4 fg, bg;\n" "varying vec2 bitmap_coords;\n" - "uniform sampler2D bitmap_sampler;\n" "void main()\n" "{\n" - " float bitmap_value = texture2D(bitmap_sampler,\n" - " bitmap_coords).x;\n" - " gl_FragColor = mix(bg, fg, bitmap_value);\n" "}\n"; - GLint fs_prog, vs_prog, prog; - GLint sampler_uniform_location; - - if (!GLEW_ARB_fragment_shader) - return; - - prog = dispatch->glCreateProgram(); - vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xybitmap_vs); - fs_prog = - glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, xybitmap_fs); - dispatch->glAttachShader(prog, vs_prog); - dispatch->glAttachShader(prog, fs_prog); - glamor_link_glsl_prog(prog); - - dispatch->glUseProgram(prog); - sampler_uniform_location = - dispatch->glGetUniformLocation(prog, "bitmap_sampler"); - dispatch->glUniform1i(sampler_uniform_location, 0); - - glamor_priv->put_image_xybitmap_fg_uniform_location = - dispatch->glGetUniformLocation(prog, "fg"); - glamor_priv->put_image_xybitmap_bg_uniform_location = - dispatch->glGetUniformLocation(prog, "bg"); - glamor_get_transform_uniform_locations(prog, - &glamor_priv->put_image_xybitmap_transform); - glamor_priv->put_image_xybitmap_prog = prog; - dispatch->glUseProgram(0); + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + const char *xybitmap_vs = + "uniform float x_bias;\n" + "uniform float x_scale;\n" + "uniform float y_bias;\n" + "uniform float y_scale;\n" + "varying vec2 bitmap_coords;\n" + "void main()\n" + "{\n" + " gl_Position = vec4((gl_Vertex.x + x_bias) * x_scale,\n" + " (gl_Vertex.y + y_bias) * y_scale,\n" + " 0,\n" + " 1);\n" + " bitmap_coords = gl_MultiTexCoord0.xy;\n" + "}\n"; + const char *xybitmap_fs = + "uniform vec4 fg, bg;\n" + "varying vec2 bitmap_coords;\n" + "uniform sampler2D bitmap_sampler;\n" + "void main()\n" + "{\n" + " float bitmap_value = texture2D(bitmap_sampler,\n" + " bitmap_coords).x;\n" + " gl_FragColor = mix(bg, fg, bitmap_value);\n" + "}\n"; + GLint fs_prog, vs_prog, prog; + GLint sampler_uniform_location; + + if (!GLEW_ARB_fragment_shader) + return; + + prog = dispatch->glCreateProgram(); + vs_prog = glamor_compile_glsl_prog(GL_VERTEX_SHADER, xybitmap_vs); + fs_prog = glamor_compile_glsl_prog(GL_FRAGMENT_SHADER, xybitmap_fs); + dispatch->glAttachShader(prog, vs_prog); + dispatch->glAttachShader(prog, fs_prog); + glamor_link_glsl_prog(prog); + + dispatch->glUseProgram(prog); + sampler_uniform_location = + dispatch->glGetUniformLocation(prog, "bitmap_sampler"); + dispatch->glUniform1i(sampler_uniform_location, 0); + + glamor_priv->put_image_xybitmap_fg_uniform_location = + dispatch->glGetUniformLocation(prog, "fg"); + glamor_priv->put_image_xybitmap_bg_uniform_location = + dispatch->glGetUniformLocation(prog, "bg"); + glamor_get_transform_uniform_locations(prog, + &glamor_priv-> + put_image_xybitmap_transform); + glamor_priv->put_image_xybitmap_prog = prog; + dispatch->glUseProgram(0); #endif } - /* Do an XYBitmap putimage. The bits are byte-aligned rows of bitmap * data (where each row starts at a bit index of left_pad), and the * destination gets filled with the gc's fg color where the bitmap is set @@ -101,141 +107,136 @@ glamor_init_putimage_shaders(ScreenPtr screen) static int y_flip(PixmapPtr pixmap, int y) { - ScreenPtr screen = pixmap->drawable.pScreen; - PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen); + ScreenPtr screen = pixmap->drawable.pScreen; + PixmapPtr screen_pixmap = screen->GetScreenPixmap(screen); - if (pixmap == screen_pixmap) - return (pixmap->drawable.height - 1) - y; - else - return y; + if (pixmap == screen_pixmap) + return (pixmap->drawable.height - 1) - y; + else + return y; } - static void glamor_put_image_xybitmap(DrawablePtr drawable, GCPtr gc, - int x, int y, int w, int h, int left_pad, - int image_format, char *bits) + int x, int y, int w, int h, int left_pad, + int image_format, char *bits) { - ScreenPtr screen = drawable->pScreen; - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - float fg[4], bg[4]; - GLuint tex; - unsigned int stride = PixmapBytePad(1, w + left_pad); - RegionPtr clip; - BoxPtr box; - int nbox; - float dest_coords[8]; - const float bitmap_coords[8] = { - 0.0, 0.0, - 1.0, 0.0, - 1.0, 1.0, - 0.0, 1.0, - }; - GLfloat xscale, yscale; - glamor_pixmap_private *pixmap_priv; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - - pixmap_priv_get_scale(pixmap_priv, &xscale, &yscale); - - glamor_set_normalize_vcoords(xscale, yscale, - x, y, - x + w, y + h, - glamor_priv->yInverted, dest_coords); - - glamor_fallback("glamor_put_image_xybitmap: disabled\n"); - goto fail; - - if (glamor_priv->put_image_xybitmap_prog == 0) { - ErrorF("no program for xybitmap putimage\n"); - goto fail; - } - - glamor_set_alu(gc->alu); - if (!glamor_set_planemask(pixmap, gc->planemask)) - goto fail; - - dispatch->glUseProgram(glamor_priv->put_image_xybitmap_prog); - - glamor_get_color_4f_from_pixel(pixmap, gc->fgPixel, fg); - dispatch->glUniform4fv - (glamor_priv->put_image_xybitmap_fg_uniform_location, 1, fg); - glamor_get_color_4f_from_pixel(pixmap, gc->bgPixel, bg); - dispatch->glUniform4fv - (glamor_priv->put_image_xybitmap_bg_uniform_location, 1, bg); - - dispatch->glGenTextures(1, &tex); - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glEnable(GL_TEXTURE_2D); - dispatch->glBindTexture(GL_TEXTURE_2D, tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - dispatch->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, stride * 8); - dispatch->glPixelStorei(GL_UNPACK_SKIP_PIXELS, left_pad); - dispatch->glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, - w, h, 0, GL_COLOR_INDEX, GL_BITMAP, bits); - dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - dispatch->glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); - - /* Now that we've set up our bitmap texture and the shader, shove - * the destination rectangle through the cliprects and run the - * shader on the resulting fragments. - */ - dispatch->glVertexPointer(2, GL_FLOAT, 0, dest_coords); - dispatch->glEnableClientState(GL_VERTEX_ARRAY); - dispatch->glClientActiveTexture(GL_TEXTURE0); - dispatch->glTexCoordPointer(2, GL_FLOAT, 0, bitmap_coords); - dispatch->glEnableClientState(GL_TEXTURE_COORD_ARRAY); - - dispatch->glEnable(GL_SCISSOR_TEST); - clip = fbGetCompositeClip(gc); - for (nbox = REGION_NUM_RECTS(clip), - box = REGION_RECTS(clip); nbox--; box++) { - int x1 = x; - int y1 = y; - int x2 = x + w; - int y2 = y + h; - - if (x1 < box->x1) - x1 = box->x1; - if (y1 < box->y1) - y1 = box->y1; - if (x2 > box->x2) - x2 = box->x2; - if (y2 > box->y2) - y2 = box->y2; - if (x1 >= x2 || y1 >= y2) - continue; - - dispatch->glScissor(box->x1, - y_flip(pixmap, box->y1), - box->x2 - box->x1, box->y2 - box->y1); - dispatch->glDrawArrays(GL_QUADS, 0, 4); - } - - dispatch->glDisable(GL_SCISSOR_TEST); - glamor_set_alu(GXcopy); - glamor_set_planemask(pixmap, ~0); - dispatch->glDeleteTextures(1, &tex); - dispatch->glDisable(GL_TEXTURE_2D); - dispatch->glDisableClientState(GL_VERTEX_ARRAY); - dispatch->glDisableClientState(GL_TEXTURE_COORD_ARRAY); - return; - glamor_set_alu(GXcopy); - glamor_set_planemask(pixmap, ~0); - glamor_fallback(": to %p (%c)\n", - drawable, glamor_get_drawable_location(drawable)); -fail: - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - fbPutImage(drawable, gc, 1, x, y, w, h, left_pad, XYBitmap, - bits); - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } + ScreenPtr screen = drawable->pScreen; + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + float fg[4], bg[4]; + GLuint tex; + unsigned int stride = PixmapBytePad(1, w + left_pad); + RegionPtr clip; + BoxPtr box; + int nbox; + float dest_coords[8]; + + const float bitmap_coords[8] = { + 0.0, 0.0, + 1.0, 0.0, + 1.0, 1.0, + 0.0, 1.0, + }; + GLfloat xscale, yscale; + glamor_pixmap_private *pixmap_priv; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + + pixmap_priv_get_scale(pixmap_priv, &xscale, &yscale); + + glamor_set_normalize_vcoords(xscale, yscale, + x, y, + x + w, y + h, + glamor_priv->yInverted, dest_coords); + + glamor_fallback("glamor_put_image_xybitmap: disabled\n"); + goto fail; + + if (glamor_priv->put_image_xybitmap_prog == 0) { + ErrorF("no program for xybitmap putimage\n"); + goto fail; + } + + glamor_set_alu(gc->alu); + if (!glamor_set_planemask(pixmap, gc->planemask)) + goto fail; + + dispatch->glUseProgram(glamor_priv->put_image_xybitmap_prog); + + glamor_get_color_4f_from_pixel(pixmap, gc->fgPixel, fg); + dispatch->glUniform4fv + (glamor_priv->put_image_xybitmap_fg_uniform_location, 1, fg); + glamor_get_color_4f_from_pixel(pixmap, gc->bgPixel, bg); + dispatch->glUniform4fv + (glamor_priv->put_image_xybitmap_bg_uniform_location, 1, bg); + + dispatch->glGenTextures(1, &tex); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glBindTexture(GL_TEXTURE_2D, tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + dispatch->glPixelStorei(GL_UNPACK_ALIGNMENT, 1); + dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, stride * 8); + dispatch->glPixelStorei(GL_UNPACK_SKIP_PIXELS, left_pad); + dispatch->glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, + w, h, 0, GL_COLOR_INDEX, GL_BITMAP, bits); + dispatch->glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); + dispatch->glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0); + + /* Now that we've set up our bitmap texture and the shader, shove + * the destination rectangle through the cliprects and run the + * shader on the resulting fragments. + */ + dispatch->glVertexPointer(2, GL_FLOAT, 0, dest_coords); + dispatch->glEnableClientState(GL_VERTEX_ARRAY); + dispatch->glClientActiveTexture(GL_TEXTURE0); + dispatch->glTexCoordPointer(2, GL_FLOAT, 0, bitmap_coords); + dispatch->glEnableClientState(GL_TEXTURE_COORD_ARRAY); + + dispatch->glEnable(GL_SCISSOR_TEST); + clip = fbGetCompositeClip(gc); + for (nbox = REGION_NUM_RECTS(clip), box = REGION_RECTS(clip); nbox--; box++) { + int x1 = x; + int y1 = y; + int x2 = x + w; + int y2 = y + h; + + if (x1 < box->x1) + x1 = box->x1; + if (y1 < box->y1) + y1 = box->y1; + if (x2 > box->x2) + x2 = box->x2; + if (y2 > box->y2) + y2 = box->y2; + if (x1 >= x2 || y1 >= y2) + continue; + + dispatch->glScissor(box->x1, + y_flip(pixmap, box->y1), + box->x2 - box->x1, box->y2 - box->y1); + dispatch->glDrawArrays(GL_QUADS, 0, 4); + } + + dispatch->glDisable(GL_SCISSOR_TEST); + glamor_set_alu(GXcopy); + glamor_set_planemask(pixmap, ~0); + dispatch->glDeleteTextures(1, &tex); + dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glDisableClientState(GL_VERTEX_ARRAY); + dispatch->glDisableClientState(GL_TEXTURE_COORD_ARRAY); + return; + glamor_set_alu(GXcopy); + glamor_set_planemask(pixmap, ~0); + glamor_fallback(": to %p (%c)\n", + drawable, glamor_get_drawable_location(drawable)); + fail: + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + fbPutImage(drawable, gc, 1, x, y, w, h, left_pad, XYBitmap, bits); + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } } #endif @@ -244,120 +245,120 @@ glamor_fini_putimage_shaders(ScreenPtr screen) { } - -static Bool +static Bool _glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, - int w, int h, int left_pad, int image_format, char *bits, Bool fallback) + int w, int h, int left_pad, int image_format, char *bits, + Bool fallback) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(pixmap); - RegionPtr clip; - int x_off, y_off; - Bool ret = FALSE; - PixmapPtr temp_pixmap, sub_pixmap; - glamor_pixmap_private *temp_pixmap_priv; - BoxRec box; - - glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); - clip = fbGetCompositeClip(gc); - if (image_format == XYBitmap) { - assert(depth == 1); - goto fail; - } - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { - glamor_fallback("has no fbo.\n"); - goto fail; - } - - if (image_format != ZPixmap) { - glamor_fallback("non-ZPixmap\n"); - goto fail; - } - - if (!glamor_set_planemask(pixmap, gc->planemask)) { - goto fail; - } - /* create a temporary pixmap and upload the bits to that - * pixmap, then apply clip copy it to the destination pixmap.*/ - box.x1 = x + drawable->x; - box.y1 = y + drawable->y; - box.x2 = x + w + drawable->x; - box.y2 = y + h + drawable->y; - - if ((clip != NULL && RegionContainsRect(clip, &box) != rgnIN) - || gc->alu != GXcopy) { - temp_pixmap = glamor_create_pixmap(drawable->pScreen, w, h, depth, 0); - if (temp_pixmap == NULL) - goto fail; - - temp_pixmap_priv = glamor_get_pixmap_private(temp_pixmap); - - if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) { - temp_pixmap_priv->base.picture = pixmap_priv->base.picture; - temp_pixmap_priv->base.is_picture = pixmap_priv->base.is_picture; - } - - glamor_upload_sub_pixmap_to_texture(temp_pixmap, 0, 0, w, h, - pixmap->devKind, bits, 0); - - glamor_copy_area(&temp_pixmap->drawable, drawable, gc, 0, 0, w, h, x, y); - glamor_destroy_pixmap(temp_pixmap); - } else - glamor_upload_sub_pixmap_to_texture(pixmap, x + drawable->x + x_off, y + drawable->y + y_off, - w, h, PixmapBytePad(w, depth), bits, 0); - ret = TRUE; - goto done; - -fail: - glamor_set_planemask(pixmap, ~0); - - if (!fallback - && glamor_ddx_fallback_check_pixmap(&pixmap->drawable)) - goto done; - - glamor_fallback("to %p (%c)\n", - drawable, glamor_get_drawable_location(drawable)); - - sub_pixmap = glamor_get_sub_pixmap(pixmap, x + x_off + drawable->x, - y + y_off + drawable->y, w, h, - GLAMOR_ACCESS_RW); - if (sub_pixmap) { - if (clip != NULL) - pixman_region_translate (clip, -x - drawable->x, -y - drawable->y); - - fbPutImage(&sub_pixmap->drawable, gc, depth, 0, 0, w, h, - left_pad, image_format, bits); - - glamor_put_sub_pixmap(sub_pixmap, pixmap, - x + x_off + drawable->x, - y + y_off + drawable->y, - w, h, GLAMOR_ACCESS_RW); - if (clip != NULL) - pixman_region_translate (clip, x + drawable->x, y + drawable->y); - } else - fbPutImage(drawable, gc, depth, x, y, w, h, - left_pad, image_format, bits); - ret = TRUE; - -done: - return ret; + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + RegionPtr clip; + int x_off, y_off; + Bool ret = FALSE; + PixmapPtr temp_pixmap, sub_pixmap; + glamor_pixmap_private *temp_pixmap_priv; + BoxRec box; + + glamor_get_drawable_deltas(drawable, pixmap, &x_off, &y_off); + clip = fbGetCompositeClip(gc); + if (image_format == XYBitmap) { + assert(depth == 1); + goto fail; + } + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { + glamor_fallback("has no fbo.\n"); + goto fail; + } + + if (image_format != ZPixmap) { + glamor_fallback("non-ZPixmap\n"); + goto fail; + } + + if (!glamor_set_planemask(pixmap, gc->planemask)) { + goto fail; + } + /* create a temporary pixmap and upload the bits to that + * pixmap, then apply clip copy it to the destination pixmap.*/ + box.x1 = x + drawable->x; + box.y1 = y + drawable->y; + box.x2 = x + w + drawable->x; + box.y2 = y + h + drawable->y; + + if ((clip != NULL && RegionContainsRect(clip, &box) != rgnIN) + || gc->alu != GXcopy) { + temp_pixmap = glamor_create_pixmap(drawable->pScreen, w, h, depth, 0); + if (temp_pixmap == NULL) + goto fail; + + temp_pixmap_priv = glamor_get_pixmap_private(temp_pixmap); + + if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) { + temp_pixmap_priv->base.picture = pixmap_priv->base.picture; + temp_pixmap_priv->base.is_picture = pixmap_priv->base.is_picture; + } + + glamor_upload_sub_pixmap_to_texture(temp_pixmap, 0, 0, w, h, + pixmap->devKind, bits, 0); + + glamor_copy_area(&temp_pixmap->drawable, drawable, gc, 0, 0, w, h, x, + y); + glamor_destroy_pixmap(temp_pixmap); + } + else + glamor_upload_sub_pixmap_to_texture(pixmap, x + drawable->x + x_off, + y + drawable->y + y_off, w, h, + PixmapBytePad(w, depth), bits, 0); + ret = TRUE; + goto done; + + fail: + glamor_set_planemask(pixmap, ~0); + + if (!fallback && glamor_ddx_fallback_check_pixmap(&pixmap->drawable)) + goto done; + + glamor_fallback("to %p (%c)\n", + drawable, glamor_get_drawable_location(drawable)); + + sub_pixmap = glamor_get_sub_pixmap(pixmap, x + x_off + drawable->x, + y + y_off + drawable->y, w, h, + GLAMOR_ACCESS_RW); + if (sub_pixmap) { + if (clip != NULL) + pixman_region_translate(clip, -x - drawable->x, -y - drawable->y); + + fbPutImage(&sub_pixmap->drawable, gc, depth, 0, 0, w, h, + left_pad, image_format, bits); + + glamor_put_sub_pixmap(sub_pixmap, pixmap, + x + x_off + drawable->x, + y + y_off + drawable->y, w, h, GLAMOR_ACCESS_RW); + if (clip != NULL) + pixman_region_translate(clip, x + drawable->x, y + drawable->y); + } + else + fbPutImage(drawable, gc, depth, x, y, w, h, + left_pad, image_format, bits); + ret = TRUE; + + done: + return ret; } void glamor_put_image(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, - int w, int h, int left_pad, int image_format, char *bits) + int w, int h, int left_pad, int image_format, char *bits) { - _glamor_put_image(drawable, gc, depth, x, y, w, h, - left_pad, image_format, bits, TRUE); + _glamor_put_image(drawable, gc, depth, x, y, w, h, + left_pad, image_format, bits, TRUE); } Bool glamor_put_image_nf(DrawablePtr drawable, GCPtr gc, int depth, int x, int y, - int w, int h, int left_pad, int image_format, char *bits) + int w, int h, int left_pad, int image_format, char *bits) { - return _glamor_put_image(drawable, gc, depth, x, y, w, h, - left_pad, image_format, bits, FALSE); + return _glamor_put_image(drawable, gc, depth, x, y, w, h, + left_pad, image_format, bits, FALSE); } - diff --git a/xorg-server/glamor/glamor_render.c b/xorg-server/glamor/glamor_render.c index 76a571f8b..4a3a97ccd 100644 --- a/xorg-server/glamor/glamor_render.c +++ b/xorg-server/glamor/glamor_render.c @@ -45,1425 +45,1428 @@ #endif static struct blendinfo composite_op_info[] = { - [PictOpClear] = {0, 0, GL_ZERO, GL_ZERO}, - [PictOpSrc] = {0, 0, GL_ONE, GL_ZERO}, - [PictOpDst] = {0, 0, GL_ZERO, GL_ONE}, - [PictOpOver] = {0, 1, GL_ONE, GL_ONE_MINUS_SRC_ALPHA}, - [PictOpOverReverse] = {1, 0, GL_ONE_MINUS_DST_ALPHA, GL_ONE}, - [PictOpIn] = {1, 0, GL_DST_ALPHA, GL_ZERO}, - [PictOpInReverse] = {0, 1, GL_ZERO, GL_SRC_ALPHA}, - [PictOpOut] = {1, 0, GL_ONE_MINUS_DST_ALPHA, GL_ZERO}, - [PictOpOutReverse] = {0, 1, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA}, - [PictOpAtop] = {1, 1, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}, - [PictOpAtopReverse] = {1, 1, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA}, - [PictOpXor] = - {1, 1, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}, - [PictOpAdd] = {0, 0, GL_ONE, GL_ONE}, + [PictOpClear] = {0, 0, GL_ZERO, GL_ZERO}, + [PictOpSrc] = {0, 0, GL_ONE, GL_ZERO}, + [PictOpDst] = {0, 0, GL_ZERO, GL_ONE}, + [PictOpOver] = {0, 1, GL_ONE, GL_ONE_MINUS_SRC_ALPHA}, + [PictOpOverReverse] = {1, 0, GL_ONE_MINUS_DST_ALPHA, GL_ONE}, + [PictOpIn] = {1, 0, GL_DST_ALPHA, GL_ZERO}, + [PictOpInReverse] = {0, 1, GL_ZERO, GL_SRC_ALPHA}, + [PictOpOut] = {1, 0, GL_ONE_MINUS_DST_ALPHA, GL_ZERO}, + [PictOpOutReverse] = {0, 1, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA}, + [PictOpAtop] = {1, 1, GL_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}, + [PictOpAtopReverse] = {1, 1, GL_ONE_MINUS_DST_ALPHA, GL_SRC_ALPHA}, + [PictOpXor] = {1, 1, GL_ONE_MINUS_DST_ALPHA, GL_ONE_MINUS_SRC_ALPHA}, + [PictOpAdd] = {0, 0, GL_ONE, GL_ONE}, }; + #define RepeatFix 10 static GLuint -glamor_create_composite_fs(glamor_gl_dispatch * dispatch, - struct shader_key *key) +glamor_create_composite_fs(glamor_gl_dispatch *dispatch, + struct shader_key *key) { - const char *repeat_define = - "#define RepeatNone 0\n" - "#define RepeatNormal 1\n" - "#define RepeatPad 2\n" - "#define RepeatReflect 3\n" - "#define RepeatFix 10\n" - "uniform int source_repeat_mode;\n" - "uniform int mask_repeat_mode;\n"; - const char *relocate_texture = - GLAMOR_DEFAULT_PRECISION - "vec2 rel_tex_coord(vec2 texture, vec4 wh, int repeat) \n" - "{\n" - " vec2 rel_tex; \n" - " rel_tex = texture * wh.xy; \n" - " if (repeat == RepeatNone)\n" - " return rel_tex; \n" - " else if (repeat == RepeatNormal) \n" - " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh.xy); \n" - " else if(repeat == RepeatPad) { \n" - " if (rel_tex.x >= 1.0) rel_tex.x = 1.0 - wh.z * wh.x / 2.; \n" - " else if(rel_tex.x < 0.0) rel_tex.x = 0.0; \n" - " if (rel_tex.y >= 1.0) rel_tex.y = 1.0 - wh.w * wh.y / 2.; \n" - " else if(rel_tex.y < 0.0) rel_tex.y = 0.0; \n" - " rel_tex = rel_tex / wh.xy; \n" - " } \n" - " else if(repeat == RepeatReflect) {\n" - " if ((1.0 - mod(abs(floor(rel_tex.x)), 2.0)) < 0.001)\n" - " rel_tex.x = 2.0 - (1.0 - fract(rel_tex.x))/wh.x;\n" - " else \n" - " rel_tex.x = fract(rel_tex.x)/wh.x;\n" - " if ((1.0 - mod(abs(floor(rel_tex.y)), 2.0)) < 0.001)\n" - " rel_tex.y = 2.0 - (1.0 - fract(rel_tex.y))/wh.y;\n" - " else \n" - " rel_tex.y = fract(rel_tex.y)/wh.y;\n" - " } \n" - " return rel_tex; \n" - "}\n"; - /* The texture and the pixmap size is not match eaxctly, so can't sample it directly. - * rel_sampler will recalculate the texture coords.*/ - const char *rel_sampler = - " vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int repeat, int set_alpha)\n" - "{\n" - " tex = rel_tex_coord(tex, wh, repeat - RepeatFix);\n" - " if (repeat == RepeatFix) {\n" - " if (!(tex.x >= 0.0 && tex.x < 1.0 \n" - " && tex.y >= 0.0 && tex.y < 1.0))\n" - " return vec4(0.0, 0.0, 0.0, set_alpha);\n" - " tex = (fract(tex) / wh.xy);\n" - " }\n" - " if (set_alpha != 1)\n" - " return texture2D(tex_image, tex);\n" - " else\n" - " return vec4(texture2D(tex_image, tex).rgb, 1.0);\n" - "}\n"; - - const char *source_solid_fetch = - GLAMOR_DEFAULT_PRECISION - "uniform vec4 source;\n" - "vec4 get_source()\n" "{\n" " return source;\n" "}\n"; - const char *source_alpha_pixmap_fetch = - GLAMOR_DEFAULT_PRECISION - "varying vec2 source_texture;\n" - "uniform sampler2D source_sampler;\n" - "uniform vec4 source_wh;" - "vec4 get_source()\n" - "{\n" - " if (source_repeat_mode < RepeatFix)\n" - " return texture2D(source_sampler, source_texture);\n" - " else \n" - " return rel_sampler(source_sampler, source_texture,\n" - " source_wh, source_repeat_mode, 0);\n" - "}\n"; - const char *source_pixmap_fetch = - GLAMOR_DEFAULT_PRECISION "varying vec2 source_texture;\n" - "uniform sampler2D source_sampler;\n" - "uniform vec4 source_wh;\n" - "vec4 get_source()\n" - "{\n" - " if (source_repeat_mode < RepeatFix) \n" - " return vec4(texture2D(source_sampler, source_texture).rgb, 1);\n" - " else \n" - " return rel_sampler(source_sampler, source_texture,\n" - " source_wh, source_repeat_mode, 1);\n" - "}\n"; - const char *mask_solid_fetch = - GLAMOR_DEFAULT_PRECISION "uniform vec4 mask;\n" - "vec4 get_mask()\n" "{\n" " return mask;\n" "}\n"; - const char *mask_alpha_pixmap_fetch = - GLAMOR_DEFAULT_PRECISION "varying vec2 mask_texture;\n" - "uniform sampler2D mask_sampler;\n" - "uniform vec4 mask_wh;\n" - "vec4 get_mask()\n" - "{\n" - " if (mask_repeat_mode < RepeatFix) \n" - " return texture2D(mask_sampler, mask_texture);\n" - " else \n" - " return rel_sampler(mask_sampler, mask_texture,\n" - " mask_wh, mask_repeat_mode, 0);\n" - "}\n"; - const char *mask_pixmap_fetch = - GLAMOR_DEFAULT_PRECISION "varying vec2 mask_texture;\n" - "uniform sampler2D mask_sampler;\n" - "uniform vec4 mask_wh;\n" - "vec4 get_mask()\n" - "{\n" - " if (mask_repeat_mode < RepeatFix) \n" - " return vec4(texture2D(mask_sampler, mask_texture).rgb, 1);\n" - " else \n" - " return rel_sampler(mask_sampler, mask_texture,\n" - " mask_wh, mask_repeat_mode, 1);\n" - "}\n"; - const char *in_source_only = - GLAMOR_DEFAULT_PRECISION "void main()\n" "{\n" - " gl_FragColor = get_source();\n" "}\n"; - const char *in_normal = - GLAMOR_DEFAULT_PRECISION "void main()\n" "{\n" - " gl_FragColor = get_source() * get_mask().a;\n" "}\n"; - const char *in_ca_source = - GLAMOR_DEFAULT_PRECISION "void main()\n" "{\n" - " gl_FragColor = get_source() * get_mask();\n" "}\n"; - const char *in_ca_alpha = - GLAMOR_DEFAULT_PRECISION "void main()\n" "{\n" - " gl_FragColor = get_source().a * get_mask();\n" "}\n"; - char *source; - const char *source_fetch; - const char *mask_fetch = ""; - const char *in; - GLuint prog; - - switch (key->source) { - case SHADER_SOURCE_SOLID: - source_fetch = source_solid_fetch; - break; - case SHADER_SOURCE_TEXTURE_ALPHA: - source_fetch = source_alpha_pixmap_fetch; - break; - case SHADER_SOURCE_TEXTURE: - source_fetch = source_pixmap_fetch; - break; - default: - FatalError("Bad composite shader source"); - } - - switch (key->mask) { - case SHADER_MASK_NONE: - break; - case SHADER_MASK_SOLID: - mask_fetch = mask_solid_fetch; - break; - case SHADER_MASK_TEXTURE_ALPHA: - mask_fetch = mask_alpha_pixmap_fetch; - break; - case SHADER_MASK_TEXTURE: - mask_fetch = mask_pixmap_fetch; - break; - default: - FatalError("Bad composite shader mask"); - } - - switch (key->in) { - case SHADER_IN_SOURCE_ONLY: - in = in_source_only; - break; - case SHADER_IN_NORMAL: - in = in_normal; - break; - case SHADER_IN_CA_SOURCE: - in = in_ca_source; - break; - case SHADER_IN_CA_ALPHA: - in = in_ca_alpha; - break; - default: - FatalError("Bad composite IN type"); - } - - XNFasprintf(&source, "%s%s%s%s%s%s", repeat_define, relocate_texture, rel_sampler,source_fetch, mask_fetch, in); - - - prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - source); - free(source); - - return prog; + const char *repeat_define = + "#define RepeatNone 0\n" + "#define RepeatNormal 1\n" + "#define RepeatPad 2\n" + "#define RepeatReflect 3\n" + "#define RepeatFix 10\n" + "uniform int source_repeat_mode;\n" + "uniform int mask_repeat_mode;\n"; + const char *relocate_texture = + GLAMOR_DEFAULT_PRECISION + "vec2 rel_tex_coord(vec2 texture, vec4 wh, int repeat) \n" + "{\n" + " vec2 rel_tex; \n" + " rel_tex = texture * wh.xy; \n" + " if (repeat == RepeatNone)\n" + " return rel_tex; \n" + " else if (repeat == RepeatNormal) \n" + " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh.xy); \n" + " else if(repeat == RepeatPad) { \n" + " if (rel_tex.x >= 1.0) rel_tex.x = 1.0 - wh.z * wh.x / 2.; \n" + " else if(rel_tex.x < 0.0) rel_tex.x = 0.0; \n" + " if (rel_tex.y >= 1.0) rel_tex.y = 1.0 - wh.w * wh.y / 2.; \n" + " else if(rel_tex.y < 0.0) rel_tex.y = 0.0; \n" + " rel_tex = rel_tex / wh.xy; \n" + " } \n" + " else if(repeat == RepeatReflect) {\n" + " if ((1.0 - mod(abs(floor(rel_tex.x)), 2.0)) < 0.001)\n" + " rel_tex.x = 2.0 - (1.0 - fract(rel_tex.x))/wh.x;\n" + " else \n" + " rel_tex.x = fract(rel_tex.x)/wh.x;\n" + " if ((1.0 - mod(abs(floor(rel_tex.y)), 2.0)) < 0.001)\n" + " rel_tex.y = 2.0 - (1.0 - fract(rel_tex.y))/wh.y;\n" + " else \n" + " rel_tex.y = fract(rel_tex.y)/wh.y;\n" + " } \n" + " return rel_tex; \n" + "}\n"; + /* The texture and the pixmap size is not match eaxctly, so can't sample it directly. + * rel_sampler will recalculate the texture coords.*/ + const char *rel_sampler = + " vec4 rel_sampler(sampler2D tex_image, vec2 tex, vec4 wh, int repeat, int set_alpha)\n" + "{\n" + " tex = rel_tex_coord(tex, wh, repeat - RepeatFix);\n" + " if (repeat == RepeatFix) {\n" + " if (!(tex.x >= 0.0 && tex.x < 1.0 \n" + " && tex.y >= 0.0 && tex.y < 1.0))\n" + " return vec4(0.0, 0.0, 0.0, set_alpha);\n" + " tex = (fract(tex) / wh.xy);\n" + " }\n" + " if (set_alpha != 1)\n" + " return texture2D(tex_image, tex);\n" + " else\n" + " return vec4(texture2D(tex_image, tex).rgb, 1.0);\n" + "}\n"; + + const char *source_solid_fetch = + GLAMOR_DEFAULT_PRECISION + "uniform vec4 source;\n" + "vec4 get_source()\n" + "{\n" + " return source;\n" + "}\n"; + const char *source_alpha_pixmap_fetch = + GLAMOR_DEFAULT_PRECISION + "varying vec2 source_texture;\n" + "uniform sampler2D source_sampler;\n" + "uniform vec4 source_wh;" + "vec4 get_source()\n" + "{\n" + " if (source_repeat_mode < RepeatFix)\n" + " return texture2D(source_sampler, source_texture);\n" + " else \n" + " return rel_sampler(source_sampler, source_texture,\n" + " source_wh, source_repeat_mode, 0);\n" + "}\n"; + const char *source_pixmap_fetch = + GLAMOR_DEFAULT_PRECISION + "varying vec2 source_texture;\n" + "uniform sampler2D source_sampler;\n" + "uniform vec4 source_wh;\n" + "vec4 get_source()\n" + "{\n" + " if (source_repeat_mode < RepeatFix) \n" + " return vec4(texture2D(source_sampler, source_texture).rgb, 1);\n" + " else \n" + " return rel_sampler(source_sampler, source_texture,\n" + " source_wh, source_repeat_mode, 1);\n" + "}\n"; + const char *mask_solid_fetch = + GLAMOR_DEFAULT_PRECISION + "uniform vec4 mask;\n" + "vec4 get_mask()\n" + "{\n" + " return mask;\n" + "}\n"; + const char *mask_alpha_pixmap_fetch = + GLAMOR_DEFAULT_PRECISION + "varying vec2 mask_texture;\n" + "uniform sampler2D mask_sampler;\n" + "uniform vec4 mask_wh;\n" + "vec4 get_mask()\n" + "{\n" + " if (mask_repeat_mode < RepeatFix) \n" + " return texture2D(mask_sampler, mask_texture);\n" + " else \n" + " return rel_sampler(mask_sampler, mask_texture,\n" + " mask_wh, mask_repeat_mode, 0);\n" + "}\n"; + const char *mask_pixmap_fetch = + GLAMOR_DEFAULT_PRECISION + "varying vec2 mask_texture;\n" + "uniform sampler2D mask_sampler;\n" + "uniform vec4 mask_wh;\n" + "vec4 get_mask()\n" + "{\n" + " if (mask_repeat_mode < RepeatFix) \n" + " return vec4(texture2D(mask_sampler, mask_texture).rgb, 1);\n" + " else \n" + " return rel_sampler(mask_sampler, mask_texture,\n" + " mask_wh, mask_repeat_mode, 1);\n" + "}\n"; + const char *in_source_only = + GLAMOR_DEFAULT_PRECISION + "void main()\n" + "{\n" + " gl_FragColor = get_source();\n" + "}\n"; + const char *in_normal = + GLAMOR_DEFAULT_PRECISION + "void main()\n" + "{\n" + " gl_FragColor = get_source() * get_mask().a;\n" + "}\n"; + const char *in_ca_source = + GLAMOR_DEFAULT_PRECISION + "void main()\n" + "{\n" + " gl_FragColor = get_source() * get_mask();\n" + "}\n"; + const char *in_ca_alpha = + GLAMOR_DEFAULT_PRECISION + "void main()\n" + "{\n" + " gl_FragColor = get_source().a * get_mask();\n" + "}\n"; + char *source; + const char *source_fetch; + const char *mask_fetch = ""; + const char *in; + GLuint prog; + + switch (key->source) { + case SHADER_SOURCE_SOLID: + source_fetch = source_solid_fetch; + break; + case SHADER_SOURCE_TEXTURE_ALPHA: + source_fetch = source_alpha_pixmap_fetch; + break; + case SHADER_SOURCE_TEXTURE: + source_fetch = source_pixmap_fetch; + break; + default: + FatalError("Bad composite shader source"); + } + + switch (key->mask) { + case SHADER_MASK_NONE: + break; + case SHADER_MASK_SOLID: + mask_fetch = mask_solid_fetch; + break; + case SHADER_MASK_TEXTURE_ALPHA: + mask_fetch = mask_alpha_pixmap_fetch; + break; + case SHADER_MASK_TEXTURE: + mask_fetch = mask_pixmap_fetch; + break; + default: + FatalError("Bad composite shader mask"); + } + + switch (key->in) { + case SHADER_IN_SOURCE_ONLY: + in = in_source_only; + break; + case SHADER_IN_NORMAL: + in = in_normal; + break; + case SHADER_IN_CA_SOURCE: + in = in_ca_source; + break; + case SHADER_IN_CA_ALPHA: + in = in_ca_alpha; + break; + default: + FatalError("Bad composite IN type"); + } + + XNFasprintf(&source, "%s%s%s%s%s%s", repeat_define, relocate_texture, + rel_sampler, source_fetch, mask_fetch, in); + + prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, source); + free(source); + + return prog; } static GLuint -glamor_create_composite_vs(glamor_gl_dispatch * dispatch, - struct shader_key *key) +glamor_create_composite_vs(glamor_gl_dispatch *dispatch, + struct shader_key *key) { - const char *main_opening = - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord0;\n" - "attribute vec4 v_texcoord1;\n" - "varying vec2 source_texture;\n" - "varying vec2 mask_texture;\n" - "void main()\n" "{\n" " gl_Position = v_position;\n"; - const char *source_coords = - " source_texture = v_texcoord0.xy;\n"; - const char *mask_coords = " mask_texture = v_texcoord1.xy;\n"; - const char *main_closing = "}\n"; - const char *source_coords_setup = ""; - const char *mask_coords_setup = ""; - char *source; - GLuint prog; - - if (key->source != SHADER_SOURCE_SOLID) - source_coords_setup = source_coords; - - if (key->mask != SHADER_MASK_NONE - && key->mask != SHADER_MASK_SOLID) - mask_coords_setup = mask_coords; - - XNFasprintf(&source, - "%s%s%s%s", - main_opening, - source_coords_setup, mask_coords_setup, main_closing); - - prog = - glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, source); - free(source); - - return prog; + const char *main_opening = + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord0;\n" + "attribute vec4 v_texcoord1;\n" + "varying vec2 source_texture;\n" + "varying vec2 mask_texture;\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n"; + const char *source_coords = " source_texture = v_texcoord0.xy;\n"; + const char *mask_coords = " mask_texture = v_texcoord1.xy;\n"; + const char *main_closing = "}\n"; + const char *source_coords_setup = ""; + const char *mask_coords_setup = ""; + char *source; + GLuint prog; + + if (key->source != SHADER_SOURCE_SOLID) + source_coords_setup = source_coords; + + if (key->mask != SHADER_MASK_NONE && key->mask != SHADER_MASK_SOLID) + mask_coords_setup = mask_coords; + + XNFasprintf(&source, + "%s%s%s%s", + main_opening, + source_coords_setup, mask_coords_setup, main_closing); + + prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, source); + free(source); + + return prog; } static void glamor_create_composite_shader(ScreenPtr screen, struct shader_key *key, - glamor_composite_shader * shader) + glamor_composite_shader *shader) { - GLuint vs, fs, prog; - GLint source_sampler_uniform_location, - mask_sampler_uniform_location; - glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - - dispatch = glamor_get_dispatch(glamor_priv); - vs = glamor_create_composite_vs(dispatch, key); - if (vs == 0) - goto out; - fs = glamor_create_composite_fs(dispatch, key); - if (fs == 0) - goto out; - - prog = dispatch->glCreateProgram(); - dispatch->glAttachShader(prog, vs); - dispatch->glAttachShader(prog, fs); - - dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_POS, - "v_position"); - dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_SOURCE, - "v_texcoord0"); - dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_MASK, - "v_texcoord1"); - - glamor_link_glsl_prog(dispatch, prog); - - shader->prog = prog; - - dispatch->glUseProgram(prog); - - if (key->source == SHADER_SOURCE_SOLID) { - shader->source_uniform_location = - dispatch->glGetUniformLocation(prog, "source"); - } else { - source_sampler_uniform_location = - dispatch->glGetUniformLocation(prog, "source_sampler"); - dispatch->glUniform1i(source_sampler_uniform_location, 0); - shader->source_wh = dispatch->glGetUniformLocation(prog, "source_wh"); - shader->source_repeat_mode = dispatch->glGetUniformLocation(prog, "source_repeat_mode"); - } - - if (key->mask != SHADER_MASK_NONE) { - if (key->mask == SHADER_MASK_SOLID) { - shader->mask_uniform_location = - dispatch->glGetUniformLocation(prog, "mask"); - } else { - mask_sampler_uniform_location = - dispatch->glGetUniformLocation(prog, - "mask_sampler"); - dispatch->glUniform1i - (mask_sampler_uniform_location, 1); - shader->mask_wh = dispatch->glGetUniformLocation(prog, "mask_wh"); - shader->mask_repeat_mode = dispatch->glGetUniformLocation(prog, "mask_repeat_mode"); - } - } - -out: - glamor_put_dispatch(glamor_priv); + GLuint vs, fs, prog; + GLint source_sampler_uniform_location, mask_sampler_uniform_location; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + + dispatch = glamor_get_dispatch(glamor_priv); + vs = glamor_create_composite_vs(dispatch, key); + if (vs == 0) + goto out; + fs = glamor_create_composite_fs(dispatch, key); + if (fs == 0) + goto out; + + prog = dispatch->glCreateProgram(); + dispatch->glAttachShader(prog, vs); + dispatch->glAttachShader(prog, fs); + + dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + dispatch->glBindAttribLocation(prog, GLAMOR_VERTEX_MASK, "v_texcoord1"); + + glamor_link_glsl_prog(dispatch, prog); + + shader->prog = prog; + + dispatch->glUseProgram(prog); + + if (key->source == SHADER_SOURCE_SOLID) { + shader->source_uniform_location = + dispatch->glGetUniformLocation(prog, "source"); + } + else { + source_sampler_uniform_location = + dispatch->glGetUniformLocation(prog, "source_sampler"); + dispatch->glUniform1i(source_sampler_uniform_location, 0); + shader->source_wh = dispatch->glGetUniformLocation(prog, "source_wh"); + shader->source_repeat_mode = + dispatch->glGetUniformLocation(prog, "source_repeat_mode"); + } + + if (key->mask != SHADER_MASK_NONE) { + if (key->mask == SHADER_MASK_SOLID) { + shader->mask_uniform_location = + dispatch->glGetUniformLocation(prog, "mask"); + } + else { + mask_sampler_uniform_location = + dispatch->glGetUniformLocation(prog, "mask_sampler"); + dispatch->glUniform1i(mask_sampler_uniform_location, 1); + shader->mask_wh = dispatch->glGetUniformLocation(prog, "mask_wh"); + shader->mask_repeat_mode = + dispatch->glGetUniformLocation(prog, "mask_repeat_mode"); + } + } + + out: + glamor_put_dispatch(glamor_priv); } static glamor_composite_shader * glamor_lookup_composite_shader(ScreenPtr screen, struct - shader_key - *key) + shader_key + *key) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_composite_shader *shader; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_composite_shader *shader; - shader = - &glamor_priv->composite_shader[key->source][key-> - mask][key->in]; - if (shader->prog == 0) - glamor_create_composite_shader(screen, key, shader); + shader = &glamor_priv->composite_shader[key->source][key->mask][key->in]; + if (shader->prog == 0) + glamor_create_composite_shader(screen, key, shader); - return shader; + return shader; } static void glamor_init_eb(unsigned short *eb, int vert_cnt) { - int i, j; - for(i = 0, j = 0; j < vert_cnt; i += 6, j += 4) - { - eb[i] = j; - eb[i + 1] = j + 1; - eb[i + 2] = j + 2; - eb[i + 3] = j; - eb[i + 4] = j + 2; - eb[i + 5] = j + 3; - } + int i, j; + + for (i = 0, j = 0; j < vert_cnt; i += 6, j += 4) { + eb[i] = j; + eb[i + 1] = j + 1; + eb[i + 2] = j + 2; + eb[i + 3] = j; + eb[i + 4] = j + 2; + eb[i + 5] = j + 3; + } } void glamor_init_composite_shaders(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - unsigned short *eb; - float *vb = NULL; - int eb_size; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glGenBuffers(1, &glamor_priv->vbo); - dispatch->glGenBuffers(1, &glamor_priv->ebo); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); - - eb_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(short) * 2; - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - dispatch->glBufferData(GL_ELEMENT_ARRAY_BUFFER, - eb_size, - NULL, GL_STATIC_DRAW); - eb = dispatch->glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY); - } - else { - vb = malloc(GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * 2); - if (vb == NULL) - FatalError("Failed to allocate vb memory.\n"); - eb = malloc(eb_size); - } - - if (eb == NULL) - FatalError("fatal error, fail to get element buffer. GL context may be not created correctly.\n"); - glamor_init_eb(eb, GLAMOR_COMPOSITE_VBO_VERT_CNT); - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - dispatch->glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - } else { - dispatch->glBufferData(GL_ELEMENT_ARRAY_BUFFER, - eb_size, - eb, GL_STATIC_DRAW); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - dispatch->glBufferData(GL_ARRAY_BUFFER, - GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * 2, - NULL, GL_DYNAMIC_DRAW); - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - - free(eb); - glamor_priv->vb = (char*)vb; - } - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + unsigned short *eb; + float *vb = NULL; + int eb_size; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glGenBuffers(1, &glamor_priv->vbo); + dispatch->glGenBuffers(1, &glamor_priv->ebo); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); + + eb_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(short) * 2; + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + dispatch->glBufferData(GL_ELEMENT_ARRAY_BUFFER, + eb_size, NULL, GL_STATIC_DRAW); + eb = dispatch->glMapBuffer(GL_ELEMENT_ARRAY_BUFFER, GL_WRITE_ONLY); + } + else { + vb = malloc(GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * 2); + if (vb == NULL) + FatalError("Failed to allocate vb memory.\n"); + eb = malloc(eb_size); + } + + if (eb == NULL) + FatalError + ("fatal error, fail to get element buffer. GL context may be not created correctly.\n"); + glamor_init_eb(eb, GLAMOR_COMPOSITE_VBO_VERT_CNT); + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + dispatch->glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + } + else { + dispatch->glBufferData(GL_ELEMENT_ARRAY_BUFFER, + eb_size, eb, GL_STATIC_DRAW); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + dispatch->glBufferData(GL_ARRAY_BUFFER, + GLAMOR_COMPOSITE_VBO_VERT_CNT * sizeof(float) * + 2, NULL, GL_DYNAMIC_DRAW); + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + + free(eb); + glamor_priv->vb = (char *) vb; + } + + glamor_put_dispatch(glamor_priv); } void glamor_fini_composite_shaders(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - glamor_composite_shader *shader; - int i,j,k; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteBuffers(1, &glamor_priv->vbo); - dispatch->glDeleteBuffers(1, &glamor_priv->ebo); - - for(i = 0; i < SHADER_SOURCE_COUNT; i++) - for(j = 0; j < SHADER_MASK_COUNT; j++) - for(k = 0; k < SHADER_IN_COUNT; k++) - { - shader = &glamor_priv->composite_shader[i][j][k]; - if (shader->prog) - dispatch->glDeleteProgram(shader->prog); - } - if (glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP - && glamor_priv->vb) - free(glamor_priv->vb); - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + glamor_composite_shader *shader; + int i, j, k; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteBuffers(1, &glamor_priv->vbo); + dispatch->glDeleteBuffers(1, &glamor_priv->ebo); + + for (i = 0; i < SHADER_SOURCE_COUNT; i++) + for (j = 0; j < SHADER_MASK_COUNT; j++) + for (k = 0; k < SHADER_IN_COUNT; k++) { + shader = &glamor_priv->composite_shader[i][j][k]; + if (shader->prog) + dispatch->glDeleteProgram(shader->prog); + } + if (glamor_priv->gl_flavor != GLAMOR_GL_DESKTOP && glamor_priv->vb) + free(glamor_priv->vb); + + glamor_put_dispatch(glamor_priv); } static Bool glamor_set_composite_op(ScreenPtr screen, - CARD8 op, struct blendinfo *op_info_result, - PicturePtr dest, PicturePtr mask) + CARD8 op, struct blendinfo *op_info_result, + PicturePtr dest, PicturePtr mask) { - GLenum source_blend, dest_blend; - struct blendinfo *op_info; - - if (op >= ARRAY_SIZE(composite_op_info)) { - glamor_fallback("unsupported render op %d \n", op); - return GL_FALSE; - } - op_info = &composite_op_info[op]; - - source_blend = op_info->source_blend; - dest_blend = op_info->dest_blend; - - /* If there's no dst alpha channel, adjust the blend op so that we'll treat - * it as always 1. - */ - if (PICT_FORMAT_A(dest->format) == 0 && op_info->dest_alpha) { - if (source_blend == GL_DST_ALPHA) - source_blend = GL_ONE; - else if (source_blend == GL_ONE_MINUS_DST_ALPHA) - source_blend = GL_ZERO; - } - - /* Set up the source alpha value for blending in component alpha mode. */ - if (mask && mask->componentAlpha - && PICT_FORMAT_RGB(mask->format) != 0 && op_info->source_alpha) - { - if (dest_blend == GL_SRC_ALPHA) - dest_blend = GL_SRC_COLOR; - else if (dest_blend == GL_ONE_MINUS_SRC_ALPHA) - dest_blend = GL_ONE_MINUS_SRC_COLOR; - } - - op_info_result->source_blend = source_blend; - op_info_result->dest_blend = dest_blend; - op_info_result->source_alpha = op_info->source_alpha; - op_info_result->dest_alpha = op_info->dest_alpha; - - return TRUE; + GLenum source_blend, dest_blend; + struct blendinfo *op_info; + + if (op >= ARRAY_SIZE(composite_op_info)) { + glamor_fallback("unsupported render op %d \n", op); + return GL_FALSE; + } + op_info = &composite_op_info[op]; + + source_blend = op_info->source_blend; + dest_blend = op_info->dest_blend; + + /* If there's no dst alpha channel, adjust the blend op so that we'll treat + * it as always 1. + */ + if (PICT_FORMAT_A(dest->format) == 0 && op_info->dest_alpha) { + if (source_blend == GL_DST_ALPHA) + source_blend = GL_ONE; + else if (source_blend == GL_ONE_MINUS_DST_ALPHA) + source_blend = GL_ZERO; + } + + /* Set up the source alpha value for blending in component alpha mode. */ + if (mask && mask->componentAlpha + && PICT_FORMAT_RGB(mask->format) != 0 && op_info->source_alpha) { + if (dest_blend == GL_SRC_ALPHA) + dest_blend = GL_SRC_COLOR; + else if (dest_blend == GL_ONE_MINUS_SRC_ALPHA) + dest_blend = GL_ONE_MINUS_SRC_COLOR; + } + + op_info_result->source_blend = source_blend; + op_info_result->dest_blend = dest_blend; + op_info_result->source_alpha = op_info->source_alpha; + op_info_result->dest_alpha = op_info->dest_alpha; + + return TRUE; } static void glamor_set_composite_texture(glamor_screen_private *glamor_priv, int unit, - PicturePtr picture, - glamor_pixmap_private * pixmap_priv, - GLuint wh_location, GLuint repeat_location) + PicturePtr picture, + glamor_pixmap_private *pixmap_priv, + GLuint wh_location, GLuint repeat_location) { - glamor_gl_dispatch *dispatch; - float wh[4]; - int repeat_type; - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glActiveTexture(GL_TEXTURE0 + unit); - dispatch->glBindTexture(GL_TEXTURE_2D, pixmap_priv->base.fbo->tex); - repeat_type = picture->repeatType; - switch (picture->repeatType) { - case RepeatNone: + glamor_gl_dispatch *dispatch; + float wh[4]; + int repeat_type; + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glActiveTexture(GL_TEXTURE0 + unit); + dispatch->glBindTexture(GL_TEXTURE_2D, pixmap_priv->base.fbo->tex); + repeat_type = picture->repeatType; + switch (picture->repeatType) { + case RepeatNone: #ifndef GLAMOR_GLES2 - /* XXX GLES2 doesn't support GL_CLAMP_TO_BORDER. */ - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_BORDER); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_BORDER); + /* XXX GLES2 doesn't support GL_CLAMP_TO_BORDER. */ + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_BORDER); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_BORDER); #else - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_EDGE); #endif - break; - case RepeatNormal: - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_REPEAT); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_REPEAT); - break; - case RepeatPad: - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - break; - case RepeatReflect: - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_MIRRORED_REPEAT); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_MIRRORED_REPEAT); - break; - } - - switch (picture->filter) { - default: - case PictFilterFast: - case PictFilterNearest: - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - break; - case PictFilterGood: - case PictFilterBest: - case PictFilterBilinear: - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_LINEAR); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_LINEAR); - break; - } + break; + case RepeatNormal: + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + break; + case RepeatPad: + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, + GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, + GL_CLAMP_TO_EDGE); + break; + case RepeatReflect: + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, + GL_MIRRORED_REPEAT); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, + GL_MIRRORED_REPEAT); + break; + } + + switch (picture->filter) { + default: + case PictFilterFast: + case PictFilterNearest: + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MAG_FILTER, GL_NEAREST); + break; + case PictFilterGood: + case PictFilterBest: + case PictFilterBilinear: + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MIN_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_MAG_FILTER, GL_LINEAR); + break; + } #ifndef GLAMOR_GLES2 - dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glEnable(GL_TEXTURE_2D); #endif - /* - * GLES2 doesn't support RepeatNone. We need to fix it anyway. - * - **/ - if (repeat_type != RepeatNone) - repeat_type += RepeatFix; - else if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 - || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - if (picture->transform - || (GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(pixmap_priv))) - repeat_type += RepeatFix; - } - if (repeat_type >= RepeatFix) { - glamor_pixmap_fbo_fix_wh_ratio(wh, pixmap_priv); - if ((wh[0] != 1.0 || wh[1] != 1.0 ) - || (glamor_priv->gl_flavor == GLAMOR_GL_ES2 - && repeat_type == RepeatFix)) - dispatch->glUniform4fv(wh_location, 1, wh); - else - repeat_type -= RepeatFix; - } - dispatch->glUniform1i(repeat_location, repeat_type); - glamor_put_dispatch(glamor_priv); + /* + * GLES2 doesn't support RepeatNone. We need to fix it anyway. + * + **/ + if (repeat_type != RepeatNone) + repeat_type += RepeatFix; + else if (glamor_priv->gl_flavor == GLAMOR_GL_ES2 + || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + if (picture->transform + || (GLAMOR_PIXMAP_FBO_NOT_EAXCT_SIZE(pixmap_priv))) + repeat_type += RepeatFix; + } + if (repeat_type >= RepeatFix) { + glamor_pixmap_fbo_fix_wh_ratio(wh, pixmap_priv); + if ((wh[0] != 1.0 || wh[1] != 1.0) + || (glamor_priv->gl_flavor == GLAMOR_GL_ES2 + && repeat_type == RepeatFix)) + dispatch->glUniform4fv(wh_location, 1, wh); + else + repeat_type -= RepeatFix; + } + dispatch->glUniform1i(repeat_location, repeat_type); + glamor_put_dispatch(glamor_priv); } static void -glamor_set_composite_solid(glamor_gl_dispatch * dispatch, float *color, - GLint uniform_location) +glamor_set_composite_solid(glamor_gl_dispatch *dispatch, float *color, + GLint uniform_location) { - dispatch->glUniform4fv(uniform_location, 1, color); + dispatch->glUniform4fv(uniform_location, 1, color); } static int compatible_formats(CARD8 op, PicturePtr dst, PicturePtr src) { - if (op == PictOpSrc) { - if (src->format == dst->format) - return 1; - - if (src->format == PICT_a8r8g8b8 - && dst->format == PICT_x8r8g8b8) - return 1; - - if (src->format == PICT_a8b8g8r8 - && dst->format == PICT_x8b8g8r8) - return 1; - } else if (op == PictOpOver) { - if (src->alphaMap || dst->alphaMap) - return 0; - - if (src->format != dst->format) - return 0; - - if (src->format == PICT_x8r8g8b8 - || src->format == PICT_x8b8g8r8) - return 1; - } - - return 0; + if (op == PictOpSrc) { + if (src->format == dst->format) + return 1; + + if (src->format == PICT_a8r8g8b8 && dst->format == PICT_x8r8g8b8) + return 1; + + if (src->format == PICT_a8b8g8r8 && dst->format == PICT_x8b8g8r8) + return 1; + } + else if (op == PictOpOver) { + if (src->alphaMap || dst->alphaMap) + return 0; + + if (src->format != dst->format) + return 0; + + if (src->format == PICT_x8r8g8b8 || src->format == PICT_x8b8g8r8) + return 1; + } + + return 0; } static char glamor_get_picture_location(PicturePtr picture) { - if (picture == NULL) - return ' '; - - if (picture->pDrawable == NULL) { - switch (picture->pSourcePict->type) { - case SourcePictTypeSolidFill: - return 'c'; - case SourcePictTypeLinear: - return 'l'; - case SourcePictTypeRadial: - return 'r'; - default: - return '?'; - } - } - return glamor_get_drawable_location(picture->pDrawable); + if (picture == NULL) + return ' '; + + if (picture->pDrawable == NULL) { + switch (picture->pSourcePict->type) { + case SourcePictTypeSolidFill: + return 'c'; + case SourcePictTypeLinear: + return 'l'; + case SourcePictTypeRadial: + return 'r'; + default: + return '?'; + } + } + return glamor_get_drawable_location(picture->pDrawable); } static Bool glamor_composite_with_copy(CARD8 op, - PicturePtr source, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_dest, - INT16 y_dest, - RegionPtr region) + PicturePtr source, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_dest, INT16 y_dest, RegionPtr region) { - int ret = FALSE; - if (!source->pDrawable) - return FALSE; - - if (!compatible_formats(op, dest, source)) - return FALSE; - - if (source->repeat || source->transform) { - return FALSE; - } - - x_dest += dest->pDrawable->x; - y_dest += dest->pDrawable->y; - x_source += source->pDrawable->x; - y_source += source->pDrawable->y; - if (PICT_FORMAT_A(source->format) == 0) { - /* Fallback if we sample outside the source so that we - * swizzle the correct clear color for out-of-bounds texels. - */ - if (region->extents.x1 + x_source - x_dest < 0) - goto cleanup_region; - if (region->extents.x2 + x_source - x_dest > source->pDrawable->width) - goto cleanup_region; - - if (region->extents.y1 + y_source - y_dest < 0) - goto cleanup_region; - if (region->extents.y2 + y_source - y_dest > source->pDrawable->height) - goto cleanup_region; - } - ret = glamor_copy_n_to_n_nf(source->pDrawable, - dest->pDrawable, NULL, - RegionRects(region), RegionNumRects(region), - x_source - x_dest, y_source - y_dest, - FALSE, FALSE, 0, NULL); -cleanup_region: - return ret; + int ret = FALSE; + + if (!source->pDrawable) + return FALSE; + + if (!compatible_formats(op, dest, source)) + return FALSE; + + if (source->repeat || source->transform) { + return FALSE; + } + + x_dest += dest->pDrawable->x; + y_dest += dest->pDrawable->y; + x_source += source->pDrawable->x; + y_source += source->pDrawable->y; + if (PICT_FORMAT_A(source->format) == 0) { + /* Fallback if we sample outside the source so that we + * swizzle the correct clear color for out-of-bounds texels. + */ + if (region->extents.x1 + x_source - x_dest < 0) + goto cleanup_region; + if (region->extents.x2 + x_source - x_dest > source->pDrawable->width) + goto cleanup_region; + + if (region->extents.y1 + y_source - y_dest < 0) + goto cleanup_region; + if (region->extents.y2 + y_source - y_dest > source->pDrawable->height) + goto cleanup_region; + } + ret = glamor_copy_n_to_n_nf(source->pDrawable, + dest->pDrawable, NULL, + RegionRects(region), RegionNumRects(region), + x_source - x_dest, y_source - y_dest, + FALSE, FALSE, 0, NULL); + cleanup_region: + return ret; } void glamor_setup_composite_vbo(ScreenPtr screen, int n_verts) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - int vert_size; - - glamor_priv->render_nr_verts = 0; - glamor_priv->vb_stride = 2 * sizeof(float); - if (glamor_priv->has_source_coords) - glamor_priv->vb_stride += 2 * sizeof(float); - if (glamor_priv->has_mask_coords) - glamor_priv->vb_stride += 2 * sizeof(float); - - vert_size = n_verts * glamor_priv->vb_stride; - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { - glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * - glamor_priv->vb_stride; - glamor_priv->vbo_offset = 0; - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_size, - NULL, GL_STREAM_DRAW); - } - - glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - vert_size, - GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); - assert(glamor_priv->vb != NULL); - glamor_priv->vb -= glamor_priv->vbo_offset; - } else - glamor_priv->vbo_offset = 0; - - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long) - glamor_priv->vbo_offset)); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - - if (glamor_priv->has_source_coords) { - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, - GL_FLOAT, GL_FALSE, - glamor_priv->vb_stride, - (void *) ((long) - glamor_priv->vbo_offset - + - 2 * - sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - } - - if (glamor_priv->has_mask_coords) { - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_MASK, 2, - GL_FLOAT, GL_FALSE, - glamor_priv->vb_stride, - (void *) ((long) - glamor_priv->vbo_offset - + - (glamor_priv->has_source_coords - ? 4 : 2) * - sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_MASK); - } - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + int vert_size; + + glamor_priv->render_nr_verts = 0; + glamor_priv->vb_stride = 2 * sizeof(float); + if (glamor_priv->has_source_coords) + glamor_priv->vb_stride += 2 * sizeof(float); + if (glamor_priv->has_mask_coords) + glamor_priv->vb_stride += 2 * sizeof(float); + + vert_size = n_verts * glamor_priv->vb_stride; + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { + glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * + glamor_priv->vb_stride; + glamor_priv->vbo_offset = 0; + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_size, NULL, GL_STREAM_DRAW); + } + + glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + vert_size, + GL_MAP_WRITE_BIT | + GL_MAP_UNSYNCHRONIZED_BIT); + assert(glamor_priv->vb != NULL); + glamor_priv->vb -= glamor_priv->vbo_offset; + } + else + glamor_priv->vbo_offset = 0; + + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) + glamor_priv->vbo_offset)); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + + if (glamor_priv->has_source_coords) { + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, + GL_FLOAT, GL_FALSE, + glamor_priv->vb_stride, (void *) ((long) + glamor_priv-> + vbo_offset + + + 2 * + sizeof + (float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + } + + if (glamor_priv->has_mask_coords) { + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_MASK, 2, + GL_FLOAT, GL_FALSE, + glamor_priv->vb_stride, (void *) ((long) + glamor_priv-> + vbo_offset + + + (glamor_priv-> + has_source_coords + ? 4 : + 2) * + sizeof + (float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_MASK); + } + glamor_put_dispatch(glamor_priv); } void glamor_emit_composite_vert(ScreenPtr screen, - const float *src_coords, - const float *mask_coords, - const float *dst_coords, int i) + const float *src_coords, + const float *mask_coords, + const float *dst_coords, int i) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - float *vb = (float *) (glamor_priv->vb + glamor_priv->vbo_offset); - int j = 0; - - vb[j++] = dst_coords[i * 2 + 0]; - vb[j++] = dst_coords[i * 2 + 1]; - if (glamor_priv->has_source_coords) { - vb[j++] = src_coords[i * 2 + 0]; - vb[j++] = src_coords[i * 2 + 1]; - } - if (glamor_priv->has_mask_coords) { - vb[j++] = mask_coords[i * 2 + 0]; - vb[j++] = mask_coords[i * 2 + 1]; - } - - glamor_priv->render_nr_verts++; - glamor_priv->vbo_offset += glamor_priv->vb_stride; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + float *vb = (float *) (glamor_priv->vb + glamor_priv->vbo_offset); + int j = 0; + + vb[j++] = dst_coords[i * 2 + 0]; + vb[j++] = dst_coords[i * 2 + 1]; + if (glamor_priv->has_source_coords) { + vb[j++] = src_coords[i * 2 + 0]; + vb[j++] = src_coords[i * 2 + 1]; + } + if (glamor_priv->has_mask_coords) { + vb[j++] = mask_coords[i * 2 + 0]; + vb[j++] = mask_coords[i * 2 + 1]; + } + + glamor_priv->render_nr_verts++; + glamor_priv->vbo_offset += glamor_priv->vb_stride; } - - static void glamor_flush_composite_rects(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; - dispatch = glamor_get_dispatch(glamor_priv); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); - else { + dispatch = glamor_get_dispatch(glamor_priv); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); + else { - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - glamor_priv->vb, GL_DYNAMIC_DRAW); - } + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + glamor_priv->vb, GL_DYNAMIC_DRAW); + } - if (!glamor_priv->render_nr_verts) - return; + if (!glamor_priv->render_nr_verts) + return; #ifndef GLAMOR_GLES2 - dispatch->glDrawRangeElements(GL_TRIANGLES, 0, glamor_priv->render_nr_verts, - (glamor_priv->render_nr_verts * 3) / 2, - GL_UNSIGNED_SHORT, NULL); + dispatch->glDrawRangeElements(GL_TRIANGLES, 0, glamor_priv->render_nr_verts, + (glamor_priv->render_nr_verts * 3) / 2, + GL_UNSIGNED_SHORT, NULL); #else - dispatch->glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2, - GL_UNSIGNED_SHORT, NULL); + dispatch->glDrawElements(GL_TRIANGLES, + (glamor_priv->render_nr_verts * 3) / 2, + GL_UNSIGNED_SHORT, NULL); #endif - glamor_put_dispatch(glamor_priv); + glamor_put_dispatch(glamor_priv); } int pict_format_combine_tab[][3] = { - {PICT_TYPE_ARGB, PICT_TYPE_A, PICT_TYPE_ARGB}, - {PICT_TYPE_ABGR, PICT_TYPE_A, PICT_TYPE_ABGR}, + {PICT_TYPE_ARGB, PICT_TYPE_A, PICT_TYPE_ARGB}, + {PICT_TYPE_ABGR, PICT_TYPE_A, PICT_TYPE_ABGR}, }; static Bool combine_pict_format(PictFormatShort * des, const PictFormatShort src, - const PictFormatShort mask, enum shader_in in_ca) + const PictFormatShort mask, enum shader_in in_ca) { - PictFormatShort new_vis; - int src_type, mask_type, src_bpp, mask_bpp; - int i; - if (src == mask) { - *des = src; - return TRUE; - } - src_bpp = PICT_FORMAT_BPP(src); - mask_bpp = PICT_FORMAT_BPP(mask); - - assert(src_bpp == mask_bpp); - - new_vis = PICT_FORMAT_VIS(src) | PICT_FORMAT_VIS(mask); - - switch (in_ca) { - case SHADER_IN_SOURCE_ONLY: - return TRUE; - case SHADER_IN_NORMAL: - src_type = PICT_FORMAT_TYPE(src); - mask_type = PICT_TYPE_A; - break; - case SHADER_IN_CA_SOURCE: - src_type = PICT_FORMAT_TYPE(src); - mask_type = PICT_FORMAT_TYPE(mask); - break; - case SHADER_IN_CA_ALPHA: - src_type = PICT_TYPE_A; - mask_type = PICT_FORMAT_TYPE(mask); - break; - default: - return FALSE; - } - - if (src_type == mask_type) { - *des = PICT_VISFORMAT(src_bpp, src_type, new_vis); - return TRUE; - } - - for (i = 0; - i < - sizeof(pict_format_combine_tab) / - sizeof(pict_format_combine_tab[0]); i++) { - if ((src_type == pict_format_combine_tab[i][0] - && mask_type == pict_format_combine_tab[i][1]) - || (src_type == pict_format_combine_tab[i][1] - && mask_type == pict_format_combine_tab[i][0])) { - *des = PICT_VISFORMAT(src_bpp, - pict_format_combine_tab[i] - [2], new_vis); - return TRUE; - } - } - return FALSE; + PictFormatShort new_vis; + int src_type, mask_type, src_bpp; + int i; + + if (src == mask) { + *des = src; + return TRUE; + } + src_bpp = PICT_FORMAT_BPP(src); + + assert(src_bpp == PICT_FORMAT_BPP(mask)); + + new_vis = PICT_FORMAT_VIS(src) | PICT_FORMAT_VIS(mask); + + switch (in_ca) { + case SHADER_IN_SOURCE_ONLY: + return TRUE; + case SHADER_IN_NORMAL: + src_type = PICT_FORMAT_TYPE(src); + mask_type = PICT_TYPE_A; + break; + case SHADER_IN_CA_SOURCE: + src_type = PICT_FORMAT_TYPE(src); + mask_type = PICT_FORMAT_TYPE(mask); + break; + case SHADER_IN_CA_ALPHA: + src_type = PICT_TYPE_A; + mask_type = PICT_FORMAT_TYPE(mask); + break; + default: + return FALSE; + } + + if (src_type == mask_type) { + *des = PICT_VISFORMAT(src_bpp, src_type, new_vis); + return TRUE; + } + + for (i = 0; + i < + sizeof(pict_format_combine_tab) / + sizeof(pict_format_combine_tab[0]); i++) { + if ((src_type == pict_format_combine_tab[i][0] + && mask_type == pict_format_combine_tab[i][1]) + || (src_type == pict_format_combine_tab[i][1] + && mask_type == pict_format_combine_tab[i][0])) { + *des = PICT_VISFORMAT(src_bpp, pict_format_combine_tab[i] + [2], new_vis); + return TRUE; + } + } + return FALSE; } static void glamor_set_normalize_tcoords_generic(glamor_pixmap_private *priv, - int repeat_type, - float *matrix, - float xscale, float yscale, - int x1, int y1, int x2, int y2, - int yInverted, float *texcoords, - int stride) + int repeat_type, + float *matrix, + float xscale, float yscale, + int x1, int y1, int x2, int y2, + int yInverted, float *texcoords, + int stride) { - if (!matrix && repeat_type == RepeatNone) - glamor_set_normalize_tcoords_ext(priv, xscale, yscale, - x1, y1, - x2, y2, - yInverted, - texcoords, stride); - else if (matrix && repeat_type == RepeatNone) - glamor_set_transformed_normalize_tcoords_ext(priv, matrix, xscale, - yscale, x1, y1, - x2, y2, - yInverted, - texcoords, stride); - else if (!matrix && repeat_type != RepeatNone) - glamor_set_repeat_normalize_tcoords_ext(priv, repeat_type, - xscale, yscale, - x1, y1, - x2, y2, - yInverted, - texcoords, stride); - else if (matrix && repeat_type != RepeatNone) - glamor_set_repeat_transformed_normalize_tcoords_ext(priv, repeat_type, - matrix, xscale, yscale, - x1, y1, - x2, y2, - yInverted, - texcoords, stride); + if (!matrix && repeat_type == RepeatNone) + glamor_set_normalize_tcoords_ext(priv, xscale, yscale, + x1, y1, + x2, y2, yInverted, texcoords, stride); + else if (matrix && repeat_type == RepeatNone) + glamor_set_transformed_normalize_tcoords_ext(priv, matrix, xscale, + yscale, x1, y1, + x2, y2, + yInverted, + texcoords, stride); + else if (!matrix && repeat_type != RepeatNone) + glamor_set_repeat_normalize_tcoords_ext(priv, repeat_type, + xscale, yscale, + x1, y1, + x2, y2, + yInverted, texcoords, stride); + else if (matrix && repeat_type != RepeatNone) + glamor_set_repeat_transformed_normalize_tcoords_ext(priv, repeat_type, + matrix, xscale, + yscale, x1, y1, x2, + y2, yInverted, + texcoords, stride); } -Bool glamor_composite_choose_shader(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private *source_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, - struct shader_key *s_key, - glamor_composite_shader **shader, - struct blendinfo *op_info, - PictFormatShort *psaved_source_format) +Bool +glamor_composite_choose_shader(CARD8 op, + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + struct shader_key *s_key, + glamor_composite_shader ** shader, + struct blendinfo *op_info, + PictFormatShort *psaved_source_format) { - ScreenPtr screen = dest->pDrawable->pScreen; - PixmapPtr dest_pixmap = dest_pixmap_priv->base.pixmap; - PixmapPtr source_pixmap = NULL; - PixmapPtr mask_pixmap = NULL; - enum glamor_pixmap_status source_status = GLAMOR_NONE; - enum glamor_pixmap_status mask_status = GLAMOR_NONE; - PictFormatShort saved_source_format = 0; - struct shader_key key; - GLfloat source_solid_color[4]; - GLfloat mask_solid_color[4]; - Bool ret = FALSE; - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { - glamor_fallback("dest has no fbo.\n"); - goto fail; - } - - memset(&key, 0, sizeof(key)); - if (!source) { - key.source = SHADER_SOURCE_SOLID; - source_solid_color[0] = 0.0; - source_solid_color[1] = 0.0; - source_solid_color[2] = 0.0; - source_solid_color[3] = 0.0; - } else if (!source->pDrawable) { - if (source->pSourcePict->type == SourcePictTypeSolidFill) { - key.source = SHADER_SOURCE_SOLID; - glamor_get_rgba_from_pixel(source-> - pSourcePict->solidFill. - color, - &source_solid_color[0], - &source_solid_color[1], - &source_solid_color[2], - &source_solid_color[3], - PICT_a8r8g8b8); - } else - goto fail; - } else { - key.source = SHADER_SOURCE_TEXTURE_ALPHA; - } - - if (mask) { - if (!mask->pDrawable) { - if (mask->pSourcePict->type == - SourcePictTypeSolidFill) { - key.mask = SHADER_MASK_SOLID; - glamor_get_rgba_from_pixel - (mask->pSourcePict->solidFill.color, - &mask_solid_color[0], - &mask_solid_color[1], - &mask_solid_color[2], - &mask_solid_color[3], PICT_a8r8g8b8); - } else - goto fail; - } else { - key.mask = SHADER_MASK_TEXTURE_ALPHA; - } - - if (!mask->componentAlpha) { - key.in = SHADER_IN_NORMAL; - } else { - if (op == PictOpClear) - key.mask = SHADER_MASK_NONE; - else if (op == PictOpSrc || op == PictOpAdd - || op == PictOpIn || op == PictOpOut - || op == PictOpOverReverse) - key.in = SHADER_IN_CA_SOURCE; - else if (op == PictOpOutReverse || op == PictOpInReverse) { - key.in = SHADER_IN_CA_ALPHA; - } else { - glamor_fallback("Unsupported component alpha op: %d\n", op); - goto fail; - } - } - } else { - key.mask = SHADER_MASK_NONE; - key.in = SHADER_IN_SOURCE_ONLY; - } - - if (source && source->alphaMap) { - glamor_fallback("source alphaMap\n"); - goto fail; - } - if (mask && mask->alphaMap) { - glamor_fallback("mask alphaMap\n"); - goto fail; - } - - if (key.source == SHADER_SOURCE_TEXTURE || - key.source == SHADER_SOURCE_TEXTURE_ALPHA) { - source_pixmap = source_pixmap_priv->base.pixmap; - if (source_pixmap == dest_pixmap) { - /* XXX source and the dest share the same texture. - * Does it need special handle? */ - glamor_fallback("source == dest\n"); - } - if (source_pixmap_priv->base.gl_fbo == 0) { - /* XXX in Xephyr, we may have gl_fbo equal to 1 but gl_tex - * equal to zero when the pixmap is screen pixmap. Then we may - * refer the tex zero directly latter in the composition. - * It seems that it works fine, but it may have potential problem*/ + ScreenPtr screen = dest->pDrawable->pScreen; + PixmapPtr dest_pixmap = dest_pixmap_priv->base.pixmap; + PixmapPtr source_pixmap = NULL; + PixmapPtr mask_pixmap = NULL; + enum glamor_pixmap_status source_status = GLAMOR_NONE; + enum glamor_pixmap_status mask_status = GLAMOR_NONE; + PictFormatShort saved_source_format = 0; + struct shader_key key; + GLfloat source_solid_color[4]; + GLfloat mask_solid_color[4]; + Bool ret = FALSE; + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { + glamor_fallback("dest has no fbo.\n"); + goto fail; + } + + memset(&key, 0, sizeof(key)); + if (!source) { + key.source = SHADER_SOURCE_SOLID; + source_solid_color[0] = 0.0; + source_solid_color[1] = 0.0; + source_solid_color[2] = 0.0; + source_solid_color[3] = 0.0; + } + else if (!source->pDrawable) { + if (source->pSourcePict->type == SourcePictTypeSolidFill) { + key.source = SHADER_SOURCE_SOLID; + glamor_get_rgba_from_pixel(source->pSourcePict->solidFill.color, + &source_solid_color[0], + &source_solid_color[1], + &source_solid_color[2], + &source_solid_color[3], PICT_a8r8g8b8); + } + else + goto fail; + } + else { + key.source = SHADER_SOURCE_TEXTURE_ALPHA; + } + + if (mask) { + if (!mask->pDrawable) { + if (mask->pSourcePict->type == SourcePictTypeSolidFill) { + key.mask = SHADER_MASK_SOLID; + glamor_get_rgba_from_pixel + (mask->pSourcePict->solidFill.color, + &mask_solid_color[0], + &mask_solid_color[1], + &mask_solid_color[2], &mask_solid_color[3], PICT_a8r8g8b8); + } + else + goto fail; + } + else { + key.mask = SHADER_MASK_TEXTURE_ALPHA; + } + + if (!mask->componentAlpha) { + key.in = SHADER_IN_NORMAL; + } + else { + if (op == PictOpClear) + key.mask = SHADER_MASK_NONE; + else if (op == PictOpSrc || op == PictOpAdd + || op == PictOpIn || op == PictOpOut + || op == PictOpOverReverse) + key.in = SHADER_IN_CA_SOURCE; + else if (op == PictOpOutReverse || op == PictOpInReverse) { + key.in = SHADER_IN_CA_ALPHA; + } + else { + glamor_fallback("Unsupported component alpha op: %d\n", op); + goto fail; + } + } + } + else { + key.mask = SHADER_MASK_NONE; + key.in = SHADER_IN_SOURCE_ONLY; + } + + if (source && source->alphaMap) { + glamor_fallback("source alphaMap\n"); + goto fail; + } + if (mask && mask->alphaMap) { + glamor_fallback("mask alphaMap\n"); + goto fail; + } + + if (key.source == SHADER_SOURCE_TEXTURE || + key.source == SHADER_SOURCE_TEXTURE_ALPHA) { + source_pixmap = source_pixmap_priv->base.pixmap; + if (source_pixmap == dest_pixmap) { + /* XXX source and the dest share the same texture. + * Does it need special handle? */ + glamor_fallback("source == dest\n"); + } + if (source_pixmap_priv->base.gl_fbo == 0) { + /* XXX in Xephyr, we may have gl_fbo equal to 1 but gl_tex + * equal to zero when the pixmap is screen pixmap. Then we may + * refer the tex zero directly latter in the composition. + * It seems that it works fine, but it may have potential problem*/ #ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD - source_status = GLAMOR_UPLOAD_PENDING; + source_status = GLAMOR_UPLOAD_PENDING; #else - glamor_fallback("no texture in source\n"); - goto fail; + glamor_fallback("no texture in source\n"); + goto fail; #endif - } - } - - if (key.mask == SHADER_MASK_TEXTURE || - key.mask == SHADER_MASK_TEXTURE_ALPHA) { - mask_pixmap = mask_pixmap_priv->base.pixmap; - if (mask_pixmap == dest_pixmap) { - glamor_fallback("mask == dest\n"); - goto fail; - } - if (mask_pixmap_priv->base.gl_fbo == 0) { + } + } + + if (key.mask == SHADER_MASK_TEXTURE || + key.mask == SHADER_MASK_TEXTURE_ALPHA) { + mask_pixmap = mask_pixmap_priv->base.pixmap; + if (mask_pixmap == dest_pixmap) { + glamor_fallback("mask == dest\n"); + goto fail; + } + if (mask_pixmap_priv->base.gl_fbo == 0) { #ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD - mask_status = GLAMOR_UPLOAD_PENDING; + mask_status = GLAMOR_UPLOAD_PENDING; #else - glamor_fallback("no texture in mask\n"); - goto fail; + glamor_fallback("no texture in mask\n"); + goto fail; #endif - } - } + } + } #ifdef GLAMOR_PIXMAP_DYNAMIC_UPLOAD - if (source_status == GLAMOR_UPLOAD_PENDING - && mask_status == GLAMOR_UPLOAD_PENDING - && source_pixmap == mask_pixmap) { - - if (source->format != mask->format) { - saved_source_format = source->format; - - if (!combine_pict_format(&source->format, source->format, - mask->format, key.in)) { - glamor_fallback("combine source %x mask %x failed.\n", - source->format, mask->format); - goto fail; - } - - if (source->format != saved_source_format) { - glamor_picture_format_fixup(source, - source_pixmap_priv); - } - /* XXX - * By default, glamor_upload_picture_to_texture will wire alpha to 1 - * if one picture doesn't have alpha. So we don't do that again in - * rendering function. But here is a special case, as source and - * mask share the same texture but may have different formats. For - * example, source doesn't have alpha, but mask has alpha. Then the - * texture will have the alpha value for the mask. And will not wire - * to 1 for the source. In this case, we have to use different shader - * to wire the source's alpha to 1. - * - * But this may cause a potential problem if the source's repeat mode - * is REPEAT_NONE, and if the source is smaller than the dest, then - * for the region not covered by the source may be painted incorrectly. - * because we wire the alpha to 1. - * - **/ - if (!PICT_FORMAT_A(saved_source_format) - && PICT_FORMAT_A(mask->format)) - key.source = SHADER_SOURCE_TEXTURE; - - if (!PICT_FORMAT_A(mask->format) - && PICT_FORMAT_A(saved_source_format)) - key.mask = SHADER_MASK_TEXTURE; - - mask_status = GLAMOR_NONE; - } - - source_status = glamor_upload_picture_to_texture(source); - if (source_status != GLAMOR_UPLOAD_DONE) { - glamor_fallback("Failed to upload source texture.\n"); - goto fail; - } - } else { - if (source_status == GLAMOR_UPLOAD_PENDING) { - source_status = glamor_upload_picture_to_texture(source); - if (source_status != GLAMOR_UPLOAD_DONE) { - glamor_fallback("Failed to upload source texture.\n"); - goto fail; - } - } - - if (mask_status == GLAMOR_UPLOAD_PENDING) { - mask_status = glamor_upload_picture_to_texture(mask); - if (mask_status != GLAMOR_UPLOAD_DONE) { - glamor_fallback("Failed to upload mask texture.\n"); - goto fail; - } - } - } + if (source_status == GLAMOR_UPLOAD_PENDING + && mask_status == GLAMOR_UPLOAD_PENDING + && source_pixmap == mask_pixmap) { + + if (source->format != mask->format) { + saved_source_format = source->format; + + if (!combine_pict_format(&source->format, source->format, + mask->format, key.in)) { + glamor_fallback("combine source %x mask %x failed.\n", + source->format, mask->format); + goto fail; + } + + if (source->format != saved_source_format) { + glamor_picture_format_fixup(source, source_pixmap_priv); + } + /* XXX + * By default, glamor_upload_picture_to_texture will wire alpha to 1 + * if one picture doesn't have alpha. So we don't do that again in + * rendering function. But here is a special case, as source and + * mask share the same texture but may have different formats. For + * example, source doesn't have alpha, but mask has alpha. Then the + * texture will have the alpha value for the mask. And will not wire + * to 1 for the source. In this case, we have to use different shader + * to wire the source's alpha to 1. + * + * But this may cause a potential problem if the source's repeat mode + * is REPEAT_NONE, and if the source is smaller than the dest, then + * for the region not covered by the source may be painted incorrectly. + * because we wire the alpha to 1. + * + **/ + if (!PICT_FORMAT_A(saved_source_format) + && PICT_FORMAT_A(mask->format)) + key.source = SHADER_SOURCE_TEXTURE; + + if (!PICT_FORMAT_A(mask->format) + && PICT_FORMAT_A(saved_source_format)) + key.mask = SHADER_MASK_TEXTURE; + + mask_status = GLAMOR_NONE; + } + + source_status = glamor_upload_picture_to_texture(source); + if (source_status != GLAMOR_UPLOAD_DONE) { + glamor_fallback("Failed to upload source texture.\n"); + goto fail; + } + } + else { + if (source_status == GLAMOR_UPLOAD_PENDING) { + source_status = glamor_upload_picture_to_texture(source); + if (source_status != GLAMOR_UPLOAD_DONE) { + glamor_fallback("Failed to upload source texture.\n"); + goto fail; + } + } + + if (mask_status == GLAMOR_UPLOAD_PENDING) { + mask_status = glamor_upload_picture_to_texture(mask); + if (mask_status != GLAMOR_UPLOAD_DONE) { + glamor_fallback("Failed to upload mask texture.\n"); + goto fail; + } + } + } #endif - /*Before enter the rendering stage, we need to fixup - * transformed source and mask, if the transform is not int translate. */ - if (key.source != SHADER_SOURCE_SOLID - && source->transform - && !pixman_transform_is_int_translate(source->transform) - && source_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { - if (!glamor_fixup_pixmap_priv(screen, source_pixmap_priv)) - goto fail; - } - if (key.mask != SHADER_MASK_NONE && key.mask != SHADER_MASK_SOLID - && mask->transform - && !pixman_transform_is_int_translate(mask->transform) - && mask_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { - if (!glamor_fixup_pixmap_priv(screen, mask_pixmap_priv)) - goto fail; - } - - - if (!glamor_set_composite_op(screen, op, op_info, dest, mask)) - goto fail; - - *shader = glamor_lookup_composite_shader(screen, &key); - if ((*shader)->prog == 0) { - glamor_fallback("no shader program for this" - "render acccel mode\n"); - goto fail; - } - - if (key.source == SHADER_SOURCE_SOLID) - memcpy(&(*shader)->source_solid_color[0], - source_solid_color, 4*sizeof(float)); - else { - (*shader)->source_priv = source_pixmap_priv; - (*shader)->source = source; - } - - if (key.mask == SHADER_MASK_SOLID) - memcpy(&(*shader)->mask_solid_color[0], - mask_solid_color, 4*sizeof(float)); - else { - (*shader)->mask_priv = mask_pixmap_priv; - (*shader)->mask = mask; - } - - ret = TRUE; - memcpy(s_key, &key, sizeof(key)); - *psaved_source_format = saved_source_format; - goto done; - -fail: - if (saved_source_format) - source->format = saved_source_format; -done: - return ret; + /*Before enter the rendering stage, we need to fixup + * transformed source and mask, if the transform is not int translate. */ + if (key.source != SHADER_SOURCE_SOLID + && source->transform + && !pixman_transform_is_int_translate(source->transform) + && source_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + if (!glamor_fixup_pixmap_priv(screen, source_pixmap_priv)) + goto fail; + } + if (key.mask != SHADER_MASK_NONE && key.mask != SHADER_MASK_SOLID + && mask->transform + && !pixman_transform_is_int_translate(mask->transform) + && mask_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) { + if (!glamor_fixup_pixmap_priv(screen, mask_pixmap_priv)) + goto fail; + } + + if (!glamor_set_composite_op(screen, op, op_info, dest, mask)) + goto fail; + + *shader = glamor_lookup_composite_shader(screen, &key); + if ((*shader)->prog == 0) { + glamor_fallback("no shader program for this render acccel mode\n"); + goto fail; + } + + if (key.source == SHADER_SOURCE_SOLID) + memcpy(&(*shader)->source_solid_color[0], + source_solid_color, 4 * sizeof(float)); + else { + (*shader)->source_priv = source_pixmap_priv; + (*shader)->source = source; + } + + if (key.mask == SHADER_MASK_SOLID) + memcpy(&(*shader)->mask_solid_color[0], + mask_solid_color, 4 * sizeof(float)); + else { + (*shader)->mask_priv = mask_pixmap_priv; + (*shader)->mask = mask; + } + + ret = TRUE; + memcpy(s_key, &key, sizeof(key)); + *psaved_source_format = saved_source_format; + goto done; + + fail: + if (saved_source_format) + source->format = saved_source_format; + done: + return ret; } void glamor_composite_set_shader_blend(glamor_pixmap_private *dest_priv, - struct shader_key *key, - glamor_composite_shader *shader, - struct blendinfo *op_info) + struct shader_key *key, + glamor_composite_shader *shader, + struct blendinfo *op_info) { - glamor_gl_dispatch *dispatch; - glamor_screen_private *glamor_priv; - - glamor_priv = dest_priv->base.glamor_priv; - - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glUseProgram(shader->prog); - - if (key->source == SHADER_SOURCE_SOLID) { - glamor_set_composite_solid(dispatch, - shader->source_solid_color, - shader->source_uniform_location); - } else { - glamor_set_composite_texture(glamor_priv, 0, - shader->source, - shader->source_priv, shader->source_wh, - shader->source_repeat_mode); - } - - if (key->mask != SHADER_MASK_NONE) { - if (key->mask == SHADER_MASK_SOLID) { - glamor_set_composite_solid(dispatch, - shader->mask_solid_color, - shader->mask_uniform_location); - } else { - glamor_set_composite_texture(glamor_priv, 1, - shader->mask, - shader->mask_priv, shader->mask_wh, - shader->mask_repeat_mode); - } - } - - if (op_info->source_blend == GL_ONE - && op_info->dest_blend == GL_ZERO) { - dispatch->glDisable(GL_BLEND); - } else { - dispatch->glEnable(GL_BLEND); - dispatch->glBlendFunc(op_info->source_blend, - op_info->dest_blend); - } - - glamor_put_dispatch(glamor_priv); + glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + + glamor_priv = dest_priv->base.glamor_priv; + + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glUseProgram(shader->prog); + + if (key->source == SHADER_SOURCE_SOLID) { + glamor_set_composite_solid(dispatch, + shader->source_solid_color, + shader->source_uniform_location); + } + else { + glamor_set_composite_texture(glamor_priv, 0, + shader->source, + shader->source_priv, shader->source_wh, + shader->source_repeat_mode); + } + + if (key->mask != SHADER_MASK_NONE) { + if (key->mask == SHADER_MASK_SOLID) { + glamor_set_composite_solid(dispatch, + shader->mask_solid_color, + shader->mask_uniform_location); + } + else { + glamor_set_composite_texture(glamor_priv, 1, + shader->mask, + shader->mask_priv, shader->mask_wh, + shader->mask_repeat_mode); + } + } + + if (op_info->source_blend == GL_ONE && op_info->dest_blend == GL_ZERO) { + dispatch->glDisable(GL_BLEND); + } + else { + dispatch->glEnable(GL_BLEND); + dispatch->glBlendFunc(op_info->source_blend, op_info->dest_blend); + } + + glamor_put_dispatch(glamor_priv); } static Bool glamor_composite_with_shader(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private *source_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, - int nrect, glamor_composite_rect_t * rects, - Bool two_pass_ca) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + int nrect, glamor_composite_rect_t *rects, + Bool two_pass_ca) { - ScreenPtr screen = dest->pDrawable->pScreen; - glamor_screen_private *glamor_priv = dest_pixmap_priv->base.glamor_priv; - PixmapPtr dest_pixmap = dest_pixmap_priv->base.pixmap; - PixmapPtr source_pixmap = NULL; - PixmapPtr mask_pixmap = NULL; - glamor_gl_dispatch *dispatch = NULL; - GLfloat dst_xscale, dst_yscale; - GLfloat mask_xscale = 1, mask_yscale = 1, - src_xscale = 1, src_yscale = 1; - struct shader_key key, key_ca; - float *vertices; - int dest_x_off, dest_y_off; - int source_x_off, source_y_off; - int mask_x_off, mask_y_off; - PictFormatShort saved_source_format = 0; - float src_matrix[9], mask_matrix[9]; - float *psrc_matrix = NULL, *pmask_matrix = NULL; - int vert_stride = 4; - int nrect_max; - Bool ret = FALSE; - glamor_composite_shader *shader = NULL, *shader_ca = NULL; - struct blendinfo op_info, op_info_ca; - - if(!glamor_composite_choose_shader(op, source, mask, dest, - source_pixmap_priv, mask_pixmap_priv, - dest_pixmap_priv, - &key, &shader, &op_info, - &saved_source_format)) { - glamor_fallback("glamor_composite_choose_shader failed\n"); - return ret; - } - if (two_pass_ca) { - if(!glamor_composite_choose_shader(PictOpAdd, source, mask, dest, - source_pixmap_priv, mask_pixmap_priv, - dest_pixmap_priv, - &key_ca, &shader_ca, &op_info_ca, - &saved_source_format)) { - glamor_fallback("glamor_composite_choose_shader failed\n"); - return ret; - } - } - - glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); - glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); - - dispatch = glamor_get_dispatch(glamor_priv); - - glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; - glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && - key.mask != SHADER_MASK_SOLID); - - dest_pixmap = glamor_get_drawable_pixmap(dest->pDrawable); - dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - glamor_get_drawable_deltas(dest->pDrawable, dest_pixmap, - &dest_x_off, &dest_y_off); - pixmap_priv_get_dest_scale(dest_pixmap_priv, &dst_xscale, &dst_yscale); - - if (glamor_priv->has_source_coords) { - source_pixmap = source_pixmap_priv->base.pixmap; - glamor_get_drawable_deltas(source->pDrawable, - source_pixmap, &source_x_off, - &source_y_off); - pixmap_priv_get_scale(source_pixmap_priv, &src_xscale, - &src_yscale); - if (source->transform) { - psrc_matrix = src_matrix; - glamor_picture_get_matrixf(source, psrc_matrix); - } - vert_stride += 4; - } - - if (glamor_priv->has_mask_coords) { - mask_pixmap = mask_pixmap_priv->base.pixmap; - glamor_get_drawable_deltas(mask->pDrawable, mask_pixmap, - &mask_x_off, &mask_y_off); - pixmap_priv_get_scale(mask_pixmap_priv, &mask_xscale, - &mask_yscale); - if (mask->transform) { - pmask_matrix = mask_matrix; - glamor_picture_get_matrixf(mask, pmask_matrix); - } - vert_stride += 4; - } - - nrect_max = (vert_stride * nrect) > GLAMOR_COMPOSITE_VBO_VERT_CNT ? - (GLAMOR_COMPOSITE_VBO_VERT_CNT / vert_stride) : nrect; - - while(nrect) { - int mrect, rect_processed; - int vb_stride; - - mrect = nrect > nrect_max ? nrect_max : nrect ; - glamor_setup_composite_vbo(screen, mrect * vert_stride); - rect_processed = mrect; - vb_stride = glamor_priv->vb_stride/sizeof(float); - while (mrect--) { - INT16 x_source; - INT16 y_source; - INT16 x_mask; - INT16 y_mask; - INT16 x_dest; - INT16 y_dest; - CARD16 width; - CARD16 height; - - x_dest = rects->x_dst + dest_x_off; - y_dest = rects->y_dst + dest_y_off; - x_source = rects->x_src + source_x_off; - y_source = rects->y_src + source_y_off; - x_mask = rects->x_mask + mask_x_off; - y_mask = rects->y_mask + mask_y_off; - width = rects->width; - height = rects->height; - - DEBUGF("dest(%d,%d) source(%d %d) mask (%d %d), width %d height %d \n", - x_dest, y_dest, x_source, y_source,x_mask,y_mask,width,height); - vertices = (float*)(glamor_priv->vb + glamor_priv->vbo_offset); - assert(glamor_priv->vbo_offset < glamor_priv->vbo_size - glamor_priv->vb_stride); - glamor_set_normalize_vcoords_ext(dest_pixmap_priv, dst_xscale, - dst_yscale, - x_dest, y_dest, - x_dest + width, y_dest + height, - glamor_priv->yInverted, - vertices, vb_stride); - vertices += 2; - if (key.source != SHADER_SOURCE_SOLID) { - glamor_set_normalize_tcoords_generic( - source_pixmap_priv, source->repeatType, psrc_matrix, - src_xscale, src_yscale, x_source, y_source, - x_source + width, y_source + height, - glamor_priv->yInverted, vertices, vb_stride); - vertices += 2; - } - - if (key.mask != SHADER_MASK_NONE - && key.mask != SHADER_MASK_SOLID) { - glamor_set_normalize_tcoords_generic( - mask_pixmap_priv, mask->repeatType, pmask_matrix, - mask_xscale, mask_yscale, x_mask, y_mask, - x_mask + width, y_mask + height, - glamor_priv->yInverted, vertices, vb_stride); - } - glamor_priv->render_nr_verts += 4; - glamor_priv->vbo_offset += glamor_priv->vb_stride * 4; - rects++; - } - glamor_flush_composite_rects(screen); - nrect -= rect_processed; - if (two_pass_ca) { - glamor_composite_set_shader_blend(dest_pixmap_priv, - &key_ca, shader_ca, - &op_info_ca); - glamor_flush_composite_rects(screen); - if (nrect) - glamor_composite_set_shader_blend(dest_pixmap_priv, - &key, shader, - &op_info); - } - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); - dispatch->glDisable(GL_BLEND); + ScreenPtr screen = dest->pDrawable->pScreen; + glamor_screen_private *glamor_priv = dest_pixmap_priv->base.glamor_priv; + PixmapPtr dest_pixmap = dest_pixmap_priv->base.pixmap; + PixmapPtr source_pixmap = NULL; + PixmapPtr mask_pixmap = NULL; + glamor_gl_dispatch *dispatch = NULL; + GLfloat dst_xscale, dst_yscale; + GLfloat mask_xscale = 1, mask_yscale = 1, src_xscale = 1, src_yscale = 1; + struct shader_key key, key_ca; + float *vertices; + int dest_x_off, dest_y_off; + int source_x_off, source_y_off; + int mask_x_off, mask_y_off; + PictFormatShort saved_source_format = 0; + float src_matrix[9], mask_matrix[9]; + float *psrc_matrix = NULL, *pmask_matrix = NULL; + int vert_stride = 4; + int nrect_max; + Bool ret = FALSE; + glamor_composite_shader *shader = NULL, *shader_ca = NULL; + struct blendinfo op_info, op_info_ca; + + if (!glamor_composite_choose_shader(op, source, mask, dest, + source_pixmap_priv, mask_pixmap_priv, + dest_pixmap_priv, + &key, &shader, &op_info, + &saved_source_format)) { + glamor_fallback("glamor_composite_choose_shader failed\n"); + return ret; + } + if (two_pass_ca) { + if (!glamor_composite_choose_shader(PictOpAdd, source, mask, dest, + source_pixmap_priv, + mask_pixmap_priv, dest_pixmap_priv, + &key_ca, &shader_ca, &op_info_ca, + &saved_source_format)) { + glamor_fallback("glamor_composite_choose_shader failed\n"); + return ret; + } + } + + glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); + glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); + + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; + glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && + key.mask != SHADER_MASK_SOLID); + + dest_pixmap = glamor_get_drawable_pixmap(dest->pDrawable); + dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); + glamor_get_drawable_deltas(dest->pDrawable, dest_pixmap, + &dest_x_off, &dest_y_off); + pixmap_priv_get_dest_scale(dest_pixmap_priv, &dst_xscale, &dst_yscale); + + if (glamor_priv->has_source_coords) { + source_pixmap = source_pixmap_priv->base.pixmap; + glamor_get_drawable_deltas(source->pDrawable, + source_pixmap, &source_x_off, &source_y_off); + pixmap_priv_get_scale(source_pixmap_priv, &src_xscale, &src_yscale); + if (source->transform) { + psrc_matrix = src_matrix; + glamor_picture_get_matrixf(source, psrc_matrix); + } + vert_stride += 4; + } + + if (glamor_priv->has_mask_coords) { + mask_pixmap = mask_pixmap_priv->base.pixmap; + glamor_get_drawable_deltas(mask->pDrawable, mask_pixmap, + &mask_x_off, &mask_y_off); + pixmap_priv_get_scale(mask_pixmap_priv, &mask_xscale, &mask_yscale); + if (mask->transform) { + pmask_matrix = mask_matrix; + glamor_picture_get_matrixf(mask, pmask_matrix); + } + vert_stride += 4; + } + + nrect_max = (vert_stride * nrect) > GLAMOR_COMPOSITE_VBO_VERT_CNT ? + (GLAMOR_COMPOSITE_VBO_VERT_CNT / vert_stride) : nrect; + + while (nrect) { + int mrect, rect_processed; + int vb_stride; + + mrect = nrect > nrect_max ? nrect_max : nrect; + glamor_setup_composite_vbo(screen, mrect * vert_stride); + rect_processed = mrect; + vb_stride = glamor_priv->vb_stride / sizeof(float); + while (mrect--) { + INT16 x_source; + INT16 y_source; + INT16 x_mask; + INT16 y_mask; + INT16 x_dest; + INT16 y_dest; + CARD16 width; + CARD16 height; + + x_dest = rects->x_dst + dest_x_off; + y_dest = rects->y_dst + dest_y_off; + x_source = rects->x_src + source_x_off; + y_source = rects->y_src + source_y_off; + x_mask = rects->x_mask + mask_x_off; + y_mask = rects->y_mask + mask_y_off; + width = rects->width; + height = rects->height; + + DEBUGF + ("dest(%d,%d) source(%d %d) mask (%d %d), width %d height %d \n", + x_dest, y_dest, x_source, y_source, x_mask, y_mask, width, + height); + vertices = (float *) (glamor_priv->vb + glamor_priv->vbo_offset); + assert(glamor_priv->vbo_offset < + glamor_priv->vbo_size - glamor_priv->vb_stride); + glamor_set_normalize_vcoords_ext(dest_pixmap_priv, dst_xscale, + dst_yscale, x_dest, y_dest, + x_dest + width, y_dest + height, + glamor_priv->yInverted, vertices, + vb_stride); + vertices += 2; + if (key.source != SHADER_SOURCE_SOLID) { + glamor_set_normalize_tcoords_generic(source_pixmap_priv, + source->repeatType, + psrc_matrix, src_xscale, + src_yscale, x_source, + y_source, x_source + width, + y_source + height, + glamor_priv->yInverted, + vertices, vb_stride); + vertices += 2; + } + + if (key.mask != SHADER_MASK_NONE && key.mask != SHADER_MASK_SOLID) { + glamor_set_normalize_tcoords_generic(mask_pixmap_priv, + mask->repeatType, + pmask_matrix, mask_xscale, + mask_yscale, x_mask, + y_mask, x_mask + width, + y_mask + height, + glamor_priv->yInverted, + vertices, vb_stride); + } + glamor_priv->render_nr_verts += 4; + glamor_priv->vbo_offset += glamor_priv->vb_stride * 4; + rects++; + } + glamor_flush_composite_rects(screen); + nrect -= rect_processed; + if (two_pass_ca) { + glamor_composite_set_shader_blend(dest_pixmap_priv, + &key_ca, shader_ca, &op_info_ca); + glamor_flush_composite_rects(screen); + if (nrect) + glamor_composite_set_shader_blend(dest_pixmap_priv, + &key, shader, &op_info); + } + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); + dispatch->glDisable(GL_BLEND); #ifndef GLAMOR_GLES2 - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glDisable(GL_TEXTURE_2D); - dispatch->glActiveTexture(GL_TEXTURE1); - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glActiveTexture(GL_TEXTURE1); + dispatch->glDisable(GL_TEXTURE_2D); #endif - DEBUGF("finish rendering.\n"); - dispatch->glUseProgram(0); - glamor_priv->state = RENDER_STATE; - glamor_priv->render_idle_cnt = 0; - if (saved_source_format) - source->format = saved_source_format; - glamor_put_dispatch(glamor_priv); - - ret = TRUE; - return ret; + DEBUGF("finish rendering.\n"); + dispatch->glUseProgram(0); + glamor_priv->state = RENDER_STATE; + glamor_priv->render_idle_cnt = 0; + if (saved_source_format) + source->format = saved_source_format; + glamor_put_dispatch(glamor_priv); + + ret = TRUE; + return ret; } PicturePtr @@ -1472,411 +1475,412 @@ glamor_convert_gradient_picture(ScreenPtr screen, int x_source, int y_source, int width, int height) { - PixmapPtr pixmap; - PicturePtr dst = NULL; - int error; - PictFormatShort format; - if (!source->pDrawable) - format = PICT_a8r8g8b8; - else - format = source->format; + PixmapPtr pixmap; + PicturePtr dst = NULL; + int error; + PictFormatShort format; + + if (!source->pDrawable) + format = PICT_a8r8g8b8; + else + format = source->format; #ifdef GLAMOR_GRADIENT_SHADER - if (!source->pDrawable) { - if (source->pSourcePict->type == SourcePictTypeLinear) { - dst = glamor_generate_linear_gradient_picture(screen, - source, x_source, y_source, width, height, format); - } else if (source->pSourcePict->type == SourcePictTypeRadial) { - dst = glamor_generate_radial_gradient_picture(screen, - source, x_source, y_source, width, height, format); - } - - if (dst) { -#if 0 /* Debug to compare it to pixman, Enable it if needed. */ - glamor_compare_pictures(screen, source, - dst, x_source, y_source, width, height, - 0, 3); + if (!source->pDrawable) { + if (source->pSourcePict->type == SourcePictTypeLinear) { + dst = glamor_generate_linear_gradient_picture(screen, + source, x_source, + y_source, width, + height, format); + } + else if (source->pSourcePict->type == SourcePictTypeRadial) { + dst = glamor_generate_radial_gradient_picture(screen, + source, x_source, + y_source, width, + height, format); + } + + if (dst) { +#if 0 /* Debug to compare it to pixman, Enable it if needed. */ + glamor_compare_pictures(screen, source, + dst, x_source, y_source, width, height, + 0, 3); #endif - return dst; - } - } + return dst; + } + } #endif - pixmap = glamor_create_pixmap(screen, - width, - height, - PIXMAN_FORMAT_DEPTH(format), - GLAMOR_CREATE_PIXMAP_CPU); - - if (!pixmap) - return NULL; - - dst = CreatePicture(0, - &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), - format), - 0, 0, serverClient, &error); - glamor_destroy_pixmap(pixmap); - if (!dst) - return NULL; - - ValidatePicture(dst); - - fbComposite(PictOpSrc, source, NULL, dst, x_source, y_source, - 0, 0, 0, 0, width, height); - return dst; + pixmap = glamor_create_pixmap(screen, + width, + height, + PIXMAN_FORMAT_DEPTH(format), + GLAMOR_CREATE_PIXMAP_CPU); + + if (!pixmap) + return NULL; + + dst = CreatePicture(0, + &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH(format), + format), 0, 0, serverClient, &error); + glamor_destroy_pixmap(pixmap); + if (!dst) + return NULL; + + ValidatePicture(dst); + + fbComposite(PictOpSrc, source, NULL, dst, x_source, y_source, + 0, 0, 0, 0, width, height); + return dst; } Bool glamor_composite_clipped_region(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - glamor_pixmap_private *source_pixmap_priv, - glamor_pixmap_private *mask_pixmap_priv, - glamor_pixmap_private *dest_pixmap_priv, - RegionPtr region, - int x_source, - int y_source, - int x_mask, - int y_mask, - int x_dest, - int y_dest) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + glamor_pixmap_private *source_pixmap_priv, + glamor_pixmap_private *mask_pixmap_priv, + glamor_pixmap_private *dest_pixmap_priv, + RegionPtr region, + int x_source, + int y_source, + int x_mask, int y_mask, int x_dest, int y_dest) { - ScreenPtr screen = dest->pDrawable->pScreen; - PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; - PicturePtr temp_src = source, temp_mask = mask; - glamor_pixmap_private *temp_src_priv = source_pixmap_priv; - glamor_pixmap_private *temp_mask_priv = mask_pixmap_priv; - int x_temp_src, y_temp_src, x_temp_mask, y_temp_mask; - BoxPtr extent; - glamor_composite_rect_t rect[10]; - glamor_composite_rect_t *prect = rect; - int prect_size = ARRAY_SIZE(rect); - int ok = FALSE; - int i; - int width; - int height; - BoxPtr box; - int nbox; - Bool two_pass_ca = FALSE; - - extent = RegionExtents(region); - box = RegionRects(region); - nbox = RegionNumRects(region); - width = extent->x2 - extent->x1; - height = extent->y2 - extent->y1; - - x_temp_src = x_source; - y_temp_src = y_source; - x_temp_mask = x_mask; - y_temp_mask = y_mask; - - DEBUGF("clipped (%d %d) (%d %d) (%d %d) width %d height %d \n", - x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height); - - if (source_pixmap_priv) - source_pixmap = source_pixmap_priv->base.pixmap; - - if (mask_pixmap_priv) - mask_pixmap = mask_pixmap_priv->base.pixmap; - - /* XXX is it possible source mask have non-zero drawable.x/y? */ - if (source - && ((!source->pDrawable - && (source->pSourcePict->type != SourcePictTypeSolidFill)) - || (source->pDrawable - && !GLAMOR_PIXMAP_PRIV_HAS_FBO(source_pixmap_priv) - && (source_pixmap->drawable.width != width - || source_pixmap->drawable.height != height)))) { - temp_src = - glamor_convert_gradient_picture(screen, source, - extent->x1 + x_source - x_dest, - extent->y1 + y_source - y_dest, - width, height); - if (!temp_src) { - temp_src = source; - goto out; - } - temp_src_priv = glamor_get_pixmap_private((PixmapPtr)(temp_src->pDrawable)); - x_temp_src = - extent->x1 + x_dest; - y_temp_src = - extent->y1 + y_dest; - } - - if (mask - && - ((!mask->pDrawable - && (mask->pSourcePict->type != SourcePictTypeSolidFill)) - || (mask->pDrawable - && !GLAMOR_PIXMAP_PRIV_HAS_FBO(mask_pixmap_priv) - && (mask_pixmap->drawable.width != width - || mask_pixmap->drawable.height != height)))) { - /* XXX if mask->pDrawable is the same as source->pDrawable, we have an opportunity - * to do reduce one convertion. */ - temp_mask = - glamor_convert_gradient_picture(screen, mask, - extent->x1 + x_mask - x_dest, - extent->y1 + y_mask - y_dest, - width, height); - if (!temp_mask) { - temp_mask = mask; - goto out; - } - temp_mask_priv = glamor_get_pixmap_private((PixmapPtr)(temp_mask->pDrawable)); - x_temp_mask = - extent->x1 + x_dest; - y_temp_mask = - extent->y1 + y_dest; - } - /* Do two-pass PictOpOver componentAlpha, until we enable - * dual source color blending. - */ - - if (mask && mask->componentAlpha) { - if (op == PictOpOver) { - two_pass_ca = TRUE; - op = PictOpOutReverse; - } - } - - if (!mask && temp_src) { - if (glamor_composite_with_copy(op, temp_src, dest, - x_temp_src, y_temp_src, - x_dest, y_dest, region)) { - ok = TRUE; - goto out; - } - } - - /*XXXXX, self copy?*/ - - x_dest += dest->pDrawable->x; - y_dest += dest->pDrawable->y; - if (temp_src && temp_src->pDrawable) { - x_temp_src += temp_src->pDrawable->x; - y_temp_src += temp_src->pDrawable->y; - } - if (temp_mask && temp_mask->pDrawable) { - x_temp_mask += temp_mask->pDrawable->x; - y_temp_mask += temp_mask->pDrawable->y; - } - - if (nbox > ARRAY_SIZE(rect)) { - prect = calloc(nbox, sizeof(*prect)); - if (prect) - prect_size = nbox; - else { - prect = rect; - prect_size = ARRAY_SIZE(rect); - } - } - while(nbox) { - int box_cnt; - box_cnt = nbox > prect_size ? prect_size : nbox; - for (i = 0; i < box_cnt; i++) { - prect[i].x_src = box[i].x1 + x_temp_src - x_dest; - prect[i].y_src = box[i].y1 + y_temp_src - y_dest; - prect[i].x_mask = box[i].x1 + x_temp_mask - x_dest; - prect[i].y_mask = box[i].y1 + y_temp_mask - y_dest; - prect[i].x_dst = box[i].x1; - prect[i].y_dst = box[i].y1; - prect[i].width = box[i].x2 - box[i].x1; - prect[i].height = box[i].y2 - box[i].y1; - DEBUGF("dest %d %d \n", prect[i].x_dst, prect[i].y_dst); - } - ok = glamor_composite_with_shader(op, temp_src, temp_mask, dest, - temp_src_priv, temp_mask_priv, - dest_pixmap_priv, - box_cnt, prect, two_pass_ca); - if (!ok) - break; - nbox -= box_cnt; - box += box_cnt; - } - - if (prect != rect) - free(prect); -out: - if (temp_src != source) - FreePicture(temp_src, 0); - if (temp_mask != mask) - FreePicture(temp_mask, 0); - - return ok; + ScreenPtr screen = dest->pDrawable->pScreen; + PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; + PicturePtr temp_src = source, temp_mask = mask; + glamor_pixmap_private *temp_src_priv = source_pixmap_priv; + glamor_pixmap_private *temp_mask_priv = mask_pixmap_priv; + int x_temp_src, y_temp_src, x_temp_mask, y_temp_mask; + BoxPtr extent; + glamor_composite_rect_t rect[10]; + glamor_composite_rect_t *prect = rect; + int prect_size = ARRAY_SIZE(rect); + int ok = FALSE; + int i; + int width; + int height; + BoxPtr box; + int nbox; + Bool two_pass_ca = FALSE; + + extent = RegionExtents(region); + box = RegionRects(region); + nbox = RegionNumRects(region); + width = extent->x2 - extent->x1; + height = extent->y2 - extent->y1; + + x_temp_src = x_source; + y_temp_src = y_source; + x_temp_mask = x_mask; + y_temp_mask = y_mask; + + DEBUGF("clipped (%d %d) (%d %d) (%d %d) width %d height %d \n", + x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height); + + if (source_pixmap_priv) + source_pixmap = source_pixmap_priv->base.pixmap; + + if (mask_pixmap_priv) + mask_pixmap = mask_pixmap_priv->base.pixmap; + + /* XXX is it possible source mask have non-zero drawable.x/y? */ + if (source + && ((!source->pDrawable + && (source->pSourcePict->type != SourcePictTypeSolidFill)) + || (source->pDrawable + && !GLAMOR_PIXMAP_PRIV_HAS_FBO(source_pixmap_priv) + && (source_pixmap->drawable.width != width + || source_pixmap->drawable.height != height)))) { + temp_src = + glamor_convert_gradient_picture(screen, source, + extent->x1 + x_source - x_dest, + extent->y1 + y_source - y_dest, + width, height); + if (!temp_src) { + temp_src = source; + goto out; + } + temp_src_priv = + glamor_get_pixmap_private((PixmapPtr) (temp_src->pDrawable)); + x_temp_src = -extent->x1 + x_dest; + y_temp_src = -extent->y1 + y_dest; + } + + if (mask + && + ((!mask->pDrawable + && (mask->pSourcePict->type != SourcePictTypeSolidFill)) + || (mask->pDrawable && !GLAMOR_PIXMAP_PRIV_HAS_FBO(mask_pixmap_priv) + && (mask_pixmap->drawable.width != width + || mask_pixmap->drawable.height != height)))) { + /* XXX if mask->pDrawable is the same as source->pDrawable, we have an opportunity + * to do reduce one convertion. */ + temp_mask = + glamor_convert_gradient_picture(screen, mask, + extent->x1 + x_mask - x_dest, + extent->y1 + y_mask - y_dest, + width, height); + if (!temp_mask) { + temp_mask = mask; + goto out; + } + temp_mask_priv = + glamor_get_pixmap_private((PixmapPtr) (temp_mask->pDrawable)); + x_temp_mask = -extent->x1 + x_dest; + y_temp_mask = -extent->y1 + y_dest; + } + /* Do two-pass PictOpOver componentAlpha, until we enable + * dual source color blending. + */ + + if (mask && mask->componentAlpha) { + if (op == PictOpOver) { + two_pass_ca = TRUE; + op = PictOpOutReverse; + } + } + + if (!mask && temp_src) { + if (glamor_composite_with_copy(op, temp_src, dest, + x_temp_src, y_temp_src, + x_dest, y_dest, region)) { + ok = TRUE; + goto out; + } + } + + /*XXXXX, self copy? */ + + x_dest += dest->pDrawable->x; + y_dest += dest->pDrawable->y; + if (temp_src && temp_src->pDrawable) { + x_temp_src += temp_src->pDrawable->x; + y_temp_src += temp_src->pDrawable->y; + } + if (temp_mask && temp_mask->pDrawable) { + x_temp_mask += temp_mask->pDrawable->x; + y_temp_mask += temp_mask->pDrawable->y; + } + + if (nbox > ARRAY_SIZE(rect)) { + prect = calloc(nbox, sizeof(*prect)); + if (prect) + prect_size = nbox; + else { + prect = rect; + prect_size = ARRAY_SIZE(rect); + } + } + while (nbox) { + int box_cnt; + + box_cnt = nbox > prect_size ? prect_size : nbox; + for (i = 0; i < box_cnt; i++) { + prect[i].x_src = box[i].x1 + x_temp_src - x_dest; + prect[i].y_src = box[i].y1 + y_temp_src - y_dest; + prect[i].x_mask = box[i].x1 + x_temp_mask - x_dest; + prect[i].y_mask = box[i].y1 + y_temp_mask - y_dest; + prect[i].x_dst = box[i].x1; + prect[i].y_dst = box[i].y1; + prect[i].width = box[i].x2 - box[i].x1; + prect[i].height = box[i].y2 - box[i].y1; + DEBUGF("dest %d %d \n", prect[i].x_dst, prect[i].y_dst); + } + ok = glamor_composite_with_shader(op, temp_src, temp_mask, dest, + temp_src_priv, temp_mask_priv, + dest_pixmap_priv, + box_cnt, prect, two_pass_ca); + if (!ok) + break; + nbox -= box_cnt; + box += box_cnt; + } + + if (prect != rect) + free(prect); + out: + if (temp_src != source) + FreePicture(temp_src, 0); + if (temp_mask != mask) + FreePicture(temp_mask, 0); + + return ok; } static Bool _glamor_composite(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height, Bool fallback) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, + CARD16 width, CARD16 height, Bool fallback) { - ScreenPtr screen = dest->pDrawable->pScreen; - glamor_pixmap_private *dest_pixmap_priv; - glamor_pixmap_private *source_pixmap_priv = - NULL, *mask_pixmap_priv = NULL; - PixmapPtr dest_pixmap = - glamor_get_drawable_pixmap(dest->pDrawable); - PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - Bool ret = TRUE; - RegionRec region; - BoxPtr extent; - int nbox, ok = FALSE; - PixmapPtr sub_dest_pixmap = NULL; - PixmapPtr sub_source_pixmap = NULL; - PixmapPtr sub_mask_pixmap = NULL; - int dest_x_off, dest_y_off, saved_dest_x, saved_dest_y; - int source_x_off, source_y_off, saved_source_x, saved_source_y; - int mask_x_off, mask_y_off, saved_mask_x, saved_mask_y; - DrawablePtr saved_dest_drawable; - DrawablePtr saved_source_drawable; - DrawablePtr saved_mask_drawable; - int force_clip = 0; - dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - - if (source->pDrawable) { - source_pixmap = glamor_get_drawable_pixmap(source->pDrawable); - source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); - if (source_pixmap_priv && source_pixmap_priv->type == GLAMOR_DRM_ONLY) - goto fail; - } - - if (mask && mask->pDrawable) { - mask_pixmap = glamor_get_drawable_pixmap(mask->pDrawable); - mask_pixmap_priv = glamor_get_pixmap_private(mask_pixmap); - if (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_DRM_ONLY) - goto fail; - } - - DEBUGF("source pixmap %p (%d %d) mask(%d %d) dest(%d %d) width %d height %d \n", - source_pixmap, x_source, y_source, x_mask, y_mask, x_dest, y_dest, width, height); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { - goto fail; - } - - if (op >= ARRAY_SIZE(composite_op_info)) - goto fail; - - if (mask && mask->componentAlpha) { - if (op == PictOpAtop - || op == PictOpAtopReverse - || op == PictOpXor - || op >= PictOpSaturate) { - glamor_fallback - ("glamor_composite(): component alpha op %x\n", op); - goto fail; - } - } - - if ((source && source->filter >= PictFilterConvolution) - || (mask && mask->filter >= PictFilterConvolution)) { - glamor_fallback("glamor_composite(): unsupported filter\n"); - goto fail; - } - - if (!miComputeCompositeRegion(®ion, - source, mask, dest, - x_source + (source_pixmap ? source->pDrawable->x : 0), - y_source + (source_pixmap ? source->pDrawable->y : 0), - x_mask + (mask_pixmap ? mask->pDrawable->x : 0), - y_mask + (mask_pixmap ? mask->pDrawable->y : 0), - x_dest + dest->pDrawable->x, - y_dest + dest->pDrawable->y, - width, - height)) { - ret = TRUE; - goto done; - } - - nbox = REGION_NUM_RECTS(®ion); - DEBUGF("first clipped when compositing.\n"); - DEBUGRegionPrint(®ion); - extent = RegionExtents(®ion); - if (nbox == 0) { - ret = TRUE; - goto done; - } - /* If destination is not a large pixmap, but the region is larger - * than texture size limitation, and source or mask is memory pixmap, - * then there may be need to load a large memory pixmap to a - * texture, and this is not permitted. Then we force to clip the - * destination and make sure latter will not upload a large memory - * pixmap. */ - if (!glamor_check_fbo_size(glamor_priv, - extent->x2 - extent->x1, extent->y2 - extent->y1) - && (dest_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) - && ((source_pixmap_priv - && (source_pixmap_priv->type == GLAMOR_MEMORY || source->repeatType == RepeatPad)) - || (mask_pixmap_priv - && (mask_pixmap_priv->type == GLAMOR_MEMORY || mask->repeatType == RepeatPad)) - || (!source_pixmap_priv - && (source->pSourcePict->type != SourcePictTypeSolidFill)) - || (!mask_pixmap_priv && mask - && mask->pSourcePict->type != SourcePictTypeSolidFill))) - force_clip = 1; - - if (force_clip || dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE - || (source_pixmap_priv - && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) - || (mask_pixmap_priv - && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE)) - ok = glamor_composite_largepixmap_region(op, - source, mask, dest, - source_pixmap_priv, - mask_pixmap_priv, - dest_pixmap_priv, - ®ion, force_clip, - x_source, y_source, - x_mask, y_mask, - x_dest, y_dest, - width, height); - else - ok = glamor_composite_clipped_region(op, source, - mask, dest, - source_pixmap_priv, - mask_pixmap_priv, - dest_pixmap_priv, - ®ion, - x_source, y_source, - x_mask, y_mask, - x_dest, y_dest); - - REGION_UNINIT(dest->pDrawable->pScreen, ®ion); - - if (ok) - goto done; -fail: - - if (!fallback - && glamor_ddx_fallback_check_pixmap(&dest_pixmap->drawable) - && (!source_pixmap - || glamor_ddx_fallback_check_pixmap(&source_pixmap->drawable)) - && (!mask_pixmap - || glamor_ddx_fallback_check_pixmap(&mask_pixmap->drawable))) { - ret = FALSE; - goto done; - } - - glamor_fallback - ("from picts %p:%p %dx%d / %p:%p %d x %d (%c,%c) to pict %p:%p %dx%d (%c)\n", - source, source->pDrawable, - source->pDrawable ? source->pDrawable->width : 0, - source->pDrawable ? source->pDrawable->height : 0, mask, - (!mask) ? NULL : mask->pDrawable, (!mask - || !mask->pDrawable) ? 0 : - mask->pDrawable->width, (!mask - || !mask-> - pDrawable) ? 0 : mask->pDrawable-> - height, glamor_get_picture_location(source), - glamor_get_picture_location(mask), dest, dest->pDrawable, - dest->pDrawable->width, dest->pDrawable->height, - glamor_get_picture_location(dest)); + ScreenPtr screen = dest->pDrawable->pScreen; + glamor_pixmap_private *dest_pixmap_priv; + glamor_pixmap_private *source_pixmap_priv = NULL, *mask_pixmap_priv = NULL; + PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(dest->pDrawable); + PixmapPtr source_pixmap = NULL, mask_pixmap = NULL; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + Bool ret = TRUE; + RegionRec region; + BoxPtr extent; + int nbox, ok = FALSE; + PixmapPtr sub_dest_pixmap = NULL; + PixmapPtr sub_source_pixmap = NULL; + PixmapPtr sub_mask_pixmap = NULL; + int dest_x_off, dest_y_off, saved_dest_x, saved_dest_y; + int source_x_off, source_y_off, saved_source_x, saved_source_y; + int mask_x_off, mask_y_off, saved_mask_x, saved_mask_y; + DrawablePtr saved_dest_drawable; + DrawablePtr saved_source_drawable; + DrawablePtr saved_mask_drawable; + int force_clip = 0; + + dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); + + if (source->pDrawable) { + source_pixmap = glamor_get_drawable_pixmap(source->pDrawable); + source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); + if (source_pixmap_priv && source_pixmap_priv->type == GLAMOR_DRM_ONLY) + goto fail; + } + + if (mask && mask->pDrawable) { + mask_pixmap = glamor_get_drawable_pixmap(mask->pDrawable); + mask_pixmap_priv = glamor_get_pixmap_private(mask_pixmap); + if (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_DRM_ONLY) + goto fail; + } + + DEBUGF + ("source pixmap %p (%d %d) mask(%d %d) dest(%d %d) width %d height %d \n", + source_pixmap, x_source, y_source, x_mask, y_mask, x_dest, y_dest, + width, height); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { + goto fail; + } + + if (op >= ARRAY_SIZE(composite_op_info)) + goto fail; + + if (mask && mask->componentAlpha) { + if (op == PictOpAtop + || op == PictOpAtopReverse + || op == PictOpXor || op >= PictOpSaturate) { + glamor_fallback("glamor_composite(): component alpha op %x\n", op); + goto fail; + } + } + + if ((source && source->filter >= PictFilterConvolution) + || (mask && mask->filter >= PictFilterConvolution)) { + glamor_fallback("glamor_composite(): unsupported filter\n"); + goto fail; + } + + if (!miComputeCompositeRegion(®ion, + source, mask, dest, + x_source + + (source_pixmap ? source->pDrawable->x : 0), + y_source + + (source_pixmap ? source->pDrawable->y : 0), + x_mask + + (mask_pixmap ? mask->pDrawable->x : 0), + y_mask + + (mask_pixmap ? mask->pDrawable->y : 0), + x_dest + dest->pDrawable->x, + y_dest + dest->pDrawable->y, width, height)) { + ret = TRUE; + goto done; + } + + nbox = REGION_NUM_RECTS(®ion); + DEBUGF("first clipped when compositing.\n"); + DEBUGRegionPrint(®ion); + extent = RegionExtents(®ion); + if (nbox == 0) { + ret = TRUE; + goto done; + } + /* If destination is not a large pixmap, but the region is larger + * than texture size limitation, and source or mask is memory pixmap, + * then there may be need to load a large memory pixmap to a + * texture, and this is not permitted. Then we force to clip the + * destination and make sure latter will not upload a large memory + * pixmap. */ + if (!glamor_check_fbo_size(glamor_priv, + extent->x2 - extent->x1, extent->y2 - extent->y1) + && (dest_pixmap_priv->type != GLAMOR_TEXTURE_LARGE) + && ((source_pixmap_priv + && (source_pixmap_priv->type == GLAMOR_MEMORY || + source->repeatType == RepeatPad)) + || (mask_pixmap_priv && + (mask_pixmap_priv->type == GLAMOR_MEMORY || + mask->repeatType == RepeatPad)) + || (!source_pixmap_priv && + (source->pSourcePict->type != SourcePictTypeSolidFill)) + || (!mask_pixmap_priv && mask && + mask->pSourcePict->type != SourcePictTypeSolidFill))) + force_clip = 1; + + if (force_clip || dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE + || (source_pixmap_priv + && source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) + || (mask_pixmap_priv && mask_pixmap_priv->type == GLAMOR_TEXTURE_LARGE)) + ok = glamor_composite_largepixmap_region(op, + source, mask, dest, + source_pixmap_priv, + mask_pixmap_priv, + dest_pixmap_priv, + ®ion, force_clip, + x_source, y_source, + x_mask, y_mask, + x_dest, y_dest, width, height); + else + ok = glamor_composite_clipped_region(op, source, + mask, dest, + source_pixmap_priv, + mask_pixmap_priv, + dest_pixmap_priv, + ®ion, + x_source, y_source, + x_mask, y_mask, x_dest, y_dest); + + REGION_UNINIT(dest->pDrawable->pScreen, ®ion); + + if (ok) + goto done; + fail: + + if (!fallback && glamor_ddx_fallback_check_pixmap(&dest_pixmap->drawable) + && (!source_pixmap + || glamor_ddx_fallback_check_pixmap(&source_pixmap->drawable)) + && (!mask_pixmap + || glamor_ddx_fallback_check_pixmap(&mask_pixmap->drawable))) { + ret = FALSE; + goto done; + } + + glamor_fallback + ("from picts %p:%p %dx%d / %p:%p %d x %d (%c,%c) to pict %p:%p %dx%d (%c)\n", + source, source->pDrawable, + source->pDrawable ? source->pDrawable->width : 0, + source->pDrawable ? source->pDrawable->height : 0, mask, + (!mask) ? NULL : mask->pDrawable, (!mask + || !mask->pDrawable) ? 0 : + mask->pDrawable->width, (!mask + || !mask->pDrawable) ? 0 : mask-> + pDrawable->height, glamor_get_picture_location(source), + glamor_get_picture_location(mask), dest, dest->pDrawable, + dest->pDrawable->width, dest->pDrawable->height, + glamor_get_picture_location(dest)); #define GET_SUB_PICTURE(p, access) do { \ glamor_get_drawable_deltas(p->pDrawable, p ##_pixmap, \ @@ -1897,32 +1901,28 @@ fail: x_ ##p = 0; \ y_ ##p = 0; \ } } while(0) - GET_SUB_PICTURE(dest, GLAMOR_ACCESS_RW); - if (source->pDrawable && !source->transform) - GET_SUB_PICTURE(source, GLAMOR_ACCESS_RO); - if (mask && mask->pDrawable && !mask->transform) - GET_SUB_PICTURE(mask, GLAMOR_ACCESS_RO); - - if (glamor_prepare_access_picture(dest, GLAMOR_ACCESS_RW)) { - if (source_pixmap == dest_pixmap || glamor_prepare_access_picture - (source, GLAMOR_ACCESS_RO)) { - if (!mask - || glamor_prepare_access_picture(mask, - GLAMOR_ACCESS_RO)) - { - fbComposite(op, - source, mask, dest, - x_source, y_source, - x_mask, y_mask, x_dest, - y_dest, width, height); - if (mask) - glamor_finish_access_picture(mask, GLAMOR_ACCESS_RO); - } - if (source_pixmap != dest_pixmap) - glamor_finish_access_picture(source, GLAMOR_ACCESS_RO); - } - glamor_finish_access_picture(dest, GLAMOR_ACCESS_RW); - } + GET_SUB_PICTURE(dest, GLAMOR_ACCESS_RW); + if (source->pDrawable && !source->transform) + GET_SUB_PICTURE(source, GLAMOR_ACCESS_RO); + if (mask && mask->pDrawable && !mask->transform) + GET_SUB_PICTURE(mask, GLAMOR_ACCESS_RO); + + if (glamor_prepare_access_picture(dest, GLAMOR_ACCESS_RW)) { + if (source_pixmap == dest_pixmap || glamor_prepare_access_picture + (source, GLAMOR_ACCESS_RO)) { + if (!mask || glamor_prepare_access_picture(mask, GLAMOR_ACCESS_RO)) { + fbComposite(op, + source, mask, dest, + x_source, y_source, + x_mask, y_mask, x_dest, y_dest, width, height); + if (mask) + glamor_finish_access_picture(mask, GLAMOR_ACCESS_RO); + } + if (source_pixmap != dest_pixmap) + glamor_finish_access_picture(source, GLAMOR_ACCESS_RO); + } + glamor_finish_access_picture(dest, GLAMOR_ACCESS_RW); + } #define PUT_SUB_PICTURE(p, access) do { \ if (sub_ ##p ##_pixmap != NULL) { \ @@ -1938,198 +1938,196 @@ fail: y_ ##p + p ##_y_off + p->pDrawable->y, \ width, height, access); \ }} while(0) - if (mask && mask->pDrawable) - PUT_SUB_PICTURE(mask, GLAMOR_ACCESS_RO); - if (source->pDrawable) - PUT_SUB_PICTURE(source, GLAMOR_ACCESS_RO); - PUT_SUB_PICTURE(dest, GLAMOR_ACCESS_RW); - done: - return ret; + if (mask && mask->pDrawable) + PUT_SUB_PICTURE(mask, GLAMOR_ACCESS_RO); + if (source->pDrawable) + PUT_SUB_PICTURE(source, GLAMOR_ACCESS_RO); + PUT_SUB_PICTURE(dest, GLAMOR_ACCESS_RW); + done: + return ret; } void glamor_composite(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, CARD16 width, CARD16 height) { - _glamor_composite(op, source, mask, dest, x_source, y_source, - x_mask, y_mask, x_dest, y_dest, width, height, - TRUE); + _glamor_composite(op, source, mask, dest, x_source, y_source, + x_mask, y_mask, x_dest, y_dest, width, height, TRUE); } Bool glamor_composite_nf(CARD8 op, - PicturePtr source, - PicturePtr mask, - PicturePtr dest, - INT16 x_source, - INT16 y_source, - INT16 x_mask, - INT16 y_mask, - INT16 x_dest, INT16 y_dest, - CARD16 width, CARD16 height) + PicturePtr source, + PicturePtr mask, + PicturePtr dest, + INT16 x_source, + INT16 y_source, + INT16 x_mask, + INT16 y_mask, + INT16 x_dest, INT16 y_dest, CARD16 width, CARD16 height) { - return _glamor_composite(op, source, mask, dest, x_source, y_source, - x_mask, y_mask, x_dest, y_dest, width, height, - FALSE); + return _glamor_composite(op, source, mask, dest, x_source, y_source, + x_mask, y_mask, x_dest, y_dest, width, height, + FALSE); } static void glamor_get_src_rect_extent(int nrect, - glamor_composite_rect_t *rects, - BoxPtr extent) + glamor_composite_rect_t *rects, BoxPtr extent) { - extent->x1 = MAXSHORT; - extent->y1 = MAXSHORT; - extent->x2 = MINSHORT; - extent->y2 = MINSHORT; - - while(nrect--) { - if (extent->x1 > rects->x_src) - extent->x1 = rects->x_src; - if (extent->y1 > rects->y_src) - extent->y1 = rects->y_src; - if (extent->x2 < rects->x_src + rects->width) - extent->x2 = rects->x_src + rects->width; - if (extent->y2 < rects->y_src + rects->height) - extent->y2 = rects->y_src + rects->height; - rects++; - } + extent->x1 = MAXSHORT; + extent->y1 = MAXSHORT; + extent->x2 = MINSHORT; + extent->y2 = MINSHORT; + + while (nrect--) { + if (extent->x1 > rects->x_src) + extent->x1 = rects->x_src; + if (extent->y1 > rects->y_src) + extent->y1 = rects->y_src; + if (extent->x2 < rects->x_src + rects->width) + extent->x2 = rects->x_src + rects->width; + if (extent->y2 < rects->y_src + rects->height) + extent->y2 = rects->y_src + rects->height; + rects++; + } } static void glamor_composite_src_rect_translate(int nrect, - glamor_composite_rect_t *rects, - int x, int y) + glamor_composite_rect_t *rects, + int x, int y) { - while(nrect--) { - rects->x_src += x; - rects->y_src += y; - rects++; - } + while (nrect--) { + rects->x_src += x; + rects->y_src += y; + rects++; + } } void glamor_composite_glyph_rects(CARD8 op, - PicturePtr src, PicturePtr mask, PicturePtr dst, - int nrect, glamor_composite_rect_t * rects) + PicturePtr src, PicturePtr mask, PicturePtr dst, + int nrect, glamor_composite_rect_t *rects) { - int n; - PicturePtr temp_src = NULL; - glamor_composite_rect_t *r; - - ValidatePicture(src); - ValidatePicture(dst); - if (!(glamor_is_large_picture(src) - || (mask && glamor_is_large_picture(mask)) - || glamor_is_large_picture(dst))) { - glamor_pixmap_private *src_pixmap_priv = NULL; - glamor_pixmap_private *mask_pixmap_priv = NULL; - glamor_pixmap_private *dst_pixmap_priv; - glamor_pixmap_private *temp_src_priv = NULL; - BoxRec src_extent; - - dst_pixmap_priv = glamor_get_pixmap_private - (glamor_get_drawable_pixmap(dst->pDrawable)); - - if (mask && mask->pDrawable) - mask_pixmap_priv = glamor_get_pixmap_private - (glamor_get_drawable_pixmap(mask->pDrawable)); - if (src->pDrawable) - src_pixmap_priv = glamor_get_pixmap_private - (glamor_get_drawable_pixmap(src->pDrawable)); - - if (!src->pDrawable - && (src->pSourcePict->type != SourcePictTypeSolidFill)) { - glamor_get_src_rect_extent(nrect, rects, &src_extent); - temp_src = glamor_convert_gradient_picture(dst->pDrawable->pScreen, - src, - src_extent.x1, src_extent.y1, - src_extent.x2 - src_extent.x1, - src_extent.y2 - src_extent.y1); - if (!temp_src) - goto fallback; - - temp_src_priv = glamor_get_pixmap_private - ((PixmapPtr)(temp_src->pDrawable)); - glamor_composite_src_rect_translate(nrect, rects, - -src_extent.x1, -src_extent.y1); - } else { - temp_src = src; - temp_src_priv = src_pixmap_priv; - } - - if (mask && mask->componentAlpha) { - if (op == PictOpOver) { - if (glamor_composite_with_shader(PictOpOutReverse, - temp_src, mask, dst, temp_src_priv, - mask_pixmap_priv, dst_pixmap_priv, nrect, rects, - TRUE)) - goto done; - } - } else { - if (glamor_composite_with_shader(op, temp_src, mask, dst, temp_src_priv, - mask_pixmap_priv, dst_pixmap_priv, nrect, rects, FALSE)) - goto done; - } - } -fallback: - n = nrect; - r = rects; - - while (n--) { - CompositePicture(op, - temp_src ? temp_src : src, - mask, - dst, - r->x_src, r->y_src, - r->x_mask, r->y_mask, - r->x_dst, r->y_dst, r->width, r->height); - r++; - } - -done: - if (temp_src && temp_src != src) - FreePicture(temp_src, 0); + int n; + PicturePtr temp_src = NULL; + glamor_composite_rect_t *r; + + ValidatePicture(src); + ValidatePicture(dst); + if (!(glamor_is_large_picture(src) + || (mask && glamor_is_large_picture(mask)) + || glamor_is_large_picture(dst))) { + glamor_pixmap_private *src_pixmap_priv = NULL; + glamor_pixmap_private *mask_pixmap_priv = NULL; + glamor_pixmap_private *dst_pixmap_priv; + glamor_pixmap_private *temp_src_priv = NULL; + BoxRec src_extent; + + dst_pixmap_priv = glamor_get_pixmap_private + (glamor_get_drawable_pixmap(dst->pDrawable)); + + if (mask && mask->pDrawable) + mask_pixmap_priv = glamor_get_pixmap_private + (glamor_get_drawable_pixmap(mask->pDrawable)); + if (src->pDrawable) + src_pixmap_priv = glamor_get_pixmap_private + (glamor_get_drawable_pixmap(src->pDrawable)); + + if (!src->pDrawable + && (src->pSourcePict->type != SourcePictTypeSolidFill)) { + glamor_get_src_rect_extent(nrect, rects, &src_extent); + temp_src = glamor_convert_gradient_picture(dst->pDrawable->pScreen, + src, + src_extent.x1, + src_extent.y1, + src_extent.x2 - + src_extent.x1, + src_extent.y2 - + src_extent.y1); + if (!temp_src) + goto fallback; + + temp_src_priv = glamor_get_pixmap_private + ((PixmapPtr) (temp_src->pDrawable)); + glamor_composite_src_rect_translate(nrect, rects, + -src_extent.x1, -src_extent.y1); + } + else { + temp_src = src; + temp_src_priv = src_pixmap_priv; + } + + if (mask && mask->componentAlpha) { + if (op == PictOpOver) { + if (glamor_composite_with_shader(PictOpOutReverse, + temp_src, mask, dst, + temp_src_priv, + mask_pixmap_priv, + dst_pixmap_priv, nrect, rects, + TRUE)) + goto done; + } + } + else { + if (glamor_composite_with_shader + (op, temp_src, mask, dst, temp_src_priv, mask_pixmap_priv, + dst_pixmap_priv, nrect, rects, FALSE)) + goto done; + } + } + fallback: + n = nrect; + r = rects; + + while (n--) { + CompositePicture(op, + temp_src ? temp_src : src, + mask, + dst, + r->x_src, r->y_src, + r->x_mask, r->y_mask, + r->x_dst, r->y_dst, r->width, r->height); + r++; + } + + done: + if (temp_src && temp_src != src) + FreePicture(temp_src, 0); } static Bool -_glamor_composite_rects (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects, - Bool fallback) +_glamor_composite_rects(CARD8 op, + PicturePtr pDst, + xRenderColor *color, + int nRect, xRectangle *rects, Bool fallback) { - miCompositeRects(op, pDst, color, nRect, rects); - return TRUE; + miCompositeRects(op, pDst, color, nRect, rects); + return TRUE; } void -glamor_composite_rects (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects) +glamor_composite_rects(CARD8 op, + PicturePtr pDst, + xRenderColor *color, int nRect, xRectangle *rects) { - _glamor_composite_rects(op, pDst, color, nRect, rects, TRUE); + _glamor_composite_rects(op, pDst, color, nRect, rects, TRUE); } Bool -glamor_composite_rects_nf (CARD8 op, - PicturePtr pDst, - xRenderColor *color, - int nRect, - xRectangle *rects) +glamor_composite_rects_nf(CARD8 op, + PicturePtr pDst, + xRenderColor *color, int nRect, xRectangle *rects) { - return _glamor_composite_rects(op, pDst, color, nRect, rects, FALSE); + return _glamor_composite_rects(op, pDst, color, nRect, rects, FALSE); } -#endif /* RENDER */ +#endif /* RENDER */ diff --git a/xorg-server/glamor/glamor_setspans.c b/xorg-server/glamor/glamor_setspans.c index 3d447b606..22fe88ce5 100644 --- a/xorg-server/glamor/glamor_setspans.c +++ b/xorg-server/glamor/glamor_setspans.c @@ -30,82 +30,83 @@ static Bool _glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int numPoints, int sorted, - Bool fallback) + DDXPointPtr points, int *widths, int numPoints, int sorted, + Bool fallback) { - PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *dest_pixmap_priv; - int i; - uint8_t *drawpixels_src = (uint8_t *) src; - RegionPtr clip = fbGetCompositeClip(gc); - BoxRec *pbox; - int x_off, y_off; - Bool ret = FALSE; + PixmapPtr dest_pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *dest_pixmap_priv; + int i; + uint8_t *drawpixels_src = (uint8_t *) src; + RegionPtr clip = fbGetCompositeClip(gc); + BoxRec *pbox; + int x_off, y_off; + Bool ret = FALSE; - dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { - glamor_fallback("pixmap has no fbo.\n"); - goto fail; - } + dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv)) { + glamor_fallback("pixmap has no fbo.\n"); + goto fail; + } - /* XXX Shall we set alu here? */ - if (!glamor_set_planemask(dest_pixmap, gc->planemask)) - goto fail; + /* XXX Shall we set alu here? */ + if (!glamor_set_planemask(dest_pixmap, gc->planemask)) + goto fail; - glamor_get_drawable_deltas(drawable, dest_pixmap, &x_off, &y_off); - for (i = 0; i < numPoints; i++) { + glamor_get_drawable_deltas(drawable, dest_pixmap, &x_off, &y_off); + for (i = 0; i < numPoints; i++) { - int n = REGION_NUM_RECTS(clip); - pbox = REGION_RECTS(clip); - while (n--) { - int x1 = points[i].x; - int x2 = x1 + widths[i]; - int y1 = points[i].y; + int n = REGION_NUM_RECTS(clip); - if (pbox->y1 > points[i].y || pbox->y2 < points[i].y) - break; - x1 = x1 > pbox->x1 ? x1 : pbox->x1; - x2 = x2 < pbox->x2 ? x2 : pbox->x2; - if (x1 >= x2) - continue; - glamor_upload_sub_pixmap_to_texture(dest_pixmap, x1 + x_off, y1 + y_off, x2 - x1, 1, - PixmapBytePad(widths[i], drawable->depth), - drawpixels_src, 0); - } - drawpixels_src += PixmapBytePad(widths[i], drawable->depth); - } - ret = TRUE; - goto done; + pbox = REGION_RECTS(clip); + while (n--) { + int x1 = points[i].x; + int x2 = x1 + widths[i]; + int y1 = points[i].y; -fail: - if (!fallback - && glamor_ddx_fallback_check_pixmap(drawable)) - goto done; + if (pbox->y1 > points[i].y || pbox->y2 < points[i].y) + break; + x1 = x1 > pbox->x1 ? x1 : pbox->x1; + x2 = x2 < pbox->x2 ? x2 : pbox->x2; + if (x1 >= x2) + continue; + glamor_upload_sub_pixmap_to_texture(dest_pixmap, x1 + x_off, + y1 + y_off, x2 - x1, 1, + PixmapBytePad(widths[i], + drawable->depth), + drawpixels_src, 0); + } + drawpixels_src += PixmapBytePad(widths[i], drawable->depth); + } + ret = TRUE; + goto done; - glamor_fallback("to %p (%c)\n", - drawable, glamor_get_drawable_location(drawable)); - if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { - fbSetSpans(drawable, gc, src, points, widths, numPoints, sorted); - glamor_finish_access(drawable, GLAMOR_ACCESS_RW); - } - ret = TRUE; + fail: + if (!fallback && glamor_ddx_fallback_check_pixmap(drawable)) + goto done; -done: - return ret; + glamor_fallback("to %p (%c)\n", + drawable, glamor_get_drawable_location(drawable)); + if (glamor_prepare_access(drawable, GLAMOR_ACCESS_RW)) { + fbSetSpans(drawable, gc, src, points, widths, numPoints, sorted); + glamor_finish_access(drawable, GLAMOR_ACCESS_RW); + } + ret = TRUE; + + done: + return ret; } void glamor_set_spans(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int n, int sorted) + DDXPointPtr points, int *widths, int n, int sorted) { - _glamor_set_spans(drawable, gc, src, points, - widths, n, sorted, TRUE); + _glamor_set_spans(drawable, gc, src, points, widths, n, sorted, TRUE); } Bool glamor_set_spans_nf(DrawablePtr drawable, GCPtr gc, char *src, - DDXPointPtr points, int *widths, int n, int sorted) + DDXPointPtr points, int *widths, int n, int sorted) { - return _glamor_set_spans(drawable, gc, src, points, - widths, n, sorted, FALSE); + return _glamor_set_spans(drawable, gc, src, points, + widths, n, sorted, FALSE); } diff --git a/xorg-server/glamor/glamor_tile.c b/xorg-server/glamor/glamor_tile.c index 60486cfc0..9c8e521b9 100644 --- a/xorg-server/glamor/glamor_tile.c +++ b/xorg-server/glamor/glamor_tile.c @@ -36,290 +36,276 @@ void glamor_init_tile_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - const char *tile_vs = - "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord0;\n" - "varying vec2 tile_texture;\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " tile_texture = v_texcoord0.xy;\n" "}\n"; - const char *tile_fs = - GLAMOR_DEFAULT_PRECISION - "varying vec2 tile_texture;\n" - "uniform sampler2D sampler;\n" - "uniform vec2 wh;" - "void main()\n" - "{\n" - " vec2 rel_tex;" - " rel_tex = tile_texture * wh; \n" - " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh); \n" - " gl_FragColor = texture2D(sampler, rel_tex);\n" - "}\n"; - GLint fs_prog, vs_prog; - GLint sampler_uniform_location; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->tile_prog = dispatch->glCreateProgram(); - vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, tile_vs); - fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, - tile_fs); - dispatch->glAttachShader(glamor_priv->tile_prog, vs_prog); - dispatch->glAttachShader(glamor_priv->tile_prog, fs_prog); - - dispatch->glBindAttribLocation(glamor_priv->tile_prog, - GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(glamor_priv->tile_prog, - GLAMOR_VERTEX_SOURCE, - "v_texcoord0"); - glamor_link_glsl_prog(dispatch, glamor_priv->tile_prog); - - sampler_uniform_location = - dispatch->glGetUniformLocation(glamor_priv->tile_prog, - "sampler"); - dispatch->glUseProgram(glamor_priv->tile_prog); - dispatch->glUniform1i(sampler_uniform_location, 0); - - glamor_priv->tile_wh = - dispatch->glGetUniformLocation(glamor_priv->tile_prog, - "wh"); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + const char *tile_vs = + "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord0;\n" + "varying vec2 tile_texture;\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " tile_texture = v_texcoord0.xy;\n" + "}\n"; + const char *tile_fs = + GLAMOR_DEFAULT_PRECISION + "varying vec2 tile_texture;\n" + "uniform sampler2D sampler;\n" + "uniform vec2 wh;" + "void main()\n" + "{\n" + " vec2 rel_tex;" + " rel_tex = tile_texture * wh; \n" + " rel_tex = floor(rel_tex) + (fract(rel_tex) / wh); \n" + " gl_FragColor = texture2D(sampler, rel_tex);\n" + "}\n"; + GLint fs_prog, vs_prog; + GLint sampler_uniform_location; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->tile_prog = dispatch->glCreateProgram(); + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, tile_vs); + fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, tile_fs); + dispatch->glAttachShader(glamor_priv->tile_prog, vs_prog); + dispatch->glAttachShader(glamor_priv->tile_prog, fs_prog); + + dispatch->glBindAttribLocation(glamor_priv->tile_prog, + GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(glamor_priv->tile_prog, + GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + glamor_link_glsl_prog(dispatch, glamor_priv->tile_prog); + + sampler_uniform_location = + dispatch->glGetUniformLocation(glamor_priv->tile_prog, "sampler"); + dispatch->glUseProgram(glamor_priv->tile_prog); + dispatch->glUniform1i(sampler_uniform_location, 0); + + glamor_priv->tile_wh = + dispatch->glGetUniformLocation(glamor_priv->tile_prog, "wh"); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); } void glamor_fini_tile_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->tile_prog); - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->tile_prog); + glamor_put_dispatch(glamor_priv); } static void _glamor_tile(PixmapPtr pixmap, PixmapPtr tile, - int x, int y, int width, int height, - int tile_x, int tile_y) + int x, int y, int width, int height, int tile_x, int tile_y) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - int x1 = x; - int x2 = x + width; - int y1 = y; - int y2 = y + height; - int tile_x1 = tile_x; - int tile_x2 = tile_x + width; - int tile_y1 = tile_y; - int tile_y2 = tile_y + height; - float vertices[8]; - float source_texcoords[8]; - GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; - glamor_pixmap_private *src_pixmap_priv; - glamor_pixmap_private *dst_pixmap_priv; - float wh[4]; - src_pixmap_priv = glamor_get_pixmap_private(tile); - dst_pixmap_priv = glamor_get_pixmap_private(pixmap); - - glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); - pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); - pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, - &src_yscale); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glUseProgram(glamor_priv->tile_prog); - - glamor_pixmap_fbo_fix_wh_ratio(wh, src_pixmap_priv); - dispatch->glUniform2fv(glamor_priv->tile_wh, 1, wh); - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glBindTexture(GL_TEXTURE_2D, - src_pixmap_priv->base.fbo->tex); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_NEAREST); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, - GL_REPEAT); - dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, - GL_REPEAT); + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + int x1 = x; + int x2 = x + width; + int y1 = y; + int y2 = y + height; + int tile_x1 = tile_x; + int tile_x2 = tile_x + width; + int tile_y1 = tile_y; + int tile_y2 = tile_y + height; + float vertices[8]; + float source_texcoords[8]; + GLfloat dst_xscale, dst_yscale, src_xscale, src_yscale; + glamor_pixmap_private *src_pixmap_priv; + glamor_pixmap_private *dst_pixmap_priv; + float wh[4]; + + src_pixmap_priv = glamor_get_pixmap_private(tile); + dst_pixmap_priv = glamor_get_pixmap_private(pixmap); + + glamor_set_destination_pixmap_priv_nc(dst_pixmap_priv); + pixmap_priv_get_dest_scale(dst_pixmap_priv, &dst_xscale, &dst_yscale); + pixmap_priv_get_scale(src_pixmap_priv, &src_xscale, &src_yscale); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glUseProgram(glamor_priv->tile_prog); + + glamor_pixmap_fbo_fix_wh_ratio(wh, src_pixmap_priv); + dispatch->glUniform2fv(glamor_priv->tile_wh, 1, wh); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); #ifndef GLAMOR_GLES2 - dispatch->glEnable(GL_TEXTURE_2D); + dispatch->glEnable(GL_TEXTURE_2D); #endif - glamor_set_repeat_normalize_tcoords - (src_pixmap_priv, RepeatNormal, - src_xscale, src_yscale, - tile_x1, tile_y1, - tile_x2, tile_y2, - glamor_priv->yInverted, - source_texcoords); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, - GL_FLOAT, GL_FALSE, - 2 * sizeof(float), - source_texcoords); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - - glamor_set_normalize_vcoords(dst_pixmap_priv, dst_xscale, dst_yscale, - x1, y1, - x2, y2, - glamor_priv->yInverted, vertices); - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + glamor_set_repeat_normalize_tcoords + (src_pixmap_priv, RepeatNormal, + src_xscale, src_yscale, + tile_x1, tile_y1, + tile_x2, tile_y2, glamor_priv->yInverted, source_texcoords); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, + GL_FLOAT, GL_FALSE, + 2 * sizeof(float), source_texcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + glamor_set_normalize_vcoords(dst_pixmap_priv, dst_xscale, dst_yscale, + x1, y1, + x2, y2, glamor_priv->yInverted, vertices); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); #ifndef GLAMOR_GLES2 - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glDisable(GL_TEXTURE_2D); #endif - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); - glamor_priv->state = RENDER_STATE; - glamor_priv->render_idle_cnt = 0; + glamor_priv->state = RENDER_STATE; + glamor_priv->render_idle_cnt = 0; } Bool glamor_tile(PixmapPtr pixmap, PixmapPtr tile, - int x, int y, int width, int height, - unsigned char alu, unsigned long planemask, - int tile_x, int tile_y) + int x, int y, int width, int height, + unsigned char alu, unsigned long planemask, int tile_x, int tile_y) { - ScreenPtr screen = pixmap->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_pixmap_private *dst_pixmap_priv; - glamor_pixmap_private *src_pixmap_priv; - glamor_gl_dispatch *dispatch; - - dst_pixmap_priv = glamor_get_pixmap_private(pixmap); - src_pixmap_priv = glamor_get_pixmap_private(tile); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) - return FALSE; - - if (glamor_priv->tile_prog == 0) { - glamor_fallback("Tiling unsupported\n"); - goto fail; - } - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv)) { - /* XXX dynamic uploading candidate. */ - glamor_fallback("Non-texture tile pixmap\n"); - goto fail; - } - - if (!glamor_set_planemask(pixmap, planemask)) { - glamor_fallback("unsupported planemask %lx\n", planemask); - goto fail; - } - - dispatch = glamor_get_dispatch(glamor_priv); - if (!glamor_set_alu(dispatch, alu)) { - glamor_fallback("unsupported alu %x\n", alu); - glamor_put_dispatch(glamor_priv); - goto fail; - } - - if (dst_pixmap_priv->type == GLAMOR_TEXTURE_LARGE - || src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - glamor_pixmap_clipped_regions *clipped_dst_regions; - int n_dst_region, i, j, k; - BoxRec box; - RegionRec region; - - box.x1 = x; - box.y1 = y; - box.x2 = x + width; - box.y2 = y + height; - RegionInitBoxes(®ion, &box, 1); - clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv, - ®ion, &n_dst_region, 0, 0, 0); - for(i = 0; i < n_dst_region; i++) - { - int n_src_region; - glamor_pixmap_clipped_regions *clipped_src_regions; - BoxPtr current_boxes; - int n_current_boxes; - - SET_PIXMAP_FBO_CURRENT(dst_pixmap_priv, clipped_dst_regions[i].block_idx); - - if (src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - RegionTranslate(clipped_dst_regions[i].region, - tile_x - x, tile_y - y); - DEBUGF("tiled a large src pixmap. %dx%d \n", tile->drawable.width, tile->drawable.height); - clipped_src_regions = glamor_compute_clipped_regions(src_pixmap_priv, - clipped_dst_regions[i].region, - &n_src_region, 1, 0, 0); - DEBUGF("got %d src regions %d \n", n_src_region); - for (j = 0; j < n_src_region; j++) - { - - SET_PIXMAP_FBO_CURRENT(src_pixmap_priv, clipped_src_regions[j].block_idx); - - RegionTranslate(clipped_src_regions[j].region, - x - tile_x, - y - tile_y); - current_boxes = RegionRects(clipped_src_regions[j].region); - n_current_boxes = RegionNumRects(clipped_src_regions[j].region); - for(k = 0; k < n_current_boxes; k++) - { - DEBUGF("Tile on %d %d %d %d dst block id %d tile block id %d tilex %d tiley %d\n", - current_boxes[k].x1, current_boxes[k].y1, - current_boxes[k].x2 - current_boxes[k].x1, - current_boxes[k].y2 - current_boxes[k].y1, - clipped_dst_regions[i].block_idx, - clipped_src_regions[j].block_idx, - (tile_x + (current_boxes[k].x1 - x)), - tile_y + (current_boxes[k].y1 - y)); - - _glamor_tile(pixmap, tile, - current_boxes[k].x1, current_boxes[k].y1, - current_boxes[k].x2 - current_boxes[k].x1, - current_boxes[k].y2 - current_boxes[k].y1, - (tile_x + (current_boxes[k].x1 - x)), - (tile_y + (current_boxes[k].y1 - y))); - } - - RegionDestroy(clipped_src_regions[j].region); - } - free(clipped_src_regions); - } else { - current_boxes = RegionRects(clipped_dst_regions[i].region); - n_current_boxes = RegionNumRects(clipped_dst_regions[i].region); - for(k = 0; k < n_current_boxes; k++) - { - _glamor_tile(pixmap, tile, - current_boxes[k].x1, current_boxes[k].y1, - current_boxes[k].x2 - current_boxes[k].x1, - current_boxes[k].y2 - current_boxes[k].y1, - (tile_x + (current_boxes[k].x1 - x)), - (tile_y + (current_boxes[k].y1 - y))); - } - } - RegionDestroy(clipped_dst_regions[i].region); - } - free(clipped_dst_regions); - RegionUninit(®ion); - } - else - _glamor_tile(pixmap, tile, x, y, width, height, tile_x, tile_y); - - glamor_set_alu(dispatch, GXcopy); - glamor_put_dispatch(glamor_priv); - return TRUE; -fail: - return FALSE; + ScreenPtr screen = pixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_private *dst_pixmap_priv; + glamor_pixmap_private *src_pixmap_priv; + glamor_gl_dispatch *dispatch; + + dst_pixmap_priv = glamor_get_pixmap_private(pixmap); + src_pixmap_priv = glamor_get_pixmap_private(tile); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dst_pixmap_priv)) + return FALSE; + + if (glamor_priv->tile_prog == 0) { + glamor_fallback("Tiling unsupported\n"); + goto fail; + } + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(src_pixmap_priv)) { + /* XXX dynamic uploading candidate. */ + glamor_fallback("Non-texture tile pixmap\n"); + goto fail; + } + + if (!glamor_set_planemask(pixmap, planemask)) { + glamor_fallback("unsupported planemask %lx\n", planemask); + goto fail; + } + + dispatch = glamor_get_dispatch(glamor_priv); + if (!glamor_set_alu(dispatch, alu)) { + glamor_fallback("unsupported alu %x\n", alu); + glamor_put_dispatch(glamor_priv); + goto fail; + } + + if (dst_pixmap_priv->type == GLAMOR_TEXTURE_LARGE + || src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + glamor_pixmap_clipped_regions *clipped_dst_regions; + int n_dst_region, i, j, k; + BoxRec box; + RegionRec region; + + box.x1 = x; + box.y1 = y; + box.x2 = x + width; + box.y2 = y + height; + RegionInitBoxes(®ion, &box, 1); + clipped_dst_regions = glamor_compute_clipped_regions(dst_pixmap_priv, + ®ion, + &n_dst_region, 0, + 0, 0); + for (i = 0; i < n_dst_region; i++) { + int n_src_region; + glamor_pixmap_clipped_regions *clipped_src_regions; + BoxPtr current_boxes; + int n_current_boxes; + + SET_PIXMAP_FBO_CURRENT(dst_pixmap_priv, + clipped_dst_regions[i].block_idx); + + if (src_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + RegionTranslate(clipped_dst_regions[i].region, + tile_x - x, tile_y - y); + DEBUGF("tiled a large src pixmap. %dx%d \n", + tile->drawable.width, tile->drawable.height); + clipped_src_regions = + glamor_compute_clipped_regions(src_pixmap_priv, + clipped_dst_regions[i]. + region, &n_src_region, 1, 0, + 0); + DEBUGF("got %d src regions %d \n", n_src_region); + for (j = 0; j < n_src_region; j++) { + + SET_PIXMAP_FBO_CURRENT(src_pixmap_priv, + clipped_src_regions[j].block_idx); + + RegionTranslate(clipped_src_regions[j].region, + x - tile_x, y - tile_y); + current_boxes = RegionRects(clipped_src_regions[j].region); + n_current_boxes = + RegionNumRects(clipped_src_regions[j].region); + for (k = 0; k < n_current_boxes; k++) { + DEBUGF + ("Tile on %d %d %d %d dst block id %d tile block id %d tilex %d tiley %d\n", + current_boxes[k].x1, current_boxes[k].y1, + current_boxes[k].x2 - current_boxes[k].x1, + current_boxes[k].y2 - current_boxes[k].y1, + clipped_dst_regions[i].block_idx, + clipped_src_regions[j].block_idx, + (tile_x + (current_boxes[k].x1 - x)), + tile_y + (current_boxes[k].y1 - y)); + + _glamor_tile(pixmap, tile, + current_boxes[k].x1, current_boxes[k].y1, + current_boxes[k].x2 - current_boxes[k].x1, + current_boxes[k].y2 - current_boxes[k].y1, + (tile_x + (current_boxes[k].x1 - x)), + (tile_y + (current_boxes[k].y1 - y))); + } + + RegionDestroy(clipped_src_regions[j].region); + } + free(clipped_src_regions); + } + else { + current_boxes = RegionRects(clipped_dst_regions[i].region); + n_current_boxes = RegionNumRects(clipped_dst_regions[i].region); + for (k = 0; k < n_current_boxes; k++) { + _glamor_tile(pixmap, tile, + current_boxes[k].x1, current_boxes[k].y1, + current_boxes[k].x2 - current_boxes[k].x1, + current_boxes[k].y2 - current_boxes[k].y1, + (tile_x + (current_boxes[k].x1 - x)), + (tile_y + (current_boxes[k].y1 - y))); + } + } + RegionDestroy(clipped_dst_regions[i].region); + } + free(clipped_dst_regions); + RegionUninit(®ion); + } + else + _glamor_tile(pixmap, tile, x, y, width, height, tile_x, tile_y); + + glamor_set_alu(dispatch, GXcopy); + glamor_put_dispatch(glamor_priv); + return TRUE; + fail: + return FALSE; } diff --git a/xorg-server/glamor/glamor_trapezoid.c b/xorg-server/glamor/glamor_trapezoid.c index 76b3729cf..cd99a4782 100644 --- a/xorg-server/glamor/glamor_trapezoid.c +++ b/xorg-server/glamor/glamor_trapezoid.c @@ -37,25 +37,27 @@ #include "fbpict.h" static xFixed -_glamor_linefixedX (xLineFixed *l, xFixed y, Bool ceil) +_glamor_linefixedX(xLineFixed *l, xFixed y, Bool ceil) { - xFixed dx = l->p2.x - l->p1.x; - xFixed_32_32 ex = (xFixed_32_32) (y - l->p1.y) * dx; - xFixed dy = l->p2.y - l->p1.y; - if (ceil) - ex += (dy - 1); - return l->p1.x + (xFixed) (ex / dy); + xFixed dx = l->p2.x - l->p1.x; + xFixed_32_32 ex = (xFixed_32_32) (y - l->p1.y) * dx; + xFixed dy = l->p2.y - l->p1.y; + + if (ceil) + ex += (dy - 1); + return l->p1.x + (xFixed) (ex / dy); } static xFixed -_glamor_linefixedY (xLineFixed *l, xFixed x, Bool ceil) +_glamor_linefixedY(xLineFixed *l, xFixed x, Bool ceil) { - xFixed dy = l->p2.y - l->p1.y; - xFixed_32_32 ey = (xFixed_32_32) (x - l->p1.x) * dy; - xFixed dx = l->p2.x - l->p1.x; - if (ceil) - ey += (dx - 1); - return l->p1.y + (xFixed) (ey / dx); + xFixed dy = l->p2.y - l->p1.y; + xFixed_32_32 ey = (xFixed_32_32) (x - l->p1.x) * dy; + xFixed dx = l->p2.x - l->p1.x; + + if (ceil) + ey += (dx - 1); + return l->p1.y + (xFixed) (ey / dx); } #ifdef GLAMOR_TRAPEZOID_SHADER @@ -73,204 +75,206 @@ _glamor_linefixedY (xLineFixed *l, xFixed x, Bool ceil) && point[1] <= IntToxFixed(rect->y2)) static xFixed -_glamor_lines_crossfixedY (xLineFixed *l, xLineFixed *r) +_glamor_lines_crossfixedY(xLineFixed *l, xLineFixed *r) { - xFixed dx1 = l->p2.x - l->p1.x; - xFixed dx2 = r->p2.x - r->p1.x; - xFixed dy1 = l->p2.y - l->p1.y; - xFixed dy2 = r->p2.y - r->p1.y; - xFixed_32_32 tmp = (xFixed_32_32) dy2 * dy1; - xFixed_32_32 dividend1 = (tmp >> 32) * (l->p1.x - r->p1.x); - xFixed_32_32 dividend2; - xFixed_32_32 dividend3; - xFixed_32_32 divisor; - - tmp = (xFixed_32_32) dx1 * dy2; - dividend2 = (tmp >> 32) * l->p1.y; - tmp = (xFixed_32_32) dy1 * dx2; - dividend3 = (tmp >> 32) * r->p1.y; - divisor = ((xFixed_32_32) dx1 * (xFixed_32_32) dy2 - - (xFixed_32_32) dy1 * (xFixed_32_32) dx2) >> 32; - - if (divisor) - return (xFixed)((dividend2 - dividend1 - dividend3) / divisor); - - return 0xFFFFFFFF; -} + xFixed dx1 = l->p2.x - l->p1.x; + xFixed dx2 = r->p2.x - r->p1.x; + xFixed dy1 = l->p2.y - l->p1.y; + xFixed dy2 = r->p2.y - r->p1.y; + xFixed_32_32 tmp = (xFixed_32_32) dy2 * dy1; + xFixed_32_32 dividend1 = (tmp >> 32) * (l->p1.x - r->p1.x); + xFixed_32_32 dividend2; + xFixed_32_32 dividend3; + xFixed_32_32 divisor; -static Bool -point_inside_trapezoid(int point[2], xTrapezoid * trap, xFixed cut_y) -{ - int ret = TRUE; - int tmp; - if (point[1] > trap->bottom) { - ret = FALSE; - if (DEBUG_CLIP_VTX) { - ErrorF("Out of Trap bottom, point[1] = %d(0x%x)), " - "bottom = %d(0x%x)\n", - (unsigned int)xFixedToInt(point[1]), point[1], - (unsigned int)xFixedToInt(trap->bottom), - (unsigned int)trap->bottom); - } - - return ret; - } + tmp = (xFixed_32_32) dx1 *dy2; - if (point[1] < trap->top) { - ret = FALSE; - if (DEBUG_CLIP_VTX) { - ErrorF("Out of Trap top, point[1] = %d(0x%x)), " - "top = %d(0x%x)\n", - (unsigned int)xFixedToInt(point[1]), point[1], - (unsigned int)xFixedToInt(trap->top), - (unsigned int)trap->top); - } - - return ret; - } + dividend2 = (tmp >> 32) * l->p1.y; + tmp = (xFixed_32_32) dy1 *dx2; - tmp = _glamor_linefixedX (&trap->left, point[1], FALSE); - if (point[0] < tmp) { - ret = FALSE; - - if (abs(cut_y - trap->top) < pixman_fixed_1_minus_e && - abs(point[1] - trap->top) < pixman_fixed_1_minus_e && - tmp - point[0] < pixman_fixed_1_minus_e) { - ret = TRUE; - } else if (abs(cut_y - trap->bottom) < pixman_fixed_1_minus_e && - point[1] - trap->bottom < pixman_fixed_1_minus_e && - tmp - point[0] < pixman_fixed_1_minus_e) { - ret = TRUE; - } - - if (DEBUG_CLIP_VTX && !ret) { - ErrorF("Out of Trap left, point[0] = %d(0x%x)), " - "left = %d(0x%x)\n", - (unsigned int)xFixedToInt(point[0]), point[0], - (unsigned int)xFixedToInt(tmp), (unsigned int)tmp); - } - - if (!ret) - return ret; - } + dividend3 = (tmp >> 32) * r->p1.y; + divisor = ((xFixed_32_32) dx1 * (xFixed_32_32) dy2 + - (xFixed_32_32) dy1 * (xFixed_32_32) dx2) >> 32; - tmp = _glamor_linefixedX (&trap->right, point[1], TRUE); - if (point[0] > tmp) { - ret = FALSE; - - if (abs(cut_y - trap->top) < pixman_fixed_1_minus_e && - abs(point[1] - trap->top) < pixman_fixed_1_minus_e && - point[0] - tmp < pixman_fixed_1_minus_e) { - ret = TRUE; - } else if (abs(cut_y - trap->bottom) < pixman_fixed_1_minus_e && - abs(point[1] - trap->bottom) < pixman_fixed_1_minus_e && - point[0] - tmp < pixman_fixed_1_minus_e) { - ret = TRUE; - } - - if (DEBUG_CLIP_VTX && !ret) { - ErrorF("Out of Trap right, point[0] = %d(0x%x)), " - "right = %d(0x%x)\n", - (unsigned int)xFixedToInt(point[0]), point[0], - (unsigned int)xFixedToInt(tmp), (unsigned int)tmp); - } - - if (!ret) - return ret; - } + if (divisor) + return (xFixed) ((dividend2 - dividend1 - dividend3) / divisor); + + return 0xFFFFFFFF; +} - return ret; +static Bool +point_inside_trapezoid(int point[2], xTrapezoid *trap, xFixed cut_y) +{ + int ret = TRUE; + int tmp; + + if (point[1] > trap->bottom) { + ret = FALSE; + if (DEBUG_CLIP_VTX) { + ErrorF("Out of Trap bottom, point[1] = %d(0x%x)), " + "bottom = %d(0x%x)\n", + (unsigned int) xFixedToInt(point[1]), point[1], + (unsigned int) xFixedToInt(trap->bottom), + (unsigned int) trap->bottom); + } + + return ret; + } + + if (point[1] < trap->top) { + ret = FALSE; + if (DEBUG_CLIP_VTX) { + ErrorF("Out of Trap top, point[1] = %d(0x%x)), " + "top = %d(0x%x)\n", + (unsigned int) xFixedToInt(point[1]), point[1], + (unsigned int) xFixedToInt(trap->top), + (unsigned int) trap->top); + } + + return ret; + } + + tmp = _glamor_linefixedX(&trap->left, point[1], FALSE); + if (point[0] < tmp) { + ret = FALSE; + + if (abs(cut_y - trap->top) < pixman_fixed_1_minus_e && + abs(point[1] - trap->top) < pixman_fixed_1_minus_e && + tmp - point[0] < pixman_fixed_1_minus_e) { + ret = TRUE; + } + else if (abs(cut_y - trap->bottom) < pixman_fixed_1_minus_e && + point[1] - trap->bottom < pixman_fixed_1_minus_e && + tmp - point[0] < pixman_fixed_1_minus_e) { + ret = TRUE; + } + + if (DEBUG_CLIP_VTX && !ret) { + ErrorF("Out of Trap left, point[0] = %d(0x%x)), " + "left = %d(0x%x)\n", + (unsigned int) xFixedToInt(point[0]), point[0], + (unsigned int) xFixedToInt(tmp), (unsigned int) tmp); + } + + if (!ret) + return ret; + } + + tmp = _glamor_linefixedX(&trap->right, point[1], TRUE); + if (point[0] > tmp) { + ret = FALSE; + + if (abs(cut_y - trap->top) < pixman_fixed_1_minus_e && + abs(point[1] - trap->top) < pixman_fixed_1_minus_e && + point[0] - tmp < pixman_fixed_1_minus_e) { + ret = TRUE; + } + else if (abs(cut_y - trap->bottom) < pixman_fixed_1_minus_e && + abs(point[1] - trap->bottom) < pixman_fixed_1_minus_e && + point[0] - tmp < pixman_fixed_1_minus_e) { + ret = TRUE; + } + + if (DEBUG_CLIP_VTX && !ret) { + ErrorF("Out of Trap right, point[0] = %d(0x%x)), " + "right = %d(0x%x)\n", + (unsigned int) xFixedToInt(point[0]), point[0], + (unsigned int) xFixedToInt(tmp), (unsigned int) tmp); + } + + if (!ret) + return ret; + } + + return ret; } static void glamor_emit_composite_triangle(ScreenPtr screen, - const float *src_coords, - const float *mask_coords, - const float *dst_coords) + const float *src_coords, + const float *mask_coords, + const float *dst_coords) { - glamor_emit_composite_vert(screen, src_coords, mask_coords, - dst_coords, 0); - glamor_emit_composite_vert(screen, src_coords, mask_coords, - dst_coords, 1); - glamor_emit_composite_vert(screen, src_coords, mask_coords, - dst_coords, 2); + glamor_emit_composite_vert(screen, src_coords, mask_coords, dst_coords, 0); + glamor_emit_composite_vert(screen, src_coords, mask_coords, dst_coords, 1); + glamor_emit_composite_vert(screen, src_coords, mask_coords, dst_coords, 2); } static void glamor_flush_composite_triangles(ScreenPtr screen) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - - dispatch = glamor_get_dispatch(glamor_priv); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); - else { - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - glamor_priv->vb, GL_DYNAMIC_DRAW); - } + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + + dispatch = glamor_get_dispatch(glamor_priv); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); + else { - if (!glamor_priv->render_nr_verts) - return; + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + glamor_priv->vb, GL_DYNAMIC_DRAW); + } - dispatch->glDrawArrays(GL_TRIANGLES, 0, glamor_priv->render_nr_verts); - glamor_put_dispatch(glamor_priv); + if (!glamor_priv->render_nr_verts) + return; + + dispatch->glDrawArrays(GL_TRIANGLES, 0, glamor_priv->render_nr_verts); + glamor_put_dispatch(glamor_priv); } static Bool -_glamor_clip_trapezoid_vertex(xTrapezoid * trap, BoxPtr pbox, - int vertex[6], int *num) +_glamor_clip_trapezoid_vertex(xTrapezoid *trap, BoxPtr pbox, + int vertex[6], int *num) { - xFixed edge_cross_y = 0xFFFFFFFF; - int tl[2]; - int bl[2]; - int tr[2]; - int br[2]; - int left_cut_top[2]; - int left_cut_left[2]; - int left_cut_right[2]; - int left_cut_bottom[2]; - int right_cut_top[2]; - int right_cut_left[2]; - int right_cut_right[2]; - int right_cut_bottom[2]; - int tmp[2]; - int tmp_vtx[20*2]; - float tmp_vtx_slope[20]; - BoxRec trap_bound; - int i = 0; - int vertex_num = 0; - - if (DEBUG_CLIP_VTX) { - ErrorF("The parameter of xTrapezoid is:\ntop: %d 0x%x\tbottom: %d 0x%x\n" - "left: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n" - "right: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n", - xFixedToInt(trap->top), (unsigned int)trap->top, - xFixedToInt(trap->bottom), (unsigned int)trap->bottom, - xFixedToInt(trap->left.p1.x), (unsigned int)trap->left.p1.x, - xFixedToInt(trap->left.p1.y), (unsigned int)trap->left.p1.y, - xFixedToInt(trap->left.p2.x), (unsigned int)trap->left.p2.x, - xFixedToInt(trap->left.p2.y), (unsigned int)trap->left.p2.y, - xFixedToInt(trap->right.p1.x), (unsigned int)trap->right.p1.x, - xFixedToInt(trap->right.p1.y), (unsigned int)trap->right.p1.y, - xFixedToInt(trap->right.p2.x), (unsigned int)trap->right.p2.x, - xFixedToInt(trap->right.p2.y), (unsigned int)trap->right.p2.y); - } - - miTrapezoidBounds(1, trap, &trap_bound); - if (DEBUG_CLIP_VTX) - ErrorF("The bounds for this traps is: bounds.x1 = %d, bounds.x2 = %d, " - "bounds.y1 = %d, bounds.y2 = %d\n", trap_bound.x1, trap_bound.x2, - trap_bound.y1, trap_bound.y2); - - if (trap_bound.x1 > pbox->x2 || trap_bound.x2 < pbox->x1) - return FALSE; - if (trap_bound.y1 > pbox->y2 || trap_bound.y2 < pbox->y1) - return FALSE; + xFixed edge_cross_y = 0xFFFFFFFF; + int tl[2]; + int bl[2]; + int tr[2]; + int br[2]; + int left_cut_top[2]; + int left_cut_left[2]; + int left_cut_right[2]; + int left_cut_bottom[2]; + int right_cut_top[2]; + int right_cut_left[2]; + int right_cut_right[2]; + int right_cut_bottom[2]; + int tmp[2]; + int tmp_vtx[20 * 2]; + float tmp_vtx_slope[20]; + BoxRec trap_bound; + int i = 0; + int vertex_num = 0; + + if (DEBUG_CLIP_VTX) { + ErrorF + ("The parameter of xTrapezoid is:\ntop: %d 0x%x\tbottom: %d 0x%x\n" + "left: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n" + "right: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n", + xFixedToInt(trap->top), (unsigned int) trap->top, + xFixedToInt(trap->bottom), (unsigned int) trap->bottom, + xFixedToInt(trap->left.p1.x), (unsigned int) trap->left.p1.x, + xFixedToInt(trap->left.p1.y), (unsigned int) trap->left.p1.y, + xFixedToInt(trap->left.p2.x), (unsigned int) trap->left.p2.x, + xFixedToInt(trap->left.p2.y), (unsigned int) trap->left.p2.y, + xFixedToInt(trap->right.p1.x), (unsigned int) trap->right.p1.x, + xFixedToInt(trap->right.p1.y), (unsigned int) trap->right.p1.y, + xFixedToInt(trap->right.p2.x), (unsigned int) trap->right.p2.x, + xFixedToInt(trap->right.p2.y), (unsigned int) trap->right.p2.y); + } + + miTrapezoidBounds(1, trap, &trap_bound); + if (DEBUG_CLIP_VTX) + ErrorF("The bounds for this traps is: bounds.x1 = %d, bounds.x2 = %d, " + "bounds.y1 = %d, bounds.y2 = %d\n", trap_bound.x1, trap_bound.x2, + trap_bound.y1, trap_bound.y2); + + if (trap_bound.x1 > pbox->x2 || trap_bound.x2 < pbox->x1) + return FALSE; + if (trap_bound.y1 > pbox->y2 || trap_bound.y2 < pbox->y1) + return FALSE; #define IS_TRAP_EDGE_VERTICAL(edge) \ (edge->p1.x == edge->p2.x) @@ -334,1319 +338,1352 @@ _glamor_clip_trapezoid_vertex(xTrapezoid * trap, BoxPtr pbox, "the Rect\n"); \ } - /*Trap's right edge cut right edge. */ - if((!IS_TRAP_EDGE_VERTICAL((&trap->left))) || - (!IS_TRAP_EDGE_VERTICAL((&trap->right)))) { - edge_cross_y = _glamor_lines_crossfixedY((&trap->left), (&trap->right)); - if (DEBUG_CLIP_VTX) { - ErrorF("Trap's left edge cut right edge at %d(0x%x), " - "trap_top = %x, trap_bottom = %x\n", - xFixedToInt(edge_cross_y), edge_cross_y, - (unsigned int)trap->top, (unsigned int)trap->bottom); - } - } - - /*Trap's TopLeft, BottomLeft, TopRight and BottomRight. */ - CACULATE_CUT_VERTEX(tl, 1, FALSE, trap->top, (&trap->left)); - CACULATE_CUT_VERTEX(bl, 1, FALSE, trap->bottom, (&trap->left)); - CACULATE_CUT_VERTEX(tr, 1, TRUE, trap->top, (&trap->right)); - CACULATE_CUT_VERTEX(br, 1, TRUE, trap->bottom, (&trap->right)); - - if (DEBUG_CLIP_VTX) - ErrorF("Trap's TopLeft, BottomLeft, TopRight and BottomRight\n"); - if (DEBUG_CLIP_VTX) - ErrorF("Caculate the vertex of trapezoid:\n" - " (%3d, %3d)-------------------------(%3d, %3d)\n" - " / \\ \n" - " / \\ \n" - " / \\ \n" - " (%3d, %3d)---------------------------------(%3d, %3d)\n" - "Clip with rect:\n" - " (%3d, %3d)------------------------(%3d, %3d) \n" - " | | \n" - " | | \n" - " | | \n" - " (%3d, %3d)------------------------(%3d, %3d) \n", - xFixedToInt(tl[0]), xFixedToInt(tl[1]), xFixedToInt(tr[0]), - xFixedToInt(tr[1]), xFixedToInt(bl[0]), xFixedToInt(bl[1]), - xFixedToInt(br[0]), xFixedToInt(br[1]), - pbox->x1, pbox->y1, pbox->x2, pbox->y1, pbox->x1, pbox->y2, - pbox->x2, pbox->y2); - - ADD_VERTEX_IF_INSIDE(tl); - ADD_VERTEX_IF_INSIDE(bl); - ADD_VERTEX_IF_INSIDE(tr); - ADD_VERTEX_IF_INSIDE(br); - - /*Trap's left edge cut Rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("Trap's left edge cut Rect\n"); - CACULATE_CUT_VERTEX(left_cut_top, 1, FALSE, IntToxFixed(pbox->y1), (&trap->left)); - ADD_VERTEX_IF_INSIDE(left_cut_top); - if (!IS_TRAP_EDGE_VERTICAL((&trap->left))) { - CACULATE_CUT_VERTEX(left_cut_left, 0, FALSE, IntToxFixed(pbox->x1), (&trap->left)); - ADD_VERTEX_IF_INSIDE(left_cut_left); - } - CACULATE_CUT_VERTEX(left_cut_bottom, 1, FALSE, IntToxFixed(pbox->y2), (&trap->left)); - ADD_VERTEX_IF_INSIDE(left_cut_bottom); - if (!IS_TRAP_EDGE_VERTICAL((&trap->left))) { - CACULATE_CUT_VERTEX(left_cut_right, 0, FALSE, IntToxFixed(pbox->x2), (&trap->left)); - ADD_VERTEX_IF_INSIDE(left_cut_right); - } - - /*Trap's right edge cut Rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("Trap's right edge cut Rect\n"); - CACULATE_CUT_VERTEX(right_cut_top, 1, TRUE, IntToxFixed(pbox->y1), (&trap->right)); - ADD_VERTEX_IF_INSIDE(right_cut_top); - if (!IS_TRAP_EDGE_VERTICAL((&trap->right))) { - CACULATE_CUT_VERTEX(right_cut_left, 0, TRUE, IntToxFixed(pbox->x1), (&trap->right)); - ADD_VERTEX_IF_INSIDE(right_cut_left); - } - CACULATE_CUT_VERTEX(right_cut_bottom, 1, TRUE, IntToxFixed(pbox->y2), (&trap->right)); - ADD_VERTEX_IF_INSIDE(right_cut_bottom); - if (!IS_TRAP_EDGE_VERTICAL((&trap->right))) { - CACULATE_CUT_VERTEX(right_cut_right, 0, TRUE, IntToxFixed(pbox->x2), (&trap->right)); - ADD_VERTEX_IF_INSIDE(right_cut_right); - } - - /* Trap's top cut Left and Right of rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("Trap's top cut Left and Right of rect\n"); - tmp[0] = IntToxFixed(pbox->x1); - tmp[1] = trap->top; - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x2); - tmp[1] = trap->top; - ADD_VERTEX_IF_INSIDE(tmp); - - /* Trap's bottom cut Left and Right of rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("Trap's bottom cut Left and Right of rect\n"); - tmp[0] = IntToxFixed(pbox->x1); - tmp[1] = trap->bottom; - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x2); - tmp[1] = trap->bottom; - ADD_VERTEX_IF_INSIDE(tmp); - - /* The orginal 4 vertex of rect. */ - if (DEBUG_CLIP_VTX) - ErrorF("The orginal 4 vertex of rect\n"); - tmp[0] = IntToxFixed(pbox->x1); - tmp[1] = IntToxFixed(pbox->y1); - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x1); - tmp[1] = IntToxFixed(pbox->y2); - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x2); - tmp[1] = IntToxFixed(pbox->y2); - ADD_VERTEX_IF_INSIDE(tmp); - tmp[0] = IntToxFixed(pbox->x2); - tmp[1] = IntToxFixed(pbox->y1); - ADD_VERTEX_IF_INSIDE(tmp); - - if (DEBUG_CLIP_VTX) { - ErrorF("\nThe candidate vertex number is %d\n", vertex_num / 2); - for (i = 0; i < vertex_num / 2; i++) { - ErrorF("(%d, %d) ", tmp_vtx[2*i], tmp_vtx[2*i + 1]); - } - ErrorF("\n"); - } - - /* Sort the vertex by X and then Y. */ - for (i = 0; i < vertex_num / 2; i++) { - int j; - for (j = 0; j < vertex_num / 2 - i - 1; j++) { - if (tmp_vtx[2*j] > tmp_vtx[2*(j+1)] - || (tmp_vtx[2*j] == tmp_vtx[2*(j+1)] - && tmp_vtx[2*j + 1] > tmp_vtx[2*(j+1) + 1])) { - tmp[0] = tmp_vtx[2*j]; - tmp[1] = tmp_vtx[2*j + 1]; - tmp_vtx[2*j] = tmp_vtx[2*(j+1)]; - tmp_vtx[2*j + 1] = tmp_vtx[2*(j+1) + 1]; - tmp_vtx[2*(j+1)] = tmp[0]; - tmp_vtx[2*(j+1) + 1] = tmp[1]; - } - } - - } - - if (DEBUG_CLIP_VTX) { - ErrorF("\nAfter sort vertex number is:\n"); - for (i = 0; i < vertex_num / 2; i++) { - ErrorF("(%d, %d) ", tmp_vtx[2*i], tmp_vtx[2*i + 1]); - } - ErrorF("\n"); - } - - memset(vertex, -1, 2*6); - *num = 0; - - for (i = 0; i < vertex_num / 2; i++) { - if (*num > 0 && vertex[2*(*num - 1)] == tmp_vtx[2*i] - && vertex[2*(*num - 1) + 1] == tmp_vtx[2*i + 1]) { - /*same vertex.*/ - if (DEBUG_CLIP_VTX) - ErrorF("X Point:(%d, %d) discard\n", - tmp_vtx[2*i], tmp_vtx[2*i + 1]); - continue; - } - - (*num)++; - if (*num > 6) { - if (DEBUG_CLIP_VTX) - FatalError("Trapezoid clip with Rect can never have vtx" - "number bigger than 6\n"); - else { - ErrorF("Trapezoid clip with Rect can never have vtx" - "number bigger than 6\n"); - *num = 6; - break; - } - } - - vertex[2*(*num - 1)] = tmp_vtx[2*i]; - vertex[2*(*num - 1) + 1] = tmp_vtx[2*i + 1]; - if (DEBUG_CLIP_VTX) - ErrorF("@ Point:(%d, %d) select, num now is %d\n", - tmp_vtx[2*i], tmp_vtx[2*i + 1], *num); - } - - /* Now we need to arrange the vtx in the polygon's counter-clockwise - order. We first select the left and top point as the start point and - sort every vtx by the slope from vtx to the start vtx. */ - for (i = 1; i < *num; i++) { - tmp_vtx_slope[i] = (vertex[2*i] != vertex[0] ? - (float)(vertex[2*i + 1] - vertex[1]) / (float)(vertex[2*i] - vertex[0]) - : (float)INT_MAX); - } - - if (DEBUG_CLIP_VTX) { - ErrorF("\nvtx number: %d, VTX and slope:\n", *num); - for (i = 0; i < *num; i++) { - ErrorF("(%d, %d):%f ", - vertex[2*i], vertex[2*i + 1], - tmp_vtx_slope[i]); - } - ErrorF("\n"); - } - - /* Sort the vertex by slope. */ - for (i = 0; i < *num - 1; i++) { - int j; - float tmp_slope; - for (j = 1; j < *num - i - 1; j++) { - if (tmp_vtx_slope[j] < tmp_vtx_slope[j + 1]) { - tmp_slope = tmp_vtx_slope[j]; - tmp_vtx_slope[j] = tmp_vtx_slope[j + 1]; - tmp_vtx_slope[j + 1] = tmp_slope; - tmp[0] = vertex[2*j]; - tmp[1] = vertex[2*j + 1]; - vertex[2*j] = vertex[2*(j+1)]; - vertex[2*j + 1] = vertex[2*(j+1) + 1]; - vertex[2*(j+1)] = tmp[0]; - vertex[2*(j+1) + 1] = tmp[1]; - } - } - } - - if (DEBUG_CLIP_VTX) { - ErrorF("\nBefore return, vtx number: %d, VTX and slope:\n", *num); - for (i = 0; i < *num; i++) { - ErrorF("(%d, %d):%f ", - vertex[2*i], vertex[2*i + 1], - tmp_vtx_slope[i]); - } - ErrorF("\n"); - } - - return TRUE; + /*Trap's right edge cut right edge. */ + if ((!IS_TRAP_EDGE_VERTICAL((&trap->left))) || + (!IS_TRAP_EDGE_VERTICAL((&trap->right)))) { + edge_cross_y = _glamor_lines_crossfixedY((&trap->left), (&trap->right)); + if (DEBUG_CLIP_VTX) { + ErrorF("Trap's left edge cut right edge at %d(0x%x), " + "trap_top = %x, trap_bottom = %x\n", + xFixedToInt(edge_cross_y), edge_cross_y, + (unsigned int) trap->top, (unsigned int) trap->bottom); + } + } + + /*Trap's TopLeft, BottomLeft, TopRight and BottomRight. */ + CACULATE_CUT_VERTEX(tl, 1, FALSE, trap->top, (&trap->left)); + CACULATE_CUT_VERTEX(bl, 1, FALSE, trap->bottom, (&trap->left)); + CACULATE_CUT_VERTEX(tr, 1, TRUE, trap->top, (&trap->right)); + CACULATE_CUT_VERTEX(br, 1, TRUE, trap->bottom, (&trap->right)); + + if (DEBUG_CLIP_VTX) + ErrorF("Trap's TopLeft, BottomLeft, TopRight and BottomRight\n"); + if (DEBUG_CLIP_VTX) + ErrorF("Caculate the vertex of trapezoid:\n" + " (%3d, %3d)-------------------------(%3d, %3d)\n" + " / \\ \n" + " / \\ \n" + " / \\ \n" + " (%3d, %3d)---------------------------------(%3d, %3d)\n" + "Clip with rect:\n" + " (%3d, %3d)------------------------(%3d, %3d) \n" + " | | \n" + " | | \n" + " | | \n" + " (%3d, %3d)------------------------(%3d, %3d) \n", + xFixedToInt(tl[0]), xFixedToInt(tl[1]), xFixedToInt(tr[0]), + xFixedToInt(tr[1]), xFixedToInt(bl[0]), xFixedToInt(bl[1]), + xFixedToInt(br[0]), xFixedToInt(br[1]), + pbox->x1, pbox->y1, pbox->x2, pbox->y1, pbox->x1, pbox->y2, + pbox->x2, pbox->y2); + + ADD_VERTEX_IF_INSIDE(tl); + ADD_VERTEX_IF_INSIDE(bl); + ADD_VERTEX_IF_INSIDE(tr); + ADD_VERTEX_IF_INSIDE(br); + + /*Trap's left edge cut Rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("Trap's left edge cut Rect\n"); + CACULATE_CUT_VERTEX(left_cut_top, 1, FALSE, IntToxFixed(pbox->y1), + (&trap->left)); + ADD_VERTEX_IF_INSIDE(left_cut_top); + if (!IS_TRAP_EDGE_VERTICAL((&trap->left))) { + CACULATE_CUT_VERTEX(left_cut_left, 0, FALSE, IntToxFixed(pbox->x1), + (&trap->left)); + ADD_VERTEX_IF_INSIDE(left_cut_left); + } + CACULATE_CUT_VERTEX(left_cut_bottom, 1, FALSE, IntToxFixed(pbox->y2), + (&trap->left)); + ADD_VERTEX_IF_INSIDE(left_cut_bottom); + if (!IS_TRAP_EDGE_VERTICAL((&trap->left))) { + CACULATE_CUT_VERTEX(left_cut_right, 0, FALSE, IntToxFixed(pbox->x2), + (&trap->left)); + ADD_VERTEX_IF_INSIDE(left_cut_right); + } + + /*Trap's right edge cut Rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("Trap's right edge cut Rect\n"); + CACULATE_CUT_VERTEX(right_cut_top, 1, TRUE, IntToxFixed(pbox->y1), + (&trap->right)); + ADD_VERTEX_IF_INSIDE(right_cut_top); + if (!IS_TRAP_EDGE_VERTICAL((&trap->right))) { + CACULATE_CUT_VERTEX(right_cut_left, 0, TRUE, IntToxFixed(pbox->x1), + (&trap->right)); + ADD_VERTEX_IF_INSIDE(right_cut_left); + } + CACULATE_CUT_VERTEX(right_cut_bottom, 1, TRUE, IntToxFixed(pbox->y2), + (&trap->right)); + ADD_VERTEX_IF_INSIDE(right_cut_bottom); + if (!IS_TRAP_EDGE_VERTICAL((&trap->right))) { + CACULATE_CUT_VERTEX(right_cut_right, 0, TRUE, IntToxFixed(pbox->x2), + (&trap->right)); + ADD_VERTEX_IF_INSIDE(right_cut_right); + } + + /* Trap's top cut Left and Right of rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("Trap's top cut Left and Right of rect\n"); + tmp[0] = IntToxFixed(pbox->x1); + tmp[1] = trap->top; + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x2); + tmp[1] = trap->top; + ADD_VERTEX_IF_INSIDE(tmp); + + /* Trap's bottom cut Left and Right of rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("Trap's bottom cut Left and Right of rect\n"); + tmp[0] = IntToxFixed(pbox->x1); + tmp[1] = trap->bottom; + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x2); + tmp[1] = trap->bottom; + ADD_VERTEX_IF_INSIDE(tmp); + + /* The orginal 4 vertex of rect. */ + if (DEBUG_CLIP_VTX) + ErrorF("The orginal 4 vertex of rect\n"); + tmp[0] = IntToxFixed(pbox->x1); + tmp[1] = IntToxFixed(pbox->y1); + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x1); + tmp[1] = IntToxFixed(pbox->y2); + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x2); + tmp[1] = IntToxFixed(pbox->y2); + ADD_VERTEX_IF_INSIDE(tmp); + tmp[0] = IntToxFixed(pbox->x2); + tmp[1] = IntToxFixed(pbox->y1); + ADD_VERTEX_IF_INSIDE(tmp); + + if (DEBUG_CLIP_VTX) { + ErrorF("\nThe candidate vertex number is %d\n", vertex_num / 2); + for (i = 0; i < vertex_num / 2; i++) { + ErrorF("(%d, %d) ", tmp_vtx[2 * i], tmp_vtx[2 * i + 1]); + } + ErrorF("\n"); + } + + /* Sort the vertex by X and then Y. */ + for (i = 0; i < vertex_num / 2; i++) { + int j; + + for (j = 0; j < vertex_num / 2 - i - 1; j++) { + if (tmp_vtx[2 * j] > tmp_vtx[2 * (j + 1)] + || (tmp_vtx[2 * j] == tmp_vtx[2 * (j + 1)] + && tmp_vtx[2 * j + 1] > tmp_vtx[2 * (j + 1) + 1])) { + tmp[0] = tmp_vtx[2 * j]; + tmp[1] = tmp_vtx[2 * j + 1]; + tmp_vtx[2 * j] = tmp_vtx[2 * (j + 1)]; + tmp_vtx[2 * j + 1] = tmp_vtx[2 * (j + 1) + 1]; + tmp_vtx[2 * (j + 1)] = tmp[0]; + tmp_vtx[2 * (j + 1) + 1] = tmp[1]; + } + } + + } + + if (DEBUG_CLIP_VTX) { + ErrorF("\nAfter sort vertex number is:\n"); + for (i = 0; i < vertex_num / 2; i++) { + ErrorF("(%d, %d) ", tmp_vtx[2 * i], tmp_vtx[2 * i + 1]); + } + ErrorF("\n"); + } + + memset(vertex, -1, 2 * 6); + *num = 0; + + for (i = 0; i < vertex_num / 2; i++) { + if (*num > 0 && vertex[2 * (*num - 1)] == tmp_vtx[2 * i] + && vertex[2 * (*num - 1) + 1] == tmp_vtx[2 * i + 1]) { + /*same vertex. */ + if (DEBUG_CLIP_VTX) + ErrorF("X Point:(%d, %d) discard\n", + tmp_vtx[2 * i], tmp_vtx[2 * i + 1]); + continue; + } + + (*num)++; + if (*num > 6) { + if (DEBUG_CLIP_VTX) + FatalError("Trapezoid clip with Rect can never have vtx" + "number bigger than 6\n"); + else { + ErrorF("Trapezoid clip with Rect can never have vtx" + "number bigger than 6\n"); + *num = 6; + break; + } + } + + vertex[2 * (*num - 1)] = tmp_vtx[2 * i]; + vertex[2 * (*num - 1) + 1] = tmp_vtx[2 * i + 1]; + if (DEBUG_CLIP_VTX) + ErrorF("@ Point:(%d, %d) select, num now is %d\n", + tmp_vtx[2 * i], tmp_vtx[2 * i + 1], *num); + } + + /* Now we need to arrange the vtx in the polygon's counter-clockwise + order. We first select the left and top point as the start point and + sort every vtx by the slope from vtx to the start vtx. */ + for (i = 1; i < *num; i++) { + tmp_vtx_slope[i] = (vertex[2 * i] != vertex[0] ? + (float) (vertex[2 * i + 1] - + vertex[1]) / (float) (vertex[2 * i] - + vertex[0]) + : (float) INT_MAX); + } + + if (DEBUG_CLIP_VTX) { + ErrorF("\nvtx number: %d, VTX and slope:\n", *num); + for (i = 0; i < *num; i++) { + ErrorF("(%d, %d):%f ", + vertex[2 * i], vertex[2 * i + 1], tmp_vtx_slope[i]); + } + ErrorF("\n"); + } + + /* Sort the vertex by slope. */ + for (i = 0; i < *num - 1; i++) { + int j; + float tmp_slope; + + for (j = 1; j < *num - i - 1; j++) { + if (tmp_vtx_slope[j] < tmp_vtx_slope[j + 1]) { + tmp_slope = tmp_vtx_slope[j]; + tmp_vtx_slope[j] = tmp_vtx_slope[j + 1]; + tmp_vtx_slope[j + 1] = tmp_slope; + tmp[0] = vertex[2 * j]; + tmp[1] = vertex[2 * j + 1]; + vertex[2 * j] = vertex[2 * (j + 1)]; + vertex[2 * j + 1] = vertex[2 * (j + 1) + 1]; + vertex[2 * (j + 1)] = tmp[0]; + vertex[2 * (j + 1) + 1] = tmp[1]; + } + } + } + + if (DEBUG_CLIP_VTX) { + ErrorF("\nBefore return, vtx number: %d, VTX and slope:\n", *num); + for (i = 0; i < *num; i++) { + ErrorF("(%d, %d):%f ", + vertex[2 * i], vertex[2 * i + 1], tmp_vtx_slope[i]); + } + ErrorF("\n"); + } + + return TRUE; } static void glamor_setup_composite_vbo_for_trapezoid(ScreenPtr screen, int n_verts) { - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - glamor_gl_dispatch *dispatch; - int stride; - int vert_size; - - glamor_priv->render_nr_verts = 0; - - /* For GLAMOR_VERTEX_POS */ - glamor_priv->vb_stride = 2 * sizeof(float); - - /* For GLAMOR_GLAMOR_VERTEX_SOURCE */ - glamor_priv->vb_stride += 2 * sizeof(float); - - /* For GLAMOR_VERTEX_TOP_BOTTOM */ - glamor_priv->vb_stride += 2 * sizeof(float); - - /* For GLAMOR_VERTEX_LEFT_PARAM */ - glamor_priv->vb_stride += 4 * sizeof(float); - - /* For GLAMOR_VERTEX_RIGHT_PARAM */ - glamor_priv->vb_stride += 4 * sizeof(float); - - vert_size = n_verts * glamor_priv->vb_stride; - - dispatch = glamor_get_dispatch(glamor_priv); - - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { - if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { - glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * - glamor_priv->vb_stride; - glamor_priv->vbo_offset = 0; - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_size, - NULL, GL_STREAM_DRAW); - } - - glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - vert_size, - GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT); - - assert(glamor_priv->vb != NULL); - glamor_priv->vb -= glamor_priv->vbo_offset; - } else { - glamor_priv->vbo_offset = 0; - } - - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); - - /* Set the vertex pointer. */ - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset)); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); - stride = 2; - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset + stride * sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - stride += 2; - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_TOP_BOTTOM, 2, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset + stride * sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); - stride += 2; - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_LEFT_PARAM, 4, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset + stride * sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); - stride += 4; - - dispatch->glVertexAttribPointer(GLAMOR_VERTEX_RIGHT_PARAM, 4, GL_FLOAT, - GL_FALSE, glamor_priv->vb_stride, - (void *) ((long)glamor_priv->vbo_offset + stride * sizeof(float))); - dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_gl_dispatch *dispatch; + int stride; + int vert_size; + + glamor_priv->render_nr_verts = 0; + + /* For GLAMOR_VERTEX_POS */ + glamor_priv->vb_stride = 2 * sizeof(float); + + /* For GLAMOR_GLAMOR_VERTEX_SOURCE */ + glamor_priv->vb_stride += 2 * sizeof(float); + + /* For GLAMOR_VERTEX_TOP_BOTTOM */ + glamor_priv->vb_stride += 2 * sizeof(float); + + /* For GLAMOR_VERTEX_LEFT_PARAM */ + glamor_priv->vb_stride += 4 * sizeof(float); + + /* For GLAMOR_VERTEX_RIGHT_PARAM */ + glamor_priv->vb_stride += 4 * sizeof(float); + + vert_size = n_verts * glamor_priv->vb_stride; + + dispatch = glamor_get_dispatch(glamor_priv); + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) { + if (glamor_priv->vbo_size < (glamor_priv->vbo_offset + vert_size)) { + glamor_priv->vbo_size = GLAMOR_COMPOSITE_VBO_VERT_CNT * + glamor_priv->vb_stride; + glamor_priv->vbo_offset = 0; + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_size, NULL, GL_STREAM_DRAW); + } + + glamor_priv->vb = dispatch->glMapBufferRange(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + vert_size, + GL_MAP_WRITE_BIT | + GL_MAP_UNSYNCHRONIZED_BIT); + + assert(glamor_priv->vb != NULL); + glamor_priv->vb -= glamor_priv->vbo_offset; + } + else { + glamor_priv->vbo_offset = 0; + } + + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, glamor_priv->ebo); + + /* Set the vertex pointer. */ + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset)); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + stride = 2; + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset + + stride * sizeof(float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + stride += 2; + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_TOP_BOTTOM, 2, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset + + stride * sizeof(float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); + stride += 2; + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_LEFT_PARAM, 4, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset + + stride * sizeof(float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); + stride += 4; + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_RIGHT_PARAM, 4, GL_FLOAT, + GL_FALSE, glamor_priv->vb_stride, + (void *) ((long) glamor_priv->vbo_offset + + stride * sizeof(float))); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); + + glamor_put_dispatch(glamor_priv); } static Bool _glamor_trapezoids_with_shader(CARD8 op, - PicturePtr src, PicturePtr dst, - PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps) + PicturePtr src, PicturePtr dst, + PictFormatPtr mask_format, INT16 x_src, + INT16 y_src, int ntrap, xTrapezoid * traps) { - ScreenPtr screen = dst->pDrawable->pScreen; - glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); - struct shader_key key; - glamor_composite_shader *shader = NULL; - struct blendinfo op_info; - PictFormatShort saved_source_format = 0; - PixmapPtr source_pixmap = NULL; - PixmapPtr dest_pixmap = NULL; - glamor_pixmap_private *source_pixmap_priv = NULL; - glamor_pixmap_private *dest_pixmap_priv = NULL; - glamor_pixmap_private *temp_src_priv = NULL; - int x_temp_src, y_temp_src; - int src_width, src_height; - int source_x_off, source_y_off; - GLfloat src_xscale = 1, src_yscale = 1; - int x_dst, y_dst; - int dest_x_off, dest_y_off; - GLfloat dst_xscale, dst_yscale; - BoxRec bounds; - PicturePtr temp_src = src; - glamor_gl_dispatch *dispatch = NULL; - int vert_stride = 3; - int ntriangle_per_loop; - int nclip_rect; - int mclip_rect; - int clip_processed; - int clipped_vtx[6*2]; - RegionRec region; - BoxPtr box = NULL; - BoxPtr pbox = NULL; - int traps_count = 0; - int traps_not_completed = 0; - xTrapezoid * ptrap = NULL; - int nbox; - float src_matrix[9]; - Bool ret = FALSE; - - /* If a mask format wasn't provided, we get to choose, but behavior should - * be as if there was no temporary mask the traps were accumulated into. - */ - if (!mask_format) { - if (dst->polyEdge == PolyEdgeSharp) - mask_format = PictureMatchFormat(screen, 1, PICT_a1); - else - mask_format = PictureMatchFormat(screen, 8, PICT_a8); - for (; ntrap; ntrap--, traps++) - glamor_trapezoids(op, src, dst, mask_format, x_src, - y_src, 1, traps); - return TRUE; - } - - miTrapezoidBounds(ntrap, traps, &bounds); - DEBUGF("The bounds for all traps is: bounds.x1 = %d, bounds.x2 = %d, " - "bounds.y1 = %d, bounds.y2 = %d\n", bounds.x1, bounds.x2, - bounds.y1, bounds.y2); - - /* No area need to render. */ - if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) - return TRUE; - - dest_pixmap = glamor_get_drawable_pixmap(dst->pDrawable); - dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv) - || dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { - /* Currently. Always fallback to cpu if destination is in CPU memory.*/ - ret = FALSE; - DEBUGF("dst pixmap has no FBO.\n"); - goto TRAPEZOID_OUT; - } - - if (src->pDrawable) { - source_pixmap = glamor_get_drawable_pixmap(src->pDrawable); - source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); - temp_src_priv = source_pixmap_priv; - if (source_pixmap_priv - && (source_pixmap_priv->type == GLAMOR_DRM_ONLY - || source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE)) { - ret = FALSE; - goto TRAPEZOID_OUT; - } - } - - x_dst = bounds.x1; - y_dst = bounds.y1; - - src_width = bounds.x2 - bounds.x1; - src_height = bounds.y2 - bounds.y1; - - x_temp_src = x_src + bounds.x1 - (traps[0].left.p1.x >> 16); - y_temp_src = y_src + bounds.y1 - (traps[0].left.p1.y >> 16); - - if ((!src->pDrawable && - (src->pSourcePict->type != SourcePictTypeSolidFill)) //1. The Gradient case. - /* 2. Has no fbo but can upload.*/ - || (src->pDrawable && !GLAMOR_PIXMAP_PRIV_HAS_FBO(source_pixmap_priv) - && ((src_width * src_height * 4 < - source_pixmap->drawable.width * source_pixmap->drawable.height) - || !glamor_check_fbo_size(glamor_priv, source_pixmap->drawable.width, - source_pixmap->drawable.height)))) { - - if (!glamor_check_fbo_size(glamor_priv, src_width, src_height)) { - ret = FALSE; - goto TRAPEZOID_OUT; - } - temp_src = glamor_convert_gradient_picture(screen, src, - x_src, y_src, - src_width, src_height); - if (!temp_src) { - temp_src = src; - ret = FALSE; - DEBUGF("Convert gradient picture failed\n"); - goto TRAPEZOID_OUT; - } - temp_src_priv = glamor_get_pixmap_private((PixmapPtr)temp_src->pDrawable); - x_temp_src = y_temp_src = 0; - } - - x_dst += dst->pDrawable->x; - y_dst += dst->pDrawable->y; - if (temp_src->pDrawable) { - x_temp_src += temp_src->pDrawable->x; - y_temp_src += temp_src->pDrawable->y; - } - - if (!miComputeCompositeRegion(®ion, - temp_src, NULL, dst, - x_temp_src, y_temp_src, - 0, 0, - x_dst, y_dst, - src_width, src_height)) { - DEBUGF("All the regions are clipped out, do nothing\n"); - goto TRAPEZOID_OUT; - } - - box = REGION_RECTS(®ion); - nbox = REGION_NUM_RECTS(®ion); - pbox = box; - - ret = glamor_composite_choose_shader(op, temp_src, NULL, dst, - temp_src_priv, NULL, dest_pixmap_priv, - &key, &shader, &op_info, &saved_source_format); - if (ret == FALSE) { - DEBUGF("can not set the shader program for composite\n"); - goto TRAPEZOID_RESET_GL; - } - glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); - glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); - glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; - glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && - key.mask != SHADER_MASK_SOLID); - - dispatch = glamor_get_dispatch(glamor_priv); - - glamor_get_drawable_deltas(dst->pDrawable, dest_pixmap, - &dest_x_off, &dest_y_off); - - pixmap_priv_get_dest_scale(dest_pixmap_priv, &dst_xscale, &dst_yscale); - - if (glamor_priv->has_source_coords) { - source_pixmap = glamor_get_drawable_pixmap(temp_src->pDrawable); - source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); - glamor_get_drawable_deltas(temp_src->pDrawable, - source_pixmap, - &source_x_off, &source_y_off); - pixmap_priv_get_scale(source_pixmap_priv, - &src_xscale, &src_yscale); - glamor_picture_get_matrixf(temp_src, src_matrix); - vert_stride += 3; - } - - if (glamor_priv->has_mask_coords) { - DEBUGF("Should never have mask coords here!\n"); - ret = FALSE; - goto TRAPEZOID_RESET_GL; - } - - /* A trapezoid clip with a rectangle will at most generate a hexagon, - which can be devided into 4 triangles to render. */ - ntriangle_per_loop = (vert_stride * nbox * ntrap * 4) > GLAMOR_COMPOSITE_VBO_VERT_CNT ? - (GLAMOR_COMPOSITE_VBO_VERT_CNT / vert_stride) : nbox * ntrap * 4; - ntriangle_per_loop = (ntriangle_per_loop / 4) * 4; - - nclip_rect = nbox; - while (nclip_rect) { - mclip_rect = (nclip_rect * ntrap * 4) > ntriangle_per_loop ? - (ntriangle_per_loop / (4 * ntrap)) : nclip_rect; - - if (!mclip_rect) {/* Maybe too many traps. */ - mclip_rect = 1; - ptrap = traps; - traps_count = ntriangle_per_loop / 4; - traps_not_completed = ntrap - traps_count; - } else { - traps_count = ntrap; - ptrap = traps; - traps_not_completed = 0; - } - -NTRAPS_LOOP_AGAIN: - - glamor_setup_composite_vbo(screen, mclip_rect * traps_count * 4 * vert_stride); - clip_processed = mclip_rect; - - - while (mclip_rect--) { - while (traps_count--) { - int vtx_num; - int i; - float vertices[3*2], source_texcoords[3*2]; - - DEBUGF("In loop of render trapezoid, nclip_rect = %d, mclip_rect = %d, " - "clip_processed = %d, traps_count = %d, traps_not_completed = %d\n", - nclip_rect, mclip_rect, clip_processed, traps_count, traps_not_completed); - - if (_glamor_clip_trapezoid_vertex(ptrap, pbox, clipped_vtx, &vtx_num)) { - for (i = 0; i < vtx_num - 2; i++) { - int clipped_vtx_tmp[3*2]; - - clipped_vtx_tmp[0] = clipped_vtx[0]; - clipped_vtx_tmp[1] = clipped_vtx[1]; - clipped_vtx_tmp[2] = clipped_vtx[(i+1)*2]; - clipped_vtx_tmp[3] = clipped_vtx[(i+1)*2 + 1]; - clipped_vtx_tmp[4] = clipped_vtx[(i+2)*2]; - clipped_vtx_tmp[5] = clipped_vtx[(i+2)*2 + 1]; - glamor_set_normalize_tri_vcoords( - dst_xscale, dst_yscale, clipped_vtx_tmp, - glamor_priv->yInverted, vertices); - DEBUGF("vertices of triangle: (%f X %f), (%f X %f), " - "(%f X %f)\n", vertices[0], vertices[1], - vertices[2], vertices[3], vertices[4], vertices[5]); - - - if (key.source != SHADER_SOURCE_SOLID) { - if (src->transform) { - glamor_set_transformed_normalize_tri_tcoords( - source_pixmap_priv, - src_matrix, src_xscale, src_yscale, - clipped_vtx_tmp, - glamor_priv->yInverted, - source_texcoords); - } else { - glamor_set_normalize_tri_tcoords( - src_xscale, src_yscale, - clipped_vtx_tmp, - glamor_priv->yInverted, - source_texcoords); - } - - DEBUGF("source_texcoords of triangle: (%f X %f), " - "(%f X %f), (%f X %f)\n", - source_texcoords[0], source_texcoords[1], - source_texcoords[2], source_texcoords[3], - source_texcoords[4], source_texcoords[5]); - } - - glamor_emit_composite_triangle(screen, source_texcoords, - NULL, vertices); - } - } - - ptrap++; - } - - if (traps_not_completed) { /* one loop of ntraps not completed */ - mclip_rect = 1; - traps_count = traps_not_completed > (ntriangle_per_loop / 4) ? - (ntriangle_per_loop / 4) : traps_not_completed; - traps_not_completed -= traps_count; - glamor_flush_composite_triangles(screen); - goto NTRAPS_LOOP_AGAIN; - } else { - ptrap = traps; - traps_count = ntrap; - } - - pbox++; - } - - glamor_flush_composite_triangles(screen); - - nclip_rect -= clip_processed; - } - - ret = TRUE; - -TRAPEZOID_RESET_GL: - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); - dispatch->glDisable(GL_BLEND); + ScreenPtr screen = dst->pDrawable->pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + struct shader_key key; + glamor_composite_shader *shader = NULL; + struct blendinfo op_info; + PictFormatShort saved_source_format = 0; + PixmapPtr source_pixmap = NULL; + PixmapPtr dest_pixmap = NULL; + glamor_pixmap_private *source_pixmap_priv = NULL; + glamor_pixmap_private *dest_pixmap_priv = NULL; + glamor_pixmap_private *temp_src_priv = NULL; + int x_temp_src, y_temp_src; + int src_width, src_height; + int source_x_off, source_y_off; + GLfloat src_xscale = 1, src_yscale = 1; + int x_dst, y_dst; + int dest_x_off, dest_y_off; + GLfloat dst_xscale, dst_yscale; + BoxRec bounds; + PicturePtr temp_src = src; + glamor_gl_dispatch *dispatch = NULL; + int vert_stride = 3; + int ntriangle_per_loop; + int nclip_rect; + int mclip_rect; + int clip_processed; + int clipped_vtx[6 * 2]; + RegionRec region; + BoxPtr box = NULL; + BoxPtr pbox = NULL; + int traps_count = 0; + int traps_not_completed = 0; + xTrapezoid *ptrap = NULL; + int nbox; + float src_matrix[9]; + Bool ret = FALSE; + + /* If a mask format wasn't provided, we get to choose, but behavior should + * be as if there was no temporary mask the traps were accumulated into. + */ + if (!mask_format) { + if (dst->polyEdge == PolyEdgeSharp) + mask_format = PictureMatchFormat(screen, 1, PICT_a1); + else + mask_format = PictureMatchFormat(screen, 8, PICT_a8); + for (; ntrap; ntrap--, traps++) + glamor_trapezoids(op, src, dst, mask_format, x_src, + y_src, 1, traps); + return TRUE; + } + + miTrapezoidBounds(ntrap, traps, &bounds); + DEBUGF("The bounds for all traps is: bounds.x1 = %d, bounds.x2 = %d, " + "bounds.y1 = %d, bounds.y2 = %d\n", bounds.x1, bounds.x2, + bounds.y1, bounds.y2); + + /* No area need to render. */ + if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) + return TRUE; + + dest_pixmap = glamor_get_drawable_pixmap(dst->pDrawable); + dest_pixmap_priv = glamor_get_pixmap_private(dest_pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(dest_pixmap_priv) + || dest_pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { + /* Currently. Always fallback to cpu if destination is in CPU memory. */ + ret = FALSE; + DEBUGF("dst pixmap has no FBO.\n"); + goto TRAPEZOID_OUT; + } + + if (src->pDrawable) { + source_pixmap = glamor_get_drawable_pixmap(src->pDrawable); + source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); + temp_src_priv = source_pixmap_priv; + if (source_pixmap_priv + && (source_pixmap_priv->type == GLAMOR_DRM_ONLY + || source_pixmap_priv->type == GLAMOR_TEXTURE_LARGE)) { + ret = FALSE; + goto TRAPEZOID_OUT; + } + } + + x_dst = bounds.x1; + y_dst = bounds.y1; + + src_width = bounds.x2 - bounds.x1; + src_height = bounds.y2 - bounds.y1; + + x_temp_src = x_src + bounds.x1 - (traps[0].left.p1.x >> 16); + y_temp_src = y_src + bounds.y1 - (traps[0].left.p1.y >> 16); + + if ((!src->pDrawable && (src->pSourcePict->type != SourcePictTypeSolidFill)) //1. The Gradient case. + /* 2. Has no fbo but can upload. */ + || (src->pDrawable && !GLAMOR_PIXMAP_PRIV_HAS_FBO(source_pixmap_priv) + && ((src_width * src_height * 4 < + source_pixmap->drawable.width * source_pixmap->drawable.height) + || !glamor_check_fbo_size(glamor_priv, + source_pixmap->drawable.width, + source_pixmap->drawable.height)))) { + + if (!glamor_check_fbo_size(glamor_priv, src_width, src_height)) { + ret = FALSE; + goto TRAPEZOID_OUT; + } + temp_src = glamor_convert_gradient_picture(screen, src, + x_src, y_src, + src_width, src_height); + if (!temp_src) { + temp_src = src; + ret = FALSE; + DEBUGF("Convert gradient picture failed\n"); + goto TRAPEZOID_OUT; + } + temp_src_priv = + glamor_get_pixmap_private((PixmapPtr) temp_src->pDrawable); + x_temp_src = y_temp_src = 0; + } + + x_dst += dst->pDrawable->x; + y_dst += dst->pDrawable->y; + if (temp_src->pDrawable) { + x_temp_src += temp_src->pDrawable->x; + y_temp_src += temp_src->pDrawable->y; + } + + if (!miComputeCompositeRegion(®ion, + temp_src, NULL, dst, + x_temp_src, y_temp_src, + 0, 0, x_dst, y_dst, src_width, src_height)) { + DEBUGF("All the regions are clipped out, do nothing\n"); + goto TRAPEZOID_OUT; + } + + box = REGION_RECTS(®ion); + nbox = REGION_NUM_RECTS(®ion); + pbox = box; + + ret = glamor_composite_choose_shader(op, temp_src, NULL, dst, + temp_src_priv, NULL, dest_pixmap_priv, + &key, &shader, &op_info, + &saved_source_format); + if (ret == FALSE) { + DEBUGF("can not set the shader program for composite\n"); + goto TRAPEZOID_RESET_GL; + } + glamor_set_destination_pixmap_priv_nc(dest_pixmap_priv); + glamor_composite_set_shader_blend(dest_pixmap_priv, &key, shader, &op_info); + glamor_priv->has_source_coords = key.source != SHADER_SOURCE_SOLID; + glamor_priv->has_mask_coords = (key.mask != SHADER_MASK_NONE && + key.mask != SHADER_MASK_SOLID); + + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_get_drawable_deltas(dst->pDrawable, dest_pixmap, + &dest_x_off, &dest_y_off); + + pixmap_priv_get_dest_scale(dest_pixmap_priv, &dst_xscale, &dst_yscale); + + if (glamor_priv->has_source_coords) { + source_pixmap = glamor_get_drawable_pixmap(temp_src->pDrawable); + source_pixmap_priv = glamor_get_pixmap_private(source_pixmap); + glamor_get_drawable_deltas(temp_src->pDrawable, + source_pixmap, &source_x_off, &source_y_off); + pixmap_priv_get_scale(source_pixmap_priv, &src_xscale, &src_yscale); + glamor_picture_get_matrixf(temp_src, src_matrix); + vert_stride += 3; + } + + if (glamor_priv->has_mask_coords) { + DEBUGF("Should never have mask coords here!\n"); + ret = FALSE; + goto TRAPEZOID_RESET_GL; + } + + /* A trapezoid clip with a rectangle will at most generate a hexagon, + which can be devided into 4 triangles to render. */ + ntriangle_per_loop = + (vert_stride * nbox * ntrap * 4) > + GLAMOR_COMPOSITE_VBO_VERT_CNT ? (GLAMOR_COMPOSITE_VBO_VERT_CNT / + vert_stride) : nbox * ntrap * 4; + ntriangle_per_loop = (ntriangle_per_loop / 4) * 4; + + nclip_rect = nbox; + while (nclip_rect) { + mclip_rect = (nclip_rect * ntrap * 4) > ntriangle_per_loop ? + (ntriangle_per_loop / (4 * ntrap)) : nclip_rect; + + if (!mclip_rect) { /* Maybe too many traps. */ + mclip_rect = 1; + ptrap = traps; + traps_count = ntriangle_per_loop / 4; + traps_not_completed = ntrap - traps_count; + } + else { + traps_count = ntrap; + ptrap = traps; + traps_not_completed = 0; + } + + NTRAPS_LOOP_AGAIN: + + glamor_setup_composite_vbo(screen, + mclip_rect * traps_count * 4 * vert_stride); + clip_processed = mclip_rect; + + while (mclip_rect--) { + while (traps_count--) { + int vtx_num; + int i; + float vertices[3 * 2], source_texcoords[3 * 2]; + + DEBUGF + ("In loop of render trapezoid, nclip_rect = %d, mclip_rect = %d, " + "clip_processed = %d, traps_count = %d, traps_not_completed = %d\n", + nclip_rect, mclip_rect, clip_processed, traps_count, + traps_not_completed); + + if (_glamor_clip_trapezoid_vertex + (ptrap, pbox, clipped_vtx, &vtx_num)) { + for (i = 0; i < vtx_num - 2; i++) { + int clipped_vtx_tmp[3 * 2]; + + clipped_vtx_tmp[0] = clipped_vtx[0]; + clipped_vtx_tmp[1] = clipped_vtx[1]; + clipped_vtx_tmp[2] = clipped_vtx[(i + 1) * 2]; + clipped_vtx_tmp[3] = clipped_vtx[(i + 1) * 2 + 1]; + clipped_vtx_tmp[4] = clipped_vtx[(i + 2) * 2]; + clipped_vtx_tmp[5] = clipped_vtx[(i + 2) * 2 + 1]; + glamor_set_normalize_tri_vcoords(dst_xscale, dst_yscale, + clipped_vtx_tmp, + glamor_priv->yInverted, + vertices); + DEBUGF("vertices of triangle: (%f X %f), (%f X %f), " + "(%f X %f)\n", vertices[0], vertices[1], + vertices[2], vertices[3], vertices[4], + vertices[5]); + + if (key.source != SHADER_SOURCE_SOLID) { + if (src->transform) { + glamor_set_transformed_normalize_tri_tcoords + (source_pixmap_priv, src_matrix, src_xscale, + src_yscale, clipped_vtx_tmp, + glamor_priv->yInverted, source_texcoords); + } + else { + glamor_set_normalize_tri_tcoords(src_xscale, + src_yscale, + clipped_vtx_tmp, + glamor_priv-> + yInverted, + source_texcoords); + } + + DEBUGF("source_texcoords of triangle: (%f X %f), " + "(%f X %f), (%f X %f)\n", + source_texcoords[0], source_texcoords[1], + source_texcoords[2], source_texcoords[3], + source_texcoords[4], source_texcoords[5]); + } + + glamor_emit_composite_triangle(screen, source_texcoords, + NULL, vertices); + } + } + + ptrap++; + } + + if (traps_not_completed) { /* one loop of ntraps not completed */ + mclip_rect = 1; + traps_count = traps_not_completed > (ntriangle_per_loop / 4) ? + (ntriangle_per_loop / 4) : traps_not_completed; + traps_not_completed -= traps_count; + glamor_flush_composite_triangles(screen); + goto NTRAPS_LOOP_AGAIN; + } + else { + ptrap = traps; + traps_count = ntrap; + } + + pbox++; + } + + glamor_flush_composite_triangles(screen); + + nclip_rect -= clip_processed; + } + + ret = TRUE; + + TRAPEZOID_RESET_GL: + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_MASK); + dispatch->glDisable(GL_BLEND); #ifndef GLAMOR_GLES2 - dispatch->glActiveTexture(GL_TEXTURE0); - dispatch->glDisable(GL_TEXTURE_2D); - dispatch->glActiveTexture(GL_TEXTURE1); - dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glDisable(GL_TEXTURE_2D); + dispatch->glActiveTexture(GL_TEXTURE1); + dispatch->glDisable(GL_TEXTURE_2D); #endif - dispatch->glUseProgram(0); - -TRAPEZOID_OUT: - if (box) { - REGION_UNINIT(dst->pDrawable->pScreen, ®ion); - } - - if (temp_src != src) { - FreePicture(temp_src, 0); - } else { - if (saved_source_format) { - src->format = saved_source_format; - } - } - - if (dispatch) { - glamor_put_dispatch(glamor_priv); - } - - return ret; + dispatch->glUseProgram(0); + + TRAPEZOID_OUT: + if (box) { + REGION_UNINIT(dst->pDrawable->pScreen, ®ion); + } + + if (temp_src != src) { + FreePicture(temp_src, 0); + } + else { + if (saved_source_format) { + src->format = saved_source_format; + } + } + + if (dispatch) { + glamor_put_dispatch(glamor_priv); + } + + return ret; } void glamor_init_trapezoid_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - GLint fs_prog, vs_prog; - - const char *trapezoid_vs = - GLAMOR_DEFAULT_PRECISION - "attribute vec4 v_position;\n" - "attribute vec2 v_texcoord;\n" - /* v_top_bottom, v_left_param and v_right_param contain the - constant value for all the vertex of one rect. Using uniform - is more suitable but we need to reset the uniform variables - for every rect rendering and can not use the vbo, which causes - performance loss. So we set these attributes to same value - for every vertex of one rect and so it is also a constant in FS */ - "attribute vec2 v_top_bottom;\n" - "attribute vec4 v_left_param;\n" - "attribute vec4 v_right_param;\n" - "\n" - "varying vec2 source_texture;\n" - "varying float trap_top;\n" - "varying float trap_bottom;\n" - "varying float trap_left_x;\n" - "varying float trap_left_y;\n" - "varying float trap_left_slope;\n" - "varying float trap_left_vertical_f;\n" - "varying float trap_right_x;\n" - "varying float trap_right_y;\n" - "varying float trap_right_slope;\n" - "varying float trap_right_vertical_f;\n" - "\n" - "void main()\n" - "{\n" - " gl_Position = v_position;\n" - " source_texture = v_texcoord.xy;\n" - " trap_top = v_top_bottom.x;\n" - " trap_bottom = v_top_bottom.y;\n" - " \n" - " trap_left_x = v_left_param.x;\n" - " trap_left_y = v_left_param.y;\n" - " trap_left_slope = v_left_param.z;\n" - " trap_left_vertical_f = v_left_param.w;\n" - " \n" - " trap_right_x = v_right_param.x;\n" - " trap_right_y = v_right_param.y;\n" - " trap_right_slope = v_right_param.z;\n" - " trap_right_vertical_f = v_right_param.w;\n" - "}\n"; - - /* - * Because some GL fill function do not support the MultSample - * anti-alias, we need to do the MSAA here. This manner like - * pixman, will caculate the value of area in trapezoid dividing - * the totol area for each pixel, as follow: - | - ----+------------------------------------------------------> - | - | ------------- - | / \ - | / \ - | / \ - | / +----------------+ - | / |.....\ | - | / |......\ | - | / |.......\ | - | / |........\ | - | /-------------------+---------\ | - | | | - | | | - | +----------------+ - | - \|/ - - */ - const char *trapezoid_fs = - GLAMOR_DEFAULT_PRECISION - "varying vec2 source_texture; \n" - "varying float trap_top; \n" - "varying float trap_bottom; \n" - "varying float trap_left_x; \n" - "varying float trap_left_y; \n" - "varying float trap_left_slope; \n" - "varying float trap_left_vertical_f; \n" - "varying float trap_right_x; \n" - "varying float trap_right_y; \n" - "varying float trap_right_slope; \n" - "varying float trap_right_vertical_f; \n" - "float x_per_pix = 1.0;" - "float y_per_pix = 1.0;" - "\n" - "float get_alpha_val() \n" - "{ \n" - " float x_up_cut_left; \n" - " float x_bottom_cut_left; \n" - " float x_up_cut_right; \n" - " float x_bottom_cut_right; \n" - " bool trap_left_vertical;\n" - " bool trap_right_vertical;\n" - " if (abs(trap_left_vertical_f - 1.0) <= 0.0001)\n" - " trap_left_vertical = true;\n" - " else\n" - " trap_left_vertical = false;\n" - " if (abs(trap_right_vertical_f - 1.0) <= 0.0001)\n" - " trap_right_vertical = true;\n" - " else\n" - " trap_right_vertical = false;\n" - " \n" - " if(trap_left_vertical == true) { \n" - " x_up_cut_left = trap_left_x; \n" - " x_bottom_cut_left = trap_left_x; \n" - " } else { \n" - " x_up_cut_left = trap_left_x \n" - " + (source_texture.y - y_per_pix/2.0 - trap_left_y) \n" - " / trap_left_slope; \n" - " x_bottom_cut_left = trap_left_x \n" - " + (source_texture.y + y_per_pix/2.0 - trap_left_y) \n" - " / trap_left_slope; \n" - " } \n" - " \n" - " if(trap_right_vertical == true) { \n" - " x_up_cut_right = trap_right_x; \n" - " x_bottom_cut_right = trap_right_x; \n" - " } else { \n" - " x_up_cut_right = trap_right_x \n" - " + (source_texture.y - y_per_pix/2.0 - trap_right_y) \n" - " / trap_right_slope; \n" - " x_bottom_cut_right = trap_right_x \n" - " + (source_texture.y + y_per_pix/2.0 - trap_right_y) \n" - " / trap_right_slope; \n" - " } \n" - " \n" - " if((x_up_cut_left <= source_texture.x - x_per_pix/2.0) && \n" - " (x_bottom_cut_left <= source_texture.x - x_per_pix/2.0) && \n" - " (x_up_cut_right >= source_texture.x + x_per_pix/2.0) && \n" - " (x_bottom_cut_right >= source_texture.x + x_per_pix/2.0) && \n" - " (trap_top <= source_texture.y - y_per_pix/2.0) && \n" - " (trap_bottom >= source_texture.y + y_per_pix/2.0)) { \n" - // The complete inside case. - " return 1.0; \n" - " } else if((trap_top > source_texture.y + y_per_pix/2.0) || \n" - " (trap_bottom < source_texture.y - y_per_pix/2.0)) { \n" - // The complete outside. Above the top or Below the bottom. - " return 0.0; \n" - " } else { \n" - " if((x_up_cut_right < source_texture.x - x_per_pix/2.0 && \n" - " x_bottom_cut_right < source_texture.x - x_per_pix/2.0) \n" - " || (x_up_cut_left > source_texture.x + x_per_pix/2.0 && \n" - " x_bottom_cut_left > source_texture.x + x_per_pix/2.0)) { \n" - // The complete outside. At Left or Right of the trapezoide. - " return 0.0; \n" - " } \n" - " } \n" - // Get here, the pix is partly inside the trapezoid. - " { \n" - " float percent = 0.0; \n" - " float up = (source_texture.y - y_per_pix/2.0) >= trap_top ? \n" - " (source_texture.y - y_per_pix/2.0) : trap_top; \n" - " float bottom = (source_texture.y + y_per_pix/2.0) <= trap_bottom ? \n" - " (source_texture.y + y_per_pix/2.0) : trap_bottom; \n" - " float left = source_texture.x - x_per_pix/2.0; \n" - " float right = source_texture.x + x_per_pix/2.0; \n" - " \n" - " percent = (bottom - up) / y_per_pix; \n" - " \n" - " if(trap_left_vertical == true) { \n" - " if(trap_left_x > source_texture.x - x_per_pix/2.0 && \n" - " trap_left_x < source_texture.x + x_per_pix/2.0) \n" - " left = trap_left_x; \n" - " } \n" - " if(trap_right_vertical == true) { \n" - " if(trap_right_x > source_texture.x - x_per_pix/2.0 && \n" - " trap_right_x < source_texture.x + x_per_pix/2.0) \n" - " right = trap_right_x; \n" - " } \n" - " if((up >= bottom) || (left >= right)) \n" - " return 0.0; \n" - " \n" - " percent = percent * ((right - left)/x_per_pix); \n" - " if(trap_left_vertical == true && trap_right_vertical == true) \n" - " return percent; \n" - " \n" - " if(trap_left_vertical != true) { \n" - " float area; \n" - // the slope should never be 0.0 here - " float up_x = trap_left_x + (up - trap_left_y)/trap_left_slope; \n" - " float bottom_x = trap_left_x + (bottom - trap_left_y)/trap_left_slope; \n" - " if(trap_left_slope < 0.0 && up_x > left) { \n" - /* case 1 - | - ----+-------------------------------------> - | / - | / - | +---/--------+ - | | /.........| - | | /..........| - | |/...........| - | /............| - | /|............| - | +------------+ - | - \|/ - */ - " float left_y = trap_left_y + trap_left_slope*(left - trap_left_x); \n" - " if((up_x > left) && (left_y > up)) { \n" - " area = 0.5 * (up_x - left) * (left_y - up); \n" - " if(up_x > right) { \n" - " float right_y = trap_left_y \n" - " + trap_left_slope*(right - trap_left_x); \n" - " area = area - 0.5 * (up_x - right) * (right_y - up); \n" - " } \n" - " if(left_y > bottom) { \n" - " area = area - 0.5 * (bottom_x - left) * (left_y - bottom); \n" - " } \n" - " } else { \n" - " area = 0.0; \n" - " } \n" - " percent = percent * (1.0 - (area/((right-left)*(bottom-up)))); \n" - " } else if(trap_left_slope > 0.0 && bottom_x > left) { \n" - /* case 2 - | - ----+-------------------------------------> - | \ - | \ - | +\-----------+ - | | \..........| - | | \.........| - | | \........| - | | \.......| - | | \......| - | +------\-----+ - | \ - | \ - \|/ - */ - " float right_y = trap_left_y + trap_left_slope*(right - trap_left_x); \n" - " if((up_x < right) && (right_y > up)) { \n" - " area = 0.5 * (right - up_x) * (right_y - up); \n" - " if(up_x < left) { \n" - " float left_y = trap_left_y \n" - " + trap_left_slope*(left - trap_left_x); \n" - " area = area - 0.5 * (left - up_x) * (left_y - up); \n" - " } \n" - " if(right_y > bottom) { \n" - " area = area - 0.5 * (right - bottom_x) * (right_y - bottom); \n" - " } \n" - " } else { \n" - " area = 0.0; \n" - " } \n" - " percent = percent * (area/((right-left)*(bottom-up))); \n" - " } \n" - " } \n" - " \n" - " if(trap_right_vertical != true) { \n" - " float area; \n" - // the slope should never be 0.0 here - " float up_x = trap_right_x + (up - trap_right_y)/trap_right_slope; \n" - " float bottom_x = trap_right_x + (bottom - trap_right_y)/trap_right_slope; \n" - " if(trap_right_slope < 0.0 && bottom_x < right) { \n" - /* case 3 - | - ----+-------------------------------------> - | / - | +--------/---+ - | |......./ | - | |....../ | - | |...../ | - | |..../ | - | |.../ | - | +--/---------+ - | / - | - \|/ - */ - " float left_y = trap_right_y + trap_right_slope*(left - trap_right_x); \n" - " if((up_x > left) && (left_y > up)) { \n" - " area = 0.5 * (up_x - left) * (left_y - up); \n" - " if(up_x > right) { \n" - " float right_y = trap_right_y \n" - " + trap_right_slope*(right - trap_right_x); \n" - " area = area - 0.5 * (up_x - right) * (right_y - up); \n" - " } \n" - " if(left_y > bottom) { \n" - " area = area - 0.5 * (bottom_x - left) * (left_y - bottom); \n" - " } \n" - " } else { \n" - " area = 0.0; \n" - " } \n" - " percent = percent * (area/((right-left)*(bottom-up))); \n" - " } else if(trap_right_slope > 0.0 && up_x < right) { \n" - /* case 4 - | - ----+-------------------------------------> - | \ - | +--------\---+ - | |.........\ | - | |..........\ | - | |...........\| - | |............\ - | |............|\ - | +------------+ \ - | \ - | - \|/ - */ - " float right_y = trap_right_y + trap_right_slope*(right - trap_right_x); \n" - " if((up_x < right) && (right_y > up)) { \n" - " area = 0.5 * (right - up_x) * (right_y - up); \n" - " if(up_x < left) { \n" - " float left_y = trap_right_y \n" - " + trap_right_slope*(left - trap_right_x); \n" - " area = area - 0.5 * (left - up_x) * (left_y - up); \n" - " } \n" - " if(right_y > bottom) { \n" - " area = area - 0.5 * (right - bottom_x) * (right_y - bottom); \n" - " } \n" - " } else { \n" - " area = 0.0; \n" - " } \n" - " percent = percent * (1.0 - (area/((right-left)*(bottom-up)))); \n" - " } \n" - " } \n" - " \n" - " return percent; \n" - " } \n" - "} \n" - "\n" - "void main() \n" - "{ \n" - " float alpha_val = get_alpha_val(); \n" - " gl_FragColor = vec4(0.0, 0.0, 0.0, alpha_val); \n" - "}\n"; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - - glamor_priv->trapezoid_prog = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, - GL_VERTEX_SHADER, trapezoid_vs); - fs_prog = glamor_compile_glsl_prog(dispatch, - GL_FRAGMENT_SHADER, trapezoid_fs); - - dispatch->glAttachShader(glamor_priv->trapezoid_prog, vs_prog); - dispatch->glAttachShader(glamor_priv->trapezoid_prog, fs_prog); - - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_POS, "v_positionsition"); - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_SOURCE, "v_texcoord"); - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_TOP_BOTTOM, "v_top_bottom"); - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_LEFT_PARAM, "v_left_param"); - dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, - GLAMOR_VERTEX_RIGHT_PARAM, "v_right_param"); - - glamor_link_glsl_prog(dispatch, glamor_priv->trapezoid_prog); - - dispatch->glUseProgram(0); - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + GLint fs_prog, vs_prog; + + const char *trapezoid_vs = + GLAMOR_DEFAULT_PRECISION + "attribute vec4 v_position;\n" + "attribute vec2 v_texcoord;\n" + /* v_top_bottom, v_left_param and v_right_param contain the + constant value for all the vertex of one rect. Using uniform + is more suitable but we need to reset the uniform variables + for every rect rendering and can not use the vbo, which causes + performance loss. So we set these attributes to same value + for every vertex of one rect and so it is also a constant in FS */ + "attribute vec2 v_top_bottom;\n" + "attribute vec4 v_left_param;\n" + "attribute vec4 v_right_param;\n" + "\n" + "varying vec2 source_texture;\n" + "varying float trap_top;\n" + "varying float trap_bottom;\n" + "varying float trap_left_x;\n" + "varying float trap_left_y;\n" + "varying float trap_left_slope;\n" + "varying float trap_left_vertical_f;\n" + "varying float trap_right_x;\n" + "varying float trap_right_y;\n" + "varying float trap_right_slope;\n" + "varying float trap_right_vertical_f;\n" + "\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + " source_texture = v_texcoord.xy;\n" + " trap_top = v_top_bottom.x;\n" + " trap_bottom = v_top_bottom.y;\n" + " \n" + " trap_left_x = v_left_param.x;\n" + " trap_left_y = v_left_param.y;\n" + " trap_left_slope = v_left_param.z;\n" + " trap_left_vertical_f = v_left_param.w;\n" + " \n" + " trap_right_x = v_right_param.x;\n" + " trap_right_y = v_right_param.y;\n" + " trap_right_slope = v_right_param.z;\n" + " trap_right_vertical_f = v_right_param.w;\n" + "}\n"; + + /* + * Because some GL fill function do not support the MultSample + * anti-alias, we need to do the MSAA here. This manner like + * pixman, will caculate the value of area in trapezoid dividing + * the totol area for each pixel, as follow: + | + ----+------------------------------------------------------> + | + | ------------- + | / \ + | / \ + | / \ + | / +----------------+ + | / |.....\ | + | / |......\ | + | / |.......\ | + | / |........\ | + | /-------------------+---------\ | + | | | + | | | + | +----------------+ + | + \|/ + + */ + const char *trapezoid_fs = + GLAMOR_DEFAULT_PRECISION + "varying vec2 source_texture; \n" + "varying float trap_top; \n" + "varying float trap_bottom; \n" + "varying float trap_left_x; \n" + "varying float trap_left_y; \n" + "varying float trap_left_slope; \n" + "varying float trap_left_vertical_f; \n" + "varying float trap_right_x; \n" + "varying float trap_right_y; \n" + "varying float trap_right_slope; \n" + "varying float trap_right_vertical_f; \n" + "float x_per_pix = 1.0;" + "float y_per_pix = 1.0;" + "\n" + "float get_alpha_val() \n" + "{ \n" + " float x_up_cut_left; \n" + " float x_bottom_cut_left; \n" + " float x_up_cut_right; \n" + " float x_bottom_cut_right; \n" + " bool trap_left_vertical;\n" + " bool trap_right_vertical;\n" + " if (abs(trap_left_vertical_f - 1.0) <= 0.0001)\n" + " trap_left_vertical = true;\n" + " else\n" + " trap_left_vertical = false;\n" + " if (abs(trap_right_vertical_f - 1.0) <= 0.0001)\n" + " trap_right_vertical = true;\n" + " else\n" + " trap_right_vertical = false;\n" + " \n" + " if(trap_left_vertical == true) { \n" + " x_up_cut_left = trap_left_x; \n" + " x_bottom_cut_left = trap_left_x; \n" + " } else { \n" + " x_up_cut_left = trap_left_x \n" + " + (source_texture.y - y_per_pix/2.0 - trap_left_y) \n" + " / trap_left_slope; \n" + " x_bottom_cut_left = trap_left_x \n" + " + (source_texture.y + y_per_pix/2.0 - trap_left_y) \n" + " / trap_left_slope; \n" + " } \n" + " \n" + " if(trap_right_vertical == true) { \n" + " x_up_cut_right = trap_right_x; \n" + " x_bottom_cut_right = trap_right_x; \n" + " } else { \n" + " x_up_cut_right = trap_right_x \n" + " + (source_texture.y - y_per_pix/2.0 - trap_right_y) \n" + " / trap_right_slope; \n" + " x_bottom_cut_right = trap_right_x \n" + " + (source_texture.y + y_per_pix/2.0 - trap_right_y) \n" + " / trap_right_slope; \n" + " } \n" + " \n" + " if((x_up_cut_left <= source_texture.x - x_per_pix/2.0) && \n" + " (x_bottom_cut_left <= source_texture.x - x_per_pix/2.0) && \n" + " (x_up_cut_right >= source_texture.x + x_per_pix/2.0) && \n" + " (x_bottom_cut_right >= source_texture.x + x_per_pix/2.0) && \n" + " (trap_top <= source_texture.y - y_per_pix/2.0) && \n" + " (trap_bottom >= source_texture.y + y_per_pix/2.0)) { \n" + // The complete inside case. + " return 1.0; \n" + " } else if((trap_top > source_texture.y + y_per_pix/2.0) || \n" + " (trap_bottom < source_texture.y - y_per_pix/2.0)) { \n" + // The complete outside. Above the top or Below the bottom. + " return 0.0; \n" + " } else { \n" + " if((x_up_cut_right < source_texture.x - x_per_pix/2.0 && \n" + " x_bottom_cut_right < source_texture.x - x_per_pix/2.0) \n" + " || (x_up_cut_left > source_texture.x + x_per_pix/2.0 && \n" + " x_bottom_cut_left > source_texture.x + x_per_pix/2.0)) { \n" + // The complete outside. At Left or Right of the trapezoide. + " return 0.0; \n" + " } \n" + " } \n" + // Get here, the pix is partly inside the trapezoid. + " { \n" + " float percent = 0.0; \n" + " float up = (source_texture.y - y_per_pix/2.0) >= trap_top ? \n" + " (source_texture.y - y_per_pix/2.0) : trap_top; \n" + " float bottom = (source_texture.y + y_per_pix/2.0) <= trap_bottom ? \n" + " (source_texture.y + y_per_pix/2.0) : trap_bottom; \n" + " float left = source_texture.x - x_per_pix/2.0; \n" + " float right = source_texture.x + x_per_pix/2.0; \n" + " \n" + " percent = (bottom - up) / y_per_pix; \n" + " \n" + " if(trap_left_vertical == true) { \n" + " if(trap_left_x > source_texture.x - x_per_pix/2.0 && \n" + " trap_left_x < source_texture.x + x_per_pix/2.0) \n" + " left = trap_left_x; \n" + " } \n" + " if(trap_right_vertical == true) { \n" + " if(trap_right_x > source_texture.x - x_per_pix/2.0 && \n" + " trap_right_x < source_texture.x + x_per_pix/2.0) \n" + " right = trap_right_x; \n" + " } \n" + " if((up >= bottom) || (left >= right)) \n" + " return 0.0; \n" + " \n" + " percent = percent * ((right - left)/x_per_pix); \n" + " if(trap_left_vertical == true && trap_right_vertical == true) \n" + " return percent; \n" + " \n" + " if(trap_left_vertical != true) { \n" + " float area; \n" + // the slope should never be 0.0 here + " float up_x = trap_left_x + (up - trap_left_y)/trap_left_slope; \n" + " float bottom_x = trap_left_x + (bottom - trap_left_y)/trap_left_slope; \n" + " if(trap_left_slope < 0.0 && up_x > left) { \n" + /* case 1 + | + ----+-------------------------------------> + | / + | / + | +---/--------+ + | | /.........| + | | /..........| + | |/...........| + | /............| + | /|............| + | +------------+ + | + \|/ + */ + " float left_y = trap_left_y + trap_left_slope*(left - trap_left_x); \n" + " if((up_x > left) && (left_y > up)) { \n" + " area = 0.5 * (up_x - left) * (left_y - up); \n" + " if(up_x > right) { \n" + " float right_y = trap_left_y \n" + " + trap_left_slope*(right - trap_left_x); \n" + " area = area - 0.5 * (up_x - right) * (right_y - up); \n" + " } \n" + " if(left_y > bottom) { \n" + " area = area - 0.5 * (bottom_x - left) * (left_y - bottom); \n" + " } \n" + " } else { \n" + " area = 0.0; \n" + " } \n" + " percent = percent * (1.0 - (area/((right-left)*(bottom-up)))); \n" + " } else if(trap_left_slope > 0.0 && bottom_x > left) { \n" + /* case 2 + | + ----+-------------------------------------> + | \ + | \ + | +\-----------+ + | | \..........| + | | \.........| + | | \........| + | | \.......| + | | \......| + | +------\-----+ + | \ + | \ + \|/ + */ + " float right_y = trap_left_y + trap_left_slope*(right - trap_left_x); \n" + " if((up_x < right) && (right_y > up)) { \n" + " area = 0.5 * (right - up_x) * (right_y - up); \n" + " if(up_x < left) { \n" + " float left_y = trap_left_y \n" + " + trap_left_slope*(left - trap_left_x); \n" + " area = area - 0.5 * (left - up_x) * (left_y - up); \n" + " } \n" + " if(right_y > bottom) { \n" + " area = area - 0.5 * (right - bottom_x) * (right_y - bottom); \n" + " } \n" + " } else { \n" + " area = 0.0; \n" + " } \n" + " percent = percent * (area/((right-left)*(bottom-up))); \n" + " } \n" + " } \n" + " \n" + " if(trap_right_vertical != true) { \n" + " float area; \n" + // the slope should never be 0.0 here + " float up_x = trap_right_x + (up - trap_right_y)/trap_right_slope; \n" + " float bottom_x = trap_right_x + (bottom - trap_right_y)/trap_right_slope; \n" + " if(trap_right_slope < 0.0 && bottom_x < right) { \n" + /* case 3 + | + ----+-------------------------------------> + | / + | +--------/---+ + | |......./ | + | |....../ | + | |...../ | + | |..../ | + | |.../ | + | +--/---------+ + | / + | + \|/ + */ + " float left_y = trap_right_y + trap_right_slope*(left - trap_right_x); \n" + " if((up_x > left) && (left_y > up)) { \n" + " area = 0.5 * (up_x - left) * (left_y - up); \n" + " if(up_x > right) { \n" + " float right_y = trap_right_y \n" + " + trap_right_slope*(right - trap_right_x); \n" + " area = area - 0.5 * (up_x - right) * (right_y - up); \n" + " } \n" + " if(left_y > bottom) { \n" + " area = area - 0.5 * (bottom_x - left) * (left_y - bottom); \n" + " } \n" + " } else { \n" + " area = 0.0; \n" + " } \n" + " percent = percent * (area/((right-left)*(bottom-up))); \n" + " } else if(trap_right_slope > 0.0 && up_x < right) { \n" + /* case 4 + | + ----+-------------------------------------> + | \ + | +--------\---+ + | |.........\ | + | |..........\ | + | |...........\| + | |............\ + | |............|\ + | +------------+ \ + | \ + | + \|/ + */ + " float right_y = trap_right_y + trap_right_slope*(right - trap_right_x); \n" + " if((up_x < right) && (right_y > up)) { \n" + " area = 0.5 * (right - up_x) * (right_y - up); \n" + " if(up_x < left) { \n" + " float left_y = trap_right_y \n" + " + trap_right_slope*(left - trap_right_x); \n" + " area = area - 0.5 * (left - up_x) * (left_y - up); \n" + " } \n" + " if(right_y > bottom) { \n" + " area = area - 0.5 * (right - bottom_x) * (right_y - bottom); \n" + " } \n" + " } else { \n" + " area = 0.0; \n" + " } \n" + " percent = percent * (1.0 - (area/((right-left)*(bottom-up)))); \n" + " } \n" + " } \n" + " \n" + " return percent; \n" + " } \n" + "} \n" + "\n" + "void main() \n" + "{ \n" + " float alpha_val = get_alpha_val(); \n" + " gl_FragColor = vec4(0.0, 0.0, 0.0, alpha_val); \n" + "}\n"; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_priv->trapezoid_prog = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, + GL_VERTEX_SHADER, trapezoid_vs); + fs_prog = glamor_compile_glsl_prog(dispatch, + GL_FRAGMENT_SHADER, trapezoid_fs); + + dispatch->glAttachShader(glamor_priv->trapezoid_prog, vs_prog); + dispatch->glAttachShader(glamor_priv->trapezoid_prog, fs_prog); + + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_POS, "v_positionsition"); + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_SOURCE, "v_texcoord"); + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_TOP_BOTTOM, "v_top_bottom"); + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_LEFT_PARAM, "v_left_param"); + dispatch->glBindAttribLocation(glamor_priv->trapezoid_prog, + GLAMOR_VERTEX_RIGHT_PARAM, "v_right_param"); + + glamor_link_glsl_prog(dispatch, glamor_priv->trapezoid_prog); + + dispatch->glUseProgram(0); + + glamor_put_dispatch(glamor_priv); } void glamor_fini_trapezoid_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->trapezoid_prog); - glamor_put_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->trapezoid_prog); + glamor_put_dispatch(glamor_priv); } static Bool _glamor_generate_trapezoid_with_shader(ScreenPtr screen, PicturePtr picture, - xTrapezoid * traps, int ntrap, BoxRec *bounds) + xTrapezoid *traps, int ntrap, + BoxRec *bounds) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - glamor_pixmap_private *pixmap_priv; - PixmapPtr pixmap = NULL; - GLint trapezoid_prog; - GLfloat xscale, yscale; - float left_slope, right_slope; - xTrapezoid *ptrap; - BoxRec one_trap_bound; - int nrect_max; - int i, j; - float *vertices; - float params[4]; - - glamor_priv = glamor_get_screen_private(screen); - trapezoid_prog = glamor_priv->trapezoid_prog; - - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - pixmap_priv = glamor_get_pixmap_private(pixmap); - - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv) - || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { /* should always have here. */ - DEBUGF("GLAMOR_PIXMAP_PRIV_HAS_FBO check failed, fallback\n"); - return FALSE; - } - - /* First, clear all to zero */ - if (!glamor_solid(pixmap, 0, 0, pixmap_priv->base.pixmap->drawable.width, - pixmap_priv->base.pixmap->drawable.height, - GXclear, 0xFFFFFFFF, 0)) { - DEBUGF("glamor_solid failed, fallback\n"); - return FALSE; - } - - dispatch = glamor_get_dispatch(glamor_priv); - - glamor_set_destination_pixmap_priv_nc(pixmap_priv); - - pixmap_priv_get_dest_scale(pixmap_priv, (&xscale), (&yscale)); - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - - /* Now draw the Trapezoid mask. */ - dispatch->glUseProgram(trapezoid_prog); - - dispatch->glEnable(GL_BLEND); - dispatch->glBlendFunc(GL_ONE, GL_ONE); - - nrect_max = GLAMOR_COMPOSITE_VBO_VERT_CNT / (4 * GLAMOR_VERTEX_RIGHT_PARAM); - - for (i = 0; i < ntrap;) { - int mrect; - int stride; - - mrect = (ntrap - i) > nrect_max ? nrect_max : (ntrap - i); - glamor_setup_composite_vbo_for_trapezoid(screen, 4 * mrect); - stride = glamor_priv->vb_stride / sizeof(float); - - for (j = 0; j < mrect; j++) { - ptrap = traps + i + j; - - DEBUGF("--- The parameter of xTrapezoid is:\ntop: %d 0x%x\tbottom: %d 0x%x\n" - "left: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n" - "right: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n", - xFixedToInt(ptrap->top), ptrap->top, - xFixedToInt(ptrap->bottom), ptrap->bottom, - xFixedToInt(ptrap->left.p1.x), ptrap->left.p1.x, - xFixedToInt(ptrap->left.p1.y), ptrap->left.p1.y, - xFixedToInt(ptrap->left.p2.x), ptrap->left.p2.x, - xFixedToInt(ptrap->left.p2.y), ptrap->left.p2.y, - xFixedToInt(ptrap->right.p1.x), ptrap->right.p1.x, - xFixedToInt(ptrap->right.p1.y), ptrap->right.p1.y, - xFixedToInt(ptrap->right.p2.x), ptrap->right.p2.x, - xFixedToInt(ptrap->right.p2.y), ptrap->right.p2.y); - - miTrapezoidBounds(1, ptrap, &one_trap_bound); - - vertices = (float*)(glamor_priv->vb + glamor_priv->vbo_offset) + 2; - glamor_set_tcoords_ext((pixmap_priv->base.pixmap->drawable.width), - (pixmap_priv->base.pixmap->drawable.height), - (one_trap_bound.x1), - (one_trap_bound.y1), - (one_trap_bound.x2), - (one_trap_bound.y2), - glamor_priv->yInverted, vertices, stride); - DEBUGF("tex_vertices --> leftup : %f X %f, rightup: %f X %f," - "rightbottom: %f X %f, leftbottom : %f X %f\n", - vertices[0], vertices[1], - vertices[1*stride], vertices[1*stride + 1], - vertices[2*stride], vertices[2*stride + 1], - vertices[3*stride], vertices[3*stride + 1]); - - /* Need to rebase. */ - one_trap_bound.x1 -= bounds->x1; - one_trap_bound.x2 -= bounds->x1; - one_trap_bound.y1 -= bounds->y1; - one_trap_bound.y2 -= bounds->y1; - - vertices -= 2; - - glamor_set_normalize_vcoords_ext(pixmap_priv, xscale, yscale, - one_trap_bound.x1, one_trap_bound.y1, - one_trap_bound.x2, one_trap_bound.y2, - glamor_priv->yInverted, vertices, stride); - DEBUGF("vertices --> leftup : %f X %f, rightup: %f X %f," - "rightbottom: %f X %f, leftbottom : %f X %f\n", - vertices[0], vertices[1], - vertices[1*stride], vertices[1*stride + 1], - vertices[2*stride], vertices[2*stride + 1], - vertices[3*stride], vertices[3*stride + 1]); - vertices += 4; - - /* Set the top and bottom. */ - params[0] = ((float)ptrap->top) / 65536; - params[1] = ((float)ptrap->bottom) / 65536; - glamor_set_const_ext(params, 2, vertices, 4, stride); - vertices += 2; - - /* Set the left params. */ - params[0] = ((float)ptrap->left.p1.x) / 65536; - params[1] = ((float)ptrap->left.p1.y) / 65536; - - if (ptrap->left.p1.x == ptrap->left.p2.x) { - left_slope = 0.0; - params[3] = 1.0; - } else { - left_slope = ((float)(ptrap->left.p1.y - ptrap->left.p2.y)) - / ((float)(ptrap->left.p1.x - ptrap->left.p2.x)); - params[3] = 0.0; - } - params[2] = left_slope; - glamor_set_const_ext(params, 4, vertices, 4, stride); - vertices += 4; - - /* Set the left params. */ - params[0] = ((float)ptrap->right.p1.x) / 65536; - params[1] = ((float)ptrap->right.p1.y) / 65536; - - if (ptrap->right.p1.x == ptrap->right.p2.x) { - right_slope = 0.0; - params[3] = 1.0; - } else { - right_slope = ((float)(ptrap->right.p1.y - ptrap->right.p2.y)) - / ((float)(ptrap->right.p1.x - ptrap->right.p2.x)); - params[3] = 0.0; - } - params[2] = right_slope; - glamor_set_const_ext(params, 4, vertices, 4, stride); - - DEBUGF("trap_top = %f, trap_bottom = %f, " - "trap_left_x = %f, trap_left_y = %f, left_slope = %f, " - "trap_right_x = %f, trap_right_y = %f, right_slope = %f\n", - ((float)ptrap->top) / 65536, ((float)ptrap->bottom) / 65536, - ((float)ptrap->left.p1.x) / 65536, ((float)ptrap->left.p1.y) / 65536, - left_slope, - ((float)ptrap->right.p1.x) / 65536, ((float)ptrap->right.p1.y) / 65536, - right_slope); - - glamor_priv->render_nr_verts += 4; - glamor_priv->vbo_offset += glamor_priv->vb_stride * 4; - } - - i += mrect; - - /* Now rendering. */ - if (!glamor_priv->render_nr_verts) - continue; - - if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) - dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); - else { - dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); - dispatch->glBufferData(GL_ARRAY_BUFFER, - glamor_priv->vbo_offset, - glamor_priv->vb, GL_DYNAMIC_DRAW); - } + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + glamor_pixmap_private *pixmap_priv; + PixmapPtr pixmap = NULL; + GLint trapezoid_prog; + GLfloat xscale, yscale; + float left_slope, right_slope; + xTrapezoid *ptrap; + BoxRec one_trap_bound; + int nrect_max; + int i, j; + float *vertices; + float params[4]; + + glamor_priv = glamor_get_screen_private(screen); + trapezoid_prog = glamor_priv->trapezoid_prog; + + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + pixmap_priv = glamor_get_pixmap_private(pixmap); + + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv) + || pixmap_priv->type == GLAMOR_TEXTURE_LARGE) { /* should always have here. */ + DEBUGF("GLAMOR_PIXMAP_PRIV_HAS_FBO check failed, fallback\n"); + return FALSE; + } + + /* First, clear all to zero */ + if (!glamor_solid(pixmap, 0, 0, pixmap_priv->base.pixmap->drawable.width, + pixmap_priv->base.pixmap->drawable.height, + GXclear, 0xFFFFFFFF, 0)) { + DEBUGF("glamor_solid failed, fallback\n"); + return FALSE; + } + + dispatch = glamor_get_dispatch(glamor_priv); + + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + pixmap_priv_get_dest_scale(pixmap_priv, (&xscale), (&yscale)); + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + + /* Now draw the Trapezoid mask. */ + dispatch->glUseProgram(trapezoid_prog); + + dispatch->glEnable(GL_BLEND); + dispatch->glBlendFunc(GL_ONE, GL_ONE); + + nrect_max = GLAMOR_COMPOSITE_VBO_VERT_CNT / (4 * GLAMOR_VERTEX_RIGHT_PARAM); + + for (i = 0; i < ntrap;) { + int mrect; + int stride; + + mrect = (ntrap - i) > nrect_max ? nrect_max : (ntrap - i); + glamor_setup_composite_vbo_for_trapezoid(screen, 4 * mrect); + stride = glamor_priv->vb_stride / sizeof(float); + + for (j = 0; j < mrect; j++) { + ptrap = traps + i + j; + + DEBUGF + ("--- The parameter of xTrapezoid is:\ntop: %d 0x%x\tbottom: %d 0x%x\n" + "left: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n" + "right: p1 (%d 0x%x, %d 0x%x)\tp2 (%d 0x%x, %d 0x%x)\n", + xFixedToInt(ptrap->top), ptrap->top, + xFixedToInt(ptrap->bottom), ptrap->bottom, + xFixedToInt(ptrap->left.p1.x), ptrap->left.p1.x, + xFixedToInt(ptrap->left.p1.y), ptrap->left.p1.y, + xFixedToInt(ptrap->left.p2.x), ptrap->left.p2.x, + xFixedToInt(ptrap->left.p2.y), ptrap->left.p2.y, + xFixedToInt(ptrap->right.p1.x), ptrap->right.p1.x, + xFixedToInt(ptrap->right.p1.y), ptrap->right.p1.y, + xFixedToInt(ptrap->right.p2.x), ptrap->right.p2.x, + xFixedToInt(ptrap->right.p2.y), ptrap->right.p2.y); + + miTrapezoidBounds(1, ptrap, &one_trap_bound); + + vertices = + (float *) (glamor_priv->vb + glamor_priv->vbo_offset) + 2; + glamor_set_tcoords_ext((pixmap_priv->base.pixmap->drawable.width), + (pixmap_priv->base.pixmap->drawable.height), + (one_trap_bound.x1), (one_trap_bound.y1), + (one_trap_bound.x2), (one_trap_bound.y2), + glamor_priv->yInverted, vertices, stride); + DEBUGF("tex_vertices --> leftup : %f X %f, rightup: %f X %f," + "rightbottom: %f X %f, leftbottom : %f X %f\n", vertices[0], + vertices[1], vertices[1 * stride], vertices[1 * stride + 1], + vertices[2 * stride], vertices[2 * stride + 1], + vertices[3 * stride], vertices[3 * stride + 1]); + + /* Need to rebase. */ + one_trap_bound.x1 -= bounds->x1; + one_trap_bound.x2 -= bounds->x1; + one_trap_bound.y1 -= bounds->y1; + one_trap_bound.y2 -= bounds->y1; + + vertices -= 2; + + glamor_set_normalize_vcoords_ext(pixmap_priv, xscale, yscale, + one_trap_bound.x1, + one_trap_bound.y1, + one_trap_bound.x2, + one_trap_bound.y2, + glamor_priv->yInverted, vertices, + stride); + DEBUGF("vertices --> leftup : %f X %f, rightup: %f X %f," + "rightbottom: %f X %f, leftbottom : %f X %f\n", vertices[0], + vertices[1], vertices[1 * stride], vertices[1 * stride + 1], + vertices[2 * stride], vertices[2 * stride + 1], + vertices[3 * stride], vertices[3 * stride + 1]); + vertices += 4; + + /* Set the top and bottom. */ + params[0] = ((float) ptrap->top) / 65536; + params[1] = ((float) ptrap->bottom) / 65536; + glamor_set_const_ext(params, 2, vertices, 4, stride); + vertices += 2; + + /* Set the left params. */ + params[0] = ((float) ptrap->left.p1.x) / 65536; + params[1] = ((float) ptrap->left.p1.y) / 65536; + + if (ptrap->left.p1.x == ptrap->left.p2.x) { + left_slope = 0.0; + params[3] = 1.0; + } + else { + left_slope = ((float) (ptrap->left.p1.y - ptrap->left.p2.y)) + / ((float) (ptrap->left.p1.x - ptrap->left.p2.x)); + params[3] = 0.0; + } + params[2] = left_slope; + glamor_set_const_ext(params, 4, vertices, 4, stride); + vertices += 4; + + /* Set the left params. */ + params[0] = ((float) ptrap->right.p1.x) / 65536; + params[1] = ((float) ptrap->right.p1.y) / 65536; + + if (ptrap->right.p1.x == ptrap->right.p2.x) { + right_slope = 0.0; + params[3] = 1.0; + } + else { + right_slope = ((float) (ptrap->right.p1.y - ptrap->right.p2.y)) + / ((float) (ptrap->right.p1.x - ptrap->right.p2.x)); + params[3] = 0.0; + } + params[2] = right_slope; + glamor_set_const_ext(params, 4, vertices, 4, stride); + + DEBUGF("trap_top = %f, trap_bottom = %f, " + "trap_left_x = %f, trap_left_y = %f, left_slope = %f, " + "trap_right_x = %f, trap_right_y = %f, right_slope = %f\n", + ((float) ptrap->top) / 65536, + ((float) ptrap->bottom) / 65536, + ((float) ptrap->left.p1.x) / 65536, + ((float) ptrap->left.p1.y) / 65536, left_slope, + ((float) ptrap->right.p1.x) / 65536, + ((float) ptrap->right.p1.y) / 65536, right_slope); + + glamor_priv->render_nr_verts += 4; + glamor_priv->vbo_offset += glamor_priv->vb_stride * 4; + } + + i += mrect; + + /* Now rendering. */ + if (!glamor_priv->render_nr_verts) + continue; + + if (glamor_priv->gl_flavor == GLAMOR_GL_DESKTOP) + dispatch->glUnmapBuffer(GL_ARRAY_BUFFER); + else { + dispatch->glBindBuffer(GL_ARRAY_BUFFER, glamor_priv->vbo); + dispatch->glBufferData(GL_ARRAY_BUFFER, + glamor_priv->vbo_offset, + glamor_priv->vb, GL_DYNAMIC_DRAW); + } #ifndef GLAMOR_GLES2 - dispatch->glDrawRangeElements(GL_TRIANGLES, 0, glamor_priv->render_nr_verts, - (glamor_priv->render_nr_verts * 3) / 2, - GL_UNSIGNED_SHORT, NULL); + dispatch->glDrawRangeElements(GL_TRIANGLES, 0, + glamor_priv->render_nr_verts, + (glamor_priv->render_nr_verts * 3) / 2, + GL_UNSIGNED_SHORT, NULL); #else - dispatch->glDrawElements(GL_TRIANGLES, (glamor_priv->render_nr_verts * 3) / 2, - GL_UNSIGNED_SHORT, NULL); + dispatch->glDrawElements(GL_TRIANGLES, + (glamor_priv->render_nr_verts * 3) / 2, + GL_UNSIGNED_SHORT, NULL); #endif - } - - dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); - dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); - dispatch->glBlendFunc(GL_ONE, GL_ZERO); - dispatch->glDisable(GL_BLEND); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); - dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); - dispatch->glUseProgram(0); - glamor_put_dispatch(glamor_priv); - return TRUE; + } + + dispatch->glBindBuffer(GL_ARRAY_BUFFER, 0); + dispatch->glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); + dispatch->glBlendFunc(GL_ONE, GL_ZERO); + dispatch->glDisable(GL_BLEND); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_TOP_BOTTOM); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_LEFT_PARAM); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_RIGHT_PARAM); + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + return TRUE; } -#endif /*GLAMOR_TRAPEZOID_SHADER */ +#endif /*GLAMOR_TRAPEZOID_SHADER */ /** * Creates an appropriate picture for temp mask use. */ static PicturePtr glamor_create_mask_picture(ScreenPtr screen, - PicturePtr dst, - PictFormatPtr pict_format, - CARD16 width, CARD16 height, int gpu) + PicturePtr dst, + PictFormatPtr pict_format, + CARD16 width, CARD16 height, int gpu) { - PixmapPtr pixmap; - PicturePtr picture; - int error; - - if (!pict_format) { - if (dst->polyEdge == PolyEdgeSharp) - pict_format = - PictureMatchFormat(screen, 1, PICT_a1); - else - pict_format = - PictureMatchFormat(screen, 8, PICT_a8); - if (!pict_format) - return 0; - } - - if (gpu) { - pixmap = glamor_create_pixmap(screen, width, height, - pict_format->depth, 0); - } else { - pixmap = glamor_create_pixmap(screen, 0, 0, - pict_format->depth, - GLAMOR_CREATE_PIXMAP_CPU); - } - - if (!pixmap) - return 0; - picture = CreatePicture(0, &pixmap->drawable, pict_format, - 0, 0, serverClient, &error); - glamor_destroy_pixmap(pixmap); - return picture; + PixmapPtr pixmap; + PicturePtr picture; + int error; + + if (!pict_format) { + if (dst->polyEdge == PolyEdgeSharp) + pict_format = PictureMatchFormat(screen, 1, PICT_a1); + else + pict_format = PictureMatchFormat(screen, 8, PICT_a8); + if (!pict_format) + return 0; + } + + if (gpu) { + pixmap = glamor_create_pixmap(screen, width, height, + pict_format->depth, 0); + } + else { + pixmap = glamor_create_pixmap(screen, 0, 0, + pict_format->depth, + GLAMOR_CREATE_PIXMAP_CPU); + } + + if (!pixmap) + return 0; + picture = CreatePicture(0, &pixmap->drawable, pict_format, + 0, 0, serverClient, &error); + glamor_destroy_pixmap(pixmap); + return picture; } static int -_glamor_trapezoid_bounds (int ntrap, xTrapezoid *traps, BoxPtr box) +_glamor_trapezoid_bounds(int ntrap, xTrapezoid *traps, BoxPtr box) { - int has_large_trapezoid = 0; - box->y1 = MAXSHORT; - box->y2 = MINSHORT; - box->x1 = MAXSHORT; - box->x2 = MINSHORT; - - for (; ntrap; ntrap--, traps++) { - INT16 x1, y1, x2, y2; - - if (!xTrapezoidValid(traps)) - continue; - y1 = xFixedToInt (traps->top); - if (y1 < box->y1) - box->y1 = y1; - - y2 = xFixedToInt (xFixedCeil (traps->bottom)); - if (y2 > box->y2) - box->y2 = y2; - - x1 = xFixedToInt (min (_glamor_linefixedX (&traps->left, traps->top, FALSE), - _glamor_linefixedX (&traps->left, traps->bottom, FALSE))); - if (x1 < box->x1) - box->x1 = x1; - - x2 = xFixedToInt (xFixedCeil (max (_glamor_linefixedX (&traps->right, traps->top, TRUE), - _glamor_linefixedX (&traps->right, traps->bottom, TRUE)))); - if (x2 > box->x2) - box->x2 = x2; - - if (!has_large_trapezoid && (x2 - x1) > 256 && (y2 - y1) > 32) - has_large_trapezoid = 1; - } - - return has_large_trapezoid; + int has_large_trapezoid = 0; + + box->y1 = MAXSHORT; + box->y2 = MINSHORT; + box->x1 = MAXSHORT; + box->x2 = MINSHORT; + + for (; ntrap; ntrap--, traps++) { + INT16 x1, y1, x2, y2; + + if (!xTrapezoidValid(traps)) + continue; + y1 = xFixedToInt(traps->top); + if (y1 < box->y1) + box->y1 = y1; + + y2 = xFixedToInt(xFixedCeil(traps->bottom)); + if (y2 > box->y2) + box->y2 = y2; + + x1 = xFixedToInt(min + (_glamor_linefixedX(&traps->left, traps->top, FALSE), + _glamor_linefixedX(&traps->left, traps->bottom, + FALSE))); + if (x1 < box->x1) + box->x1 = x1; + + x2 = xFixedToInt(xFixedCeil + (max + (_glamor_linefixedX(&traps->right, traps->top, TRUE), + _glamor_linefixedX(&traps->right, traps->bottom, + TRUE)))); + if (x2 > box->x2) + box->x2 = x2; + + if (!has_large_trapezoid && (x2 - x1) > 256 && (y2 - y1) > 32) + has_large_trapezoid = 1; + } + + return has_large_trapezoid; } /** @@ -1658,162 +1695,163 @@ static Bool _glamor_trapezoids(CARD8 op, PicturePtr src, PicturePtr dst, PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps, Bool fallback) + int ntrap, xTrapezoid *traps, Bool fallback) { - ScreenPtr screen = dst->pDrawable->pScreen; - BoxRec bounds; - PicturePtr picture; - INT16 x_dst, y_dst; - INT16 x_rel, y_rel; - int width, height, stride; - PixmapPtr pixmap; - pixman_image_t *image = NULL; - int ret = 0; - int has_large_trapezoid; - - /* If a mask format wasn't provided, we get to choose, but behavior should - * be as if there was no temporary mask the traps were accumulated into. - */ - if (!mask_format) { - if (dst->polyEdge == PolyEdgeSharp) - mask_format = - PictureMatchFormat(screen, 1, PICT_a1); - else - mask_format = - PictureMatchFormat(screen, 8, PICT_a8); - for (; ntrap; ntrap--, traps++) - glamor_trapezoids(op, src, dst, mask_format, x_src, - y_src, 1, traps); - return TRUE; - } - - has_large_trapezoid = _glamor_trapezoid_bounds(ntrap, traps, &bounds); - DEBUGF("The bounds for all traps is: bounds.x1 = %d, bounds.x2 = %d, " - "bounds.y1 = %d, bounds.y2 = %d, ---- ntrap = %d\n", bounds.x1, - bounds.x2, bounds.y1, bounds.y2, ntrap); - - if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) - return TRUE; - - x_dst = traps[0].left.p1.x >> 16; - y_dst = traps[0].left.p1.y >> 16; - - width = bounds.x2 - bounds.x1; - height = bounds.y2 - bounds.y1; - stride = PixmapBytePad(width, mask_format->depth); + ScreenPtr screen = dst->pDrawable->pScreen; + BoxRec bounds; + PicturePtr picture; + INT16 x_dst, y_dst; + INT16 x_rel, y_rel; + int width, height, stride; + PixmapPtr pixmap; + pixman_image_t *image = NULL; + int ret = 0; + int has_large_trapezoid; + + /* If a mask format wasn't provided, we get to choose, but behavior should + * be as if there was no temporary mask the traps were accumulated into. + */ + if (!mask_format) { + if (dst->polyEdge == PolyEdgeSharp) + mask_format = PictureMatchFormat(screen, 1, PICT_a1); + else + mask_format = PictureMatchFormat(screen, 8, PICT_a8); + for (; ntrap; ntrap--, traps++) + glamor_trapezoids(op, src, dst, mask_format, x_src, + y_src, 1, traps); + return TRUE; + } + + has_large_trapezoid = _glamor_trapezoid_bounds(ntrap, traps, &bounds); + DEBUGF("The bounds for all traps is: bounds.x1 = %d, bounds.x2 = %d, " + "bounds.y1 = %d, bounds.y2 = %d, ---- ntrap = %d\n", bounds.x1, + bounds.x2, bounds.y1, bounds.y2, ntrap); + + if (bounds.y1 >= bounds.y2 || bounds.x1 >= bounds.x2) + return TRUE; + + x_dst = traps[0].left.p1.x >> 16; + y_dst = traps[0].left.p1.y >> 16; + + width = bounds.x2 - bounds.x1; + height = bounds.y2 - bounds.y1; + stride = PixmapBytePad(width, mask_format->depth); #ifdef GLAMOR_TRAPEZOID_SHADER - /* We seperate the render to two paths. - Some GL implemetation do not implement the Anti-Alias for triangles - and polygen's filling. So when the edge is not vertical or horizontal, - sawtooth will be obvious. The trapezoid is widely used to render wide - lines and circles. In these case, the line or circle will be divided - into a large number of small trapezoids to approximate it, so the sawtooth - at the edge will cause the result not be acceptable. - When the depth of the mask is 1, there is no Anti-Alias needed, so we - use the clip logic to generate the result directly(fast path). - When the depth is not 1, AA is needed and we use a shader to generate - a temp mask pixmap. - */ - if (mask_format->depth == 1) { - ret = _glamor_trapezoids_with_shader(op, src, dst, mask_format, - x_src, y_src, ntrap, traps); - if(ret) - return TRUE; - } else { - if (has_large_trapezoid || ntrap > 256) { - /* The shader speed is relative slower than pixman when generating big chunk - trapezoid mask. We fallback to pixman to improve the performance. */ - ; - } else if (dst->polyMode == PolyModeImprecise) { - /* The precise mode is that we sample the trapezoid on the centre points of - an (2*n+1)x(2*n-1) subpixel grid. It is computationally expensive in shader - and we use inside area ratio to replace it if the polymode == Imprecise. */ - picture = glamor_create_mask_picture(screen, dst, mask_format, - width, height, 1); - if (!picture) - return TRUE; - - ret = _glamor_generate_trapezoid_with_shader(screen, picture, traps, ntrap, &bounds); - - if (!ret) - FreePicture(picture, 0); - } - } + /* We seperate the render to two paths. + Some GL implemetation do not implement the Anti-Alias for triangles + and polygen's filling. So when the edge is not vertical or horizontal, + sawtooth will be obvious. The trapezoid is widely used to render wide + lines and circles. In these case, the line or circle will be divided + into a large number of small trapezoids to approximate it, so the sawtooth + at the edge will cause the result not be acceptable. + When the depth of the mask is 1, there is no Anti-Alias needed, so we + use the clip logic to generate the result directly(fast path). + When the depth is not 1, AA is needed and we use a shader to generate + a temp mask pixmap. + */ + if (mask_format->depth == 1) { + ret = _glamor_trapezoids_with_shader(op, src, dst, mask_format, + x_src, y_src, ntrap, traps); + if (ret) + return TRUE; + } + else { + if (has_large_trapezoid || ntrap > 256) { + /* The shader speed is relative slower than pixman when generating big chunk + trapezoid mask. We fallback to pixman to improve the performance. */ + ; + } + else if (dst->polyMode == PolyModeImprecise) { + /* The precise mode is that we sample the trapezoid on the centre points of + an (2*n+1)x(2*n-1) subpixel grid. It is computationally expensive in shader + and we use inside area ratio to replace it if the polymode == Imprecise. */ + picture = glamor_create_mask_picture(screen, dst, mask_format, + width, height, 1); + if (!picture) + return TRUE; + + ret = + _glamor_generate_trapezoid_with_shader(screen, picture, traps, + ntrap, &bounds); + + if (!ret) + FreePicture(picture, 0); + } + } #endif - if (!ret) { - DEBUGF("Fallback to sw rasterize of trapezoid\n"); - - picture = glamor_create_mask_picture(screen, dst, mask_format, - width, height, 0); - if (!picture) - return TRUE; - - image = pixman_image_create_bits(picture->format, - width, height, NULL, stride); - if (!image) { - FreePicture(picture, 0); - return TRUE; - } - - for (; ntrap; ntrap--, traps++) - pixman_rasterize_trapezoid(image, - (pixman_trapezoid_t *) traps, - -bounds.x1, -bounds.y1); - - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - - screen->ModifyPixmapHeader(pixmap, width, height, - mask_format->depth, - BitsPerPixel(mask_format->depth), - PixmapBytePad(width, - mask_format->depth), - pixman_image_get_data(image)); - } - - x_rel = bounds.x1 + x_src - x_dst; - y_rel = bounds.y1 + y_src - y_dst; - DEBUGF("x_src = %d, y_src = %d, x_dst = %d, y_dst = %d, " - "x_rel = %d, y_rel = %d\n", x_src, y_src, x_dst, - y_dst, x_rel, y_rel); - - CompositePicture(op, src, picture, dst, - x_rel, y_rel, - 0, 0, - bounds.x1, bounds.y1, - bounds.x2 - bounds.x1, bounds.y2 - bounds.y1); - - if (image) - pixman_image_unref(image); - - FreePicture(picture, 0); - return TRUE; + if (!ret) { + DEBUGF("Fallback to sw rasterize of trapezoid\n"); + + picture = glamor_create_mask_picture(screen, dst, mask_format, + width, height, 0); + if (!picture) + return TRUE; + + image = pixman_image_create_bits(picture->format, + width, height, NULL, stride); + if (!image) { + FreePicture(picture, 0); + return TRUE; + } + + for (; ntrap; ntrap--, traps++) + pixman_rasterize_trapezoid(image, + (pixman_trapezoid_t *) traps, + -bounds.x1, -bounds.y1); + + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + + screen->ModifyPixmapHeader(pixmap, width, height, + mask_format->depth, + BitsPerPixel(mask_format->depth), + PixmapBytePad(width, + mask_format->depth), + pixman_image_get_data(image)); + } + + x_rel = bounds.x1 + x_src - x_dst; + y_rel = bounds.y1 + y_src - y_dst; + DEBUGF("x_src = %d, y_src = %d, x_dst = %d, y_dst = %d, " + "x_rel = %d, y_rel = %d\n", x_src, y_src, x_dst, + y_dst, x_rel, y_rel); + + CompositePicture(op, src, picture, dst, + x_rel, y_rel, + 0, 0, + bounds.x1, bounds.y1, + bounds.x2 - bounds.x1, bounds.y2 - bounds.y1); + + if (image) + pixman_image_unref(image); + + FreePicture(picture, 0); + return TRUE; } void glamor_trapezoids(CARD8 op, PicturePtr src, PicturePtr dst, PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps) + int ntrap, xTrapezoid *traps) { - DEBUGF("x_src = %d, y_src = %d, ntrap = %d\n", x_src, y_src, ntrap); + DEBUGF("x_src = %d, y_src = %d, ntrap = %d\n", x_src, y_src, ntrap); - _glamor_trapezoids(op, src, dst, mask_format, x_src, - y_src, ntrap, traps, TRUE); + _glamor_trapezoids(op, src, dst, mask_format, x_src, + y_src, ntrap, traps, TRUE); } Bool glamor_trapezoids_nf(CARD8 op, - PicturePtr src, PicturePtr dst, - PictFormatPtr mask_format, INT16 x_src, INT16 y_src, - int ntrap, xTrapezoid * traps) + PicturePtr src, PicturePtr dst, + PictFormatPtr mask_format, INT16 x_src, INT16 y_src, + int ntrap, xTrapezoid *traps) { - DEBUGF("x_src = %d, y_src = %d, ntrap = %d\n", x_src, y_src, ntrap); + DEBUGF("x_src = %d, y_src = %d, ntrap = %d\n", x_src, y_src, ntrap); - return _glamor_trapezoids(op, src, dst, mask_format, x_src, - y_src, ntrap, traps, FALSE); + return _glamor_trapezoids(op, src, dst, mask_format, x_src, + y_src, ntrap, traps, FALSE); } -#endif /* RENDER */ - +#endif /* RENDER */ diff --git a/xorg-server/glamor/glamor_triangles.c b/xorg-server/glamor/glamor_triangles.c index e0f4a9708..693eef10f 100644 --- a/xorg-server/glamor/glamor_triangles.c +++ b/xorg-server/glamor/glamor_triangles.c @@ -30,51 +30,48 @@ static Bool _glamor_triangles(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris, Bool fallback) + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris, + Bool fallback) { - if (!fallback - && glamor_ddx_fallback_check_pixmap(pDst->pDrawable) - && (!pSrc->pDrawable - || glamor_ddx_fallback_check_pixmap(pSrc->pDrawable))) - return FALSE; + if (!fallback && glamor_ddx_fallback_check_pixmap(pDst->pDrawable) + && (!pSrc->pDrawable + || glamor_ddx_fallback_check_pixmap(pSrc->pDrawable))) + return FALSE; - if (glamor_prepare_access_picture(pDst, GLAMOR_ACCESS_RW)) { - if (glamor_prepare_access_picture(pSrc, - GLAMOR_ACCESS_RO)) { + if (glamor_prepare_access_picture(pDst, GLAMOR_ACCESS_RW)) { + if (glamor_prepare_access_picture(pSrc, GLAMOR_ACCESS_RO)) { - fbTriangles(op, pSrc, pDst, maskFormat, xSrc, - ySrc, ntris, tris); + fbTriangles(op, pSrc, pDst, maskFormat, xSrc, ySrc, ntris, tris); - glamor_finish_access_picture(pSrc, GLAMOR_ACCESS_RO); - } + glamor_finish_access_picture(pSrc, GLAMOR_ACCESS_RO); + } - glamor_finish_access_picture(pDst, GLAMOR_ACCESS_RW); - } - return TRUE; + glamor_finish_access_picture(pDst, GLAMOR_ACCESS_RW); + } + return TRUE; } void glamor_triangles(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris) + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris) { - _glamor_triangles(op, pSrc, pDst, maskFormat, - xSrc, ySrc, ntris, tris, TRUE); + _glamor_triangles(op, pSrc, pDst, maskFormat, + xSrc, ySrc, ntris, tris, TRUE); } Bool glamor_triangles_nf(CARD8 op, - PicturePtr pSrc, - PicturePtr pDst, - PictFormatPtr maskFormat, - INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris) + PicturePtr pSrc, + PicturePtr pDst, + PictFormatPtr maskFormat, + INT16 xSrc, INT16 ySrc, int ntris, xTriangle * tris) { - return _glamor_triangles(op, pSrc, pDst, maskFormat, - xSrc, ySrc, ntris, tris, FALSE); + return _glamor_triangles(op, pSrc, pDst, maskFormat, + xSrc, ySrc, ntris, tris, FALSE); } - diff --git a/xorg-server/glamor/glamor_utils.h b/xorg-server/glamor/glamor_utils.h index d30783826..ea827df3b 100644 --- a/xorg-server/glamor/glamor_utils.h +++ b/xorg-server/glamor/glamor_utils.h @@ -59,7 +59,7 @@ #define PIXMAP_PRIV_GET_ACTUAL_SIZE(priv, w, h) \ do { \ - if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ w = priv->large.box.x2 - priv->large.box.x1; \ h = priv->large.box.y2 - priv->large.box.y1; \ } else { \ @@ -80,7 +80,7 @@ #define pixmap_priv_get_fbo_off(_priv_, _xoff_, _yoff_) \ do { \ - if (unlikely(_priv_ && (_priv_)->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(_priv_ && (_priv_)->type == GLAMOR_TEXTURE_LARGE)) { \ *(_xoff_) = - (_priv_)->large.box.x1; \ *(_yoff_) = - (_priv_)->large.box.y1; \ } else { \ @@ -254,7 +254,6 @@ } \ } while(0) - /* _x1_ ... _y2_ may has fractional. */ #define glamor_get_repeat_transform_coords(priv, repeat_type, tx1, \ ty1, _x1_, _y1_) \ @@ -315,7 +314,7 @@ texcoord, yInverted) \ do { \ (texcoord)[0] = t_from_x_coord_x(xscale, _tx_); \ - if (likely(yInverted)) \ + if (_X_LIKELY(yInverted)) \ (texcoord)[1] = t_from_x_coord_y_inverted(yscale, _ty_);\ else \ (texcoord)[1] = t_from_x_coord_y(yscale, _ty_); \ @@ -338,7 +337,7 @@ tx += fbo_x_off; \ ty += fbo_y_off; \ (texcoord)[0] = t_from_x_coord_x(xscale, tx); \ - if (likely(yInverted)) \ + if (_X_LIKELY(yInverted)) \ (texcoord)[1] = t_from_x_coord_y_inverted(yscale, ty); \ else \ (texcoord)[1] = t_from_x_coord_y(yscale, ty); \ @@ -402,8 +401,6 @@ 2); \ } while (0) - - #define glamor_set_normalize_tri_tcoords(xscale, \ yscale, \ vtx, \ @@ -435,7 +432,7 @@ texcoords, \ stride) \ do { \ - if (likely(priv->type != GLAMOR_TEXTURE_LARGE)) { \ + if (_X_LIKELY(priv->type != GLAMOR_TEXTURE_LARGE)) { \ glamor_set_transformed_normalize_tcoords_ext(priv, matrix, xscale, \ yscale, _x1_, _y1_, \ _x2_, _y2_, yInverted, \ @@ -475,7 +472,6 @@ } \ } while (0) - #define glamor_set_repeat_transformed_normalize_tcoords( priv, \ repeat_type, \ matrix, \ @@ -509,7 +505,7 @@ (vertices)[1 * stride] = _t2_ = t_from_x_coord_x(xscale, tx2); \ (vertices)[2 * stride] = _t2_; \ (vertices)[3 * stride] = _t0_; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = _t1_ = t_from_x_coord_y_inverted(yscale, ty1); \ (vertices)[2 * stride + 1] = _t5_ = t_from_x_coord_y_inverted(yscale, ty2);\ } \ @@ -525,7 +521,7 @@ x1, y1, x2, y2, \ yInverted, vertices, stride) \ do { \ - if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ float tx1, tx2, ty1, ty2; \ int fbo_x_off, fbo_y_off; \ pixmap_priv_get_fbo_off(priv, &fbo_x_off, &fbo_y_off); \ @@ -541,7 +537,6 @@ x2, y2, yInverted, vertices, stride);\ } while(0) - #define glamor_set_normalize_tcoords(priv, xscale, yscale, \ x1, y1, x2, y2, \ yInverted, vertices) \ @@ -556,7 +551,7 @@ _x1_, _y1_, _x2_, _y2_, \ yInverted, vertices, stride)\ do { \ - if (unlikely(priv->type == GLAMOR_TEXTURE_LARGE)) { \ + if (_X_UNLIKELY(priv->type == GLAMOR_TEXTURE_LARGE)) { \ float tx1, tx2, ty1, ty2; \ if (repeat_type == RepeatPad) { \ tx1 = _x1_ - priv->large.box.x1; \ @@ -577,7 +572,6 @@ stride); \ } while(0) - #define glamor_set_repeat_normalize_tcoords(priv, repeat_type, \ xscale, yscale, \ _x1_, _y1_, _x2_, _y2_, \ @@ -597,7 +591,7 @@ (vertices)[2] = t_from_x_coord_x(xscale, x2); \ (vertices)[6] = (vertices)[2]; \ (vertices)[4] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = t_from_x_coord_y_inverted(yscale, y1); \ (vertices)[7] = t_from_x_coord_y_inverted(yscale, y2); \ } \ @@ -616,7 +610,7 @@ (vertices)[2] = (x2); \ (vertices)[4] = (vertices)[2]; \ (vertices)[6] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = (y1); \ (vertices)[5] = (y2); \ } \ @@ -635,7 +629,7 @@ (vertices)[1*stride] = (x2); \ (vertices)[2*stride] = (vertices)[1*stride]; \ (vertices)[3*stride] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = (y1); \ (vertices)[2*stride + 1] = (y2); \ } \ @@ -651,7 +645,7 @@ yInverted, vertices) \ do { \ (vertices)[0] = v_from_x_coord_x(xscale, x); \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = v_from_x_coord_y_inverted(yscale, y); \ } else { \ (vertices)[1] = v_from_x_coord_y(yscale, y); \ @@ -679,7 +673,7 @@ (vertices)[2] = (x2); \ (vertices)[6] = (vertices)[2]; \ (vertices)[4] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = (y1); \ (vertices)[7] = (y2); \ } \ @@ -705,7 +699,7 @@ x2 + fbo_x_off); \ (vertices)[2 * stride] = _t2_; \ (vertices)[3 * stride] = _t0_; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = _t1_ = v_from_x_coord_y_inverted(yscale, \ y1 + fbo_y_off); \ (vertices)[2 * stride + 1] = _t5_ = \ @@ -721,7 +715,6 @@ (vertices)[3 * stride + 1] = _t5_; \ } while(0) - #define glamor_set_normalize_vcoords(priv, xscale, yscale, \ x1, y1, x2, y2, \ yInverted, vertices) \ @@ -749,7 +742,7 @@ (vertices)[2] = v_from_x_coord_x(xscale, x2); \ (vertices)[6] = (vertices)[2]; \ (vertices)[4] = (vertices)[0]; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (vertices)[1] = v_from_x_coord_y_inverted(yscale, y1); \ (vertices)[7] = v_from_x_coord_y_inverted(yscale, y2); \ } \ @@ -765,7 +758,7 @@ yInverted, pt) \ do { \ (pt)[0] = t_from_x_coord_x(xscale, x); \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (pt)[1] = t_from_x_coord_y_inverted(yscale, y); \ } else { \ (pt)[1] = t_from_x_coord_y(yscale, y); \ @@ -776,7 +769,7 @@ yInverted, c) \ do { \ (c)[0] = (float)x; \ - if (likely(yInverted)) { \ + if (_X_LIKELY(yInverted)) { \ (c)[1] = (float)y; \ } else { \ (c)[1] = (float)height - (float)y; \ @@ -786,44 +779,40 @@ inline static void glamor_calculate_boxes_bound(BoxPtr bound, BoxPtr boxes, int nbox) { - int x_min, y_min; - int x_max, y_max; - int i; - x_min = y_min = MAXSHORT; - x_max = y_max = MINSHORT; - for (i = 0; i < nbox; i++) { - if (x_min > boxes[i].x1) - x_min = boxes[i].x1; - if (y_min > boxes[i].y1) - y_min = boxes[i].y1; - - if (x_max < boxes[i].x2) - x_max = boxes[i].x2; - if (y_max < boxes[i].y2) - y_max = boxes[i].y2; - } - bound->x1 = x_min; - bound->y1 = y_min; - bound->x2 = x_max; - bound->y2 = y_max; + int x_min, y_min; + int x_max, y_max; + int i; + + x_min = y_min = MAXSHORT; + x_max = y_max = MINSHORT; + for (i = 0; i < nbox; i++) { + if (x_min > boxes[i].x1) + x_min = boxes[i].x1; + if (y_min > boxes[i].y1) + y_min = boxes[i].y1; + + if (x_max < boxes[i].x2) + x_max = boxes[i].x2; + if (y_max < boxes[i].y2) + y_max = boxes[i].y2; + } + bound->x1 = x_min; + bound->y1 = y_min; + bound->x2 = x_max; + bound->y2 = y_max; } inline static void glamor_translate_boxes(BoxPtr boxes, int nbox, int dx, int dy) { - int i; - for (i = 0; i < nbox; i++) { - boxes[i].x1 += dx; - boxes[i].y1 += dy; - boxes[i].x2 += dx; - boxes[i].y2 += dy; - } -} - -static inline Bool -region_is_empty(pixman_region16_t *region) -{ - return region->data && region->data->numRects == 0; + int i; + + for (i = 0; i < nbox; i++) { + boxes[i].x1 += dx; + boxes[i].y1 += dy; + boxes[i].x2 += dx; + boxes[i].y2 += dy; + } } #ifndef ARRAY_SIZE @@ -857,58 +846,58 @@ region_is_empty(pixman_region16_t *region) static inline CARD32 format_for_depth(int depth) { - switch (depth) { - case 1: - return PICT_a1; - case 4: - return PICT_a4; - case 8: - return PICT_a8; - case 15: - return PICT_x1r5g5b5; - case 16: - return PICT_r5g6b5; - default: - case 24: - return PICT_x8r8g8b8; + switch (depth) { + case 1: + return PICT_a1; + case 4: + return PICT_a4; + case 8: + return PICT_a8; + case 15: + return PICT_x1r5g5b5; + case 16: + return PICT_r5g6b5; + default: + case 24: + return PICT_x8r8g8b8; #if XORG_VERSION_CURRENT >= 10699900 - case 30: - return PICT_x2r10g10b10; + case 30: + return PICT_x2r10g10b10; #endif - case 32: - return PICT_a8r8g8b8; - } + case 32: + return PICT_a8r8g8b8; + } } static inline void gl_iformat_for_depth(int depth, GLenum * format) { - switch (depth) { + switch (depth) { #ifndef GLAMOR_GLES2 - case 1: - case 8: - *format = GL_ALPHA; - break; + case 1: + case 8: + *format = GL_ALPHA; + break; #endif - default: - *format = GL_RGBA; - break; - } + default: + *format = GL_RGBA; + break; + } } static inline CARD32 format_for_pixmap(PixmapPtr pixmap) { - glamor_pixmap_private *pixmap_priv; - PictFormatShort pict_format; + glamor_pixmap_private *pixmap_priv; + PictFormatShort pict_format; - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) - pict_format = pixmap_priv->base.picture->format; - else - pict_format = format_for_depth(pixmap->drawable.depth); + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) + pict_format = pixmap_priv->base.picture->format; + else + pict_format = format_for_depth(pixmap->drawable.depth); - return pict_format; + return pict_format; } #define REVERT_NONE 0 @@ -939,114 +928,112 @@ format_for_pixmap(PixmapPtr pixmap) #ifndef GLAMOR_GLES2 static inline int glamor_get_tex_format_type_from_pictformat(PictFormatShort format, - GLenum * tex_format, - GLenum * tex_type, - int *no_alpha, - int *revert, - int *swap_rb, - int is_upload) - + GLenum * tex_format, + GLenum * tex_type, + int *no_alpha, + int *revert, + int *swap_rb, int is_upload) { - *no_alpha = 0; - *revert = REVERT_NONE; - *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING; - switch (format) { - case PICT_a1: - *tex_format = GL_ALPHA; - *tex_type = GL_UNSIGNED_BYTE; - *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1; - break; - case PICT_b8g8r8x8: - *no_alpha = 1; - case PICT_b8g8r8a8: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_INT_8_8_8_8; - break; - - case PICT_x8r8g8b8: - *no_alpha = 1; - case PICT_a8r8g8b8: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - case PICT_x8b8g8r8: - *no_alpha = 1; - case PICT_a8b8g8r8: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV; - break; - case PICT_x2r10g10b10: - *no_alpha = 1; - case PICT_a2r10g10b10: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV; - break; - case PICT_x2b10g10r10: - *no_alpha = 1; - case PICT_a2b10g10r10: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV; - break; - - case PICT_r5g6b5: - *tex_format = GL_RGB; - *tex_type = GL_UNSIGNED_SHORT_5_6_5; - break; - case PICT_b5g6r5: - *tex_format = GL_RGB; - *tex_type = GL_UNSIGNED_SHORT_5_6_5_REV; - break; - case PICT_x1b5g5r5: - *no_alpha = 1; - case PICT_a1b5g5r5: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; - break; - - case PICT_x1r5g5b5: - *no_alpha = 1; - case PICT_a1r5g5b5: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; - break; - case PICT_a8: - *tex_format = GL_ALPHA; - *tex_type = GL_UNSIGNED_BYTE; - break; - case PICT_x4r4g4b4: - *no_alpha = 1; - case PICT_a4r4g4b4: - *tex_format = GL_BGRA; - *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV; - break; - - case PICT_x4b4g4r4: - *no_alpha = 1; - case PICT_a4b4g4r4: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV; - break; - - default: - LogMessageVerb(X_INFO, 0, - "fail to get matched format for %x \n", - format); - return -1; - } - return 0; + *no_alpha = 0; + *revert = REVERT_NONE; + *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING; + switch (format) { + case PICT_a1: + *tex_format = GL_ALPHA; + *tex_type = GL_UNSIGNED_BYTE; + *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1; + break; + case PICT_b8g8r8x8: + *no_alpha = 1; + case PICT_b8g8r8a8: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_INT_8_8_8_8; + break; + + case PICT_x8r8g8b8: + *no_alpha = 1; + case PICT_a8r8g8b8: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV; + break; + case PICT_x8b8g8r8: + *no_alpha = 1; + case PICT_a8b8g8r8: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_INT_8_8_8_8_REV; + break; + case PICT_x2r10g10b10: + *no_alpha = 1; + case PICT_a2r10g10b10: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV; + break; + case PICT_x2b10g10r10: + *no_alpha = 1; + case PICT_a2b10g10r10: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_INT_2_10_10_10_REV; + break; + + case PICT_r5g6b5: + *tex_format = GL_RGB; + *tex_type = GL_UNSIGNED_SHORT_5_6_5; + break; + case PICT_b5g6r5: + *tex_format = GL_RGB; + *tex_type = GL_UNSIGNED_SHORT_5_6_5_REV; + break; + case PICT_x1b5g5r5: + *no_alpha = 1; + case PICT_a1b5g5r5: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; + break; + + case PICT_x1r5g5b5: + *no_alpha = 1; + case PICT_a1r5g5b5: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_SHORT_1_5_5_5_REV; + break; + case PICT_a8: + *tex_format = GL_ALPHA; + *tex_type = GL_UNSIGNED_BYTE; + break; + case PICT_x4r4g4b4: + *no_alpha = 1; + case PICT_a4r4g4b4: + *tex_format = GL_BGRA; + *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV; + break; + + case PICT_x4b4g4r4: + *no_alpha = 1; + case PICT_a4b4g4r4: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_4_4_4_4_REV; + break; + + default: + LogMessageVerb(X_INFO, 0, + "fail to get matched format for %x \n", format); + return -1; + } + return 0; } /* Currently, we use RGBA to represent all formats. */ -inline static int cache_format(GLenum format) +inline static int +cache_format(GLenum format) { - switch (format) { - case GL_ALPHA: - return 1; - case GL_RGBA: - return 0; - default: - return -1; - } + switch (format) { + case GL_ALPHA: + return 1; + case GL_RGBA: + return 0; + default: + return -1; + } } #else @@ -1054,782 +1041,807 @@ inline static int cache_format(GLenum format) static inline int glamor_get_tex_format_type_from_pictformat(PictFormatShort format, - GLenum * tex_format, - GLenum * tex_type, - int *no_alpha, - int *revert, - int *swap_rb, - int is_upload) + GLenum * tex_format, + GLenum * tex_type, + int *no_alpha, + int *revert, + int *swap_rb, int is_upload) { - int need_swap_rb = 0; - - *no_alpha = 0; - *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL; - - switch (format) { - case PICT_b8g8r8x8: - *no_alpha = 1; - case PICT_b8g8r8a8: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_BYTE; - need_swap_rb = 1; - *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; - break; - - case PICT_x8r8g8b8: - *no_alpha = 1; - case PICT_a8r8g8b8: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_BYTE; - need_swap_rb = 1; - break; - - case PICT_x8b8g8r8: - *no_alpha = 1; - case PICT_a8b8g8r8: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_BYTE; - break; - - case PICT_x2r10g10b10: - *no_alpha = 1; - case PICT_a2r10g10b10: - *tex_format = GL_RGBA; - /* glReadPixmap doesn't support GL_UNSIGNED_INT_10_10_10_2. - * we have to use GL_UNSIGNED_BYTE and do the conversion in - * shader latter.*/ - *tex_type = GL_UNSIGNED_BYTE; - if (is_upload == 1) { - if (!IS_LITTLE_ENDIAN) - *revert = REVERT_UPLOADING_10_10_10_2; - else - *revert = REVERT_UPLOADING_2_10_10_10; - } - else { - if (!IS_LITTLE_ENDIAN) { - *revert = REVERT_DOWNLOADING_10_10_10_2; - } - else { - *revert = REVERT_DOWNLOADING_2_10_10_10; - } - } - need_swap_rb = 1; - - break; - - case PICT_x2b10g10r10: - *no_alpha = 1; - case PICT_a2b10g10r10: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_BYTE; - if (is_upload == 1) { - if (!IS_LITTLE_ENDIAN) - *revert = REVERT_UPLOADING_10_10_10_2; - else - *revert = REVERT_UPLOADING_2_10_10_10; - } - else { - if (!IS_LITTLE_ENDIAN) { - *revert = REVERT_DOWNLOADING_10_10_10_2; - } - else { - *revert = REVERT_DOWNLOADING_2_10_10_10; - } - } - break; - - case PICT_r5g6b5: - *tex_format = GL_RGB; - *tex_type = GL_UNSIGNED_SHORT_5_6_5; - *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL; - - break; - - case PICT_b5g6r5: - *tex_format = GL_RGB; - *tex_type = GL_UNSIGNED_SHORT_5_6_5; - need_swap_rb = IS_LITTLE_ENDIAN ? 1 : 0;; - break; - - case PICT_x1b5g5r5: - *no_alpha = 1; - case PICT_a1b5g5r5: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; - if (IS_LITTLE_ENDIAN) { - *revert = is_upload ? REVERT_UPLOADING_1_5_5_5 : REVERT_DOWNLOADING_1_5_5_5; - } else - *revert = REVERT_NONE; - break; - - case PICT_x1r5g5b5: - *no_alpha = 1; - case PICT_a1r5g5b5: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; - if (IS_LITTLE_ENDIAN) { - *revert = is_upload ? REVERT_UPLOADING_1_5_5_5 : REVERT_DOWNLOADING_1_5_5_5; - } else - *revert = REVERT_NONE; - need_swap_rb = 1; - break; - - case PICT_a1: - *tex_format = GL_ALPHA; - *tex_type = GL_UNSIGNED_BYTE; - *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1; - break; - - case PICT_a8: - *tex_format = GL_ALPHA; - *tex_type = GL_UNSIGNED_BYTE; - *revert = REVERT_NONE; - break; - - case PICT_x4r4g4b4: - *no_alpha = 1; - case PICT_a4r4g4b4: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_4_4_4_4; - *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; - need_swap_rb = 1; - break; - - case PICT_x4b4g4r4: - *no_alpha = 1; - case PICT_a4b4g4r4: - *tex_format = GL_RGBA; - *tex_type = GL_UNSIGNED_SHORT_4_4_4_4; - *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; - break; - - default: - LogMessageVerb(X_INFO, 0, - "fail to get matched format for %x \n", - format); - return -1; - } - - if (need_swap_rb) - *swap_rb = is_upload ? SWAP_UPLOADING : SWAP_DOWNLOADING; - else - *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING; - return 0; + int need_swap_rb = 0; + + *no_alpha = 0; + *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL; + + switch (format) { + case PICT_b8g8r8x8: + *no_alpha = 1; + case PICT_b8g8r8a8: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_BYTE; + need_swap_rb = 1; + *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; + break; + + case PICT_x8r8g8b8: + *no_alpha = 1; + case PICT_a8r8g8b8: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_BYTE; + need_swap_rb = 1; + break; + + case PICT_x8b8g8r8: + *no_alpha = 1; + case PICT_a8b8g8r8: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_BYTE; + break; + + case PICT_x2r10g10b10: + *no_alpha = 1; + case PICT_a2r10g10b10: + *tex_format = GL_RGBA; + /* glReadPixmap doesn't support GL_UNSIGNED_INT_10_10_10_2. + * we have to use GL_UNSIGNED_BYTE and do the conversion in + * shader latter.*/ + *tex_type = GL_UNSIGNED_BYTE; + if (is_upload == 1) { + if (!IS_LITTLE_ENDIAN) + *revert = REVERT_UPLOADING_10_10_10_2; + else + *revert = REVERT_UPLOADING_2_10_10_10; + } + else { + if (!IS_LITTLE_ENDIAN) { + *revert = REVERT_DOWNLOADING_10_10_10_2; + } + else { + *revert = REVERT_DOWNLOADING_2_10_10_10; + } + } + need_swap_rb = 1; + + break; + + case PICT_x2b10g10r10: + *no_alpha = 1; + case PICT_a2b10g10r10: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_BYTE; + if (is_upload == 1) { + if (!IS_LITTLE_ENDIAN) + *revert = REVERT_UPLOADING_10_10_10_2; + else + *revert = REVERT_UPLOADING_2_10_10_10; + } + else { + if (!IS_LITTLE_ENDIAN) { + *revert = REVERT_DOWNLOADING_10_10_10_2; + } + else { + *revert = REVERT_DOWNLOADING_2_10_10_10; + } + } + break; + + case PICT_r5g6b5: + *tex_format = GL_RGB; + *tex_type = GL_UNSIGNED_SHORT_5_6_5; + *revert = IS_LITTLE_ENDIAN ? REVERT_NONE : REVERT_NORMAL; + + break; + + case PICT_b5g6r5: + *tex_format = GL_RGB; + *tex_type = GL_UNSIGNED_SHORT_5_6_5; + need_swap_rb = IS_LITTLE_ENDIAN ? 1 : 0;; + break; + + case PICT_x1b5g5r5: + *no_alpha = 1; + case PICT_a1b5g5r5: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; + if (IS_LITTLE_ENDIAN) { + *revert = + is_upload ? REVERT_UPLOADING_1_5_5_5 : + REVERT_DOWNLOADING_1_5_5_5; + } + else + *revert = REVERT_NONE; + break; + + case PICT_x1r5g5b5: + *no_alpha = 1; + case PICT_a1r5g5b5: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_5_5_5_1; + if (IS_LITTLE_ENDIAN) { + *revert = + is_upload ? REVERT_UPLOADING_1_5_5_5 : + REVERT_DOWNLOADING_1_5_5_5; + } + else + *revert = REVERT_NONE; + need_swap_rb = 1; + break; + + case PICT_a1: + *tex_format = GL_ALPHA; + *tex_type = GL_UNSIGNED_BYTE; + *revert = is_upload ? REVERT_UPLOADING_A1 : REVERT_DOWNLOADING_A1; + break; + + case PICT_a8: + *tex_format = GL_ALPHA; + *tex_type = GL_UNSIGNED_BYTE; + *revert = REVERT_NONE; + break; + + case PICT_x4r4g4b4: + *no_alpha = 1; + case PICT_a4r4g4b4: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_4_4_4_4; + *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; + need_swap_rb = 1; + break; + + case PICT_x4b4g4r4: + *no_alpha = 1; + case PICT_a4b4g4r4: + *tex_format = GL_RGBA; + *tex_type = GL_UNSIGNED_SHORT_4_4_4_4; + *revert = IS_LITTLE_ENDIAN ? REVERT_NORMAL : REVERT_NONE; + break; + + default: + LogMessageVerb(X_INFO, 0, + "fail to get matched format for %x \n", format); + return -1; + } + + if (need_swap_rb) + *swap_rb = is_upload ? SWAP_UPLOADING : SWAP_DOWNLOADING; + else + *swap_rb = is_upload ? SWAP_NONE_UPLOADING : SWAP_NONE_DOWNLOADING; + return 0; } -inline static int cache_format(GLenum format) +inline static int +cache_format(GLenum format) { - switch (format) { - case GL_ALPHA: - return 2; - case GL_RGB: - return 1; - case GL_RGBA: - return 0; - default: - return -1; - } + switch (format) { + case GL_ALPHA: + return 2; + case GL_RGB: + return 1; + case GL_RGBA: + return 0; + default: + return -1; + } } #endif - static inline int glamor_get_tex_format_type_from_pixmap(PixmapPtr pixmap, - GLenum * format, - GLenum * type, - int *no_alpha, - int *revert, - int *swap_rb, - int is_upload) + GLenum * format, + GLenum * type, + int *no_alpha, + int *revert, int *swap_rb, int is_upload) { - glamor_pixmap_private *pixmap_priv; - PictFormatShort pict_format; - - pixmap_priv = glamor_get_pixmap_private(pixmap); - if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) - pict_format = pixmap_priv->base.picture->format; - else - pict_format = format_for_depth(pixmap->drawable.depth); - - return glamor_get_tex_format_type_from_pictformat(pict_format, - format, type, - no_alpha, - revert, - swap_rb, - is_upload); + glamor_pixmap_private *pixmap_priv; + PictFormatShort pict_format; + + pixmap_priv = glamor_get_pixmap_private(pixmap); + if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv)) + pict_format = pixmap_priv->base.picture->format; + else + pict_format = format_for_depth(pixmap->drawable.depth); + + return glamor_get_tex_format_type_from_pictformat(pict_format, + format, type, + no_alpha, + revert, + swap_rb, is_upload); } - /* borrowed from uxa */ static inline Bool glamor_get_rgba_from_pixel(CARD32 pixel, - float *red, - float *green, - float *blue, float *alpha, CARD32 format) + float *red, + float *green, + float *blue, float *alpha, CARD32 format) { - int rbits, bbits, gbits, abits; - int rshift, bshift, gshift, ashift; - - rbits = PICT_FORMAT_R(format); - gbits = PICT_FORMAT_G(format); - bbits = PICT_FORMAT_B(format); - abits = PICT_FORMAT_A(format); - - if (PICT_FORMAT_TYPE(format) == PICT_TYPE_A) { - rshift = gshift = bshift = ashift = 0; - } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) { - bshift = 0; - gshift = bbits; - rshift = gshift + gbits; - ashift = rshift + rbits; - } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) { - rshift = 0; - gshift = rbits; - bshift = gshift + gbits; - ashift = bshift + bbits; + int rbits, bbits, gbits, abits; + int rshift, bshift, gshift, ashift; + + rbits = PICT_FORMAT_R(format); + gbits = PICT_FORMAT_G(format); + bbits = PICT_FORMAT_B(format); + abits = PICT_FORMAT_A(format); + + if (PICT_FORMAT_TYPE(format) == PICT_TYPE_A) { + rshift = gshift = bshift = ashift = 0; + } + else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ARGB) { + bshift = 0; + gshift = bbits; + rshift = gshift + gbits; + ashift = rshift + rbits; + } + else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_ABGR) { + rshift = 0; + gshift = rbits; + bshift = gshift + gbits; + ashift = bshift + bbits; #if XORG_VERSION_CURRENT >= 10699900 - } else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) { - ashift = 0; - rshift = abits; - if (abits == 0) - rshift = PICT_FORMAT_BPP(format) - (rbits + gbits + - bbits); - gshift = rshift + rbits; - bshift = gshift + gbits; + } + else if (PICT_FORMAT_TYPE(format) == PICT_TYPE_BGRA) { + ashift = 0; + rshift = abits; + if (abits == 0) + rshift = PICT_FORMAT_BPP(format) - (rbits + gbits + bbits); + gshift = rshift + rbits; + bshift = gshift + gbits; #endif - } else { - return FALSE; - } + } + else { + return FALSE; + } #define COLOR_INT_TO_FLOAT(_fc_, _p_, _s_, _bits_) \ *_fc_ = (((_p_) >> (_s_)) & (( 1 << (_bits_)) - 1)) \ / (float)((1<<(_bits_)) - 1) - if (rbits) - COLOR_INT_TO_FLOAT(red, pixel, rshift, rbits); - else - *red = 0; + if (rbits) + COLOR_INT_TO_FLOAT(red, pixel, rshift, rbits); + else + *red = 0; - if (gbits) - COLOR_INT_TO_FLOAT(green, pixel, gshift, gbits); - else - *green = 0; + if (gbits) + COLOR_INT_TO_FLOAT(green, pixel, gshift, gbits); + else + *green = 0; - if (bbits) - COLOR_INT_TO_FLOAT(blue, pixel, bshift, bbits); - else - *blue = 0; + if (bbits) + COLOR_INT_TO_FLOAT(blue, pixel, bshift, bbits); + else + *blue = 0; - if (abits) - COLOR_INT_TO_FLOAT(alpha, pixel, ashift, abits); - else - *alpha = 1; + if (abits) + COLOR_INT_TO_FLOAT(alpha, pixel, ashift, abits); + else + *alpha = 1; - return TRUE; + return TRUE; } -inline static Bool glamor_pict_format_is_compatible(PictFormatShort pict_format, int depth) +inline static Bool +glamor_pict_format_is_compatible(PictFormatShort pict_format, int depth) { - GLenum iformat; - - gl_iformat_for_depth(depth, &iformat); - switch (iformat) { - case GL_RGBA: - return (pict_format == PICT_a8r8g8b8 || pict_format == PICT_x8r8g8b8); - case GL_ALPHA: - return (pict_format == PICT_a8); - default: - return FALSE; - } + GLenum iformat; + + gl_iformat_for_depth(depth, &iformat); + switch (iformat) { + case GL_RGBA: + return (pict_format == PICT_a8r8g8b8 || pict_format == PICT_x8r8g8b8); + case GL_ALPHA: + return (pict_format == PICT_a8); + default: + return FALSE; + } } /* return TRUE if we can access this pixmap at DDX driver. */ -inline static Bool glamor_ddx_fallback_check_pixmap(DrawablePtr drawable) +inline static Bool +glamor_ddx_fallback_check_pixmap(DrawablePtr drawable) { - PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); - glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); - return (!pixmap_priv - || (pixmap_priv->type == GLAMOR_TEXTURE_DRM - || pixmap_priv->type == GLAMOR_MEMORY - || pixmap_priv->type == GLAMOR_DRM_ONLY)); + PixmapPtr pixmap = glamor_get_drawable_pixmap(drawable); + glamor_pixmap_private *pixmap_priv = glamor_get_pixmap_private(pixmap); + + return (!pixmap_priv + || (pixmap_priv->type == GLAMOR_TEXTURE_DRM + || pixmap_priv->type == GLAMOR_MEMORY + || pixmap_priv->type == GLAMOR_DRM_ONLY)); } -inline static Bool glamor_ddx_fallback_check_gc(GCPtr gc) +inline static Bool +glamor_ddx_fallback_check_gc(GCPtr gc) { - PixmapPtr pixmap; - if (!gc) - return TRUE; - switch (gc->fillStyle) { - case FillStippled: - case FillOpaqueStippled: - pixmap = gc->stipple; - break; - case FillTiled: - pixmap = gc->tile.pixmap; - break; - default: - pixmap = NULL; - } - return (!pixmap || glamor_ddx_fallback_check_pixmap(&pixmap->drawable)); + PixmapPtr pixmap; + + if (!gc) + return TRUE; + switch (gc->fillStyle) { + case FillStippled: + case FillOpaqueStippled: + pixmap = gc->stipple; + break; + case FillTiled: + pixmap = gc->tile.pixmap; + break; + default: + pixmap = NULL; + } + return (!pixmap || glamor_ddx_fallback_check_pixmap(&pixmap->drawable)); } -inline static Bool glamor_is_large_pixmap(PixmapPtr pixmap) + +inline static Bool +glamor_is_large_pixmap(PixmapPtr pixmap) { - glamor_pixmap_private *priv; + glamor_pixmap_private *priv; - priv = glamor_get_pixmap_private(pixmap); - return (priv->type == GLAMOR_TEXTURE_LARGE); + priv = glamor_get_pixmap_private(pixmap); + return (priv->type == GLAMOR_TEXTURE_LARGE); } -inline static Bool glamor_is_large_picture(PicturePtr picture) +inline static Bool +glamor_is_large_picture(PicturePtr picture) { - PixmapPtr pixmap; + PixmapPtr pixmap; - if (picture->pDrawable) { - pixmap = glamor_get_drawable_pixmap(picture->pDrawable); - return glamor_is_large_pixmap(pixmap); - } - return FALSE; + if (picture->pDrawable) { + pixmap = glamor_get_drawable_pixmap(picture->pDrawable); + return glamor_is_large_pixmap(pixmap); + } + return FALSE; } -inline static Bool glamor_tex_format_is_readable(GLenum format) +inline static Bool +glamor_tex_format_is_readable(GLenum format) { - return ((format == GL_RGBA || format == GL_RGB || format == GL_ALPHA)); + return ((format == GL_RGBA || format == GL_RGB || format == GL_ALPHA)); } -static inline void _glamor_dump_pixmap_bits(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +_glamor_dump_pixmap_bits(PixmapPtr pixmap, int x, int y, int w, int h) { - int i,j; - unsigned char * p = pixmap->devPrivate.ptr; - int stride = pixmap->devKind; - - p = p + y * stride + x; - - for (i = 0; i < h; i++) - { - ErrorF("line %3d: ", i); - for(j = 0; j < w; j++) - ErrorF("%2d ", (p[j/8] & (1 << (j%8)))>>(j%8)); - p += stride; - ErrorF("\n"); - } + int i, j; + unsigned char *p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + for (j = 0; j < w; j++) + ErrorF("%2d ", (p[j / 8] & (1 << (j % 8))) >> (j % 8)); + p += stride; + ErrorF("\n"); + } } -static inline void _glamor_dump_pixmap_byte(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +_glamor_dump_pixmap_byte(PixmapPtr pixmap, int x, int y, int w, int h) { - int i,j; - unsigned char * p = pixmap->devPrivate.ptr; - int stride = pixmap->devKind; - - p = p + y * stride + x; - - for (i = 0; i < h; i++) - { - ErrorF("line %3d: ", i); - for(j = 0; j < w; j++) - ErrorF("%2x ", p[j]); - p += stride; - ErrorF("\n"); - } + int i, j; + unsigned char *p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + for (j = 0; j < w; j++) + ErrorF("%2x ", p[j]); + p += stride; + ErrorF("\n"); + } } -static inline void _glamor_dump_pixmap_sword(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +_glamor_dump_pixmap_sword(PixmapPtr pixmap, int x, int y, int w, int h) { - int i,j; - unsigned short * p = pixmap->devPrivate.ptr; - int stride = pixmap->devKind / 2; - - p = p + y * stride + x; - - for (i = 0; i < h; i++) - { - ErrorF("line %3d: ", i); - for(j = 0; j < w; j++) - ErrorF("%2x ", p[j]); - p += stride; - ErrorF("\n"); - } + int i, j; + unsigned short *p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind / 2; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + for (j = 0; j < w; j++) + ErrorF("%2x ", p[j]); + p += stride; + ErrorF("\n"); + } } -static inline void _glamor_dump_pixmap_word(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +_glamor_dump_pixmap_word(PixmapPtr pixmap, int x, int y, int w, int h) { - int i,j; - unsigned int * p = pixmap->devPrivate.ptr; - int stride = pixmap->devKind / 4; - - p = p + y * stride + x; - - for (i = 0; i < h; i++) - { - ErrorF("line %3d: ", i); - for(j = 0; j < w; j++) - ErrorF("%2x ", p[j]); - p += stride; - ErrorF("\n"); - } + int i, j; + unsigned int *p = pixmap->devPrivate.ptr; + int stride = pixmap->devKind / 4; + + p = p + y * stride + x; + + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + for (j = 0; j < w; j++) + ErrorF("%2x ", p[j]); + p += stride; + ErrorF("\n"); + } } -static inline void glamor_dump_pixmap(PixmapPtr pixmap, int x, int y, int w, int h) +static inline void +glamor_dump_pixmap(PixmapPtr pixmap, int x, int y, int w, int h) { - w = ((x + w) > pixmap->drawable.width) ? (pixmap->drawable.width - x) : w; - h = ((y + h) > pixmap->drawable.height) ? (pixmap->drawable.height - y) : h; - - glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO); - switch (pixmap->drawable.depth) { - case 8: - _glamor_dump_pixmap_byte(pixmap, x, y, w, h); - break; - case 15: - case 16: - _glamor_dump_pixmap_sword(pixmap, x, y, w, h); - break; - - case 24: - case 32: - _glamor_dump_pixmap_word(pixmap, x, y, w, h); - break; - case 1: - _glamor_dump_pixmap_bits(pixmap, x, y, w, h); - break; - default: - ErrorF("dump depth %d, not implemented.\n", pixmap->drawable.depth); - } - glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); + w = ((x + w) > pixmap->drawable.width) ? (pixmap->drawable.width - x) : w; + h = ((y + h) > pixmap->drawable.height) ? (pixmap->drawable.height - y) : h; + + glamor_prepare_access(&pixmap->drawable, GLAMOR_ACCESS_RO); + switch (pixmap->drawable.depth) { + case 8: + _glamor_dump_pixmap_byte(pixmap, x, y, w, h); + break; + case 15: + case 16: + _glamor_dump_pixmap_sword(pixmap, x, y, w, h); + break; + + case 24: + case 32: + _glamor_dump_pixmap_word(pixmap, x, y, w, h); + break; + case 1: + _glamor_dump_pixmap_bits(pixmap, x, y, w, h); + break; + default: + ErrorF("dump depth %d, not implemented.\n", pixmap->drawable.depth); + } + glamor_finish_access(&pixmap->drawable, GLAMOR_ACCESS_RO); } -static inline void _glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2, - int x, int y, int w, int h, - PictFormatShort short_format, - int all, int diffs) +static inline void +_glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2, + int x, int y, int w, int h, + PictFormatShort short_format, int all, int diffs) { - int i, j; - unsigned char * p1 = pixmap1->devPrivate.ptr; - unsigned char * p2 = pixmap2->devPrivate.ptr; - int line_need_printed = 0; - int test_code = 0xAABBCCDD; - int little_endian = 0; - unsigned char *p_test; - int bpp = pixmap1->drawable.depth == 8 ? 1 : 4; - int stride = pixmap1->devKind; - - assert(pixmap1->devKind == pixmap2->devKind); - - ErrorF("stride:%d, width:%d, height:%d\n", stride, w, h); - - p1 = p1 + y * stride + x; - p2 = p2 + y * stride + x; - - if (all) { - for (i = 0; i < h; i++) { - ErrorF("line %3d: ", i); - - for (j = 0; j < stride; j++) { - if (j % bpp == 0) - ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]); - else - ErrorF("%2x:%2x ", p1[j], p2[j]); - } - - p1 += stride; - p2 += stride; - ErrorF("\n"); - } - } else { - if (short_format == PICT_a8r8g8b8) { - p_test = (unsigned char *) & test_code; - little_endian = (*p_test == 0xDD); - bpp = 4; - - for (i = 0; i < h; i++) { - line_need_printed = 0; - - for (j = 0; j < stride; j++) { - if (p1[j] != p2[j] && (p1[j] - p2[j] > diffs || p2[j] - p1[j] > diffs)) { - if (line_need_printed) { - if (little_endian) { - switch (j % 4) { - case 2: - ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 1: - ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 0: - ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 3: - ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - } - } else { - switch (j % 4) { - case 1: - ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 2: - ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 3: - ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - case 0: - ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], p2[j]); - break; - } - } - } else { - line_need_printed = 1; - j = -1; - ErrorF("line %3d: ", i); - continue; - } - } - } - - p1 += stride; - p2 += stride; - ErrorF("\n"); - } - } //more format can be added here. - else { // the default format, just print. - for (i = 0; i < h; i++) { - line_need_printed = 0; - - for (j = 0; j < stride; j++) { - if (p1[j] != p2[j]) { - if (line_need_printed) { - ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]); - } else { - line_need_printed = 1; - j = -1; - ErrorF("line %3d: ", i); - continue; - } - } - } - - p1 += stride; - p2 += stride; - ErrorF("\n"); - } - } - } + int i, j; + unsigned char *p1 = pixmap1->devPrivate.ptr; + unsigned char *p2 = pixmap2->devPrivate.ptr; + int line_need_printed = 0; + int test_code = 0xAABBCCDD; + int little_endian = 0; + unsigned char *p_test; + int bpp = pixmap1->drawable.depth == 8 ? 1 : 4; + int stride = pixmap1->devKind; + + assert(pixmap1->devKind == pixmap2->devKind); + + ErrorF("stride:%d, width:%d, height:%d\n", stride, w, h); + + p1 = p1 + y * stride + x; + p2 = p2 + y * stride + x; + + if (all) { + for (i = 0; i < h; i++) { + ErrorF("line %3d: ", i); + + for (j = 0; j < stride; j++) { + if (j % bpp == 0) + ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]); + else + ErrorF("%2x:%2x ", p1[j], p2[j]); + } + + p1 += stride; + p2 += stride; + ErrorF("\n"); + } + } + else { + if (short_format == PICT_a8r8g8b8) { + p_test = (unsigned char *) &test_code; + little_endian = (*p_test == 0xDD); + bpp = 4; + + for (i = 0; i < h; i++) { + line_need_printed = 0; + + for (j = 0; j < stride; j++) { + if (p1[j] != p2[j] && + (p1[j] - p2[j] > diffs || p2[j] - p1[j] > diffs)) { + if (line_need_printed) { + if (little_endian) { + switch (j % 4) { + case 2: + ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 1: + ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 0: + ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 3: + ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + } + } + else { + switch (j % 4) { + case 1: + ErrorF("[%d]RED:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 2: + ErrorF("[%d]GREEN:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 3: + ErrorF("[%d]BLUE:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + case 0: + ErrorF("[%d]Alpha:%2x:%2x ", j / bpp, p1[j], + p2[j]); + break; + } + } + } + else { + line_need_printed = 1; + j = -1; + ErrorF("line %3d: ", i); + continue; + } + } + } + + p1 += stride; + p2 += stride; + ErrorF("\n"); + } + } //more format can be added here. + else { // the default format, just print. + for (i = 0; i < h; i++) { + line_need_printed = 0; + + for (j = 0; j < stride; j++) { + if (p1[j] != p2[j]) { + if (line_need_printed) { + ErrorF("[%d]%2x:%2x ", j / bpp, p1[j], p2[j]); + } + else { + line_need_printed = 1; + j = -1; + ErrorF("line %3d: ", i); + continue; + } + } + } + + p1 += stride; + p2 += stride; + ErrorF("\n"); + } + } + } } -static inline void glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2, - int x, int y, int w, int h, int all, int diffs) +static inline void +glamor_compare_pixmaps(PixmapPtr pixmap1, PixmapPtr pixmap2, + int x, int y, int w, int h, int all, int diffs) { - assert(pixmap1->drawable.depth == pixmap2->drawable.depth); + assert(pixmap1->drawable.depth == pixmap2->drawable.depth); - glamor_prepare_access(&pixmap1->drawable, GLAMOR_ACCESS_RO); - glamor_prepare_access(&pixmap2->drawable, GLAMOR_ACCESS_RO); + glamor_prepare_access(&pixmap1->drawable, GLAMOR_ACCESS_RO); + glamor_prepare_access(&pixmap2->drawable, GLAMOR_ACCESS_RO); - _glamor_compare_pixmaps(pixmap1, pixmap2, x, y, w, h, -1, all, diffs); + _glamor_compare_pixmaps(pixmap1, pixmap2, x, y, w, h, -1, all, diffs); - glamor_finish_access(&pixmap1->drawable, GLAMOR_ACCESS_RO); - glamor_finish_access(&pixmap2->drawable, GLAMOR_ACCESS_RO); + glamor_finish_access(&pixmap1->drawable, GLAMOR_ACCESS_RO); + glamor_finish_access(&pixmap2->drawable, GLAMOR_ACCESS_RO); } /* This function is used to compare two pictures. If the picture has no drawable, we use fb functions to generate it. */ -static inline void glamor_compare_pictures( ScreenPtr screen, - PicturePtr fst_picture, - PicturePtr snd_picture, - int x_source, int y_source, - int width, int height, - int all, int diffs) +static inline void +glamor_compare_pictures(ScreenPtr screen, + PicturePtr fst_picture, + PicturePtr snd_picture, + int x_source, int y_source, + int width, int height, int all, int diffs) { - PixmapPtr fst_pixmap; - PixmapPtr snd_pixmap; - int fst_generated, snd_generated; - int error; - int fst_type = -1; - int snd_type = -1; // -1 represent has drawable. - - if (fst_picture->format != snd_picture->format) { - ErrorF("Different picture format can not compare!\n"); - return; - } - - if (!fst_picture->pDrawable) { - fst_type = fst_picture->pSourcePict->type; - } - - if (!snd_picture->pDrawable) { - snd_type = snd_picture->pSourcePict->type; - } - - if ((fst_type != -1) && (snd_type != -1) && (fst_type != snd_type)) { - ErrorF("Different picture type will never be same!\n"); - return; - } - - fst_generated = snd_generated = 0; - - if (!fst_picture->pDrawable) { - PicturePtr pixman_pic; - PixmapPtr pixmap = NULL; - PictFormatShort format; - - format = fst_picture->format; - - pixmap = glamor_create_pixmap(screen, - width, height, - PIXMAN_FORMAT_DEPTH(format), - GLAMOR_CREATE_PIXMAP_CPU); - - pixman_pic = CreatePicture(0, - &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), format), - 0, 0, serverClient, &error); - - fbComposite(PictOpSrc, fst_picture, NULL, pixman_pic, - x_source, y_source, - 0, 0, - 0, 0, - width, height); - - glamor_destroy_pixmap(pixmap); - - fst_picture = pixman_pic; - fst_generated = 1; - } - - if (!snd_picture->pDrawable) { - PicturePtr pixman_pic; - PixmapPtr pixmap = NULL; - PictFormatShort format; - - format = snd_picture->format; - - pixmap = glamor_create_pixmap(screen, - width, height, - PIXMAN_FORMAT_DEPTH(format), - GLAMOR_CREATE_PIXMAP_CPU); - - pixman_pic = CreatePicture(0, - &pixmap->drawable, - PictureMatchFormat(screen, - PIXMAN_FORMAT_DEPTH(format), format), - 0, 0, serverClient, &error); - - fbComposite(PictOpSrc, snd_picture, NULL, pixman_pic, - x_source, y_source, - 0, 0, - 0, 0, - width, height); - - glamor_destroy_pixmap(pixmap); - - snd_picture = pixman_pic; - snd_generated = 1; - } - - fst_pixmap = glamor_get_drawable_pixmap(fst_picture->pDrawable); - snd_pixmap = glamor_get_drawable_pixmap(snd_picture->pDrawable); - - if (fst_pixmap->drawable.depth != snd_pixmap->drawable.depth) { - if (fst_generated) - glamor_destroy_picture(fst_picture); - if (snd_generated) - glamor_destroy_picture(snd_picture); - - ErrorF("Different pixmap depth can not compare!\n"); - return; - } - - glamor_prepare_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO); - glamor_prepare_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO); - - if ((fst_type == SourcePictTypeLinear) || - (fst_type == SourcePictTypeRadial) || - (fst_type == SourcePictTypeConical) || - (snd_type == SourcePictTypeLinear) || - (snd_type == SourcePictTypeRadial) || - (snd_type == SourcePictTypeConical)) { - x_source = y_source = 0; - } - - _glamor_compare_pixmaps(fst_pixmap, snd_pixmap, - x_source, y_source, - width, height, - fst_picture->format, all, diffs); - - glamor_finish_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO); - glamor_finish_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO); - - if (fst_generated) - glamor_destroy_picture(fst_picture); - if (snd_generated) - glamor_destroy_picture(snd_picture); - - return; + PixmapPtr fst_pixmap; + PixmapPtr snd_pixmap; + int fst_generated, snd_generated; + int error; + int fst_type = -1; + int snd_type = -1; // -1 represent has drawable. + + if (fst_picture->format != snd_picture->format) { + ErrorF("Different picture format can not compare!\n"); + return; + } + + if (!fst_picture->pDrawable) { + fst_type = fst_picture->pSourcePict->type; + } + + if (!snd_picture->pDrawable) { + snd_type = snd_picture->pSourcePict->type; + } + + if ((fst_type != -1) && (snd_type != -1) && (fst_type != snd_type)) { + ErrorF("Different picture type will never be same!\n"); + return; + } + + fst_generated = snd_generated = 0; + + if (!fst_picture->pDrawable) { + PicturePtr pixman_pic; + PixmapPtr pixmap = NULL; + PictFormatShort format; + + format = fst_picture->format; + + pixmap = glamor_create_pixmap(screen, + width, height, + PIXMAN_FORMAT_DEPTH(format), + GLAMOR_CREATE_PIXMAP_CPU); + + pixman_pic = CreatePicture(0, + &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH + (format), format), 0, 0, + serverClient, &error); + + fbComposite(PictOpSrc, fst_picture, NULL, pixman_pic, + x_source, y_source, 0, 0, 0, 0, width, height); + + glamor_destroy_pixmap(pixmap); + + fst_picture = pixman_pic; + fst_generated = 1; + } + + if (!snd_picture->pDrawable) { + PicturePtr pixman_pic; + PixmapPtr pixmap = NULL; + PictFormatShort format; + + format = snd_picture->format; + + pixmap = glamor_create_pixmap(screen, + width, height, + PIXMAN_FORMAT_DEPTH(format), + GLAMOR_CREATE_PIXMAP_CPU); + + pixman_pic = CreatePicture(0, + &pixmap->drawable, + PictureMatchFormat(screen, + PIXMAN_FORMAT_DEPTH + (format), format), 0, 0, + serverClient, &error); + + fbComposite(PictOpSrc, snd_picture, NULL, pixman_pic, + x_source, y_source, 0, 0, 0, 0, width, height); + + glamor_destroy_pixmap(pixmap); + + snd_picture = pixman_pic; + snd_generated = 1; + } + + fst_pixmap = glamor_get_drawable_pixmap(fst_picture->pDrawable); + snd_pixmap = glamor_get_drawable_pixmap(snd_picture->pDrawable); + + if (fst_pixmap->drawable.depth != snd_pixmap->drawable.depth) { + if (fst_generated) + glamor_destroy_picture(fst_picture); + if (snd_generated) + glamor_destroy_picture(snd_picture); + + ErrorF("Different pixmap depth can not compare!\n"); + return; + } + + glamor_prepare_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO); + glamor_prepare_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO); + + if ((fst_type == SourcePictTypeLinear) || + (fst_type == SourcePictTypeRadial) || + (fst_type == SourcePictTypeConical) || + (snd_type == SourcePictTypeLinear) || + (snd_type == SourcePictTypeRadial) || + (snd_type == SourcePictTypeConical)) { + x_source = y_source = 0; + } + + _glamor_compare_pixmaps(fst_pixmap, snd_pixmap, + x_source, y_source, + width, height, fst_picture->format, all, diffs); + + glamor_finish_access(&fst_pixmap->drawable, GLAMOR_ACCESS_RO); + glamor_finish_access(&snd_pixmap->drawable, GLAMOR_ACCESS_RO); + + if (fst_generated) + glamor_destroy_picture(fst_picture); + if (snd_generated) + glamor_destroy_picture(snd_picture); + + return; } #ifdef __i386__ -static inline unsigned long __fls(unsigned long x) +static inline unsigned long +__fls(unsigned long x) { - asm("bsr %1,%0" - : "=r" (x) - : "rm" (x)); - return x; + asm("bsr %1,%0":"=r"(x) + : "rm"(x)); + return x; } #else -static inline unsigned long __fls(unsigned long x) +static inline unsigned long +__fls(unsigned long x) { - int n; - - if (x == 0) return(0); - n = 0; - if (x <= 0x0000FFFF) {n = n +16; x = x <<16;} - if (x <= 0x00FFFFFF) {n = n + 8; x = x << 8;} - if (x <= 0x0FFFFFFF) {n = n + 4; x = x << 4;} - if (x <= 0x3FFFFFFF) {n = n + 2; x = x << 2;} - if (x <= 0x7FFFFFFF) {n = n + 1;} - return 31 - n; + int n; + + if (x == 0) + return (0); + n = 0; + if (x <= 0x0000FFFF) { + n = n + 16; + x = x << 16; + } + if (x <= 0x00FFFFFF) { + n = n + 8; + x = x << 8; + } + if (x <= 0x0FFFFFFF) { + n = n + 4; + x = x << 4; + } + if (x <= 0x3FFFFFFF) { + n = n + 2; + x = x << 2; + } + if (x <= 0x7FFFFFFF) { + n = n + 1; + } + return 31 - n; } #endif -static inline void glamor_make_current(ScreenPtr screen) +static inline void +glamor_make_current(ScreenPtr screen) { - glamor_egl_make_current(screen); + glamor_egl_make_current(screen); } -static inline void glamor_restore_current(ScreenPtr screen) +static inline void +glamor_restore_current(ScreenPtr screen) { - glamor_egl_restore_context(screen); + glamor_egl_restore_context(screen); } -#ifdef GLX_USE_SHARED_DISPATCH static inline glamor_gl_dispatch * -glamor_get_dispatch(glamor_screen_private *glamor_priv) +glamor_get_dispatch(glamor_screen_private * glamor_priv) { - if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) - glamor_make_current(glamor_priv->screen); - - return &glamor_priv->_dispatch; -} + if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) + glamor_make_current(glamor_priv->screen); -static inline void -glamor_put_dispatch(glamor_screen_private *glamor_priv) -{ - if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) - glamor_restore_current(glamor_priv->screen); -} -#else -#warning "Indirect GLX may be broken, need to implement context switch." -static inline glamor_gl_dispatch * -glamor_get_dispatch(glamor_screen_private *glamor_priv) -{ - return &glamor_priv->_dispatch; + return &glamor_priv->_dispatch; } static inline void -glamor_put_dispatch(glamor_screen_private *glamor_priv) +glamor_put_dispatch(glamor_screen_private * glamor_priv) { + if (glamor_priv->flags & GLAMOR_USE_EGL_SCREEN) + glamor_restore_current(glamor_priv->screen); } #endif - -#endif diff --git a/xorg-server/glamor/glamor_window.c b/xorg-server/glamor/glamor_window.c index b67c72880..60647bf80 100644 --- a/xorg-server/glamor/glamor_window.c +++ b/xorg-server/glamor/glamor_window.c @@ -28,76 +28,72 @@ * Screen Change Window Attribute implementation. */ - static void -glamor_fixup_window_pixmap(DrawablePtr pDrawable, PixmapPtr * ppPixmap) +glamor_fixup_window_pixmap(DrawablePtr pDrawable, PixmapPtr *ppPixmap) { - PixmapPtr pPixmap = *ppPixmap; - glamor_pixmap_private *pixmap_priv; + PixmapPtr pPixmap = *ppPixmap; + glamor_pixmap_private *pixmap_priv; - if (pPixmap->drawable.bitsPerPixel != pDrawable->bitsPerPixel) { - pixmap_priv = glamor_get_pixmap_private(pPixmap); - if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { - glamor_fallback("pixmap %p has no fbo\n", pPixmap); - goto fail; - } - glamor_debug_output(GLAMOR_DEBUG_UNIMPL, - "To be implemented.\n"); - } - return; + if (pPixmap->drawable.bitsPerPixel != pDrawable->bitsPerPixel) { + pixmap_priv = glamor_get_pixmap_private(pPixmap); + if (!GLAMOR_PIXMAP_PRIV_HAS_FBO(pixmap_priv)) { + glamor_fallback("pixmap %p has no fbo\n", pPixmap); + goto fail; + } + glamor_debug_output(GLAMOR_DEBUG_UNIMPL, "To be implemented.\n"); + } + return; - fail: - GLAMOR_PANIC - (" We can't fall back to fbFixupWindowPixmap, as the fb24_32ReformatTile" - " is broken for glamor. \n"); + fail: + GLAMOR_PANIC + (" We can't fall back to fbFixupWindowPixmap, as the fb24_32ReformatTile" + " is broken for glamor. \n"); } Bool glamor_change_window_attributes(WindowPtr pWin, unsigned long mask) { - if (mask & CWBackPixmap) { - if (pWin->backgroundState == BackgroundPixmap) - glamor_fixup_window_pixmap(&pWin->drawable, - &pWin-> - background.pixmap); - } + if (mask & CWBackPixmap) { + if (pWin->backgroundState == BackgroundPixmap) + glamor_fixup_window_pixmap(&pWin->drawable, + &pWin->background.pixmap); + } - if (mask & CWBorderPixmap) { - if (pWin->borderIsPixel == FALSE) - glamor_fixup_window_pixmap(&pWin->drawable, - &pWin->border.pixmap); - } - return TRUE; + if (mask & CWBorderPixmap) { + if (pWin->borderIsPixel == FALSE) + glamor_fixup_window_pixmap(&pWin->drawable, &pWin->border.pixmap); + } + return TRUE; } void glamor_set_window_pixmap(WindowPtr win, PixmapPtr pPixmap) { - ScreenPtr screen = win->drawable.pScreen; - glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); - PixmapPtr old = screen->GetWindowPixmap(win); + ScreenPtr screen = win->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + PixmapPtr old = screen->GetWindowPixmap(win); - if (pPixmap != old) { - glamor_pixmap_private *pixmap_priv; - PicturePtr pic = NULL; + if (pPixmap != old) { + glamor_pixmap_private *pixmap_priv; + PicturePtr pic = NULL; - pixmap_priv = glamor_get_pixmap_private(old); - if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv) && pixmap_priv->base.picture->pDrawable == (DrawablePtr)win) { - pic = pixmap_priv->base.picture; - pixmap_priv->base.is_picture = 0; - pixmap_priv->base.picture = NULL; - } + pixmap_priv = glamor_get_pixmap_private(old); + if (GLAMOR_PIXMAP_PRIV_IS_PICTURE(pixmap_priv) && + pixmap_priv->base.picture->pDrawable == (DrawablePtr) win) { + pic = pixmap_priv->base.picture; + pixmap_priv->base.is_picture = 0; + pixmap_priv->base.picture = NULL; + } - pixmap_priv = glamor_get_pixmap_private(pPixmap); - if (pixmap_priv) { - pixmap_priv->base.is_picture = !!pic; - pixmap_priv->base.picture = pic; - } - } + pixmap_priv = glamor_get_pixmap_private(pPixmap); + if (pixmap_priv) { + pixmap_priv->base.is_picture = ! !pic; + pixmap_priv->base.picture = pic; + } + } - screen->SetWindowPixmap = glamor_priv->saved_procs.set_window_pixmap; - (screen->SetWindowPixmap)(win, pPixmap); - glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap; - screen->SetWindowPixmap = glamor_set_window_pixmap; + screen->SetWindowPixmap = glamor_priv->saved_procs.set_window_pixmap; + (screen->SetWindowPixmap) (win, pPixmap); + glamor_priv->saved_procs.set_window_pixmap = screen->SetWindowPixmap; + screen->SetWindowPixmap = glamor_set_window_pixmap; } diff --git a/xorg-server/glamor/glamor_xv.c b/xorg-server/glamor/glamor_xv.c index a89b4cd3f..cbe07c8b1 100644 --- a/xorg-server/glamor/glamor_xv.c +++ b/xorg-server/glamor/glamor_xv.c @@ -39,15 +39,14 @@ #include <X11/extensions/Xv.h> #include "fourcc.h" /* Reference color space transform data */ -typedef struct tagREF_TRANSFORM -{ - float RefLuma; - float RefRCb; - float RefRCr; - float RefGCb; - float RefGCr; - float RefBCb; - float RefBCr; +typedef struct tagREF_TRANSFORM { + float RefLuma; + float RefRCb; + float RefRCr; + float RefGCb; + float RefGCr; + float RefBCb; + float RefBCr; } REF_TRANSFORM; #define RTFSaturation(a) (1.0 + ((a)*1.0)/1000.0) @@ -56,590 +55,583 @@ typedef struct tagREF_TRANSFORM #define RTFContrast(a) (1.0 + ((a)*1.0)/1000.0) #define RTFHue(a) (((a)*3.1416)/1000.0) -static const char *xv_vs= "attribute vec4 v_position;\n" - "attribute vec4 v_texcoord0;\n" - "varying vec2 tcs;\n" - "void main()\n" "{\n" " gl_Position = v_position;\n" - "tcs = v_texcoord0.xy;\n" - "}\n"; +static const char *xv_vs = "attribute vec4 v_position;\n" + "attribute vec4 v_texcoord0;\n" + "varying vec2 tcs;\n" + "void main()\n" + "{\n" + " gl_Position = v_position;\n" + "tcs = v_texcoord0.xy;\n" + "}\n"; static const char *xv_ps = GLAMOR_DEFAULT_PRECISION - "uniform sampler2D y_sampler;\n" - "uniform sampler2D u_sampler;\n" - "uniform sampler2D v_sampler;\n" - "uniform vec4 offsetyco;\n" - "uniform vec4 ucogamma;\n" - "uniform vec4 vco;\n" - "varying vec2 tcs;\n" - "float sample;\n" - "vec4 temp1;\n" - "void main()\n" "{\n" - "sample = texture2D(y_sampler, tcs).w;\n" - "temp1.xyz = offsetyco.www * vec3(sample) + offsetyco.xyz;\n" - "sample = texture2D(u_sampler, tcs).w;\n" - "temp1.xyz = ucogamma.xyz * vec3(sample) + temp1.xyz;\n" - "sample = texture2D(v_sampler, tcs).w;\n" - "temp1.xyz = clamp(vco.xyz * vec3(sample) + temp1.xyz, 0.0, 1.0);\n" - "temp1.w = 1.0;\n" - "gl_FragColor = temp1;\n" - "}\n"; + "uniform sampler2D y_sampler;\n" + "uniform sampler2D u_sampler;\n" + "uniform sampler2D v_sampler;\n" + "uniform vec4 offsetyco;\n" + "uniform vec4 ucogamma;\n" + "uniform vec4 vco;\n" + "varying vec2 tcs;\n" + "float sample;\n" + "vec4 temp1;\n" + "void main()\n" + "{\n" + "sample = texture2D(y_sampler, tcs).w;\n" + "temp1.xyz = offsetyco.www * vec3(sample) + offsetyco.xyz;\n" + "sample = texture2D(u_sampler, tcs).w;\n" + "temp1.xyz = ucogamma.xyz * vec3(sample) + temp1.xyz;\n" + "sample = texture2D(v_sampler, tcs).w;\n" + "temp1.xyz = clamp(vco.xyz * vec3(sample) + temp1.xyz, 0.0, 1.0);\n" + "temp1.w = 1.0;\n" + "gl_FragColor = temp1;\n" + "}\n"; void glamor_init_xv_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; - GLint fs_prog, vs_prog; - - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); - glamor_priv->xv_prog = dispatch->glCreateProgram(); - - vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, xv_vs); - fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, xv_ps); - dispatch->glAttachShader(glamor_priv->xv_prog, vs_prog); - dispatch->glAttachShader(glamor_priv->xv_prog, fs_prog); - - dispatch->glBindAttribLocation(glamor_priv->xv_prog, - GLAMOR_VERTEX_POS, "v_position"); - dispatch->glBindAttribLocation(glamor_priv->xv_prog, - GLAMOR_VERTEX_SOURCE, "v_texcoord0"); - glamor_link_glsl_prog(dispatch, glamor_priv->xv_prog); - - glamor_put_dispatch(glamor_priv); + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; + GLint fs_prog, vs_prog; + + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv->xv_prog = dispatch->glCreateProgram(); + + vs_prog = glamor_compile_glsl_prog(dispatch, GL_VERTEX_SHADER, xv_vs); + fs_prog = glamor_compile_glsl_prog(dispatch, GL_FRAGMENT_SHADER, xv_ps); + dispatch->glAttachShader(glamor_priv->xv_prog, vs_prog); + dispatch->glAttachShader(glamor_priv->xv_prog, fs_prog); + + dispatch->glBindAttribLocation(glamor_priv->xv_prog, + GLAMOR_VERTEX_POS, "v_position"); + dispatch->glBindAttribLocation(glamor_priv->xv_prog, + GLAMOR_VERTEX_SOURCE, "v_texcoord0"); + glamor_link_glsl_prog(dispatch, glamor_priv->xv_prog); + + glamor_put_dispatch(glamor_priv); } void glamor_fini_xv_shader(ScreenPtr screen) { - glamor_screen_private *glamor_priv; - glamor_gl_dispatch *dispatch; + glamor_screen_private *glamor_priv; + glamor_gl_dispatch *dispatch; - glamor_priv = glamor_get_screen_private(screen); - dispatch = glamor_get_dispatch(glamor_priv); + glamor_priv = glamor_get_screen_private(screen); + dispatch = glamor_get_dispatch(glamor_priv); - dispatch->glDeleteProgram(glamor_priv->xv_prog); - glamor_put_dispatch(glamor_priv); + dispatch->glDeleteProgram(glamor_priv->xv_prog); + glamor_put_dispatch(glamor_priv); } #define ClipValue(v,min,max) ((v) < (min) ? (min) : (v) > (max) ? (max) : (v)) #define MAKE_ATOM(a) MakeAtom(a, sizeof(a) - 1, TRUE) -static Atom xvBrightness, xvContrast, xvSaturation, xvHue, xvColorspace, xvGamma; +static Atom xvBrightness, xvContrast, xvSaturation, xvHue, xvColorspace, + xvGamma; #define NUM_ATTRIBUTES 5 -static XF86AttributeRec Attributes_glamor[NUM_ATTRIBUTES+1] = -{ +static XF86AttributeRec Attributes_glamor[NUM_ATTRIBUTES + 1] = { {XvSettable | XvGettable, -1000, 1000, "XV_BRIGHTNESS"}, {XvSettable | XvGettable, -1000, 1000, "XV_CONTRAST"}, {XvSettable | XvGettable, -1000, 1000, "XV_SATURATION"}, {XvSettable | XvGettable, -1000, 1000, "XV_HUE"}, {XvSettable | XvGettable, 0, 1, "XV_COLORSPACE"}, {0, 0, 0, NULL} - }; +}; #define NUM_FORMATS 3 -static XF86VideoFormatRec Formats[NUM_FORMATS] = -{ +static XF86VideoFormatRec Formats[NUM_FORMATS] = { {15, TrueColor}, {16, TrueColor}, {24, TrueColor} - }; +}; #define NUM_IMAGES 2 -static XF86ImageRec Images[NUM_IMAGES] = -{ -XVIMAGE_YV12, - XVIMAGE_I420, - }; +static XF86ImageRec Images[NUM_IMAGES] = { + XVIMAGE_YV12, + XVIMAGE_I420, +}; static void -glamor_xv_stop_video(ScrnInfoPtr pScrn, pointer data, Bool cleanup) +glamor_xv_stop_video(ScrnInfoPtr pScrn, void *data, Bool cleanup) { -glamor_port_private *port_priv = (glamor_port_private *)data; -int i; -if (!cleanup) - return; - -for (i = 0; i < 3; i++) { -if (port_priv->src_pix[i]) { -glamor_destroy_pixmap(port_priv->src_pix[i]); -port_priv->src_pix[i] = NULL; -} -} + glamor_port_private *port_priv = (glamor_port_private *) data; + int i; + + if (!cleanup) + return; + + for (i = 0; i < 3; i++) { + if (port_priv->src_pix[i]) { + glamor_destroy_pixmap(port_priv->src_pix[i]); + port_priv->src_pix[i] = NULL; + } + } } static int -glamor_xv_set_port_attribute(ScrnInfoPtr pScrn, - Atom attribute, - INT32 value, - pointer data) +glamor_xv_set_port_attribute(ScrnInfoPtr pScrn, + Atom attribute, INT32 value, void *data) { -glamor_port_private *port_priv = (glamor_port_private *)data; -if (attribute == xvBrightness) - port_priv->brightness = ClipValue(value, -1000, 1000); -else if (attribute == xvHue) - port_priv->hue = ClipValue(value, -1000, 1000); -else if (attribute == xvContrast) - port_priv->contrast = ClipValue(value, -1000, 1000); -else if (attribute == xvSaturation) - port_priv->saturation = ClipValue(value, -1000, 1000); -else if (attribute == xvGamma) - port_priv->gamma = ClipValue (value, 100, 10000); -else if(attribute == xvColorspace) - port_priv->transform_index = ClipValue (value, 0, 1); -else - return BadMatch; -return Success; + glamor_port_private *port_priv = (glamor_port_private *) data; + + if (attribute == xvBrightness) + port_priv->brightness = ClipValue(value, -1000, 1000); + else if (attribute == xvHue) + port_priv->hue = ClipValue(value, -1000, 1000); + else if (attribute == xvContrast) + port_priv->contrast = ClipValue(value, -1000, 1000); + else if (attribute == xvSaturation) + port_priv->saturation = ClipValue(value, -1000, 1000); + else if (attribute == xvGamma) + port_priv->gamma = ClipValue(value, 100, 10000); + else if (attribute == xvColorspace) + port_priv->transform_index = ClipValue(value, 0, 1); + else + return BadMatch; + return Success; } static int -glamor_xv_get_port_attribute(ScrnInfoPtr pScrn, - Atom attribute, - INT32 *value, - pointer data) +glamor_xv_get_port_attribute(ScrnInfoPtr pScrn, + Atom attribute, INT32 *value, void *data) { -glamor_port_private *port_priv = (glamor_port_private *)data; -if (attribute == xvBrightness) - *value = port_priv->brightness; -else if (attribute == xvHue) - *value = port_priv->hue; -else if (attribute == xvContrast) - *value = port_priv->contrast; -else if (attribute == xvSaturation) - *value = port_priv->saturation; -else if (attribute == xvGamma) - *value = port_priv->gamma; -else if(attribute == xvColorspace) - *value = port_priv->transform_index; -else - return BadMatch; - -return Success; + glamor_port_private *port_priv = (glamor_port_private *) data; + + if (attribute == xvBrightness) + *value = port_priv->brightness; + else if (attribute == xvHue) + *value = port_priv->hue; + else if (attribute == xvContrast) + *value = port_priv->contrast; + else if (attribute == xvSaturation) + *value = port_priv->saturation; + else if (attribute == xvGamma) + *value = port_priv->gamma; + else if (attribute == xvColorspace) + *value = port_priv->transform_index; + else + return BadMatch; + + return Success; } static void glamor_xv_query_best_size(ScrnInfoPtr pScrn, - Bool motion, - short vid_w, short vid_h, - short drw_w, short drw_h, - unsigned int *p_w, unsigned int *p_h, - pointer data) + Bool motion, + short vid_w, short vid_h, + short drw_w, short drw_h, + unsigned int *p_w, unsigned int *p_h, void *data) { -*p_w = drw_w; -*p_h = drw_h; + *p_w = drw_w; + *p_h = drw_h; } static int glamor_xv_query_image_attributes(ScrnInfoPtr pScrn, - int id, - unsigned short *w, unsigned short *h, - int *pitches, int *offsets) + int id, + unsigned short *w, unsigned short *h, + int *pitches, int *offsets) { -int size = 0, tmp; - -if (offsets) offsets[0] = 0; -switch (id) { -case FOURCC_YV12: -case FOURCC_I420: -*h = *h; -*w = *w; -size = *w; -if (pitches) pitches[0] = size; -size *= *h; -if (offsets) offsets[1] = size; -tmp = *w >> 1; -if (pitches) pitches[1] = pitches[2] = tmp; -tmp *= (*h >> 1); -size += tmp; -if (offsets) offsets[2] = size; -size += tmp; -break; -} -return size; + int size = 0, tmp; + + if (offsets) + offsets[0] = 0; + switch (id) { + case FOURCC_YV12: + case FOURCC_I420: + *h = *h; + *w = *w; + size = *w; + if (pitches) + pitches[0] = size; + size *= *h; + if (offsets) + offsets[1] = size; + tmp = *w >> 1; + if (pitches) + pitches[1] = pitches[2] = tmp; + tmp *= (*h >> 1); + size += tmp; + if (offsets) + offsets[2] = size; + size += tmp; + break; + } + return size; } + /* Parameters for ITU-R BT.601 and ITU-R BT.709 colour spaces note the difference to the parameters used in overlay are due to 10bit vs. float calcs */ -static REF_TRANSFORM trans[2] = -{ - {1.1643, 0.0, 1.5960, -0.3918, -0.8129, 2.0172, 0.0}, /* BT.601 */ - {1.1643, 0.0, 1.7927, -0.2132, -0.5329, 2.1124, 0.0} /* BT.709 */ - }; +static REF_TRANSFORM trans[2] = { + {1.1643, 0.0, 1.5960, -0.3918, -0.8129, 2.0172, 0.0}, /* BT.601 */ + {1.1643, 0.0, 1.7927, -0.2132, -0.5329, 2.1124, 0.0} /* BT.709 */ +}; static void glamor_display_textured_video(glamor_port_private *port_priv) { -ScreenPtr screen = port_priv->pPixmap->drawable.pScreen; -glamor_screen_private *glamor_priv = - glamor_get_screen_private(screen); -glamor_pixmap_private *pixmap_priv = - glamor_get_pixmap_private(port_priv->pPixmap); -glamor_pixmap_private *src_pixmap_priv[3]; -glamor_gl_dispatch *dispatch; -float vertices[32], texcoords[8]; -BoxPtr box = REGION_RECTS(&port_priv->clip); -int nBox = REGION_NUM_RECTS(&port_priv->clip); -int dst_x_off, dst_y_off; -GLfloat dst_xscale, dst_yscale; -GLfloat src_xscale[3], src_yscale[3]; -int i; -const float Loff = -0.0627; -const float Coff = -0.502; -float uvcosf, uvsinf; -float yco; -float uco[3], vco[3], off[3]; -float bright, cont, gamma; -int ref = port_priv->transform_index; -GLint uloc, sampler_loc; - -cont = RTFContrast(port_priv->contrast); -bright = RTFBrightness(port_priv->brightness); -gamma = (float)port_priv->gamma / 1000.0; -uvcosf = RTFSaturation(port_priv->saturation) * cos(RTFHue(port_priv->hue)); -uvsinf = RTFSaturation(port_priv->saturation) * sin(RTFHue(port_priv->hue)); + ScreenPtr screen = port_priv->pPixmap->drawable.pScreen; + glamor_screen_private *glamor_priv = glamor_get_screen_private(screen); + glamor_pixmap_private *pixmap_priv = + glamor_get_pixmap_private(port_priv->pPixmap); + glamor_pixmap_private *src_pixmap_priv[3]; + glamor_gl_dispatch *dispatch; + float vertices[32], texcoords[8]; + BoxPtr box = REGION_RECTS(&port_priv->clip); + int nBox = REGION_NUM_RECTS(&port_priv->clip); + int dst_x_off, dst_y_off; + GLfloat dst_xscale, dst_yscale; + GLfloat src_xscale[3], src_yscale[3]; + int i; + const float Loff = -0.0627; + const float Coff = -0.502; + float uvcosf, uvsinf; + float yco; + float uco[3], vco[3], off[3]; + float bright, cont, gamma; + int ref = port_priv->transform_index; + GLint uloc, sampler_loc; + + cont = RTFContrast(port_priv->contrast); + bright = RTFBrightness(port_priv->brightness); + gamma = (float) port_priv->gamma / 1000.0; + uvcosf = RTFSaturation(port_priv->saturation) * cos(RTFHue(port_priv->hue)); + uvsinf = RTFSaturation(port_priv->saturation) * sin(RTFHue(port_priv->hue)); /* overlay video also does pre-gamma contrast/sat adjust, should we? */ -yco = trans[ref].RefLuma * cont; -uco[0] = -trans[ref].RefRCr * uvsinf; -uco[1] = trans[ref].RefGCb * uvcosf - trans[ref].RefGCr * uvsinf; -uco[2] = trans[ref].RefBCb * uvcosf; -vco[0] = trans[ref].RefRCr * uvcosf; -vco[1] = trans[ref].RefGCb * uvsinf + trans[ref].RefGCr * uvcosf; -vco[2] = trans[ref].RefBCb * uvsinf; -off[0] = Loff * yco + Coff * (uco[0] + vco[0]) + bright; -off[1] = Loff * yco + Coff * (uco[1] + vco[1]) + bright; -off[2] = Loff * yco + Coff * (uco[2] + vco[2]) + bright; -gamma = 1.0; - -pixmap_priv_get_dest_scale(pixmap_priv, &dst_xscale, &dst_yscale); -glamor_get_drawable_deltas(port_priv->pDraw, port_priv->pPixmap, &dst_x_off, - &dst_y_off); -glamor_set_destination_pixmap_priv_nc(pixmap_priv); - -for (i = 0; i < 3; i++) { -if (port_priv->src_pix[i]) { -src_pixmap_priv[i] = glamor_get_pixmap_private(port_priv->src_pix[i]); -pixmap_priv_get_scale(src_pixmap_priv[i], &src_xscale[i], &src_yscale[i]); -} -} -dispatch = glamor_get_dispatch(glamor_priv); -dispatch->glUseProgram(glamor_priv->xv_prog); - -uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "offsetyco"); -dispatch->glUniform4f(uloc, off[0], off[1], off[2], yco); -uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "ucogamma"); -dispatch->glUniform4f(uloc, uco[0], uco[1], uco[2], gamma); -uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "vco"); -dispatch->glUniform4f(uloc, vco[0], vco[1], vco[2], 0); - -dispatch->glActiveTexture(GL_TEXTURE0); -dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[0]->base.fbo->tex); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - -dispatch->glActiveTexture(GL_TEXTURE1); -dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->base.fbo->tex); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - -dispatch->glActiveTexture(GL_TEXTURE2); -dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->base.fbo->tex); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MIN_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_MAG_FILTER, - GL_LINEAR); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_S, - GL_CLAMP_TO_EDGE); -dispatch->glTexParameteri(GL_TEXTURE_2D, - GL_TEXTURE_WRAP_T, - GL_CLAMP_TO_EDGE); - -sampler_loc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "y_sampler"); -dispatch->glUniform1i(sampler_loc, 0); -sampler_loc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "u_sampler"); -dispatch->glUniform1i(sampler_loc, 1); -sampler_loc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "v_sampler"); -dispatch->glUniform1i(sampler_loc, 2); - -dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, - GL_FLOAT, GL_FALSE, - 2 * sizeof(float), - texcoords); -dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - -dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, - GL_FALSE, 2 * sizeof(float), - vertices); - -dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); -for (i = 0; i < nBox; i++) { -float off_x = box[i].x1 - port_priv->drw_x; -float off_y = box[i].y1 - port_priv->drw_y; -float diff_x = (float)port_priv->src_w / (float)port_priv->dst_w; -float diff_y = (float)port_priv->src_h / (float)port_priv->dst_h; -float srcx, srcy, srcw, srch; -int dstx, dsty, dstw, dsth; - - -dstx = box[i].x1 + dst_x_off; -dsty = box[i].y1 + dst_y_off; -dstw = box[i].x2 - box[i].x1; -dsth = box[i].y2 - box[i].y1; - -srcx = port_priv->src_x + off_x * diff_x; -srcy = port_priv->src_y + off_y * diff_y; -srcw = (port_priv->src_w * dstw) / (float)port_priv->dst_w; -srch = (port_priv->src_h * dsth) / (float)port_priv->dst_h; - -glamor_set_normalize_vcoords(pixmap_priv, - dst_xscale, dst_yscale, - dstx, - dsty, - dstx + dstw, - dsty + dsth, - glamor_priv->yInverted, - vertices); - -glamor_set_normalize_tcoords(src_pixmap_priv[0], - src_xscale[0], - src_yscale[0], - srcx, - srcy, - srcx + srcw, - srcy + srch, - glamor_priv->yInverted, - texcoords); - -dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); -} - -dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); -dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); - -dispatch->glUseProgram(0); -glamor_put_dispatch(glamor_priv); -DamageDamageRegion(port_priv->pDraw, &port_priv->clip); + yco = trans[ref].RefLuma * cont; + uco[0] = -trans[ref].RefRCr * uvsinf; + uco[1] = trans[ref].RefGCb * uvcosf - trans[ref].RefGCr * uvsinf; + uco[2] = trans[ref].RefBCb * uvcosf; + vco[0] = trans[ref].RefRCr * uvcosf; + vco[1] = trans[ref].RefGCb * uvsinf + trans[ref].RefGCr * uvcosf; + vco[2] = trans[ref].RefBCb * uvsinf; + off[0] = Loff * yco + Coff * (uco[0] + vco[0]) + bright; + off[1] = Loff * yco + Coff * (uco[1] + vco[1]) + bright; + off[2] = Loff * yco + Coff * (uco[2] + vco[2]) + bright; + gamma = 1.0; + + pixmap_priv_get_dest_scale(pixmap_priv, &dst_xscale, &dst_yscale); + glamor_get_drawable_deltas(port_priv->pDraw, port_priv->pPixmap, &dst_x_off, + &dst_y_off); + glamor_set_destination_pixmap_priv_nc(pixmap_priv); + + for (i = 0; i < 3; i++) { + if (port_priv->src_pix[i]) { + src_pixmap_priv[i] = + glamor_get_pixmap_private(port_priv->src_pix[i]); + pixmap_priv_get_scale(src_pixmap_priv[i], &src_xscale[i], + &src_yscale[i]); + } + } + dispatch = glamor_get_dispatch(glamor_priv); + dispatch->glUseProgram(glamor_priv->xv_prog); + + uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "offsetyco"); + dispatch->glUniform4f(uloc, off[0], off[1], off[2], yco); + uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "ucogamma"); + dispatch->glUniform4f(uloc, uco[0], uco[1], uco[2], gamma); + uloc = dispatch->glGetUniformLocation(glamor_priv->xv_prog, "vco"); + dispatch->glUniform4f(uloc, vco[0], vco[1], vco[2], 0); + + dispatch->glActiveTexture(GL_TEXTURE0); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[0]->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + dispatch->glActiveTexture(GL_TEXTURE1); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[1]->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + dispatch->glActiveTexture(GL_TEXTURE2); + dispatch->glBindTexture(GL_TEXTURE_2D, src_pixmap_priv[2]->base.fbo->tex); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + dispatch->glTexParameteri(GL_TEXTURE_2D, + GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + sampler_loc = + dispatch->glGetUniformLocation(glamor_priv->xv_prog, "y_sampler"); + dispatch->glUniform1i(sampler_loc, 0); + sampler_loc = + dispatch->glGetUniformLocation(glamor_priv->xv_prog, "u_sampler"); + dispatch->glUniform1i(sampler_loc, 1); + sampler_loc = + dispatch->glGetUniformLocation(glamor_priv->xv_prog, "v_sampler"); + dispatch->glUniform1i(sampler_loc, 2); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_SOURCE, 2, + GL_FLOAT, GL_FALSE, + 2 * sizeof(float), texcoords); + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + dispatch->glVertexAttribPointer(GLAMOR_VERTEX_POS, 2, GL_FLOAT, + GL_FALSE, 2 * sizeof(float), vertices); + + dispatch->glEnableVertexAttribArray(GLAMOR_VERTEX_POS); + for (i = 0; i < nBox; i++) { + float off_x = box[i].x1 - port_priv->drw_x; + float off_y = box[i].y1 - port_priv->drw_y; + float diff_x = (float) port_priv->src_w / (float) port_priv->dst_w; + float diff_y = (float) port_priv->src_h / (float) port_priv->dst_h; + float srcx, srcy, srcw, srch; + int dstx, dsty, dstw, dsth; + + dstx = box[i].x1 + dst_x_off; + dsty = box[i].y1 + dst_y_off; + dstw = box[i].x2 - box[i].x1; + dsth = box[i].y2 - box[i].y1; + + srcx = port_priv->src_x + off_x * diff_x; + srcy = port_priv->src_y + off_y * diff_y; + srcw = (port_priv->src_w * dstw) / (float) port_priv->dst_w; + srch = (port_priv->src_h * dsth) / (float) port_priv->dst_h; + + glamor_set_normalize_vcoords(pixmap_priv, + dst_xscale, dst_yscale, + dstx, + dsty, + dstx + dstw, + dsty + dsth, + glamor_priv->yInverted, vertices); + + glamor_set_normalize_tcoords(src_pixmap_priv[0], + src_xscale[0], + src_yscale[0], + srcx, + srcy, + srcx + srcw, + srcy + srch, + glamor_priv->yInverted, texcoords); + + dispatch->glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + } + + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_POS); + dispatch->glDisableVertexAttribArray(GLAMOR_VERTEX_SOURCE); + + dispatch->glUseProgram(0); + glamor_put_dispatch(glamor_priv); + DamageDamageRegion(port_priv->pDraw, &port_priv->clip); } -static int glamor_xv_put_image(ScrnInfoPtr pScrn, - short src_x, short src_y, - short drw_x, short drw_y, - short src_w, short src_h, - short drw_w, short drw_h, - int id, - unsigned char *buf, - short width, - short height, - Bool sync, - RegionPtr clipBoxes, - pointer data, - DrawablePtr pDrawable) +static int +glamor_xv_put_image(ScrnInfoPtr pScrn, + short src_x, short src_y, + short drw_x, short drw_y, + short src_w, short src_h, + short drw_w, short drw_h, + int id, + unsigned char *buf, + short width, + short height, + Bool sync, + RegionPtr clipBoxes, void *data, DrawablePtr pDrawable) { - ScreenPtr screen = xf86ScrnToScreen(pScrn); - glamor_port_private *port_priv = (glamor_port_private *)data; - INT32 x1, x2, y1, y2; - int srcPitch, srcPitch2; - BoxRec dstBox; - int top, nlines; - int s2offset, s3offset, tmp; - - s2offset = s3offset = srcPitch2 = 0; - - /* Clip */ - x1 = src_x; - x2 = src_x + src_w; - y1 = src_y; - y2 = src_y + src_h; - - dstBox.x1 = drw_x; - dstBox.x2 = drw_x + drw_w; - dstBox.y1 = drw_y; - dstBox.y2 = drw_y + drw_h; - if (!xf86XVClipVideoHelper(&dstBox, &x1, &x2, &y1, &y2, clipBoxes, width, height)) - return Success; - - if ((x1 >= x2) || (y1 >= y2)) - return Success; - - srcPitch = width; - srcPitch2 = width >> 1; - - if (!port_priv->src_pix[0] || (width != port_priv->src_pix_w || height != port_priv->src_pix_h)) { - int i; - for (i = 0; i < 3; i++) - if (port_priv->src_pix[i]) - glamor_destroy_pixmap(port_priv->src_pix[i]); - - port_priv->src_pix[0] = glamor_create_pixmap(screen, width, height, 8, 0); - port_priv->src_pix[1] = glamor_create_pixmap(screen, width >> 1, height >> 1, 8, 0); - port_priv->src_pix[2] = glamor_create_pixmap(screen, width >> 1, height >> 1, 8, 0); - port_priv->src_pix_w = width; - port_priv->src_pix_h = height; - - if (!port_priv->src_pix[0] || !port_priv->src_pix[1] || !port_priv->src_pix[2]) - return BadAlloc; - } - - top = (y1 >> 16) & ~1; - nlines = ((y2 + 0xffff) >> 16) - top; - - switch (id) { - case FOURCC_YV12: - case FOURCC_I420: - s2offset = srcPitch * height; - s3offset = s2offset + (srcPitch2 * ((height + 1) >> 1)); - s2offset += ((top >> 1) * srcPitch2); - s3offset += ((top >> 1) * srcPitch2); - if (id == FOURCC_YV12) { - tmp = s2offset; - s2offset = s3offset; - s3offset = tmp; - } - glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[0], - 0, 0, srcPitch, nlines, - port_priv->src_pix[0]->devKind, - buf + (top * srcPitch), 0); - - glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[1], - 0, 0, srcPitch2, (nlines + 1) >> 1, - port_priv->src_pix[1]->devKind, - buf + s2offset, 0); - - glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[2], - 0, 0, srcPitch2, (nlines + 1) >> 1, - port_priv->src_pix[2]->devKind, - buf + s3offset, 0); - break; - default: - return BadMatch; - } - - if (pDrawable->type == DRAWABLE_WINDOW) - port_priv->pPixmap = (*screen->GetWindowPixmap)((WindowPtr)pDrawable); - else - port_priv->pPixmap = (PixmapPtr)pDrawable; - - if (!RegionEqual(&port_priv->clip, clipBoxes)) { - RegionCopy(&port_priv->clip, clipBoxes); - } - - port_priv->src_x = src_x; - port_priv->src_y = src_y; - port_priv->src_w = src_w; - port_priv->src_h = src_h; - port_priv->dst_w = drw_w; - port_priv->dst_h = drw_h; - port_priv->drw_x = drw_x; - port_priv->drw_y = drw_y; - port_priv->w = width; - port_priv->h = height; - port_priv->pDraw = pDrawable; - glamor_display_textured_video(port_priv); - return Success; + ScreenPtr screen = xf86ScrnToScreen(pScrn); + glamor_port_private *port_priv = (glamor_port_private *) data; + INT32 x1, x2, y1, y2; + int srcPitch, srcPitch2; + BoxRec dstBox; + int top, nlines; + int s2offset, s3offset, tmp; + + s2offset = s3offset = srcPitch2 = 0; + + /* Clip */ + x1 = src_x; + x2 = src_x + src_w; + y1 = src_y; + y2 = src_y + src_h; + + dstBox.x1 = drw_x; + dstBox.x2 = drw_x + drw_w; + dstBox.y1 = drw_y; + dstBox.y2 = drw_y + drw_h; + if (!xf86XVClipVideoHelper + (&dstBox, &x1, &x2, &y1, &y2, clipBoxes, width, height)) + return Success; + + if ((x1 >= x2) || (y1 >= y2)) + return Success; + + srcPitch = width; + srcPitch2 = width >> 1; + + if (!port_priv->src_pix[0] || + (width != port_priv->src_pix_w || height != port_priv->src_pix_h)) { + int i; + + for (i = 0; i < 3; i++) + if (port_priv->src_pix[i]) + glamor_destroy_pixmap(port_priv->src_pix[i]); + + port_priv->src_pix[0] = + glamor_create_pixmap(screen, width, height, 8, 0); + port_priv->src_pix[1] = + glamor_create_pixmap(screen, width >> 1, height >> 1, 8, 0); + port_priv->src_pix[2] = + glamor_create_pixmap(screen, width >> 1, height >> 1, 8, 0); + port_priv->src_pix_w = width; + port_priv->src_pix_h = height; + + if (!port_priv->src_pix[0] || !port_priv->src_pix[1] || + !port_priv->src_pix[2]) + return BadAlloc; + } + + top = (y1 >> 16) & ~1; + nlines = ((y2 + 0xffff) >> 16) - top; + + switch (id) { + case FOURCC_YV12: + case FOURCC_I420: + s2offset = srcPitch * height; + s3offset = s2offset + (srcPitch2 * ((height + 1) >> 1)); + s2offset += ((top >> 1) * srcPitch2); + s3offset += ((top >> 1) * srcPitch2); + if (id == FOURCC_YV12) { + tmp = s2offset; + s2offset = s3offset; + s3offset = tmp; + } + glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[0], + 0, 0, srcPitch, nlines, + port_priv->src_pix[0]->devKind, + buf + (top * srcPitch), 0); + + glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[1], + 0, 0, srcPitch2, (nlines + 1) >> 1, + port_priv->src_pix[1]->devKind, + buf + s2offset, 0); + + glamor_upload_sub_pixmap_to_texture(port_priv->src_pix[2], + 0, 0, srcPitch2, (nlines + 1) >> 1, + port_priv->src_pix[2]->devKind, + buf + s3offset, 0); + break; + default: + return BadMatch; + } + + if (pDrawable->type == DRAWABLE_WINDOW) + port_priv->pPixmap = (*screen->GetWindowPixmap) ((WindowPtr) pDrawable); + else + port_priv->pPixmap = (PixmapPtr) pDrawable; + + if (!RegionEqual(&port_priv->clip, clipBoxes)) { + RegionCopy(&port_priv->clip, clipBoxes); + } + + port_priv->src_x = src_x; + port_priv->src_y = src_y; + port_priv->src_w = src_w; + port_priv->src_h = src_h; + port_priv->dst_w = drw_w; + port_priv->dst_h = drw_h; + port_priv->drw_x = drw_x; + port_priv->drw_y = drw_y; + port_priv->w = width; + port_priv->h = height; + port_priv->pDraw = pDrawable; + glamor_display_textured_video(port_priv); + return Success; } -static XF86VideoEncodingRec DummyEncodingGLAMOR[1] = -{ - { - 0, - "XV_IMAGE", - 8192, 8192, - {1, 1} - } +static XF86VideoEncodingRec DummyEncodingGLAMOR[1] = { + { + 0, + "XV_IMAGE", + 8192, 8192, + {1, 1} + } }; XF86VideoAdaptorPtr glamor_xv_init(ScreenPtr screen, int num_texture_ports) { - glamor_port_private *port_priv; - XF86VideoAdaptorPtr adapt; - int i; - - adapt = calloc(1, sizeof(XF86VideoAdaptorRec) + num_texture_ports * - (sizeof(glamor_port_private) + sizeof(DevUnion))); - if (adapt == NULL) - return NULL; - - xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); - xvContrast = MAKE_ATOM("XV_CONTRAST"); - xvSaturation = MAKE_ATOM("XV_SATURATION"); - xvHue = MAKE_ATOM("XV_HUE"); - xvGamma = MAKE_ATOM("XV_GAMMA"); - xvColorspace = MAKE_ATOM("XV_COLORSPACE"); - - adapt->type = XvWindowMask | XvInputMask | XvImageMask; - adapt->flags = 0; - adapt->name = "GLAMOR Textured Video"; - adapt->nEncodings = 1; - adapt->pEncodings = DummyEncodingGLAMOR; - - adapt->nFormats = NUM_FORMATS; - adapt->pFormats = Formats; - adapt->nPorts = num_texture_ports; - adapt->pPortPrivates = (DevUnion*)(&adapt[1]); - - adapt->pAttributes = Attributes_glamor; - adapt->nAttributes = NUM_ATTRIBUTES; - - port_priv = (glamor_port_private *)(&adapt->pPortPrivates[num_texture_ports]); - adapt->pImages = Images; - adapt->nImages = NUM_IMAGES; - adapt->PutVideo = NULL; - adapt->PutStill = NULL; - adapt->GetVideo = NULL; - adapt->GetStill = NULL; - adapt->StopVideo = glamor_xv_stop_video; - adapt->SetPortAttribute = glamor_xv_set_port_attribute; - adapt->GetPortAttribute = glamor_xv_get_port_attribute; - adapt->QueryBestSize = glamor_xv_query_best_size; - adapt->PutImage = glamor_xv_put_image; - adapt->ReputImage = NULL; - adapt->QueryImageAttributes = glamor_xv_query_image_attributes; - - for (i = 0; i < num_texture_ports; i++) { - glamor_port_private *pPriv = &port_priv[i]; - - pPriv->brightness = 0; - pPriv->contrast = 0; - pPriv->saturation = 0; - pPriv->hue = 0; - pPriv->gamma = 1000; - pPriv->transform_index = 0; - - REGION_NULL(pScreen, &pPriv->clip); - - adapt->pPortPrivates[i].ptr = (pointer)(pPriv); - } - return adapt; + glamor_port_private *port_priv; + XF86VideoAdaptorPtr adapt; + int i; + + adapt = calloc(1, sizeof(XF86VideoAdaptorRec) + num_texture_ports * + (sizeof(glamor_port_private) + sizeof(DevUnion))); + if (adapt == NULL) + return NULL; + + xvBrightness = MAKE_ATOM("XV_BRIGHTNESS"); + xvContrast = MAKE_ATOM("XV_CONTRAST"); + xvSaturation = MAKE_ATOM("XV_SATURATION"); + xvHue = MAKE_ATOM("XV_HUE"); + xvGamma = MAKE_ATOM("XV_GAMMA"); + xvColorspace = MAKE_ATOM("XV_COLORSPACE"); + + adapt->type = XvWindowMask | XvInputMask | XvImageMask; + adapt->flags = 0; + adapt->name = "GLAMOR Textured Video"; + adapt->nEncodings = 1; + adapt->pEncodings = DummyEncodingGLAMOR; + + adapt->nFormats = NUM_FORMATS; + adapt->pFormats = Formats; + adapt->nPorts = num_texture_ports; + adapt->pPortPrivates = (DevUnion *) (&adapt[1]); + + adapt->pAttributes = Attributes_glamor; + adapt->nAttributes = NUM_ATTRIBUTES; + + port_priv = + (glamor_port_private *) (&adapt->pPortPrivates[num_texture_ports]); + adapt->pImages = Images; + adapt->nImages = NUM_IMAGES; + adapt->PutVideo = NULL; + adapt->PutStill = NULL; + adapt->GetVideo = NULL; + adapt->GetStill = NULL; + adapt->StopVideo = glamor_xv_stop_video; + adapt->SetPortAttribute = glamor_xv_set_port_attribute; + adapt->GetPortAttribute = glamor_xv_get_port_attribute; + adapt->QueryBestSize = glamor_xv_query_best_size; + adapt->PutImage = glamor_xv_put_image; + adapt->ReputImage = NULL; + adapt->QueryImageAttributes = glamor_xv_query_image_attributes; + + for (i = 0; i < num_texture_ports; i++) { + glamor_port_private *pPriv = &port_priv[i]; + + pPriv->brightness = 0; + pPriv->contrast = 0; + pPriv->saturation = 0; + pPriv->hue = 0; + pPriv->gamma = 1000; + pPriv->transform_index = 0; + + REGION_NULL(pScreen, &pPriv->clip); + + adapt->pPortPrivates[i].ptr = (void *) (pPriv); + } + return adapt; } #else +#if 0 XF86VideoAdaptorPtr glamor_xv_init(ScreenPtr screen, int num_texture_ports) { - return NULL; + return NULL; } #endif +#endif diff --git a/xorg-server/glamor/glapi.h b/xorg-server/glamor/glapi.h deleted file mode 100644 index d510dac1d..000000000 --- a/xorg-server/glamor/glapi.h +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Mesa 3-D graphics library - * Version: 7.1 - * - * Copyright (C) 1999-2008 Brian Paul 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 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 - * BRIAN PAUL 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. - */ - - -/** - * \mainpage Mesa GL API Module - * - * \section GLAPIIntroduction Introduction - * - * The Mesa GL API module is responsible for dispatching all the - * gl*() functions. All GL functions are dispatched by jumping through - * the current dispatch table (basically a struct full of function - * pointers.) - * - * A per-thread current dispatch table and per-thread current context - * pointer are managed by this module too. - * - * This module is intended to be non-Mesa-specific so it can be used - * with the X/DRI libGL also. - */ - -#ifndef _GLAPI_H -#define _GLAPI_H - -#define GL_GLEXT_PROTOTYPES - -#if GLAMOR_GLES2 -#include <GLES2/gl2.h> -#include <GLES2/gl2ext.h> -#else -#include <GL/gl.h> -#include "GL/glext.h" -#endif - -/* Is this needed? It is incomplete anyway. */ -#ifdef USE_MGL_NAMESPACE -#define _glapi_set_dispatch _mglapi_set_dispatch -#define _glapi_get_dispatch _mglapi_get_dispatch -#define _glapi_set_context _mglapi_set_context -#define _glapi_get_context _mglapi_get_context -#define _glapi_Dispatch _mglapi_Dispatch -#define _glapi_Context _mglapi_Context -#endif - -typedef void (*_glapi_proc)(void); -struct _glapi_table; - - -#if defined (GLX_USE_TLS) - -extern __thread struct _glapi_table * _glapi_tls_Dispatch - __attribute__((tls_model("initial-exec"))); - -extern __thread void * _glapi_tls_Context - __attribute__((tls_model("initial-exec"))); - -extern const struct _glapi_table *_glapi_Dispatch; -extern const void *_glapi_Context; - -# define GET_DISPATCH() _glapi_tls_Dispatch -# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) _glapi_tls_Context -# define SET_CURRENT_CONTEXT(C) _glapi_tls_Context = (void*)C - -#else - -extern struct _glapi_table *_glapi_Dispatch; -extern void *_glapi_Context; - -# ifdef THREADS - -# define GET_DISPATCH() \ - (likely(_glapi_Dispatch) ? _glapi_Dispatch : _glapi_get_dispatch()) - -# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) \ - (likely(_glapi_Context) ? _glapi_Context : _glapi_get_context()) - - -# define SET_CURRENT_CONTEXT(C) do { if (likely(_glapi_Context)) \ - _glapi_Context = (void*)C; \ - else \ - _glapi_set_context(C); } while(0) - -# else - -# define GET_DISPATCH() _glapi_Dispatch -# define GET_CURRENT_CONTEXT(C) C = (typeof(C)) _glapi_Context -# define SET_CURRENT_CONTEXT(C) _glapi_Context = (void*)C - -# endif - -#endif /* defined (GLX_USE_TLS) */ - - -extern void -_glapi_set_context(void *context); - -extern void * -_glapi_get_context(void); - -#endif diff --git a/xorg-server/glx/glxdri2.c b/xorg-server/glx/glxdri2.c index 8c1058613..5d1a45bff 100644 --- a/xorg-server/glx/glxdri2.c +++ b/xorg-server/glx/glxdri2.c @@ -461,7 +461,7 @@ create_driver_context(__GLXDRIcontext * context, unsigned dri_err = 0; unsigned major_ver; unsigned minor_ver; - uint32_t flags; + uint32_t flags = 0; int reset; int api = __DRI_API_OPENGL; diff --git a/xorg-server/glx/glxdricommon.c b/xorg-server/glx/glxdricommon.c index d83ebb445..087169596 100644 --- a/xorg-server/glx/glxdricommon.c +++ b/xorg-server/glx/glxdricommon.c @@ -239,7 +239,7 @@ glxConvertConfigs(const __DRIcoreExtension * core, } for (i = 0; configs[i]; i++) { - int renderType = 0; + unsigned int renderType = 0; if (core->getConfigAttrib(configs[i], __DRI_ATTRIB_RENDER_TYPE, &renderType)) { if (render_type_is_pbuffer_only(renderType) && diff --git a/xorg-server/hw/xfree86/common/xf86.h b/xorg-server/hw/xfree86/common/xf86.h index 89025fe11..cec31354e 100644 --- a/xorg-server/hw/xfree86/common/xf86.h +++ b/xorg-server/hw/xfree86/common/xf86.h @@ -215,6 +215,8 @@ extern _X_EXPORT xf86SetDGAModeProc xf86SetDGAMode; /* xf86Events.c */ +typedef struct _InputInfoRec *InputInfoPtr; + extern _X_EXPORT void SetTimeSinceLastInputEvent(void); extern _X_EXPORT void *xf86AddInputHandler(int fd, InputHandlerProc proc, void *data); @@ -234,6 +236,10 @@ extern _X_EXPORT Bool xf86EnableVTSwitch(Bool new); extern _X_EXPORT void xf86ProcessActionEvent(ActionEvent action, void *arg); extern _X_EXPORT void xf86PrintBacktrace(void); extern _X_EXPORT Bool xf86VTOwner(void); +extern _X_EXPORT void xf86VTLeave(void); +extern _X_EXPORT void xf86VTEnter(void); +extern _X_EXPORT void xf86EnableInputDeviceForVTSwitch(InputInfoPtr pInfo); +extern _X_EXPORT void xf86DisableInputDeviceForVTSwitch(InputInfoPtr pInfo); /* xf86Helper.c */ diff --git a/xorg-server/hw/xfree86/common/xf86Events.c b/xorg-server/hw/xfree86/common/xf86Events.c index cae78732c..7b53949fa 100644 --- a/xorg-server/hw/xfree86/common/xf86Events.c +++ b/xorg-server/hw/xfree86/common/xf86Events.c @@ -407,178 +407,193 @@ xf86ReleaseKeys(DeviceIntPtr pDev) } } -/* - * xf86VTSwitch -- - * Handle requests for switching the vt. - */ -static void -xf86VTSwitch(void) +void +xf86DisableInputDeviceForVTSwitch(InputInfoPtr pInfo) +{ + if (!pInfo->dev) + return; + + if (!pInfo->dev->enabled) + pInfo->flags |= XI86_DEVICE_DISABLED; + + xf86ReleaseKeys(pInfo->dev); + ProcessInputEvents(); + DisableDevice(pInfo->dev, TRUE); +} + +void +xf86EnableInputDeviceForVTSwitch(InputInfoPtr pInfo) +{ + if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0) + EnableDevice(pInfo->dev, TRUE); + pInfo->flags &= ~XI86_DEVICE_DISABLED; +} + +void +xf86VTLeave(void) { int i; InputInfoPtr pInfo; IHPtr ih; - DebugF("xf86VTSwitch()\n"); - -#ifdef XFreeXDGA - if (!DGAVTSwitch()) - return; + DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", + BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); +#ifdef DPMSExtension + if (DPMSPowerLevel != DPMSModeOn) + DPMSSet(serverClient, DPMSModeOn); #endif + for (i = 0; i < xf86NumScreens; i++) { + if (!(dispatchException & DE_TERMINATE)) + if (xf86Screens[i]->EnableDisableFBAccess) + (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], FALSE); + } /* - * Since all screens are currently all in the same state it is sufficient - * check the first. This might change in future. + * Keep the order: Disable Device > LeaveVT + * EnterVT > EnableDevice */ - if (xf86VTOwner()) { + for (ih = InputHandlers; ih; ih = ih->next) { + if (ih->is_input) + xf86DisableInputHandler(ih); + else + xf86DisableGeneralHandler(ih); + } + for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) + xf86DisableInputDeviceForVTSwitch(pInfo); - DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", - BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); -#ifdef DPMSExtension - if (DPMSPowerLevel != DPMSModeOn) - DPMSSet(serverClient, DPMSModeOn); + OsBlockSIGIO(); + for (i = 0; i < xf86NumScreens; i++) + xf86Screens[i]->LeaveVT(xf86Screens[i]); + for (i = 0; i < xf86NumGPUScreens; i++) + xf86GPUScreens[i]->LeaveVT(xf86GPUScreens[i]); + + xf86AccessLeave(); /* We need this here, otherwise */ + + if (!xf86VTSwitchAway()) + goto switch_failed; + +#ifdef XF86PM + if (xf86OSPMClose) + xf86OSPMClose(); + xf86OSPMClose = NULL; #endif - for (i = 0; i < xf86NumScreens; i++) { - if (!(dispatchException & DE_TERMINATE)) - if (xf86Screens[i]->EnableDisableFBAccess) - (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], FALSE); - } + for (i = 0; i < xf86NumScreens; i++) { /* - * Keep the order: Disable Device > LeaveVT - * EnterVT > EnableDevice + * zero all access functions to + * trap calls when switched away. */ - for (ih = InputHandlers; ih; ih = ih->next) { - if (ih->is_input) - xf86DisableInputHandler(ih); - else - xf86DisableGeneralHandler(ih); - } - for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) { - if (pInfo->dev) { - if (!pInfo->dev->enabled) - pInfo->flags |= XI86_DEVICE_DISABLED; - xf86ReleaseKeys(pInfo->dev); - ProcessInputEvents(); - DisableDevice(pInfo->dev, TRUE); - } - } - - OsBlockSIGIO(); - for (i = 0; i < xf86NumScreens; i++) - xf86Screens[i]->LeaveVT(xf86Screens[i]); - for (i = 0; i < xf86NumGPUScreens; i++) - xf86GPUScreens[i]->LeaveVT(xf86GPUScreens[i]); + xf86Screens[i]->vtSema = FALSE; + } + if (xorgHWAccess) + xf86DisableIO(); - xf86AccessLeave(); /* We need this here, otherwise */ + return; - if (!xf86VTSwitchAway()) { - /* - * switch failed - */ +switch_failed: + DebugF("xf86VTSwitch: Leave failed\n"); + xf86AccessEnter(); + for (i = 0; i < xf86NumScreens; i++) { + if (!xf86Screens[i]->EnterVT(xf86Screens[i])) + FatalError("EnterVT failed for screen %d\n", i); + } + for (i = 0; i < xf86NumGPUScreens; i++) { + if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) + FatalError("EnterVT failed for gpu screen %d\n", i); + } + if (!(dispatchException & DE_TERMINATE)) { + for (i = 0; i < xf86NumScreens; i++) { + if (xf86Screens[i]->EnableDisableFBAccess) + (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); + } + } + dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); + + for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) + xf86EnableInputDeviceForVTSwitch(pInfo); + for (ih = InputHandlers; ih; ih = ih->next) { + if (ih->is_input) + xf86EnableInputHandler(ih); + else + xf86EnableGeneralHandler(ih); + } + OsReleaseSIGIO(); +} - DebugF("xf86VTSwitch: Leave failed\n"); - xf86AccessEnter(); - for (i = 0; i < xf86NumScreens; i++) { - if (!xf86Screens[i]->EnterVT(xf86Screens[i])) - FatalError("EnterVT failed for screen %d\n", i); - } - for (i = 0; i < xf86NumGPUScreens; i++) { - if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) - FatalError("EnterVT failed for gpu screen %d\n", i); - } - if (!(dispatchException & DE_TERMINATE)) { - for (i = 0; i < xf86NumScreens; i++) { - if (xf86Screens[i]->EnableDisableFBAccess) - (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); - } - } - dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); +void +xf86VTEnter(void) +{ + int i; + InputInfoPtr pInfo; + IHPtr ih; - pInfo = xf86InputDevs; - while (pInfo) { - if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0) - EnableDevice(pInfo->dev, TRUE); - pInfo->flags &= ~XI86_DEVICE_DISABLED; - pInfo = pInfo->next; - } - for (ih = InputHandlers; ih; ih = ih->next) { - if (ih->is_input) - xf86EnableInputHandler(ih); - else - xf86EnableGeneralHandler(ih); - } - OsReleaseSIGIO(); + DebugF("xf86VTSwitch: Entering\n"); + if (!xf86VTSwitchTo()) + return; - } - else { #ifdef XF86PM - if (xf86OSPMClose) - xf86OSPMClose(); - xf86OSPMClose = NULL; + xf86OSPMClose = xf86OSPMOpen(); #endif - for (i = 0; i < xf86NumScreens; i++) { - /* - * zero all access functions to - * trap calls when switched away. - */ - xf86Screens[i]->vtSema = FALSE; - } - if (xorgHWAccess) - xf86DisableIO(); - } + if (xorgHWAccess) + xf86EnableIO(); + xf86AccessEnter(); + for (i = 0; i < xf86NumScreens; i++) { + xf86Screens[i]->vtSema = TRUE; + if (!xf86Screens[i]->EnterVT(xf86Screens[i])) + FatalError("EnterVT failed for screen %d\n", i); + } + for (i = 0; i < xf86NumGPUScreens; i++) { + xf86GPUScreens[i]->vtSema = TRUE; + if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) + FatalError("EnterVT failed for gpu screen %d\n", i); + } + for (i = 0; i < xf86NumScreens; i++) { + if (xf86Screens[i]->EnableDisableFBAccess) + (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); } - else { - DebugF("xf86VTSwitch: Entering\n"); - if (!xf86VTSwitchTo()) - return; -#ifdef XF86PM - xf86OSPMClose = xf86OSPMOpen(); -#endif + /* Turn screen saver off when switching back */ + dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); - if (xorgHWAccess) - xf86EnableIO(); - xf86AccessEnter(); - for (i = 0; i < xf86NumScreens; i++) { - xf86Screens[i]->vtSema = TRUE; - if (!xf86Screens[i]->EnterVT(xf86Screens[i])) - FatalError("EnterVT failed for screen %d\n", i); - } - for (i = 0; i < xf86NumGPUScreens; i++) { - xf86GPUScreens[i]->vtSema = TRUE; - if (!xf86GPUScreens[i]->EnterVT(xf86GPUScreens[i])) - FatalError("EnterVT failed for gpu screen %d\n", i); - } - for (i = 0; i < xf86NumScreens; i++) { - if (xf86Screens[i]->EnableDisableFBAccess) - (*xf86Screens[i]->EnableDisableFBAccess) (xf86Screens[i], TRUE); - } + for (pInfo = xf86InputDevs; pInfo; pInfo = pInfo->next) + xf86EnableInputDeviceForVTSwitch(pInfo); + for (ih = InputHandlers; ih; ih = ih->next) { + if (ih->is_input) + xf86EnableInputHandler(ih); + else + xf86EnableGeneralHandler(ih); + } +#ifdef XSERVER_PLATFORM_BUS + /* check for any new output devices */ + xf86platformVTProbe(); +#endif - /* Turn screen saver off when switching back */ - dixSaveScreens(serverClient, SCREEN_SAVER_FORCER, ScreenSaverReset); + OsReleaseSIGIO(); +} - pInfo = xf86InputDevs; - while (pInfo) { - if (pInfo->dev && (pInfo->flags & XI86_DEVICE_DISABLED) == 0) - EnableDevice(pInfo->dev, TRUE); - pInfo->flags &= ~XI86_DEVICE_DISABLED; - pInfo = pInfo->next; - } +/* + * xf86VTSwitch -- + * Handle requests for switching the vt. + */ +static void +xf86VTSwitch(void) +{ + DebugF("xf86VTSwitch()\n"); - for (ih = InputHandlers; ih; ih = ih->next) { - if (ih->is_input) - xf86EnableInputHandler(ih); - else - xf86EnableGeneralHandler(ih); - } -#ifdef XSERVER_PLATFORM_BUS - /* check for any new output devices */ - xf86platformVTProbe(); +#ifdef XFreeXDGA + if (!DGAVTSwitch()) + return; #endif - OsReleaseSIGIO(); - } + /* + * Since all screens are currently all in the same state it is sufficient + * check the first. This might change in future. + */ + if (xf86VTOwner()) + xf86VTLeave(); + else + xf86VTEnter(); } /* Input handler registration */ diff --git a/xorg-server/hw/xfree86/common/xf86Helper.c b/xorg-server/hw/xfree86/common/xf86Helper.c index 2c0629d64..12a877159 100644 --- a/xorg-server/hw/xfree86/common/xf86Helper.c +++ b/xorg-server/hw/xfree86/common/xf86Helper.c @@ -217,6 +217,10 @@ xf86DeleteScreen(ScrnInfoPtr pScrn) int i; int scrnIndex; Bool is_gpu = FALSE; + + if (!pScrn) + return; + if (pScrn->is_gpu) { /* First check if the screen is valid */ if (xf86NumGPUScreens == 0 || xf86GPUScreens == NULL) @@ -228,9 +232,6 @@ xf86DeleteScreen(ScrnInfoPtr pScrn) return; } - if (!pScrn) - return; - scrnIndex = pScrn->scrnIndex; /* If a FreeScreen function is defined, call it here */ if (pScrn->FreeScreen != NULL) diff --git a/xorg-server/hw/xfree86/common/xf86Init.c b/xorg-server/hw/xfree86/common/xf86Init.c index 9c8a86a39..ff4d38f28 100644 --- a/xorg-server/hw/xfree86/common/xf86Init.c +++ b/xorg-server/hw/xfree86/common/xf86Init.c @@ -53,6 +53,7 @@ #include "scrnintstr.h" #include "site.h" #include "mi.h" +#include "dbus-core.h" #include "compiler.h" @@ -456,6 +457,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) if (xf86DoShowOptions) DoShowOptions(); + dbus_core_init(); + /* Do a general bus probe. This will be a PCI probe for x86 platforms */ xf86BusProbe(); @@ -544,7 +547,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) if (NEED_IO_ENABLED(flags)) want_hw_access = TRUE; - if (!(flags & HW_SKIP_CONSOLE)) + /* Non-seat0 X servers should not open console */ + if (!(flags & HW_SKIP_CONSOLE) && !ServerIsNotSeat0()) xorgHWOpenConsole = TRUE; } @@ -1058,6 +1062,8 @@ ddxGiveUp(enum ExitCode error) if (xorgHWOpenConsole) xf86CloseConsole(); + dbus_core_fini(); + xf86CloseLog(error); /* If an unexpected signal was caught, dump a core for debugging */ diff --git a/xorg-server/hw/xfree86/modes/xf86EdidModes.c b/xorg-server/hw/xfree86/modes/xf86EdidModes.c index a56f6ba23..6fb0f9b92 100644 --- a/xorg-server/hw/xfree86/modes/xf86EdidModes.c +++ b/xorg-server/hw/xfree86/modes/xf86EdidModes.c @@ -162,6 +162,11 @@ quirk_detailed_use_maximum_size(int scrnIndex, xf86MonPtr DDC) DDC->vendor.prod_id == 0x7f01) return TRUE; + /* Sony Vaio Pro 13 */ + if (memcmp(DDC->vendor.name, "MEI", 4) == 0 && + DDC->vendor.prod_id == 0x96a2) + return TRUE; + return FALSE; } diff --git a/xorg-server/hw/xfree86/vgahw/Makefile.am b/xorg-server/hw/xfree86/vgahw/Makefile.am index f0b65740c..4b718b489 100644 --- a/xorg-server/hw/xfree86/vgahw/Makefile.am +++ b/xorg-server/hw/xfree86/vgahw/Makefile.am @@ -1,5 +1,6 @@ module_LTLIBRARIES = libvgahw.la libvgahw_la_LDFLAGS = -avoid-version +libvgahw_la_LIBADD = $(PCIACCESS_LIBS) libvgahw_la_SOURCES = vgaHW.c vgaHWmodule.c AM_CPPFLAGS = $(XORG_INCS) -I$(srcdir)/../ddc -I$(srcdir)/../i2c AM_CFLAGS = $(DIX_CFLAGS) $(XORG_CFLAGS) diff --git a/xorg-server/include/Makefile.am b/xorg-server/include/Makefile.am index 93d8616f2..fa6da00ec 100644 --- a/xorg-server/include/Makefile.am +++ b/xorg-server/include/Makefile.am @@ -68,7 +68,7 @@ endif AM_CFLAGS = $(DIX_CFLAGS) EXTRA_DIST = \ - busfault.h \ + busfault.h dbus-core.h \ dix-config-apple-verbatim.h \ dixfontstubs.h eventconvert.h eventstr.h inpututils.h \ protocol-versions.h \ diff --git a/xorg-server/glamor/compiler.h b/xorg-server/include/dbus-core.h index fa2895976..b2d6d1b9e 100644 --- a/xorg-server/glamor/compiler.h +++ b/xorg-server/include/dbus-core.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2011 Intel Corporation + * Copyright © 2013 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"), @@ -16,44 +16,41 @@ * 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. - * - * Authors: - * Chris Wilson <chris@chris-wilson.co.uk> - * - * Copied from sna + * 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: Hans de Goede <hdegoede@redhat.com> */ -#ifndef _GLAMOR_COMPILER_H_ -#define _GLAMOR_COMPILER_H_ +#ifndef DBUS_CORE_H +#define DBUS_CORE_H -#if defined(__GNUC__) && (__GNUC__ > 2) && defined(__OPTIMIZE__) -#define likely(expr) (__builtin_expect (!!(expr), 1)) -#define unlikely(expr) (__builtin_expect (!!(expr), 0)) -#define noinline __attribute__((noinline)) -#define fastcall __attribute__((regparm(3))) -#define must_check __attribute__((warn_unused_result)) -#define constant __attribute__((const)) -#else -#define likely(expr) (expr) -#define unlikely(expr) (expr) -#define noinline -#define fastcall -#define must_check -#define constant -#endif +#ifdef NEED_DBUS +typedef struct DBusConnection DBusConnection; + +typedef void (*dbus_core_connect_hook) (DBusConnection * connection, + void *data); +typedef void (*dbus_core_disconnect_hook) (void *data); + +struct dbus_core_hook { + dbus_core_connect_hook connect; + dbus_core_disconnect_hook disconnect; + void *data; + + struct dbus_core_hook *next; +}; + +int dbus_core_init(void); +void dbus_core_fini(void); +int dbus_core_add_hook(struct dbus_core_hook *hook); +void dbus_core_remove_hook(struct dbus_core_hook *hook); -#ifdef HAVE_VALGRIND -#define VG(x) x #else -#define VG(x) -#endif -#define VG_CLEAR(s) VG(memset(&s, 0, sizeof(s))) +#define dbus_core_init() +#define dbus_core_fini() -#define COMPILE_TIME_ASSERT(E) ((void)sizeof(char[1 - 2*!(E)])) +#endif -#endif /* _SNA_COMPILER_H_ */ +#endif diff --git a/xorg-server/include/dix-config.h.in b/xorg-server/include/dix-config.h.in index 55cfe4710..7c77956b1 100644 --- a/xorg-server/include/dix-config.h.in +++ b/xorg-server/include/dix-config.h.in @@ -199,6 +199,9 @@ /* Define to 1 if you have the `strndup' function. */ #undef HAVE_STRNDUP +/* Define to 1 if libsystemd-daemon is available */ +#undef HAVE_SYSTEMD_DAEMON + /* Define to 1 if SYSV IPC is available */ #undef HAVE_SYSV_IPC @@ -411,11 +414,8 @@ /* Use udev_enumerate_add_match_tag() */ #undef HAVE_UDEV_ENUMERATE_ADD_MATCH_TAG -/* Use D-Bus for input hotplug */ -#undef CONFIG_NEED_DBUS - -/* Support the D-Bus hotplug API */ -#undef CONFIG_DBUS_API +/* Enable D-Bus core */ +#undef NEED_DBUS /* Support HAL for hotplug */ #undef CONFIG_HAL @@ -472,7 +472,13 @@ /* Don't let Xdefs.h define 'pointer' */ #define _XTYPEDEF_POINTER 1 +/* Don't let XIproto define 'Pointer' */ +#define _XITYPEDEF_POINTER 1 + /* Ask fontsproto to make font path element names const */ #define FONT_PATH_ELEMENT_NAME_CONST 1 +/* Build GLAMOR */ +#undef GLAMOR + #endif /* _DIX_CONFIG_H_ */ diff --git a/xorg-server/pseudoramiX/pseudoramiX.c b/xorg-server/pseudoramiX/pseudoramiX.c index 23dbc7328..f47c7836d 100644 --- a/xorg-server/pseudoramiX/pseudoramiX.c +++ b/xorg-server/pseudoramiX/pseudoramiX.c @@ -100,6 +100,10 @@ static unsigned long pseudoramiXGeneration = 0; static void PseudoramiXTrace(const char *format, ...) + _X_ATTRIBUTE_PRINTF(1, 2); + +static void +PseudoramiXTrace(const char *format, ...) { va_list ap; @@ -110,6 +114,10 @@ PseudoramiXTrace(const char *format, ...) static void PseudoramiXDebug(const char *format, ...) + _X_ATTRIBUTE_PRINTF(1, 2); + +static void +PseudoramiXDebug(const char *format, ...) { va_list ap; diff --git a/xorg-server/test/xi2/protocol-xipassivegrabdevice.c b/xorg-server/test/xi2/protocol-xipassivegrabdevice.c index 1e2341eb7..c747ddf03 100644 --- a/xorg-server/test/xi2/protocol-xipassivegrabdevice.c +++ b/xorg-server/test/xi2/protocol-xipassivegrabdevice.c @@ -137,6 +137,7 @@ request_XIPassiveGrabDevice(ClientPtr client, xXIPassiveGrabDeviceReq * req, { int rc; int local_modifiers; + int mask_len; rc = ProcXIPassiveGrabDevice(&client_request); assert(rc == error); @@ -153,10 +154,11 @@ request_XIPassiveGrabDevice(ClientPtr client, xXIPassiveGrabDeviceReq * req, swaps(&req->deviceid); local_modifiers = req->num_modifiers; swaps(&req->num_modifiers); + mask_len = req->mask_len; swaps(&req->mask_len); while (local_modifiers--) { - CARD32 *mod = ((CARD32 *) (req + 1)) + local_modifiers; + CARD32 *mod = (CARD32 *) (req + 1) + mask_len + local_modifiers; swapl(mod); } @@ -228,6 +230,11 @@ test_XIPassiveGrabDevice(void) request->detail = XIAnyButton; request_XIPassiveGrabDevice(&client_request, request, Success, 0); + /* Set a few random masks to make sure we handle modifiers correctly */ + SetBit(mask, XI_ButtonPress); + SetBit(mask, XI_KeyPress); + SetBit(mask, XI_Enter); + /* some modifiers */ request->num_modifiers = N_MODS; request->length += N_MODS; diff --git a/xorg-server/xkeyboard-config/NEWS b/xorg-server/xkeyboard-config/NEWS index c0db1c6d5..05c89d145 100644 --- a/xorg-server/xkeyboard-config/NEWS +++ b/xorg-server/xkeyboard-config/NEWS @@ -1,3 +1,6 @@ +2.11 11 bugs fixed + Continuing code formatting cleanup + Translations updated 2.10.1 Critical fix 2.10 10+ bugs fixed 37 cleanup commits by Benno Schulenberg diff --git a/xorg-server/xkeyboard-config/configure.ac b/xorg-server/xkeyboard-config/configure.ac index 51f070c68..a0886a645 100644 --- a/xorg-server/xkeyboard-config/configure.ac +++ b/xorg-server/xkeyboard-config/configure.ac @@ -1,4 +1,4 @@ -AC_INIT(xkeyboard-config, 2.10.1) +AC_INIT(xkeyboard-config, 2.11) AC_CONFIG_SRCDIR(rules/base.xml.in) AM_INIT_AUTOMAKE([foreign dist-bzip2]) AM_MAINTAINER_MODE diff --git a/xorg-server/xkeyboard-config/keycodes/xfree86 b/xorg-server/xkeyboard-config/keycodes/xfree86 index 0c910187f..47dc8934e 100644 --- a/xorg-server/xkeyboard-config/keycodes/xfree86 +++ b/xorg-server/xkeyboard-config/keycodes/xfree86 @@ -163,9 +163,7 @@ xkb_keycodes "basic" { // The entries commented out are never generated because the raw codes // in those positions are already used for well-defined keys. - alias <I01> = <XFER>; <I02> = 130; - alias <I03> = <NFER>; <I04> = 132; alias <I05> = <AE13>; <I06> = 134; @@ -287,7 +285,9 @@ xkb_keycodes "basic" { <I7A> = 250; <I7B> = 251; <I7C> = 252; + alias <IR7C> = <I7C>; <I7D> = 253; + alias <IR7D> = <I7D>; <I7E> = 254; <I7F> = 255; diff --git a/xorg-server/xkeyboard-config/po/bg.po b/xorg-server/xkeyboard-config/po/bg.po index f2846c38f..bf785a69c 100644 --- a/xorg-server/xkeyboard-config/po/bg.po +++ b/xorg-server/xkeyboard-config/po/bg.po @@ -1,9 +1,11 @@ # Bulgarian translation of xkeyboard-config. # Copyright (C) 2002, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # Copyright (C) 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc. +# Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. # Alexander Shopov <ash@kambanaria.org>, 2002, 2005, 2006, 2007, 2008. # Alexander Shopov <ash@kambanaria.org>, 2009, 2010, 2011, 2012, 2013. +# Alexander Shopov <ash@kambanaria.org>, 2014. # Damyan Ivanov <dam+gnome@ktnx.net>, 2010. # # @@ -49,12 +51,12 @@ # Предпочита се дълго тире „—“ пред скоби „()“. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 21:36+0300\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-17 19:19+0200\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" -"Language-Team: Bulgarian <dict@fsa-bg.org>\n" +"Language-Team: Bulgarian <dict@ludost.net>\n" "Language: bg\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -861,7 +863,7 @@ msgid "English (programmer Dvorak)" msgstr "английска — Дворак за програмисти" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "Рск" @@ -933,11 +935,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "узбекска — афганистанска, OLPC" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "Арб" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "арабска" @@ -975,11 +977,11 @@ msgid "Albanian" msgstr "албанска" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "Арм" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "арменска" @@ -1055,11 +1057,11 @@ msgid "Belarusian (Latin)" msgstr "беларуска — латиница" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "Бел" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "белгийска" @@ -1091,17 +1093,17 @@ msgstr "белгийска — с „мъртви“ клавиши на Sun" msgid "Belgian (Wang model 724 azerty)" msgstr "белгийска — Wang, модел 724, azerty" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "Бнг" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "бенгалска" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "бенгалска — пробхат" #. Keyboard indicator for Indian layouts @@ -1114,27 +1116,27 @@ msgid "Indian" msgstr "индийска" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "бенгалска — индийска" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "бенгалска — индийска, пробхат" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "бенгалска — индийска, байшаки" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "бенгалска — индийска, борона" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "бенгалска — индийска, уни гитанжали" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "бенгалска — индийска, байшаки, инскрипт" #. Keyboard indicator for Gujarati layouts @@ -1318,11 +1320,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "босненска — американска с босненски букви" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "Прт" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "португалска — бразилска" @@ -1335,16 +1337,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "португалска — бразилска, Дворак" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "португалска — бразилска, нативна" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "португалска — бразилска, нативна за САЩ" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "португалска — бразилска, нативна за есперанто" +msgid "Esperanto (Brazil, Nativo)" +msgstr "есперантска — бразилска, нативна" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1498,2464 +1500,2484 @@ msgid "Tibetan (with ASCII numerals)" msgstr "тибетска — с цифри от ASCII" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "Угр" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "уйгурска" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "Хрв" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "хърватска" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "хърватска — с „«»“" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "хърватска — с хърватски диграфи" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "хърватска — американска с хърватски диграфи" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "хърватска — американска с хърватски букви" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "Чшк" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "чешка" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "чешка — с „\\|“" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "чешка — qwerty" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "чешка — qwerty с „\\“" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "чешка — UCW, само букви с надредни знаци" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "чешка — американски Дворак с поддръжка на UCW" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "Дтс" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "датска" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "датска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "датска — за Макинтош" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "датска — за Макинтош, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "датска — Дворак" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "Хлн" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "холандска" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "холандска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "холандска — за Макинтош" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "холандска — стандартна" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "Дзн" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "дзонка" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "Ест" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "естонска" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "естонска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "естонска — Дворак" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "естонска — американска с естонски букви" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "персийска" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "персийска — с персийска цифрова клавиатура" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "Крд" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "кюрдска — иранска, латиница, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "кюрдска — иранска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "кюрдска — иранска, латиница, „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "кюрдска — иранска, арабски и латински букви" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "иракска" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "кюрдска — иракска, латиница, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "кюрдска — иракска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "кюрдска — иракска, латиница, „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "кюрдска — иракска, арабски и латински букви" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "Фрр" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "фарьорска" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "фарьорска — без „мъртви“ клавиши" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "Фнл" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "финландска" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "финландска — класическа" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "финландска — класическа, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "северносамска — финландска" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "финландска — за Макинтош" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "френска" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "френска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "френска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "френска — алтернативна" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "френска — алтернативна, само латиница по Latin-9" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "френска — алтернативна, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "френска — алтернативна, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "френска — алтернативна, остаряла" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "френска — алтернативна, остаряла, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "френска — алтернативна, остаряла, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "френска — Дворак, bépo, ергономична" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "френска — Дворак, bépo, ергономична, само латиница по Latin-9" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "френска — Дворак" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "френска — за Макинтош" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "френска — бретонска" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "провансалска" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "грузинска — azerty на Цкапо" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "английска — ганайска" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "английска — ганайска, международна" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "Акн" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "аканска" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "Еве" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "еве" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "Фла" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "фула" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "Га " -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "га" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "Хск" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "хауска" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "Авт" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "аватимска" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "английска — ганайска, GILLBT" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "френска — гвинейска" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "Грз" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "грузинска" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "грузинска — ергономична" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "грузинска — MESS" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "руска — грузинска" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "осетинска — грузинска" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "немска" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "немска — с „мъртво“ ударение" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "немска — с „мъртво“ тежко ударение" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "немска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "немска — T3" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "румънска — немска" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "немска — немска, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "немска — Дворак" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "немска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "немска — Neo 2, добавени гръцки букви" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "немска — за Макинтош" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "немска — за Макинтош, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "долно сорбска" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "долно сорбска — qwertz" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "немска — qwerty" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "руска — германска, фонетична" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "немска — остаряла" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "Грц" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "гръцка" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "гръцка — опростена" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "гръцка — разширена" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "гръцка — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "гръцка — политонална" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "Унг" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "унгарска" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "унгарска — стандартна" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "унгарска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "унгарска — qwerty" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "унгарска — 101 клавиша, qwertz, „,“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "унгарска — 101 клавиша, qwertz, „,“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "унгарска — 101 клавиша, qwertz, „.“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "унгарска — 101 клавиша, qwertz, „.“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "унгарска — 101 клавиша, qwerty, „,“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "унгарска — 101 клавиша, qwerty, „,“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "унгарска — 101 клавиша, qwerty, „.“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "унгарска — 101 клавиша, qwerty, „.“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "унгарска — 102 клавиша, qwertz, „,“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "унгарска — 102 клавиша, qwertz, „,“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "унгарска — 102 клавиша, qwertz, „.“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "унгарска — 102 клавиша, qwertz, „.“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "унгарска — 102 клавиша, qwerty, „,“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "унгарска — 102 клавиша, qwerty, „,“, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "унгарска — 102 клавиша, qwerty, „.“, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "унгарска — 102 клавиша, qwerty, „.“, без „мъртви“ клавиши" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "Еск" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "исландска" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "исландска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "исландска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "исландска — за Макинтош" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "исландска — Дворак" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "Ивр" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "иврит" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "иврит — LyX" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "иврит — фонетична" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "иврит — библейска, Тиро" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "Итл" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "италианска" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "италианска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "италианска — за Макинтош" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "италианска — американска с италиански букви" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "грузинска — италианска" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "италианска — IBM 142" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "Япн" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "японска" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "японска — кана" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "японска — кана 86" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "японска — OADG 109A" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "японска — за Макинтош" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "японска — Дворак" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "Крг" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "киргистанска" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "киргистанска — фонетична" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "Кхм" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "кхмерска — камбоджанска" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "Кзх" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "казахска" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "руска — казахстанска, за казахски" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "казахска с руски букви" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "Лск" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "лаоска" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "лаоска — стандартна подредба по STEA" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "Исп" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "испанска — латиноамериканска" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "испанска — латиноамериканска, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "испанска — латиноамериканска, с мъртва „~“" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "испанска — латиноамериканска, с „мъртви“ клавиши на Sun" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "Лит" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "литовска" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "литовска — стандартна" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "литовска — американска с литовски букви" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "литовска — IBM LST 1205-92" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "литовска — LEKP" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "литовска — LEKPa" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "Лат" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "латвийска" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "латвийска — с „'“" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "латвийска — с „~“" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "латвийска — с „F“" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "латвийска — модерна" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "латвийска — ергономична, ūgjrmv" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "латвийска — адаптирана" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "Мрс" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "маорска" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "Срб" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "черногорска" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "черногорска — кирилица" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "черногорска — кирилица с разменени „З“ и „Ж“" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "черногорска — латиница за Уникод" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "черногорска — латиница, qwerty" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "черногорска — латиница за Уникод, qwerty" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "черногорска — кирилица с „«»“" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "черногорска — латиница с „«»“" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "Мкд" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "македонска" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "македонска — без „мъртви“ клавиши" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "Млт" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "малтийска" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "малтийска — американска подредба" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "Мнг" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "монголска" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "Нрв" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "норвежка" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "норвежка — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "норвежка — Дворак" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "северносамска — норвежка" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "северносамска — норвежка, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "норвежка — за Макинтош" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "норвежка — за Макинтош, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "норвежка — Коулмак" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "Плс" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "палска" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "полска — остаряла" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "полска — qwertz" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "полска — Дворак" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "полска — Дворак, «„”» при «'\"»" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "полска — Дворак, «„”» при «1»" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "кашубска" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "руска — полска, фонетична, Дворак" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "полска — Дворак за програмисти" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "португалска" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "португалска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "португалска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "португалска — за Макинтош" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "португалска — за Макинтош, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "португалска — за Макинтош, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "португалска — нативна" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "португалска — нативна за САЩ" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "есперантска — португалска, нативна" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "Рмн" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "румънска" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "румънска — букви с „¸“" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "румънска — стандартна" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "румънска — стандартна, букви с „¸“" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "румънска — с клавиши на Windows" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "руска" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "руска — фонетична" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "руска — фонетична, с клавиши на Windows" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "руска — за пишеща машина" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "руска — остаряла" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "руска — за пишеща машина, остаряла" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "татарска" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "осетинска — остаряла" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "осетинска — с клавиши на Windows" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "чувашка" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "чувашка — латиница" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "удмуртска" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "комска" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "якутска" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "калмикска" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "руска — DOS" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "руска — за Макинтош" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "сръбска — руска" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "башкирска" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "марийска" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "сръбска" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "сръбска — кирилица с разменени „З“ и „Ж“" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "сръбска — латиница" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "сръбска — латиница за Уникод" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "сръбска — латиница, qwerty" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "сръбска — латиница за Уникод, qwerty" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "сръбска — кирилица с „«»“" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "сръбска — латиница с „«»“" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "панонска русинска — еднозвучна" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "панонска русинска" # словенска #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "Слн" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "словенска" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "словенска — с „«»“" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "словенска — американска със словенски букви" # славашка #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "Слш" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "словашка" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "словашка — с „\\“" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "словашка — qwerty" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "словашка — qwerty, с „\\“" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "испанска" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "испанска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "испанска — с „мъртва“ тилда" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "испанска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "испанска — Дворак" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "астурска — испанска с „Ḥ“ и „Ḷ“" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "каталунска — испанска с „Ŀ“" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "испанска — за Макинтош" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "Швд" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "шведска" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "шведска — без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "шведска — Дворак" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "руска — шведска, фонетична" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "руска — шведска, фонетична, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "северносамска — шведска" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "шведска — за Макинтош" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "шведска — шведски Дворак" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "шведска — жестомимична" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "немска — швейцарска" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "немска — швейцарска, остаряла" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "немска — швейцарска, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "немска — швейцарска, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "френска — швейцарска" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "френска — швейцарска, без „мъртви“ клавиши" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "френска — швейцарска, с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "френска — швейцарска, за Макинтош" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "немска — швейцарска, за Макинтош" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "арабска — сирийска" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "Срк" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "сириакска" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "сириакска — фонетична" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "кюрдска — сирийска, латиница, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "кюрдска — сирийска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "кюрдска — сирийска, латиница, „Q“ горе-вляво, алтернативна" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "Тдж" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "таджикска" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "таджикска — остаряла" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "Снх" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "синхала — фонетична" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "тамилска — шриланкска, Уникод" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "тамилска — шриланкска, за пишеща машина, кодиране TAB" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "Тск" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "тайландска" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "тайландска — TIS-820.2538" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "тайландска — патачотска" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "Трс" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "турска" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "турска — „F“ горе-вляво" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "турска — „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "турска — с „мъртви“ клавиши на Sun" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "кюрдска — турска, латиница, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "кюрдска — турска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "кюрдска — турска, латиница, „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "турска — международна, с „мъртви“ клавиши" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "Ттр" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "кримски татарски — турска, „Q“ горе-вляво" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "кримски татарски — турска, „F“ горе-вляво" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "кримски татарски — турска, „Q“ горе-вляво, алтернативна" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "тайванска" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "тайванска — туземна" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "Сст" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "сайсиятска — тайванска" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "Укр" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "украинска" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "украинска — фонетична" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "украинска — за пишеща машина" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "украинска — с клавиши на Windows" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "украинска — остаряла" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "украинска — републикански стандарт" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "руска — украинска, републикански стандарт" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "украинска — еднозвучна, алтернативна" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "английска — великобританска" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "английска — великобританска, разширена, с клавиши на Windows" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "английска — великобританска, международна, с „мъртви“ клавиши" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "английска — великобританска, Дворак" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "английска — великобританска, с пунктуация на Обединеното кралство, Дворак" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "английска — великобританска, за Макинтош" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "английска — великобританска, за Макинтош, международна" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "английска — великобританска, Коулмак" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "узбекска" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "узбекска — латиница" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "Втн" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "виетнамска" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "Крс" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "корейска" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "корейска — съвместима със 101/104 клавиша" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "японска — серии PC-98xx" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "Ирл" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "ирландска" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "келтска латиница" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "ирландска — експертна за Уникод" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "огамска" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "огамска — IS434" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "урду — пакистанска" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "урду — пакистанска, CRULP" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "урду — пакистанска, NLA" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "арабска — пакистанска" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "Снд" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "синдхи" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "Две" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "дивеи" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "английска — южноафриканска" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "Есп" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "есперантска" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "есперантска — разменени „;“ и „\"“, остаряла" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "Нпл" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "непалска" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "английска — нигерийска" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "Игб" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "игбо" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "Йрб" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "йоруба" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "Амх" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "амхарска" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "Улф" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Уолоф" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "Брл" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "брайл" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "брайл за левичари" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "брайл за десничари" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "Трк" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "тюркменска" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "тюркменска — „Q“ горе-вляво, алтернативна" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "Бмб" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "бамбарска" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "френска — малийска, алтернативна" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "английска — малийска, американска за Макинтош" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "английска — малийска, американска международна" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "Схл" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "суахили — танзанийска" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "суахили — кенийска" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "кикуйска" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "Тсн" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "тсуанска" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "Флп" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "филипинска" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "филипинска — QWERTY за байбаин" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "филипинска — Дворак на Кейпуел за латиница" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "филипинска — Дворак на Кейпуел за байбаин" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "филипинска — QWERF 2006 на Кейпуел за латиница" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "филипинска — QWERF 2006 на Кейпуел за байбаин" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "филипинска — Коулмак за латиница" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "филипинска — Коулмак за байбаин" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "филипинска — Дворак за латиница" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "филипинска — Дворак за байбаин" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "Млд" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "молдовска" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "Ггз" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "молдовска — гагаузка" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Клавиш(и) за смяна на подредбата" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Десният Alt (докато е натиснат)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Левият Alt (докато е натиснат)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Левият Win (докато е натиснат)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Десният Win (докато е натиснат)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Всеки Win (докато е натиснат)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Десният Ctrl (докато е натиснат)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Десният Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Левият Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (към първата подредба), Shift+Caps Lock (към последната)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Левият Win (към първата подредба), десният Win/Menu (към последната)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Левият Ctrl (към първата подредба), десният Ctrl (към последната)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Двата Shift-а заедно" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Двата Alt-а заедно" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Двата Ctrl-а заедно" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Левият Ctrl+левият Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Десният Ctrl+десният Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Левият Alt+левият Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Space" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Левият Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Десният Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Левият Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Десният Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Левият Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Десният Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Левият Ctrl+левият Win (към първата подредба), десният Ctrl+Menu (към последната)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Клавиш за избор третото ниво" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Всеки Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Всеки Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Десният Alt, Shift+десният Alt са Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Десният Alt никога не избира третото ниво" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter на цифровата клавиатура" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Обратно наклонена черта" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "„<>“" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Caps Lock избира третото ниво и еднократно го заключва заедно с друг клавиш за трето ниво" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Обратно наклонената черта избира третото ниво и еднократно го заключва заедно с друг клавиш за трето ниво" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "„<>“ избира третото ниво и еднократно го заключва заедно с друг клавиш за трето ниво" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Положение на Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock е Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Левият Ctrl е Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Размяна на Ctrl и Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Вляво от „A“" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Долу вляво" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Десният Ctrl е десен Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu е десният Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Десният Alt е десен Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Размяна на левия Alt с левия Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Размяна на левия Win с левия Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Левият Alt е Ctrl, левият Ctrl е Win, левият Win е Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Индикация чрез клавиатурен светодиод за смяна на подредбата" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Подредба на цифровата клавиатура" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "остаряла" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Допълненията от Уникод (стрелки и математически операции)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Допълненията от Уникод (стрелки и математически операции, операциите са на стандартното ниво)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Остаряла Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Цифрова клавиатура — Wang 724, с допълненията от Уникод (стрелки и математически операции)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Цифрова клавиатура Wang 724, с допълненията от Уникод (стрелки и математически операции, операциите са на стандартното ниво)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "шестнадесетична" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "Като банкомат/телефон" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Поведение на клавиша за триене на цифровата клавиатура" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Остарял клавиш с десетична точка" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Остарял клавиш с десетична запетая" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Клавиш на четири нива с десетична точка" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Клавиш на четири нива с десетична точка, само латиница по Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Клавиш на четири нива с десетична запетая" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Клавиш на четири нива с арабска десетична запетая" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Клавиш на четири нива с абстрактни разделители" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "„;“ на третото ниво" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Поведение на Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock използва вътрешна промяна на регистъра. Shift временно спира Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock използва вътрешна промяна на регистъра. Shift не влияе на Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock работи като Shift със заключване. Shift временно спира Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock сменя състоянието Shift само на буквените клавиши" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Caps Lock е допълнителен Num Lock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Размяна на Esc и Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Caps Lock е допълнителен Esc" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Caps Lock е допълнителен Backspace" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Caps Lock е допълнителен Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Caps Lock е допълнителен Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock сменя състоянието Shift (за всички клавиши)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock е изключен" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Caps Lock е допълнителен Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Поведение на Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Добавяне на стандартното поведение на Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt-овете отговарят на Meta и на Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "И двата Win-а са Alt (както и клавишите Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "И двата Win-а са Control (както и клавишите Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "И двата Alt-а са Control, Win е Alt" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "И двата Win-а са Meta" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Левият Win е Meta" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "И двата Win-а са Hyper" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Десният Win е Alt, а Menu — Super" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt е разменен с Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Положение на Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Левият Win на 3-то ниво" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Десният Win на 3-то ниво" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Menu на 3-то ниво" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Левият Ctrl на 3-то ниво" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Десният Ctrl на 3-то ниво" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Caps Lock на 3-то ниво" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "„<>“ на 3-то ниво" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Разни настройки за съвместимост" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Стандартни клавиши на цифровата клавиатура" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Цифровата клавиатура генерира само цифри (като в Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Shift за цифровата клавиатура както в MS Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift не отменя Caps Lock, а избира третото ниво" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Специалните комбинации (Ctrl+Alt+<клавиш>) се обработват от сървъра" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift отменя Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Допълнителни типографски знаци" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Двата Shift-а заедно превключват Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Двата Shift-а заедно включват Caps Lock, самостоятелен Shift го изключва" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Двата Shift-а заедно превключват ShiftLock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift+Num Lock превключват клавишите за придвижване" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Позволяване на клавиатурно прекъсване на прихващането на устройствата (внимание: позволяването намалява сигурността)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Журнални съобщения за дървото и прихващането на прозорците" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Добавяне на знак за валута към някои клавиши" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "„€“ при „E“" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "„€“ при „2“" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "„€“ при „4“" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "„€“ при „5“" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "„₨“ при „4“" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Клавиш за избор петото ниво" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "„<>“ избира петото ниво и го заключва заедно с друг клавиш за пето ниво" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Десният Alt избира петото ниво и го заключва заедно с друг клавиш за пето ниво" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Левият Win избира петото ниво и го заключва заедно с друг клавиш за пето ниво" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Десният Win избира петото ниво и го заключва заедно с друг клавиш за пето ниво" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Генериране на интервал без разделяне с клавишa за интервал" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Нормален интервал на всички нива" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Интервал без разделяне на второ ниво" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Интервал без разделяне на трето ниво" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Интервал без разделяне на трето ниво и нищо на четвърто ниво" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Интервал без разделяне на трето ниво и тесен интервал без разделяне на четвърто ниво" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Интервал без разделяне на четвърто ниво" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Интервал без разделяне на четвърто ниво и тесен интервал без разделяне на шесто ниво" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Разделител с нулева широчина на второ ниво" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Разделител с нулева широчина на второ ниво и съединител с нулева широчина на трето ниво" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Разделител с нулева широчина на второ ниво и интервал без разделяне на трето ниво" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Разделител с нулева широчина на трето ниво и съединител с нулева широчина на четвърто ниво" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Настройки за японска клавиатура" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Клавишът Lock на кана заключва" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Backspace на мястото определено от подредбата NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "„全角/半角“ (Zenkaku Hankaku) е допълнителен Esc" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Добавяне на ударенията на Esperanto" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "към съответния клавиш Qwerty" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "към съответния клавиш в Дворак" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "към съответния клавиш в Коулмак" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Съвместимост със старите кодове на клавиши в Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Съвместимост с клавишите на Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Клавишна комбинация за убиването на X сървъра" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Control+Alt+Backspace" @@ -4067,146 +4089,150 @@ msgstr "селиш на кор дален" msgid "English (US, Sun Type 6/7)" msgstr "английска — американска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "английска — Норман" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "полска — международна, с „мъртви“ клавиши" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "полска — Коулмак" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "полска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "кримски татарски — „Q“ горе-вляво, Добруджа-Q" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "румънска — ергономична, десетопръстна" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "румънска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "сръбска — комбиниращи ударения вместо „мъртви“ клавиши" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "руска — с украинско-белоруска подредба" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "руска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "арменска — фонетична, OLPC" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "иврит — библейска, Сил, фонетична" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "арабска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "белгийска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "португалска — бразилска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "чешка — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "датска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "холандска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "естонска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "финландска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "френска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "гръцка — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "италианска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "японска — на Sun, вид 6" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "японска — на Sun, вид 7, съвместима с PC" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "японска — на Sun, вид 7, съвместима със Sun" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "норвежка — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "португалска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "словашка — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "испанска — с „мъртви“ клавиши на Sun" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "шведска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "немска — швейцарска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "френска — швейцарска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "турска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "украинска — на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "английска — великобританска, на Sun, вид 6/7" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "корейска — на Sun, вид 6/7" diff --git a/xorg-server/xkeyboard-config/po/ca.po b/xorg-server/xkeyboard-config/po/ca.po index 81f4f84e2..c654458cd 100644 --- a/xorg-server/xkeyboard-config/po/ca.po +++ b/xorg-server/xkeyboard-config/po/ca.po @@ -2,13 +2,13 @@ # Copyright © 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. # -# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Josep Ma. Ferrer <txemaq@gmail.com>, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 17:58+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 22:38+0100\n" "Last-Translator: Josep Ma. Ferrer <txemaq@gmail.com>\n" "Language-Team: Catalan <ca@dodds.net>\n" "Language: ca\n" @@ -817,7 +817,7 @@ msgid "English (programmer Dvorak)" msgstr "Anglès (dvorak de programador)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -889,11 +889,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Usbec (Afganistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Àrab" @@ -931,11 +931,11 @@ msgid "Albanian" msgstr "Albanès" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armeni" @@ -1011,11 +1011,11 @@ msgid "Belarusian (Latin)" msgstr "Bielorús (llatí)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belga" @@ -1047,17 +1047,17 @@ msgstr "Belga (tecles mortes de Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belga (Wang model 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengalí" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengalí (Probhat)" #. Keyboard indicator for Indian layouts @@ -1070,27 +1070,27 @@ msgid "Indian" msgstr "Indi" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengalí (Índia)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengalí (Índia, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengalí (Índia, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengalí (Índia, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengalí (Índia, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengalí (Índia, Inscript Baishakhi)" #. Keyboard indicator for Gujarati layouts @@ -1274,11 +1274,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnià (teclat EUA amb lletres bosnianes)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portuguès (Brasil)" @@ -1291,16 +1291,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portuguès (Brasil, dvorak)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portuguès (Brasil, natiu)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portuguès (Brasil, natiu per als teclats EUA)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portuguès (Brasil, natiu per a l'esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Portugal, natiu)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1454,2463 +1454,2483 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibetà (amb nombres ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Uigur" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Croat" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Croat (usa cometes angulars per les cometes)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Croat (usa dígrafs croats)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Croat (teclat EUA amb dígrafs croats)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Croat (teclat EUA amb lletres croates)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Txec" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Txec (amb la tecla <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Txec (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Txec (qwerty, barra inversa ampliada)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Txec (disposició UCW, només lletres accentuades)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Txec (dvorak EUA que permet UCW CZ)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Danès" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Danès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Danès (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Danès (Macintosh, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Danès (dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Holandès" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Holandès (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Holandès (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Holandès (estàndard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estonià" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estonià (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estonià (dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estonià (teclat EUA amb lletres estonianes)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persa" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persa (amb teclat persa)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurd (Iran, llatí Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurd (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurd (Iran, llatí Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurd (Iran, àrab-llatí)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iraquià" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurd (Iraq, llatí Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurd (Iraq, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurd (Iraq, llatí Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurd (Iraq, àrab-llatí)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Feroès" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Feroès (elimina les tecles mortes)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finès" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finès (clàssic)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finès (clàssic, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Sami Nord (Finlàndia)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finès (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Francès" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Francès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Francès (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Francès (alternatiu)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Francès (alternatiu, només llatí-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Francès (alternatiu, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Francès (alternatiu, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Francès (antic, alternatiu)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Francès (antic, alternatiu, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Francès (antic, alternatiu, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Francès (Bepo, ergonòmic, tipus dvorak)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Francès (Bepo, ergonòmic, tipus dvorak, només llatí-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Francès (dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Francès (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Francès (Bretó)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occità" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Georgià (França, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Anglès (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Anglès (Ghana, multilingüe)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Haussa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Anglès (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Francès (Guinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgià" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgià (ergonòmic)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgià (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Rus (Geòrgia)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Osset (Geòrgia)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Alemany" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Alemany (accent mort)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Alemany (accent greu mort)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Alemany (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Alemany (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Romanès (Alemanya)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Romanès (Alemanya, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Alemany (dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Alemany (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Alemany (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Alemany (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Alemany (Macintosh, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Baix sòrab" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Baix sòrab (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Alemany (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Rus (alemany, fonètic)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Alemany (antic)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grec" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grec (senzill)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grec (ampliat)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grec (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grec (politònic)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Hongarès" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Hongarès (estàndard)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Hongarès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Hongarès (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Hongarès (101/qwertz/coma/tecles mortes)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Hongarès (101/qwertz/coma/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Hongarès (101/qwertz/punt/tecles mortes)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Hongarès (101/qwertz/punt/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Hongarès (101/qwerty/coma/tecles mortes)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Hongarès (101/qwerty/coma/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Hongarès (101/qwerty/punt/tecles mortes)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Hongarès (101/qwerty/punt/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Hongarès (102/qwertz/coma/tecles mortes)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Hongarès (102/qwertz/coma/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Hongarès (102/qwertz/punt/tecles mortes)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Hongarès (102/qwertz/punt/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Hongarès (102/qwerty/coma/tecles mortes)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Hongarès (102/qwerty/coma/elimina les tecles mortes)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Hongarès (102/qwerty/punt/tecles mortes)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Hongarès (102/qwerty/punt/elimina les tecles mortes)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandès" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandès (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandès (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandès (dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebreu" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebreu (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebreu (fonètic)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebreu (bíblic, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italià" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italià (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italià (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italià (teclat EUA amb lletres italianes)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgià (Itàlia)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italià (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japonès" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japonès (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japonès (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japonès (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japonès (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japonès (dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirguís" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirguís (fonètic)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Cambotja)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazakh" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Rus (Kazakhstan amb Kazakh)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazakh (amb rus)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Laosià" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Laosià (disposició estàndard proposada per STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Espanyol (llatinoamericà)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Espanyol (llatinoamericà, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Espanyol (llatinoamericà, inclou la titlla morta)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Espanyol (llatinoamericà, tecles mortes de Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Lituà" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Lituà (estàndard)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Lituà (teclat EUA amb lletres lituanes)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Lituà (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Lituà (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Lituà (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Letó" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Letó (variant amb apòstrof)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Letó (variant titlla)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Letó (variant F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Letó (modern)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Letó (ergonòmic, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Letó (adaptat)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrí" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrí (ciríl·lic)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrí (ciríl·lic, Z i ZHE intercanviades)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrí (llatí Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrí (llatí qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrí (llatí Unicode qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrí (ciríl·lic amb cometes angulars)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrí (llatí amb cometes angulars)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedoni" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedoni (elimina les tecles mortes)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltès" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltès (amb disposició EUA)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongol" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Noruec" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Noruec (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Noruec (dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Sami Nord (Noruega)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Sami Nord (Noruega, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Noruec (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Noruec (Macintosh, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Noruec (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polonès" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polonès (antic)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polonès (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polonès (dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polonès (dvorak, cometes poloneses a la tecla cometes)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polonès (dvorak, cometes poloneses a la tecla 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Caixubi" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Rus (Polònia, fonètic dvorak)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polonès (dvorak de programador)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portuguès" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portuguès (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portuguès (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portuguès (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portuguès (Macintosh, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portuguès (Macintosh, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portuguès (natiu)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portuguès (natiu per als teclats EUA)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, natiu)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Romanès" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Romanès (ce trencada)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Romanès (estàndard)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Romanès (ce trencada estàndard)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Romanès (tecles Win)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Rus" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Rus (fonètic)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Rus (fonètic tecles Win)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Rus (màquina d'escriure)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Rus (antic)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Rus (màquina d'escriure, antic)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tàtar" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Osset (antic)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Osset (tecles Win)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Chuvash" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Chuvash (llatí)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurt" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Iacut" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Calmuc" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Rus (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Rus (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbi (Rússia)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baixkir" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbi" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbi (ciríl·lic, Z i ZHE intercanviades)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbi (llatí)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbi (llatí Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbi (llatí qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbi (llatí Unicode qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbi (ciríl·lic amb cometes angulars)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbi (llatí amb cometes angulars)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Rutè Pannònic (homofònic)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Rutè Pannònic" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Eslovè" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Eslovè (usa cometes angulars per les cometes)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Eslovè (teclat EUA amb lletres eslovenes)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Eslovac" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Eslovac (barra inversa ampliada)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Eslovac (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Eslovac (qwerty, barra inversa ampliada)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Espanyol" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Espanyol (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Espanyol (inclou la titlla morta)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Espanyol (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Espanyol (dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturià (Espanya, amb H punt baix i L amb punt baix)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Català (Espanya, L amb punt volat)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Espanyol (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Suec" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Suec (elimina les tecles mortes)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Suec (dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Rus (Suècia, fonètic)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Rus (Suècia, fonètic, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Sami del nord (Suècia)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Suec (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Suec (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Idioma de signes suec" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Alemany (Suïssa)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Alemany (Suïssa, antic)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Alemany (Suïssa, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Alemany (Suïssa, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Francès (Suïssa)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Francès (Suïssa, elimina les tecles mortes)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Francès (Suïssa, tecles mortes de Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Francès (Suïssa, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Alemany (Suïssa, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Àrab (Síria)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Siri" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Siríac (fonètic)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurd (Síria, llatí Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurd (Síria, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurd (Síria, llatí Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadjik" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadjik (antic)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Singalès (fonètic)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tàmil (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tàmil (Sri Lanka, tipus d'escriptura TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Tai" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Tai (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Tai (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turc" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turc (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turc (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turc (tecles mortes de Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurd (Turquia, llatí Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurd (Turquia, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurd (Turquia, llatí Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turc (internacional amb tecles mortes)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Tàtar de Crimea (Turc Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Tàtar de Crimea (Turc F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Tàtar de Crimea (Turc Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanès" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanès (indígena)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ucraïnès" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ucraïnès (fonètic)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ucraïnès (màquina d'escriure)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ucraïnès (tecles Win)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ucraïnès (antic)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ucraïnès (estàndard RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Rus (Ucraïna, estàndard RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ucraïnès (homofònic)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Anglès (RU)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Anglès (RU, tecles Win ampliades)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Anglès (RU, internacional amb tecles mortes)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Anglès (RU, dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Anglès (RU, dvorak amb puntuació RU)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Anglès (RU, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Anglès (RU, Macintosh internacional)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Anglès (RU, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Usbec" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Usbec (llatí)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamita" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Coreà" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Coreà (compatible de 101/104 tecles)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japonès (sèries PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlandès" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlandès (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdú (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdú (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdú (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Àrab (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Diveí" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Anglès (Sud-àfrica)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (punt i coma i cometa desplaçats, obsolet)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalès" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Anglès (Nigèria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Ioruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amhàric" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (ma esquerra)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (ma dretà)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turcman" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turcman (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Francès (Mali, alternatiu)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Anglès (Mali, Macintosh EUA)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Anglès (Mali, internacional EUA)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Suahili (Tanzània)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Suahili (Kenya)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipí" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipí (QWERTY Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipí (Capewell-dvorak llatí)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipí (Capewell-dvorak Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipí (Capewell-QWERF 2006 llatí)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipí (Capewell-QWERF 2006 Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipí (Colemak llatí)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipí (Colemak Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipí (dvorak llatí)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipí (dvorak Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldau" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldau (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Canvi a una altra disposició" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Alt dreta (mentre està premuda)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Alt esquerra (mentre està premuda)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Win esquerra (mentre està premuda)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Win dreta (mentre està premuda)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Qualsevol tecla Win (mentre estan premudes)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Ctrl dreta (mentre està premuda)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Alt dreta" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Alt esquerra" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Bloq Majús" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Maj+Bloq Maj" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Bloq Maj" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Les dues tecles Maj juntes" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Les dues tecles Alt juntes" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Les dues tecles Ctrl juntes" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Maj" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Ctrl esquerra+Maj esquerra" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Ctrl dreta+Maj dreta" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Maj" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Alt esquerra+Maj esquerra" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Espai" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menú" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Win esquerra" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Win dreta" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Maj esquerra" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Maj dreta" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Ctrl esquerra" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Ctrl dreta" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Bloq Despl" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 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:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Tecla per a seleccionar el 3r nivell" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Qualsevol tecla Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Qualsevol tecla Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Alt dreta, Maj+Alt dreta és la «Compose»" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "La tecla Alt dreta mai selecciona el 3r nivell" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Retorn en el teclat numèric" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Barra inversa" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Més petit/Més gran>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Bloq Maj selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de nivell 3r" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Barra inversa selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de 3r nivell" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Més petit/Més gran> selecciona el nivell 3r, bloqueja un cop en prémer conjuntament amb un altre selector de nivell 3r" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Posició de la tecla Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Bloq Majús com a Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Ctrl esquerra com a Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Intercanvia Ctrl i Bloq Maj" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "A l'esquerra d'«A»" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "A baix esquerra" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Ctrl dreta com a Alt dreta" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menú com a Ctrl dreta" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Alt dreta com a Ctrl dreta" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Intercanvia la tecla Alt esquerra per la tecla Ctrl esquerra" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Intercanvia la tecla Win esquerra per la tecla Ctrl esquerra" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Alt esquerra com a Ctrl, Ctrl esquerra com a Win, Win esquerra com a Alt" + +#: ../rules/base.xml.in.h:943 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:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Bloq Núm" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Disposició del teclat numèric" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Antic" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Addicions Unicode (fletxes i operadors matemàtics)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 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:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Wang 724 antic" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 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:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadecimal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "Estil ATM/telèfon" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Comportament de la tecla de supressió del teclat numèric" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Tecla antiga amb punt" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Tecla antiga amb coma" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Tecla de quatre nivells amb punt" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Tecla de quatre nivells amb punt, només llatí-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Tecla de quatre nivells amb coma" # Què collons és momayyez? jm -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Tecla de quatre nivells amb momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Tecla de quatre nivells amb separadors abstractes" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Punt i coma al tercer nivell" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Comportament de la tecla Bloq Maj" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 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:964 +#: ../rules/base.xml.in.h:968 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:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 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:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Converteix Bloq Maj en un Bloq Núm addicional" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Intercanvia Esc i Bloq Maj" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Converteix Bloq Maj en un Esc addicional" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Converteix Bloq Maj en un Retrocés addicional" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Converteix Bloq Maj en un Super addicional" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Converteix Bloq Maj en un Hyper addicional" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Bloq Maj commuta Maj (afecta a totes les tecles)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Bloq Maj està deshabilitat" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Converteix Bloq Maj en un Ctrl addicional" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Comportament de la tecla Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Afegeix el comportament estàndard a la tecla Menú" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt i Meta són a les tecles Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt s'assigna a les tecles Win (i a les tecles Alt habituals)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl s'assigna a les tecles Win (i a les tecles Ctrl habituals)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl s'assigna a les tecles Alt, Alt s'assigna a les tecles Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta s'assigna a les tecles Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta s'assigna a la tecla Win esquerra" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper s'assigna a les tecles Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 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:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt està intercanviada amb la tecla Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Posició de la tecla «Compose»" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3r nivell de Win esquerra" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3r nivell de Win dreta" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3r nivell de Menú" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3r nivell de Ctrl esquerra" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3r nivell de Ctrl dreta" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3r nivell de Bloq Maj" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3r nivell de <Més petit/Més gran>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pausa" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "ImprPant" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Opcions de compatibilitat diverses" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Tecles del teclat numèric per defecte" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Les tecles del teclat numèric sempre introdueixen dígits (com en el Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 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:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Tecles especials (Ctrl+Alt+<tecla>) gestionades en un servidor" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Maj cancel·la Bloq Maj" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Habilita els caràcters tipogràfics extres" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Les dues tecles Maj juntes commuten Bloq Maj" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 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:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Les dues tecles Maj juntes commuten Bloq Maj" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Maj + BloqNúm commuta les tecles de cursor" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Permetre trencar la captura amb accions del teclat (avís: risc de seguretat)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Permetre l'enregistrament de captura i de l'arbre de finestres" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "S'afegeix el signe de moneda a certes tecles" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro en la E " -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro en el 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro en el 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro en el 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupia en el 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Tecla per a seleccionar el 5è nivell" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Més petit/Més gran> selecciona el nivell 5è, bloqueja en prémer conjuntament amb un altre selector de nivell 5è" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 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:1022 +#: ../rules/base.xml.in.h:1027 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:1023 +#: ../rules/base.xml.in.h:1028 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:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Espai normal en qualsevol nivell" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 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:1026 +#: ../rules/base.xml.in.h:1031 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:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Caràcter d'espai sense salt al nivell quart" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Caràcter separador d'amplada zero al nivell segon" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Opcions del teclat japonès" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "La tecla de bloqueig Kana està blocant" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Retrocés estil NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Converteix Zenkaku Hankaku en un Esc addicional" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "S'afegeix les lletres amb diacrític l'esperanto" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "A la tecla corresponent en una disposició qwerty" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "A la tecla corresponent en una disposició dvorak" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "A la tecla corresponent en una disposició Coleman" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Manté la compatibilitat de tecles amb els codis de tecla antics de Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Compatibilitat amb les tecles Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Seqüència de tecles per a matar el servidor X" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Retrocés" @@ -4022,150 +4042,160 @@ msgstr "Coeur d'Alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Anglès (EUA, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Anglès (Normand)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polonès (internacional amb tecles mortes)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polonès (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polonès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Tàtar de Crimea (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Romanès (ergonòmic Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Romanès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbi (combinació d'accents en lloc de tecles mortes)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Rus (amb disposició ucraïnesa-bielorussa)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Rus (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armeni (fonètic OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebreu (bíblic, SIL fonètic)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Àrab (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belga (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portuguès (Brasil, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Txec (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Danès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Holandès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estonià (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Francès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grec (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italià (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japonès (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japonès (Sun Type 7 - Compatible PC)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japonès (Sun Type 7 - Compatible Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Noruec (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portuguès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Eslovac (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Espanyol (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Suec (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Alemany (Suïssa, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Francès (Suïssa, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turc (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ucraïnès (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Anglès (RU, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Coreà (Sun Type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengalí" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portuguès (Brasil, natiu per a l'esperanto)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Anglès (commutació de disposició en la tecla de multiplicació/divisió)" @@ -4436,9 +4466,6 @@ msgstr "Coreà (Sun Type 6/7)" #~ msgid "Aze" #~ msgstr "Aze" -#~ msgid "Bangladesh" -#~ msgstr "Bangladesh" - #~ msgid "Bel" #~ msgstr "Bel" diff --git a/xorg-server/xkeyboard-config/po/da.po b/xorg-server/xkeyboard-config/po/da.po index 67053c6c9..ec2dbd4d5 100644 --- a/xorg-server/xkeyboard-config/po/da.po +++ b/xorg-server/xkeyboard-config/po/da.po @@ -31,10 +31,10 @@ # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.8.99\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-05-15 23:14+0100\n" -"PO-Revision-Date: 2013-05-19 23:06+0100\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-18 23:06+0100\n" "Last-Translator: Joe Hansen <joedalton2@yahoo.dk>\n" "Language-Team: Danish <dansk@dansk-gruppen.dk>\n" "Language: da\n" @@ -842,7 +842,7 @@ msgid "English (programmer Dvorak)" msgstr "Engelsk (programmørdvorak)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -859,8 +859,8 @@ msgid "English (international AltGr dead keys)" msgstr "Engelsk (international AltGr døde taster)" #: ../rules/base.xml.in.h:207 -msgid "English (layout toggle on multiply/divide key)" -msgstr "Engelsk (skift layout på gange-/divideretast)" +msgid "English (the divide/multiply keys toggle the layout)" +msgstr "Engelsk (divison og gange-tasterne skifter layout)" #: ../rules/base.xml.in.h:208 msgid "Serbo-Croatian (US)" @@ -914,11 +914,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Usbekisk (Afghanistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabisk" @@ -956,11 +956,11 @@ msgid "Albanian" msgstr "Albansk" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armensk" @@ -994,166 +994,166 @@ msgid "German (Austria)" msgstr "Tysk (Østrig)" #: ../rules/base.xml.in.h:246 -msgid "German (legacy)" -msgstr "Tysk (forældet)" - -#: ../rules/base.xml.in.h:247 msgid "German (Austria, eliminate dead keys)" msgstr "Tysk (Østrig, slå døde taster fra)" -#: ../rules/base.xml.in.h:248 +#: ../rules/base.xml.in.h:247 msgid "German (Austria, Sun dead keys)" msgstr "Tysk (Østrig, Sun døde taster)" -#: ../rules/base.xml.in.h:249 +#: ../rules/base.xml.in.h:248 msgid "German (Austria, Macintosh)" msgstr "Tysk (Østrig, Macintosh)" #. Keyboard indicator for Azerbaijani layouts -#: ../rules/base.xml.in.h:251 +#: ../rules/base.xml.in.h:250 msgid "az" msgstr "az" -#: ../rules/base.xml.in.h:252 +#: ../rules/base.xml.in.h:251 msgid "Azerbaijani" msgstr "Aserbajdsjansk" -#: ../rules/base.xml.in.h:253 +#: ../rules/base.xml.in.h:252 msgid "Azerbaijani (Cyrillic)" msgstr "Aserbajdsjansk (kyrillisk)" #. Keyboard indicator for Belarusian layouts -#: ../rules/base.xml.in.h:255 +#: ../rules/base.xml.in.h:254 msgid "by" msgstr "by" -#: ../rules/base.xml.in.h:256 +#: ../rules/base.xml.in.h:255 msgid "Belarusian" msgstr "Hviderussisk" -#: ../rules/base.xml.in.h:257 +#: ../rules/base.xml.in.h:256 msgid "Belarusian (legacy)" msgstr "Hviderussisk (forældet)" -#: ../rules/base.xml.in.h:258 +#: ../rules/base.xml.in.h:257 msgid "Belarusian (Latin)" msgstr "Hviderussisk (latin)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:261 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belgisk" -#: ../rules/base.xml.in.h:262 +#: ../rules/base.xml.in.h:261 msgid "Belgian (alternative)" msgstr "Belgisk (alternativ)" -#: ../rules/base.xml.in.h:263 -msgid "Belgian (alternative, latin-9 only)" +#: ../rules/base.xml.in.h:262 +msgid "Belgian (alternative, Latin-9 only)" msgstr "Belgisk (alternativ, kun latin-9)" -#: ../rules/base.xml.in.h:264 +#: ../rules/base.xml.in.h:263 msgid "Belgian (alternative, Sun dead keys)" msgstr "Belgisk (alternativ, Sun døde taster)" -#: ../rules/base.xml.in.h:265 +#: ../rules/base.xml.in.h:264 msgid "Belgian (ISO alternate)" msgstr "Belgisk (ISO-alternativ)" -#: ../rules/base.xml.in.h:266 +#: ../rules/base.xml.in.h:265 msgid "Belgian (eliminate dead keys)" msgstr "Belgisk (slå døde taster fra)" -#: ../rules/base.xml.in.h:267 +#: ../rules/base.xml.in.h:266 msgid "Belgian (Sun dead keys)" msgstr "Belgisk (Sun døde taster)" -#: ../rules/base.xml.in.h:268 +#: ../rules/base.xml.in.h:267 msgid "Belgian (Wang model 724 azerty)" msgstr "Belgisk (Wang model 724 azerty)" -#. Keyboard indicator for Bengali layouts -#: ../rules/base.xml.in.h:270 +#. Keyboard indicator for Bangla layouts +#: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" -#: ../rules/base.xml.in.h:271 -msgid "Bengali" +#: ../rules/base.xml.in.h:270 +msgid "Bangla" msgstr "Bengali" -#: ../rules/base.xml.in.h:272 -msgid "Bengali (Probhat)" +#: ../rules/base.xml.in.h:271 +msgid "Bangla (Probhat)" msgstr "Bengali (probhat)" #. Keyboard indicator for Indian layouts -#: ../rules/base.xml.in.h:274 +#: ../rules/base.xml.in.h:273 msgid "in" msgstr "in" -#: ../rules/base.xml.in.h:275 +#: ../rules/base.xml.in.h:274 msgid "Indian" msgstr "Indisk" -#: ../rules/base.xml.in.h:276 -msgid "Bengali (India)" +#: ../rules/base.xml.in.h:275 +msgid "Bangla (India)" msgstr "Bengali (Indien)" -#: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Probhat)" +#: ../rules/base.xml.in.h:276 +msgid "Bangla (India, Probhat)" msgstr "Bengali (Indien, probhat)" -#: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Baishakhi)" +#: ../rules/base.xml.in.h:277 +msgid "Bangla (India, Baishakhi)" msgstr "Bengali (Indien, baishakhi)" -#: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Bornona)" +#: ../rules/base.xml.in.h:278 +msgid "Bangla (India, Bornona)" msgstr "Bengali (Indien, bornona)" -#: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Uni Gitanjali)" +#: ../rules/base.xml.in.h:279 +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengali (Indien, uni gitanjali)" # http://en.wikipedia.org/wiki/InScript_keyboard -#: ../rules/base.xml.in.h:281 -msgid "Bengali (India, Baishakhi Inscript)" +#: ../rules/base.xml.in.h:280 +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengali (Indien, baishakhi inscript)" #. Keyboard indicator for Gujarati layouts -#: ../rules/base.xml.in.h:283 +#: ../rules/base.xml.in.h:282 msgid "gu" msgstr "gu" -#: ../rules/base.xml.in.h:284 +#: ../rules/base.xml.in.h:283 msgid "Gujarati" msgstr "Gujarati" #. Keyboard indicator for Punjabi layouts -#: ../rules/base.xml.in.h:286 +#: ../rules/base.xml.in.h:285 msgid "pa" msgstr "pa" -#: ../rules/base.xml.in.h:287 +#: ../rules/base.xml.in.h:286 msgid "Punjabi (Gurmukhi)" msgstr "Punjabi (Gurmukhi)" -#: ../rules/base.xml.in.h:288 +#: ../rules/base.xml.in.h:287 msgid "Punjabi (Gurmukhi Jhelum)" msgstr "Punjabi (Gurmukhi Jhelum)" #. Keyboard indicator for Kannada layouts -#: ../rules/base.xml.in.h:290 +#: ../rules/base.xml.in.h:289 msgid "kn" msgstr "kn" -#: ../rules/base.xml.in.h:291 +#: ../rules/base.xml.in.h:290 msgid "Kannada" msgstr "Kannada" +#: ../rules/base.xml.in.h:291 +msgid "Kannada (KaGaPa phonetic)" +msgstr "Kannada (KaGaPa fonetisk)" + #. Keyboard indicator for Malayalam layouts #: ../rules/base.xml.in.h:293 msgid "ml" @@ -1214,1445 +1214,1479 @@ msgstr "te" msgid "Telugu" msgstr "Telugu" +#: ../rules/base.xml.in.h:310 +msgid "Telugu (KaGaPa phonetic)" +msgstr "Telugu (KaGaPa fonetisk)" + #. Keyboard indicator for Urdu layouts -#: ../rules/base.xml.in.h:311 +#: ../rules/base.xml.in.h:312 msgid "ur" msgstr "ur" -#: ../rules/base.xml.in.h:312 +#: ../rules/base.xml.in.h:313 msgid "Urdu (phonetic)" msgstr "Urdu (fonetisk)" -#: ../rules/base.xml.in.h:313 +#: ../rules/base.xml.in.h:314 msgid "Urdu (alternative phonetic)" msgstr "Urdu (alternativ fonetisk)" -#: ../rules/base.xml.in.h:314 +#: ../rules/base.xml.in.h:315 msgid "Urdu (WinKeys)" msgstr "Urdu (Win-taster)" #. Keyboard indicator for Hindi layouts -#: ../rules/base.xml.in.h:316 +#: ../rules/base.xml.in.h:317 msgid "hi" msgstr "hi" -#: ../rules/base.xml.in.h:317 +#: ../rules/base.xml.in.h:318 msgid "Hindi (Bolnagri)" msgstr "Hindi (bolnagri)" -#: ../rules/base.xml.in.h:318 +#: ../rules/base.xml.in.h:319 msgid "Hindi (Wx)" msgstr "Hindi (wx)" -#: ../rules/base.xml.in.h:319 +#: ../rules/base.xml.in.h:320 +msgid "Hindi (KaGaPa phonetic)" +msgstr "Hindi (KaGaPa fonetisk)" + +#. Keyboard indicator for Sanskrit layouts +#: ../rules/base.xml.in.h:322 +msgid "sa" +msgstr "sa" + +#: ../rules/base.xml.in.h:323 +msgid "Sanskrit (KaGaPa phonetic)" +msgstr "Sanskrit (KaGaPa fonetisk)" + +#. Keyboard indicator for Marathi layouts +#: ../rules/base.xml.in.h:325 +msgid "mr" +msgstr "mr" + +#: ../rules/base.xml.in.h:326 +msgid "Marathi (KaGaPa phonetic)" +msgstr "Marathi (KaGaPa fonetisk)" + +#: ../rules/base.xml.in.h:327 msgid "English (India, with RupeeSign)" msgstr "Engelsk (Indien, med rupeetegn)" #. Keyboard indicator for Bosnian layouts -#: ../rules/base.xml.in.h:321 +#: ../rules/base.xml.in.h:329 msgid "bs" msgstr "bs" -#: ../rules/base.xml.in.h:322 +#: ../rules/base.xml.in.h:330 msgid "Bosnian" msgstr "Bosnisk" -#: ../rules/base.xml.in.h:323 +#: ../rules/base.xml.in.h:331 msgid "Bosnian (use guillemets for quotes)" msgstr "Bosnisk (anvend »« som anførelsestegn)" -#: ../rules/base.xml.in.h:324 +#: ../rules/base.xml.in.h:332 msgid "Bosnian (use Bosnian digraphs)" msgstr "Bosnisk (anvend bosniske digrafer)" -#: ../rules/base.xml.in.h:325 +#: ../rules/base.xml.in.h:333 msgid "Bosnian (US keyboard with Bosnian digraphs)" msgstr "Bosnisk (US-tastatur med bosniske digrafer)" -#: ../rules/base.xml.in.h:326 +#: ../rules/base.xml.in.h:334 msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnisk (US-tastatur med bosniske bogstaver)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:328 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:329 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugisisk (brasiliansk)" -#: ../rules/base.xml.in.h:330 +#: ../rules/base.xml.in.h:338 msgid "Portuguese (Brazil, eliminate dead keys)" msgstr "Portugisisk (brasiliansk, slå døde taster fra)" -#: ../rules/base.xml.in.h:331 +#: ../rules/base.xml.in.h:339 msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugisisk (brasiliansk, dvorak)" -#: ../rules/base.xml.in.h:332 -msgid "Portuguese (Brazil, nativo)" +#: ../rules/base.xml.in.h:340 +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugisisk (brasiliansk, nativo)" -#: ../rules/base.xml.in.h:333 -msgid "Portuguese (Brazil, nativo for USA keyboards)" +#: ../rules/base.xml.in.h:341 +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugisisk (brasiliansk, nativo for USA-tastaturer)" -#: ../rules/base.xml.in.h:334 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugisisk (brasiliansk, nativo for esperanto)" +#: ../rules/base.xml.in.h:342 +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (brasiliansk, nativo)" #. Keyboard indicator for Bulgarian layouts -#: ../rules/base.xml.in.h:336 +#: ../rules/base.xml.in.h:344 msgid "bg" msgstr "bg" -#: ../rules/base.xml.in.h:337 +#: ../rules/base.xml.in.h:345 msgid "Bulgarian" msgstr "Bulgarsk" -#: ../rules/base.xml.in.h:338 +#: ../rules/base.xml.in.h:346 msgid "Bulgarian (traditional phonetic)" msgstr "Bulgarsk (traditionel fonetisk)" -#: ../rules/base.xml.in.h:339 +#: ../rules/base.xml.in.h:347 msgid "Bulgarian (new phonetic)" msgstr "Bulgarsk (ny fonetisk)" -#: ../rules/base.xml.in.h:340 +#: ../rules/base.xml.in.h:348 msgid "Arabic (Morocco)" msgstr "Arabisk (Marokko)" #. Keyboard indicator for French layouts -#: ../rules/base.xml.in.h:342 ../rules/base.extras.xml.in.h:3 +#: ../rules/base.xml.in.h:350 ../rules/base.extras.xml.in.h:3 msgid "fr" msgstr "fr" -#: ../rules/base.xml.in.h:343 +#: ../rules/base.xml.in.h:351 msgid "French (Morocco)" msgstr "Fransk (Marokko)" #. Keyboard indicator for Berber layouts -#: ../rules/base.xml.in.h:345 +#: ../rules/base.xml.in.h:353 msgid "ber" msgstr "ber" -#: ../rules/base.xml.in.h:346 +#: ../rules/base.xml.in.h:354 msgid "Berber (Morocco, Tifinagh)" msgstr "Berbisk (Marokko, Tifinagh)" -#: ../rules/base.xml.in.h:347 +#: ../rules/base.xml.in.h:355 msgid "Berber (Morocco, Tifinagh alternative)" msgstr "Berbisk (Marokko, Tifinagh alternativ)" # http://retskrivningsordbogen.dk/ro/ro.htm?q=berb -#: ../rules/base.xml.in.h:348 +#: ../rules/base.xml.in.h:356 msgid "Berber (Morocco, Tifinagh alternative phonetic)" msgstr "Berbisk (Marokko, tifinagh alternativ fonetisk)" -#: ../rules/base.xml.in.h:349 +#: ../rules/base.xml.in.h:357 msgid "Berber (Morocco, Tifinagh extended)" msgstr "Berbisk (Marokko, Tifinagh udvidet)" -#: ../rules/base.xml.in.h:350 +#: ../rules/base.xml.in.h:358 msgid "Berber (Morocco, Tifinagh phonetic)" msgstr "Berbisk (Marokko, Tifinagh fonetisk)" -#: ../rules/base.xml.in.h:351 +#: ../rules/base.xml.in.h:359 msgid "Berber (Morocco, Tifinagh extended phonetic)" msgstr "Berbisk (Marokko, Tifinagh udvidet fonetisk)" #. Keyboard indicator for Cameroon layouts -#: ../rules/base.xml.in.h:353 +#: ../rules/base.xml.in.h:361 msgid "cm" msgstr "cm" -#: ../rules/base.xml.in.h:354 +#: ../rules/base.xml.in.h:362 msgid "English (Cameroon)" msgstr "Engelsk (camerounsk)" -#: ../rules/base.xml.in.h:355 +#: ../rules/base.xml.in.h:363 msgid "French (Cameroon)" msgstr "Fransk (camerounsk)" -#: ../rules/base.xml.in.h:356 +#: ../rules/base.xml.in.h:364 msgid "Cameroon Multilingual (qwerty)" msgstr "Camerounsk flersproget (qwerty)" -#: ../rules/base.xml.in.h:357 +#: ../rules/base.xml.in.h:365 msgid "Cameroon Multilingual (azerty)" msgstr "Camerounsk flersproget (azerty)" -#: ../rules/base.xml.in.h:358 +#: ../rules/base.xml.in.h:366 msgid "Cameroon Multilingual (Dvorak)" msgstr "Camerounsk flersproget (dvorak)" #. Keyboard indicator for Burmese layouts -#: ../rules/base.xml.in.h:360 +#: ../rules/base.xml.in.h:368 msgid "my" msgstr "my" -#: ../rules/base.xml.in.h:361 +#: ../rules/base.xml.in.h:369 msgid "Burmese" msgstr "Burmesisk" -#: ../rules/base.xml.in.h:362 ../rules/base.extras.xml.in.h:4 +#: ../rules/base.xml.in.h:370 ../rules/base.extras.xml.in.h:4 msgid "French (Canada)" msgstr "Fransk (Canada)" -#: ../rules/base.xml.in.h:363 +#: ../rules/base.xml.in.h:371 msgid "French (Canada, Dvorak)" msgstr "Fransk (Canada, dvorak)" -#: ../rules/base.xml.in.h:364 +#: ../rules/base.xml.in.h:372 msgid "French (Canada, legacy)" msgstr "Fransk (Canada, forældet)" -#: ../rules/base.xml.in.h:365 +#: ../rules/base.xml.in.h:373 msgid "Canadian Multilingual" msgstr "Canadisk flersproget" -#: ../rules/base.xml.in.h:366 +#: ../rules/base.xml.in.h:374 msgid "Canadian Multilingual (first part)" msgstr "Canadisk flersproget (første del)" -#: ../rules/base.xml.in.h:367 +#: ../rules/base.xml.in.h:375 msgid "Canadian Multilingual (second part)" msgstr "Canadisk flersproget (anden del)" #. Keyboard indicator for Inuktikut layouts -#: ../rules/base.xml.in.h:369 +#: ../rules/base.xml.in.h:377 msgid "ike" msgstr "ike" -#: ../rules/base.xml.in.h:370 +#: ../rules/base.xml.in.h:378 msgid "Inuktitut" msgstr "Inuktitut" -#: ../rules/base.xml.in.h:371 +#: ../rules/base.xml.in.h:379 msgid "English (Canada)" msgstr "Engelsk (Canada)" -#: ../rules/base.xml.in.h:372 +#: ../rules/base.xml.in.h:380 msgid "French (Democratic Republic of the Congo)" msgstr "Fransk (Congo, Den Demokratiske Republik)" #. Keyboard indicator for Taiwanese layouts -#: ../rules/base.xml.in.h:374 +#: ../rules/base.xml.in.h:382 msgid "zh" msgstr "zh" -#: ../rules/base.xml.in.h:375 +#: ../rules/base.xml.in.h:383 msgid "Chinese" msgstr "Kinesisk" -#: ../rules/base.xml.in.h:376 +#: ../rules/base.xml.in.h:384 msgid "Tibetan" msgstr "Tibetansk" -#: ../rules/base.xml.in.h:377 +#: ../rules/base.xml.in.h:385 msgid "Tibetan (with ASCII numerals)" msgstr "Tibetansk (med ASCII-numre)" -#: ../rules/base.xml.in.h:378 +#: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Uyghur" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:380 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:381 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Kroatisk" -#: ../rules/base.xml.in.h:382 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Kroatisk (anvend »« som anførelsestegn)" -#: ../rules/base.xml.in.h:383 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Kroatisk (anvend kroatiske digrafer)" -#: ../rules/base.xml.in.h:384 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Kroatisk (US-tastatur med kroatiske digrafer)" -#: ../rules/base.xml.in.h:385 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Kroatisk (US-tastatur med kroatiske bogstaver)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:387 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:388 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tjekkisk" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tjekkisk (med <\\|>-tast)" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tjekkisk (qwerty)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tjekkisk (qwerty, udvidet omvendt skråstreg)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tjekkisk (UCW-layout, kun bogstaver med accent)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tjekkisk (US Dvorak med CZ UCW-understøttelse)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dansk" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dansk (slå døde taster fra)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dansk (Macintosh)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dansk (Macintosh, slå døde taster fra)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dansk (dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:402 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Hollandsk" -#: ../rules/base.xml.in.h:404 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Hollandsk (Sun døde taster)" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Hollandsk (Macintosh)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Hollandsk (standard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:409 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estisk" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estisk (slå døde taster fra)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estisk (dvorak)" -#: ../rules/base.xml.in.h:415 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estisk (US-tastatur med estiske bogstaver)" -#: ../rules/base.xml.in.h:416 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persisk" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persisk (med persisk numerisk tastatur)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:419 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:420 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurdisk (Iran, latin Q)" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurdisk (Iran, F)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurdisk (Iran, latin Alt-Q)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurdisk (Iran, arabisk-latin)" -#: ../rules/base.xml.in.h:424 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Irakisk" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurdisk (Irak, latin Q)" -#: ../rules/base.xml.in.h:426 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurdisk (Irak, F)" -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurdisk (Irak, latin Alt-Q)" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurdisk (Irak, arabisk-latin)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Færøsk" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Færøsk (slå døde taster fra)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:434 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:435 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finsk" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finsk (klassisk)" -#: ../rules/base.xml.in.h:437 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finsk (klassisk, slå døde taster fra)" -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Nordligt samisk (Finland)" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finsk (Macintosh)" -#: ../rules/base.xml.in.h:440 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Fransk" -#: ../rules/base.xml.in.h:441 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Fransk (slå døde taster fra)" -#: ../rules/base.xml.in.h:442 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Fransk (Sun døde taster)" -#: ../rules/base.xml.in.h:443 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Fransk (alternativ)" -#: ../rules/base.xml.in.h:444 -msgid "French (alternative, latin-9 only)" +#: ../rules/base.xml.in.h:453 +msgid "French (alternative, Latin-9 only)" msgstr "Fransk (alternativ, kun latin-9)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Fransk (alternativ, slå døde taster fra)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Fransk (alternativ, Sun døde taster)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Fransk (forældet, alternativ)" -#: ../rules/base.xml.in.h:448 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Fransk (forældet, alternativ, slå døde taster fra)" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Fransk (forældet, alternativ, Sun døde taster)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Fransk (Bepo, ergonomisk, dvorakmåde)" -#: ../rules/base.xml.in.h:451 -msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)" +#: ../rules/base.xml.in.h:460 +msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Fransk (Bepo, ergonomisk, dvorakmåde, kun latin-9)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Fransk (dvorak)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Fransk (Macintosh)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Fransk (bretonsk)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occitansk" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Geogrisk (Frankrig, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Engelsk (Ghana)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Engelsk (Ghana, flersproget)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:467 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:470 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:473 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" # 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:476 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Engelsk (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Fransk (Guinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgisk" -#: ../rules/base.xml.in.h:482 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgisk (ergonomisk)" -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgisk (MESS)" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russisk (georgisk)" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Occitansk (Georgien)" -#: ../rules/base.xml.in.h:486 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Tysk" -#: ../rules/base.xml.in.h:487 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Tysk (død accent)" -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Tysk (død accent grave)" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Tysk (slå døde taster fra)" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Tysk (T3)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Rumænsk (Tyskland)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Rumænsk (Tyskland, slå døde taster fra)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Tysk (dvorak)" -#: ../rules/base.xml.in.h:494 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Tysk (Sun døde taster)" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Tysk (Neo 2)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Tysk (Macintosh)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Tysk (Macintosh, slå døde taster fra)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Nedersorbisk" # nedersorbisk, tror jeg # (el. nedre Lausitz) -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Nedersorbisk (qwertz)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Tysk (qwerty)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russisk (Tyskland, fonetisk)" +#: ../rules/base.xml.in.h:511 +msgid "German (legacy)" +msgstr "Tysk (forældet)" + #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:503 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:504 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Græsk" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Græsk (simpel)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Græsk (udvidet)" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Græsk (slå døde taster fra)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Græsk (polytonisk)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:511 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Ungarsk" -#: ../rules/base.xml.in.h:512 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Ungarsk (standard)" -#: ../rules/base.xml.in.h:513 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Ungarsk (slå døde taster fra)" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Ungarsk (qwerty)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Ungarsk (101/qwertz/komma/døde taster)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Ungarsk (101/qwertz/komma/slå døde taster fra)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Ungarsk (101/qwertz/punktum/døde taster)" -#: ../rules/base.xml.in.h:518 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Ungarsk (101/qwertz/punktum/slå døde taster fra)" -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Ungarsk (101/qwerty/komma/døde taster)" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Ungarsk (101/qwerty/komma/slå døde taster fra)" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Ungarsk (101/qwerty/punktum/døde taster)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Ungarsk (101/qwerty/punktum/slå døde taster fra)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Ungarsk (102/qwertz/komma/døde taster)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Ungarsk (102/qwertz/komma/slå døde taster fra)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Ungarsk (102/qwertz/punktum/døde taster)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Ungarsk (102/qwertz/punktum/slå døde taster fra)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Ungarsk (102/qwerty/komma/døde taster)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Ungarsk (102/qwerty/komma/slå døde taster fra)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Ungarsk (102/qwerty/punktum/døde taster)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Ungarsk (102/qwerty/punktum/slå døde taster fra)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandsk" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandsk (Sun døde taster)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandsk (slå døde taster fra)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandsk (Macintosh)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandsk (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:539 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:540 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebraisk" -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebraisk (lyx)" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebraisk (fonetisk)" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebraisk (bibelsk, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:545 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:546 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italiensk" -#: ../rules/base.xml.in.h:547 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italiensk (slå døde taster fra)" -#: ../rules/base.xml.in.h:548 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italiensk (Macintosh)" -#: ../rules/base.xml.in.h:549 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italiensk (US-tastatur med italienske bogstaver)" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgisk (Italien)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italiensk (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:553 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japansk" -#: ../rules/base.xml.in.h:555 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japansk (Kana)" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japansk (Kana 86)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japansk (OADG 109A)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japansk (Macintosh)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japansk (dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:561 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:562 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgisisk" -#: ../rules/base.xml.in.h:563 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgisisk (fonetisk)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmerisk (Cambodja)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:569 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kasakhisk" -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russisk (Kasakhstan, med kazakhisk)" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kasakhisk (med russisk)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:573 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (STEA-foreslået standardlayout)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:577 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Spansk (latinamerikansk)" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Spansk (latinamerikansk, slå døde taster fra)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Spansk (latinamerikansk, inkluder død tilde)" -#: ../rules/base.xml.in.h:581 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Spansk (latinamerikansk, Sun døde taster)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:583 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:584 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litauisk" -#: ../rules/base.xml.in.h:585 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litauisk (standard)" -#: ../rules/base.xml.in.h:586 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litauisk (US-tastatur med litauiske bogstaver)" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litauisk (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litauisk (LEKP)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litauisk (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:591 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Lettisk" -#: ../rules/base.xml.in.h:593 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Lettisk (apostrofvariant)" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Lettisk (tildevariant)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Lettisk (F-variant)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Lettisk (moderne)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Lettisk (ergonomisk, ŪGJRMV)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Lettisk (adapteret)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:600 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:601 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:603 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrinsk" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrinsk (kyrillisk)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrinsk (kyrillisk, Z og ZHE ombyttet)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrinsk (latin Unicode)" -#: ../rules/base.xml.in.h:608 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrinsk (latin qwerty)" -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrinsk (latin Unicode qwerty)" # guillemets er dem her: »« -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrinsk (kyrillisk med anførelsestegnene »«)" # guillemets er dem her: »« -#: ../rules/base.xml.in.h:611 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrinsk (latin med anførelsestegnene »«)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Makedonsk" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Makedonsk (slå døde taster fra)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltesisk" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltesisk (med US-layout)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:621 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongolsk" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:624 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:625 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norsk" -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norsk (slå døde taster fra)" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norsk (dvorak)" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Nordligt samisk (Norge)" -#: ../rules/base.xml.in.h:629 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Nordligt samisk (Norge, slå døde taster fra)" -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norsk (Macintosh)" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norsk (Macintosh, slå døde taster fra)" -#: ../rules/base.xml.in.h:632 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norsk (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polsk" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polsk (forældet)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polsk (qwertz)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polsk (dvorak)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polsk (dvorak, polske anførelsestegn på anførelsestast)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polsk (dvorak, polske anførelsestegn på tast 1)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kashubian" -#: ../rules/base.xml.in.h:642 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russisk (Polen, fonetisk dvorak)" -#: ../rules/base.xml.in.h:643 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polsk (programmørdvorak)" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugisisk" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugisisk (slå døde taster fra)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugisisk (Sun døde taster)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugisisk (Macintosh)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugisisk (Macintosh, slå døde taster fra)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugisisk (Macintosh, Sun døde taster)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugisisk (nativo)" -#: ../rules/base.xml.in.h:651 -msgid "Portuguese (Nativo for USA keyboards)" +#: ../rules/base.xml.in.h:661 +msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugisisk (nativo for USA-tastaturer)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:655 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Rumænsk" # http://da.wikipedia.org/wiki/%C3%87 -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Rumænsk (cedille)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Rumænsk (standard)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Rumænsk (standardcedille)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Rumænsk (Wintaster)" -#: ../rules/base.xml.in.h:660 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russisk" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russisk (fonetisk)" -#: ../rules/base.xml.in.h:662 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russisk (fonetisk Wintaster)" -#: ../rules/base.xml.in.h:663 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russisk (skrivemaskine)" -#: ../rules/base.xml.in.h:664 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russisk (forældet)" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russisk (skrivemaskine, forældet)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatar" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Occitansk (forældet)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Occitansk (Wintaster)" -#: ../rules/base.xml.in.h:669 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Chuvash" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Chuvash (latin)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurt" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Yakut" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russisk (DOS)" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russisk (Macintosh)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbisk (Rusland)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Bashkirisk" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:680 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbisk" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbisk (kyrillisk, Z og ZHE ombyttet)" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbisk (latin)" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbisk (latin unicode)" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbisk (latin qwerty)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbisk (latin unicode qwerty)" # guillemets er dem her: »« -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbisk (kyrillisk med anførelsestegnene »«)" # guillemets er dem her: »« -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbisk (latin med anførelsestegnene »«)" # 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:688 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannonisk rusyn (homofonisk)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannonisk rusyn" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Slovensk" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Slovensk (anvend »« som anførelsestegn)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slovensk (US-tastatur med slovenske bogstaver)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:695 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:696 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slovakisk" -#: ../rules/base.xml.in.h:697 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slovakisk (udvidet omvendt skråstreg)" -#: ../rules/base.xml.in.h:698 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slovakisk (qwerty)" -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slovakisk (qwerty, udvidet omvendt skråstreg)" -#: ../rules/base.xml.in.h:700 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Spansk" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Spansk (slå døde taster fra)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Spansk (inkluder død tilde)" -#: ../rules/base.xml.in.h:703 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Spansk (Sun døde taster)" -#: ../rules/base.xml.in.h:704 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Spansk (dvorak)" @@ -2660,1123 +2694,1139 @@ msgstr "Spansk (dvorak)" # 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:705 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturisk (Spanien, med bundpunktum H og bundpunktum L)" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Catalansk (Spanien, med midterpunktum L)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Spansk (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Svensk" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Svensk (slå døde taster fra)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Svensk (dvorak)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russisk (Sverige, fonetisk)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russisk (Sverige, fonetisk, slå døde taster fra)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Nordligt samisk (Sverige)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Svensk (Macintosh)" -#: ../rules/base.xml.in.h:717 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Svensk (svdvorak)" -#: ../rules/base.xml.in.h:718 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Svensk tegnsprog" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Tysk (Schweiz)" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Tysk (Schweiz, forældet)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Tysk (Schweiz, slå døde taster fra)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Tysk (Schweiz, Sun døde taster)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Fransk (Schweiz)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Fransk (Schweiz, slå døde taster fra)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Fransk (Schweiz, Sun døde taster)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Fransk (Schweiz, Macintosh)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Tysk (Schweiz, Macintosh)" -#: ../rules/base.xml.in.h:728 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabisk (Syrien)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syrisk" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syrisk (fonetisk)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurdisk (Syrien, latin Q)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurdisk (Syrien, F)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurdisk (Syrien, latin Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:738 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadsjikisk" -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadsjikisk (forældet)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Singalesisk (fonetisk)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamilsk (Sri Lanka, unicode)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamilsk (Sri Lanka, TAB-skrivemaskine)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thai" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thai (TIS-820.2538)" -#: ../rules/base.xml.in.h:749 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thai (pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:751 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:752 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Tyrkisk" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Tyrkisk (F)" -#: ../rules/base.xml.in.h:754 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Tyrkisk (Alt-Q)" -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Tyrkisk (Sun døde taster)" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurdisk (Tyrkiet, latin Q)" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurdisk (Tyrkiet, F)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurdisk (Tyrkiet, latin Alt-Q)" -#: ../rules/base.xml.in.h:759 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Tyrkisk (international med døde taster)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krimtatarsk (tyrkisk Q)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krimtatarsk (tyrkisk F)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krimtatarsk (tyrkisk Alt-Q)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanesisk" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanesisk (indfødte)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:769 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:772 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrainsk" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrainsk (fonetisk)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrainsk (skrivemaskine)" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrainsk (Wintaster)" -#: ../rules/base.xml.in.h:776 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrainsk (forældet)" -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrainsk (standard RSTU)" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russisk (Ukraine, standard RSTU)" # 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:779 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrainsk (homofonisk)" -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Engelsk (UK)" -#: ../rules/base.xml.in.h:781 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Engelsk (UK, udvidede Wintaster)" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Engelsk (UK, international med døde taster)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Engelsk (UK, Dvorak)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Engelsk (UK, Dvorak med UK-tegnsætning)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Engelsk (UK, Macintosh)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Engelsk (UK, Macintosh international)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Engelsk (UK, Colemak)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Usbekisk" -#: ../rules/base.xml.in.h:789 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Usbekisk (latin)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamesisk" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:794 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:795 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreansk" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreansk (101/104 tastkompatibel)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japansk (pc-98xx-serie)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:799 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irsk" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:802 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irsk (UnicodeExpert)" -#: ../rules/base.xml.in.h:803 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:804 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakistan)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:807 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakistan, NLA)" -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabisk (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Engelsk (Sydafrika)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:818 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (forkert placeret semikolon og anførelsestegn, forældet)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:821 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalesisk" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Engelsk (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:825 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:829 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Yoruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" # http://da.wikipedia.org/wiki/Amharisk -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amharisk" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Blindeskrift" -#: ../rules/base.xml.in.h:839 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Blindeskrift (venstre hånd)" -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Blindeskrift (højre hånd)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:842 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmensk" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmensk (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Fransk (Mali, alternativ)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Engelsk (Mali, US Macintosh)" -#: ../rules/base.xml.in.h:850 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Engelsk (Mali, US international)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Swahili (Tanzania)" -#: ../rules/base.xml.in.h:854 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Swahili (Kenya)" -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:860 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filippinsk" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filippinsk (QWERTY baybayin)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filippinsk (Capewell-dvorak latin)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filippinsk (Capewell-dvorak baybayin)" -#: ../rules/base.xml.in.h:865 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filippinsk (Capewell-QWERF 2006 latin)" -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filippinsk (Capewell-QWERF 2006 baybayin)" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filippinsk (Colemak latin)" # http://en.wikipedia.org/wiki/Baybayin -#: ../rules/base.xml.in.h:868 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filippinsk (Colemak baybayin)" -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filippinsk (Dvorak latin)" # http://en.wikipedia.org/wiki/Baybayin -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filippinsk (Dvorak baybayin)" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldavisk" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" # http://www.denstoredanske.dk/Sprog,_religion_og_filosofi/Sprog/Alle_lande_-_sprogoversigt/Altaiske_sprog/gagausisk -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldavisk (gagausisk)" -#: ../rules/base.xml.in.h:875 -msgid "Key(s) to change layout" -msgstr "Tast(er) for at skifte layout" +#: ../rules/base.xml.in.h:885 +msgid "Switching to another layout" +msgstr "Skifter til et andet layout" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Højre Alt (mens trykket ned)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Venstre Alt (mens trykket ned)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Venstre Win-tast (mens trykket ned)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Højre Win-tast (mens trykket ned)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Enhver Win-tast (mens trykket ned)" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:891 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:882 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Højre Ctrl-tast (mens trykket ned)" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Højre Alt" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Venstre Alt" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Skift+Caps Lock" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:897 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:888 +#: ../rules/base.xml.in.h:898 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:889 +#: ../rules/base.xml.in.h:899 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:890 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Begge skift-taster sammen" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Begge Alt-taster sammen" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Begge Ctrl-taster sammen" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Skift" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Venstre Ctrl+Venstre Skift" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Højre Ctrl+Højre Skift" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Skift" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Venstre Alt+Venstre Skift" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Mellemrum" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Venstre Win" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Højre Win" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Venstre Skift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Højre Skift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Venstre Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Højre Ctrl" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:919 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:910 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Tast for at vælge tredje niveau" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Enhver Win-tast" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Enhver Alt-tast" -#: ../rules/base.xml.in.h:913 -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:923 +msgid "Right Alt, Shift+Right Alt key is Compose" +msgstr "Højre Alt-tast, Skift+højre Alt-tast er sammensat (compose)" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Højre Alt-tast vælger aldrig tredje niveau" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Retur på numerisk tastatur" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Omvendt skråstreg" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Mindre end/Større end>" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock 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:919 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock 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" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Mindre end/Større end> (vælger tredje niveau, låser når trykket ned sammen med en anden tredje niveauvælger" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Ctrl-tast placering" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock som Ctrl" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Venstre Ctrl som Meta" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Ombyt Ctrl og Caps Lock" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Til venstre for 'A'" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Nederst til venstre" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Højre Ctrl-tast virker som højre Alt" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu som højre Ctrl" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Højre Alt-tast virker som højre Ctrl" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Byt venstre Alt-tast om med venstre Ctrl-tast" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Byt venstre Win-tast om med venstre Ctrl-tast" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Venstre Alt som Ctrl, venstre Ctrl som Win, venstre Win som Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Brug tastatur-LED til at vise alternativ layout" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:932 -msgid "Numeric keypad layout selection" -msgstr "Numerisk tastatur layout udvælgelse" +#: ../rules/base.xml.in.h:945 +msgid "Layout of numeric keypad" +msgstr "Layout for numerisk tastatur" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Forældet" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unicode tilføjelser (pile og matematiske tegn)" -#: ../rules/base.xml.in.h:935 -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:948 +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:936 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Forældet Wang 724" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:950 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:938 -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:951 +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:939 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Sekstentals" # ATM = hæveautomat, måske skal det oversættes. -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefonstil" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Numerisk tastatur slettetast opførsel" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Forældet tast med punktum" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Forældet tast med komma" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Niveau fire tast med punktum" -#: ../rules/base.xml.in.h:946 -msgid "Four-level key with dot, latin-9 restriction" +#: ../rules/base.xml.in.h:959 +msgid "Four-level key with dot, Latin-9 only" msgstr "Niveau fire tast med punktum, latin-9 begrænsning" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Niveau fire tast med komma" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Niveau fire tast med momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Niveau fire tast med abstrakt adskillelser" -#: ../rules/base.xml.in.h:952 -msgid "Semi-colon on third level" +#: ../rules/base.xml.in.h:965 +msgid "Semicolon on third level" msgstr "Semikolon på tredje niveau" -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Opførsel for Caps Lock-tast" -#: ../rules/base.xml.in.h:954 -msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock" +#: ../rules/base.xml.in.h:967 +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:955 -msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock" +#: ../rules/base.xml.in.h:968 +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:956 -msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock" +#: ../rules/base.xml.in.h:969 +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:957 -msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock" +#: ../rules/base.xml.in.h:970 +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:958 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock slår små/store bogstaver til/fra" -#: ../rules/base.xml.in.h:959 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Gør Caps Lock til en ekstra NumLock" -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Ombyt ESC og Caps Lock" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Gør Caps Lock til en ekstra Esc" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Gør Caps Lock til en ekstra rettelsestast" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Gør Caps Lock til en ekstra Super" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Gør Caps Lock til en ekstra Hyper" -#: ../rules/base.xml.in.h:965 -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:978 +msgid "Caps Lock toggles ShiftLock (affects all keys)" +msgstr "Caps Lock ændrer SkiftLock (påvirker alle taster)" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock er slået fra" -#: ../rules/base.xml.in.h:967 -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:980 +msgid "Make Caps Lock an additional Ctrl" +msgstr "Gør Caps Lock til en ekstra Ctrl" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Alt/Win-tasteopførsel" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Tilføj standardopførslen til menutasten" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt og Meta er på Alt-tasterne" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt ligger på Win-tasterne (og de normale Alt-taster)" -#: ../rules/base.xml.in.h:972 -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:985 +msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" +msgstr "Ctrl ligger på Win-tasterne (og de normale Ctrl-taster)" -#: ../rules/base.xml.in.h:973 -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:986 +msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" +msgstr "Ctrl ligger på Alt-tasterne, Alt ligger på Win-tasterne" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta ligger på Win-tasterne" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta ligger på venstre Win-tast" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper ligger på Win-tasterne" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:990 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:978 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt-tast ombyttes med Win-tast" -#: ../rules/base.xml.in.h:979 -msgid "Compose key position" -msgstr "Placering af Composetast" +#: ../rules/base.xml.in.h:992 +msgid "Position of Compose key" +msgstr "Position for sammensat (compose) tast" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Tredje niveau for venstre Win" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Tredje niveau for højre Win" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Tredje niveau for Menu" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Tredje niveau for venstre Ctrl" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Tredje niveau for højre Ctrl" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Tredje niveau for Caps Lock (lås skift)" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Tredje niveau for <Mindre end/Større end>" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "Prtsc" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Diverse kompatibilitetsvalg" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Standard numerisk tastatur taster" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Numerisk tastatur indtaster altid tal (som på Mac OS)" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:1005 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:993 +#: ../rules/base.xml.in.h:1006 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:994 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Specialtaster (Ctrl+Alt+<key>) håndteret i en server" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:1008 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:996 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Skift afbryder Caps Lock" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Slå ekstra typografiske karakterer til" -#: ../rules/base.xml.in.h:998 -msgid "Both Shift-Keys together toggle Caps Lock" +#: ../rules/base.xml.in.h:1011 +msgid "Both Shift keys together toggle Caps Lock" msgstr "Begge skift-taster sammen skifter Caps Lock" -#: ../rules/base.xml.in.h:999 -msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates" +#: ../rules/base.xml.in.h:1012 +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:1000 -msgid "Both Shift-Keys together toggle ShiftLock" +#: ../rules/base.xml.in.h:1013 +msgid "Both Shift keys together toggle ShiftLock" msgstr "Begge skift-taster sammen skifter SkiftLock" -#: ../rules/base.xml.in.h:1001 -msgid "Toggle PointerKeys with Shift + NumLock." -msgstr "Skift pegetaster med Skift + NumLock." +#: ../rules/base.xml.in.h:1014 +msgid "Shift + NumLock toggles PointerKeys" +msgstr "Skift + NumLock skifter PointerKeys" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Tillader afbrydelsesgreb med tastaturhandlinger (advarsel: sikkerhedsrisiko)" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Tillader afbrydelsesgreb med vinduestrælogning" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Tilføjelse af valutategn til bestemte taster" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro på E" @@ -3785,75 +3835,75 @@ msgstr "Euro på E" # 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:1005 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro på 2" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro på 4" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro på 5" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupee på 4" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Tast for at vælge femte niveau" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Mindre end/Større end> vælger femte niveau, låser når trykket ned sammen med en anden femte niveauvælger" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1025 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:1012 +#: ../rules/base.xml.in.h:1026 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:1013 +#: ../rules/base.xml.in.h:1027 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:1014 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Brug mellemrum for at indtaste ubrydelig mellemrumskarakter" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Normal mellemrum på alle niveauer" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Ubrydelig mellemrumskarakter på andet niveau" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Ubrydelig mellemrumskarakter på tredje niveau" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1032 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:1019 +#: ../rules/base.xml.in.h:1033 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:1020 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Ubrydelig mellemrumskarakter på fjerde niveau" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1035 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:1022 +#: ../rules/base.xml.in.h:1036 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)" @@ -3865,82 +3915,86 @@ msgstr "Ubrydelig mellemrumskarakter på fjerde niveau, tynd ubrydelige mellemru # is desirable to keep the words closer together. The ZWNJ is represented in Unicode # is U+200C, and can be represented in HTML as ‌, ‌ or ‌. Kilde eng. # wikipedia 12. maj 2010 -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Ubrydeligt mellemrumstegn (ZWNJ) på andet niveau" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1038 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:1025 +#: ../rules/base.xml.in.h:1039 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:1026 +#: ../rules/base.xml.in.h:1040 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:1027 +#: ../rules/base.xml.in.h:1041 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:1028 +#: ../rules/base.xml.in.h:1042 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:1029 +#: ../rules/base.xml.in.h:1043 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:1030 +#: ../rules/base.xml.in.h:1044 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:1031 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Japanske tastaturvalg" -#: ../rules/base.xml.in.h:1032 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Kana låsetast låser" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F-stil rettelsestast" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Gør Zenkaku Hankaku til en ekstra Esc" -#: ../rules/base.xml.in.h:1035 -msgid "Adding Esperanto circumflexes (supersigno)" -msgstr "Tilføjelse af esperanto accent circonflexe (supersigno)" +#: ../rules/base.xml.in.h:1049 +msgid "Adding Esperanto supersigned letters" +msgstr "Tilføjelse af esperanto supersigned bogstaver" -#: ../rules/base.xml.in.h:1036 -msgid "To the corresponding key in a Qwerty keyboard." -msgstr "Til den tilsvarende tast på et Qwertytastatur." +#: ../rules/base.xml.in.h:1050 +msgid "To the corresponding key in a Qwerty layout" +msgstr "Til den tilsvarende tast på et Qwertytastatur" -#: ../rules/base.xml.in.h:1037 -msgid "To the corresponding key in a Dvorak keyboard." -msgstr "Til den tilsvarende tast i et Dvoraktastatur." +#: ../rules/base.xml.in.h:1051 +msgid "To the corresponding key in a Dvorak layout" +msgstr "Til den tilsvarende tast i et Dvoraktastatur" -#: ../rules/base.xml.in.h:1038 +#: ../rules/base.xml.in.h:1052 +msgid "To the corresponding key in a Colemak layout" +msgstr "Til den tilsvarende tast i et Colemaktastatur" + +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Vedligehold tastkompatibilitet med gamle tastkoder for Solaris" -#: ../rules/base.xml.in.h:1039 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Kompatibilitet med Suntast" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Tastsekvens for at slå X-serveren ned" # Backspace kunne også være Slet tilbage -#: ../rules/base.xml.in.h:1041 -msgid "Control + Alt + Backspace" -msgstr "Control + Alt + Rettelsestast" +#: ../rules/base.xml.in.h:1056 +msgid "Ctrl + Alt + Backspace" +msgstr "Ctrl + Alt + Rettelsestast" #: ../rules/base.extras.xml.in.h:1 msgid "apl" @@ -4045,159 +4099,187 @@ msgstr "Atsina" # http://en.wikipedia.org/wiki/Interior_Salish_languages #: ../rules/base.extras.xml.in.h:38 -msgid "Couer D'alene Salish" -msgstr "Couer D'alene Salish" +msgid "Coeur d'Alene Salish" +msgstr "Couer d'alene Salish" #: ../rules/base.extras.xml.in.h:39 msgid "English (US, Sun Type 6/7)" msgstr "Engelsk (US, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Engelsk (norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polsk (international med døde taster)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polsk (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krimtatarsk (Dobruja Q)" # touchtype = blindskrift (altså at skrive uden at kigge) -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumænsk (ergonomisk maskinskrivning)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Rumænsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbisk (sammensætte accenter frem for døde taster)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russisk (med ukrainsk-hviderussisk layout)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armensk (OLPC-fonetisk)" # Er lidt usikker på betydningen af SIL, men antager at det drejer sig om: # http://www.sil.org/sil/ -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebraisk (bibelsk, SIL-fonetik)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belgisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugisisk (brasiliansk, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tjekkisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dansk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Hollandsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Fransk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Græsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italiensk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japansk (Sun type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japansk (Sun type 7 - pc-kompatibel)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japansk (Sun type 7 - sun-kompatibel)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugisisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slovakisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Spansk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Svensk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Tysk (Schweiz, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Fransk (Schweiz, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Tyrkisk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrainsk (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Engelsk (UK, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreansk (Sun type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengali" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugisisk (brasiliansk, nativo for esperanto)" + +#~ msgid "English (layout toggle on multiply/divide key)" +#~ msgstr "Engelsk (skift layout på gange-/divideretast)" + +#~ msgid "Key(s) to change layout" +#~ msgstr "Tast(er) for at skifte layout" + +#~ msgid "Numeric keypad layout selection" +#~ msgstr "Numerisk tastatur layout udvælgelse" + +#~ 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" + +#~ msgid "Compose key position" +#~ msgstr "Placering af Composetast" + +#~ msgid "Toggle PointerKeys with Shift + NumLock." +#~ msgstr "Skift pegetaster med Skift + NumLock." + #~ msgid ">German (Switzerland)" #~ msgstr ">Tysk (Schweiz)" diff --git a/xorg-server/xkeyboard-config/po/de.po b/xorg-server/xkeyboard-config/po/de.po index 3781e6ec8..d50787623 100644 --- a/xorg-server/xkeyboard-config/po/de.po +++ b/xorg-server/xkeyboard-config/po/de.po @@ -1,14 +1,14 @@ # German translation of xkeyboard-config. # This file is distributed under the same license as the xkeyboard-config package. # Christian Kirbach <Christian.Kirbach@googlemail.com>, 2009. -# Mario Blättermann <mario.blaettermann@gmail.com>, 2009, 2010, 2011, 2012, 2013. +# Mario Blättermann <mario.blaettermann@gmail.com>, 2009, 2010, 2011, 2012, 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 19:15+0100\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 20:53+0100\n" "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" @@ -816,7 +816,7 @@ msgid "English (programmer Dvorak)" msgstr "Englisch (Dvorak für Programmierer)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -888,11 +888,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Usbekisch (Afghanistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabisch" @@ -930,11 +930,11 @@ msgid "Albanian" msgstr "Albanisch" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armenisch" @@ -1010,11 +1010,11 @@ msgid "Belarusian (Latin)" msgstr "Weißrussisch (Lateinisch)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belgisch" @@ -1046,17 +1046,17 @@ msgstr "Belgisch (Sun-Akzenttasten)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belgisch (Wang Modell 724, azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" -msgstr "Bengalisch" +msgid "Bangla" +msgstr "Bangla" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengalisch (Probhat)" #. Keyboard indicator for Indian layouts @@ -1069,27 +1069,27 @@ msgid "Indian" msgstr "Indisch" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengalisch (Indien)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengalisch (Indien, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengalisch (Indien, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengalisch (Indien, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengalisch (Indien, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengalisch (Indien, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1273,11 +1273,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnisch (US-Tastatur mit bosnischen Buchstaben)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugiesisch (Brasilien)" @@ -1290,16 +1290,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugiesisch (Brasilien, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugiesisch (Brasilien, nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugiesisch (Brasilien, Nativo für US-Tastaturen)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugiesisch (Brasilien, Nativo für Esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Portugiesisch (Brasilien, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1453,2463 +1453,2483 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibetanisch (mit ASCII-Ziffern)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Uigurisch" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Kroatisch" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Kroatisch (Anführungszeichen für Zitate verwenden)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Kroatisch (Kroatische Digraphen verwenden)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Kroatisch (US-Tastatur mit kroatischen Digraphen)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Kroatisch (US-Tastatur mit kroatischen Buchstaben)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tschechisch" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tschechisch (mit <\\|>-Taste)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tschechisch (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tschechisch (qwerty, erweiterter Backslash)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tschechisch (UCW-Belegung, nur akzentuierte Buchstaben)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tschechisch (US Dvorak mit CZ-UCW-Unterstützung)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dänisch" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dänisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dänisch (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dänisch (Macintosh, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dänisch (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Niederländisch" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Niederländisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Niederländisch (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Niederländisch (Standard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estnisch" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estnisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estnisch (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estnisch (US-Tastatur mit estnischen Buchstaben)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persisch" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persisch (mit persischem Nummernblock)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurdisch (Iran, Lateinisches Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurdisch (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurdisch (Iran, Lateinisches Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurdisch (Iran, Arabisch-Lateinisch)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Irakisch" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurdisch (Irak, lateinisches Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurdisch (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurdisch (Irak, Lateinisches Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurdisch (Irak, Arabisch-Lateinisch)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Färöisch" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Färöisch (ohne Akzenttasten)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finnisch" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finnisch (klassisch)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finnisch (klassisch, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Nördliches Saami (Finnland)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finnisch (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Französisch" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Französisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Französisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Französisch (alternativ)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Französisch (Alternative, nur latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Französisch (Alternative, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Französisch (Alternative, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Französisch (Alternative, veraltet)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Französisch (Alternative, veraltet, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Französisch (Alternative, veraltet, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Französich (Bepo, ergonomisch, Dvorak-ähnlich)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Französisch (Bepo, ergonomisch, Dvorak-ähnlich, nur latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Französisch (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Französisch (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Französisch (Bretonisch)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Okzitanisch" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Georgisch (Frankreich, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Englisch (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Englisch (Ghana, mehrsprachig)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Haussa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Englisch (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Französisch (Guinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgisch" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgisch (ergonomisch)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgisch (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russisch (Georgien)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Ossetisch (Georgien)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Deutsch" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Deutsch (Nur Acute-(')Akzentzeichen)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Deutsch (Nur Grave-(`) und Acute-(')Akzentzeichen)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Deutsch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Deutsch (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Rumänisch (Deutschland)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Rumänisch (Deutschland, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Deutsch (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Deutsch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Deutsch (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Deutsch (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Deutsch (Macintosh, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Niedersorbisch" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Niedersorbisch (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Deutsch (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russisch (Deutschland, phonetisch)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Deutsch (veraltet)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Griechisch" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Griechisch (vereinfacht)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Griechisch (erweitert)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Griechisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Griechisch (polytonisch)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Ungarisch" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Ungarisch (Standard)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Ungarisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Ungarisch (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Ungarisch (101/qwertz/Komma/Akzenttasten)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Ungarisch (101/qwertz/Komma/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Ungarisch (101/qwertz/Punkt/Akzenttasten)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Ungarisch (101/qwertz/Punkt/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Ungarisch (101/qwerty/Komma/Akzenttasten)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Ungarisch (101/qwerty/Komma/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Ungarisch (101/qwerty/Punkt/Akzenttasten)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Ungarisch (101/qwerty/Punkt/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Ungarisch (102/qwertz/Komma/Akzenttasten)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Ungarisch (102/qwertz/Komma/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Ungarisch (102/qwertz/Punkt/Akzenttasten)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Ungarisch (102/qwertz/Punkt/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Ungarisch (102/qwerty/Komma/Akzenttasten)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Ungarisch (102/qwerty/Komma/ohne Akzenttasten)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Ungarisch (102/qwerty/Punkt/Akzenttasten)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Ungarisch (102/qwerty/Punkt/ohne Akzenttasten)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Isländisch" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Isländisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Isländisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Isländisch (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Isländisch (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebräisch" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebräisch (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebräisch (phonetisch)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebräisch (Biblisch, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italienisch" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italienisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italienisch (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italienisch (US-Tastatur mit italienischen Buchstaben)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgisch (Italien)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italienisch (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japanisch" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japanisch (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japanisch (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japanisch (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japanisch (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japanisch (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgisisch" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgisisch (phonetisch)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Kambodscha)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kasachisch" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russisch (Kasachstan, mit Kasachisch)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kasachisch (mit russischer Belegung)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Laotisch (durch STEA vorgeschlagene Standardbelegung)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Spabisch (Lateinamerikanisch)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Spanisch (Lateinamerikanisch, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Spanisch (Lateinamerikanisch, Akzent-Tilde einschließen)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Spanisch (Lateinamerikanisch, Sun-Akzenttasten)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litauisch" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litauisch (Standard)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litauisch (US-Tastatur mit litauischen Buchstaben)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litauisch (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litauisch (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litauisch (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Lettisch" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Lettisch, (Apostroph-Variante)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Lettisch (Tilde-Variante)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Lettisch (F-Variante)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Lettisch (modern)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Georgisch (ergonomisch, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Lettisch (angepasst)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrinisch" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrinisch (kyrillisch)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrinisch, (Kyrillisch, »З« und »Ж« vertauscht)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrinisch (lateinisch, Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrinisch (lateinische qwerty-Tastatur)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrinisch (lateinische qwerty-Tastatur, Unicode)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrinisch (Kyrillisch mit Anführungszeichen)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrinisch (lateinisch mit Anführungszeichen)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Mazedonisch" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Mazedonisch (ohne Akzenttasten)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltesisch" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltesisch (mit US-Belegung)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongolisch" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norwegisch" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norwegisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norwegisch (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Nördliches Saami (Norwegen)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Nördliches Saami (Norwegen, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norwegisch (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norwegisch (Macintosh, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norwegisch (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polnisch" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polnisch (veraltet)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polnisch (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polnisch (Dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste mit Zitatzeichen)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polnisch (Dvorak, polnische Anführungszeichen auf Taste 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kaschubisch" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russisch (Polen, phonetisch, Dvorak)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polnisch (Dvorak für Programmierer)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugiesisch" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugiesisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugiesisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugiesisch (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugiesisch (Macintosh, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugiesisch (Macintosh, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugiesisch (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugiesisch (Nativo für US-Tastaturen)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Rumänisch" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Rumänisch (Cedilla)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Rumänisch (Standard)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Rumänisch (Standard Cedilla)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Rumänisch (Windows-Tasten)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russisch" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russisch (phonetisch)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russisch (phonetisch mit Windows-Tasten)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russisch (Schreibmaschine)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russisch (veraltet)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russisch (Schreibmaschine, veraltet)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatarisch" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Ossetisch (veraltet)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Ossetisch (Windows-Tasten)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Tschuwaschisch" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Tschuwaschisch (lateinische Schrift)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurtisch" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakutisch" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmykisch" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russisch (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russisch (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbisch (Russland)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baschkirisch" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbisch" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbisch, (Kyrillisch, »З« und »Ж« vertauscht)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbisch (Lateinisch)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbisch (Lateinisch Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbisch (Lateinische qwerty-Tastatur)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbisch (lateinische qwerty-Tastatur, Unicode)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbisch (Kyrillisch mit Anführungszeichen)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbisch (Lateinisch mit Anführungszeichen)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannonisches Russinisch (homophon)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannonisches Russinisch" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Slowenisch" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Slowenisch (Anführungszeichen für Zitate verwenden)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slowenisch (US-Tastatur mit slowenischen Buchstaben)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slowakisch" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slowakisch (erweiterter Backslash)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slowakisch (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slowakisch (qwerty, erweiterter Backslash)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Spanisch" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Spanisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Spanisch (Akzent-Tilde einschließen)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Spanisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Spanisch (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturisch (Spanien, mit unterpunktetem L und H)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Katalanisch (Spanische Variante mit mittelpunktiertem L)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Spanisch (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Schwedisch" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Schwedisch (ohne Akzenttasten)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Schwedisch (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russisch (Schweden, phonetisch)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russisch (Schweden, phonetisch, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Nördliches Saami (Schweden)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Schwedisch (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Schwedisch (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Schwedische Gebärdensprache" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Deutsch (Schweiz)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Deutsch (Schweiz, veraltet)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Deutsch (Schweiz, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Deutsch (Schweiz, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Französisch (Schweiz)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Französisch (Schweiz, ohne Akzenttasten)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Französisch (Schweiz, Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Französisch (Schweiz, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Deutsch (Schweiz, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabisch (Syrien)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syrisch" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syrisch (phonetisch)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurdisch (Syrien, lateinisches Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurdisch (Syrien, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurdisch (Syrien, lateinisches Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadschikisch" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadschikisch (veraltet)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Sinhala (phonetisch)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamilisch (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamilisch (Sri Lanka, TAB Schreibmaschine)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thailändisch" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thailändisch (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thailändisch (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Türkisch" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Türkisch, (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Türkisch (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Türkisch (Sun-Akzenttasten)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurdisch (Türkei, lateinisches Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurdisch (Türkei, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurdisch (Türkei, lateinisches Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Türkisch (International, mit Akzenttasten)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krimtatarisch (Türkisch Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krimtatarisch (Türkisch F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krimtatarisch (Türkisch Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanesisch" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanesisch (indigen)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrainisch" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrainisch (phonetisch)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrainisch (Schreibmaschine)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrainisch (Windows-Tasten)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrainisch (veraltet)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrainisch (Standard-RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russisch (Ukraine, Standard-RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrainisch (homophon)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Englisch (Britisch)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Englisch (Britisch erweitert, Windows-Tasten)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Englisch (Britisch international, mit Akzenttasten)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Englisch (Britisch, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Englisch (Dvorak mit britischer Punktierung)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Englisch (Britisch, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Englisch (Britisch, Macintosh international)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "English (Britisch, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Usbekisch" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Usbekisch (lateinische Schrift)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamesisch" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreanisch" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreanisch (101/104-Tasten kompatibel)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japanisch (PC-98xx-Serie)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irisch" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irisch (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabisch (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Englisch (Südafrika)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (falsch platziertes Semikolon und Anführungszeichen, veraltet)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalesisch" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Englisch (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Joruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amharisch" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (linkshändig)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (rechtshändig)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmenisch" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmenisch (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Französisch (Mali, Alternative)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Englisch (Mali, USA Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Englisch (Mali, USA International)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Swahili (Tansania)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Swahili (Kenia)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Philippinisch" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Philippinisch (QWERTY, Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Philippinisch (Capewell-Dvorak, Lateinisch)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Philippinisch (Capewell-Dvorak, Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Philippinisch (Capewell-QWERF 2006, lateinisch)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Philippinisch (Capewell-QWERF 2006, Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Philippinisch (Colemak, lateinisch)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Philippinisch (Colemak, Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Philippinisch (Dvorak, lateinisch)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Philippinisch (Dvorak, Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldawisch" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldauisch (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Wechseln in eine andere Belegung" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Rechte Alt-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Linke Alt-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Linke Windows-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Rechte Windows-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Beliebige Windows-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Rechte Strg-Taste (gedrückt halten)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Rechte Alt-Taste" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Linke Alt-Taste" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Feststelltaste" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Umschalt-+Feststelltaste" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Feststelltaste" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Beide Umschalttasten gleichzeitig" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Beide Alt-Tasten gleichzeitig" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Beide Steuerungstasten gleichzeitig" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Strg+Umschalttaste" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Linke Strg-Taste+Linke Umschalttaste" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Rechte Strg-Taste und rechte Umschalttaste" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Strg" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Umschalttaste" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Linke Alt-Taste+Linke Umschalttaste" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Leertaste" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menü" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Linke Windows-Taste" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Rechte Windows-Taste" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Linke Umschalttaste" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Rechte Umschalttaste" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Linke Strg-Taste" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Rechte Strg-Taste" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Rollen" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Linke Strg-Taste und linke Windows-Taste (zur ersten Belegung), rechte Strg-Taste und Menütaste (zur zweiten Belegung)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Taste zum Wechsel in die dritte Tastaturebene" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Beliebige Windows-Taste" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Beliebige Alt-Taste" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Rechte Alt-Taste, Umschalttaste + rechte Alt-Taste ist Compose-Taste" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Rechte Alt-Taste wählt niemals die dritte Tastaturebene." -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Eingabetaste im Nummernblock" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Backslash" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Kleiner als/größer als>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Feststelltaste wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Backslash wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Kleiner als/Größer als> wählt die dritte Ebene, sperrt einmalig wenn gedrückt, zusammen mit einer anderen Taste zum Wählen der dritten Ebene" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Position der Strg-Taste" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Feststelltaste als Strg-Taste" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Linke Strg-Taste als Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Strg-Taste und Feststelltaste vertauschen" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Links von »A«" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Unten links" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Rechte Strg-Taste wie rechte Alt-Taste" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menü als rechte Strg-Taste" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Rechte Alt-Taste als rechte Strg-Taste" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Linke Alt-Taste und linke Strg-Taste vertauschen" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Linke Win-Taste und linke Strg-Taste vertauschen" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Linke Alt als Strg, linke Strg als Win, linke Win als Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Tastatur-LED zur Anzeige der alternativen Belegung verwenden" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "NumLock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Belegung des Nummernblocks" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Veraltet" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unicode-Ergänzungen (Pfeile und mathematische Operatoren)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 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." -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Wang 724 (veraltet)" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Wang 724 mit Unicode-Ergänzungen (Pfeile und mathematische Operatoren)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 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:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadezimal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/Telefonstil" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Verhalten der Löschtaste des Nummernblocks" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Veraltete Taste mit Punkt" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Veraltete Taste mit Komma" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Taste der vierten Ebene mit Punkt" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Taste der vierten Ebene mit Punkt, Latin-9-Einschränkung" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Taste der vierten Ebene mit Komma" # momayyez? Was ist das? -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Taste der vierten Ebene mit »momayyez«" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Taste der vierten Ebene mit abstrakten Trennern" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Semikolon in der dritten Tastaturebene" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Verhalten der Feststelltaste" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Feststelltaste verwendet interne Großschreibung. Umschalttaste »unterbricht« Feststelltaste" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 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:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Feststelltaste kehrt die normale Großschreibung alphabetischer Zeichen um" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Feststelltaste als zusätzliche NumLock-Taste verwenden" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Esc und Feststelltaste vertauschen" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Feststelltaste als zusätzliche Esc-Taste verwenden" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Feststelltaste als zusätzliche Löschtaste verwenden" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Feststelltaste als zusätzliche Super-Taste verwenden" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Feststelltaste als zusätzliche Hyper-Taste verwenden" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Feststelltaste kehrt Umschalttaste um, so dass alle Tasten beeinflusst werden" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Feststelltaste ist deaktiviert" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Feststelltaste als zusätzliche Strg-Taste verwenden" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Verhalten der Alt/Windows-Tasten" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Standardverhalten zur Menütaste hinzufügen" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt und Meta befinden sich auf den Alt-Tasten." -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt ist den Windows-Tasten zugeordnet (und den üblichen Alt-Tasten)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Strg ist den Windows-Tasten zugeordnet (und den üblichen Strg-Tasten)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl 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:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta ist den Windows-Tasten zugeordnet" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta ist der linken Windows-Taste zugeordnet" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper ist den Windows-Tasten zugeordnet" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt ist der rechten Windows-Taste zugeordnet und Super der Menü-Taste." -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt-Taste ist gegen Windows-Taste vertauscht" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Position der Compose-Taste" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Dritte Ebene der linken Windows-Taste" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Dritte Ebene der rechten Windows-Taste" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Dritte Ebene der Menü-Taste" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Dritte Ebene der linken Strg-Taste" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Dritte Ebene der rechten Strg-Taste" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Dritte Ebene der Feststelltaste" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Dritte Ebene von <Kleiner als/größer als>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "Druck" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Verschiedene Optionen zur Kompatibilität" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Vorgegebene Nummernblocktasten" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Tasten des Nummernblocks geben immer Ziffern ein (wie bei Mac)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 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:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Spezialtasten für Server (Strg+Alt+<Taste>)" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Umschalttaste deaktiviert Feststelltaste" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Typographische Sonderzeichen aktivieren" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein und aus" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Beide Umschalttasten gleichzeitig schalten CapsLock ein, eine Umschalttaste deaktiviert" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Beide Umschalttasten gleichzeitig schalten ShiftLock ein und aus" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Umschalttaste + NumLock schaltet Tastaturmaus ein und aus" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Erlauben, Grabs mit Tastaturaktionen abzubrechen (Achtung: Sicherheitsrisiko)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Protokollieren von Grabs und Baumansichtsaktionen erlauben" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Währungssymbole zu verschiedenen Tasten hinzufügen" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro auf E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro auf 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro auf 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro auf 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupie-Symbol auf 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Taste zum Wechsel in die fünfte Tastaturebene" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Kleiner als/Größer als> 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:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Linke Windows-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:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Rechte Windows-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:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Leertaste zur Eingabe nicht umbrechbarer Zeichen verwenden" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Leertaste gibt in jeder Ebene stets Leerzeichen aus" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Nicht umbrechbares Leerzeichen in der zweiten Tastaturebene" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Nicht umbrechbares Leerzeichen in der dritten Tastaturebene" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Nicht umbrechbares Leerzeichen in der vierten Tastaturebene" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 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:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Japanische Tastaturoptionen" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Kana-Sperrtaste ist gesperrt" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Löschtaste wie NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Zenkaku Hankaku als zusätzliche Esc-Taste verwenden" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Zeichen mit Esperanto-Circumflex hinzufügen" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Zur entsprechenden Taste einer Qwerty-Belegung." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Zur entsprechenden Taste einer Dvorak-Belegung." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Zur entsprechenden Taste einer Colemak-Belegung." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Tastenkompatibilität mit veralteten Solaris-Tastencodes sicher stellen" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Sun-Tastenkompatibilität" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Tastenkombination zum erzwungenen Beenden des X-Servers" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Strg + Alt + Löschtaste" @@ -4021,182 +4041,150 @@ msgstr "Couer D'alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Englisch (USA, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Englisch (Normannisch)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polnisch (International, mit Akzenttasten)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polnisch (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polnisch (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krimtatarisch (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumänisch (ergonomische Bedienung)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Rumänisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbisch (Akzente kombinieren anstelle von Akzenttasten)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russisch (mit ukrainisch-weißrussischer Belegung)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russische (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armenisch (OLPC-phonetisch)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebräisch (Biblisch, SIL phonetisch)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belgisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugiesisch (Brasilien, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tschechisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dänisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Niederländisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estnisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finnisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Französisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Griechisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italienisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japanisch (Sun Typ 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japanisch (Sun Typ 7 - PC-kompatibel)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japanisch (Sun Typ 7 - Sun-kompatibel)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norwegisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugiesisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slowakisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Spanisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Schwedisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Deutsch (Schweiz, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Französisch (Schweiz, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Türkisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrainisch (Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Englisch (Großbritannien, Sun Typ 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreanisch (Sun Typ 6/7)" - -#~ msgid "English (layout toggle on multiply/divide key)" -#~ msgstr "Englisch (Belegungsumschalter auf der Multiplikations-/Divisionstaste)" - -#~ msgid "Key(s) to change layout" -#~ msgstr "Taste(n) zum Wechseln der Belegung" - -#~ msgid "Numeric keypad layout selection" -#~ msgstr "Belegungsauswahl des Nummernblocks" - -#~ 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" - -#~ msgid "Compose key position" -#~ msgstr "Position der Compose-Taste" - -#~ msgid "Toggle PointerKeys with Shift + NumLock." -#~ msgstr "Zeigertasten mit Umschalttaste + NumLock umschalten" - -#~ msgid ">German (Switzerland)" -#~ msgstr ">Deutsch (Schweiz)" - -#~ msgid "ca" -#~ msgstr "ca" - -#~ msgid "Catalan" -#~ msgstr "Katalanisch" - -#~ msgid "Serbian (Cyrillic)" -#~ msgstr "Serbisch (Kyrillisch)" - -#~ msgid "Gagauz" -#~ msgstr "Gagauz" - -#~ msgid "Hebrew (Biblical SIL)" -#~ msgstr "Hebräisch (Biblisch, SIL)" diff --git a/xorg-server/xkeyboard-config/po/eo.po b/xorg-server/xkeyboard-config/po/eo.po index 9460fe1c8..d956c0e9e 100644 --- a/xorg-server/xkeyboard-config/po/eo.po +++ b/xorg-server/xkeyboard-config/po/eo.po @@ -1,14 +1,14 @@ # Esperanta traduko por 'xkeyboard-config' -# Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013 The Free Software Foundation, Inc. +# Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013, 2014 The Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. -# Felipe Castro <fefcas@gmail.com>, 2008, 2009, 2010, 2011, 2012, 2013. +# Felipe Castro <fefcas@gmail.com>, 2008, 2009, 2010, 2011, 2012, 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-16 08:38-0300\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 10:58-0300\n" "Last-Translator: Felipe Castro <fefcas@gmail.com>\n" "Language-Team: Esperanto <translation-team-eo@lists.sourceforge.net>\n" "Language: eo\n" @@ -816,7 +816,7 @@ msgid "English (programmer Dvorak)" msgstr "Angla (Dvorako por programistoj)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -888,11 +888,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Uzbeka (Afganujo, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Araba" @@ -930,11 +930,11 @@ msgid "Albanian" msgstr "Albana" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armena" @@ -1010,11 +1010,11 @@ msgid "Belarusian (Latin)" msgstr "Belorusa (Latina)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belga" @@ -1046,17 +1046,17 @@ msgstr "Belga (senpaŝaj klavoj de Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belga (Wang modelo 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengala" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengala (Probhat)" #. Keyboard indicator for Indian layouts @@ -1066,31 +1066,31 @@ msgstr "in" #: ../rules/base.xml.in.h:274 msgid "Indian" -msgstr "Hinda" +msgstr "Barata" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" -msgstr "Bengala (Hindujo)" +msgid "Bangla (India)" +msgstr "Bengala (Barato)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" -msgstr "Bengala (Hindujo, Probhat)" +msgid "Bangla (India, Probhat)" +msgstr "Bengala (Barato, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" -msgstr "Bengala (Hindujo, Baishakhi)" +msgid "Bangla (India, Baishakhi)" +msgstr "Bengala (Barato, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" -msgstr "Bengala (Hindujo, Bornona)" +msgid "Bangla (India, Bornona)" +msgstr "Bengala (Barato, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" -msgstr "Bengala (Hindujo, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" +msgstr "Bengala (Barato, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" -msgstr "Bengala (Hindujo, Baishakhi InScript)" +msgid "Bangla (India, Baishakhi Inscript)" +msgstr "Bengala (Barato, Baishakhi InScript)" #. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:282 @@ -1245,7 +1245,7 @@ msgstr "Marata (KaGaPa fonetika)" #: ../rules/base.xml.in.h:327 msgid "English (India, with RupeeSign)" -msgstr "Angla (Hindujo, kun RupiSigno)" +msgstr "Angla (Barato, kun RupiSigno)" #. Keyboard indicator for Bosnian layouts #: ../rules/base.xml.in.h:329 @@ -1273,11 +1273,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosna (usona klavaro kun bosnaj literoj)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugala (Brazilo)" @@ -1290,16 +1290,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugala (Brazilo, Dvorako)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugala (Brazilo, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugala (Brazilo, Nativo por usonaj klavaroj)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugala (Brazilo, Nativo por Esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brazilo, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1453,2463 +1453,2483 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibeta (kun ciferoj ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Ujgura" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Kroata" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Kroata (uzi angul-citilojn por citiloj)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Kroata (uzi kroatajn duliteraĵojn)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Kroata (Usona klavaro kun kroataj duliteraĵoj)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Kroata (Usona klavaro kun kroataj literoj)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Ĉeĥa" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Ĉeĥa (kun klavo <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Ĉeĥa (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Ĉeĥa (qwerty, etendita Retroklino)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Ĉeĥa (aranĝo UCW, nur diakritaĵoj)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Ĉeĥa (usona Dvorako kun subteno al CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dana" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dana (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dana (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dana (Macintosh, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dana (Dvorako)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Nederlanda" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Nederlanda (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Nederlanda (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Nederlanda (norma)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzonka" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estona" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estona (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estona (Dvorako)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estona (Usona klavaro kun estonaj literoj)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persa" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persa (kun persa ciferklavaro)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurda (Irano, Latina Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurda (Irano, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurda (Irano, Latina Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurda (Irano, Araba-Latina)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iraka" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurda (Irako, Latina Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurda, (Irako, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurda (Irako, Latina Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurda (Irako, Araba-Latina)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Feroa" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Feroa (forigi senpaŝajn klavojn)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finna" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finna (klasika)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finna (klasika, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Norda Samea (Finlando)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finna (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Franca" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Franca (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Franca (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Franca (alternativa)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Franca (alternativa, nur Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Franca (alternativa, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Franca (alternava, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Franca (malmoderna, alternativa)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Franca (malmoderna, alternativa, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Franca (malmoderna, alternativa, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Franca (Bepo, komforteca, dvorake)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Franca (Bepo, komforteca, dvorake, nur Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Franca (Dvorako)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Franca (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Franca (Bretona)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Okcitana" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Kartvela (Franca, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Angla (Ganao)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Angla (Ganao, plurlingva)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Haŭsa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Angla (Ganao, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Franca (Gvineo)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Kartvela" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Kartvela (komforteca)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Kartvela (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Rusa (Kartvela)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Oseta (Kartvelujo)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Germana" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Germana (senpaŝa dekstra korno)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Germana (senpaŝa maldekstra/dekstra korno)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Germana (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Germana (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Rumana (Germanujo)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Rumana (Germanujo, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Germana (Dvorako)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Germana (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Germana (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Germana (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Germana (Macintosh, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Malsupra Soraba" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Malsupra Soraba (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Germana (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Rusa (Germana, fonetika)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Germana (malmoderna)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Greka" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Greka (simpla)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Greka (etendita)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Greka (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Greka (plurtona)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Hungara" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Hungara (norma)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Hungara (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Hungara (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Hungara (101/qwertz/komo/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Hungara (101/qwertz/komo/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Hungara (101/qwertz/punkto/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Hungara (101/qwertz/punkto/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Hungara (101/qwerty/komo/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Hungara (101/qwerty/komo/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Hungara (101/qwerty/punkto/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Hungara (101/qwerty/punkto/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Hungara (102/qwertz/komo/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Hungara (102/qwertz/komo/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Hungara (102/qwertz/punkto/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Hungara (102/qwertz/punkto/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Hungara (102/qwerty/komo/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Hungara (102/qwerty/komo/forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Hungara (102/qwerty/punkto/senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Hungara (102/qwerty/punkto/forigi senpaŝajn klavojn)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islanda" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islanda (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islanda (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islanda (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islanda (Dvorako)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebrea" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebrea (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebrea (fonetika)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebrea (Biblia, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Itala" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Itala (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Itala (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Itala (usona klavaro kun italaj literoj)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Kartvela (Italujo)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Itala (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japana" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japana (Kanao)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japana (Kanao 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japana (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japana (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japana (Dvorako)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgiza" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgiza (fonetika)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Kmera (Kamboĝo)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazaĥa" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Rusa (Kazaĥujo, kun Kazaĥa)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazaĥa (kun Rusa)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (norma aranĝo proponita de STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Hispana (Latin-amerika)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Hispana (Latin-amerika, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Hispana (Latin-amerika, inkluzive senpaŝa tildo)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Hispana (Latin-amerika, senpaŝaj klavoj de Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litova" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litova (norma)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litova (Usona klavaro kun litovaj literoj)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litova (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litova (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litova (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Latva" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Latva (citila variaĵo)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Latva (tilda variaĵo)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Latva (variaĵo F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Latva (moderna)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Latva (komforteca, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Latva (adaptita)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maoria" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegra" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegra (Cirila)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegra (Cirila, Z kaj ZHE interŝanĝita)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegra (Latina Unikodo)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegra (Latina qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegra (Latina Unikodo qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegra (Cirila kun angul-citiloj)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegra (Latina kun angul-citiloj)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Makedona" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Makedona (forigi senpaŝajn klavojn)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Malta" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Malta (kun usona aranĝo)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongola" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norvega" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norvega (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norvega (Dvorako)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Norda Samea (Norvegujo)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Norda Samea (Norvegujo, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norvega (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norvega (Macintosh, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norvega (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Pola" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Pola (malmoderna)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Pola (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Pola (Dvorako)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Pola (Dvorako, polaj citiloj ĉe citila klavo)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Pola (Dvorako, polaj citiloj ĉe klavo 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kaŝuba" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Rusa (Polujo, fonetika Dvorako)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Pola (Dvorako por programistoj)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugala" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugala (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugala (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugala (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugala (Macintosh, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugala (Macintosh, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugala (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugala (Nativo por usonaj klavaroj)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugalujo, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Rumana" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Rumana (subhoko)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Rumana (norma)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Rumana (norma subhoko)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Rumana (WinKeys)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Rusa" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Rusa (fonetika)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Rusa (fonetika WinKeys)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Rusa (skribmaŝina)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Rusa (malmoderna)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Rusa (skribmaŝina, malmoderna)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatara" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Oseta (malmoderna)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Oseta (WinKeys)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Ĉuvaŝa" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Ĉuvaŝa (Latina)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurta" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komia" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakuta" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Rusa (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Rusa (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serba (Rusujo)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baŝkira" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Maria" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serba" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serba (Cirila, Z kaj ZHE interŝanĝita)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serba (Latina)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serba (Latina Unikoda)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serba (Latina qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serba (Latina Unikoda qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serba (Cirila kun angul-citiloj)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serba (Latina kun angul-citiloj)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Panona Rusina (homofonia)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Panona Rusina" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Slovena" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Slovena (uzi angul-citilojn por citiloj)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slovena (Usona klavaro kun slovenaj literoj)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slovaka" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slovaka (etendita Retroklino)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slovaka (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slovaka (qwerty, etendita Retroklino)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Hispana" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Hispana (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Hispana (inkluzive senpaŝa tildo)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Hispana (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Hispana (Dvorako)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturia (Hispanujo, kun subpunktita H kaj subpunktita L)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Kataluna (Hispanujo, kun centro-punktita L)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Hispana (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Sveda" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Sveda (forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Sveda (Dvorako)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Rusa (Svedujo, fonetika)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Rusa (Svedujo, fonetika, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Norda Samea (Svedujo)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Sveda (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Sveda (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Sveda gestlingvo" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Germana (Svislando)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Germana (Svislando, malmoderna)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Germana (Svislando, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Germana (Svislando, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Franca (Svislando)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Franca (Svislando, forigi senpaŝajn klavojn)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Franca (Svislando, senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Franca (Svislando, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Germana (Svislando, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Araba (Sirio)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Siria" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Siria (fonetika)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurda, (Sirio, Latina Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurda (Sirio, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurda (Sirio, Latina Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Taĝika" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Taĝika (malmoderna)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Sinhala (fonetika)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamila (Sri-lanko, Unikodo)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamila (Sri-lanko, Skribmaŝino TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Taja" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Taja (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Taja (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turka" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turka (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turka (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turka (senpaŝaj klavoj de Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurda (Turkujo, Latina Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurda, (Turkujo, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurda (Turkujo, Latina Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turka (internacia kun senpaŝaj klavoj)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krime-tatara (Turka Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krime-tatara (Turka F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krime-tatara (Turka Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Tajvana" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Tajvana (indiĝena)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Tajvano)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrajna" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrajna (fonetika)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrajna (skribmaŝino)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrajna (WinKeys)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrajna (malmoderna)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrajna (norma RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Rusa (Ukrajnujo, norma RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrajna (homofonia)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Angla (UK)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Angla (UK, etenditaj WinKeys)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Angla (UK, internacia kun senpaŝaj klavoj)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Angla (UK, Dvorako)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Angla (UK, Dvorako kun interpunkcio de UK)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Angla (UK, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Angla (UK, internacia Macintosh)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Angla (UK, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Uzbeka" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Uzbeka (Latina)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vjetnama" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Korea" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Korea (kongrua al 101/104 klavoj)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japana (Serio PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlanda" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlanda (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogamo" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogamo (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdua (Pakistano)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdua (Pakistano, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdua (Pakistano, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Araba (Pakistano)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sinda" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Mahla" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Angla (Sud-Afriko)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (translokitaj punktokomo kaj citilo, malaktuale)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepala" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Angla (Niĝerio)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Joruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amhara" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Volofa" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Brajla" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Brajla (maldekstra mano)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Brajla (dekstra mano)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmena" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmena (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Franca (Malio, alternativa)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Angla (Malio , usona Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Angla (Malio, usona internacia)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Svahila (Tanzanio)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Svahila (Kenjo)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Cvana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipina" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipina (QWERTY, Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipina (Capewell-Dvorako, Latina)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipina (Capewell-Dvorako, Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipina (Capewell-QWERF 2006, Latina)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipina (Capewell-QWERF 2006, Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipina (Colemak, latina)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipina (Colemak, Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipina (Dvorako, latina)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipina (Dvorako Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldava" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldava (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Ni alternigas al alia aranĝo." -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Dekstra Alt (dum premata)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Maldekstra Alt (dum premata)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Maldekstra Win (dum premata)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Dekstra Win (dum premata)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Iu ajn Win-klavo (dum premata)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" msgstr "Caps Lock (dum premata), Alt+Caps Lock restarigas la originalan uskligon" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Dekstra Ctrl (dum premata)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Dekstra Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Maldekstra Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (al la unua aranĝo), Shift+Caps Lock (al la lasta aranĝo)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Maldekstra Win (al la unua aranĝo), dekstra Win/Menu (al la lasta aranĝo)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Maldekstra Ctrl (por la unua aranĝo), dekstra Ctrl (por la lasta aranĝo)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Ambaŭ klavoj Shift kune" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Ambaŭ klavoj Alt kune" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Ambaŭ klavoj Ctrl kune" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Maldekstra Ctrl+maldekstra Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Dekstra Ctrl+dekstra Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Maldekstra Alt+maldekstra Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Space" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Maldekstra Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Dekstra Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Maldekstra Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Dekstra Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Maldekstra Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Dekstra Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Ruluma Baskulo" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Maldekstra Ctrl + dekstra Win (por la unua aranĝo), dekstra Ctrl + Menu (por la dua aranĝo)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Klavo por elekti 3-an nivelon" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Iu ajn Win-klavo" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Iu ajn klavo Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Dekstra Alt, Shift+dekstra Alt estas Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Dekstra Alt neniam elektas la 3-an nivelon" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enen-klavo en ciferklavaro" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Retroklino" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Malpli-signo/Pli-signo>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Caps Lock elektas 3-an nivelon, funkcias kiel unufoja ŝloso kiam premita kun alia 3-nivela elektilo" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Retroklino elektas 3-an nivelon, funkcias kiel unufoja ŝloso kiam premita kun alia 3-nivela elektilo" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Malpli-signo/Pli-signo> elektas 3-an nivelon, funkcias kiel unufoja ŝloso kiam premita kun alia 3-nivela elektilo" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Pozicio de la klavo Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock kiel Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Maldekstra Ctrl kiel Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Permuti Ctrl kaj Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Maldekstre de 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Malsupre maldekstre" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Dekstra Ctrl kiel dekstran Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu kiel dekstran Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Dekstra Alt kiel dekstran Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Interŝanĝi la maldekstrajn klavojn Alt kun Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Interŝanĝi la maldekstrajn klavojn Win kun Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Maldekstra Alt kiel Ctrl, maldekstra Ctrl kiel Win, maldekstra Win kiel Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Uzi la LED de klavaro por indiki alternativan aranĝon" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Aranĝo de ciferklavaro" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Malmoderna" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unikodaj aldonoj (sagoj kaj operaci-simboloj)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Unikodaj aldonoj (sagoj kaj operaci-simboloj; operaci-simboloj en la apriora nivelo)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Malmoderna Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Wang 724 ciferklavaro kun Unikodaj aldonoj (sagoj kaj operaci-simboloj)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Ciferklavaro Wang 724 kun Unikodaj aldonoj (sagoj kaj operaci-simboloj; operaci-simboloj en la apriora nivelo)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Deksesume" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefon-stilo" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Funkciado de la forig-klavo de la ciferklavaro" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Malmoderna klavo kun punkto" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Malmoderna klavo kun komo" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Kvar-nivela klavo kun punkto" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Kvar-nivela klavo kun punkto, limigite al Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Kvar-nivela klavo kun komo" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Kvar-nivela klavo kun 'momayyez'" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Kvar-nivela klavo kun abstraktaj apartigiloj" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Punktokomo ĉe la 3-a nivelo" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Funkciado de la klavo Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock uzas internan uskligon; Shift \"paŭzigas\" Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock uzas internan uskligon; Shift ne influas Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock funkcias kiel Shift kun ŝlosado; Shift \"paŭzigas\" Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" msgstr "Caps Lock funkcias kiel Shift kun ŝlosado; Shift ne influas Caps Lock" -#: ../rules/base.xml.in.h:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock alternigas la ordinaran uskligon de alfabetaj signoj" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Igi Caps Lock kroman Num Lock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Permuti ESC kaj Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Igi Caps Lock kroman ESC" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Igi Caps Lock kroman Retroklavon" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Igi Caps Lock kroman Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Igi Caps Lock kroman Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock alternigas Shift (influante ĉiujn klavojn)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock estas malebligita" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Igi Caps Lock kroman Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Alt/Win, klava funkciado" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Aldoni laŭnorman funkciadon al la klavo Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt kaj Meta estas ĉe la klavoj Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt estas mapita al Win-klavoj (kaj al la kutimaj klavoj Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl estas mapita al Win-klavoj (kaj al la kutimaj klavoj Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl estas mapita al klavoj Alt, Alt estas mapita al Win-klavoj" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta estas mapita al la Win-klavoj" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta estas mapita al la maldekstra Win" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper estas mapita al la Win-klavoj" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt estas mapita al la dekstra Win-klavo kaj Super al Menu" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt estas permutita kun Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Pozicio de la klavo Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3-a nivelo de maldekstra Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3-a nivelo de dekstra Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3-a nivelo de Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3-a nivelo de maldekstra Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3-a nivelo de dekstra Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3-a nivelo de Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3-a nivelo de <Malpli/Pli-signo>" # La klavo plej ofte estas markita "Pause". -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Ceteraj kongruaj opcioj" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Aprioraj klavoj en ciferklavaro" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "La klavoj de la ciferklavaro ĉiam enigas ciferojn (kiel en Macintosh)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Shift funkcias kun la ciferklavaro same kiel en MS Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift ne nuligas Num Lock, sed elektas 3-an nivelon" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Specialaj klavoj (Ctrl+Alt+<klavo>) traktotas en servilo" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" msgstr "Apple Aluminium Keyboard: ŝajnigi klavojn de PC (Print, Scroll Lock, Pause, Num Lock)" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift nuligas Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Ebligi kromajn tipografiajn signojn" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Ambaŭ klavoj Shift kune alternigas Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Ambaŭ klavoj Shift kune aktivigas Caps Lock, unu klavo Shift malaktivigas" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Ambaŭ klavoj Shift kune alternigas ShiftLock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock alternigas PointerKeys" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Permesi rompi ŝlosojn per klavaraj agoj (averto: sekureca risko)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Ebligi registradon de ŝlosoj kaj fenestro-arboj" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Aldono de valut-signoj al iuj klavoj" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Eŭro-signo ĉe E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Eŭro-signo ĉe 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Eŭro-signo ĉe 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Eŭro-signo ĉe 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupio ĉe 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Klavo por elekti 5-an nivelon" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Malpli-signo/Pli-signo> elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Dekstra Alt elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Maldekstra Win elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Dekstra Win elektas 5-an nivelon, ŝlosas kiam premite kun alia 5-nivela elektilo" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Uzado de spac-klavo por enmeti ne-rompeblan spaco-signon" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Kutima spaco-signo ĉe iu ajn nivelo" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Ne-rompebla spaco-signo ĉe la 2-a nivelo" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Ne-rompebla spaco-signo ĉe la 3-a nivelo" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Ne-rompebla spaco-signo ĉe la 3-a nivelo, nenio ĉe la 4-a nivelo" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Ne-rompebla spaco-signo ĉe la 3-a nivelo, maldika ne-rompebla spaco-signo ĉe la 4-a nivelo" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Ne-rompebla spaco-signo ĉe la 4-a nivelo" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Ne-rompebla spaco-signo ĉe la 4-a nivelo, maldika ne-rompebla spaco-signo ĉe la 6-a nivelo" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" msgstr "Ne-rompebla spaco-signo ĉe la 4-a nivelo, maldika ne-rompebla spaco-signo ĉe la 6-a nivelo (per Ctrl+Shift)" -#: ../rules/base.xml.in.h:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Nul-larĝa ne-kuniga signo ĉe dua nivelo" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, nul-larĝa kuniga signo ĉe la tria nivelo" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, nul-larĝa kuniga signo ĉe la tria nivelo, ne-rompebla spaco-signo ĉe la kvara nivelo" -#: ../rules/base.xml.in.h:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, ne-rompebla spaco-signo ĉe la tria nivelo" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, ne-rompebla spaco-signo ĉe la tria nivelo, nenio ĉe la kvara nivelo" -#: ../rules/base.xml.in.h:1037 +#: ../rules/base.xml.in.h:1042 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, ne-rompebla spaco-signo ĉe la tria nivelo, nul-larĝa kuniga signo ĉe la kvara nivelo" -#: ../rules/base.xml.in.h:1038 +#: ../rules/base.xml.in.h:1043 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" msgstr "Nul-larĝa ne-kuniga signo ĉe la dua nivelo, ne-rompebla spaco-signo ĉe la tria nivelo, maldika ne-rompebla spaco-signo ĉe la kvara nivelo" -#: ../rules/base.xml.in.h:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Nul-larĝa ne-kuniga signo ĉe la tria nivelo, nul-larĝa kuniga signo ĉe la kvara nivelo" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Elektebloj de japana klavaro" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Kanaa klavo Lock ŝlosigas" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Retropaŝo laŭ estilo NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Igi Zenkaku Hankaku kroman ESC" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Aldono de Esperantaj literoj kun supersignoj" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Al la ekvivalenta klavo en aranĝo Qwerty." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Al la ekvivalenta klavo en dvoraka aranĝo." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Al la ekvivalenta klavo en dvoraka aranĝo." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Teni klav-kongrueco kun malnovaj klavkodoj de Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Kongrueco kun klavoj de Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Klav-sekvo por formortigi la X-servilon" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4021,150 +4041,160 @@ msgstr "Couer d'Alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Angla (US, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Angla (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Pola (internacia kun senpaŝaj klavoj)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Pola (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Pola (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krime-tatara (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumana (komforteca Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Rumana (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serba (kunmiksado de diakritaĵoj anstataŭ senpaŝaj klavoj)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Rusa (kun aranĝo ukrainia-belorusa)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Rusa (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armena (fonetika OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebrea (Biblia, fonetika SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Araba (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belga (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugala (Brazilo, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Ĉeĥa (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dana (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Nederlanda (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estona (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Fina (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Franca (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Greka (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Itala (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japana (Sun Tipo 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japana (Sun Tipo 7 - kongrua kun pc)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japana (Sun Tipo 7 - kongrua kun Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norvega (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugala (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slovaka (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Hispana (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Sveda (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Germana (Svislando, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Franca (Svislando, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turka (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrajna (Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Angla (UK, Sun Tipo 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Kore (Sun Tipo 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengala" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugala (Brazilo, Nativo por Esperanto)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Angla (alternigi aranĝon per la klavo multipliko/divido)" @@ -4435,9 +4465,6 @@ msgstr "Kore (Sun Tipo 6/7)" #~ msgid "Aze" #~ msgstr "Aze" -#~ msgid "Bangladesh" -#~ msgstr "Bangladeŝo" - #~ msgid "Bel" #~ msgstr "Bel" diff --git a/xorg-server/xkeyboard-config/po/es.po b/xorg-server/xkeyboard-config/po/es.po index 4f7bb3156..a784d6043 100644 --- a/xorg-server/xkeyboard-config/po/es.po +++ b/xorg-server/xkeyboard-config/po/es.po @@ -1,3778 +1,4253 @@ -# translation of xkeyboard-config-2.3.99.po to Spanish +# translation of xkeyboard-config-2.10.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 <jorgegonz@svn.gnome.org>, 2009, 2010, 2011. +# Facundo Dario Illanes <fdillanes@gmail.com>, 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.3.99\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2011-09-15 21:25+0100\n" -"PO-Revision-Date: 2011-10-02 15:54+0200\n" -"Last-Translator: Jorge González González <aloriel@gmail.com>\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-27 17:13-0300\n" +"Last-Translator: Facundo Dario Illanes <fdillanes@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" -"X-Generator: KBabel 1.9.1\n" +"X-Generator: Gtranslator 2.91.6\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" #: ../rules/base.xml.in.h:1 -msgid "<Less/Greater>" -msgstr "<Menor que/Mayor que>" +msgid "Generic 101-key PC" +msgstr "PC genérico 101 teclas" #: ../rules/base.xml.in.h:2 -msgid "<Less/Greater> (chooses 3rd level, latches when pressed together with another 3rd-level-chooser)" -msgstr "<Menor que/Mayor que> (elige el 3º nivel, bloquea al pulsarse junto con otro selector de 3º nivel)" +msgid "Generic 102-key (Intl) PC" +msgstr "PC genérico 102 teclas (intl)" #: ../rules/base.xml.in.h:3 -msgid "<Less/Greater> chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock" -msgstr "<Menor que/Mayor que> 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" +msgid "Generic 104-key PC" +msgstr "PC genérico 104 teclas" #: ../rules/base.xml.in.h:4 -msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "<Menor que/Mayor que> elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" +msgid "Generic 105-key (Intl) PC" +msgstr "PC genérico 105 teclas (intl)" #: ../rules/base.xml.in.h:5 -msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" -msgstr "<Menor que/Mayor que> elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "Dell 101-key PC" +msgstr "Dell PC 101 teclas" #: ../rules/base.xml.in.h:6 -msgid "A4Tech KB-21" -msgstr "A4Tech KB-21" +msgid "Dell Latitude series laptop" +msgstr "Portátil Dell Latitude" #: ../rules/base.xml.in.h:7 -msgid "A4Tech KBS-8" -msgstr "A4Tech KBS-8" +msgid "Dell Precision M65" +msgstr "Dell Precision M65" #: ../rules/base.xml.in.h:8 -msgid "A4Tech Wireless Desktop RFKB-23" -msgstr "A4Tech Wireless Desktop RFKB-23" +msgid "Everex STEPnote" +msgstr "Everex STEPnote" #: ../rules/base.xml.in.h:9 -msgid "ATM/phone-style" -msgstr "Cajero automático/estilo teléfono" +msgid "Keytronic FlexPro" +msgstr "Keytronic FlexPro" #: ../rules/base.xml.in.h:10 -msgid "Acer AirKey V" -msgstr "Acer AirKey V" +msgid "Microsoft Natural" +msgstr "Microsoft Natural" #: ../rules/base.xml.in.h:11 -msgid "Acer C300" -msgstr "Acer C300" +msgid "Northgate OmniKey 101" +msgstr "Northgate OmniKey 101" #: ../rules/base.xml.in.h:12 -msgid "Acer Ferrari 4000" -msgstr "Acer Ferrari 4000" +msgid "Winbook Model XP5" +msgstr "Winbook Model XP5" #: ../rules/base.xml.in.h:13 -msgid "Acer Laptop" -msgstr "Portátil Acer" +msgid "PC-98xx Series" +msgstr "PC-98xx Series" #: ../rules/base.xml.in.h:14 -msgid "Add the standard behavior to Menu key" -msgstr "Añadir el comportamiento estándar a la tecla Menú." +msgid "A4Tech KB-21" +msgstr "A4Tech KB-21" #: ../rules/base.xml.in.h:15 -msgid "Adding Esperanto circumflexes (supersigno)" -msgstr "Añadir las tildes circunflejas del esperanto (supersigno)" +msgid "A4Tech KBS-8" +msgstr "A4Tech KBS-8" #: ../rules/base.xml.in.h:16 -msgid "Adding currency signs to certain keys" -msgstr "Añadir símbolo de divisa a algunas teclas" +msgid "A4Tech Wireless Desktop RFKB-23" +msgstr "A4Tech Wireless Desktop RFKB-23" #: ../rules/base.xml.in.h:17 -msgid "Advance Scorpius KI" -msgstr "Advance Scorpius KI" +msgid "Acer AirKey V" +msgstr "Acer AirKey V" #: ../rules/base.xml.in.h:18 -msgid "Afghani" -msgstr "Afgano" +msgid "Azona RF2300 wireless Internet Keyboard" +msgstr "Azona RF2300 wireless Internet Keyboard" #: ../rules/base.xml.in.h:19 -msgid "Akan" -msgstr "Akan" +msgid "Advance Scorpius KI" +msgstr "Advance Scorpius KI" #: ../rules/base.xml.in.h:20 -msgid "Albanian" -msgstr "Albanés" +msgid "Brother Internet Keyboard" +msgstr "Brother Internet Keyboard" #: ../rules/base.xml.in.h:21 -msgid "Alt and Meta are on Alt keys" -msgstr "Alt y Meta están en las teclas Alt" +msgid "BTC 5113RF Multimedia" +msgstr "BTC 5113RF Multimedia" #: ../rules/base.xml.in.h:22 -msgid "Alt is mapped to Right Win, Super to Menu" -msgstr "Alt está mapeada a la tecla Windows derecho y Super a la tecla Menú" +msgid "BTC 5126T" +msgstr "BTC 5126T" #: ../rules/base.xml.in.h:23 -msgid "Alt+Caps Lock" -msgstr "Alt+Bloq Mayús" +msgid "BTC 6301URF" +msgstr "BTC 6301URF" #: ../rules/base.xml.in.h:24 -msgid "Alt+Ctrl" -msgstr "Alt+Ctrl" +msgid "BTC 9000" +msgstr "BTC 9000" #: ../rules/base.xml.in.h:25 -msgid "Alt+Shift" -msgstr "Alt+Mayús" +msgid "BTC 9000A" +msgstr "BTC 9000A" #: ../rules/base.xml.in.h:26 -msgid "Alt+Space" -msgstr "Alt+Espacio" +msgid "BTC 9001AH" +msgstr "BTC 9001AH" #: ../rules/base.xml.in.h:27 -msgid "Alt/Win key behavior" -msgstr "Comportamiento de la tecla Alt/Windows" +msgid "BTC 5090" +msgstr "BTC 5090" #: ../rules/base.xml.in.h:28 -msgid "Amharic" -msgstr "Amharico" +msgid "BTC 9019U" +msgstr "BTC 9019U" #: ../rules/base.xml.in.h:29 -msgid "Any Alt key" -msgstr "Cualquier tecla Alt" +msgid "BTC 9116U Mini Wireless Internet and Gaming" +msgstr "BTC 9116U Mini Wireless Internet and Gaming" #: ../rules/base.xml.in.h:30 -msgid "Any Win key" -msgstr "Cualquier tecla Windows" +msgid "Cherry Blue Line CyBo@rd" +msgstr "Cherry Blue Line CyBo@rd" #: ../rules/base.xml.in.h:31 -msgid "Any Win key (while pressed)" -msgstr "Cualquier tecla Windows (al pulsarla)" +msgid "Cherry CyMotion Master XPress" +msgstr "Cherry CyMotion Master XPress" #: ../rules/base.xml.in.h:32 -msgid "Apple" -msgstr "Apple" +msgid "Cherry Blue Line CyBo@rd (alternate option)" +msgstr "Cherry Blue Line CyBo@rd (opción alternativa)" #: ../rules/base.xml.in.h:33 -msgid "Apple Aluminium Keyboard (ANSI)" -msgstr "Teclado de aluminio de Apple (ANSI)" +msgid "Cherry CyBo@rd USB-Hub" +msgstr "Cherry CyBo@rd USB-Hub" #: ../rules/base.xml.in.h:34 -msgid "Apple Aluminium Keyboard (ISO)" -msgstr "Teclado de aluminio de Apple (ISO)" +msgid "Cherry CyMotion Expert" +msgstr "Cherry CyMotion Expert" #: ../rules/base.xml.in.h:35 -msgid "Apple Aluminium Keyboard (JIS)" -msgstr "Teclado de aluminio de Apple (JIS)" +msgid "Cherry B.UNLIMITED" +msgstr "Cherry B.UNLIMITED" #: ../rules/base.xml.in.h:36 -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 "Chicony Internet Keyboard" +msgstr "Chicony Internet Keyboard" #: ../rules/base.xml.in.h:37 -msgid "Apple Laptop" -msgstr "Portátil Apple" +msgid "Chicony KU-0108" +msgstr "Chicony KU-0108" #: ../rules/base.xml.in.h:38 -msgid "Arabic" -msgstr "Árabe" +msgid "Chicony KU-0420" +msgstr "Chicony KU-0420" #: ../rules/base.xml.in.h:39 -msgid "Arabic (Buckwalter)" -msgstr "Árabe (Buckwalter)" +msgid "Chicony KB-9885" +msgstr "Chicony KB-9885" #: ../rules/base.xml.in.h:40 -msgid "Arabic (Morocco)" -msgstr "Árabbe (Marruecos)" +msgid "Compaq Easy Access Keyboard" +msgstr "Compaq Easy Access Keyboard" #: ../rules/base.xml.in.h:41 -msgid "Arabic (Pakistan)" -msgstr "Árabe (Pakistán)" +msgid "Compaq Internet Keyboard (7 keys)" +msgstr "Compaq Internet Keyboard (7 teclas)" #: ../rules/base.xml.in.h:42 -msgid "Arabic (Syria)" -msgstr "Árabe (Siria)" +msgid "Compaq Internet Keyboard (13 keys)" +msgstr "Compaq Internet Keyboard (13 teclas)" #: ../rules/base.xml.in.h:43 -msgid "Arabic (azerty)" -msgstr "Árabe (azerty)" +msgid "Compaq Internet Keyboard (18 keys)" +msgstr "Compaq Internet Keyboard (18 teclas)" #: ../rules/base.xml.in.h:44 -msgid "Arabic (azerty/digits)" -msgstr "Árabe (azerty/dígitos)" +msgid "Cherry CyMotion Master Linux" +msgstr "Cherry CyMotion Master Linux" #: ../rules/base.xml.in.h:45 -msgid "Arabic (digits)" -msgstr "Árabe (dígitos)" +msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" +msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" #: ../rules/base.xml.in.h:46 -msgid "Arabic (qwerty)" -msgstr "Árabe (qwery)" +msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" +msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" #: ../rules/base.xml.in.h:47 -msgid "Arabic (qwerty/digits)" -msgstr "Árabe (qwerty/dígitos)" +msgid "Compaq iPaq Keyboard" +msgstr "Compaq iPaq Keyboard" -#: ../rules/base.xml.in.h:48 ../rules/base.extras.xml.in.h:2 -msgid "Armenian" -msgstr "Armenio" +#: ../rules/base.xml.in.h:48 +msgid "Dell" +msgstr "Dell" #: ../rules/base.xml.in.h:49 -msgid "Armenian (alternative eastern)" -msgstr "Armenio (alternativa oriental)" +msgid "Dell SK-8125" +msgstr "Dell SK-8125" #: ../rules/base.xml.in.h:50 -msgid "Armenian (alternative phonetic)" -msgstr "Armenio (alternativa fonética)" +msgid "Dell SK-8135" +msgstr "Dell SK-8135" #: ../rules/base.xml.in.h:51 -msgid "Armenian (eastern)" -msgstr "Armenio (oriental)" +msgid "Dell USB Multimedia Keyboard" +msgstr "Dell USB Multimedia Keyboard" #: ../rules/base.xml.in.h:52 -msgid "Armenian (phonetic)" -msgstr "Armenio (fonético)" +msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx" +msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx" #: ../rules/base.xml.in.h:53 -msgid "Armenian (western)" -msgstr "Armenio (occidental)" +msgid "Dell Laptop/notebook Precision M series" +msgstr "Dell Laptop/notebook Precision M series" #: ../rules/base.xml.in.h:54 -msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" -msgstr "Asturiano (español, con H de medio punto y L de medio punto)" +msgid "Dexxa Wireless Desktop Keyboard" +msgstr "Dexxa Wireless Desktop Keyboard" #: ../rules/base.xml.in.h:55 -msgid "Asus Laptop" -msgstr "Portátil Asus" +msgid "Diamond 9801 / 9802 series" +msgstr "Diamond 9801 / 9802 series" #: ../rules/base.xml.in.h:56 -msgid "At bottom left" -msgstr "En la parte inferior izquierdo" +msgid "DTK2000" +msgstr "DTK2000" #: ../rules/base.xml.in.h:57 -msgid "At left of 'A'" -msgstr "A la izquierdo de la «A»" +msgid "Ennyah DKB-1008" +msgstr "Ennyah DKB-1008" #: ../rules/base.xml.in.h:58 -msgid "Avatime" -msgstr "Avatime" +msgid "Fujitsu-Siemens Computers AMILO laptop" +msgstr "Portátil Fujitsu-Siemens Computers AMILO" #: ../rules/base.xml.in.h:59 -msgid "Azerbaijani" -msgstr "Azerbaijaní" +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:60 -msgid "Azerbaijani (Cyrillic)" -msgstr "Azerbajaní (cirílico)" +msgid "Genius Comfy KB-12e" +msgstr "Genius Comfy KB-12e" #: ../rules/base.xml.in.h:61 -msgid "Azona RF2300 wireless Internet Keyboard" -msgstr "Azona RF2300 wireless Internet Keyboard" +msgid "Genius Comfy KB-21e-Scroll" +msgstr "Genius Comfy KB-21e-Scroll" #: ../rules/base.xml.in.h:62 -msgid "BTC 5090" -msgstr "BTC 5090" +msgid "Genius KB-19e NB" +msgstr "Genius KB-19e NB" #: ../rules/base.xml.in.h:63 -msgid "BTC 5113RF Multimedia" -msgstr "BTC 5113RF Multimedia" +msgid "Genius KKB-2050HS" +msgstr "Genius KKB-2050HS" #: ../rules/base.xml.in.h:64 -msgid "BTC 5126T" -msgstr "BTC 5126T" +msgid "Gyration" +msgstr "Gyration" #: ../rules/base.xml.in.h:65 -msgid "BTC 6301URF" -msgstr "BTC 6301URF" +msgid "HTC Dream" +msgstr "HTC Dream" #: ../rules/base.xml.in.h:66 -msgid "BTC 9000" -msgstr "BTC 9000" +msgid "Kinesis" +msgstr "Kinesis" #: ../rules/base.xml.in.h:67 -msgid "BTC 9000A" -msgstr "BTC 9000A" +msgid "Logitech Generic Keyboard" +msgstr "Logitech, teclado genérico" #: ../rules/base.xml.in.h:68 -msgid "BTC 9001AH" -msgstr "BTC 9001AH" +msgid "Logitech G15 extra keys via G15daemon" +msgstr "Logitech G15 extra keys via G15daemon" #: ../rules/base.xml.in.h:69 -msgid "BTC 9019U" -msgstr "BTC 9019U" +msgid "Hewlett-Packard Internet Keyboard" +msgstr "Hewlett-Packard Internet Keyboard" #: ../rules/base.xml.in.h:70 -msgid "BTC 9116U Mini Wireless Internet and Gaming" -msgstr "BTC 9116U Mini Wireless Internet and Gaming" +msgid "Hewlett-Packard SK-250x Multimedia Keyboard" +msgstr "Hewlett-Packard SK-250x Multimedia Keyboard" #: ../rules/base.xml.in.h:71 -msgid "Backslash" -msgstr "Contrabarra" +msgid "Hewlett-Packard Omnibook XE3 GC" +msgstr "Hewlett-Packard Omnibook XE3 GC" #: ../rules/base.xml.in.h:72 -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)" +msgid "Hewlett-Packard Omnibook XE3 GF" +msgstr "Hewlett-Packard Omnibook XE3 GF" #: ../rules/base.xml.in.h:73 -msgid "Bambara" -msgstr "Bambara" +msgid "Hewlett-Packard Omnibook XT1000" +msgstr "Hewlett-Packard Omnibook XT1000" #: ../rules/base.xml.in.h:74 -msgid "Bashkirian" -msgstr "Bashkiriano" +msgid "Hewlett-Packard Pavilion dv5" +msgstr "Hewlett-Packard Pavilion dv5" #: ../rules/base.xml.in.h:75 -msgid "Belarusian" -msgstr "Bielorruso" +msgid "Hewlett-Packard Pavilion ZT11xx" +msgstr "Hewlett-Packard Pavilion ZT11xx" #: ../rules/base.xml.in.h:76 -msgid "Belarusian (Latin)" -msgstr "Bielorruso (latino)" +msgid "Hewlett-Packard Omnibook 500 FA" +msgstr "Hewlett-Packard Omnibook 500 FA" #: ../rules/base.xml.in.h:77 -msgid "Belarusian (legacy)" -msgstr "Bielorruso (heredado)" +msgid "Hewlett-Packard Omnibook 5xx" +msgstr "Hewlett-Packard Omnibook 5xx" #: ../rules/base.xml.in.h:78 -msgid "Belgian" -msgstr "Belga" +msgid "Hewlett-Packard nx9020" +msgstr "Hewlett-Packard nx9020" #: ../rules/base.xml.in.h:79 -msgid "Belgian (ISO alternate)" -msgstr "Belga (alternativa ISO)" +msgid "Hewlett-Packard Omnibook 6000/6100" +msgstr "Hewlett-Packard Omnibook 6000/6100" #: ../rules/base.xml.in.h:80 -msgid "Belgian (Sun dead keys)" -msgstr "Belga (teclas muertas de Sun)" +msgid "Honeywell Euroboard" +msgstr "Honeywell Euroboard" #: ../rules/base.xml.in.h:81 -msgid "Belgian (Wang model 724 azerty)" -msgstr "Belga (modelo azerty 724 de Wang)" +msgid "Hewlett-Packard Mini 110 Notebook" +msgstr "Hewlett-Packard Mini 110 Notebook" #: ../rules/base.xml.in.h:82 -msgid "Belgian (alternative)" -msgstr "Belga (alternativa)" +msgid "IBM Rapid Access" +msgstr "IBM Rapid Access" #: ../rules/base.xml.in.h:83 -msgid "Belgian (alternative, Sun dead keys)" -msgstr "Belga (alternativa, teclas muertas de Sun)" +msgid "IBM Rapid Access II" +msgstr "IBM Rapid Access II" #: ../rules/base.xml.in.h:84 -msgid "Belgian (alternative, latin-9 only)" -msgstr "Belga (alternativa, sólo latin-9)" +msgid "IBM ThinkPad 560Z/600/600E/A22E" +msgstr "IBM ThinkPad 560Z/600/600E/A22E" #: ../rules/base.xml.in.h:85 -msgid "Belgian (eliminate dead keys)" -msgstr "Belga (eliminar teclas muertas)" +msgid "IBM ThinkPad R60/T60/R61/T61" +msgstr "IBM ThinkPad R60/T60/R61/T61" #: ../rules/base.xml.in.h:86 -msgid "BenQ X-Touch" -msgstr "BenQ X-Touch" +msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" #: ../rules/base.xml.in.h:87 -msgid "BenQ X-Touch 730" -msgstr "BenQ X-Touch 730" +msgid "IBM Space Saver" +msgstr "IBM Space Saver" #: ../rules/base.xml.in.h:88 -msgid "BenQ X-Touch 800" -msgstr "BenQ X-Touch 800" +msgid "Logitech Access Keyboard" +msgstr "Logitech Access Keyboard" #: ../rules/base.xml.in.h:89 -msgid "Bengali" -msgstr "Bengalí" +msgid "Logitech Cordless Desktop LX-300" +msgstr "Logitech Cordless Desktop LX-300" #: ../rules/base.xml.in.h:90 -msgid "Bengali (Baishakhi Inscript)" -msgstr "Bengalí (Inscript Baishakhi)" +msgid "Logitech Internet 350 Keyboard" +msgstr "Logitech Internet 350 Keyboard" #: ../rules/base.xml.in.h:91 -msgid "Bengali (Baishakhi)" -msgstr "Bengalí (Baishakhi)" +msgid "Logitech Media Elite Keyboard" +msgstr "Logitech Media Elite Keyboard" #: ../rules/base.xml.in.h:92 -msgid "Bengali (Bornona)" -msgstr "Bengalí (Bornona)" +msgid "Logitech Cordless Desktop" +msgstr "Logitech Cordless Desktop" #: ../rules/base.xml.in.h:93 -msgid "Bengali (Probhat)" -msgstr "Bengalí (Probhat)" +msgid "Logitech Cordless Desktop iTouch" +msgstr "Logitech Cordless Desktop iTouch" #: ../rules/base.xml.in.h:94 -msgid "Bengali (Uni Gitanjali)" -msgstr "Bengalí (Uni Gitanjali)" +msgid "Logitech Cordless Desktop Navigator" +msgstr "Logitech Cordless Desktop Navigator" #: ../rules/base.xml.in.h:95 -msgid "Berber (Morocco, Tifinagh alternative phonetic)" -msgstr "Bereber (Marruecos, alternativa fonética tifinagh)" +msgid "Logitech Cordless Desktop Optical" +msgstr "Logitech Cordless Desktop Optical" #: ../rules/base.xml.in.h:96 -msgid "Berber (Morocco, Tifinagh alternative)" -msgstr "Bereber (Marruecos, alternativa tifinagh)" +msgid "Logitech Cordless Desktop (alternate option)" +msgstr "Logitech Cordless Desktop Pro (opción alternativa)" #: ../rules/base.xml.in.h:97 -msgid "Berber (Morocco, Tifinagh extended phonetic)" -msgstr "Bereber (Marruecos, tifinagh fonético extendido)" +msgid "Logitech Cordless Desktop Pro (alternate option 2)" +msgstr "Logitech Cordless Desktop Pro (opción alternativa 2)" #: ../rules/base.xml.in.h:98 -msgid "Berber (Morocco, Tifinagh extended)" -msgstr "Bereber (Marruecos, tifinagh extendido)" +msgid "Logitech Cordless Freedom/Desktop Navigator" +msgstr "Logitech Cordless Freedom/Desktop Navigator" #: ../rules/base.xml.in.h:99 -msgid "Berber (Morocco, Tifinagh phonetic)" -msgstr "Bereber (Marruecos, tifinagh fonético)" +msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)" +msgstr "Logitech iTouch Cordless Keyboard (modelo Y-RB6)" #: ../rules/base.xml.in.h:100 -msgid "Berber (Morocco, Tifinagh)" -msgstr "Bereber (Marruecos, Tifinagh)" +msgid "Logitech Internet Keyboard" +msgstr "Logitech Internet Keyboard" #: ../rules/base.xml.in.h:101 -msgid "Bosnian" -msgstr "Bosnio" +msgid "Logitech iTouch" +msgstr "Logitech iTouch" #: ../rules/base.xml.in.h:102 -msgid "Bosnian (US keyboard with Bosnian digraphs)" -msgstr "Bosnio (teclado de EE. UU. con dígrafos bosnios)" +msgid "Logitech Internet Navigator Keyboard" +msgstr "Logitech Internet Navigator Keyboard" #: ../rules/base.xml.in.h:103 -msgid "Bosnian (US keyboard with Bosnian letters)" -msgstr "Bosnio (teclado de EE. UU. con letras bosnias)" +msgid "Logitech Cordless Desktop EX110" +msgstr "Logitech Cordless Desktop EX110" #: ../rules/base.xml.in.h:104 -msgid "Bosnian (use Bosnian digraphs)" -msgstr "Bosnio (usar dígrafos bosnios)" +msgid "Logitech iTouch Internet Navigator Keyboard SE" +msgstr "Logitech iTouch Internet Navigator Keyboard SE" #: ../rules/base.xml.in.h:105 -msgid "Bosnian (use guillemets for quotes)" -msgstr "Bosnio (usar guillemots para comillas)" +msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)" +msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)" #: ../rules/base.xml.in.h:106 -msgid "Both Alt keys together" -msgstr "Ambas teclas Alt juntas" +msgid "Logitech Ultra-X Keyboard" +msgstr "Logitech Ultra-X Keyboard" #: ../rules/base.xml.in.h:107 -msgid "Both Ctrl keys together" -msgstr "Ambas teclas Ctrl juntas" +msgid "Logitech Ultra-X Cordless Media Desktop Keyboard" +msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard" #: ../rules/base.xml.in.h:108 -msgid "Both Shift keys together" -msgstr "Ambas teclas Mayús juntas" +msgid "Logitech diNovo Keyboard" +msgstr "Logitech diNovo Keyboard" #: ../rules/base.xml.in.h:109 -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" +msgid "Logitech diNovo Edge Keyboard" +msgstr "Logitech diNovo Edge Keyboard" #: ../rules/base.xml.in.h:110 -msgid "Both Shift-Keys together toggle Caps Lock" -msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús" +msgid "Memorex MX1998" +msgstr "Memorex MX1998" #: ../rules/base.xml.in.h:111 -msgid "Both Shift-Keys together toggle ShiftLock" -msgstr "Ambas teclas Mayús juntas conmutan Bloq Despl" +msgid "Memorex MX2500 EZ-Access Keyboard" +msgstr "Memorex MX2500 EZ-Access Keyboard" #: ../rules/base.xml.in.h:112 -msgid "Braille" -msgstr "Braille" +msgid "Memorex MX2750" +msgstr "Memorex MX2750" #: ../rules/base.xml.in.h:113 -msgid "Braille (left hand)" -msgstr "Braille (zurdo)" +msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000" +msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000" #: ../rules/base.xml.in.h:114 -msgid "Braille (right hand)" -msgstr "Braille (diestro)" +msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000" +msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000" #: ../rules/base.xml.in.h:115 -msgid "Brother Internet Keyboard" -msgstr "Brother Internet Keyboard" +msgid "Microsoft Internet Keyboard" +msgstr "Microsoft Internet Keyboard" #: ../rules/base.xml.in.h:116 -msgid "Bulgarian" -msgstr "Búlgaro" +msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" +msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" #: ../rules/base.xml.in.h:117 -msgid "Bulgarian (new phonetic)" -msgstr "Búlgaro (fonética nueva)" +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:118 -msgid "Bulgarian (traditional phonetic)" -msgstr "Búlgaro (fonética tradicional)" +msgid "Microsoft Natural Keyboard Pro OEM" +msgstr "Microsoft Natural Keyboard Pro OEM" #: ../rules/base.xml.in.h:119 -msgid "Burmese" -msgstr "Burmese" +msgid "ViewSonic KU-306 Internet Keyboard" +msgstr "Teclado para internet ViewSonic KU-306" #: ../rules/base.xml.in.h:120 -msgid "Cameroon Multilingual (azerty)" -msgstr "Camerunés multilingüe (azerty)" +msgid "Microsoft Internet Keyboard Pro, Swedish" +msgstr "Microsoft Internet Keyboard Pro, sueco" #: ../rules/base.xml.in.h:121 -msgid "Cameroon Multilingual (qwerty)" -msgstr "Camerunés multilingüe (qwerty)" +msgid "Microsoft Office Keyboard" +msgstr "Microsoft Office Keyboard" #: ../rules/base.xml.in.h:122 -msgid "Canadian Multilingual" -msgstr "Canadiense multilingüe" +msgid "Microsoft Wireless Multimedia Keyboard 1.0A" +msgstr "Microsoft Wireless Multimedia Keyboard 1.0A" #: ../rules/base.xml.in.h:123 -msgid "Canadian Multilingual (first part)" -msgstr "Canadiense multilingüe (primera parte)" +msgid "Microsoft Natural Keyboard Elite" +msgstr "Microsoft Natural Keyboard Elite" #: ../rules/base.xml.in.h:124 -msgid "Canadian Multilingual (second part)" -msgstr "Canadiense multilingüe (segunda parte)" +msgid "Microsoft Comfort Curve Keyboard 2000" +msgstr "Microsoft Comfort Curve Keyboard 2000" #: ../rules/base.xml.in.h:125 -msgid "Caps Lock" -msgstr "Bloqueo de mayúsculas" +msgid "Ortek MCK-800 MM/Internet keyboard" +msgstr "Teclado Oretec MCK-800 MM/Internet" #: ../rules/base.xml.in.h:126 -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)" +msgid "Propeller Voyager (KTEZ-1000)" +msgstr "Propeller Voyager (KTEZ-1000)" #: ../rules/base.xml.in.h:127 -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 "QTronix Scorpius 98N+" +msgstr "QTronix Scorpius 98N+" #: ../rules/base.xml.in.h:128 -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 "Samsung SDM 4500P" +msgstr "Samsung SDM 4500P" #: ../rules/base.xml.in.h:129 -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 "Samsung SDM 4510P" +msgstr "Samsung SDM 4510P" #: ../rules/base.xml.in.h:130 -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 "Sanwa Supply SKB-KG3" +msgstr "Sanwa Supply SKB-KG3" #: ../rules/base.xml.in.h:131 -msgid "Caps Lock as Ctrl" -msgstr "Bloq Mayús como Ctrl" +msgid "SK-1300" +msgstr "SK-1300" #: ../rules/base.xml.in.h:132 -msgid "Caps Lock is disabled" -msgstr "Bloq Mayús está desactivado" +msgid "SK-2500" +msgstr "SK-2500" #: ../rules/base.xml.in.h:133 -msgid "Caps Lock key behavior" -msgstr "Comportamiento de Bloq Mayús" +msgid "SK-6200" +msgstr "SK-6200" #: ../rules/base.xml.in.h:134 -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 "SK-7100" +msgstr "SK-7100" #: ../rules/base.xml.in.h:135 -msgid "Caps Lock toggles normal capitalization of alphabetic characters" -msgstr "Bloq Mayús cambia la capitalización normal de los caracteres alfabéticos" +msgid "Super Power Multimedia Keyboard" +msgstr "Super Power Multimedia Keyboard" #: ../rules/base.xml.in.h:136 -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 "SVEN Ergonomic 2500" +msgstr "SVEN Ergonomic 2500" #: ../rules/base.xml.in.h:137 -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 "SVEN Slim 303" +msgstr "SVEN Slim 303" #: ../rules/base.xml.in.h:138 -msgid "Catalan" -msgstr "Catalán" +msgid "Symplon PaceBook (tablet PC)" +msgstr "Symplon PaceBook (tablet PC)" #: ../rules/base.xml.in.h:139 -msgid "Catalan (Spain, with middle-dot L)" -msgstr "Catalán (español, con L de medio punto)" +msgid "Toshiba Satellite S3000" +msgstr "Toshiba Satellite S3000" #: ../rules/base.xml.in.h:140 -msgid "Cherokee" -msgstr "Cherokee" +msgid "Trust Wireless Keyboard Classic" +msgstr "Trust Wireless Keyboard Classic" #: ../rules/base.xml.in.h:141 -msgid "Cherry B.UNLIMITED" -msgstr "Cherry B.UNLIMITED" +msgid "Trust Direct Access Keyboard" +msgstr "Trust Direct Access Keyboard" #: ../rules/base.xml.in.h:142 -msgid "Cherry Blue Line CyBo@rd" -msgstr "Cherry Blue Line CyBo@rd" +msgid "Trust Slimline" +msgstr "Trust Slimline" #: ../rules/base.xml.in.h:143 -msgid "Cherry Blue Line CyBo@rd (alternate option)" -msgstr "Cherry Blue Line CyBo@rd (opción alternativa)" +msgid "TypeMatrix EZ-Reach 2020" +msgstr "TypeMatrix EZ-Reach 2020" #: ../rules/base.xml.in.h:144 -msgid "Cherry CyBo@rd USB-Hub" -msgstr "Cherry CyBo@rd USB-Hub" +msgid "TypeMatrix EZ-Reach 2030 PS2" +msgstr "TypeMatrix EZ-Reach 2030 PS2" #: ../rules/base.xml.in.h:145 -msgid "Cherry CyMotion Expert" -msgstr "Cherry CyMotion Expert" +msgid "TypeMatrix EZ-Reach 2030 USB" +msgstr "TypeMatrix EZ-Reach 2030 USB" #: ../rules/base.xml.in.h:146 -msgid "Cherry CyMotion Master Linux" -msgstr "Cherry CyMotion Master Linux" +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:147 -msgid "Cherry CyMotion Master XPress" -msgstr "Cherry CyMotion Master XPress" +msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" +msgstr "TypeMatrix EZ-Reach 2030 USB (106:modo JP)" #: ../rules/base.xml.in.h:148 -msgid "Chicony Internet Keyboard" -msgstr "Chicony Internet Keyboard" +msgid "Yahoo! Internet Keyboard" +msgstr "Yahoo! Internet Keyboard" #: ../rules/base.xml.in.h:149 -msgid "Chicony KB-9885" -msgstr "Chicony KB-9885" +msgid "MacBook/MacBook Pro" +msgstr "MacBook/MacBook Pro" #: ../rules/base.xml.in.h:150 -msgid "Chicony KU-0108" -msgstr "Chicony KU-0108" +msgid "MacBook/MacBook Pro (Intl)" +msgstr "MacBook/MacBook Pro (Intl)" #: ../rules/base.xml.in.h:151 -msgid "Chicony KU-0420" -msgstr "Chicony KU-0420" +msgid "Macintosh" +msgstr "Macintosh" #: ../rules/base.xml.in.h:152 -msgid "Chinese" -msgstr "Chino" +msgid "Macintosh Old" +msgstr "Macintosh antiguo" #: ../rules/base.xml.in.h:153 -msgid "Chuvash" -msgstr "Chuvash" +msgid "Happy Hacking Keyboard for Mac" +msgstr "Happy Hacking Keyboard para Mac" #: ../rules/base.xml.in.h:154 -msgid "Chuvash (Latin)" -msgstr "Cuvash (latino)" +msgid "Acer C300" +msgstr "Acer C300" #: ../rules/base.xml.in.h:155 -msgid "Classmate PC" -msgstr "Classmate PC" +msgid "Acer Ferrari 4000" +msgstr "Acer Ferrari 4000" #: ../rules/base.xml.in.h:156 -msgid "CloGaelach" -msgstr "Cló Gaelach" +msgid "Acer Laptop" +msgstr "Portátil Acer" #: ../rules/base.xml.in.h:157 -msgid "Compaq Easy Access Keyboard" -msgstr "Compaq Easy Access Keyboard" +msgid "Asus Laptop" +msgstr "Portátil Asus" #: ../rules/base.xml.in.h:158 -msgid "Compaq Internet Keyboard (13 keys)" -msgstr "Compaq Internet Keyboard (13 teclas)" +msgid "Apple" +msgstr "Apple" #: ../rules/base.xml.in.h:159 -msgid "Compaq Internet Keyboard (18 keys)" -msgstr "Compaq Internet Keyboard (18 teclas)" +msgid "Apple Laptop" +msgstr "Portátil Apple" #: ../rules/base.xml.in.h:160 -msgid "Compaq Internet Keyboard (7 keys)" -msgstr "Compaq Internet Keyboard (7 teclas)" +msgid "Apple Aluminium Keyboard (ANSI)" +msgstr "Teclado de aluminio de Apple (ANSI)" #: ../rules/base.xml.in.h:161 -msgid "Compaq iPaq Keyboard" -msgstr "Compaq iPaq Keyboard" +msgid "Apple Aluminium Keyboard (ISO)" +msgstr "Teclado de aluminio de Apple (ISO)" #: ../rules/base.xml.in.h:162 -msgid "Compose key position" -msgstr "Posición de la tecla Componer" +msgid "Apple Aluminium Keyboard (JIS)" +msgstr "Teclado de aluminio de Apple (JIS)" #: ../rules/base.xml.in.h:163 -msgid "Control + Alt + Backspace" -msgstr "Control + Alt + Retroceso" +msgid "SILVERCREST Multimedia Wireless Keyboard" +msgstr "SILVERCREST Multimedia Wireless Keyboard" #: ../rules/base.xml.in.h:164 -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 "Laptop/notebook eMachines m68xx" +msgstr "Laptop/notebook eMachines m68xx" #: ../rules/base.xml.in.h:165 -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 "BenQ X-Touch" +msgstr "BenQ X-Touch" #: ../rules/base.xml.in.h:166 -msgid "Creative Desktop Wireless 7000" -msgstr "Creative Desktop Wireless 7000" +msgid "BenQ X-Touch 730" +msgstr "BenQ X-Touch 730" #: ../rules/base.xml.in.h:167 -msgid "Crimean Tatar (Turkish Alt-Q)" -msgstr "Tártaro de Crimea (turco Alt-Q)" +msgid "BenQ X-Touch 800" +msgstr "BenQ X-Touch 800" #: ../rules/base.xml.in.h:168 -msgid "Crimean Tatar (Turkish F)" -msgstr "Tártaro de Crimea (F turca)" +msgid "Happy Hacking Keyboard" +msgstr "Happy Hacking Keyboard" #: ../rules/base.xml.in.h:169 -msgid "Crimean Tatar (Turkish Q)" -msgstr "Tártaro de Crimea (Q turca)" +msgid "Classmate PC" +msgstr "Classmate PC" #: ../rules/base.xml.in.h:170 -msgid "Croatian" -msgstr "Croata" +msgid "OLPC" +msgstr "OLPC" #: ../rules/base.xml.in.h:171 -msgid "Croatian (US keyboard with Croatian digraphs)" -msgstr "Croata (teclado de EE. UU. con dígrafos croatas)" +msgid "Sun Type 7 USB" +msgstr "Sun tipo 7 USB" #: ../rules/base.xml.in.h:172 -msgid "Croatian (US keyboard with Croatian letters)" -msgstr "Croata (teclado de EE. UU. con letras croatas)" +msgid "Sun Type 7 USB (European layout)" +msgstr "Sun tipo 7 USB (Distribución Europea)" #: ../rules/base.xml.in.h:173 -msgid "Croatian (use Croatian digraphs)" -msgstr "Croata (usar dígrafos croatas)" +msgid "Sun Type 7 USB (Unix layout)" +msgstr "Sun tipo 7 USB (Distribución Unix)" #: ../rules/base.xml.in.h:174 -msgid "Croatian (use guillemets for quotes)" -msgstr "Croata (usar guillemots para comillas)" +msgid "Sun Type 7 USB (Japanese layout) / Japanese 106-key" +msgstr "Sun tipo 7 USB (Distribución Japonesa) / Japonesa 106 teclas" #: ../rules/base.xml.in.h:175 -msgid "Ctrl key position" -msgstr "Posición de la tecla Ctrl" +msgid "Sun Type 6/7 USB" +msgstr "Sun tipo 6/7 USB" #: ../rules/base.xml.in.h:176 -msgid "Ctrl+Shift" -msgstr "Ctrl+Mayús" +msgid "Sun Type 6/7 USB (European layout)" +msgstr "Sun tipo 6/7 USB (Distribución Europea)" #: ../rules/base.xml.in.h:177 -msgid "Czech" -msgstr "Checo" +msgid "Sun Type 6 USB (Unix layout)" +msgstr "Sun tipo 6 USB (Distribución Unix)" #: ../rules/base.xml.in.h:178 -msgid "Czech (UCW layout, accented letters only)" -msgstr "Checo (distribución UCW, sólo teclas con tilde)" +msgid "Sun Type 6 USB (Japanese layout)" +msgstr "Sun tipo 6 USB (Distribución Japonesa)" #: ../rules/base.xml.in.h:179 -msgid "Czech (US Dvorak with CZ UCW support)" -msgstr "Checo (teclado Dvorak EE. UU. con soporte para UCW checo)" +msgid "Sun Type 6 (Japanese layout)" +msgstr "Sun tipo 6 (Distribución Japonesa)" #: ../rules/base.xml.in.h:180 -msgid "Czech (qwerty)" -msgstr "Checo (qwery)" +msgid "Targa Visionary 811" +msgstr "Targa Visionary 811" #: ../rules/base.xml.in.h:181 -msgid "Czech (qwerty, extended Backslash)" -msgstr "Checo (qwerty, contrabarra extendida)" +msgid "Unitek KB-1925" +msgstr "Unitek KB-1925" #: ../rules/base.xml.in.h:182 -msgid "Czech (with <\\|> key)" -msgstr "Checo (con tecla «\\|»)" +msgid "FL90" +msgstr "FL90" #: ../rules/base.xml.in.h:183 -msgid "DTK2000" -msgstr "DTK2000" +msgid "Creative Desktop Wireless 7000" +msgstr "Creative Desktop Wireless 7000" #: ../rules/base.xml.in.h:184 -msgid "Danish" -msgstr "Danés" - -#: ../rules/base.xml.in.h:185 -msgid "Danish (Dvorak)" -msgstr "Danés (Dvorak)" - -#: ../rules/base.xml.in.h:186 -msgid "Danish (Macintosh)" -msgstr "Danés (Macintosh)" +msgid "Htc Dream phone" +msgstr "Teléfono HTC Dream" -#: ../rules/base.xml.in.h:187 -msgid "Danish (Macintosh, eliminate dead keys)" -msgstr "Danés (Macintosh, eliminar teclas muertas)" +#. Keyboard indicator for English layouts +#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:33 +msgid "en" +msgstr "en" -#: ../rules/base.xml.in.h:188 -msgid "Danish (eliminate dead keys)" -msgstr "Danés (eliminar teclas muertas)" +#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:34 +msgid "English (US)" +msgstr "Inglés (EE. UU.)" +#. Keyboard indicator for Cherokee layouts #: ../rules/base.xml.in.h:189 -msgid "Default numeric keypad keys" -msgstr "Teclas del teclado numérico predeterminado" +msgid "chr" +msgstr "chr" #: ../rules/base.xml.in.h:190 -msgid "Dell" -msgstr "Dell" +msgid "Cherokee" +msgstr "Cherokee" #: ../rules/base.xml.in.h:191 -msgid "Dell 101-key PC" -msgstr "Dell PC 101 teclas" +msgid "English (US, with euro on 5)" +msgstr "Inglés (EE. UU. con euro en el 5)" #: ../rules/base.xml.in.h:192 -msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx" -msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx" +msgid "English (US, international with dead keys)" +msgstr "Inglés (EE. UU. internacional con teclas muertas)" #: ../rules/base.xml.in.h:193 -msgid "Dell Laptop/notebook Precision M series" -msgstr "Dell Laptop/notebook Precision M series" +msgid "English (US, alternative international)" +msgstr "Inglés (EE. UU. alternativo internacional)" #: ../rules/base.xml.in.h:194 -msgid "Dell Latitude series laptop" -msgstr "Portátil Dell Latitude" +msgid "English (Colemak)" +msgstr "Inglés (Colemak)" #: ../rules/base.xml.in.h:195 -msgid "Dell Precision M65" -msgstr "Dell Precision M65" +msgid "English (Dvorak)" +msgstr "Inglés (Dvorak)" #: ../rules/base.xml.in.h:196 -msgid "Dell SK-8125" -msgstr "Dell SK-8125" +msgid "English (Dvorak, international with dead keys)" +msgstr "Inglés (Dvorak, internacional con teclas muertas)" #: ../rules/base.xml.in.h:197 -msgid "Dell SK-8135" -msgstr "Dell SK-8135" +msgid "English (Dvorak alternative international no dead keys)" +msgstr "Inglés (alternativo Dvorak internacional sin teclas muertas)" #: ../rules/base.xml.in.h:198 -msgid "Dell USB Multimedia Keyboard" -msgstr "Dell USB Multimedia Keyboard" +msgid "English (left handed Dvorak)" +msgstr "Inglés (Dvorak para zurdos)" #: ../rules/base.xml.in.h:199 -msgid "Dexxa Wireless Desktop Keyboard" -msgstr "Dexxa Wireless Desktop Keyboard" +msgid "English (right handed Dvorak)" +msgstr "Inglés (Dvorak para diestros)" #: ../rules/base.xml.in.h:200 -msgid "Dhivehi" -msgstr "Dhivehi" +msgid "English (classic Dvorak)" +msgstr "Inglés (Dvorak clásico)" #: ../rules/base.xml.in.h:201 -msgid "Diamond 9801 / 9802 series" -msgstr "Diamond 9801 / 9802 series" - -#: ../rules/base.xml.in.h:202 -msgid "Dutch" -msgstr "Holandés" +msgid "English (programmer Dvorak)" +msgstr "Inglés (Dvorak de programador)" -#: ../rules/base.xml.in.h:203 -msgid "Dutch (Macintosh)" -msgstr "Holandés (Macintosh)" +#. Keyboard indicator for Russian layouts +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 +msgid "ru" +msgstr "ru" #: ../rules/base.xml.in.h:204 -msgid "Dutch (Sun dead keys)" -msgstr "Holandés (teclas muertas de Sun)" +msgid "Russian (US, phonetic)" +msgstr "Ruso (EE. UU., fonético)" #: ../rules/base.xml.in.h:205 -msgid "Dutch (standard)" -msgstr "Holandés (estándar)" +msgid "English (Macintosh)" +msgstr "Inglés (Macintosh)" #: ../rules/base.xml.in.h:206 -msgid "Dzongkha" -msgstr "Dzongkha" +msgid "English (international AltGr dead keys)" +msgstr "Inglés (internacional con teclas muertas por AltGr)" #: ../rules/base.xml.in.h:207 -msgid "Enable extra typographic characters" -msgstr "Activar caracteres tipográficos adicionales" +msgid "English (the divide/multiply keys toggle the layout)" +msgstr "Inglés (las teclas dividir/multiplicar cambian la distribución)" #: ../rules/base.xml.in.h:208 -msgid "English (Cameroon Dvorak)" -msgstr "Inglés (Dvorak de Camerún)" +msgid "Serbo-Croatian (US)" +msgstr "Serbocroata (EE. UU.)" #: ../rules/base.xml.in.h:209 -msgid "English (Cameroon)" -msgstr "Inglés (Camerún)" +msgid "English (Workman)" +msgstr "Inglés (Workman)" #: ../rules/base.xml.in.h:210 -msgid "English (Canada)" -msgstr "Inglés (Canadá)" - -#: ../rules/base.xml.in.h:211 -msgid "English (Colemak)" -msgstr "Inglés (Colemark)" +msgid "English (Workman, international with dead keys)" +msgstr "Inglés (Workman, internacional con teclas muertas)" -#: ../rules/base.xml.in.h:212 -msgid "English (Dvorak alternative international no dead keys)" -msgstr "Inglés (alternativa Dvorak internacional sin teclas muertas)" +#. Keyboard indicator for Persian layouts +#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:15 +msgid "fa" +msgstr "fa" #: ../rules/base.xml.in.h:213 -msgid "English (Dvorak international with dead keys)" -msgstr "Inglés (Dvorak internacional con teclas muertas)" - -#: ../rules/base.xml.in.h:214 -msgid "English (Dvorak)" -msgstr "Inglés (Dvorak)" +msgid "Afghani" +msgstr "Afgano" +#. Keyboard indicator for Pashto layouts #: ../rules/base.xml.in.h:215 -msgid "English (Ghana)" -msgstr "Inglés (Ghana)" +msgid "ps" +msgstr "ps" #: ../rules/base.xml.in.h:216 -msgid "English (Ghana, GILLBT)" -msgstr "Inglés (Ghana, GILLBT)" - -#: ../rules/base.xml.in.h:217 -msgid "English (Ghana, multilingual)" -msgstr "Inglés (Ghana, multilingue)" +msgid "Pashto" +msgstr "Pashto" +#. Keyboard indicator for Uzbek layouts #: ../rules/base.xml.in.h:218 -msgid "English (India, with RupeeSign)" -msgstr "Inglés (India, con signo de rupia)" +msgid "uz" +msgstr "uz" #: ../rules/base.xml.in.h:219 -msgid "English (Macintosh)" -msgstr "Inglés (Macintosh)" +msgid "Uzbek (Afghanistan)" +msgstr "Uzbeco (Afganistán)" #: ../rules/base.xml.in.h:220 -msgid "English (Mali, US Macintosh)" -msgstr "Inglés (Malí, Macintosh de EE. UU.)" +msgid "Pashto (Afghanistan, OLPC)" +msgstr "Pashto (Afganistán, OLPC)" #: ../rules/base.xml.in.h:221 -msgid "English (Mali, US international)" -msgstr "Inglés (Malí, EE. UU. internacional)" +msgid "Persian (Afghanistan, Dari OLPC)" +msgstr "Persa (Afganistán, OLPC dari)" #: ../rules/base.xml.in.h:222 -msgid "English (Nigeria)" -msgstr "Inglés (Nigeria)" - -#: ../rules/base.xml.in.h:223 -msgid "English (South Africa)" -msgstr "Inglés (Sudáfrica)" +msgid "Uzbek (Afghanistan, OLPC)" +msgstr "Uzbeco (Afganistán, OLPC)" -#: ../rules/base.xml.in.h:224 -msgid "English (UK)" -msgstr "Inglés (RU)" +#. Keyboard indicator for Arabic layouts +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 +msgid "ar" +msgstr "ar" -#: ../rules/base.xml.in.h:225 -msgid "English (UK, Colemak)" -msgstr "Inglés (RU, Colemark)" +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 +msgid "Arabic" +msgstr "Árabe" #: ../rules/base.xml.in.h:226 -msgid "English (UK, Dvorak with UK punctuation)" -msgstr "Inglés (RU, Dvorak con puntuación para RU)" +msgid "Arabic (azerty)" +msgstr "Árabe (azerty)" #: ../rules/base.xml.in.h:227 -msgid "English (UK, Dvorak)" -msgstr "Inglés (RU, Dvorak)" +msgid "Arabic (azerty/digits)" +msgstr "Árabe (azerty/dígitos)" #: ../rules/base.xml.in.h:228 -msgid "English (UK, Macintosh international)" -msgstr "Inglés (RU, Macintosh internacional)" +msgid "Arabic (digits)" +msgstr "Árabe (dígitos)" #: ../rules/base.xml.in.h:229 -msgid "English (UK, Macintosh)" -msgstr "Inglés (RU, Macintosh)" +msgid "Arabic (qwerty)" +msgstr "Árabe (qwery)" #: ../rules/base.xml.in.h:230 -msgid "English (UK, extended WinKeys)" -msgstr "Inglés (RU, extendido con teclas Windows)" +msgid "Arabic (qwerty/digits)" +msgstr "Árabe (qwerty/dígitos)" #: ../rules/base.xml.in.h:231 -msgid "English (UK, international with dead keys)" -msgstr "Inglés (RU, internacional con teclas muertas)" - -#: ../rules/base.xml.in.h:232 ../rules/base.extras.xml.in.h:8 -msgid "English (US)" -msgstr "Inglés (EE. UU.)" +msgid "Arabic (Buckwalter)" +msgstr "Árabe (Buckwalter)" +#. Keyboard indicator for Albanian layouts #: ../rules/base.xml.in.h:233 -msgid "English (US, alternative international)" -msgstr "Inglés (EE. UU. alternativa internacional)" +msgid "sq" +msgstr "sq" #: ../rules/base.xml.in.h:234 -msgid "English (US, international with dead keys)" -msgstr "Inglés (EE. UU. internacional con teclas muertas)" - -#: ../rules/base.xml.in.h:235 -msgid "English (US, with euro on 5)" -msgstr "Inglés (EE. UU. con euro en el 5)" +msgid "Albanian" +msgstr "Albanés" -#: ../rules/base.xml.in.h:236 -msgid "English (classic Dvorak)" -msgstr "Inglés (Dvorak clásico)" +#. Keyboard indicator for Armenian layouts +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 +msgid "hy" +msgstr "hy" -#: ../rules/base.xml.in.h:237 -msgid "English (international AltGr dead keys)" -msgstr "Inglés (internacional con teclas muertas Alt Gr)" +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 +msgid "Armenian" +msgstr "Armenio" #: ../rules/base.xml.in.h:238 -msgid "English (layout toggle on multiply/divide key)" -msgstr "Inglés (cambio de distribución en la tecla multiplicar/dividir)" +msgid "Armenian (phonetic)" +msgstr "Armenio (fonético)" #: ../rules/base.xml.in.h:239 -msgid "English (left handed Dvorak)" -msgstr "Inglés (Dvorak para zurdos)" +msgid "Armenian (alternative phonetic)" +msgstr "Armenio (alternativo fonético)" #: ../rules/base.xml.in.h:240 -msgid "English (programmer Dvorak)" -msgstr "Inglés (Dvorak de programador)" +msgid "Armenian (eastern)" +msgstr "Armenio (oriental)" #: ../rules/base.xml.in.h:241 -msgid "English (right handed Dvorak)" -msgstr "Inglés (Dvorak para diestros)" +msgid "Armenian (western)" +msgstr "Armenio (occidental)" #: ../rules/base.xml.in.h:242 -msgid "Ennyah DKB-1008" -msgstr "Ennyah DKB-1008" - -#: ../rules/base.xml.in.h:243 -msgid "Enter on keypad" -msgstr "Intro en el teclado numérico" +msgid "Armenian (alternative eastern)" +msgstr "Armenio (alternativo oriental)" -#: ../rules/base.xml.in.h:244 -msgid "Esperanto" -msgstr "Esperanto" +#. Keyboard indicator for German layouts +#: ../rules/base.xml.in.h:244 ../rules/base.extras.xml.in.h:10 +msgid "de" +msgstr "de" #: ../rules/base.xml.in.h:245 -msgid "Esperanto (Portugal, Nativo)" -msgstr "Esperanto (Portugal, Nativo)" +msgid "German (Austria)" +msgstr "Alemán (Austria)" #: ../rules/base.xml.in.h:246 -msgid "Esperanto (displaced semicolon and quote, obsolete)" -msgstr "Estonio (punto y coma y comilla desplazadas, obsoleto)" +msgid "German (Austria, eliminate dead keys)" +msgstr "Alemán (Austria, eliminar teclas muertas)" #: ../rules/base.xml.in.h:247 -msgid "Estonian" -msgstr "Estonio" +msgid "German (Austria, Sun dead keys)" +msgstr "Alemán (Austria, teclas muertas de Sun)" #: ../rules/base.xml.in.h:248 -msgid "Estonian (Dvorak)" -msgstr "Estonio (Dvorak)" - -#: ../rules/base.xml.in.h:249 -msgid "Estonian (US keyboard with Estonian letters)" -msgstr "Estonio (teclado EE. UU. con letras estonias)" +msgid "German (Austria, Macintosh)" +msgstr "Alemán (Austria, Macintosh)" +#. Keyboard indicator for Azerbaijani layouts #: ../rules/base.xml.in.h:250 -msgid "Estonian (eliminate dead keys)" -msgstr "Estonio (eliminar teclas muertas)" +msgid "az" +msgstr "az" #: ../rules/base.xml.in.h:251 -msgid "Euro on 2" -msgstr "Euro en el 2" +msgid "Azerbaijani" +msgstr "Azerbaijaní" #: ../rules/base.xml.in.h:252 -msgid "Euro on 4" -msgstr "Euro en el 4" - -#: ../rules/base.xml.in.h:253 -msgid "Euro on 5" -msgstr "Euro en el 5" +msgid "Azerbaijani (Cyrillic)" +msgstr "Azerbajaní (cirílico)" +#. Keyboard indicator for Belarusian layouts #: ../rules/base.xml.in.h:254 -msgid "Euro on E" -msgstr "Euro en la E" +msgid "by" +msgstr "by" #: ../rules/base.xml.in.h:255 -msgid "Everex STEPnote" -msgstr "Everex STEPnote" +msgid "Belarusian" +msgstr "Bielorruso" #: ../rules/base.xml.in.h:256 -msgid "Ewe" -msgstr "Ewe" +msgid "Belarusian (legacy)" +msgstr "Bielorruso (arcaico)" #: ../rules/base.xml.in.h:257 -msgid "FL90" -msgstr "FL90" - -#: ../rules/base.xml.in.h:258 -msgid "Faroese" -msgstr "Faroés" +msgid "Belarusian (Latin)" +msgstr "Bielorruso (latino)" -#: ../rules/base.xml.in.h:259 -msgid "Faroese (eliminate dead keys)" -msgstr "Faroés (eliminar teclas muertas)" +#. Keyboard indicator for Belgian layouts +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 +msgid "be" +msgstr "be" -#: ../rules/base.xml.in.h:260 -msgid "Filipino" -msgstr "Filipino" +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 +msgid "Belgian" +msgstr "Belga" #: ../rules/base.xml.in.h:261 -msgid "Filipino (Capewell-Dvorak Baybayin)" -msgstr "Filipino (Capewell-Dvorak baybayin)" +msgid "Belgian (alternative)" +msgstr "Belga (alternativo)" #: ../rules/base.xml.in.h:262 -msgid "Filipino (Capewell-Dvorak Latin)" -msgstr "Filipino (Capewell-Dvorak latino)" +msgid "Belgian (alternative, Latin-9 only)" +msgstr "Belga (alternativo, sólo latin-9)" #: ../rules/base.xml.in.h:263 -msgid "Filipino (Capewell-QWERF 2006 Baybayin)" -msgstr "Filipino (Capewell-QWERF 2006 baybayin)" +msgid "Belgian (alternative, Sun dead keys)" +msgstr "Belga (alternativo, teclas muertas de Sun)" #: ../rules/base.xml.in.h:264 -msgid "Filipino (Capewell-QWERF 2006 Latin)" -msgstr "Filipino (Capewell-QWERF 2006 latino)" +msgid "Belgian (ISO alternate)" +msgstr "Belga (alternativo ISO)" #: ../rules/base.xml.in.h:265 -msgid "Filipino (Colemak Baybayin)" -msgstr "Filipino (Colemak baybayin)" +msgid "Belgian (eliminate dead keys)" +msgstr "Belga (eliminar teclas muertas)" #: ../rules/base.xml.in.h:266 -msgid "Filipino (Colemak Latin)" -msgstr "Filipino (Colemak latino)" +msgid "Belgian (Sun dead keys)" +msgstr "Belga (teclas muertas de Sun)" #: ../rules/base.xml.in.h:267 -msgid "Filipino (Dvorak Baybayin)" -msgstr "Filipino (Dvorak baybayin)" - -#: ../rules/base.xml.in.h:268 -msgid "Filipino (Dvorak Latin)" -msgstr "Filipino (Dvorak latino)" +msgid "Belgian (Wang model 724 azerty)" +msgstr "Belga (modelo azerty 724 de Wang)" +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 -msgid "Filipino (QWERTY Baybayin)" -msgstr "Filipino (QWERTY baybayin)" +msgid "bn" +msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Finnish" -msgstr "Finlandés" +msgid "Bangla" +msgstr "Bangladesh" #: ../rules/base.xml.in.h:271 -msgid "Finnish (Macintosh)" -msgstr "Finlandés (Macintosh)" - -#: ../rules/base.xml.in.h:272 -msgid "Finnish (classic)" -msgstr "Finlandés (clásico)" +msgid "Bangla (Probhat)" +msgstr "Bengalí (Probhat)" +#. Keyboard indicator for Indian layouts #: ../rules/base.xml.in.h:273 -msgid "Finnish (classic, eliminate dead keys)" -msgstr "Finlandés (clásico, eliminar teclas muertas)" +msgid "in" +msgstr "in" + +#: ../rules/base.xml.in.h:274 +msgid "Indian" +msgstr "Indio" + +#: ../rules/base.xml.in.h:275 +msgid "Bangla (India)" +msgstr "Bengalí (India)" -#. This assumes the KP_ abstract symbols are actually useful for some apps -#. The description needs to be rewritten #: ../rules/base.xml.in.h:276 -msgid "Four-level key with abstract separators" -msgstr "Tecla de cuarto nivel con separadores abstractos" +msgid "Bangla (India, Probhat)" +msgstr "Bengalí (India, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Four-level key with comma" -msgstr "Tecla de cuarto nivel con coma" +msgid "Bangla (India, Baishakhi)" +msgstr "Bengalí (India, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Four-level key with dot" -msgstr "Tecla de cuarto nivel con punto" +msgid "Bangla (India, Bornona)" +msgstr "Bengalí (India, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Four-level key with dot, latin-9 restriction" -msgstr "Tecla de cuarto nivel con punto, restricción latin-9" +msgid "Bangla (India, Uni Gitanjali)" +msgstr "Bengalí (India, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Four-level key with momayyez" -msgstr "Tecla de cuarto nivel con momayyez" - -#: ../rules/base.xml.in.h:281 -msgid "French" -msgstr "Francés" +msgid "Bangla (India, Baishakhi Inscript)" +msgstr "Bengalí (India, Inscript Baishakhi)" +#. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:282 -msgid "French (Bepo, ergonomic, Dvorak way)" -msgstr "Francés (bepo, ergonómico, forma Dvorak)" +msgid "gu" +msgstr "gu" #: ../rules/base.xml.in.h:283 -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:284 -msgid "French (Breton)" -msgstr "Francés (bretón)" +msgid "Gujarati" +msgstr "Gujarati" +#. Keyboard indicator for Punjabi layouts #: ../rules/base.xml.in.h:285 -msgid "French (Cameroon)" -msgstr "Francés (Camerún)" +msgid "pa" +msgstr "pa" -#: ../rules/base.xml.in.h:286 ../rules/base.extras.xml.in.h:11 -msgid "French (Canada)" -msgstr "Francés (Canadá)" +#: ../rules/base.xml.in.h:286 +msgid "Punjabi (Gurmukhi)" +msgstr "Panyabí (gurmukhi)" #: ../rules/base.xml.in.h:287 -msgid "French (Canada, Dvorak)" -msgstr "Francés (Canadá, Dvorak)" - -#: ../rules/base.xml.in.h:288 -msgid "French (Canada, legacy)" -msgstr "Francés (Canadá, heredado)" +msgid "Punjabi (Gurmukhi Jhelum)" +msgstr "Panyabí (gurmukhi jhelum)" +#. Keyboard indicator for Kannada layouts #: ../rules/base.xml.in.h:289 -msgid "French (Democratic Republic of the Congo)" -msgstr "Francés (República Democrática del Congo)" +msgid "kn" +msgstr "kn" #: ../rules/base.xml.in.h:290 -msgid "French (Dvorak)" -msgstr "Francés (Dvorak)" +msgid "Kannada" +msgstr "Kannada" #: ../rules/base.xml.in.h:291 -msgid "French (Guinea)" -msgstr "Francés (Guinea)" - -#: ../rules/base.xml.in.h:292 -msgid "French (Macintosh)" -msgstr "Francés (Macintosh)" +msgid "Kannada (KaGaPa phonetic)" +msgstr "Canarés (fonético KaGaPa)" +#. Keyboard indicator for Malayalam layouts #: ../rules/base.xml.in.h:293 -msgid "French (Mali, alternative)" -msgstr "Francés (Malí, alternativa)" +msgid "ml" +msgstr "ml" #: ../rules/base.xml.in.h:294 -msgid "French (Morocco)" -msgstr "Francés (Marruecos)" +msgid "Malayalam" +msgstr "Malayalam" #: ../rules/base.xml.in.h:295 -msgid "French (Sun dead keys)" -msgstr "Francés (teclas muertas de Sun)" +msgid "Malayalam (Lalitha)" +msgstr "Malayalam (lalitha)" #: ../rules/base.xml.in.h:296 -msgid "French (Switzerland)" -msgstr "Francés (Suiza)" - -#: ../rules/base.xml.in.h:297 -msgid "French (Switzerland, Macintosh)" -msgstr "Francés (Suiza, Macintosh)" +msgid "Malayalam (enhanced Inscript with Rupee Sign)" +msgstr "Malayam (Inscript mejorado con signo de rupia)" +#. Keyboard indicator for Oriya layouts #: ../rules/base.xml.in.h:298 -msgid "French (Switzerland, Sun dead keys)" -msgstr "Francés (Suiza, teclas muertas de Sun)" +msgid "or" +msgstr "or" #: ../rules/base.xml.in.h:299 -msgid "French (Switzerland, eliminate dead keys)" -msgstr "Francés (Suiza, eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:300 -msgid "French (alternative)" -msgstr "Francés (alternativa)" +msgid "Oriya" +msgstr "Oriya" +#. Keyboard indicator for Tamil layouts #: ../rules/base.xml.in.h:301 -msgid "French (alternative, Sun dead keys)" -msgstr "Francés (alternativa, teclas muertas de Sun)" +msgid "ta" +msgstr "ta" #: ../rules/base.xml.in.h:302 -msgid "French (alternative, eliminate dead keys)" -msgstr "Francés (alternativa, eliminar teclas muertas)" +msgid "Tamil (Unicode)" +msgstr "Tamil (Unicode)" #: ../rules/base.xml.in.h:303 -msgid "French (alternative, latin-9 only)" -msgstr "Francés (alternativa, sólo latin-9)" +msgid "Tamil (keyboard with numerals)" +msgstr "Tamil (teclado con números)" #: ../rules/base.xml.in.h:304 -msgid "French (eliminate dead keys)" -msgstr "Francés (eliminar teclas muertas)" +msgid "Tamil (TAB typewriter)" +msgstr "Tamil (máquina de escribir TAB)" #: ../rules/base.xml.in.h:305 -msgid "French (legacy, alternative)" -msgstr "Francés (heredado, alternativa)" +msgid "Tamil (TSCII typewriter)" +msgstr "Tamil (máquina de escribir TSCII)" #: ../rules/base.xml.in.h:306 -msgid "French (legacy, alternative, Sun dead keys)" -msgstr "Francés (heredado, alternativa, teclas muertas de Sun)" - -#: ../rules/base.xml.in.h:307 -msgid "French (legacy, alternative, eliminate dead keys)" -msgstr "Francés (heredado, alternativa, eliminar teclas muertas)" +msgid "Tamil" +msgstr "Tamil" +#. Keyboard indicator for Telugu layouts #: ../rules/base.xml.in.h:308 -msgid "Fujitsu-Siemens Computers AMILO laptop" -msgstr "Portátil Fujitsu-Siemens Computers AMILO" +msgid "te" +msgstr "te" #: ../rules/base.xml.in.h:309 -msgid "Fula" -msgstr "Fula" +msgid "Telugu" +msgstr "Telugu" #: ../rules/base.xml.in.h:310 -msgid "Ga" -msgstr "Ga" - -#: ../rules/base.xml.in.h:311 -msgid "Generic 101-key PC" -msgstr "PC genérico 101 teclas" +msgid "Telugu (KaGaPa phonetic)" +msgstr "Telugu (fonético KaPaGa)" +#. Keyboard indicator for Urdu layouts #: ../rules/base.xml.in.h:312 -msgid "Generic 102-key (Intl) PC" -msgstr "PC genérico 102 teclas (intl)" +msgid "ur" +msgstr "ur" #: ../rules/base.xml.in.h:313 -msgid "Generic 104-key PC" -msgstr "PC genérico 104 teclas" +msgid "Urdu (phonetic)" +msgstr "Urdu (fonético)" #: ../rules/base.xml.in.h:314 -msgid "Generic 105-key (Intl) PC" -msgstr "PC genérico 105 teclas (intl)" +msgid "Urdu (alternative phonetic)" +msgstr "Urdu (fonético alternativo)" #: ../rules/base.xml.in.h:315 -msgid "Genius Comfy KB-12e" -msgstr "Genius Comfy KB-12e" - -#: ../rules/base.xml.in.h:316 -msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910" -msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910" +msgid "Urdu (WinKeys)" +msgstr "Urdu (teclas Windows)" +#. Keyboard indicator for Hindi layouts #: ../rules/base.xml.in.h:317 -msgid "Genius Comfy KB-21e-Scroll" -msgstr "Genius Comfy KB-21e-Scroll" +msgid "hi" +msgstr "hi" #: ../rules/base.xml.in.h:318 -msgid "Genius KB-19e NB" -msgstr "Genius KB-19e NB" +msgid "Hindi (Bolnagri)" +msgstr "Hindi (bolnagri)" #: ../rules/base.xml.in.h:319 -msgid "Genius KKB-2050HS" -msgstr "Genius KKB-2050HS" +msgid "Hindi (Wx)" +msgstr "Hindi (Wx)" #: ../rules/base.xml.in.h:320 -msgid "Georgian" -msgstr "Georgiano" - -#: ../rules/base.xml.in.h:321 -msgid "Georgian (France, AZERTY Tskapo)" -msgstr "Georgiano (Francia, AZERTY tskapo)" +msgid "Hindi (KaGaPa phonetic)" +msgstr "Hindi (fonético KaGaPa)" +#. Keyboard indicator for Sanskrit layouts #: ../rules/base.xml.in.h:322 -msgid "Georgian (Italy)" -msgstr "Georgiano (Italia)" +msgid "sa" +msgstr "sa" #: ../rules/base.xml.in.h:323 -msgid "Georgian (MESS)" -msgstr "Georgiano (MESS)" +msgid "Sanskrit (KaGaPa phonetic)" +msgstr "Sánscrito (fonético KaGaPa)" -#: ../rules/base.xml.in.h:324 -msgid "Georgian (ergonomic)" -msgstr "Georgiano (ergonómico)" - -#: ../rules/base.xml.in.h:325 ../rules/base.extras.xml.in.h:12 -msgid "German" -msgstr "Alemán" +#. Keyboard indicator for Marathi layouts +#: ../rules/base.xml.in.h:325 +msgid "mr" +msgstr "mr" #: ../rules/base.xml.in.h:326 -msgid "German (Austria)" -msgstr "Alemán (Austria)" +msgid "Marathi (KaGaPa phonetic)" +msgstr "Maratí (fonético KaGaPa)" #: ../rules/base.xml.in.h:327 -msgid "German (Austria, Macintosh)" -msgstr "Alemán (Austria, Macintosh)" - -#: ../rules/base.xml.in.h:328 -msgid "German (Austria, Sun dead keys)" -msgstr "Alemán (Austria, teclas muertas de Sun)" +msgid "English (India, with RupeeSign)" +msgstr "Inglés (India, con signo de rupia)" +#. Keyboard indicator for Bosnian layouts #: ../rules/base.xml.in.h:329 -msgid "German (Austria, eliminate dead keys)" -msgstr "Alemán (Austria, eliminar teclas muertas)" +msgid "bs" +msgstr "bs" #: ../rules/base.xml.in.h:330 -msgid "German (Dvorak)" -msgstr "Alemán (Dvorak)" +msgid "Bosnian" +msgstr "Bosnio" #: ../rules/base.xml.in.h:331 -msgid "German (Macintosh)" -msgstr "Alemán (Macintosh)" +msgid "Bosnian (use guillemets for quotes)" +msgstr "Bosnio (usar guillemots para comillas)" #: ../rules/base.xml.in.h:332 -msgid "German (Macintosh, eliminate dead keys)" -msgstr "Alemán (Macintosh, eliminar teclas muertas)" +msgid "Bosnian (use Bosnian digraphs)" +msgstr "Bosnio (usar dígrafos bosnios)" #: ../rules/base.xml.in.h:333 -msgid "German (Neo 2)" -msgstr "Alemán (Neo 2)" +msgid "Bosnian (US keyboard with Bosnian digraphs)" +msgstr "Bosnio (teclado de EE. UU. con dígrafos bosnios)" #: ../rules/base.xml.in.h:334 -msgid "German (Sun dead keys)" -msgstr "Alemán (teclas muertas de Sun)" - -#: ../rules/base.xml.in.h:335 -msgid "German (Switzerland)" -msgstr "Alemán (Suiza)" +msgid "Bosnian (US keyboard with Bosnian letters)" +msgstr "Bosnio (teclado de EE. UU. con letras bosnias)" -#: ../rules/base.xml.in.h:336 -msgid "German (Switzerland, Macintosh)" -msgstr "Alemán (Suiza, Macintosh)" +#. Keyboard indicator for Portuguese layouts +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 +msgid "pt" +msgstr "pt" -#: ../rules/base.xml.in.h:337 -msgid "German (Switzerland, Sun dead keys)" -msgstr "Alemán (Suiza, teclas muertas de Sun)" +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 +msgid "Portuguese (Brazil)" +msgstr "Portugués (Brasil)" #: ../rules/base.xml.in.h:338 -msgid "German (Switzerland, eliminate dead keys)" -msgstr "Alemán (Suiza, eliminar teclas muertas)" +msgid "Portuguese (Brazil, eliminate dead keys)" +msgstr "Portugués (Brasil, eliminar teclas muertas)" #: ../rules/base.xml.in.h:339 -msgid "German (Switzerland, legacy)" -msgstr "Alemán (Suiza, heredado)" +msgid "Portuguese (Brazil, Dvorak)" +msgstr "Portugués (Brasil, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "German (dead acute)" -msgstr "Alemán (acento muerto)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Portugués (Brasil, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "German (dead grave acute)" -msgstr "Alemán (acento grave muerto)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Portugués (Brasil, Nativo para teclados de EE. UU.)" #: ../rules/base.xml.in.h:342 -msgid "German (eliminate dead keys)" -msgstr "Alemán (eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:343 -msgid "Greek" -msgstr "Griego" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brasil, Nativo)" +#. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 -msgid "Greek (eliminate dead keys)" -msgstr "Griego (eliminar teclas muertas)" +msgid "bg" +msgstr "bg" #: ../rules/base.xml.in.h:345 -msgid "Greek (extended)" -msgstr "Griego (extendido)" +msgid "Bulgarian" +msgstr "Búlgaro" #: ../rules/base.xml.in.h:346 -msgid "Greek (polytonic)" -msgstr "Griego (politónico)" +msgid "Bulgarian (traditional phonetic)" +msgstr "Búlgaro (fonética tradicional)" #: ../rules/base.xml.in.h:347 -msgid "Greek (simple)" -msgstr "Griego (simple)" +msgid "Bulgarian (new phonetic)" +msgstr "Búlgaro (fonética nueva)" #: ../rules/base.xml.in.h:348 -msgid "Gujarati" -msgstr "Gujarati" - -#: ../rules/base.xml.in.h:349 -msgid "Gyration" -msgstr "Gyration" +msgid "Arabic (Morocco)" +msgstr "Árabbe (Marruecos)" -#: ../rules/base.xml.in.h:350 -msgid "HTC Dream" -msgstr "HTC Dream" +#. Keyboard indicator for French layouts +#: ../rules/base.xml.in.h:350 ../rules/base.extras.xml.in.h:3 +msgid "fr" +msgstr "fr" #: ../rules/base.xml.in.h:351 -msgid "Happy Hacking Keyboard" -msgstr "Happy Hacking Keyboard" - -#: ../rules/base.xml.in.h:352 -msgid "Happy Hacking Keyboard for Mac" -msgstr "Happy Hacking Keyboard para Mac" +msgid "French (Morocco)" +msgstr "Francés (Marruecos)" +#. Keyboard indicator for Berber layouts #: ../rules/base.xml.in.h:353 -msgid "Hausa" -msgstr "Hausa" +msgid "ber" +msgstr "ber" #: ../rules/base.xml.in.h:354 -msgid "Hebrew" -msgstr "Hebreo" +msgid "Berber (Morocco, Tifinagh)" +msgstr "Bereber (Marruecos, tifinagh)" #: ../rules/base.xml.in.h:355 -msgid "Hebrew (Biblical, Tiro)" -msgstr "Hebreo (bíblico, tiro)" +msgid "Berber (Morocco, Tifinagh alternative)" +msgstr "Bereber (Marruecos, alternativo tifinagh)" #: ../rules/base.xml.in.h:356 -msgid "Hebrew (lyx)" -msgstr "Hebreo (lyx)" +msgid "Berber (Morocco, Tifinagh alternative phonetic)" +msgstr "Bereber (Marruecos, alternativo fonético tifinagh)" #: ../rules/base.xml.in.h:357 -msgid "Hebrew (phonetic)" -msgstr "Hebreo (fonético)" +msgid "Berber (Morocco, Tifinagh extended)" +msgstr "Bereber (Marruecos, tifinagh extendido)" #: ../rules/base.xml.in.h:358 -msgid "Hewlett-Packard Internet Keyboard" -msgstr "Hewlett-Packard Internet Keyboard" +msgid "Berber (Morocco, Tifinagh phonetic)" +msgstr "Bereber (Marruecos, tifinagh fonético)" #: ../rules/base.xml.in.h:359 -msgid "Hewlett-Packard Mini 110 Notebook" -msgstr "Hewlett-Packard Mini 110 Notebook" - -#: ../rules/base.xml.in.h:360 -msgid "Hewlett-Packard Omnibook 500 FA" -msgstr "Hewlett-Packard Omnibook 500 FA" +msgid "Berber (Morocco, Tifinagh extended phonetic)" +msgstr "Bereber (Marruecos, tifinagh fonético extendido)" +#. Keyboard indicator for Cameroon layouts #: ../rules/base.xml.in.h:361 -msgid "Hewlett-Packard Omnibook 5xx" -msgstr "Hewlett-Packard Omnibook 5xx" +msgid "cm" +msgstr "cm" #: ../rules/base.xml.in.h:362 -msgid "Hewlett-Packard Omnibook 6000/6100" -msgstr "Hewlett-Packard Omnibook 6000/6100" +msgid "English (Cameroon)" +msgstr "Inglés (Camerún)" #: ../rules/base.xml.in.h:363 -msgid "Hewlett-Packard Omnibook XE3 GC" -msgstr "Hewlett-Packard Omnibook XE3 GC" +msgid "French (Cameroon)" +msgstr "Francés (Camerún)" #: ../rules/base.xml.in.h:364 -msgid "Hewlett-Packard Omnibook XE3 GF" -msgstr "Hewlett-Packard Omnibook XE3 GF" +msgid "Cameroon Multilingual (qwerty)" +msgstr "Camerunés multilingüe (qwerty)" #: ../rules/base.xml.in.h:365 -msgid "Hewlett-Packard Omnibook XT1000" -msgstr "Hewlett-Packard Omnibook XT1000" +msgid "Cameroon Multilingual (azerty)" +msgstr "Camerunés multilingüe (azerty)" #: ../rules/base.xml.in.h:366 -msgid "Hewlett-Packard Pavilion ZT11xx" -msgstr "Hewlett-Packard Pavilion ZT11xx" - -#: ../rules/base.xml.in.h:367 -msgid "Hewlett-Packard Pavilion dv5" -msgstr "Hewlett-Packard Pavilion dv5" +msgid "Cameroon Multilingual (Dvorak)" +msgstr "Camerunés multilingüe (Dvorak)" +#. Keyboard indicator for Burmese layouts #: ../rules/base.xml.in.h:368 -msgid "Hewlett-Packard SK-250x Multimedia Keyboard" -msgstr "Hewlett-Packard SK-250x Multimedia Keyboard" +msgid "my" +msgstr "my" #: ../rules/base.xml.in.h:369 -msgid "Hewlett-Packard nx9020" -msgstr "Hewlett-Packard nx9020" +msgid "Burmese" +msgstr "Burmese" -#: ../rules/base.xml.in.h:370 -msgid "Hexadecimal" -msgstr "Hexadecimal" +#: ../rules/base.xml.in.h:370 ../rules/base.extras.xml.in.h:4 +msgid "French (Canada)" +msgstr "Francés (Canadá)" #: ../rules/base.xml.in.h:371 -msgid "Hindi (Bolnagri)" -msgstr "Hindi (bolnagri)" +msgid "French (Canada, Dvorak)" +msgstr "Francés (Canadá, Dvorak)" #: ../rules/base.xml.in.h:372 -msgid "Hindi (Wx)" -msgstr "Hindi (Wx)" +msgid "French (Canada, legacy)" +msgstr "Francés (Canadá, arcaico)" #: ../rules/base.xml.in.h:373 -msgid "Honeywell Euroboard" -msgstr "Honeywell Euroboard" +msgid "Canadian Multilingual" +msgstr "Canadiense multilingüe" #: ../rules/base.xml.in.h:374 -msgid "Htc Dream phone" -msgstr "Teléfono HTC Dream" +msgid "Canadian Multilingual (first part)" +msgstr "Canadiense multilingüe (primera parte)" #: ../rules/base.xml.in.h:375 -msgid "Hungarian" -msgstr "Húngaro" - -#: ../rules/base.xml.in.h:376 -msgid "Hungarian (101/qwerty/comma/dead keys)" -msgstr "Húngaro (101/qwerty/coma/teclas muertas)" +msgid "Canadian Multilingual (second part)" +msgstr "Canadiense multilingüe (segunda parte)" +#. Keyboard indicator for Inuktikut layouts #: ../rules/base.xml.in.h:377 -msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" -msgstr "Húngaro (101/qwerty/coma/eliminar teclas muertas)" +msgid "ike" +msgstr "ike" #: ../rules/base.xml.in.h:378 -msgid "Hungarian (101/qwerty/dot/dead keys)" -msgstr "Húngaro (101/qwerty/punto/teclas muertas)" +msgid "Inuktitut" +msgstr "Inuktitut" #: ../rules/base.xml.in.h:379 -msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" -msgstr "Húngaro (101/qwerty/punto/eliminar teclas muertas)" +msgid "English (Canada)" +msgstr "Inglés (Canadá)" #: ../rules/base.xml.in.h:380 -msgid "Hungarian (101/qwertz/comma/dead keys)" -msgstr "Húngaro (101/qwertz/coma/teclas muertas)" - -#: ../rules/base.xml.in.h:381 -msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" -msgstr "Húngaro (101/qwertz/coma/eliminar teclas muertas)" +msgid "French (Democratic Republic of the Congo)" +msgstr "Francés (República Democrática del Congo)" +#. Keyboard indicator for Taiwanese layouts #: ../rules/base.xml.in.h:382 -msgid "Hungarian (101/qwertz/dot/dead keys)" -msgstr "Húngaro (101/qwertz/punto/teclas muertas)" +msgid "zh" +msgstr "zh" #: ../rules/base.xml.in.h:383 -msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" -msgstr "Húngaro (101/qwertz/punto/eliminar teclas muertas)" +msgid "Chinese" +msgstr "Chino" #: ../rules/base.xml.in.h:384 -msgid "Hungarian (102/qwerty/comma/dead keys)" -msgstr "Húngaro (102/qwerty/coma/teclas muertas)" +msgid "Tibetan" +msgstr "Tibetano" #: ../rules/base.xml.in.h:385 -msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" -msgstr "Húngaro (102/qwerty/coma/eliminar teclas muertas)" +msgid "Tibetan (with ASCII numerals)" +msgstr "Tibetano (con numerales ASCII)" #: ../rules/base.xml.in.h:386 -msgid "Hungarian (102/qwerty/dot/dead keys)" -msgstr "Húngaro (102/qwerty/punto/teclas muertas)" +msgid "ug" +msgstr "ug" #: ../rules/base.xml.in.h:387 -msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" -msgstr "Húngaro (102/qwerty/punto/eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:388 -msgid "Hungarian (102/qwertz/comma/dead keys)" -msgstr "Húngaro (102/qwertz/coma/teclas muertas)" +msgid "Uyghur" +msgstr "Uigur" +#. Keyboard indicator for Croatian layouts #: ../rules/base.xml.in.h:389 -msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" -msgstr "Húngaro (102/qwertz/coma/eliminar teclas muertas)" +msgid "hr" +msgstr "hr" #: ../rules/base.xml.in.h:390 -msgid "Hungarian (102/qwertz/dot/dead keys)" -msgstr "Húngaro (102/qwertz/punto/teclas muertas)" +msgid "Croatian" +msgstr "Croata" #: ../rules/base.xml.in.h:391 -msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" -msgstr "Húngaro (102/qwertz/punto/eliminar teclas muertas)" +msgid "Croatian (use guillemets for quotes)" +msgstr "Croata (usar guillemots para comillas)" #: ../rules/base.xml.in.h:392 -msgid "Hungarian (eliminate dead keys)" -msgstr "Húngaro (eliminar teclas muertas)" +msgid "Croatian (use Croatian digraphs)" +msgstr "Croata (usar dígrafos croatas)" #: ../rules/base.xml.in.h:393 -msgid "Hungarian (qwerty)" -msgstr "Húngaro (qwerty)" +msgid "Croatian (US keyboard with Croatian digraphs)" +msgstr "Croata (teclado de EE. UU. con dígrafos croatas)" #: ../rules/base.xml.in.h:394 -msgid "Hungarian (standard)" -msgstr "Húngaro (estándar)" - -#: ../rules/base.xml.in.h:395 -msgid "Hyper is mapped to Win-keys" -msgstr "Hyper está mapeada a las teclas Windows" +msgid "Croatian (US keyboard with Croatian letters)" +msgstr "Croata (teclado de EE. UU. con letras croatas)" -#: ../rules/base.xml.in.h:396 -msgid "IBM Rapid Access" -msgstr "IBM Rapid Access" +#. Keyboard indicator for Chech layouts +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +msgid "cs" +msgstr "cs" -#: ../rules/base.xml.in.h:397 -msgid "IBM Rapid Access II" -msgstr "IBM Rapid Access II" +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 +msgid "Czech" +msgstr "Checo" #: ../rules/base.xml.in.h:398 -msgid "IBM Space Saver" -msgstr "IBM Space Saver" +msgid "Czech (with <\\|> key)" +msgstr "Checo (con tecla «\\|»)" #: ../rules/base.xml.in.h:399 -msgid "IBM ThinkPad 560Z/600/600E/A22E" -msgstr "IBM ThinkPad 560Z/600/600E/A22E" +msgid "Czech (qwerty)" +msgstr "Checo (qwery)" #: ../rules/base.xml.in.h:400 -msgid "IBM ThinkPad R60/T60/R61/T61" -msgstr "IBM ThinkPad R60/T60/R61/T61" +msgid "Czech (qwerty, extended Backslash)" +msgstr "Checo (qwerty, contrabarra extendida)" #: ../rules/base.xml.in.h:401 -msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" -msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgid "Czech (UCW layout, accented letters only)" +msgstr "Checo (distribución UCW, sólo teclas con tilde)" #: ../rules/base.xml.in.h:402 -msgid "Icelandic" -msgstr "Islandés" - -#: ../rules/base.xml.in.h:403 -msgid "Icelandic (Dvorak)" -msgstr "Islandés (Dvorak)" +msgid "Czech (US Dvorak with CZ UCW support)" +msgstr "Checo (teclado Dvorak EE. UU. con soporte para UCW checo)" -#: ../rules/base.xml.in.h:404 -msgid "Icelandic (Macintosh)" -msgstr "Islandés (Macintosh)" +#. Keyboard indicator for Danish layouts +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +msgid "da" +msgstr "da" -#: ../rules/base.xml.in.h:405 -msgid "Icelandic (Sun dead keys)" -msgstr "Islandés (teclas muertas de Sun)" +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 +msgid "Danish" +msgstr "Danés" #: ../rules/base.xml.in.h:406 -msgid "Icelandic (eliminate dead keys)" -msgstr "Islandés (eliminar teclas muertas)" +msgid "Danish (eliminate dead keys)" +msgstr "Danés (eliminar teclas muertas)" #: ../rules/base.xml.in.h:407 -msgid "Igbo" -msgstr "Igbo" +msgid "Danish (Macintosh)" +msgstr "Danés (Macintosh)" #: ../rules/base.xml.in.h:408 -msgid "Indian" -msgstr "Indio" +msgid "Danish (Macintosh, eliminate dead keys)" +msgstr "Danés (Macintosh, eliminar teclas muertas)" #: ../rules/base.xml.in.h:409 -msgid "Inuktitut" -msgstr "Inuktitut" - -#: ../rules/base.xml.in.h:410 -msgid "Iraqi" -msgstr "Iraquí" +msgid "Danish (Dvorak)" +msgstr "Danés (Dvorak)" -#: ../rules/base.xml.in.h:411 -msgid "Irish" -msgstr "Irlandés" +#. Keyboard indicator for Dutch layouts +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +msgid "nl" +msgstr "nl" -#: ../rules/base.xml.in.h:412 -msgid "Irish (UnicodeExpert)" -msgstr "Irlandés (UnicodeExperto)" +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 +msgid "Dutch" +msgstr "Holandés" #: ../rules/base.xml.in.h:413 -msgid "Italian" -msgstr "Italiano" +msgid "Dutch (Sun dead keys)" +msgstr "Holandés (teclas muertas de Sun)" #: ../rules/base.xml.in.h:414 -msgid "Italian (Macintosh)" -msgstr "Italiano (Macintosh)" +msgid "Dutch (Macintosh)" +msgstr "Holandés (Macintosh)" #: ../rules/base.xml.in.h:415 -msgid "Italian (US keyboard with Italian letters)" -msgstr "Italiano (teclado EE. UU. con letras italianas)" - -#: ../rules/base.xml.in.h:416 -msgid "Italian (eliminate dead keys)" -msgstr "Italiano (eliminar teclas muertas)" +msgid "Dutch (standard)" +msgstr "Holandés (estándar)" +#. Keyboard indicator for Dzongkha layouts #: ../rules/base.xml.in.h:417 -msgid "Japanese" -msgstr "Japones" +msgid "dz" +msgstr "dz" #: ../rules/base.xml.in.h:418 -msgid "Japanese (Kana 86)" -msgstr "Japonés (kana 86)" - -#: ../rules/base.xml.in.h:419 -msgid "Japanese (Kana)" -msgstr "Japonés (kana)" +msgid "Dzongkha" +msgstr "Dzongkha" -#: ../rules/base.xml.in.h:420 -msgid "Japanese (Macintosh)" -msgstr "Japonés (Macintosh)" +#. Keyboard indicator for Estonian layouts +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +msgid "et" +msgstr "et" -#: ../rules/base.xml.in.h:421 -msgid "Japanese (OADG 109A)" -msgstr "Japonés (OADG 109A)" +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 +msgid "Estonian" +msgstr "Estonio" #: ../rules/base.xml.in.h:422 -msgid "Japanese (PC-98xx Series)" -msgstr "Japonés (series PC-98xx)" +msgid "Estonian (eliminate dead keys)" +msgstr "Estonio (eliminar teclas muertas)" #: ../rules/base.xml.in.h:423 -msgid "Japanese keyboard options" -msgstr "Opciones de teclado japonés" +msgid "Estonian (Dvorak)" +msgstr "Estonio (Dvorak)" #: ../rules/base.xml.in.h:424 -msgid "Kalmyk" -msgstr "Calmuco" +msgid "Estonian (US keyboard with Estonian letters)" +msgstr "Estonio (teclado EE. UU. con letras estonias)" -#: ../rules/base.xml.in.h:425 -msgid "Kana Lock key is locking" -msgstr "La tecla Bloq Kana está bloqueando" +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 +msgid "Persian" +msgstr "Persa" #: ../rules/base.xml.in.h:426 -msgid "Kannada" -msgstr "Kannada" - -#: ../rules/base.xml.in.h:427 -msgid "Kashubian" -msgstr "Casubio" +msgid "Persian (with Persian Keypad)" +msgstr "Persa (con teclado numérico persa)" +#. Keyboard indicator for Kurdish layouts #: ../rules/base.xml.in.h:428 -msgid "Kazakh" -msgstr "Kazajo" +msgid "ku" +msgstr "ku" #: ../rules/base.xml.in.h:429 -msgid "Kazakh (with Russian)" -msgstr "Kazajo (con ruso)" +msgid "Kurdish (Iran, Latin Q)" +msgstr "Kurdo (Irán latino Q)" #: ../rules/base.xml.in.h:430 -msgid "Key sequence to kill the X server" -msgstr "Secuencia de teclas para matar el servidor X" +msgid "Kurdish (Iran, F)" +msgstr "Kurdo (Irán, F)" #: ../rules/base.xml.in.h:431 -msgid "Key to choose 3rd level" -msgstr "Tecla para seleccionar el 3er nivel" +msgid "Kurdish (Iran, Latin Alt-Q)" +msgstr "Kurdo (Irán, latino Alt-Q)" #: ../rules/base.xml.in.h:432 -msgid "Key to choose 5th level" -msgstr "Tecla para seleccionar el 5o nivel" +msgid "Kurdish (Iran, Arabic-Latin)" +msgstr "Kurdo (Irán, arábigolatino)" #: ../rules/base.xml.in.h:433 -msgid "Key(s) to change layout" -msgstr "Tecla(s) para cambiar la distribución" +msgid "Iraqi" +msgstr "Iraquí" #: ../rules/base.xml.in.h:434 -msgid "Keytronic FlexPro" -msgstr "Keytronic FlexPro" +msgid "Kurdish (Iraq, Latin Q)" +msgstr "Kurdo (Irak, latino Q)" #: ../rules/base.xml.in.h:435 -msgid "Khmer (Cambodia)" -msgstr "Khmer (Camboya)" +msgid "Kurdish (Iraq, F)" +msgstr "Kurdo (Irak, F)" #: ../rules/base.xml.in.h:436 -msgid "Kikuyu" -msgstr "kikuyu" +msgid "Kurdish (Iraq, Latin Alt-Q)" +msgstr "Kurdo (Irak, latino Alt-Q)" #: ../rules/base.xml.in.h:437 -msgid "Kinesis" -msgstr "Kinesis" - -#: ../rules/base.xml.in.h:438 -msgid "Komi" -msgstr "Komi" +msgid "Kurdish (Iraq, Arabic-Latin)" +msgstr "Kurdo (Irak, arábigolatino)" +#. Keyboard indicator for Faroese layouts #: ../rules/base.xml.in.h:439 -msgid "Korean" -msgstr "Coreano" +msgid "fo" +msgstr "fo" #: ../rules/base.xml.in.h:440 -msgid "Korean (101/104 key compatible)" -msgstr "Coreano (101/104 teclas compatible)" +msgid "Faroese" +msgstr "Faroés" #: ../rules/base.xml.in.h:441 -msgid "Kurdish (Iran, Arabic-Latin)" -msgstr "Kurdo (Irán, arábigolatino)" - -#: ../rules/base.xml.in.h:442 -msgid "Kurdish (Iran, F)" -msgstr "Kurdo (Irán, F)" +msgid "Faroese (eliminate dead keys)" +msgstr "Faroés (eliminar teclas muertas)" -#: ../rules/base.xml.in.h:443 -msgid "Kurdish (Iran, Latin Alt-Q)" -msgstr "Kurdo (Irán, latino Alt-Q)" +#. Keyboard indicator for Finnish layouts +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +msgid "fi" +msgstr "fi" -#: ../rules/base.xml.in.h:444 -msgid "Kurdish (Iran, Latin Q)" -msgstr "Kurdo (Irán latino Q)" +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 +msgid "Finnish" +msgstr "Finlandés" #: ../rules/base.xml.in.h:445 -msgid "Kurdish (Iraq, Arabic-Latin)" -msgstr "Kurdo (Irak, arábigolatino)" +msgid "Finnish (classic)" +msgstr "Finlandés (clásico)" #: ../rules/base.xml.in.h:446 -msgid "Kurdish (Iraq, F)" -msgstr "Kurdo (Irak, F)" +msgid "Finnish (classic, eliminate dead keys)" +msgstr "Finlandés (clásico, eliminar teclas muertas)" #: ../rules/base.xml.in.h:447 -msgid "Kurdish (Iraq, Latin Alt-Q)" -msgstr "Kurdo (Irak, latino Alt-Q)" +msgid "Northern Saami (Finland)" +msgstr "Lapón del norte (Finlandia)" #: ../rules/base.xml.in.h:448 -msgid "Kurdish (Iraq, Latin Q)" -msgstr "Kurdo (Irak, latino Q)" +msgid "Finnish (Macintosh)" +msgstr "Finlandés (Macintosh)" -#: ../rules/base.xml.in.h:449 -msgid "Kurdish (Syria, F)" -msgstr "Kurdo (Siria, F)" +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 +msgid "French" +msgstr "Francés" #: ../rules/base.xml.in.h:450 -msgid "Kurdish (Syria, Latin Alt-Q)" -msgstr "Kurdo (Siria, latino Alt-Q)" +msgid "French (eliminate dead keys)" +msgstr "Francés (eliminar teclas muertas)" #: ../rules/base.xml.in.h:451 -msgid "Kurdish (Syria, Latin Q)" -msgstr "Kurdo (Siria, latino Q)" +msgid "French (Sun dead keys)" +msgstr "Francés (teclas muertas de Sun)" #: ../rules/base.xml.in.h:452 -msgid "Kurdish (Turkey, F)" -msgstr "Kurdo (Turquía, F)" +msgid "French (alternative)" +msgstr "Francés (alternativo)" #: ../rules/base.xml.in.h:453 -msgid "Kurdish (Turkey, Latin Alt-Q)" -msgstr "Kurdo (Turquía, latino Alt-Q)" +msgid "French (alternative, Latin-9 only)" +msgstr "Francés (alternativo, sólo latin-9)" #: ../rules/base.xml.in.h:454 -msgid "Kurdish (Turkey, Latin Q)" -msgstr "Kurdo (Turquía, latino Q)" +msgid "French (alternative, eliminate dead keys)" +msgstr "Francés (alternativo, eliminar teclas muertas)" #: ../rules/base.xml.in.h:455 -msgid "Kyrgyz" -msgstr "Kirguí" +msgid "French (alternative, Sun dead keys)" +msgstr "Francés (alternativo, teclas muertas de Sun)" #: ../rules/base.xml.in.h:456 -msgid "Kyrgyz (phonetic)" -msgstr "Kirguí (fonético)" +msgid "French (legacy, alternative)" +msgstr "Francés (arcaico, alternativo)" #: ../rules/base.xml.in.h:457 -msgid "Lao" -msgstr "Lao" +msgid "French (legacy, alternative, eliminate dead keys)" +msgstr "Francés (arcaico, alternativo, eliminar teclas muertas)" #: ../rules/base.xml.in.h:458 -msgid "Lao (STEA proposed standard layout)" -msgstr "Lao (distribución propuesta STEA estándar)" +msgid "French (legacy, alternative, Sun dead keys)" +msgstr "Francés (arcaico, alternativo, teclas muertas de Sun)" #: ../rules/base.xml.in.h:459 -msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" -msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" +msgid "French (Bepo, ergonomic, Dvorak way)" +msgstr "Francés (bepo, ergonómico, forma Dvorak)" #: ../rules/base.xml.in.h:460 -msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" -msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" +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:461 -msgid "Laptop/notebook eMachines m68xx" -msgstr "Laptop/notebook eMachines m68xx" +msgid "French (Dvorak)" +msgstr "Francés (Dvorak)" -#: ../rules/base.xml.in.h:462 ../rules/base.extras.xml.in.h:16 -msgid "Latvian" -msgstr "Letón" +#: ../rules/base.xml.in.h:462 +msgid "French (Macintosh)" +msgstr "Francés (Macintosh)" #: ../rules/base.xml.in.h:463 -msgid "Latvian (F variant)" -msgstr "Letón (variante de letra F)" +msgid "French (Breton)" +msgstr "Francés (bretón)" #: ../rules/base.xml.in.h:464 -msgid "Latvian (adapted)" -msgstr "Letón (adaptado)" +msgid "Occitan" +msgstr "Occitano" #: ../rules/base.xml.in.h:465 -msgid "Latvian (apostrophe variant)" -msgstr "Letón (variante con apóstrofo)" +msgid "Georgian (France, AZERTY Tskapo)" +msgstr "Georgiano (Francia, AZERTY tskapo)" #: ../rules/base.xml.in.h:466 -msgid "Latvian (ergonomic, ŪGJRMV)" -msgstr "Letón (ergonómico, ŪGJRMV)" +msgid "English (Ghana)" +msgstr "Inglés (Ghana)" #: ../rules/base.xml.in.h:467 -msgid "Latvian (modern)" -msgstr "Letón (moderno)" - -#: ../rules/base.xml.in.h:468 -msgid "Latvian (tilde variant)" -msgstr "Letón (variante virgulilla)" +msgid "English (Ghana, multilingual)" +msgstr "Inglés (Ghana, multilingüe)" +#. Keyboard indicator for Akan layouts #: ../rules/base.xml.in.h:469 -msgid "Left Alt" -msgstr "Alt izquierdo" +msgid "ak" +msgstr "ak" #: ../rules/base.xml.in.h:470 -msgid "Left Alt (while pressed)" -msgstr "Alt izquierdo (mientras está pulsado)" - -#: ../rules/base.xml.in.h:471 -msgid "Left Alt is swapped with Left Win" -msgstr "Alt izquierdo está cambiado con Windows izquierdo" +msgid "Akan" +msgstr "Akan" +#. Keyboard indicator for Ewe layouts #: ../rules/base.xml.in.h:472 -msgid "Left Ctrl" -msgstr "Ctrl izquierdo" +msgid "ee" +msgstr "ee" #: ../rules/base.xml.in.h:473 -msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" -msgstr "Ctrl izquierdo (a la primera distribución), Ctrl derecho (a la última distribución)" - -#: ../rules/base.xml.in.h:474 -msgid "Left Ctrl as Meta" -msgstr "Ctrl izquierdo como Meta" +msgid "Ewe" +msgstr "Ewe" +#. Keyboard indicator for Fula layouts #: ../rules/base.xml.in.h:475 -msgid "Left Ctrl+Left Shift" -msgstr "Ctrl izquierdo + Mayús izquierdo" +msgid "ff" +msgstr "ff" #: ../rules/base.xml.in.h:476 -msgid "Left Shift" -msgstr "Mayús izquierdo" - -#: ../rules/base.xml.in.h:477 -msgid "Left Win" -msgstr "Win izquierdo" +msgid "Fula" +msgstr "Fula" +#. Keyboard indicator for Ga layouts #: ../rules/base.xml.in.h:478 -msgid "Left Win (to first layout), Right Win/Menu (to last layout)" -msgstr "Win izquierdo (a la primera distribución), Win/Menu derecho (a la última distribución)" +msgid "gaa" +msgstr "gaa" #: ../rules/base.xml.in.h:479 -msgid "Left Win (while pressed)" -msgstr "Tecla Windows izquierdo (al pulsarla)" - -#: ../rules/base.xml.in.h:480 -msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Win izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" +msgid "Ga" +msgstr "Ga" +#. Keyboard indicator for Hausa layouts #: ../rules/base.xml.in.h:481 -msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" -msgstr "Win izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "ha" +msgstr "ha" #: ../rules/base.xml.in.h:482 -msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" -msgstr "Ctrl izquierdo + Ctrl derecho (a la primera distribución), Ctrl derecho + Menú (a la segunda distribución)" - -#: ../rules/base.xml.in.h:483 -msgid "Legacy" -msgstr "Heredado" +msgid "Hausa" +msgstr "Hausa" +#. Keyboard indicator for Avatime layouts #: ../rules/base.xml.in.h:484 -msgid "Legacy Wang 724" -msgstr "Wang 724 heredado" +msgid "avn" +msgstr "avn" + +#: ../rules/base.xml.in.h:485 +msgid "Avatime" +msgstr "Avatime" -#. Actually, with KP_SEPARATOR, as the old keypad(comma) #: ../rules/base.xml.in.h:486 -msgid "Legacy key with comma" -msgstr "Tecla heredada con coma" +msgid "English (Ghana, GILLBT)" +msgstr "Inglés (Ghana, GILLBT)" #: ../rules/base.xml.in.h:487 -msgid "Legacy key with dot" -msgstr "Tecla heredada con punto" - -#: ../rules/base.xml.in.h:488 ../rules/base.extras.xml.in.h:25 -msgid "Lithuanian" -msgstr "Lituano" +msgid "French (Guinea)" +msgstr "Francés (Guinea)" +#. Keyboard indicator for Georgian layouts #: ../rules/base.xml.in.h:489 -msgid "Lithuanian (IBM LST 1205-92)" -msgstr "Lituano (IBM LST 1205-92)" +msgid "ka" +msgstr "ka" #: ../rules/base.xml.in.h:490 -msgid "Lithuanian (LEKP)" -msgstr "Lituano (LEKP)" +msgid "Georgian" +msgstr "Georgiano" #: ../rules/base.xml.in.h:491 -msgid "Lithuanian (LEKPa)" -msgstr "Lituano (LEKPa)" +msgid "Georgian (ergonomic)" +msgstr "Georgiano (ergonómico)" #: ../rules/base.xml.in.h:492 -msgid "Lithuanian (US keyboard with Lithuanian letters)" -msgstr "Lituano (teclado de EE. UU. con letras lituanas)" +msgid "Georgian (MESS)" +msgstr "Georgiano (MESS)" #: ../rules/base.xml.in.h:493 -msgid "Lithuanian (standard)" -msgstr "Lituano (estándar)" +msgid "Russian (Georgia)" +msgstr "Ruso (Georgia)" #: ../rules/base.xml.in.h:494 -msgid "Logitech Access Keyboard" -msgstr "Logitech Access Keyboard" +msgid "Ossetian (Georgia)" +msgstr "Osetio (Georgia)" -#: ../rules/base.xml.in.h:495 -msgid "Logitech Cordless Desktop" -msgstr "Logitech Cordless Desktop" +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 +msgid "German" +msgstr "Alemán" #: ../rules/base.xml.in.h:496 -msgid "Logitech Cordless Desktop (alternate option)" -msgstr "Logitech Cordless Desktop Pro (opción alternativa)" +msgid "German (dead acute)" +msgstr "Alemán (acento muerto)" #: ../rules/base.xml.in.h:497 -msgid "Logitech Cordless Desktop EX110" -msgstr "Logitech Cordless Desktop EX110" +msgid "German (dead grave acute)" +msgstr "Alemán (acento grave muerto)" #: ../rules/base.xml.in.h:498 -msgid "Logitech Cordless Desktop LX-300" -msgstr "Logitech Cordless Desktop LX-300" +msgid "German (eliminate dead keys)" +msgstr "Alemán (eliminar teclas muertas)" #: ../rules/base.xml.in.h:499 -msgid "Logitech Cordless Desktop Navigator" -msgstr "Logitech Cordless Desktop Navigator" +msgid "German (T3)" +msgstr "Alemán (T3)" #: ../rules/base.xml.in.h:500 -msgid "Logitech Cordless Desktop Optical" -msgstr "Logitech Cordless Desktop Optical" +msgid "Romanian (Germany)" +msgstr "Rumano (Alemania)" #: ../rules/base.xml.in.h:501 -msgid "Logitech Cordless Desktop Pro (alternate option 2)" -msgstr "Logitech Cordless Desktop Pro (opción alternativa 2)" +msgid "Romanian (Germany, eliminate dead keys)" +msgstr "Rumano (Alemania, eliminar teclas muertas)" #: ../rules/base.xml.in.h:502 -msgid "Logitech Cordless Desktop iTouch" -msgstr "Logitech Cordless Desktop iTouch" +msgid "German (Dvorak)" +msgstr "Alemán (Dvorak)" #: ../rules/base.xml.in.h:503 -msgid "Logitech Cordless Freedom/Desktop Navigator" -msgstr "Logitech Cordless Freedom/Desktop Navigator" +msgid "German (Sun dead keys)" +msgstr "Alemán (teclas muertas de Sun)" #: ../rules/base.xml.in.h:504 -msgid "Logitech G15 extra keys via G15daemon" -msgstr "Logitech G15 extra keys via G15daemon" +msgid "German (Neo 2)" +msgstr "Alemán (Neo 2)" #: ../rules/base.xml.in.h:505 -msgid "Logitech Generic Keyboard" -msgstr "Logitech, teclado genérico" +msgid "German (Macintosh)" +msgstr "Alemán (Macintosh)" #: ../rules/base.xml.in.h:506 -msgid "Logitech Internet 350 Keyboard" -msgstr "Logitech Internet 350 Keyboard" +msgid "German (Macintosh, eliminate dead keys)" +msgstr "Alemán (Macintosh, eliminar teclas muertas)" #: ../rules/base.xml.in.h:507 -msgid "Logitech Internet Keyboard" -msgstr "Logitech Internet Keyboard" +msgid "Lower Sorbian" +msgstr "Bajo sorbio" #: ../rules/base.xml.in.h:508 -msgid "Logitech Internet Navigator Keyboard" -msgstr "Logitech Internet Navigator Keyboard" +msgid "Lower Sorbian (qwertz)" +msgstr "Bajo sorbio (qwertz)" #: ../rules/base.xml.in.h:509 -msgid "Logitech Media Elite Keyboard" -msgstr "Logitech Media Elite Keyboard" +msgid "German (qwerty)" +msgstr "Alemán (qwerty)" #: ../rules/base.xml.in.h:510 -msgid "Logitech Ultra-X Cordless Media Desktop Keyboard" -msgstr "Logitech Ultra-X Cordless Media Desktop Keyboard" +msgid "Russian (Germany, phonetic)" +msgstr "Ruso (Alemania, fonético)" #: ../rules/base.xml.in.h:511 -msgid "Logitech Ultra-X Keyboard" -msgstr "Logitech Ultra-X Keyboard" +msgid "German (legacy)" +msgstr "Alemán (arcaico)" -#: ../rules/base.xml.in.h:512 -msgid "Logitech diNovo Edge Keyboard" -msgstr "Logitech diNovo Edge Keyboard" - -#: ../rules/base.xml.in.h:513 -msgid "Logitech diNovo Keyboard" -msgstr "Logitech diNovo Keyboard" +#. Keyboard indicator for Greek layouts +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +msgid "gr" +msgstr "gr" -#: ../rules/base.xml.in.h:514 -msgid "Logitech iTouch" -msgstr "Logitech iTouch" +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 +msgid "Greek" +msgstr "Griego" #: ../rules/base.xml.in.h:515 -msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)" -msgstr "Logitech iTouch Cordless Keyboard (modelo Y-RB6)" +msgid "Greek (simple)" +msgstr "Griego (simple)" #: ../rules/base.xml.in.h:516 -msgid "Logitech iTouch Internet Navigator Keyboard SE" -msgstr "Logitech iTouch Internet Navigator Keyboard SE" +msgid "Greek (extended)" +msgstr "Griego (extendido)" #: ../rules/base.xml.in.h:517 -msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)" -msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)" +msgid "Greek (eliminate dead keys)" +msgstr "Griego (eliminar teclas muertas)" #: ../rules/base.xml.in.h:518 -msgid "Lower Sorbian" -msgstr "Bajo sorbio" - -#: ../rules/base.xml.in.h:519 -msgid "Lower Sorbian (qwertz)" -msgstr "Bajo sorbio (qwertz)" +msgid "Greek (polytonic)" +msgstr "Griego (politónico)" +#. Keyboard indicator for Hungarian layouts #: ../rules/base.xml.in.h:520 -msgid "MacBook/MacBook Pro" -msgstr "MacBook/MacBook Pro" +msgid "hu" +msgstr "hu" #: ../rules/base.xml.in.h:521 -msgid "MacBook/MacBook Pro (Intl)" -msgstr "MacBook/MacBook Pro (Intl)" +msgid "Hungarian" +msgstr "Húngaro" #: ../rules/base.xml.in.h:522 -msgid "Macedonian" -msgstr "Macedonio" +msgid "Hungarian (standard)" +msgstr "Húngaro (estándar)" #: ../rules/base.xml.in.h:523 -msgid "Macedonian (eliminate dead keys)" -msgstr "Macedonio (eliminar teclas muertas)" +msgid "Hungarian (eliminate dead keys)" +msgstr "Húngaro (eliminar teclas muertas)" #: ../rules/base.xml.in.h:524 -msgid "Macintosh" -msgstr "Macintosh" +msgid "Hungarian (qwerty)" +msgstr "Húngaro (qwerty)" #: ../rules/base.xml.in.h:525 -msgid "Macintosh Old" -msgstr "Macintosh antiguo" +msgid "Hungarian (101/qwertz/comma/dead keys)" +msgstr "Húngaro (101/qwertz/coma/teclas muertas)" #: ../rules/base.xml.in.h:526 -msgid "Make Caps Lock an additional Backspace" -msgstr "Hacer de Bloq Mayús un Retroceso adicional" +msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" +msgstr "Húngaro (101/qwertz/coma/eliminar teclas muertas)" #: ../rules/base.xml.in.h:527 -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" +msgid "Hungarian (101/qwertz/dot/dead keys)" +msgstr "Húngaro (101/qwertz/punto/teclas muertas)" #: ../rules/base.xml.in.h:528 -msgid "Make Caps Lock an additional ESC" -msgstr "Hacer de Bloq Mayús un Esc adicional" +msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" +msgstr "Húngaro (101/qwertz/punto/eliminar teclas muertas)" #: ../rules/base.xml.in.h:529 -msgid "Make Caps Lock an additional Hyper" -msgstr "Hacer de Bloq Mayús un Hyper adicional" +msgid "Hungarian (101/qwerty/comma/dead keys)" +msgstr "Húngaro (101/qwerty/coma/teclas muertas)" #: ../rules/base.xml.in.h:530 -msgid "Make Caps Lock an additional Num Lock" -msgstr "Hacer de Bloq Mayús un Bloq Num adicional" +msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" +msgstr "Húngaro (101/qwerty/coma/eliminar teclas muertas)" #: ../rules/base.xml.in.h:531 -msgid "Make Caps Lock an additional Super" -msgstr "Hacer de Bloq Mayús un Super adicional" +msgid "Hungarian (101/qwerty/dot/dead keys)" +msgstr "Húngaro (101/qwerty/punto/teclas muertas)" #: ../rules/base.xml.in.h:532 -msgid "Malayalam" -msgstr "Malayalam" +msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" +msgstr "Húngaro (101/qwerty/punto/eliminar teclas muertas)" #: ../rules/base.xml.in.h:533 -msgid "Malayalam (Lalitha)" -msgstr "Malayalam (lalitha)" +msgid "Hungarian (102/qwertz/comma/dead keys)" +msgstr "Húngaro (102/qwertz/coma/teclas muertas)" #: ../rules/base.xml.in.h:534 -msgid "Malayalam (enhanced Inscript with Rupee Sign)" -msgstr "Malayam (Inscript mejorado con signo de rupia)" +msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" +msgstr "Húngaro (102/qwertz/coma/eliminar teclas muertas)" #: ../rules/base.xml.in.h:535 -msgid "Maltese" -msgstr "Maltés" +msgid "Hungarian (102/qwertz/dot/dead keys)" +msgstr "Húngaro (102/qwertz/punto/teclas muertas)" #: ../rules/base.xml.in.h:536 -msgid "Maltese (with US layout)" -msgstr "Maltés (con distribución para EE. UU.)" +msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" +msgstr "Húngaro (102/qwertz/punto/eliminar teclas muertas)" #: ../rules/base.xml.in.h:537 -msgid "Maori" -msgstr "Maorí" +msgid "Hungarian (102/qwerty/comma/dead keys)" +msgstr "Húngaro (102/qwerty/coma/teclas muertas)" #: ../rules/base.xml.in.h:538 -msgid "Mari" -msgstr "Mari" +msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" +msgstr "Húngaro (102/qwerty/coma/eliminar teclas muertas)" #: ../rules/base.xml.in.h:539 -msgid "Memorex MX1998" -msgstr "Memorex MX1998" +msgid "Hungarian (102/qwerty/dot/dead keys)" +msgstr "Húngaro (102/qwerty/punto/teclas muertas)" #: ../rules/base.xml.in.h:540 -msgid "Memorex MX2500 EZ-Access Keyboard" -msgstr "Memorex MX2500 EZ-Access Keyboard" - -#: ../rules/base.xml.in.h:541 -msgid "Memorex MX2750" -msgstr "Memorex MX2750" +msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" +msgstr "Húngaro (102/qwerty/punto/eliminar teclas muertas)" +#. Keyboard indicator for Icelandic layouts #: ../rules/base.xml.in.h:542 -msgid "Menu" -msgstr "Menu" +msgid "is" +msgstr "is" #: ../rules/base.xml.in.h:543 -msgid "Menu as Right Ctrl" -msgstr "Menú como Ctrl derecho" +msgid "Icelandic" +msgstr "Islandés" #: ../rules/base.xml.in.h:544 -msgid "Meta is mapped to Left Win" -msgstr "Meta está mapeada a la tecla Windows izquierdo" +msgid "Icelandic (Sun dead keys)" +msgstr "Islandés (teclas muertas de Sun)" #: ../rules/base.xml.in.h:545 -msgid "Meta is mapped to Win keys" -msgstr "Meta está mapeada a las teclas Windows" +msgid "Icelandic (eliminate dead keys)" +msgstr "Islandés (eliminar teclas muertas)" #: ../rules/base.xml.in.h:546 -msgid "Microsoft Comfort Curve Keyboard 2000" -msgstr "Microsoft Comfort Curve Keyboard 2000" +msgid "Icelandic (Macintosh)" +msgstr "Islandés (Macintosh)" #: ../rules/base.xml.in.h:547 -msgid "Microsoft Internet Keyboard" -msgstr "Microsoft Internet Keyboard" - -#: ../rules/base.xml.in.h:548 -msgid "Microsoft Internet Keyboard Pro, Swedish" -msgstr "Microsoft Internet Keyboard Pro, sueco" +msgid "Icelandic (Dvorak)" +msgstr "Islandés (Dvorak)" -#: ../rules/base.xml.in.h:549 -msgid "Microsoft Natural" -msgstr "Microsoft Natural" +#. Keyboard indicator for Hebrew layouts +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +msgid "he" +msgstr "he" -#: ../rules/base.xml.in.h:550 -msgid "Microsoft Natural Keyboard Elite" -msgstr "Microsoft Natural Keyboard Elite" +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 +msgid "Hebrew" +msgstr "Hebreo" #: ../rules/base.xml.in.h:551 -msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" -msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" +msgid "Hebrew (lyx)" +msgstr "Hebreo (lyx)" #: ../rules/base.xml.in.h:552 -msgid "Microsoft Natural Keyboard Pro OEM" -msgstr "Microsoft Natural Keyboard Pro OEM" +msgid "Hebrew (phonetic)" +msgstr "Hebreo (fonético)" #: ../rules/base.xml.in.h:553 -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:554 -msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000" -msgstr "Microsoft Natural Wireless Ergonomic Keyboard 4000" +msgid "Hebrew (Biblical, Tiro)" +msgstr "Hebreo (bíblico, tiro)" -#: ../rules/base.xml.in.h:555 -msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000" -msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000" +#. Keyboard indicator for Italian layouts +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +msgid "it" +msgstr "it" -#: ../rules/base.xml.in.h:556 -msgid "Microsoft Office Keyboard" -msgstr "Microsoft Office Keyboard" +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 +msgid "Italian" +msgstr "Italiano" #: ../rules/base.xml.in.h:557 -msgid "Microsoft Wireless Multimedia Keyboard 1.0A" -msgstr "Microsoft Wireless Multimedia Keyboard 1.0A" +msgid "Italian (eliminate dead keys)" +msgstr "Italiano (eliminar teclas muertas)" #: ../rules/base.xml.in.h:558 -msgid "Miscellaneous compatibility options" -msgstr "Opciones misceláneas de compatiblidad" +msgid "Italian (Macintosh)" +msgstr "Italiano (Macintosh)" #: ../rules/base.xml.in.h:559 -msgid "Mongolian" -msgstr "Mongol" +msgid "Italian (US keyboard with Italian letters)" +msgstr "Italiano (teclado EE. UU. con letras italianas)" #: ../rules/base.xml.in.h:560 -msgid "Montenegrin" -msgstr "Montenegrino" +msgid "Georgian (Italy)" +msgstr "Georgiano (Italia)" #: ../rules/base.xml.in.h:561 -msgid "Montenegrin (Cyrillic with guillemets)" -msgstr "Montenegrino (cirílico con guillemots)" - -#: ../rules/base.xml.in.h:562 -msgid "Montenegrin (Cyrillic)" -msgstr "Montenegrino (cirílico)" +msgid "Italian (IBM 142)" +msgstr "Italiano (IBM 142)" -#: ../rules/base.xml.in.h:563 -msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" -msgstr "Montenegrino (cirílico, Z y ZHE intercambiados)" +#. Keyboard indicator for Japanese layouts +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +msgid "ja" +msgstr "ja" -#: ../rules/base.xml.in.h:564 -msgid "Montenegrin (Latin Unicode qwerty)" -msgstr "Montenegrino (latino Unicode qwerty)" +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 +msgid "Japanese" +msgstr "Japones" #: ../rules/base.xml.in.h:565 -msgid "Montenegrin (Latin Unicode)" -msgstr "Montenegrino (latino Unicode)" +msgid "Japanese (Kana)" +msgstr "Japonés (kana)" #: ../rules/base.xml.in.h:566 -msgid "Montenegrin (Latin qwerty)" -msgstr "Montenegrino (latino qwerty)" +msgid "Japanese (Kana 86)" +msgstr "Japonés (kana 86)" #: ../rules/base.xml.in.h:567 -msgid "Montenegrin (Latin with guillemets)" -msgstr "Montenegrino (latino con guillemots)" +msgid "Japanese (OADG 109A)" +msgstr "Japonés (OADG 109A)" #: ../rules/base.xml.in.h:568 -msgid "NICOLA-F style Backspace" -msgstr "Retroceso estilo NICOLA-F" +msgid "Japanese (Macintosh)" +msgstr "Japonés (Macintosh)" #: ../rules/base.xml.in.h:569 -msgid "Nepali" -msgstr "Nepalí" - -#: ../rules/base.xml.in.h:570 -msgid "Non-breakable space character at fourth level" -msgstr "Carácter de espacio no separable en el cuarto nivel" +msgid "Japanese (Dvorak)" +msgstr "Japonés (Dvorak)" +#. Keyboard indicator for Kikuyu layouts #: ../rules/base.xml.in.h:571 -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 "ki" +msgstr "ki" #: ../rules/base.xml.in.h:572 -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 "Kyrgyz" +msgstr "Kirguí" #: ../rules/base.xml.in.h:573 -msgid "Non-breakable space character at second level" -msgstr "Carácter de espacio no separable en el segundo nivel" - -#: ../rules/base.xml.in.h:574 -msgid "Non-breakable space character at third level" -msgstr "Carácter de espacio no separable en el tercer nivel" +msgid "Kyrgyz (phonetic)" +msgstr "Kirguí (fonético)" +#. Keyboard indicator for Khmer layouts #: ../rules/base.xml.in.h:575 -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 "km" +msgstr "km" #: ../rules/base.xml.in.h:576 -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:577 -msgid "Northern Saami (Finland)" -msgstr "Lapón del norte (Finlandia)" +msgid "Khmer (Cambodia)" +msgstr "Khmer (Camboya)" +#. Keyboard indicator for Kazakh layouts #: ../rules/base.xml.in.h:578 -msgid "Northern Saami (Norway)" -msgstr "Lapón del norte (Noruega)" +msgid "kk" +msgstr "kk" #: ../rules/base.xml.in.h:579 -msgid "Northern Saami (Norway, eliminate dead keys)" -msgstr "Lapón del norte (Noruego, eliminar teclas muertas)" +msgid "Kazakh" +msgstr "Kazajo" #: ../rules/base.xml.in.h:580 -msgid "Northern Saami (Sweden)" -msgstr "Lapón del norte (Suecia)" +msgid "Russian (Kazakhstan, with Kazakh)" +msgstr "Ruso (Kazajstán, con kazajo)" #: ../rules/base.xml.in.h:581 -msgid "Northgate OmniKey 101" -msgstr "Northgate OmniKey 101" - -#: ../rules/base.xml.in.h:582 -msgid "Norwegian" -msgstr "Noruego" +msgid "Kazakh (with Russian)" +msgstr "Kazajo (con ruso)" +#. Keyboard indicator for Lao layouts #: ../rules/base.xml.in.h:583 -msgid "Norwegian (Dvorak)" -msgstr "Noruego (Dvorak)" +msgid "lo" +msgstr "lo" #: ../rules/base.xml.in.h:584 -msgid "Norwegian (Macintosh)" -msgstr "Noruego (Macintosh)" +msgid "Lao" +msgstr "Lao" #: ../rules/base.xml.in.h:585 -msgid "Norwegian (Macintosh, eliminate dead keys)" -msgstr "Noruego (Macintosh, eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:586 -msgid "Norwegian (eliminate dead keys)" -msgstr "Noruego (eliminar teclas muertas)" +msgid "Lao (STEA proposed standard layout)" +msgstr "Lao (distribución propuesta STEA estándar)" -#: ../rules/base.xml.in.h:587 -msgid "Num Lock" -msgstr "Bloq Num" +#. Keyboard indicator for Spanish layouts +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 +msgid "es" +msgstr "es" #: ../rules/base.xml.in.h:588 -msgid "Numeric keypad delete key behaviour" -msgstr "Comportamiento de la tecla Supr del teclado numérico" +msgid "Spanish (Latin American)" +msgstr "Español (latinoamericano)" #: ../rules/base.xml.in.h:589 -msgid "Numeric keypad keys work as with Macintosh" -msgstr "Las teclas del teclado numérico funcionan como en un Macintosh" +msgid "Spanish (Latin American, eliminate dead keys)" +msgstr "Español (latinoamericano, eliminar teclas muertas)" #: ../rules/base.xml.in.h:590 -msgid "Numeric keypad layout selection" -msgstr "Selección de distribución de teclado numérico" +msgid "Spanish (Latin American, include dead tilde)" +msgstr "Español (latinoamericano, incluir tilde muerta)" #: ../rules/base.xml.in.h:591 -msgid "OLPC" -msgstr "OLPC" - -#: ../rules/base.xml.in.h:592 -msgid "Occitan" -msgstr "Occitano" +msgid "Spanish (Latin American, Sun dead keys)" +msgstr "Español (latinoamericano, teclas muertas de Sun)" -#: ../rules/base.xml.in.h:593 -msgid "Ogham" -msgstr "Ogham" +#. Keyboard indicator for Lithuanian layouts +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 +msgid "lt" +msgstr "lt" -#: ../rules/base.xml.in.h:594 -msgid "Ogham (IS434)" -msgstr "Ogam (IS434)" +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 +msgid "Lithuanian" +msgstr "Lituano" #: ../rules/base.xml.in.h:595 -msgid "Oriya" -msgstr "Oriya" +msgid "Lithuanian (standard)" +msgstr "Lituano (estándar)" #: ../rules/base.xml.in.h:596 -msgid "Ortek MCK-800 MM/Internet keyboard" -msgstr "Teclado Oretec MCK-800 MM/Internet" +msgid "Lithuanian (US keyboard with Lithuanian letters)" +msgstr "Lituano (teclado de EE. UU. con letras lituanas)" #: ../rules/base.xml.in.h:597 -msgid "Ossetian (Georgia)" -msgstr "Osetio (Georgia)" +msgid "Lithuanian (IBM LST 1205-92)" +msgstr "Lituano (IBM LST 1205-92)" #: ../rules/base.xml.in.h:598 -msgid "Ossetian (WinKeys)" -msgstr "Osetio (teclas Windows)" +msgid "Lithuanian (LEKP)" +msgstr "Lituano (LEKP)" #: ../rules/base.xml.in.h:599 -msgid "Ossetian (legacy)" -msgstr "Osetio (heredado)" - -#: ../rules/base.xml.in.h:600 -msgid "PC-98xx Series" -msgstr "PC-98xx Series" +msgid "Lithuanian (LEKPa)" +msgstr "Lituano (LEKPa)" -#: ../rules/base.xml.in.h:601 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Rusino de Panonia (homofónico)" +#. Keyboard indicator for Latvian layouts +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 +msgid "lv" +msgstr "lv" -#: ../rules/base.xml.in.h:602 -msgid "Pashto" -msgstr "Pashto" +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 +msgid "Latvian" +msgstr "Letón" #: ../rules/base.xml.in.h:603 -msgid "Pashto (Afghanistan, OLPC)" -msgstr "Pashto (Afganistán, OLPC)" +msgid "Latvian (apostrophe variant)" +msgstr "Letón (variante con apóstrofo)" #: ../rules/base.xml.in.h:604 -msgid "Pause" -msgstr "Pausa" +msgid "Latvian (tilde variant)" +msgstr "Letón (variante virgulilla)" -#: ../rules/base.xml.in.h:605 ../rules/base.extras.xml.in.h:27 -msgid "Persian" -msgstr "Persa" +#: ../rules/base.xml.in.h:605 +msgid "Latvian (F variant)" +msgstr "Letón (variante de letra F)" #: ../rules/base.xml.in.h:606 -msgid "Persian (Afghanistan, Dari OLPC)" -msgstr "Persa (Afganistán, OLPC dari)" +msgid "Latvian (modern)" +msgstr "Letón (moderno)" #: ../rules/base.xml.in.h:607 -msgid "Persian (with Persian Keypad)" -msgstr "Persa (con teclado persa)" - -#: ../rules/base.xml.in.h:608 ../rules/base.extras.xml.in.h:28 -msgid "Polish" -msgstr "Polaco" +msgid "Latvian (ergonomic, ŪGJRMV)" +msgstr "Letón (ergonómico, ŪGJRMV)" -#: ../rules/base.xml.in.h:609 -msgid "Polish (Dvorak)" -msgstr "Polaco (Dvorak)" +#: ../rules/base.xml.in.h:608 +msgid "Latvian (adapted)" +msgstr "Letón (adaptado)" +#. Keyboard indicator for Maori layouts #: ../rules/base.xml.in.h:610 -msgid "Polish (Dvorak, Polish quotes on key 1)" -msgstr "Polaco (Dvorak, comillas polacas en la tecla 1)" +msgid "mi" +msgstr "mi" #: ../rules/base.xml.in.h:611 -msgid "Polish (Dvorak, Polish quotes on quotemark key)" -msgstr "Polaco (Dvorak, comillas polacas en la tecla de comillas)" - -#: ../rules/base.xml.in.h:612 -msgid "Polish (programmer Dvorak)" -msgstr "Polaco (Dvorak de programador)" +msgid "Maori" +msgstr "Maorí" -#: ../rules/base.xml.in.h:613 -msgid "Polish (qwertz)" -msgstr "Polaco (qwertz)" +#. Keyboard indicator for Serbian layouts +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 +msgid "sr" +msgstr "sr" #: ../rules/base.xml.in.h:614 -msgid "Portuguese" -msgstr "Portugués" +msgid "Montenegrin" +msgstr "Montenegrino" #: ../rules/base.xml.in.h:615 -msgid "Portuguese (Brazil)" -msgstr "Portugués (Brasil)" +msgid "Montenegrin (Cyrillic)" +msgstr "Montenegrino (cirílico)" #: ../rules/base.xml.in.h:616 -msgid "Portuguese (Brazil, Dvorak)" -msgstr "Portugués (Brasil, Dvorak)" +msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" +msgstr "Montenegrino (cirílico, Z y ZHE intercambiados)" #: ../rules/base.xml.in.h:617 -msgid "Portuguese (Brazil, eliminate dead keys)" -msgstr "Portugués (Brasil, eliminar teclas muertas)" +msgid "Montenegrin (Latin Unicode)" +msgstr "Montenegrino (latino Unicode)" #: ../rules/base.xml.in.h:618 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugués (Brasil, nativo para esperanto)" +msgid "Montenegrin (Latin qwerty)" +msgstr "Montenegrino (latino qwerty)" #: ../rules/base.xml.in.h:619 -msgid "Portuguese (Brazil, nativo for USA keyboards)" -msgstr "Portugués (Brasil, nativo para teclados de EE. UU.)" +msgid "Montenegrin (Latin Unicode qwerty)" +msgstr "Montenegrino (latino Unicode qwerty)" #: ../rules/base.xml.in.h:620 -msgid "Portuguese (Brazil, nativo)" -msgstr "Portugués (Brasil, nativo)" +msgid "Montenegrin (Cyrillic with guillemets)" +msgstr "Montenegrino (cirílico con guillemots)" #: ../rules/base.xml.in.h:621 -msgid "Portuguese (Macintosh)" -msgstr "Portugués (Macintosh)" - -#: ../rules/base.xml.in.h:622 -msgid "Portuguese (Macintosh, Sun dead keys)" -msgstr "Portugués (Macintosh, teclas muertas de Sun)" +msgid "Montenegrin (Latin with guillemets)" +msgstr "Montenegrino (latino con guillemots)" +#. Keyboard indicator for Macedonian layouts #: ../rules/base.xml.in.h:623 -msgid "Portuguese (Macintosh, eliminate dead keys)" -msgstr "Portugués (Macintosh, eliminar teclas muertas)" +msgid "mk" +msgstr "mk" #: ../rules/base.xml.in.h:624 -msgid "Portuguese (Nativo for USA keyboards)" -msgstr "Portugués (nativo para teclados de EE. UU.)" +msgid "Macedonian" +msgstr "Macedonio" #: ../rules/base.xml.in.h:625 -msgid "Portuguese (Nativo)" -msgstr "Portugués (nativo)" - -#: ../rules/base.xml.in.h:626 -msgid "Portuguese (Sun dead keys)" -msgstr "Portugués (teclas muertas de Sun)" +msgid "Macedonian (eliminate dead keys)" +msgstr "Macedonio (eliminar teclas muertas)" +#. Keyboard indicator for Maltese layouts #: ../rules/base.xml.in.h:627 -msgid "Portuguese (eliminate dead keys)" -msgstr "Portugués (eliminar teclas muertas)" +msgid "mt" +msgstr "mt" #: ../rules/base.xml.in.h:628 -msgid "Propeller Voyager (KTEZ-1000)" -msgstr "Propeller Voyager (KTEZ-1000)" +msgid "Maltese" +msgstr "Maltés" #: ../rules/base.xml.in.h:629 -msgid "PrtSc" -msgstr "PrtSc" - -#: ../rules/base.xml.in.h:630 -msgid "Punjabi (Gurmukhi Jhelum)" -msgstr "Panyabí (gurmukhi jhelum)" +msgid "Maltese (with US layout)" +msgstr "Maltés (con distribución para EE. UU.)" +#. Keyboard indicator for Mongolian layouts #: ../rules/base.xml.in.h:631 -msgid "Punjabi (Gurmukhi)" -msgstr "Panyabí (gurmukhi)" +msgid "mn" +msgstr "mn" #: ../rules/base.xml.in.h:632 -msgid "QTronix Scorpius 98N+" -msgstr "QTronix Scorpius 98N+" - -#: ../rules/base.xml.in.h:633 -msgid "Right Alt" -msgstr "Alt derecho" +msgid "Mongolian" +msgstr "Mongol" -#: ../rules/base.xml.in.h:634 -msgid "Right Alt (while pressed)" -msgstr "Alt derecho (mientras está pulsado)" +#. Keyboard indicator for Norwegian layouts +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +msgid "no" +msgstr "no" -#: ../rules/base.xml.in.h:635 -msgid "Right Alt as Right Ctrl" -msgstr "Alt derecho como Ctrl derecho" +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 +msgid "Norwegian" +msgstr "Noruego" #: ../rules/base.xml.in.h:636 -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" +msgid "Norwegian (eliminate dead keys)" +msgstr "Noruego (eliminar teclas muertas)" #: ../rules/base.xml.in.h:637 -msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Alt derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" +msgid "Norwegian (Dvorak)" +msgstr "Noruego (Dvorak)" #: ../rules/base.xml.in.h:638 -msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" -msgstr "Alt derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "Northern Saami (Norway)" +msgstr "Lapón del norte (Noruega)" #: ../rules/base.xml.in.h:639 -msgid "Right Alt key never chooses 3rd level" -msgstr "La tecla Alt derecho nunca elige el 3er nivel" +msgid "Northern Saami (Norway, eliminate dead keys)" +msgstr "Lapón del norte (Noruego, eliminar teclas muertas)" #: ../rules/base.xml.in.h:640 -msgid "Right Alt, Shift+Right Alt key is Multi_Key" -msgstr "La tecla Alt derecho, Mayús+Alt derecho es tecla Multi" +msgid "Norwegian (Macintosh)" +msgstr "Noruego (Macintosh)" #: ../rules/base.xml.in.h:641 -msgid "Right Ctrl" -msgstr "Ctrl derecho" +msgid "Norwegian (Macintosh, eliminate dead keys)" +msgstr "Noruego (Macintosh, eliminar teclas muertas)" #: ../rules/base.xml.in.h:642 -msgid "Right Ctrl (while pressed)" -msgstr "Ctrl derecho (mientras está pulsado)" +msgid "Norwegian (Colemak)" +msgstr "Noruego (Colemak)" -#: ../rules/base.xml.in.h:643 -msgid "Right Ctrl as Right Alt" -msgstr "Ctrl derecho como Alt derecho" - -#: ../rules/base.xml.in.h:644 -msgid "Right Ctrl+Right Shift" -msgstr "Ctrl derecho + Mayús derecho" +#. Keyboard indicator for Polish layouts +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +msgid "pl" +msgstr "pl" -#: ../rules/base.xml.in.h:645 -msgid "Right Shift" -msgstr "Mayús derecho" +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 +msgid "Polish" +msgstr "Polaco" #: ../rules/base.xml.in.h:646 -msgid "Right Win" -msgstr "Windows derecho" +msgid "Polish (legacy)" +msgstr "Polaco (arcaico)" #: ../rules/base.xml.in.h:647 -msgid "Right Win (while pressed)" -msgstr "La tecla Windows (mientras está pulsada)" +msgid "Polish (qwertz)" +msgstr "Polaco (qwertz)" #: ../rules/base.xml.in.h:648 -msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Win derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" +msgid "Polish (Dvorak)" +msgstr "Polaco (Dvorak)" #: ../rules/base.xml.in.h:649 -msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" -msgstr "Win derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" +msgid "Polish (Dvorak, Polish quotes on quotemark key)" +msgstr "Polaco (Dvorak, comillas polacas en la tecla de comillas)" -#: ../rules/base.xml.in.h:650 ../rules/base.extras.xml.in.h:30 -msgid "Romanian" -msgstr "Rumano" +#: ../rules/base.xml.in.h:650 +msgid "Polish (Dvorak, Polish quotes on key 1)" +msgstr "Polaco (Dvorak, comillas polacas en la tecla 1)" #: ../rules/base.xml.in.h:651 -msgid "Romanian (Germany)" -msgstr "Rumano (Alemania)" +msgid "Kashubian" +msgstr "Casubio" #: ../rules/base.xml.in.h:652 -msgid "Romanian (Germany, eliminate dead keys)" -msgstr "Rumano (Alemania, eliminar teclas muertas)" +msgid "Russian (Poland, phonetic Dvorak)" +msgstr "Ruso (Polonia, Dvorak fonético)" #: ../rules/base.xml.in.h:653 -msgid "Romanian (WinKeys)" -msgstr "Rumano (teclas Windows)" +msgid "Polish (programmer Dvorak)" +msgstr "Polaco (Dvorak de programador)" -#: ../rules/base.xml.in.h:654 -msgid "Romanian (cedilla)" -msgstr "Rumano (cedilla)" +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 +msgid "Portuguese" +msgstr "Portugués" #: ../rules/base.xml.in.h:655 -msgid "Romanian (standard cedilla)" -msgstr "Rumano (cedilla estándar)" +msgid "Portuguese (eliminate dead keys)" +msgstr "Portugués (eliminar teclas muertas)" #: ../rules/base.xml.in.h:656 -msgid "Romanian (standard)" -msgstr "Rumano (estándar)" +msgid "Portuguese (Sun dead keys)" +msgstr "Portugués (teclas muertas de Sun)" #: ../rules/base.xml.in.h:657 -msgid "Rupee on 4" -msgstr "Rupia en el 4" +msgid "Portuguese (Macintosh)" +msgstr "Portugués (Macintosh)" -#: ../rules/base.xml.in.h:658 ../rules/base.extras.xml.in.h:32 -msgid "Russian" -msgstr "Ruso" +#: ../rules/base.xml.in.h:658 +msgid "Portuguese (Macintosh, eliminate dead keys)" +msgstr "Portugués (Macintosh, eliminar teclas muertas)" #: ../rules/base.xml.in.h:659 -msgid "Russian (DOS)" -msgstr "Ruso (DOS)" +msgid "Portuguese (Macintosh, Sun dead keys)" +msgstr "Portugués (Macintosh, teclas muertas de Sun)" #: ../rules/base.xml.in.h:660 -msgid "Russian (Georgia)" -msgstr "Ruso (Georgia)" +msgid "Portuguese (Nativo)" +msgstr "Portugués (Nativo)" #: ../rules/base.xml.in.h:661 -msgid "Russian (Germany, phonetic)" -msgstr "Ruso (Alemania, fonético)" +msgid "Portuguese (Nativo for US keyboards)" +msgstr "Portugués (Nativo para teclados de EE. UU.)" #: ../rules/base.xml.in.h:662 -msgid "Russian (Kazakhstan, with Kazakh)" -msgstr "Ruso (Kazajstán, con kazajo)" - -#: ../rules/base.xml.in.h:663 -msgid "Russian (Poland, phonetic Dvorak)" -msgstr "Ruso (Polonia, Dvorak fonético)" +msgid "Esperanto (Portugal, Nativo)" +msgstr "Esperanto (Portugal, Nativo)" -#: ../rules/base.xml.in.h:664 -msgid "Russian (Sweden, phonetic)" -msgstr "Ruso (sueco, fonético)" +#. Keyboard indicator for Romanian layouts +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +msgid "ro" +msgstr "ro" -#: ../rules/base.xml.in.h:665 -msgid "Russian (Sweden, phonetic, eliminate dead keys)" -msgstr "Ruso (sueco, fonético, eliminar teclas muertas)" +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 +msgid "Romanian" +msgstr "Rumano" #: ../rules/base.xml.in.h:666 -msgid "Russian (US, phonetic)" -msgstr "Ruso (EE. UU., fonético)" +msgid "Romanian (cedilla)" +msgstr "Rumano (cedilla)" #: ../rules/base.xml.in.h:667 -msgid "Russian (Ukraine, standard RSTU)" -msgstr "Ruso (ucraniano estándar RSTU)" +msgid "Romanian (standard)" +msgstr "Rumano (estándar)" #: ../rules/base.xml.in.h:668 -msgid "Russian (legacy)" -msgstr "Ruso (heredado)" +msgid "Romanian (standard cedilla)" +msgstr "Rumano (cedilla estándar)" #: ../rules/base.xml.in.h:669 -msgid "Russian (phonetic WinKeys)" -msgstr "Ruso (fonético con teclas Windows)" +msgid "Romanian (WinKeys)" +msgstr "Rumano (teclas Windows)" -#: ../rules/base.xml.in.h:670 -msgid "Russian (phonetic)" -msgstr "Ruso (fonético)" +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 +msgid "Russian" +msgstr "Ruso" #: ../rules/base.xml.in.h:671 -msgid "Russian (typewriter)" -msgstr "Ruso (máquina de escribir)" +msgid "Russian (phonetic)" +msgstr "Ruso (fonético)" #: ../rules/base.xml.in.h:672 -msgid "Russian (typewriter, legacy)" -msgstr "Ruso (máquina de escribir, heredado)" +msgid "Russian (phonetic WinKeys)" +msgstr "Ruso (fonético con teclas Windows)" #: ../rules/base.xml.in.h:673 -msgid "SILVERCREST Multimedia Wireless Keyboard" -msgstr "SILVERCREST Multimedia Wireless Keyboard" +msgid "Russian (typewriter)" +msgstr "Ruso (máquina de escribir)" #: ../rules/base.xml.in.h:674 -msgid "SK-1300" -msgstr "SK-1300" +msgid "Russian (legacy)" +msgstr "Ruso (arcaico)" #: ../rules/base.xml.in.h:675 -msgid "SK-2500" -msgstr "SK-2500" +msgid "Russian (typewriter, legacy)" +msgstr "Ruso (máquina de escribir, arcaico)" #: ../rules/base.xml.in.h:676 -msgid "SK-6200" -msgstr "SK-6200" +msgid "Tatar" +msgstr "Tatar" #: ../rules/base.xml.in.h:677 -msgid "SK-7100" -msgstr "SK-7100" +msgid "Ossetian (legacy)" +msgstr "Osetio (arcaico)" #: ../rules/base.xml.in.h:678 -msgid "SVEN Ergonomic 2500" -msgstr "SVEN Ergonomic 2500" +msgid "Ossetian (WinKeys)" +msgstr "Osetio (teclas Windows)" #: ../rules/base.xml.in.h:679 -msgid "SVEN Slim 303" -msgstr "SVEN Slim 303" +msgid "Chuvash" +msgstr "Chuvash" #: ../rules/base.xml.in.h:680 -msgid "Saisiyat (Taiwan)" -msgstr "Saisiyat (Taiwán)" +msgid "Chuvash (Latin)" +msgstr "Cuvash (latino)" #: ../rules/base.xml.in.h:681 -msgid "Samsung SDM 4500P" -msgstr "Samsung SDM 4500P" +msgid "Udmurt" +msgstr "Udmurto" #: ../rules/base.xml.in.h:682 -msgid "Samsung SDM 4510P" -msgstr "Samsung SDM 4510P" +msgid "Komi" +msgstr "Komi" #: ../rules/base.xml.in.h:683 -msgid "Sanwa Supply SKB-KG3" -msgstr "Sanwa Supply SKB-KG3" +msgid "Yakut" +msgstr "Yakuto" #: ../rules/base.xml.in.h:684 -msgid "Scroll Lock" -msgstr "Bloq Despl" +msgid "Kalmyk" +msgstr "Calmuco" #: ../rules/base.xml.in.h:685 -msgid "Semi-colon on third level" -msgstr "Punto y coma en tercer nivel" +msgid "Russian (DOS)" +msgstr "Ruso (DOS)" -#: ../rules/base.xml.in.h:686 ../rules/base.extras.xml.in.h:35 -msgid "Serbian" -msgstr "Serbio" +#: ../rules/base.xml.in.h:686 +msgid "Russian (Macintosh)" +msgstr "Ruso (Macintosh)" #: ../rules/base.xml.in.h:687 -msgid "Serbian (Latin Unicode qwerty)" -msgstr "Serbio (latino Unicode qwerty)" +msgid "Serbian (Russia)" +msgstr "Serbio (Rusia)" #: ../rules/base.xml.in.h:688 -msgid "Serbian (Latin Unicode)" -msgstr "Serbio (latino Unicode)" +msgid "Bashkirian" +msgstr "Bashkiriano" #: ../rules/base.xml.in.h:689 -msgid "Serbian (Latin qwerty)" -msgstr "Serbio (latino qwerty)" +msgid "Mari" +msgstr "Mari" -#: ../rules/base.xml.in.h:690 -msgid "Serbian (Latin with guillemets)" -msgstr "Serbio (latino con guillemots)" +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 +msgid "Serbian" +msgstr "Serbio" #: ../rules/base.xml.in.h:691 -msgid "Serbian (Latin)" -msgstr "Serbio (latino)" +msgid "Serbian (Cyrillic, Z and ZHE swapped)" +msgstr "Serbio (cirílico, Z y ZHE intercambiados)" #: ../rules/base.xml.in.h:692 -msgid "Serbian (Russia)" -msgstr "Serbio (Rusia)" +msgid "Serbian (Latin)" +msgstr "Serbio (latino)" #: ../rules/base.xml.in.h:693 -msgid "Serbian (Z and ZHE swapped)" -msgstr "Serbio (Z y ZHE intercambiados)" +msgid "Serbian (Latin Unicode)" +msgstr "Serbio (latino Unicode)" #: ../rules/base.xml.in.h:694 -msgid "Serbian (with guillemets)" -msgstr "Serbio (con guillemots)" +msgid "Serbian (Latin qwerty)" +msgstr "Serbio (latino qwerty)" #: ../rules/base.xml.in.h:695 -msgid "Serbo-Croatian (US)" -msgstr "Serbocroata (EE. UU.)" +msgid "Serbian (Latin Unicode qwerty)" +msgstr "Serbio (latino Unicode qwerty)" #: ../rules/base.xml.in.h:696 -msgid "Shift cancels Caps Lock" -msgstr "Mayús cancela Bloq Mayús" +msgid "Serbian (Cyrillic with guillemets)" +msgstr "Serbio (cirílico con guillemots)" #: ../rules/base.xml.in.h:697 -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 "Serbian (Latin with guillemets)" +msgstr "Serbio (latino con guillemots)" #: ../rules/base.xml.in.h:698 -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:699 -msgid "Shift+Caps Lock" -msgstr "Mayús+Bloq Mayús" +msgid "Pannonian Rusyn" +msgstr "Rusino de Panonia" +#. Keyboard indicator for Slovenian layouts #: ../rules/base.xml.in.h:700 -msgid "Sindhi" -msgstr "Sindhi" +msgid "sl" +msgstr "sl" #: ../rules/base.xml.in.h:701 -msgid "Sinhala (phonetic)" -msgstr "Cingalés (fonético)" +msgid "Slovenian" +msgstr "Esloveno" #: ../rules/base.xml.in.h:702 +msgid "Slovenian (use guillemets for quotes)" +msgstr "Esloveno (usar guillemots para comillas)" + +#: ../rules/base.xml.in.h:703 +msgid "Slovenian (US keyboard with Slovenian letters)" +msgstr "Esloveno (teclado EE. UU. con letras eslovenas)" + +#. Keyboard indicator for Slovak layouts +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +msgid "sk" +msgstr "sk" + +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Eslovaco" -#: ../rules/base.xml.in.h:703 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Eslovaco (contrabarra extendida)" -#: ../rules/base.xml.in.h:704 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Eslovaco (qwerty)" -#: ../rules/base.xml.in.h:705 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Eslovaco (qwerty, contrabarra extendida)" -#: ../rules/base.xml.in.h:706 -msgid "Slovenian" -msgstr "Esloveno" - -#: ../rules/base.xml.in.h:707 -msgid "Slovenian (US keyboard with Slovenian letters)" -msgstr "Esloveno (teclado EE. UU. con letras eslovenas)" - -#: ../rules/base.xml.in.h:708 -msgid "Slovenian (use guillemets for quotes)" -msgstr "Esloveno (usar guillemots para comillas)" - -#: ../rules/base.xml.in.h:709 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Español" -#: ../rules/base.xml.in.h:710 -msgid "Spanish (Dvorak)" -msgstr "Español (Dvorak)" - #: ../rules/base.xml.in.h:711 -msgid "Spanish (Latin American)" -msgstr "Español (latinoamericano)" +msgid "Spanish (eliminate dead keys)" +msgstr "Español (eliminar teclas muertas)" #: ../rules/base.xml.in.h:712 -msgid "Spanish (Latin American, Sun dead keys)" -msgstr "Español (latinoamericano, teclas muertas de Sun)" +msgid "Spanish (include dead tilde)" +msgstr "Español (incluir tilde muerta)" #: ../rules/base.xml.in.h:713 -msgid "Spanish (Latin American, eliminate dead keys)" -msgstr "Español (latinoamericano, eliminar teclas muertas)" +msgid "Spanish (Sun dead keys)" +msgstr "Español (teclas muertas de Sun)" #: ../rules/base.xml.in.h:714 -msgid "Spanish (Latin American, include dead tilde)" -msgstr "Español (latinoamericano, incluir tilde muerta)" +msgid "Spanish (Dvorak)" +msgstr "Español (Dvorak)" #: ../rules/base.xml.in.h:715 -msgid "Spanish (Macintosh)" -msgstr "Español (Macintosh)" +msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" +msgstr "Asturiano (España, con H y L con punto bajo)" #: ../rules/base.xml.in.h:716 -msgid "Spanish (Sun dead keys)" -msgstr "Español (teclas muertas de Sun)" +msgid "Catalan (Spain, with middle-dot L)" +msgstr "Catalán (España, con L con punto medio)" #: ../rules/base.xml.in.h:717 -msgid "Spanish (eliminate dead keys)" -msgstr "Español (eliminar teclas muertas)" - -#: ../rules/base.xml.in.h:718 -msgid "Spanish (include dead tilde)" -msgstr "Español (incluir tilde muerta)" +msgid "Spanish (Macintosh)" +msgstr "Español (Macintosh)" -#: ../rules/base.xml.in.h:719 -msgid "Special keys (Ctrl+Alt+<key>) handled in a server" -msgstr "Teclas especiales (Ctrl+Alt+«tecla») manipuladas en un servidor" +#. Keyboard indicator for Swedish layouts +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +msgid "sv" +msgstr "sv" -#: ../rules/base.xml.in.h:720 -msgid "Sun Type 5/6" -msgstr "Sun tipo 5/6" +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 +msgid "Swedish" +msgstr "Sueco" #: ../rules/base.xml.in.h:721 -msgid "Super Power Multimedia Keyboard" -msgstr "Super Power Multimedia Keyboard" +msgid "Swedish (eliminate dead keys)" +msgstr "Sueco (eliminar teclas muertas)" #: ../rules/base.xml.in.h:722 -msgid "Swahili (Kenya)" -msgstr "Swahili (Kenia)" +msgid "Swedish (Dvorak)" +msgstr "Sueco (Dvorak)" #: ../rules/base.xml.in.h:723 -msgid "Swahili (Tanzania)" -msgstr "Swahili (Tanzania)" +msgid "Russian (Sweden, phonetic)" +msgstr "Ruso (sueco, fonético)" #: ../rules/base.xml.in.h:724 -msgid "Swap Ctrl and Caps Lock" -msgstr "Intercambiar Ctrl y Bloq Mayús" +msgid "Russian (Sweden, phonetic, eliminate dead keys)" +msgstr "Ruso (sueco, fonético, eliminar teclas muertas)" #: ../rules/base.xml.in.h:725 -msgid "Swap ESC and Caps Lock" -msgstr "Intercambiar ESC y Bloq Mayús" +msgid "Northern Saami (Sweden)" +msgstr "Lapón del norte (Suecia)" #: ../rules/base.xml.in.h:726 -msgid "Swedish" -msgstr "Sueco" - -#: ../rules/base.xml.in.h:727 -msgid "Swedish (Dvorak)" -msgstr "Sueco (Dvorak)" - -#: ../rules/base.xml.in.h:728 msgid "Swedish (Macintosh)" msgstr "Sueco (Macintosh)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Sueco (Svdvorak)" +#: ../rules/base.xml.in.h:728 +msgid "Swedish Sign Language" +msgstr "Lenguaje de signos sueco" + +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 +msgid "German (Switzerland)" +msgstr "Alemán (Suiza)" + #: ../rules/base.xml.in.h:730 -msgid "Swedish (eliminate dead keys)" -msgstr "Sueco (eliminar teclas muertas)" +msgid "German (Switzerland, legacy)" +msgstr "Alemán (Suiza, arcaico)" #: ../rules/base.xml.in.h:731 -msgid "Swedish Sign Language" -msgstr "Lenguaje de signos sueco" +msgid "German (Switzerland, eliminate dead keys)" +msgstr "Alemán (Suiza, eliminar teclas muertas)" #: ../rules/base.xml.in.h:732 -msgid "Symplon PaceBook (tablet PC)" -msgstr "Symplon PaceBook (tablet PC)" +msgid "German (Switzerland, Sun dead keys)" +msgstr "Alemán (Suiza, teclas muertas de Sun)" #: ../rules/base.xml.in.h:733 -msgid "Syriac" -msgstr "Sirio" +msgid "French (Switzerland)" +msgstr "Francés (Suiza)" #: ../rules/base.xml.in.h:734 -msgid "Syriac (phonetic)" -msgstr "Sirio (fonético)" +msgid "French (Switzerland, eliminate dead keys)" +msgstr "Francés (Suiza, eliminar teclas muertas)" #: ../rules/base.xml.in.h:735 -msgid "Taiwanese" -msgstr "Taiwanés" +msgid "French (Switzerland, Sun dead keys)" +msgstr "Francés (Suiza, teclas muertas de Sun)" #: ../rules/base.xml.in.h:736 -msgid "Taiwanese (indigenous)" -msgstr "Taiwanés (autóctono)" +msgid "French (Switzerland, Macintosh)" +msgstr "Francés (Suiza, Macintosh)" #: ../rules/base.xml.in.h:737 -msgid "Tajik" -msgstr "Tajico" +msgid "German (Switzerland, Macintosh)" +msgstr "Alemán (Suiza, Macintosh)" #: ../rules/base.xml.in.h:738 -msgid "Tajik (legacy)" -msgstr "Tajico (heredado)" - -#: ../rules/base.xml.in.h:739 -msgid "Tamil" -msgstr "Tamil" +msgid "Arabic (Syria)" +msgstr "Árabe (Siria)" +#. Keyboard indicator for Syriac layouts #: ../rules/base.xml.in.h:740 -msgid "Tamil (Sri Lanka, TAB Typewriter)" -msgstr "Tamil (Sri Lanka, máquina de escribir TAB)" +msgid "syc" +msgstr "syc" #: ../rules/base.xml.in.h:741 -msgid "Tamil (Sri Lanka, Unicode)" -msgstr "Tamil (Sri Lanka, Unicode)" +msgid "Syriac" +msgstr "Sirio" #: ../rules/base.xml.in.h:742 -msgid "Tamil (TAB typewriter)" -msgstr "Tamil (máquina de escribir TAB)" +msgid "Syriac (phonetic)" +msgstr "Sirio (fonético)" #: ../rules/base.xml.in.h:743 -msgid "Tamil (TSCII typewriter)" -msgstr "Tamil (máquina de escribir TSCII)" +msgid "Kurdish (Syria, Latin Q)" +msgstr "Kurdo (Siria, latino Q)" #: ../rules/base.xml.in.h:744 -msgid "Tamil (Unicode)" -msgstr "Tamil (Unicode)" +msgid "Kurdish (Syria, F)" +msgstr "Kurdo (Siria, F)" #: ../rules/base.xml.in.h:745 -msgid "Tamil (keyboard with numerals)" -msgstr "Tamil (teclado con números)" - -#: ../rules/base.xml.in.h:746 -msgid "Targa Visionary 811" -msgstr "Targa Visionary 811" +msgid "Kurdish (Syria, Latin Alt-Q)" +msgstr "Kurdo (Siria, latino Alt-Q)" +#. Keyboard indicator for Tajik layouts #: ../rules/base.xml.in.h:747 -msgid "Tatar" -msgstr "Tatar" +msgid "tg" +msgstr "tg" #: ../rules/base.xml.in.h:748 -msgid "Telugu" -msgstr "Telugu" +msgid "Tajik" +msgstr "Tajico" #: ../rules/base.xml.in.h:749 -msgid "Thai" -msgstr "Tailandés" - -#: ../rules/base.xml.in.h:750 -msgid "Thai (Pattachote)" -msgstr "Tailandés (Pattachote)" +msgid "Tajik (legacy)" +msgstr "Tajico (arcaico)" +#. Keyboard indicator for Sinhala layouts #: ../rules/base.xml.in.h:751 -msgid "Thai (TIS-820.2538)" -msgstr "Tailandés (TIS-820.2538)" +msgid "si" +msgstr "si" #: ../rules/base.xml.in.h:752 -msgid "Tibetan" -msgstr "Tibetano" +msgid "Sinhala (phonetic)" +msgstr "Cingalés (fonético)" #: ../rules/base.xml.in.h:753 -msgid "Tibetan (with ASCII numerals)" -msgstr "Tibetano (con numerales ASCII)" +msgid "Tamil (Sri Lanka, Unicode)" +msgstr "Tamil (Sri Lanka, Unicode)" #: ../rules/base.xml.in.h:754 -msgid "To the corresponding key in a Dvorak keyboard." -msgstr "A la tecla correspondiente en un teclado Dvorak." - -#: ../rules/base.xml.in.h:755 -msgid "To the corresponding key in a Qwerty keyboard." -msgstr "A la tecla correspondiente en un teclado Qwerty." +msgid "Tamil (Sri Lanka, TAB Typewriter)" +msgstr "Tamil (Sri Lanka, máquina de escribir TAB)" +#. Keyboard indicator for Thai layouts #: ../rules/base.xml.in.h:756 -msgid "Toggle PointerKeys with Shift + NumLock." -msgstr "Cambiar las teclas de flechas con Mayús + Bloq Num" +msgid "th" +msgstr "th" #: ../rules/base.xml.in.h:757 -msgid "Toshiba Satellite S3000" -msgstr "Toshiba Satellite S3000" +msgid "Thai" +msgstr "Tailandés" #: ../rules/base.xml.in.h:758 -msgid "Trust Direct Access Keyboard" -msgstr "Trust Direct Access Keyboard" +msgid "Thai (TIS-820.2538)" +msgstr "Tailandés (TIS-820.2538)" #: ../rules/base.xml.in.h:759 -msgid "Trust Slimline" -msgstr "Trust Slimline" - -#: ../rules/base.xml.in.h:760 -msgid "Trust Wireless Keyboard Classic" -msgstr "Trust Wireless Keyboard Classic" +msgid "Thai (Pattachote)" +msgstr "Tailandés (Pattachote)" -#: ../rules/base.xml.in.h:761 -msgid "Tswana" -msgstr "Tswana" +#. Keyboard indicator for Turkish layouts +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +msgid "tr" +msgstr "tr" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turco" #: ../rules/base.xml.in.h:763 -msgid "Turkish (Alt-Q)" -msgstr "Turco (Alt-Q)" - -#: ../rules/base.xml.in.h:764 msgid "Turkish (F)" msgstr "Turco (F)" +#: ../rules/base.xml.in.h:764 +msgid "Turkish (Alt-Q)" +msgstr "Turco (Alt-Q)" + #: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turco (teclas muertas de Sun)" #: ../rules/base.xml.in.h:766 -msgid "Turkish (international with dead keys)" -msgstr "Turco (internacional con teclas muertas)" +msgid "Kurdish (Turkey, Latin Q)" +msgstr "Kurdo (Turquía, latino Q)" #: ../rules/base.xml.in.h:767 -msgid "Turkmen" -msgstr "Turkmenistano" +msgid "Kurdish (Turkey, F)" +msgstr "Kurdo (Turquía, F)" #: ../rules/base.xml.in.h:768 -msgid "Turkmen (Alt-Q)" -msgstr "Turkmenistano (Alt-Q)" +msgid "Kurdish (Turkey, Latin Alt-Q)" +msgstr "Kurdo (Turquía, latino Alt-Q)" #: ../rules/base.xml.in.h:769 -msgid "TypeMatrix EZ-Reach 2020" -msgstr "TypeMatrix EZ-Reach 2020" - -#: ../rules/base.xml.in.h:770 -msgid "TypeMatrix EZ-Reach 2030 PS2" -msgstr "TypeMatrix EZ-Reach 2030 PS2" +msgid "Turkish (international with dead keys)" +msgstr "Turco (internacional con teclas muertas)" -#: ../rules/base.xml.in.h:771 -msgid "TypeMatrix EZ-Reach 2030 USB" -msgstr "TypeMatrix EZ-Reach 2030 USB" +#. Keyboard indicator for Crimean Tatar layouts +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 +msgid "crh" +msgstr "crh" #: ../rules/base.xml.in.h:772 -msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)" -msgstr "TypeMatrix EZ-Reach 2030 USB (102/105:modo EU)" +msgid "Crimean Tatar (Turkish Q)" +msgstr "Tártaro de Crimea (Q turca)" #: ../rules/base.xml.in.h:773 -msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" -msgstr "TypeMatrix EZ-Reach 2030 USB (106:modo JP)" +msgid "Crimean Tatar (Turkish F)" +msgstr "Tártaro de Crimea (F turca)" #: ../rules/base.xml.in.h:774 -msgid "Udmurt" -msgstr "Udmurto" +msgid "Crimean Tatar (Turkish Alt-Q)" +msgstr "Tártaro de Crimea (Alt-Q turca)" #: ../rules/base.xml.in.h:775 -msgid "Ukrainian" -msgstr "Ucraniano" +msgid "Taiwanese" +msgstr "Taiwanés" #: ../rules/base.xml.in.h:776 -msgid "Ukrainian (WinKeys)" -msgstr "Ucraniano (teclas Windows)" - -#: ../rules/base.xml.in.h:777 -msgid "Ukrainian (homophonic)" -msgstr "Ucraniano (homofónico)" +msgid "Taiwanese (indigenous)" +msgstr "Taiwanés (autóctono)" +#. Keyboard indicator for Saisiyat layouts #: ../rules/base.xml.in.h:778 -msgid "Ukrainian (legacy)" -msgstr "Ucraniano (heredado)" +msgid "xsy" +msgstr "xsy" #: ../rules/base.xml.in.h:779 -msgid "Ukrainian (phonetic)" -msgstr "Ucraniano (fonético)" - -#: ../rules/base.xml.in.h:780 -msgid "Ukrainian (standard RSTU)" -msgstr "Ucraniano (estándar RSTU)" +msgid "Saisiyat (Taiwan)" +msgstr "Saisiyat (Taiwán)" -#: ../rules/base.xml.in.h:781 -msgid "Ukrainian (typewriter)" -msgstr "Ucraniano (máquina de escribir)" +#. Keyboard indicator for Ukranian layouts +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +msgid "uk" +msgstr "uk" -#: ../rules/base.xml.in.h:782 -msgid "Unicode additions (arrows and math operators)" -msgstr "Adiciones Unicode (flechas y operadores matemáticos)" +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 +msgid "Ukrainian" +msgstr "Ucraniano" #: ../rules/base.xml.in.h:783 -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 "Ukrainian (phonetic)" +msgstr "Ucraniano (fonético)" #: ../rules/base.xml.in.h:784 -msgid "Unitek KB-1925" -msgstr "Unitek KB-1925" +msgid "Ukrainian (typewriter)" +msgstr "Ucraniano (máquina de escribir)" #: ../rules/base.xml.in.h:785 -msgid "Urdu (Pakistan)" -msgstr "Urdu (Pakistán)" +msgid "Ukrainian (WinKeys)" +msgstr "Ucraniano (teclas Windows)" #: ../rules/base.xml.in.h:786 -msgid "Urdu (Pakistan, CRULP)" -msgstr "Urdu (Pakistán, CRULP)" +msgid "Ukrainian (legacy)" +msgstr "Ucraniano (arcaico)" #: ../rules/base.xml.in.h:787 -msgid "Urdu (Pakistan, NLA)" -msgstr "Urdu (Pakistán, NLA)" +msgid "Ukrainian (standard RSTU)" +msgstr "Ucraniano (estándar RSTU)" #: ../rules/base.xml.in.h:788 -msgid "Urdu (WinKeys)" -msgstr "Urdu (teclas Windows)" +msgid "Russian (Ukraine, standard RSTU)" +msgstr "Ruso (ucraniano estándar RSTU)" #: ../rules/base.xml.in.h:789 -msgid "Urdu (alternative phonetic)" -msgstr "Urdu (fonético alternativo)" +msgid "Ukrainian (homophonic)" +msgstr "Ucraniano (homofónico)" -#: ../rules/base.xml.in.h:790 -msgid "Urdu (phonetic)" -msgstr "Urdu (fonético)" +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 +msgid "English (UK)" +msgstr "Inglés (RU)" #: ../rules/base.xml.in.h:791 -msgid "Use keyboard LED to show alternative layout" -msgstr "Usar LED del teclado para mostrar la distribución alternativa" +msgid "English (UK, extended WinKeys)" +msgstr "Inglés (RU, extendido con teclas Windows)" #: ../rules/base.xml.in.h:792 -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 "English (UK, international with dead keys)" +msgstr "Inglés (RU, internacional con teclas muertas)" #: ../rules/base.xml.in.h:793 -msgid "Usual space at any level" -msgstr "Espacio usual en cualquier nivel" +msgid "English (UK, Dvorak)" +msgstr "Inglés (RU, Dvorak)" #: ../rules/base.xml.in.h:794 -msgid "Uyghur" -msgstr "Uigur" +msgid "English (UK, Dvorak with UK punctuation)" +msgstr "Inglés (RU, Dvorak con puntuación para RU)" #: ../rules/base.xml.in.h:795 -msgid "Uzbek" -msgstr "Uzbeco" +msgid "English (UK, Macintosh)" +msgstr "Inglés (RU, Macintosh)" #: ../rules/base.xml.in.h:796 -msgid "Uzbek (Afghanistan)" -msgstr "Uzbeco (Afganistán)" +msgid "English (UK, Macintosh international)" +msgstr "Inglés (RU, Macintosh internacional)" #: ../rules/base.xml.in.h:797 -msgid "Uzbek (Afghanistan, OLPC)" -msgstr "Uzbeco (Afganistán, OLPC)" +msgid "English (UK, Colemak)" +msgstr "Inglés (RU, Colemak)" #: ../rules/base.xml.in.h:798 -msgid "Uzbek (Latin)" -msgstr "Uzbeco (latino)" +msgid "Uzbek" +msgstr "Uzbeco" #: ../rules/base.xml.in.h:799 -msgid "Vietnamese" -msgstr "Vietnamita" - -#: ../rules/base.xml.in.h:800 -msgid "ViewSonic KU-306 Internet Keyboard" -msgstr "Teclado para internet ViewSonic KU-306" +msgid "Uzbek (Latin)" +msgstr "Uzbeco (latino)" +#. Keyboard indicator for Vietnamese layouts #: ../rules/base.xml.in.h:801 -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 "vi" +msgstr "vi" #: ../rules/base.xml.in.h:802 -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:803 -msgid "Winbook Model XP5" -msgstr "Winbook Model XP5" +msgid "Vietnamese" +msgstr "Vietnamita" -#: ../rules/base.xml.in.h:804 -msgid "Wolof" -msgstr "Wolof" +#. Keyboard indicator for Korean layouts +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +msgid "ko" +msgstr "ko" -#: ../rules/base.xml.in.h:805 -msgid "Yahoo! Internet Keyboard" -msgstr "Yahoo! Internet Keyboard" +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 +msgid "Korean" +msgstr "Coreano" #: ../rules/base.xml.in.h:806 -msgid "Yakut" -msgstr "Yakuto" +msgid "Korean (101/104 key compatible)" +msgstr "Coreano (101/104 teclas compatible)" #: ../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" +msgid "Japanese (PC-98xx Series)" +msgstr "Japonés (series PC-98xx)" +#. Keyboard indicator for Irish layouts #: ../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" +msgid "ie" +msgstr "ie" #: ../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" +msgid "Irish" +msgstr "Irlandés" #: ../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" +msgid "CloGaelach" +msgstr "Cló Gaelach" #: ../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" +msgid "Irish (UnicodeExpert)" +msgstr "Irlandés (UnicodeExperto)" #: ../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" +msgid "Ogham" +msgstr "Ogham" #: ../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" +msgid "Ogham (IS434)" +msgstr "Ogam (IS434)" #: ../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" +msgid "Urdu (Pakistan)" +msgstr "Urdu (Pakistán)" #: ../rules/base.xml.in.h:816 -msgid "ak" -msgstr "ak" +msgid "Urdu (Pakistan, CRULP)" +msgstr "Urdu (Pakistán, CRULP)" #: ../rules/base.xml.in.h:817 -msgid "am" -msgstr "am" +msgid "Urdu (Pakistan, NLA)" +msgstr "Urdu (Pakistán, NLA)" #: ../rules/base.xml.in.h:818 -msgid "ar" -msgstr "ar" - -#: ../rules/base.xml.in.h:819 -msgid "avn" -msgstr "avn" +msgid "Arabic (Pakistan)" +msgstr "Árabe (Pakistán)" +#. Keyboard indicator for Sindhi layouts #: ../rules/base.xml.in.h:820 -msgid "az" -msgstr "az" +msgid "sd" +msgstr "sd" #: ../rules/base.xml.in.h:821 -msgid "be" -msgstr "be" - -#: ../rules/base.xml.in.h:822 -msgid "ber" -msgstr "ber" +msgid "Sindhi" +msgstr "Sindhi" +#. Keyboard indicator for Dhivehi layouts #: ../rules/base.xml.in.h:823 -msgid "bg" -msgstr "bg" +msgid "dv" +msgstr "dv" #: ../rules/base.xml.in.h:824 -msgid "bm" -msgstr "bm" +msgid "Dhivehi" +msgstr "Dhivehi" #: ../rules/base.xml.in.h:825 -msgid "bn" -msgstr "bn" - -#: ../rules/base.xml.in.h:826 -msgid "brl" -msgstr "brl" +msgid "English (South Africa)" +msgstr "Inglés (Sudáfrica)" +#. Keyboard indicator for Esperanto layouts #: ../rules/base.xml.in.h:827 -msgid "bs" -msgstr "bs" +msgid "eo" +msgstr "eo" #: ../rules/base.xml.in.h:828 -msgid "ca" -msgstr "ca" +msgid "Esperanto" +msgstr "Esperanto" #: ../rules/base.xml.in.h:829 -msgid "chr" -msgstr "chr" - -#: ../rules/base.xml.in.h:830 -msgid "cm" -msgstr "cm" +msgid "Esperanto (displaced semicolon and quote, obsolete)" +msgstr "Estonio (punto y coma y comilla desplazadas, obsoleto)" -#: ../rules/base.xml.in.h:831 ../rules/base.extras.xml.in.h:38 -msgid "crh" -msgstr "crh" +#. Keyboard indicator for Nepali layouts +#: ../rules/base.xml.in.h:831 +msgid "ne" +msgstr "ne" #: ../rules/base.xml.in.h:832 -msgid "cs" -msgstr "cs" +msgid "Nepali" +msgstr "Nepalí" #: ../rules/base.xml.in.h:833 -msgid "da" -msgstr "da" - -#: ../rules/base.xml.in.h:834 ../rules/base.extras.xml.in.h:39 -msgid "de" -msgstr "de" +msgid "English (Nigeria)" +msgstr "Inglés (Nigeria)" +#. Keyboard indicator for Igbo layouts #: ../rules/base.xml.in.h:835 -msgid "dv" -msgstr "dv" +msgid "ig" +msgstr "ig" #: ../rules/base.xml.in.h:836 -msgid "dz" -msgstr "dz" - -#: ../rules/base.xml.in.h:837 -msgid "ee" -msgstr "ee" +msgid "Igbo" +msgstr "Igbo" -#: ../rules/base.xml.in.h:838 ../rules/base.extras.xml.in.h:40 -msgid "en" -msgstr "en" +#. Keyboard indicator for Yoruba layouts +#: ../rules/base.xml.in.h:838 +msgid "yo" +msgstr "yo" #: ../rules/base.xml.in.h:839 -msgid "eo" -msgstr "eo" - -#: ../rules/base.xml.in.h:840 -msgid "es" -msgstr "es" +msgid "Yoruba" +msgstr "Yoruba" +#. Keyboard indicator for Amharic layouts #: ../rules/base.xml.in.h:841 -msgid "et" -msgstr "et" - -#: ../rules/base.xml.in.h:842 ../rules/base.extras.xml.in.h:41 -msgid "fa" -msgstr "fa" +msgid "am" +msgstr "am" -#: ../rules/base.xml.in.h:843 -msgid "ff" -msgstr "ff" +#: ../rules/base.xml.in.h:842 +msgid "Amharic" +msgstr "Amharico" +#. Keyboard indicator for Wolof layouts #: ../rules/base.xml.in.h:844 -msgid "fi" -msgstr "fi" +msgid "wo" +msgstr "wo" #: ../rules/base.xml.in.h:845 -msgid "fo" -msgstr "fo" - -#: ../rules/base.xml.in.h:846 ../rules/base.extras.xml.in.h:42 -msgid "fr" -msgstr "fr" +msgid "Wolof" +msgstr "Wolof" +#. Keyboard indicator for Braille layouts #: ../rules/base.xml.in.h:847 -msgid "gaa" -msgstr "gaa" +msgid "brl" +msgstr "brl" #: ../rules/base.xml.in.h:848 -msgid "gr" -msgstr "gr" +msgid "Braille" +msgstr "Braille" #: ../rules/base.xml.in.h:849 -msgid "gu" -msgstr "gu" +msgid "Braille (left hand)" +msgstr "Braille (zurdo)" #: ../rules/base.xml.in.h:850 -msgid "ha" -msgstr "ha" - -#: ../rules/base.xml.in.h:851 -msgid "he" -msgstr "he" +msgid "Braille (right hand)" +msgstr "Braille (diestro)" +#. Keyboard indicator for Turkmen layouts #: ../rules/base.xml.in.h:852 -msgid "hi" -msgstr "hi" +msgid "tk" +msgstr "tk" #: ../rules/base.xml.in.h:853 -msgid "hr" -msgstr "hr" +msgid "Turkmen" +msgstr "Turkmenistano" #: ../rules/base.xml.in.h:854 -msgid "hu" -msgstr "hu" - -#: ../rules/base.xml.in.h:855 ../rules/base.extras.xml.in.h:43 -msgid "hy" -msgstr "hy" +msgid "Turkmen (Alt-Q)" +msgstr "Turkmenistano (Alt-Q)" +#. Keyboard indicator for Bambara layouts #: ../rules/base.xml.in.h:856 -msgid "ie" -msgstr "ie" +msgid "bm" +msgstr "bm" #: ../rules/base.xml.in.h:857 -msgid "ig" -msgstr "ig" +msgid "Bambara" +msgstr "Bambara" #: ../rules/base.xml.in.h:858 -msgid "ike" -msgstr "ike" +msgid "French (Mali, alternative)" +msgstr "Francés (Malí, alternativo)" #: ../rules/base.xml.in.h:859 -msgid "in" -msgstr "in" +msgid "English (Mali, US Macintosh)" +msgstr "Inglés (Malí, Macintosh de EE. UU.)" #: ../rules/base.xml.in.h:860 -msgid "is" -msgstr "is" - -#: ../rules/base.xml.in.h:861 -msgid "it" -msgstr "it" +msgid "English (Mali, US international)" +msgstr "Inglés (Malí, EE. UU. internacional)" +#. Keyboard indicator for Swahili layouts #: ../rules/base.xml.in.h:862 -msgid "ja" -msgstr "ja" +msgid "sw" +msgstr "sw" #: ../rules/base.xml.in.h:863 -msgid "ka" -msgstr "ka" +msgid "Swahili (Tanzania)" +msgstr "Swahili (Tanzania)" #: ../rules/base.xml.in.h:864 -msgid "ki" -msgstr "ki" +msgid "Swahili (Kenya)" +msgstr "Swahili (Kenia)" #: ../rules/base.xml.in.h:865 -msgid "kk" -msgstr "kk" - -#: ../rules/base.xml.in.h:866 -msgid "km" -msgstr "km" +msgid "Kikuyu" +msgstr "kikuyu" +#. Keyboard indicator for Tswana layouts #: ../rules/base.xml.in.h:867 -msgid "kn" -msgstr "kn" +msgid "tn" +msgstr "tn" #: ../rules/base.xml.in.h:868 -msgid "ko" -msgstr "ko" - -#: ../rules/base.xml.in.h:869 -msgid "ku" -msgstr "ku" +msgid "Tswana" +msgstr "Tswana" +#. Keyboard indicator for Filipino layouts #: ../rules/base.xml.in.h:870 -msgid "lo" -msgstr "lo" +msgid "ph" +msgstr "ph" -#: ../rules/base.xml.in.h:871 ../rules/base.extras.xml.in.h:45 -msgid "lt" -msgstr "lt" +#: ../rules/base.xml.in.h:871 +msgid "Filipino" +msgstr "Filipino" -#: ../rules/base.xml.in.h:872 ../rules/base.extras.xml.in.h:46 -msgid "lv" -msgstr "lv" +#: ../rules/base.xml.in.h:872 +msgid "Filipino (QWERTY Baybayin)" +msgstr "Filipino (QWERTY baybayin)" #: ../rules/base.xml.in.h:873 -msgid "mi" -msgstr "mi" +msgid "Filipino (Capewell-Dvorak Latin)" +msgstr "Filipino (Capewell-Dvorak latino)" #: ../rules/base.xml.in.h:874 -msgid "mk" -msgstr "mk" +msgid "Filipino (Capewell-Dvorak Baybayin)" +msgstr "Filipino (Capewell-Dvorak baybayin)" #: ../rules/base.xml.in.h:875 -msgid "ml" -msgstr "ml" +msgid "Filipino (Capewell-QWERF 2006 Latin)" +msgstr "Filipino (Capewell-QWERF 2006 latino)" #: ../rules/base.xml.in.h:876 -msgid "mn" -msgstr "mn" +msgid "Filipino (Capewell-QWERF 2006 Baybayin)" +msgstr "Filipino (Capewell-QWERF 2006 baybayin)" #: ../rules/base.xml.in.h:877 -msgid "mt" -msgstr "mt" +msgid "Filipino (Colemak Latin)" +msgstr "Filipino (Colemak latino)" #: ../rules/base.xml.in.h:878 -msgid "my" -msgstr "my" +msgid "Filipino (Colemak Baybayin)" +msgstr "Filipino (Colemak baybayin)" #: ../rules/base.xml.in.h:879 -msgid "ne" -msgstr "ne" +msgid "Filipino (Dvorak Latin)" +msgstr "Filipino (Dvorak latino)" #: ../rules/base.xml.in.h:880 -msgid "nl" -msgstr "nl" +msgid "Filipino (Dvorak Baybayin)" +msgstr "Filipino (Dvorak baybayin)" #: ../rules/base.xml.in.h:881 -msgid "no" -msgstr "no" +msgid "md" +msgstr "md" #: ../rules/base.xml.in.h:882 -msgid "or" -msgstr "or" +msgid "Moldavian" +msgstr "Moldavo" #: ../rules/base.xml.in.h:883 -msgid "pa" -msgstr "pa" +msgid "gag" +msgstr "gag" #: ../rules/base.xml.in.h:884 -msgid "ph" -msgstr "ph" +msgid "Moldavian (Gagauz)" +msgstr "Moldavo (Gagauzia)" -#: ../rules/base.xml.in.h:885 ../rules/base.extras.xml.in.h:47 -msgid "pl" -msgstr "pl" +#: ../rules/base.xml.in.h:885 +msgid "Switching to another layout" +msgstr "Cambiar a otra distribución" #: ../rules/base.xml.in.h:886 -msgid "ps" -msgstr "ps" +msgid "Right Alt (while pressed)" +msgstr "Alt derecho (mientras está pulsado)" #: ../rules/base.xml.in.h:887 -msgid "pt" -msgstr "pt" +msgid "Left Alt (while pressed)" +msgstr "Alt izquierdo (mientras está pulsado)" -#: ../rules/base.xml.in.h:888 ../rules/base.extras.xml.in.h:48 -msgid "ro" -msgstr "ro" +#: ../rules/base.xml.in.h:888 +msgid "Left Win (while pressed)" +msgstr "Tecla Windows izquierda (al pulsarla)" -#: ../rules/base.xml.in.h:889 ../rules/base.extras.xml.in.h:49 -msgid "ru" -msgstr "ru" +#: ../rules/base.xml.in.h:889 +msgid "Right Win (while pressed)" +msgstr "La tecla Windows (mientras está pulsada)" #: ../rules/base.xml.in.h:890 -msgid "sd" -msgstr "sd" +msgid "Any Win key (while pressed)" +msgstr "Cualquier tecla Windows (al pulsarla)" #: ../rules/base.xml.in.h:891 -msgid "si" -msgstr "si" +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:892 -msgid "sk" -msgstr "sk" +msgid "Right Ctrl (while pressed)" +msgstr "Ctrl derecho (mientras está pulsado)" #: ../rules/base.xml.in.h:893 -msgid "sl" -msgstr "sl" +msgid "Right Alt" +msgstr "Alt derecho" #: ../rules/base.xml.in.h:894 -msgid "sq" -msgstr "sq" +msgid "Left Alt" +msgstr "Alt izquierdo" -#: ../rules/base.xml.in.h:895 ../rules/base.extras.xml.in.h:51 -msgid "sr" -msgstr "sr" +#: ../rules/base.xml.in.h:895 +msgid "Caps Lock" +msgstr "Bloqueo de mayúsculas" #: ../rules/base.xml.in.h:896 -msgid "sv" -msgstr "sv" +msgid "Shift+Caps Lock" +msgstr "Mayús+Bloq Mayús" #: ../rules/base.xml.in.h:897 -msgid "sw" -msgstr "sw" +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:898 -msgid "syc" -msgstr "syc" +msgid "Left Win (to first layout), Right Win/Menu (to last layout)" +msgstr "Win izquierdo (a la primera distribución), Win/Menu derecho (a la última distribución)" #: ../rules/base.xml.in.h:899 -msgid "ta" -msgstr "ta" +msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" +msgstr "Ctrl izquierdo (a la primera distribución), Ctrl derecho (a la última distribución)" #: ../rules/base.xml.in.h:900 -msgid "te" -msgstr "te" +msgid "Alt+Caps Lock" +msgstr "Alt+Bloq Mayús" #: ../rules/base.xml.in.h:901 -msgid "tg" -msgstr "tg" +msgid "Both Shift keys together" +msgstr "Ambas teclas Mayús juntas" #: ../rules/base.xml.in.h:902 -msgid "th" -msgstr "th" +msgid "Both Alt keys together" +msgstr "Ambas teclas Alt juntas" #: ../rules/base.xml.in.h:903 -msgid "tk" -msgstr "tk" +msgid "Both Ctrl keys together" +msgstr "Ambas teclas Ctrl juntas" #: ../rules/base.xml.in.h:904 -msgid "tn" -msgstr "tn" +msgid "Ctrl+Shift" +msgstr "Ctrl+Mayús" #: ../rules/base.xml.in.h:905 -msgid "tr" -msgstr "tr" +msgid "Left Ctrl+Left Shift" +msgstr "Ctrl izquierdo + Mayús izquierdo" #: ../rules/base.xml.in.h:906 -msgid "uk" -msgstr "uk" +msgid "Right Ctrl+Right Shift" +msgstr "Ctrl derecho + Mayús derecho" #: ../rules/base.xml.in.h:907 -msgid "ur" -msgstr "ur" +msgid "Alt+Ctrl" +msgstr "Alt+Ctrl" #: ../rules/base.xml.in.h:908 -msgid "uz" -msgstr "uz" +msgid "Alt+Shift" +msgstr "Alt+Mayús" #: ../rules/base.xml.in.h:909 -msgid "vi" -msgstr "vi" +msgid "Left Alt+Left Shift" +msgstr "Alt izquierdo + Mayús izquierdo" #: ../rules/base.xml.in.h:910 -msgid "wo" -msgstr "wo" +msgid "Alt+Space" +msgstr "Alt+Espacio" #: ../rules/base.xml.in.h:911 -msgid "xsy" -msgstr "xsy" +msgid "Menu" +msgstr "Menu" #: ../rules/base.xml.in.h:912 -msgid "yo" -msgstr "yo" +msgid "Left Win" +msgstr "Win izquierdo" #: ../rules/base.xml.in.h:913 -msgid "zh" -msgstr "zh" +msgid "Right Win" +msgstr "Windows derecho" -#: ../rules/base.extras.xml.in.h:1 -msgid "APL Keyboard Symbols" -msgstr "Símbolos de teclado APL" +#: ../rules/base.xml.in.h:914 +msgid "Left Shift" +msgstr "Mayús izquierdo" -#: ../rules/base.extras.xml.in.h:3 -msgid "Armenian (OLPC phonetic)" -msgstr "Armenio (OLPC fonético)" +#: ../rules/base.xml.in.h:915 +msgid "Right Shift" +msgstr "Mayús derecho" -#: ../rules/base.extras.xml.in.h:4 -msgid "Atsina" -msgstr "Atsina" +#: ../rules/base.xml.in.h:916 +msgid "Left Ctrl" +msgstr "Ctrl izquierdo" + +#: ../rules/base.xml.in.h:917 +msgid "Right Ctrl" +msgstr "Ctrl derecho" + +#: ../rules/base.xml.in.h:918 +msgid "Scroll Lock" +msgstr "Bloq Despl" + +#: ../rules/base.xml.in.h:919 +msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" +msgstr "Ctrl izquierdo + Ctrl derecho (a la primera distribución), Ctrl derecho + Menú (a la segunda distribución)" + +#: ../rules/base.xml.in.h:920 +msgid "Key to choose 3rd level" +msgstr "Tecla para seleccionar el tercer nivel" + +#: ../rules/base.xml.in.h:921 +msgid "Any Win key" +msgstr "Cualquier tecla Windows" + +#: ../rules/base.xml.in.h:922 +msgid "Any Alt key" +msgstr "Cualquier tecla Alt" + +#: ../rules/base.xml.in.h:923 +msgid "Right Alt, Shift+Right Alt key is Compose" +msgstr "La tecla Alt derecho, Mayús+Alt derecho es tecla Componer" + +#: ../rules/base.xml.in.h:924 +msgid "Right Alt key never chooses 3rd level" +msgstr "La tecla Alt derecho nunca elige el tercer nivel" + +#: ../rules/base.xml.in.h:925 +msgid "Enter on keypad" +msgstr "Intro en el teclado numérico" + +#: ../rules/base.xml.in.h:926 +msgid "Backslash" +msgstr "Contrabarra" + +#: ../rules/base.xml.in.h:927 +msgid "<Less/Greater>" +msgstr "<Menor que/Mayor que>" + +#: ../rules/base.xml.in.h:928 +msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "Bloq Mayús elige el tercer nivel, actúa como un bloqueo de una sola vez al pulsarse junto con otro selector de tercer nivel" + +#: ../rules/base.xml.in.h:929 +msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "Contrabarra elige el tercer nivel, bloquea solo una vez al pulsarse junto con otro selector de tercer nivel" + +#: ../rules/base.xml.in.h:930 +msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "<Menor que/Mayor que> elige el 3º nivel, bloquea solo una vez al pulsarse junto con otro selector de 3º nivel" + +#: ../rules/base.xml.in.h:931 +msgid "Ctrl key position" +msgstr "Posición de la tecla Ctrl" + +#: ../rules/base.xml.in.h:932 +msgid "Caps Lock as Ctrl" +msgstr "Bloq Mayús como Ctrl" + +#: ../rules/base.xml.in.h:933 +msgid "Left Ctrl as Meta" +msgstr "Ctrl izquierdo como Meta" + +#: ../rules/base.xml.in.h:934 +msgid "Swap Ctrl and Caps Lock" +msgstr "Intercambiar Ctrl y Bloq Mayús" + +#: ../rules/base.xml.in.h:935 +msgid "At left of 'A'" +msgstr "A la izquierda de la «A»" + +#: ../rules/base.xml.in.h:936 +msgid "At bottom left" +msgstr "En la parte inferior izquierda" + +#: ../rules/base.xml.in.h:937 +msgid "Right Ctrl as Right Alt" +msgstr "Ctrl derecho como Alt derecho" + +#: ../rules/base.xml.in.h:938 +msgid "Menu as Right Ctrl" +msgstr "Menú como Ctrl derecho" + +#: ../rules/base.xml.in.h:939 +msgid "Right Alt as Right Ctrl" +msgstr "Alt derecho como Ctrl derecho" + +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Intercambiar tecla Alt Izquierda con tecla Ctrl Izquierda" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Intercambiar tecla Windows Izquierda con tecla Ctrl Izquierda" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Tecla Alt como tecla Ctrl, Tecla Ctrl izquierda como tecla Windows, tecla Windows como tecla Alt" + +#: ../rules/base.xml.in.h:943 +msgid "Use keyboard LED to show alternative layout" +msgstr "Usar LED del teclado para mostrar la distribución alternativa" + +#: ../rules/base.xml.in.h:944 +msgid "Num Lock" +msgstr "Bloq Num" + +#: ../rules/base.xml.in.h:945 +msgid "Layout of numeric keypad" +msgstr "Distribución del teclado numérico " + +#: ../rules/base.xml.in.h:946 +msgid "Legacy" +msgstr "Arcaico" + +#: ../rules/base.xml.in.h:947 +msgid "Unicode additions (arrows and math operators)" +msgstr "Adiciones Unicode (flechas y operadores matemáticos)" + +#: ../rules/base.xml.in.h:948 +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:949 +msgid "Legacy Wang 724" +msgstr "Wang 724 arcaico" + +#: ../rules/base.xml.in.h:950 +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:951 +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:952 +msgid "Hexadecimal" +msgstr "Hexadecimal" + +#: ../rules/base.xml.in.h:953 +msgid "ATM/phone-style" +msgstr "Estilo de cajero automático ó teléfono" + +#: ../rules/base.xml.in.h:954 +msgid "Numeric keypad delete key behaviour" +msgstr "Comportamiento de la tecla Supr del teclado numérico" + +#: ../rules/base.xml.in.h:955 +msgid "Legacy key with dot" +msgstr "Tecla arcaica con punto" + +#. Actually, with KP_SEPARATOR, as the old keypad(comma) +#: ../rules/base.xml.in.h:957 +msgid "Legacy key with comma" +msgstr "Tecla arcaica con coma" + +#: ../rules/base.xml.in.h:958 +msgid "Four-level key with dot" +msgstr "Tecla de cuarto nivel con punto" + +#: ../rules/base.xml.in.h:959 +msgid "Four-level key with dot, Latin-9 only" +msgstr "Tecla de cuarto nivel con punto, restricción latin-9" + +#: ../rules/base.xml.in.h:960 +msgid "Four-level key with comma" +msgstr "Tecla de cuarto nivel con coma" + +#: ../rules/base.xml.in.h:961 +msgid "Four-level key with momayyez" +msgstr "Tecla de cuarto nivel con momayyez" + +#. This assumes the KP_ abstract symbols are actually useful for some apps +#. The description needs to be rewritten +#: ../rules/base.xml.in.h:964 +msgid "Four-level key with abstract separators" +msgstr "Tecla de cuarto nivel con separadores abstractos" + +#: ../rules/base.xml.in.h:965 +msgid "Semicolon on third level" +msgstr "Punto y coma en tercer nivel" + +#: ../rules/base.xml.in.h:966 +msgid "Caps Lock key behavior" +msgstr "Comportamiento de Bloq Mayús" + +#: ../rules/base.xml.in.h:967 +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:968 +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:969 +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:970 +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:971 +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:972 +msgid "Make Caps Lock an additional Num Lock" +msgstr "Hacer de Bloq Mayús un Bloq Num adicional" + +#: ../rules/base.xml.in.h:973 +msgid "Swap ESC and Caps Lock" +msgstr "Intercambiar ESC y Bloq Mayús" + +#: ../rules/base.xml.in.h:974 +msgid "Make Caps Lock an additional ESC" +msgstr "Hacer de Bloq Mayús un Esc adicional" + +#: ../rules/base.xml.in.h:975 +msgid "Make Caps Lock an additional Backspace" +msgstr "Hacer de Bloq Mayús un Retroceso adicional" + +#: ../rules/base.xml.in.h:976 +msgid "Make Caps Lock an additional Super" +msgstr "Hacer de Bloq Mayús un Super adicional" + +#: ../rules/base.xml.in.h:977 +msgid "Make Caps Lock an additional Hyper" +msgstr "Hacer de Bloq Mayús un Hyper adicional" + +#: ../rules/base.xml.in.h:978 +msgid "Caps Lock toggles ShiftLock (affects all keys)" +msgstr "Bloq Mayús cambia Mayús de forma que todas las teclas están afectadas" + +#: ../rules/base.xml.in.h:979 +msgid "Caps Lock is disabled" +msgstr "Bloq Mayús está desactivado" + +#: ../rules/base.xml.in.h:980 +msgid "Make Caps Lock an additional Ctrl" +msgstr "Hacer de Bloq Mayús un Ctrl adicional" + +#: ../rules/base.xml.in.h:981 +msgid "Alt/Win key behavior" +msgstr "Comportamiento de la tecla Alt/Windows" + +#: ../rules/base.xml.in.h:982 +msgid "Add the standard behavior to Menu key" +msgstr "Añadir el comportamiento estándar a la tecla Menú." + +#: ../rules/base.xml.in.h:983 +msgid "Alt and Meta are on Alt keys" +msgstr "Alt y Meta están en las teclas Alt" + +#: ../rules/base.xml.in.h:984 +msgid "Alt is mapped to Win keys (and the usual Alt keys)" +msgstr "Alt está mapeada en las teclas Windows (y las teclas Alt usuales)" + +#: ../rules/base.xml.in.h:985 +msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" +msgstr "Control está mapeada en las teclas Windows (y las teclas Ctrl usuales)" + +#: ../rules/base.xml.in.h:986 +msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" +msgstr "Control está mapeada en las teclas Alt, Alt está mapeado en las teclas Windows" + +#: ../rules/base.xml.in.h:987 +msgid "Meta is mapped to Win keys" +msgstr "Meta está mapeada a las teclas Windows" + +#: ../rules/base.xml.in.h:988 +msgid "Meta is mapped to Left Win" +msgstr "Meta está mapeada a la tecla Windows izquierdo" + +#: ../rules/base.xml.in.h:989 +msgid "Hyper is mapped to Win-keys" +msgstr "Hyper está mapeada a las teclas Windows" + +#: ../rules/base.xml.in.h:990 +msgid "Alt is mapped to Right Win, Super to Menu" +msgstr "Alt está mapeada a la tecla Windows derecho y Super a la tecla Menú" + +#: ../rules/base.xml.in.h:991 +msgid "Alt is swapped with Win" +msgstr "Alt está cambiado con la tecla Windows" + +#: ../rules/base.xml.in.h:992 +msgid "Position of Compose key" +msgstr "Posición de la tecla Componer" + +#: ../rules/base.xml.in.h:993 +msgid "3rd level of Left Win" +msgstr "3er nivel de tecla windows izquierda" + +#: ../rules/base.xml.in.h:994 +msgid "3rd level of Right Win" +msgstr "3er nivel de tecla windows derecha" + +#: ../rules/base.xml.in.h:995 +msgid "3rd level of Menu" +msgstr "3er nivel de tecla Menu" + +#: ../rules/base.xml.in.h:996 +msgid "3rd level of Left Ctrl" +msgstr "3er nivel de Ctrl izquierdo" + +#: ../rules/base.xml.in.h:997 +msgid "3rd level of Right Ctrl" +msgstr "3er nivel de Control derecho" + +#: ../rules/base.xml.in.h:998 +msgid "3rd level of Caps Lock" +msgstr "3er nivel de tecla Bloq Mayús" + +#: ../rules/base.xml.in.h:999 +msgid "3rd level of <Less/Greater>" +msgstr "3er nivel de <Menor que/Mayor que>" + +#: ../rules/base.xml.in.h:1000 +msgid "Pause" +msgstr "Pausa" + +#: ../rules/base.xml.in.h:1001 +msgid "PrtSc" +msgstr "PrtSc" + +#: ../rules/base.xml.in.h:1002 +msgid "Miscellaneous compatibility options" +msgstr "Opciones misceláneas de compatiblidad" + +#: ../rules/base.xml.in.h:1003 +msgid "Default numeric keypad keys" +msgstr "Teclas del teclado numérico predeterminado" + +#: ../rules/base.xml.in.h:1004 +msgid "Numeric keypad keys always enter digits (as in Mac OS)" +msgstr "Las teclas del teclado numérico siempre introducen dígitos (como en Mac OS)" + +#: ../rules/base.xml.in.h:1005 +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:1006 +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:1007 +msgid "Special keys (Ctrl+Alt+<key>) handled in a server" +msgstr "Teclas especiales (Ctrl+Alt+«tecla») manipuladas en un servidor" + +#: ../rules/base.xml.in.h:1008 +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:1009 +msgid "Shift cancels Caps Lock" +msgstr "Mayús cancela Bloq Mayús" + +#: ../rules/base.xml.in.h:1010 +msgid "Enable extra typographic characters" +msgstr "Activar caracteres tipográficos adicionales" + +#: ../rules/base.xml.in.h:1011 +msgid "Both Shift keys together toggle Caps Lock" +msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús" + +#: ../rules/base.xml.in.h:1012 +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:1013 +msgid "Both Shift keys together toggle ShiftLock" +msgstr "Ambas teclas Mayús juntas conmutan Bloq Mayús" + +#: ../rules/base.xml.in.h:1014 +msgid "Shift + NumLock toggles PointerKeys" +msgstr "Shift + Bloq Num cambia las teclas de flechas" + +#: ../rules/base.xml.in.h:1015 +msgid "Allow breaking grabs with keyboard actions (warning: security risk)" +msgstr "Permitir tomar interrupciones con el teclado (Peligro: riesgos de seguridad)" + +# dice literalmente "árbol" he visto que se utiliza como sinónimo de servidor. +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Permitir tomar y loguearse al árbol windows" + +#: ../rules/base.xml.in.h:1017 +msgid "Adding currency signs to certain keys" +msgstr "Añadir símbolo de divisa a algunas teclas" + +#: ../rules/base.xml.in.h:1018 +msgid "Euro on E" +msgstr "Euro en la E" + +#: ../rules/base.xml.in.h:1019 +msgid "Euro on 2" +msgstr "Euro en el 2" + +#: ../rules/base.xml.in.h:1020 +msgid "Euro on 4" +msgstr "Euro en el 4" + +#: ../rules/base.xml.in.h:1021 +msgid "Euro on 5" +msgstr "Euro en el 5" + +#: ../rules/base.xml.in.h:1022 +msgid "Rupee on 4" +msgstr "Rupia en el 4" + +#: ../rules/base.xml.in.h:1023 +msgid "Key to choose 5th level" +msgstr "Tecla para seleccionar el 5o nivel" + +#: ../rules/base.xml.in.h:1024 +msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "<Menor que/Mayor que> elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" + +#: ../rules/base.xml.in.h:1025 +msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Alt derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" + +#: ../rules/base.xml.in.h:1026 +msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Win izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" + +#: ../rules/base.xml.in.h:1027 +msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Win derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel" + +#: ../rules/base.xml.in.h:1028 +msgid "Using space key to input non-breakable space character" +msgstr "Usar la tecla espacio para introducir un carácter de espacio no separable" + +#: ../rules/base.xml.in.h:1029 +msgid "Usual space at any level" +msgstr "Espacio usual en cualquier nivel" + +#: ../rules/base.xml.in.h:1030 +msgid "Non-breakable space character at second level" +msgstr "Carácter de espacio no separable en el segundo nivel" + +#: ../rules/base.xml.in.h:1031 +msgid "Non-breakable space character at third level" +msgstr "Carácter de espacio no separable en el tercer nivel" + +#: ../rules/base.xml.in.h:1032 +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:1033 +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:1034 +msgid "Non-breakable space character at fourth level" +msgstr "Carácter de espacio no separable en el cuarto nivel" + +#: ../rules/base.xml.in.h:1035 +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:1036 +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:1037 +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:1038 +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:1039 +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:1040 +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:1041 +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:1042 +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:1043 +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:1044 +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:1045 +msgid "Japanese keyboard options" +msgstr "Opciones de teclado japonés" + +#: ../rules/base.xml.in.h:1046 +msgid "Kana Lock key is locking" +msgstr "La tecla Bloq Kana está bloqueando" + +#: ../rules/base.xml.in.h:1047 +msgid "NICOLA-F style Backspace" +msgstr "Retroceso estilo NICOLA-F" + +#: ../rules/base.xml.in.h:1048 +msgid "Make Zenkaku Hankaku an additional ESC" +msgstr "Hacer de Zenkaku Hankaku un Esc adicional" + +#: ../rules/base.xml.in.h:1049 +msgid "Adding Esperanto supersigned letters" +msgstr "Añadir las tildes del esperanto" + +#: ../rules/base.xml.in.h:1050 +msgid "To the corresponding key in a Qwerty layout" +msgstr "A la tecla correspondiente en un teclado Qwerty." + +#: ../rules/base.xml.in.h:1051 +msgid "To the corresponding key in a Dvorak layout" +msgstr "A la tecla correspondiente en un teclado Dvorak." + +#: ../rules/base.xml.in.h:1052 +msgid "To the corresponding key in a Colemak layout" +msgstr "A la tecla correspondiente en un teclado Colemak." + +#: ../rules/base.xml.in.h:1053 +msgid "Maintain key compatibility with old Solaris keycodes" +msgstr "Mantener compatibilidad de teclas con los viejos códigos de Solaris" + +#: ../rules/base.xml.in.h:1054 +msgid "Sun Key compatibility" +msgstr "Compatibilidad con tecla Sun" + +#: ../rules/base.xml.in.h:1055 +msgid "Key sequence to kill the X server" +msgstr "Secuencia de teclas para matar el servidor X" + +#: ../rules/base.xml.in.h:1056 +msgid "Ctrl + Alt + Backspace" +msgstr "Control + Alt + Retroceso" + +#: ../rules/base.extras.xml.in.h:1 +msgid "apl" +msgstr "apl" + +#: ../rules/base.extras.xml.in.h:2 +msgid "APL keyboard symbols" +msgstr "Símbolos de teclado APL" #: ../rules/base.extras.xml.in.h:5 -msgid "Avestan" -msgstr "Avéstico" +msgid "kut" +msgstr "kut" #: ../rules/base.extras.xml.in.h:6 -msgid "Couer D'alene Salish" -msgstr "Coeur d’Alene salish" +msgid "Kutenai" +msgstr "Kutenai" #: ../rules/base.extras.xml.in.h:7 -msgid "Crimean Tatar (Dobruja Q)" -msgstr "Tártaro de Crimea (Dobruca Q)" +msgid "shs" +msgstr "shs" -#: ../rules/base.extras.xml.in.h:9 -msgid "English (US, international AltGr Unicode combining)" -msgstr "Inglés (EE. UU., internacional combinando AltGr Unicode)" +#: ../rules/base.extras.xml.in.h:8 +msgid "Secwepemctsin" +msgstr "Shuswap" -#: ../rules/base.extras.xml.in.h:10 -msgid "English (US, international AltGr Unicode combining, alternative)" -msgstr "Inglés (EE. UU., internacional combinando AltGr Unicode, alternativa)" +#: ../rules/base.extras.xml.in.h:9 +msgid "Multilingual (Canada, Sun Type 6/7)" +msgstr "Multilingüe (Canada, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:13 +#: ../rules/base.extras.xml.in.h:12 msgid "German (US keyboard with German letters)" msgstr "Alemán (teclado estadounidense con letras alemanas)" -#: ../rules/base.extras.xml.in.h:14 +#: ../rules/base.extras.xml.in.h:13 msgid "German (with Hungarian letters and no dead keys)" msgstr "Alemán (con letras húngaras y sin teclas muertas)" -#: ../rules/base.extras.xml.in.h:15 -msgid "Kutenai" -msgstr "Kutenai" +#: ../rules/base.extras.xml.in.h:14 +msgid "German (Sun Type 6/7)" +msgstr "Alemán (Sun tipo 6/7)" #: ../rules/base.extras.xml.in.h:17 -msgid "Latvian (US Colemak)" -msgstr "Letón (Colemark RU)" +msgid "Avestan" +msgstr "Avéstico" -#: ../rules/base.extras.xml.in.h:18 -msgid "Latvian (US Colemak, apostrophe variant)" -msgstr "Letón (Colemark de RU, variante con apóstrofo)" +#: ../rules/base.extras.xml.in.h:20 +msgid "Lithuanian (US Dvorak with Lithuanian letters)" +msgstr "Lituano (Dvorak de EE. UU. con letras lituanas)" + +#: ../rules/base.extras.xml.in.h:21 +msgid "Lithuanian (Sun Type 6/7)" +msgstr "Lituano (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:19 +#: ../rules/base.extras.xml.in.h:24 msgid "Latvian (US Dvorak)" msgstr "Letón (Dvorak de EE. UU.)" -#: ../rules/base.extras.xml.in.h:20 +#: ../rules/base.extras.xml.in.h:25 msgid "Latvian (US Dvorak, Y variant)" msgstr "Letón (Dvorak de EE. UU., variante Y)" -#: ../rules/base.extras.xml.in.h:21 +#: ../rules/base.extras.xml.in.h:26 msgid "Latvian (US Dvorak, minus variant)" msgstr "Letón (Dvorak de EE. UU., variante menos)" -#: ../rules/base.extras.xml.in.h:22 +#: ../rules/base.extras.xml.in.h:27 msgid "Latvian (programmer US Dvorak)" msgstr "Letón (programador, Dvorak de EE. UU.)" -#: ../rules/base.extras.xml.in.h:23 +#: ../rules/base.extras.xml.in.h:28 msgid "Latvian (programmer US Dvorak, Y variant)" msgstr "Letón (programador, Dvorak de EE. UU., variante Y)" -#: ../rules/base.extras.xml.in.h:24 +#: ../rules/base.extras.xml.in.h:29 msgid "Latvian (programmer US Dvorak, minus variant)" msgstr "Letón (programador, Dvorak de EE. UU., variante menos)" -#: ../rules/base.extras.xml.in.h:26 -msgid "Lithuanian (US Dvorak with Lithuanian letters)" -msgstr "Lituano (Dvorak de EE. UU. con letras lituanas)" +#: ../rules/base.extras.xml.in.h:30 +msgid "Latvian (US Colemak)" +msgstr "Letón (Colemak EE.UU.)" -#: ../rules/base.extras.xml.in.h:29 +#: ../rules/base.extras.xml.in.h:31 +msgid "Latvian (US Colemak, apostrophe variant)" +msgstr "Letón (Colemak EE.UU., variante con apóstrofo)" + +#: ../rules/base.extras.xml.in.h:32 +msgid "Latvian (Sun Type 6/7)" +msgstr "Letón (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:35 +msgid "English (US, international AltGr Unicode combining)" +msgstr "Inglés (EE. UU., internacional combinando Unicode por AltGr)" + +#: ../rules/base.extras.xml.in.h:36 +msgid "English (US, international AltGr Unicode combining, alternative)" +msgstr "Inglés (EE. UU., internacional combinando Unicode por AltGr, alternativo)" + +#: ../rules/base.extras.xml.in.h:37 +msgid "Atsina" +msgstr "Atsina" + +#: ../rules/base.extras.xml.in.h:38 +msgid "Coeur d'Alene Salish" +msgstr "Cœur d’Alene Salish" + +#: ../rules/base.extras.xml.in.h:39 +msgid "English (US, Sun Type 6/7)" +msgstr "Inglés (EE. UU, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Inglés (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polaco (internacional con teclas muertas)" -#: ../rules/base.extras.xml.in.h:31 +#: ../rules/base.extras.xml.in.h:44 +msgid "Polish (Colemak)" +msgstr "Polaco (Colemak)" + +#: ../rules/base.extras.xml.in.h:45 +msgid "Polish (Sun Type 6/7)" +msgstr "Polaco (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:49 +msgid "Crimean Tatar (Dobruja Q)" +msgstr "Tártaro de Crimea (Dobruca Q)" + +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumanía (tipo de pulsación ergonómica)" -#: ../rules/base.extras.xml.in.h:33 +#: ../rules/base.extras.xml.in.h:51 +msgid "Romanian (Sun Type 6/7)" +msgstr "Rumano (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:54 +msgid "Serbian (combining accents instead of dead keys)" +msgstr "Serbio (combinar tildes en lugar de teclas muertas)" + +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Ruso (con distribución ucraniana y bielorrusa)" -#: ../rules/base.extras.xml.in.h:34 -msgid "Secwepemctsin" -msgstr "Shuswap" +#: ../rules/base.extras.xml.in.h:58 +msgid "Russian (Sun Type 6/7)" +msgstr "Ruso (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:36 -msgid "Serbian (combining accents instead of dead keys)" -msgstr "Serbio (combinar tildes en lugar de teclas muertas)" +#: ../rules/base.extras.xml.in.h:61 +msgid "Armenian (OLPC phonetic)" +msgstr "Armenio (OLPC fonético)" -#: ../rules/base.extras.xml.in.h:37 -msgid "apl" -msgstr "apl" +#: ../rules/base.extras.xml.in.h:64 +msgid "Hebrew (Biblical, SIL phonetic)" +msgstr "Hebreo (bíblico, fonética SIL)" -#: ../rules/base.extras.xml.in.h:44 -msgid "kut" -msgstr "kut" +#: ../rules/base.extras.xml.in.h:67 +msgid "Arabic (Sun Type 6/7)" +msgstr "Árabe (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:50 -msgid "shs" -msgstr "shs" +#: ../rules/base.extras.xml.in.h:70 +msgid "Belgian (Sun Type 6/7)" +msgstr "Belga (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:73 +msgid "Portuguese (Brazil, Sun Type 6/7)" +msgstr "Portugués (Brasil, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:76 +msgid "Czech (Sun Type 6/7)" +msgstr "Checo (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:79 +msgid "Danish (Sun Type 6/7)" +msgstr "Danés (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:82 +msgid "Dutch (Sun Type 6/7)" +msgstr "Holandés (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:85 +msgid "Estonian (Sun Type 6/7)" +msgstr "Estonio (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:88 +msgid "Finnish (Sun Type 6/7)" +msgstr "Finlandés (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:90 +msgid "French (Sun Type 6/7)" +msgstr "Francés (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:93 +msgid "Greek (Sun Type 6/7)" +msgstr "Griego (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:96 +msgid "Italian (Sun Type 6/7)" +msgstr "Italiano (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:99 +msgid "Japanese (Sun Type 6)" +msgstr "Japonés (Sun tipo 6)" + +#: ../rules/base.extras.xml.in.h:100 +msgid "Japanese (Sun Type 7 - pc compatible)" +msgstr "Japonés (Sun tipo 7 - compatible con PC)" + +#: ../rules/base.extras.xml.in.h:101 +msgid "Japanese (Sun Type 7 - sun compatible)" +msgstr "Japonés (Sun tipo 7 - compatible con Sun)" + +#: ../rules/base.extras.xml.in.h:104 +msgid "Norwegian (Sun Type 6/7)" +msgstr "Noruego (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:106 +msgid "Portuguese (Sun Type 6/7)" +msgstr "Portugués (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:109 +msgid "Slovak (Sun Type 6/7)" +msgstr "Eslovaco (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:112 +msgid "Spanish (Sun Type 6/7)" +msgstr "Español (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:115 +msgid "Swedish (Sun Type 6/7)" +msgstr "Sueco (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:117 +msgid "German (Switzerland, Sun Type 6/7)" +msgstr "Alemán (Suiza, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:118 +msgid "French (Switzerland, Sun Type 6/7)" +msgstr "Francés (Suiza, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:121 +msgid "Turkish (Sun Type 6/7)" +msgstr "Turco (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:124 +msgid "Ukrainian (Sun Type 6/7)" +msgstr "Ucraniano (Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:126 +msgid "English (UK, Sun Type 6/7)" +msgstr "Inglés (UK, Sun tipo 6/7)" + +#: ../rules/base.extras.xml.in.h:129 +msgid "Korean (Sun Type 6/7)" +msgstr "Coreano (Sun tipo 6/7)" + +#~ msgid "Bengali" +#~ msgstr "Bengalí" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugués (Brasil, nativo para esperanto)" + +#~ msgid "<Less/Greater> chooses 5th level and activates level5-Lock when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "<Menor que/Mayor que> 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" + +#~ msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "<Menor que/Mayor que> elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "Catalan" +#~ msgstr "Catalán" + +#~ msgid "Compose key position" +#~ msgstr "Posición de la tecla Componer" + +#~ msgid "English (Cameroon Dvorak)" +#~ msgstr "Inglés (Dvorak de Camerún)" + +#~ msgid "English (layout toggle on multiply/divide key)" +#~ msgstr "Inglés (cambio de distribución en la tecla multiplicar/dividir)" + +#~ msgid "Key(s) to change layout" +#~ msgstr "Tecla(s) para cambiar la distribución" + +#~ msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "Win izquierdo elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ 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" + +#~ msgid "Numeric keypad layout selection" +#~ msgstr "Selección de distribución de teclado numérico" + +#~ 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" + +#~ msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "Alt derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser, one press releases the lock" +#~ msgstr "Win derecho elige el 5º nivel, bloquea al pulsarse junto con otro selector de 5º nivel, una pulsación libera el bloqueo" + +#~ msgid "Serbian (Z and ZHE swapped)" +#~ msgstr "Serbio (Z y ZHE intercambiados)" + +#~ msgid "Serbian (with guillemets)" +#~ msgstr "Serbio (con guillemots)" + +#~ msgid "Toggle PointerKeys with Shift + NumLock." +#~ msgstr "Cambiar las teclas de flechas con Mayús + Bloq Num" + +#~ msgid "ca" +#~ msgstr "ca" #~ msgid "English (Cameroon qwerty)" #~ msgstr "Inglés (qwerty de Camerún)" @@ -3780,15 +4255,6 @@ msgstr "shs" #~ msgid "French (Cameroon azerty)" #~ msgstr "Francés (azerty de Camerún)" -#~ msgid "German (qwerty)" -#~ msgstr "Alemán (qwerty)" - -#~ msgid "Make Caps Lock an additional Ctrl" -#~ msgstr "Hacer de Bloq Mayús un Ctrl adicional" - -#~ msgid "Meta on Left Ctrl" -#~ msgstr "Meta en Ctrl izquierda" - #~ msgid "Right Ctrl is mapped to Menu" #~ msgstr "Ctrl derecho está mapeada a la tecla Menú" @@ -3807,9 +4273,6 @@ msgstr "shs" #~ msgid "Danish (Mac)" #~ msgstr "Danés (Mac)" -#~ msgid "English (UK, Mac)" -#~ msgstr "Inglés (RU, Mac)" - #~ msgid "Finnish (Mac)" #~ msgstr "Croata (Mac_Croatian)" @@ -3891,9 +4354,6 @@ msgstr "shs" #~ msgid "Swiss" #~ msgstr "Suizo" -#~ msgid "Swiss (legacy)" -#~ msgstr "Suizo (heredado)" - #~ msgid "Turkish (Crimean Tatar Turkish Alt-Q)" #~ msgstr "Turco (Alt-Q turca del tártaro de Crimea)" @@ -3996,9 +4456,6 @@ msgstr "shs" #~ msgid "Aze" #~ msgstr "Aze" -#~ msgid "Bangladesh" -#~ msgstr "Bangladesh" - #~ msgid "Bel" #~ msgstr "Bel" @@ -4209,9 +4666,6 @@ msgstr "shs" #~ msgid "Mli" #~ msgstr "Mli" -#~ msgid "Mmr" -#~ msgstr "Mmr" - #~ msgid "Mng" #~ msgstr "Mng" @@ -4465,9 +4919,6 @@ msgstr "shs" #~ msgid "Left Win-key is Compose." #~ msgstr "La tecla Windows izquierda es Componer." -#~ msgid "Macintosh layout" -#~ msgstr "Distribución Macintosh" - #~ msgid "Menu is Compose." #~ msgstr "Menú es Componer." diff --git a/xorg-server/xkeyboard-config/po/fr.po b/xorg-server/xkeyboard-config/po/fr.po index d850685da..93d7197cc 100644 --- a/xorg-server/xkeyboard-config/po/fr.po +++ b/xorg-server/xkeyboard-config/po/fr.po @@ -9,10 +9,10 @@ # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-15 20:13+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 23:58+0100\n" "Last-Translator: Jean-Philippe Guérard <jean-philippe.guerard@corbeaunoir.org>\n" "Language-Team: French <traduc@traduc.org>\n" "Language: fr\n" @@ -826,7 +826,7 @@ msgid "English (programmer Dvorak)" msgstr "Anglais (Dvorak pour programmeur)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -902,11 +902,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Ouzbek (Afghanistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabe" @@ -944,11 +944,11 @@ msgid "Albanian" msgstr "Albanais" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Arménien" @@ -1024,11 +1024,11 @@ msgid "Belarusian (Latin)" msgstr "Biélorusse (latin)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belge" @@ -1060,17 +1060,17 @@ msgstr "Belge (touches mortes Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belge (Wang modèle 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengali" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengali (Probhat)" #. Keyboard indicator for Indian layouts @@ -1083,28 +1083,28 @@ msgid "Indian" msgstr "Indien" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengali (Inde)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengali (Inde, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengali (Inde, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengali (Inde, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengali (Inde, Uni Gitanjali)" # InScript = Indian Script #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengali (Inde, Inscript Baishakhi)" #. Keyboard indicator for Gujarati layouts @@ -1298,11 +1298,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosniaque (clavier US avec lettres bosniaques)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugais (Brésil)" @@ -1317,16 +1317,16 @@ msgstr "Portugais (Brésil, Dvorak)" # https://secure.wikimedia.org/wikipedia/en/wiki/Dvorak_Simplified_Keyboard#Other_languages # http://tecladobrasileiro.com.br/images/stories/br-nativo/br-nativo-simples.svg #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" -msgstr "Portugais (Brésil, BR-Nativo)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Portugais (Brésil, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugais (Brésil, Nativo pour claviers US)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugais (Brésil, BR-Nativo pour l'Espéranto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Espéranto (Brésil, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1481,2546 +1481,2566 @@ msgstr "Tibétain" msgid "Tibetan (with ASCII numerals)" msgstr "Tibétain (avec chiffres ASCII)" -# https://secure.wikimedia.org/wikipedia/fr/wiki/Ou%C3%AFghour #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +# https://secure.wikimedia.org/wikipedia/fr/wiki/Ou%C3%AFghour +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Ouïghour" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Croate" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Croate (utilise des guillemets typo. au lieu des guillemets simples)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Croate (utilise les digraphes croates)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Croate (clavier US avec digraphes croates)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Croate (clavier US avec lettres croates)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tchèque" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tchèque (avec la touche <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tchèque (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tchèque (qwerty, barre oblique inverse étendue)" # http://repo.or.cz/w/ucwcs-xkb.git/blob_plain/HEAD:/README # http://www.ucw.cz/ -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 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:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tchèque (Dvorak US avec support UCW CZ)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Danois" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Danois (sans touche morte)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Danois (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Danois (Macintosh, sans touche morte)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Danois (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Néerlandais" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Néerlandais (touches mortes Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Néerlandais (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Néerlandais (standard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estonien" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estonien (sans touche morte)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estonien (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estonien (clavier US avec lettres estoniennes)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Persan -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persan" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persan (avec pavé numérique persan)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurde (Iran, Q latin)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurde (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurde (Iran, Alt-Q latin)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurde (Iran, arabe-latin)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Irakien" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurde (Irak, Q latin)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurde (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurde (Irak, Alt-Q latin)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurde (Irak, arabe-latin)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Féroïen" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Féroïen (sans touche morte)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finnois" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finnois (classique)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finnois (classique, sans touche morte)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Sami du Nord (Finlande)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finnois (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Français" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Français (sans touche morte)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Français (touches mortes Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Français (variante)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Français (variante, Latin-9 uniquement)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Français (variante, sans touche morte)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Français (variante, touches mortes Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Français (variante obsolète)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Français (variante obsolète, sans touche morte)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Français (variante obsolète, touches mortes Sun)" # http://bepo.fr -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Français (Bépo, ergonomique, façon Dvorak)" # http://bepo.fr -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 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:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Français (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Français (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Français (breton)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occitan" # As the name suggests, this layout is based on French AZERTY keyboard. The layout is based on the Georgian AZERTY layout model by Georgian language and localizaton expert Vasil "Tskapo" Kekelia. # # http://www.gakartuleba.org/layouts/index.php -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Géorgien (France, azerty Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Anglais (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Anglais (Ghana, multilingue)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Éwé" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" # https://secure.wikimedia.org/wikipedia/en/wiki/Fula_language -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Peul" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" # Langue du Ghana. -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" # https://secure.wikimedia.org/wikipedia/fr/wiki/Haoussa -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Haoussa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" # http://www.gillbt.org/ -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Anglais (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Français (Guinée)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Géorgien" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Géorgien (ergonomique)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Géorgien (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russe (Géorgie)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Ossète (Géorgie)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Allemand" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Allemand (accent aigu en touche morte)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Allemand (accents aigu et grave en touches mortes)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Allemand (sans touche morte)" # https://de.wikipedia.org/wiki/ISO/IEC_9995 -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Allemand (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Roumain (Allemagne)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Roumain (Allemagne, sans touche morte)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Allemand (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Allemand (touches mortes Sun)" # https://secure.wikimedia.org/wikipedia/en/wiki/Keyboard_layout#Neo -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Allemand (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Allemand (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Allemand (Macintosh, sans touche morte)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Bas-sorabe" # https://secure.wikimedia.org/wikipedia/fr/wiki/Bas-sorabe -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Bas-sorabe (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Allemand (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russe (Allemagne, phonétique)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Allemand (obsolète)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grec" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grec (simple)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grec (étendu)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grec (sans touche morte)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Diacritiques_de_l%27alphabet_grec -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grec (polytonique)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" # https://secure.wikimedia.org/wikipedia/fr/wiki/Hongrois -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Hongrois" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Hongrois (standard)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Hongrois (sans touche morte)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Hongrois (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Hongrois (101, qwertz, virgule, touches mortes)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Hongrois (101, qwertz, virgule, touches mortes)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Hongrois (101, qwertz, point, touches mortes)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Hongrois (101, qwertz, point, sans touche morte)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Hongrois (101, qwerty, virgule, touches mortes)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Hongrois (101, qwerty, virgule, sans touche morte)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Hongrois (101, qwerty, point, touches mortes)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Hongrois (101, qwerty, point, sans touche morte)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Hongrois (102, qwertz, virgule, touches mortes)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Hongrois (102, qwertz, virgule, sans touche morte)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Hongrois (102, qwertz, point, touches mortes)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Hongrois (102, qwertz, point, sans touche morte)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Hongrois (102, qwerty, virgule, touches mortes)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Hongrois (102, qwerty, virgule, sans touche morte)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Hongrois (102, qwerty, point, touches mortes)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Hongrois (102, qwerty, point, sans touche morte)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" # https://secure.wikimedia.org/wikipedia/fr/wiki/Islandais -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandais" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandais (touches mortes Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandais (sans touche morte)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandais (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandais (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hébreu" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hébreu (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hébreu (phonétique)" # http://wiki.jewishliturgy.org/Hebrew_Font_and_Keyboard_Layout_Setup -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hébreu (biblique, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italien" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italien (sans touche morte)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italien (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italien (clavier US avec lettres italiennes)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Oss%C3%A8te -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Géorgien (Italie)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italien (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japonais" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japonais (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japonais (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japonais (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japonais (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japonais (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" # https://secure.wikimedia.org/wikipedia/fr/wiki/Kirghize_%28langue%29 -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirghize" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirghize (phonétique)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" # https://secure.wikimedia.org/wikipedia/fr/wiki/Khmer -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Cambodge)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakh -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazakh" # https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakhstan # https://secure.wikimedia.org/wikipedia/fr/wiki/Kazakh -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russe (Kazakhstan, avec kazakh)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazakh (avec russe)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" # https://secure.wikimedia.org/wikipedia/fr/wiki/Lao_%28langue%29 -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" # STEA = Agence pour la science, la technologie et l'environnement. # http://www.clear-vu.com.hk/resources/lao_keyboard.asp -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (disposition proposée par la STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Espagnol (Amérique latine)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Espagnol (Amérique latine, sans touche morte)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Espagnol (Amérique latine, y compris la touche morte tilde)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Espagnol (Amérique latine, touches mortes Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" # https://secure.wikimedia.org/wikipedia/fr/wiki/Lituanien -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Lituanien" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Lituanien (standard)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Lituanien (clavier US avec lettres lituaniennes)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Lituanien (IBM LST 1205-92)" # http://lekp.info/LithuanianErgonomic -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Lituanien (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Lituanien (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Letton" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Letton (variante apostrophe)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Letton (variante tilde)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Letton (variante F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Letton (moderne)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Letton (ergonomique, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Letton (adapté)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" # https://secure.wikimedia.org/wikipedia/fr/wiki/Mont%C3%A9n%C3%A9grin -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Monténégrin" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Monténégrin (cyrillique)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Monténégrin (cyrillique, Z et ZHE intervertis)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Monténégrin (Unicode latin)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Monténégrin (qwerty latin)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Monténégrin (qwerty Unicode latin)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Monténégrin (cyrillique avec guillemets)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Monténégrin (latin avec guillemets)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Mac%C3%A9donien -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macédonien" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macédonien (sans touche morte)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" # https://secure.wikimedia.org/wikipedia/fr/wiki/Maltais -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltais" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltais (avec disposition US)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" # https://secure.wikimedia.org/wikipedia/fr/wiki/Mongol -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongol" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" # https://secure.wikimedia.org/wikipedia/fr/wiki/Norv%C3%A9gien -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norvégien" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norvégien (sans touche morte)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norvégien (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Sami du Nord (Norvège)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Sami du Nord (Norvège, sans touche morte)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norvégien (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norvégien (Macintosh, sans touche morte)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norvégien (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" # https://secure.wikimedia.org/wikipedia/fr/wiki/Polonais -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polonais" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polonais (obsolète)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polonais (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polonais (Dvorak)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Disposition_Dvorak # # Sur le clavier Dvorak, les guillemets sont sur une seule et même touche. -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polonais (Dvorak, guillemets polonais sur la touche guillemets)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polonais (Dvorak, guillemets polonais sur le « 1 »)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Cachoube -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Cachoube" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russe (Pologne, Dvorak phonétique)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polonais (Dvorak pour le programmeur)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugais" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugais (sans touche morte)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugais (touches mortes Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugais (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugais (Macintosh, sans touche morte)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugais (Macintosh, touches mortes Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugais (PT-Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugais (Nativo pour claviers US)" # http://tecladobrasileiro.com.br/index.php?option=com_content&task=view&id=20&Itemid=62 -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Espéranto (Portugal, PT-Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" # https://secure.wikimedia.org/wikipedia/fr/wiki/Roumain -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Roumain" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Roumain (cédille)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Roumain (standard)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Roumain (standard, cédille)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Roumain (touche Windows)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russe" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russe (phonétique)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russe (phonétique, touches Windows)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russe (machine à écrire)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russe (obsolète)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russe (machine à écrire, obsolète)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatar" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Ossète (obsolète)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Oss%C3%A8te -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Ossète (touches Windows)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Chuvash" # https://secure.wikimedia.org/wikipedia/fr/wiki/Tchouvache -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Tchouvache (latin)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Oudmourte" # https://secure.wikimedia.org/wikipedia/fr/wiki/Komi_%28langue%29 -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" # https://secure.wikimedia.org/wikipedia/fr/wiki/Iakoute -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Iakute" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russe (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russe (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbe (Russe)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Bachkir -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Bachkir" # https://secure.wikimedia.org/wikipedia/fr/wiki/Mari_%28langue%29 -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbe" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbe (cyrillique, Z et ZHE intervertis)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbe (Latin)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbe (latin, Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbe (latin, qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbe (latin, Unicode, qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbe (cyrillique avec guillemets)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbe (Latin avec guillemets)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Ruthène pannonien (homophonique)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Ruthène pannonien" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" # https://secure.wikimedia.org/wikipedia/fr/wiki/Slov%C3%A8ne -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Slovène" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Slovène (utilise des guillemets typographiques au lieu des guillemets simples)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slovène (clavier US avec lettres slovènes)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Slovaque -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slovaque" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slovaque (barre oblique inverse étendue)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slovaque (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slovaque (qwerty, barre oblique inverse étendue)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Espagnol" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Espagnol (sans touche morte)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Espagnol (y compris la touche morte tilde)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Espagnol (touches mortes Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Espagnol (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturien (Espagne, avec H point bas et L point bas)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Catalan (Espagne, avec L point médian)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Espagnol (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" # https://secure.wikimedia.org/wikipedia/fr/wiki/Su%C3%A9dois -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Suédois" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Suédois (sans touche morte)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Suédois (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russe (Suède, phonétique)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russe (Suède, phonétique, sans touche morte)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Sami du Nord (Suède)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Suédois (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Suédois (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Langue des signes suédoise" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Allemand (Suisse)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Allemand (Suisse, obsolète)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Allemand (Suisse, sans touche morte)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Allemand (Suisse, touches mortes Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Français (Suisse)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Français (Suisse, sans touche morte)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Français (Suisse, touches mortes Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Français (Suisse, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Allemand (Suisse, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabe (Syrie)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" # https://secure.wikimedia.org/wikipedia/fr/wiki/Syriaque -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syriaque" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syriaque (phonétique)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurde (Syrie, Q latin)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurde (Syrie, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurde (Syrie, Alt-Q latin)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" # https://secure.wikimedia.org/wikipedia/fr/wiki/Tadjik -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadjik" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadjik (obsolète)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Cingalais (phonétique)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamoul (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamoul (Sri Lanka, machine à écrire, TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" # https://secure.wikimedia.org/wikipedia/fr/wiki/Tha%C3%AF_%28langue%29 -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thaï" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thaï (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thaï (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" # https://secure.wikimedia.org/wikipedia/fr/wiki/Turc -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turc" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turc (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turc (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turc (touches mortes Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurde (Turquie, Q latin)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurde (Turquie, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurde (Turquie, Alt-Q latin)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turc (international avec touches mortes)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Tatar de Crimée (Q turc)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Tatar de Crimée (F turc)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Tatar de Crimée (Alt-Q turc)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taïwanais" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taïwanais (indigène)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taïwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Ukrainien -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrainien" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrainien (phonétique)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrainien (machine à écrire)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrainien (touches Windows)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrainien (obsolète)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrainien (RSTU standard)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russe (Ukraine, RSTU standard)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrainien (homophonique)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Anglais (Royaume-Uni)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Anglais (Royaume-Uni, touche Windows étendue)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Anglais (Royaume-Uni, international, avec touches mortes)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Anglais (Royaume-Uni, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Anglais (Royaume-Uni, Dvorak, ponctuation britannique)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Anglais (Royaume-Uni, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Anglais (Royaume-Uni, Macintosh international)" # http://colemak.com/ -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Anglais (Royaume-Uni, Colemak)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Ouzbek -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Ouzbek" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Ouzbek (latin)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamien" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Coréen" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Coréen (compatible 101/104 touches)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japonais (PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlandais" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "Cló Gaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlandais (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Ourdou -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Ourdou (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Ourdou (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Ourdou (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabe (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" # https://secure.wikimedia.org/wikipedia/fr/wiki/Sindhi -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhî" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Divehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Anglais (Afrique du Sud)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Espéranto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Espéranto (point-virgule et guillemets simples déplacés, obsolète)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" # https://secure.wikimedia.org/wikipedia/fr/wiki/N%C3%A9palais -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Népalais" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Anglais (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" # https://secure.wikimedia.org/wikipedia/fr/wiki/Igbo -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" # https://secure.wikimedia.org/wikipedia/fr/wiki/Yoruba -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Yoruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amharique" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" # https://secure.wikimedia.org/wikipedia/fr/wiki/Wolof_%28langue%29 -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (main gauche)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (main droite)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" # https://secure.wikimedia.org/wikipedia/fr/wiki/Turkm%C3%A8ne -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmène" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmène (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Français (Mali, variante)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Anglais (Mali, Macintosh USA)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Anglais (Mali, USA international)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Swahili (Tanzanie)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Swahili -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Swahili (Kenya)" # Langue bantoue. # https://secure.wikimedia.org/wikipedia/fr/wiki/Kikuyu_%28langue%29 -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" # https://secure.wikimedia.org/wikipedia/fr/wiki/Tswana -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipino" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipino (baybayin, qwerty)" # http://www.michaelcapewell.com/projects/keyboard/#The_Capewell-Dvorak_Layout -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipino (Capewell-Dvorak, latin)" # http://www.michaelcapewell.com/projects/keyboard/#The_Capewell-Dvorak_Layout -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipino (Capewell-Dvorak, baybayin)" # http://www.michaelcapewell.com/projects/keyboard/#The_QWERF_Layout -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipino (Capewell-QWERF 2006, latin)" # http://www.michaelcapewell.com/projects/keyboard/#The_QWERF_Layout -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipino (Capewell-QWERF 2006, baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipino (Colemak, latin)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipino (Colemak, baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipino (Dvorak, latin)" # https://secure.wikimedia.org/wikipedia/fr/wiki/Baybayin -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipino (Dvorak, baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldave" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" # https://fr.wikipedia.org/wiki/Gagaouze -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldave (Gagaouze)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Passage à une autre disposition" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Alt droite (si enfoncé)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Alt gauche (si enfoncé)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Windows gauche (si enfoncé)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Windows droite (si enfoncé)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "N'importe quelle touche Windows (enfoncée)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Ctrl droite (si enfoncé)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Alt droite" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Alt gauche" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Verr. maj." -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Maj.+ Verr. maj." -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Verr. maj. (première disposition), Maj.+Verr. maj. (dernière disposition)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Touche Windows gauche (première disposition), touche Windows droite (dernière disposition)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Ctrl gauche (première disposition), Ctrl droit (dernière disposition)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Verr. maj." -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Les deux Maj. ensemble" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Les deux Alt ensemble" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Les deux Ctrl ensemble" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Maj." -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Ctrl gauche+Maj. gauche" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Ctrl droite + Maj. droite" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Maj." -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Alt gauche+Maj. gauche" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Espace" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Touche Windows gauche" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Windows droite" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Maj. gauche" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Maj. droite" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Ctrl gauche" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Ctrl droite" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Arrêt défilement" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Ctrl gauche + Windows gauche (première disposition), Ctrl droit + Menu (seconde disposition)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Touche sélectionnant le niveau 3" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "N'importe quelle touche Windows" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "N'importe quelle touche Alt" # https://secure.wikimedia.org/wikipedia/fr/wiki/Touche_compose -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Alt droite, Maj. + Alt droite est la touche compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Alt droite ne sélectionne jamais le niveau 3" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Entrée sur le pavé numérique" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Barre oblique inverse" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Plus petit/Plus grand>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Verr. maj. sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "La barre oblique inverse sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Plus petit/Plus grand> sélectionne le niveau 3 ; avec un autre sélecteur de niveau 3, enclenche une fois ce niveau" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Position de la touche Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Verr. maj. comme Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Ctrl gauche comme Méta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Intervertir Ctrl et Verr. maj." -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "À gauche du « A »" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "En bas à gauche" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Ctrl droite comme Alt droite" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu comme Ctrl droite" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Alt droite comme Ctrl droite" +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Échange Alt. gauche et Ctrl gauche" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Échange Win gauche et Ctrl gauche" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Alt. gauche pour Ctrl, Ctrl pour Win, Win gauche pour Alt." + # https://bugzilla.gnome.org/show_bug.cgi?id=518156 -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Utiliser les voyants du clavier pour indiquer une disposition alternative" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Verr. Num." -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Disposition du pavé numérique" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Obsolète" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Ajouts Unicode (opérateurs mathématiques et flèches)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Ajouts Unicode (opérateurs mathématiques et flèches ; opérateurs mathématiques au niveau par défaut)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Wang 724 (clavier obsolète)" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Wang 724 avec ajouts Unicode (opérateurs mathématiques et flèches)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Wang 724 avec ajouts Unicode (opérateurs mathématiques et flèches ; opérateurs mathématiques au niveau par défaut)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadécimal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "Clavier de type téléphonique" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Comportement de la touche de Suppr. du pavé numérique" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Touche obsolète avec point" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Touche obsolète avec virgule" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Touche à quatre niveaux avec point" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Touche à quatre niveaux avec point, Latin-9 uniquement" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Touche à quatre niveaux avec virgule" # Le momayyez est le séparateur décimal perse. -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Touche à quatre niveaux avec le séparateur décimal momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Touche à quatre niveaux avec le séparateur décimal abstrait" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Point-virgule au niveau 3" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Comportement de la touche Verr. maj." -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 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:964 +#: ../rules/base.xml.in.h:968 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:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Verr. maj. active ou désactive la mise en majuscule usuelle des caractères alphabétiques" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Faire de Verr. maj. un Verr. Num. supplémentaire" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Intervertir Échap. et Verr. maj." -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Faire de Verr. maj. un Échap. supplémentaire." -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Faire de Verr. maj. un Effacement. arriière supplémentaire." -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Faire de Verr. maj. un Super supplémentaire." -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Faire de Verr. maj. un Hyper supplémentaire" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Verr. maj. bascule le blocage majuscule (affecte toutes les touches)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Verr. maj. est désactivé" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Faire de Verr. maj. un Ctrl supplémentaire." -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Comportement des touches Alt et Windows" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Ajouter du comportement standard à la touche Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt et Meta sont sur les touches Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt est placé sur les touches Windows (et les touches Alt habituelles)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl est placé sur les touches Windows (et les touches Ctrl habituelles)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl est placé sur les touches Alt, Alt sur les touches Windows" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Méta est placé sur les touches Windows" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Méta est placé sur Windows gauche" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper est placé sur les touches Windows" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt est placé sur Windows droite, Super sur Menu" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt échangé avec Windows" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Position de la touche Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Niveau 3 de la touche Windows de gauche" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Niveau 3 de la touche Windows de droite" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Niveau 3 de menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Niveau 3 de la touche Ctrl de gauche" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Niveau 3 de la touche Ctrl de droite" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Niveau 3 de Verr. Maj." -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Niveau 3 de <Plus petit/Plus grand>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "Impr. Écr." -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Diverses options de compatibilité" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Touches du pavé numérique par défaut" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Les touches du pavé numérique sont toujours numériques (comme sur Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Maj. avec le pavé numérique se comporte comme dans Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Maj. n'annule pas Verr. maj., mais sélectionne le niveau 3" # https://help.ubuntu.com/7.04/user-guide/C/prefs-hardware.html -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Les combinaisons spéciales (Ctrl+Alt+<touche>) sont traitées par le serveur X" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Maj. annule Verr. maj." -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Active des caractères typographiques supplémentaires" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Les deux touches Maj. activent ou désactivent Verr. maj." -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Les deux touches Maj. activent le verrouillage majuscule, une le désactive" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Les deux touches Maj. activent ou désactivent le blocage majuscule" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Maj. + VerrNum bascule le contrôle souris au clavier (PointerKeys) " -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" -msgstr "Autoriser des actions clavier à casser les captures (attention : faille de sécurité)" +msgstr "Autorise des actions clavier à casser les captures (attention : faille de sécurité)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Autorise l'enregistrement des captures et arborescences de fenêtres" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Ajout des signes monétaires sur certaines touches" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro sur le E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro sur le 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro sur le 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro sur le 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Roupie sur le 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Touche sélectionnant le niveau 5" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Plus petit/Plus grand> sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Alt droite sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Windows gauche sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur de niveau 5" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Windows droite sélectionne le niveau 5 ; se verrouille par un appui simultané avec un autre sélecteur du niveau 5" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Utiliser la barre d'espacement pour insérer une espace insécable" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "L'espace habituelle quelque-soit le niveau" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Espace insécable au niveau 2" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Espace insécable au niveau 3" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Espace insécable au niveau 3, rien au niveau 4" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Espace insécable au niveau 3, espace fine insécable au niveau 4" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Espace insécable au niveau 4" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Espace insécable au niveau 4, espace fine insécable au niveau 6" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" msgstr "Espace insécable au niveau 4, espace fine insécable au niveau 6 (via Ctrl+Maj.)" # http://hapax.qc.ca/glossaire.htm -#: ../rules/base.xml.in.h:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Antiliant à chasse nulle au niveau 2" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Antiliant à chasse nulle au niveau 2, liant à chasse nulle au niveau 3" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" msgstr "Antiliant à chasse nulle au niveau 2, liant à chasse nulle au niveau 3, espace insécable au niveau 4" -#: ../rules/base.xml.in.h:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, rien au niveau 4" -#: ../rules/base.xml.in.h:1037 +#: ../rules/base.xml.in.h:1042 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, liant à chasse nulle au niveau 4" -#: ../rules/base.xml.in.h:1038 +#: ../rules/base.xml.in.h:1043 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" msgstr "Antiliant à chasse nulle au niveau 2. espace insécable au niveau 3, espace fine insécable au niveau 4" -#: ../rules/base.xml.in.h:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Antiliant à chasse nulle au niveau 3, liant à chasse nulle au niveau 4" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Options des claviers japonais" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "La touche « verrouillage Kana » verrouille" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Eff. Arr. du type NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Faire du Zenkaku Hankaku un Échap. supplémentaire." -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Ajout des lettres accentuées Espéranto" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Vers la touche correspondante sur une disposition Qwerty." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Vers la touche correspondante sur une disposition Dvorak." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Vers la touche correspondante sur une disposition Dvorak." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Rester compatible avec les anciens code clavier Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Compatibilité avec les touches Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Séquence de touches pour tuer le serveur X" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Eff. arrière" @@ -4137,147 +4157,158 @@ msgstr "Salish Cœur d'Alène" msgid "English (US, Sun Type 6/7)" msgstr "Anglais (USA, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +# https://normanlayout.info/ +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Anglais (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polonais (international avec touches mortes)" # http://colemak.com/ -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polonais (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polonais (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Tatar de Crimée (Q dobroudja)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Roumain (ergonomique dactylographique)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Roumain (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbe (accents combinatoires à la place des touches mortes)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russe (Ukrainien-Biélorusse)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russe (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Arménien (phonétique OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hébreu (biblique, SIL, phonétique)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabe (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belge (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugais (Brésil, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tchèque (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Danois (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Danois (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estonien (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finnois (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Français (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grec (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italien (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japonais (Sun type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japonais (Sun type 7 - compatible PC)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japonais (Sun type 7 - compatible Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norvégien (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugais (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slovaque (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Espagnol (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Suédois (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Allemand (Suisse, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Français (Suisse, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turc (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrainien (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Anglais (Royaume-Uni, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Coréen (Sun type 6/7)" + +#~ msgid "Bengali" +#~ msgstr "Bengali" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugais (Brésil, BR-Nativo pour l'Espéranto)" diff --git a/xorg-server/xkeyboard-config/po/hu.po b/xorg-server/xkeyboard-config/po/hu.po index a0ac3a6ea..d0b92760c 100644 --- a/xorg-server/xkeyboard-config/po/hu.po +++ b/xorg-server/xkeyboard-config/po/hu.po @@ -1,16 +1,16 @@ # Hungarian translation of xkeyboard-config -# Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. Free Software Foundation, Inc. +# Copyright (C) 2004, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. # # Andras Timar <timar@fsf.hu>, 2004. # Szilveszter Farkas <Szilveszter.Farkas@gmail.com>, 2006. -# Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013. +# Gabor Kelemen <kelemeng@gnome.hu>, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-15 00:37+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-21 10:43+0100\n" "Last-Translator: Gabor Kelemen <kelemeng@gnome.hu>\n" "Language-Team: Hungarian <translation-team-hu@lists.sourceforge.net>\n" "Language: hu\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Lokalize 1.5\n" +"X-Generator: Lokalize 1.4\n" #: ../rules/base.xml.in.h:1 msgid "Generic 101-key PC" @@ -819,7 +819,7 @@ msgid "English (programmer Dvorak)" msgstr "Angol (programozói Dvorak)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -891,11 +891,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Üzbég (Afganisztán, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arab" @@ -933,11 +933,11 @@ msgid "Albanian" msgstr "Albán" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Örmény" @@ -1013,11 +1013,11 @@ msgid "Belarusian (Latin)" msgstr "Belorusz (Latin)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belga" @@ -1049,17 +1049,17 @@ msgstr "Belga (Sun halott billentyűk)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belga (Wang 724-es modell, azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengáli" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengáli (Probhat)" #. Keyboard indicator for Indian layouts @@ -1072,27 +1072,27 @@ msgid "Indian" msgstr "Indiai" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengáli (India)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengáli (India, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengáli (India, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengáli (India, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengáli (India, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengáli (India, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1276,11 +1276,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnyák (US billentyűzet bosnyák betűkkel)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugál (brazil)" @@ -1293,16 +1293,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugál (brazil, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugál (brazil, natív)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugál (brazil, natív a US billentyűzetekhez)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugál (brazil, natív az eszperantóhoz)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Eszperantó (Brazil, natív)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1456,2462 +1456,2482 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibeti (ASCII számjegyekkel)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Ujgur" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Horvát" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Horvát (»Csúcsos« idézőjelek használata idézetekhez)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Horvát (Horvát billentyűkombinációk használata)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Horvát (US billentyűzet horvát billentyűkombinációkkal)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Horvát (US billentyűzet horvát betűkkel)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Cseh" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Cseh (az <\\|> billentyűvel)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Cseh (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Cseh (qwerty, kibővített fordított törtvonal)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Cseh (UCW kiosztás, csak ékezetes betűk)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Cseh (US Dvorak CZ UCW támogatással)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dán" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dán (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dán (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dán (Macintosh, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dán (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Holland" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Holland (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Holland (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Holland (szabványos)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Észt" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Észt (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Észt (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Észt (US billentyűzet észt betűkkel)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Perzsa" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Perzsa (perzsa számbillentyűzettel)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurd (Irán, latin Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurd (Irán, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurd (Irán, latin Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurd (Irán, arab-latin)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iraki" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurd (Irak, latin Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurd (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurd (Irak, latin Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurd (Irak, arab-latin)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Feröeri" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Feröeri (halott billentyűk tiltása)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finn" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finn (klasszikus)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finn (klasszikus, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Északi szami (Finnország)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finn (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Francia" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Francia (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Francia (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Francia (alternatív)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Francia (alternatív, csak Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Francia (alternatív, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Francia (alternatív, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Francia (hagyományos, alternatív)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Francia (hagyományos, alternatív, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Francia (hagyományos, alternatív, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Finn (Bepo, ergonomikus, Dvorak kiosztás)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Finn (Bepo, ergonomikus, Dvorak kiosztás, csak Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Francia (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Francia (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Francia (breton)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Okcitán" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Grúz (Franciaország, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Angol (Ghána)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Angol (Ghána, többnyelvű)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "hausza" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Angol (Ghána, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Francia (Guinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Grúz" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Grúz (ergonomikus)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Grúz (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Orosz (Grúzia)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Oszét (Grúzia)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Német" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Német (halott ékezet)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Német (Halott grave ékezet)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Német (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Német (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Román (Németország)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Román (Németország, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Német (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Német (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Német (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Német (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Német (Macintosh, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Alsó szorb" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Alsó szorb (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Német (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Orosz (Németország, fonetikus)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Német (hagyományos)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Görög" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Görög (egyszerű)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Görög (kibővített)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Görög (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Görög (politonikus)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Magyar" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Magyar (szabványos)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Magyar (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Magyar (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Magyar (101/qwertz/vessző/halott billentyűk)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Magyar (101/qwertz/vessző/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Magyar (101/qwertz/pont/halott billentyűk)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Magyar (101/qwertz/pont/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Magyar (101/qwerty/vessző/halott billentyűk)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Magyar (101/qwerty/vessző/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Magyar (101/qwerty/pont/halott billentyűk)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Magyar (101/qwerty/pont/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Magyar (102/qwertz/vessző/halott billentyűk)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Magyar (102/qwertz/vessző/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Magyar (102/qwertz/pont/halott billentyűk)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Magyar (102/qwertz/pont/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Magyar (102/qwerty/vessző/halott billentyűk)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Magyar (102/qwerty/vessző/halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Magyar (102/qwerty/pont/halott billentyűk)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Magyar (102/qwerty/pont/halott billentyűk tiltása)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Izlandi" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Izlandi (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Izlandi (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Izlandi (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Izlandi (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Héber" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Héber (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Héber (fonetikus)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Héber (Bibliai, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Olasz" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Olasz (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Olasz (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Olasz (US billentyűzet olasz betűkkel)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Grúz (Olaszország)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Olasz (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japán" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japán (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japán (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japán (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japán (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japán (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgiz" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgiz (fonetikus)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Kambodzsa)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazah" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Orosz (Kazahsztán, kazahhal)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazah (orosszal)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (STEA által javasolt szabványos)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Spanyol (latin-amerikai)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Spanyol (latin-amerikai, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Spanyol (latin-amerikai, halott tildevel)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Spanyol (latin-amerikai, Sun halott billentyűk)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litván" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litván (szabványos)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litván (US billentyűzet litván betűkkel)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litván (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litván (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litván (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Lett" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Lett (aposztróf változat)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Lett (tilde változat)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Lett (F-változat)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Lett (modern)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Lett (ergonomikus, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Lett (adaptált)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrói" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrói (Cirill)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrói (Cirill, a Z és a ZHE felcserélve)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrói (Latin Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrói (Latin qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrói (Latin Unicode qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrói (Cirill, »csúcsos« idézőjelekkel)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrói (Latin, »csúcsos« idézőjelekkel)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedón" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedón (halott billentyűk tiltása)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Máltai" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Máltai (US kiosztással)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongol" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norvég" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norvég (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norvég (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Északi szami (Norvégia)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Északi szami (Norvégia, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norvég (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norvég (Macintosh, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norvég (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Lengyel" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Lengyel (hagyományos)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Lengyel (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Lengyel (Dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Lengyel (Dvorak, lengyel idézőjelek az idézőjel billentyűn)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Lengyel (Dvorak, lengyel idézőjelek az 1 billentyűn)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kasub" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Orosz (Lengyelország, fonetikus Dvorak)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Lengyel (programozói Dvorak)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugál" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugál (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugál (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugál (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugál (Macintosh, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugál (Macintosh, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugál (natív)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugál (Natív az USA billentyűzetekhez)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Eszperantó (Portugália, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Román" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Román (cédille)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Román (szabványos)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Román (szabványos cédille)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Román (Win billentyűk)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Orosz" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Orosz (fonetikus)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Orosz (fonetikus, Win billentyűk)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Orosz (írógép)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Orosz (hagyományos)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Orosz (írógép, hagyományos)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatár" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Oszét (hagyományos)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Oszét (Win billentyűk)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Csuvas" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Csuvas (latin)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurt" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakut" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmük" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Orosz (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Orosz (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Szerb (Oroszország)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baskír" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Szerb" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Szerb (cirill, a Z és a ZHE felcserélve)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Szerb (latin)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Szerb (latin Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Szerb (latin qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Szerb (latin Unicode qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Szerb (cirill, »csúcsos« idézőjelekkel)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Szerb (latin, »csúcsos« idézőjelekkel)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannon ruszin (homofon)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannon ruszin" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Szlovén" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Szlovén (»Csúcsos« idézőjelek használata idézetekhez)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Szlovén (US billentyűzet szlovén betűkkel)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Szlovák" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Szlovák (kibővített fordított törtvonal)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Szlovák (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Szlovák (qwerty, kibővített fordított törtvonal)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Spanyol" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Spanyol (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Spanyol (halott tilde felvétele)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Spanyol (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Spanyol (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asztúri (Spanyolország, középső pontos H és alsó pontos L karakterrel)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Katalán (Spanyolország, középső pontos L karakterrel)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Spanyol (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Svéd" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Svéd (halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Svéd (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Orosz (Svédország, fonetikus)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Orosz (Svédország, fonetikus, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Északi szami (Svédország)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Svéd (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Svéd (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Svéd jelnyelv" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Német (Svájc)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Német (Svájc, hagyományos)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Német (Svájc, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Német (Svájc, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Francia (Svájc)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Francia (Svájc, halott billentyűk tiltása)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Francia (Svájc, Sun halott billentyűk)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Francia (Svájc, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Német (Svájc, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arab (Szíria)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Szír" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Szír (fonetikus)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurd (Szíria, latin Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurd (Szíria, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurd (Szíria, latin Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tádzsik" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tádzsik (hagyományos)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Szingaléz (fonetikus)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamil (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamil (Sri Lanka, TAB írógép)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thai" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thai (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thai (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Török" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Török (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Török (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Török (Sun halott billentyűk)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurd (Törökország, latin Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurd (Törökország, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurd (Törökország, latin Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Török (nemzetközi, halott billentyűkkel)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krími tatár (török Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krími tatár (török F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krími tatár (török Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Tajvani" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Tajvani (őslakos)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Tajvan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukrán" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukrán (fonetikus)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukrán (írógép)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukrán (Win billentyűk)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukrán (hagyományos)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukrán (szabványos RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Orosz (Ukrajna, szabványos RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukrán (homofon)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Angol (UK)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Angol (UK, kibővített Win billentyűk)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Angol (UK, nemzetközi, halott billentyűkkel)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Angol (USA, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Angol (UK, Dvorak UK központozással)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Angol (UK, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Angol (UK, Macintosh nemzetközi)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Angol (UK, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Üzbég" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Üzbég (latin)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnami" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreai" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreai (101/104 gomb kompatibilis)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japán (PC-98xx sorozat)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Ír" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Ír (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakisztán)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakisztán, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakisztán, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arab (Pakisztán)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Szindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Angol (Dél-Afrika)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Eszperantó" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Eszperantó (elcsúszott pontosvessző és idézőjel, elavult)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepáli" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Angol (Nigéria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Joruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amhara" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (balkezes)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (jobbkezes)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Türkmén" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Türkmén (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Francia (Mali, alternatív)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Angol (Mali, USA Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Angol (Mali, USA nemzetközi)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Szuahéli (Tanzánia)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Szuahéli (Kenya)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuju" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Csvana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filippínó" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filippínó (QWERTY Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filippínó (Capewell-Dvorak Latin)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filippínó (Capewell-Dvorak Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filippínó (Capewell-QWERF 2006 Latin)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filippínó (Capewell-QWERF 2006 Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filippínó (Colemak Latin)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filippínó (Colemak Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filippínó (Dvorak Latin)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filippínó (Dvorak Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldáv" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldáv (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Váltás másik kiosztásra" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Jobb Alt (lenyomva tartva)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Bal Alt (lenyomva tartva)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Bal Win (lenyomva tartva)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Jobb Win (lenyomva tartva)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Bármely Win billentyű (lenyomva tartva)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" msgstr "Caps Lock (lenyomva tartva), Alt+Caps Lock végzi az eredeti nagybetűsítési műveletet" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Jobb Ctrl (lenyomva tartva)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Jobb Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Bal Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (az első kiosztásra), Shift+Caps Lock (az utolsó kiosztásra)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Bal Win (az első kiosztásra), jobb Win/Menü (az utolsó kiosztásra)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Bal Ctrl (az első kiosztásra), jobb Ctrl (az utolsó kiosztásra)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "A két Shift billentyű együtt" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "A két Alt billentyű együtt" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "A két Ctrl billentyű együtt" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Bal Ctrl+Bal Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Jobb Ctrl + jobb Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Bal Alt+Bal Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Szóköz" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menü" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Bal Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Jobb Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Bal Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Jobb Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Bal Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Jobb Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Bal Ctrl + Bal Win (az első kiosztásra), jobb Ctrl + Menü (a második kiosztásra)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Billentyű a harmadik szint választásához" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Bármely Win billentyű" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Bármely Alt billentyű" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Jobb Alt, a Shift+jobb Alt a kombináló" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "A jobb Alt billentyű sohasem választ harmadik szintet" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter a számbillentyűzeten" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Fordított törtvonal" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Kisebb/nagyobb>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Caps Lock választja a 3. szintet, egyszeri zárként viselkedik másik 3. szintet választóval együtt lenyomva" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Fordított törtvonal választja a 3. szintet, egyszeri zárként viselkedik másik 3. szintet választóval együtt lenyomva" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Kisebb/nagyobb> választja a 3. szintet, egyszeri zárként viselkedik másik 3. szintet választóval együtt lenyomva" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Ctrl billentyű helyzete" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock mint Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Bal Ctrl mint Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Ctrl és Caps Lock felcserélése" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Az „A”-tól balra" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Bal oldalt, alul" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Jobb Ctrl használata jobb Alt-ként" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menü mint jobb Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Jobb Alt jobb Ctrl-ként" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Bal Alt és bal Ctrl felcserélése" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Bal Win és bal Ctrl felcserélése" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Bal Alt mint Ctrl, bal Ctrl mint Win, bal Win mint Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Az alternatív kiosztás megjelenítése a billentyűzet LED-ek használatával" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Numerikus billentyűzet kiosztása" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Örökölt" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unicode kiegészítések (nyilak és műveleti jelek)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Unicode kiegészítések (nyilak és műveleti jelek; a műveleti jelek az alapértelmezett szinten)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Hagyományos Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Wang 724 numerikus billentyűzet Unicode bővítésekkel (nyilak és műveleti jelek)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Wang 724 numerikus billentyűzet Unicode bővítésekkel (nyilak és műveleti jelek; a műveleti jelek az alapértelmezett szinten)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadecimális" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefon stílusú" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Számbillentyűzet Delete billentyűjének viselkedése" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Hagyományos számbillentyűzet ponttal" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Hagyományos számbillentyűzet vesszővel" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Negyedik szintű billentyű ponttal" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Negyedik szintű billentyű ponttal, csak Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Negyedik szintű billentyű vesszővel" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Negyedik szintű billentyű momayyez-val" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Negyedik szintű billentyű absztrakt elválasztókkal" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Pontosvessző a harmadik szinten" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "A Caps Lock billentyű viselkedése" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "A Caps Lock belső nagybetűkre váltást használ; a Shift „szünetelteti” a nagybetűsítést" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "A Caps Lock belső nagybetűkre váltást használ; a Shift nem befolyásolja a nagybetűsítést" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "A Caps Lock Shiftként működik zárolással; a Shift „szünetelteti” a nagybetűsítést" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" msgstr "A Caps Lock Shiftként működik zárolással; a Shift nem befolyásolja a nagybetűsítést" -#: ../rules/base.xml.in.h:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "A Caps Lock átváltja a betűkarakterek normál kis- és nagybetűit" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "A Caps Lock használata másik Num Lock-ként" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Esc és Caps Lock felcserélése" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "A Caps Lock használata másik Esc-ként" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "A Caps Lock használata másik Backspace-ként" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "A Caps Lock használata másik Super-ként" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "A Caps Lock használata másik Hyper-ként" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "A Caps Lock átváltja a Shiftet (minden billentyűt érinti)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "A Caps Lock letiltva" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "A Caps Lock használata másik Ctrl-ként" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Az Alt/Win billentyűk viselkedése" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "A szabványos funkcionalitás hozzáadása a Menü billentyűhöz" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Az Alt és Meta az Alt billentyűkön" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Az Alt a Win billentyűkhöz van rendelve (és a szokásos Alt billentyűkhöz)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "A Ctrl a Win billentyűkhöz van rendelve (és a szokásos Ctrl billentyűkhöz)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "A Ctrl az Alt billentyűkhöz, az Alt a Win billentyűkhöz van rendelve" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "A Meta a Win billentyűkhöz van rendelve" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "A Meta a bal Win billentyűhöz van rendelve" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "A Hyper a Win billentyűkhöz van rendelve" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Az Alt a jobb Win billentyűhöz van rendelve, a Super a Menühöz" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Az Alt fel van cserélve a Win billentyűvel" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "A kombináló billentyű helye" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3. szintű bal Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3. szintű jobb Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3. szintű Menü" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3. szintű bal Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3. szintű jobb Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3. szintű jobb Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3. szintű <kisebb/nagyobb>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Egyéb kompatibilitási beállítások" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Alapértelmezett számbillentyűk" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "A számbillentyűk mindig számokat visznek be (mint Mac OS-en)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "A Shift+számbillentyűk úgy működjenek, mint az MS Windowsban" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "A Shift nem szakítja meg a Num Lockot, hanem a harmadik szintet választja" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "A speciális billentyűket (Ctrl+Alt+<billentyű>) a kiszolgáló kezeli" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" msgstr "Apple alumínium billentyűzet PC-billentyűk emulálása (Print, Scroll Lock, Pause, Num Lock)" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "A Shift megszakítja a Caps Lockot" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Extra tipográfiai karakterek engedélyezése" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "A két Shift billentyű együtt váltja a Caps Lockot" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "A két Shift billentyű együtt aktiválja a Caps Lockot, egy Shift deaktiválja" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "A két Shift billentyű együtt váltja a ShiftLockot" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Mutatóbillentyűk átváltása a Shift + NumLock használatával" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Megragadás billentyűzettel való feltörésének engedélyezése (biztonsági kockázat!)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Megragadás és ablakfa naplózásának engedélyezése" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Pénznem jelek hozzáadása bizonyos billentyűkhöz" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro jel az E billentyűn" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro jel a 2-es billentyűn" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro jel a 4-es billentyűn" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro jel az 5-ös billentyűn" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rúpia jel a 4-es billentyűn" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Billentyű az ötödik szint választásához" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Kisebb/nagyobb> választja az 5. szintet, másik 5. szintet választóval együtt lenyomva zárol" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Jobb Alt választja az 5. szintet, másik 5. szintet választóval együtt lenyomva zárol" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Bal Win választja az 5. szintet, másik 5. szintet választóval együtt lenyomva zárol" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Jobb Win választja az 5. szintet, másik 5. szintet választóval együtt lenyomva zárol" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "A szóköz billentyű használata nem törhető szóköz bevitelére" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Hagyományos szóköz bármely szinten" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Nem törhető szóköz karakter a második szinten" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Nem törhető szóköz karakter a harmadik szinten" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Nem törhető szóköz karakter a harmadik szinten és semmi a negyediken" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Nem törhető szóköz karakter a harmadik szinten, keskeny nem törhető szóköz karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Nem törhető szóköz karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Nem törhető szóköz karakter a negyedik szinten, keskeny nem törhető szóköz karakter a hatodik szinten" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" msgstr "Nem törhető szóköz karakter a negyedik szinten, keskeny nem törhető szóköz karakter a hatodik szinten (a Ctrl+Shift segítségével)" -#: ../rules/base.xml.in.h:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nulla szélességű egyesítő karakter a harmadik szinten" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nulla szélességű egyesítő karakter a harmadik szinten, nem törhető szóköz karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nem törhető szóköz karakter a harmadik szinten" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nem törhető szóköz karakter a harmadik szinten, semmi a negyedik szinten" -#: ../rules/base.xml.in.h:1037 +#: ../rules/base.xml.in.h:1042 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nem törhető szóköz karakter a harmadik szinten, nulla szélességű egyesítő karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1038 +#: ../rules/base.xml.in.h:1043 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a második szinten, nem törhető szóköz karakter a harmadik szinten, keskeny nem törhető szóköz karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Nulla szélességű nem egyesítő karakter a harmadik szinten, nulla szélességű egyesítő karakter a negyedik szinten" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Japán billentyűzet-beállítások" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "A Kana zárolásbillentyű zárol" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F stílusú backspace" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "A Zenkaku Hankaku használata másik Esc-ként" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Eszperantó mellékjeles betűk hozzáadása" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "A Qwerty kiosztáson megfelelő billentyűre." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "A Dvorak kiosztáson megfelelő billentyűre." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "A Colemak kiosztáson megfelelő billentyűre." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Billentyűkompatibilitás fenntartása a régi Solaris kódokkal" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Sun billentyűzetkompatibilitás" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Billentyűsorozat az X kiszolgáló kilövéséhez" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4023,150 +4043,160 @@ msgstr "Coeur d'Alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Angol (US, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Angol (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Lengyel (nemzetközi, halott billentyűkkel)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Lengyel (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Lengyel (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krími tatár (Dobrudzsa Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Román (ergonomikus Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Román (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Szerb (ékezetek kombinálása a halott billentyűk helyett)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Orosz (Ukrán-fehérorosz kiosztással)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Orosz (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Örmény (OLPC fonetikus)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Héber (bibliai, SIL fonetikus)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arab (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belga (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugál (brazil, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Cseh (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dán (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Holland (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Észt (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finn (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Francia (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Görög (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Olasz (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japán (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japán (Sun Type 7 - PC kompatibilis)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japán (Sun Type 7 - sun kompatibilis)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norvég (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugál (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Szlovák (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Spanyol (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Svéd (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Német (Svájc, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Francia (Svájc, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Török (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukrán (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Angol (UK, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreai (Sun Type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengáli" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugál (brazil, natív az eszperantóhoz)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Angol (kiosztás átváltása a szorzás/osztás billentyűn)" diff --git a/xorg-server/xkeyboard-config/po/id.po b/xorg-server/xkeyboard-config/po/id.po index fb0e2626e..93cb2f093 100644 --- a/xorg-server/xkeyboard-config/po/id.po +++ b/xorg-server/xkeyboard-config/po/id.po @@ -2,2914 +2,2697 @@ # Copyright (C) 2008 THE xkeyboard-config'S COPYRIGHT HOLDER # This file is distributed under the same license as the xkeyboard-config package. # Erwid M Jadied <jadied@gmail.com>, 2008. -# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010. -# Andika Triwidada <andika@gmail.com>, 2012. +# Andhika Padmawan <andhika.padmawan@gmail.com>, 2010, 2014. +# Andika Triwidada <andika@gmail.com>, 2012, 2013. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.4.99\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2012-01-17 20:46+0000\n" -"PO-Revision-Date: 2012-05-09 21:39+0700\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-26 08:31+0700\n" "Last-Translator: Andhika Padmawan <andhika.padmawan@gmail.com>\n" "Language-Team: Indonesian <translation-team-id@lists.sourceforge.net>\n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Poedit-Language: Indonesian\n" -"X-Poedit-Country: INDONESIA\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: ../rules/base.xml.in.h:1 -msgid "<Less/Greater>" -msgstr "<Lebih Kecil/Lebih Besar>" +msgid "Generic 101-key PC" +msgstr "PC 101-tombol Generik " #: ../rules/base.xml.in.h:2 -msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" -msgstr "<Lebih Kecil/Lebih Besar> memilih level ke-3, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ke-3 lainnya" +msgid "Generic 102-key (Intl) PC" +msgstr "PC 102-tombol (Intl) Generic" #: ../rules/base.xml.in.h:3 -msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "<Lebih Kecil/Lebih Besar> pilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" +msgid "Generic 104-key PC" +msgstr "PC 104-tombol Generik " #: ../rules/base.xml.in.h:4 -msgid "A4Tech KB-21" -msgstr "A4Tech KB-21" +msgid "Generic 105-key (Intl) PC" +msgstr "PC 105-tombol (Intl) Generic" #: ../rules/base.xml.in.h:5 -msgid "A4Tech KBS-8" -msgstr "A4Tech KBS-8" +msgid "Dell 101-key PC" +msgstr "PC 101-tombol Dell" #: ../rules/base.xml.in.h:6 -msgid "A4Tech Wireless Desktop RFKB-23" -msgstr "A4Tech Wireless Desktop RFKB-23" +msgid "Dell Latitude series laptop" +msgstr "Laptop seri Dell Latitude" #: ../rules/base.xml.in.h:7 -msgid "ATM/phone-style" -msgstr "Gaya ATM/telepon" +msgid "Dell Precision M65" +msgstr "Dell Precision M65" #: ../rules/base.xml.in.h:8 -msgid "Acer AirKey V" -msgstr "Acer AirKey V" +msgid "Everex STEPnote" +msgstr "Everex STEPnote" #: ../rules/base.xml.in.h:9 -msgid "Acer C300" -msgstr "Acer C300" +msgid "Keytronic FlexPro" +msgstr "Keytronic FlexPro" #: ../rules/base.xml.in.h:10 -msgid "Acer Ferrari 4000" -msgstr "Acer Ferrari 4000" +msgid "Microsoft Natural" +msgstr "Microsoft Natural" #: ../rules/base.xml.in.h:11 -msgid "Acer Laptop" -msgstr "Laptop Acer" +msgid "Northgate OmniKey 101" +msgstr "Northgate OmniKey 101" #: ../rules/base.xml.in.h:12 -msgid "Add the standard behavior to Menu key" -msgstr "Tambah tindakan standar pada tombol Menu" +msgid "Winbook Model XP5" +msgstr "Winbook Model XP5" #: ../rules/base.xml.in.h:13 -msgid "Adding Esperanto circumflexes (supersigno)" -msgstr "Menambah circumflex Esperanto (supersigno)" +msgid "PC-98xx Series" +msgstr "Seri PC-98xx" #: ../rules/base.xml.in.h:14 -msgid "Adding currency signs to certain keys" -msgstr "Menambahkan tanda mata uang ke tombol tertentu" +msgid "A4Tech KB-21" +msgstr "A4Tech KB-21" #: ../rules/base.xml.in.h:15 -msgid "Advance Scorpius KI" -msgstr "Advance Scorpius KI" +msgid "A4Tech KBS-8" +msgstr "A4Tech KBS-8" #: ../rules/base.xml.in.h:16 -msgid "Afghani" -msgstr "Afganistan" +msgid "A4Tech Wireless Desktop RFKB-23" +msgstr "A4Tech Wireless Desktop RFKB-23" #: ../rules/base.xml.in.h:17 -msgid "Akan" -msgstr "Akan" +msgid "Acer AirKey V" +msgstr "Acer AirKey V" #: ../rules/base.xml.in.h:18 -msgid "Albanian" -msgstr "Albania" +msgid "Azona RF2300 wireless Internet Keyboard" +msgstr "Papan Ketik Internet nirkabel Azona RF2300" #: ../rules/base.xml.in.h:19 -msgid "Alt and Meta are on Alt keys" -msgstr "Alt dan Meta pada tombol Alt" +msgid "Advance Scorpius KI" +msgstr "Advance Scorpius KI" #: ../rules/base.xml.in.h:20 -msgid "Alt is mapped to Right Win, Super to Menu" -msgstr "Alt dipetakan ke Win Kanan, Super ke Menu" +msgid "Brother Internet Keyboard" +msgstr "Papan Tik Internet Brother" #: ../rules/base.xml.in.h:21 -msgid "Alt+Caps Lock" -msgstr "Tombol Alt+Caps" +msgid "BTC 5113RF Multimedia" +msgstr "BTC 5113RF Multimedia" #: ../rules/base.xml.in.h:22 -msgid "Alt+Ctrl" -msgstr "Alt+Ctrl" +msgid "BTC 5126T" +msgstr "BTC 5126T" #: ../rules/base.xml.in.h:23 -msgid "Alt+Shift" -msgstr "Alt+Shift" +msgid "BTC 6301URF" +msgstr "BTC 6301URF" #: ../rules/base.xml.in.h:24 -msgid "Alt+Space" -msgstr "Alt+Space" +msgid "BTC 9000" +msgstr "BTC 9000" #: ../rules/base.xml.in.h:25 -msgid "Alt/Win key behavior" -msgstr "Tindakan Tombol Alt/Win " +msgid "BTC 9000A" +msgstr "BTC 9000A" #: ../rules/base.xml.in.h:26 -msgid "Amharic" -msgstr "Amharic" +msgid "BTC 9001AH" +msgstr "BTC 9001AH" #: ../rules/base.xml.in.h:27 -msgid "Any Alt key" -msgstr "Tombol Alt apapun" +msgid "BTC 5090" +msgstr "BTC 5090" #: ../rules/base.xml.in.h:28 -msgid "Any Win key" -msgstr "Tombol Win apapun" +msgid "BTC 9019U" +msgstr "BTC 9019U" #: ../rules/base.xml.in.h:29 -msgid "Any Win key (while pressed)" -msgstr "Tombol Win apapun (ketika ditekan)" +msgid "BTC 9116U Mini Wireless Internet and Gaming" +msgstr "BTC 91116U Internet dan Permainan Nirkabel Mini" #: ../rules/base.xml.in.h:30 -msgid "Apple" -msgstr "Apple" +msgid "Cherry Blue Line CyBo@rd" +msgstr "Cherry Blue Line CyBo@rd" #: ../rules/base.xml.in.h:31 -msgid "Apple Aluminium Keyboard (ANSI)" -msgstr "Papan Ketik Aluminium Apple (ANSI)" +msgid "Cherry CyMotion Master XPress" +msgstr "Cherry CyMotion Master XPress" #: ../rules/base.xml.in.h:32 -msgid "Apple Aluminium Keyboard (ISO)" -msgstr "Papan Ketik Aluminium (ISO)" +msgid "Cherry Blue Line CyBo@rd (alternate option)" +msgstr "Cherry Blue Line CyBo@rd (alternate option)" #: ../rules/base.xml.in.h:33 -msgid "Apple Aluminium Keyboard (JIS)" -msgstr "Papan Ketik Aluminium (JIS)" +msgid "Cherry CyBo@rd USB-Hub" +msgstr "Cherry CyBo@rd USB-Hub" #: ../rules/base.xml.in.h:34 -msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" -msgstr "Papan Ketik Aluminium Apple: mengemulasi tombol PC (Print, Scroll_Lock, Pause, Num Lock)" +msgid "Cherry CyMotion Expert" +msgstr "Cherry CyMotion Expert" #: ../rules/base.xml.in.h:35 -msgid "Apple Laptop" -msgstr "Laptop Apple" +msgid "Cherry B.UNLIMITED" +msgstr "Cherry B.UNLIMITED" #: ../rules/base.xml.in.h:36 -msgid "Arabic" -msgstr "Arab" +msgid "Chicony Internet Keyboard" +msgstr "Papan Tik Internet Chicony" #: ../rules/base.xml.in.h:37 -msgid "Arabic (Buckwalter)" -msgstr "Arab (Buckwalter)" +msgid "Chicony KU-0108" +msgstr "Chicony KU-0108" #: ../rules/base.xml.in.h:38 -msgid "Arabic (Morocco)" -msgstr "Arab (Maroko)" +msgid "Chicony KU-0420" +msgstr "Chicony KU-0420" #: ../rules/base.xml.in.h:39 -msgid "Arabic (Pakistan)" -msgstr "Arab (Pakistan)" +msgid "Chicony KB-9885" +msgstr "Chicony KB-9885" #: ../rules/base.xml.in.h:40 -msgid "Arabic (Syria)" -msgstr "Arab (Siria)" +msgid "Compaq Easy Access Keyboard" +msgstr "Papan Ketik Akses Mudah Compaq" #: ../rules/base.xml.in.h:41 -msgid "Arabic (azerty)" -msgstr "Arab (azerty)" +msgid "Compaq Internet Keyboard (7 keys)" +msgstr "Papan Ketik Internet Compaq (7 tombol)" #: ../rules/base.xml.in.h:42 -msgid "Arabic (azerty/digits)" -msgstr "Arab (azerty/digit)" +msgid "Compaq Internet Keyboard (13 keys)" +msgstr "Papan Ketik Internet Compaq (13 tombol)" #: ../rules/base.xml.in.h:43 -msgid "Arabic (digits)" -msgstr "Arab (digits)" +msgid "Compaq Internet Keyboard (18 keys)" +msgstr "Papan Ketik Internet Compaq (18 tombol)" #: ../rules/base.xml.in.h:44 -msgid "Arabic (qwerty)" -msgstr "Arab (qwerty)" +msgid "Cherry CyMotion Master Linux" +msgstr "Cherry CyMotion Master Linux" #: ../rules/base.xml.in.h:45 -msgid "Arabic (qwerty/digits)" -msgstr "Arab (qwerty/digit)" +msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" +msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" -#: ../rules/base.xml.in.h:46 ../rules/base.extras.xml.in.h:2 -msgid "Armenian" -msgstr "Armenia" +#: ../rules/base.xml.in.h:46 +msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" +msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" #: ../rules/base.xml.in.h:47 -msgid "Armenian (alternative eastern)" -msgstr "Armenia (timur alternatif)" +msgid "Compaq iPaq Keyboard" +msgstr "Papan Ketik Compaq iPaq" #: ../rules/base.xml.in.h:48 -msgid "Armenian (alternative phonetic)" -msgstr "Armenia (fonetik alternatif)" +msgid "Dell" +msgstr "Dell" #: ../rules/base.xml.in.h:49 -msgid "Armenian (eastern)" -msgstr "Armenia (timur)" +msgid "Dell SK-8125" +msgstr "Dell SK-8125" #: ../rules/base.xml.in.h:50 -msgid "Armenian (phonetic)" -msgstr "Armenia (fonetik)" +msgid "Dell SK-8135" +msgstr "Dell SK-8135" #: ../rules/base.xml.in.h:51 -msgid "Armenian (western)" -msgstr "Armenia (barat)" +msgid "Dell USB Multimedia Keyboard" +msgstr "Papan Ketik Multimedia USB Dell" #: ../rules/base.xml.in.h:52 -msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" -msgstr "Asturia (Spanyol, dengan titik di bawah pada H dan L)" +msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx" +msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx" #: ../rules/base.xml.in.h:53 -msgid "Asus Laptop" -msgstr "Laptop Asus" +msgid "Dell Laptop/notebook Precision M series" +msgstr "Dell Laptop/notebook Precision M series" #: ../rules/base.xml.in.h:54 -msgid "At bottom left" -msgstr "Di kiri bawah" +msgid "Dexxa Wireless Desktop Keyboard" +msgstr "Papan Ketik Desktop Nirkabel Dexxa" #: ../rules/base.xml.in.h:55 -msgid "At left of 'A'" -msgstr "Di sebelah kiri 'A'" +msgid "Diamond 9801 / 9802 series" +msgstr "Diamond 9801 / 9802 series" #: ../rules/base.xml.in.h:56 -msgid "Avatime" -msgstr "Avatime" +msgid "DTK2000" +msgstr "DTK2000" #: ../rules/base.xml.in.h:57 -msgid "Azerbaijani" -msgstr "Ajarbaijan" +msgid "Ennyah DKB-1008" +msgstr "Ennyah DKB-1008" #: ../rules/base.xml.in.h:58 -msgid "Azerbaijani (Cyrillic)" -msgstr "Azerbaijan (Sirilik)" +msgid "Fujitsu-Siemens Computers AMILO laptop" +msgstr "Fujitsu-Siemens Computers AMILO laptop" #: ../rules/base.xml.in.h:59 -msgid "Azona RF2300 wireless Internet Keyboard" -msgstr "Papan Ketik Internet nirkabel Azona RF2300" +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:60 -msgid "BTC 5090" -msgstr "BTC 5090" +msgid "Genius Comfy KB-12e" +msgstr "Genius Comfy KB-12e" #: ../rules/base.xml.in.h:61 -msgid "BTC 5113RF Multimedia" -msgstr "BTC 5113RF Multimedia" +msgid "Genius Comfy KB-21e-Scroll" +msgstr "Genius Comfy KB-21e-Scroll" #: ../rules/base.xml.in.h:62 -msgid "BTC 5126T" -msgstr "BTC 5126T" +msgid "Genius KB-19e NB" +msgstr "Genius KB-19e NB" #: ../rules/base.xml.in.h:63 -msgid "BTC 6301URF" -msgstr "BTC 6301URF" +msgid "Genius KKB-2050HS" +msgstr "Genius KKB-2050HS" #: ../rules/base.xml.in.h:64 -msgid "BTC 9000" -msgstr "BTC 9000" +msgid "Gyration" +msgstr "Gyration" #: ../rules/base.xml.in.h:65 -msgid "BTC 9000A" -msgstr "BTC 9000A" +msgid "HTC Dream" +msgstr "HTC Dream" #: ../rules/base.xml.in.h:66 -msgid "BTC 9001AH" -msgstr "BTC 9001AH" +msgid "Kinesis" +msgstr "Kinesis" #: ../rules/base.xml.in.h:67 -msgid "BTC 9019U" -msgstr "BTC 9019U" +msgid "Logitech Generic Keyboard" +msgstr "Papan Ketik Generik Logitech" #: ../rules/base.xml.in.h:68 -msgid "BTC 9116U Mini Wireless Internet and Gaming" -msgstr "BTC 91116U Internet dan Permainan Nirkabel Mini" +msgid "Logitech G15 extra keys via G15daemon" +msgstr "Logitech G15 extra keys via G15daemon" #: ../rules/base.xml.in.h:69 -msgid "Backslash" -msgstr "Backslash" +msgid "Hewlett-Packard Internet Keyboard" +msgstr "Papan Ketik Internet Hewlett-Packard" #: ../rules/base.xml.in.h:70 -msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" -msgstr "Backslash memilih level ketiga, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ketiga lainnya" +msgid "Hewlett-Packard SK-250x Multimedia Keyboard" +msgstr "Papan Ketik Multimedia Hewlett-Packard SK-2501" #: ../rules/base.xml.in.h:71 -msgid "Bambara" -msgstr "Bambara" +msgid "Hewlett-Packard Omnibook XE3 GC" +msgstr "Hewlett-Packard Omnibook XE3 GC" #: ../rules/base.xml.in.h:72 -msgid "Bashkirian" -msgstr "Bashkirian" +msgid "Hewlett-Packard Omnibook XE3 GF" +msgstr "Hewlett-Packard Omnibook XE3 GF" #: ../rules/base.xml.in.h:73 -msgid "Belarusian" -msgstr "Belarusia" +msgid "Hewlett-Packard Omnibook XT1000" +msgstr "Hewlett-Packard Omnibook XT1000" #: ../rules/base.xml.in.h:74 -msgid "Belarusian (Latin)" -msgstr "Belarusia (Latin)" +msgid "Hewlett-Packard Pavilion dv5" +msgstr "Hewlett-Packard Pavilion dv5" #: ../rules/base.xml.in.h:75 -msgid "Belarusian (legacy)" -msgstr "Belarusia (legacy)" +msgid "Hewlett-Packard Pavilion ZT11xx" +msgstr "Hewlett-Packard Pavilion ZT11xx" #: ../rules/base.xml.in.h:76 -msgid "Belgian" -msgstr "Belgia" +msgid "Hewlett-Packard Omnibook 500 FA" +msgstr "Hewlett-Packard Omnibook 500 FA" #: ../rules/base.xml.in.h:77 -msgid "Belgian (ISO alternate)" -msgstr "Belgia (alternatif ISO)" +msgid "Hewlett-Packard Omnibook 5xx" +msgstr "Hewlett-Packard Omnibook 5xx" #: ../rules/base.xml.in.h:78 -msgid "Belgian (Sun dead keys)" -msgstr "Belgia (tombol mati Sun)" +msgid "Hewlett-Packard nx9020" +msgstr "Hewlett-Packard nx9020" #: ../rules/base.xml.in.h:79 -msgid "Belgian (Wang model 724 azerty)" -msgstr "Belgia (Wang model 724 azerty)" +msgid "Hewlett-Packard Omnibook 6000/6100" +msgstr "Hewlett-Packard Omnibook 6000/6100" #: ../rules/base.xml.in.h:80 -msgid "Belgian (alternative)" -msgstr "Belgia (alternatif)" +msgid "Honeywell Euroboard" +msgstr "Honeywell Euroboard" #: ../rules/base.xml.in.h:81 -msgid "Belgian (alternative, Sun dead keys)" -msgstr "Belgia (alternatif, tombol mati Sun)" +msgid "Hewlett-Packard Mini 110 Notebook" +msgstr "Hewlett-Packard Mini 110 Notebook" #: ../rules/base.xml.in.h:82 -msgid "Belgian (alternative, latin-9 only)" -msgstr "Belgia (alternative, hanya latin-9)" +msgid "IBM Rapid Access" +msgstr "IBM Rapid Access" #: ../rules/base.xml.in.h:83 -msgid "Belgian (eliminate dead keys)" -msgstr "Belgia (hapus tombol mati)" +msgid "IBM Rapid Access II" +msgstr "IBM Rapid Access II" #: ../rules/base.xml.in.h:84 -msgid "BenQ X-Touch" -msgstr "BenQ X-Touch" +msgid "IBM ThinkPad 560Z/600/600E/A22E" +msgstr "IBM ThinkPad 560Z/600/600E/A22E" #: ../rules/base.xml.in.h:85 -msgid "BenQ X-Touch 730" -msgstr "BenQ X-Touch 730" +msgid "IBM ThinkPad R60/T60/R61/T61" +msgstr "IBM ThinkPad R60/T60/R61/T61" #: ../rules/base.xml.in.h:86 -msgid "BenQ X-Touch 800" -msgstr "BenQ X-Touch 800" +msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" #: ../rules/base.xml.in.h:87 -msgid "Bengali" -msgstr "Bengali" +msgid "IBM Space Saver" +msgstr "IBM Space Saver" #: ../rules/base.xml.in.h:88 -msgid "Bengali (India)" -msgstr "Bengal (India)" +msgid "Logitech Access Keyboard" +msgstr "Logitech Access Keyboard" #: ../rules/base.xml.in.h:89 -msgid "Bengali (India, Baishakhi Inscript)" -msgstr "Bengali (India, Baishakhi Inscript)" +msgid "Logitech Cordless Desktop LX-300" +msgstr "Logitech Cordless Desktop LX-300" #: ../rules/base.xml.in.h:90 -msgid "Bengali (India, Baishakhi)" -msgstr "Bengali (India, Baishakhi)" +msgid "Logitech Internet 350 Keyboard" +msgstr "Papan Ketik Logitech Internet 350" #: ../rules/base.xml.in.h:91 -msgid "Bengali (India, Bornona)" -msgstr "Bengali (India, Bornona)" +msgid "Logitech Media Elite Keyboard" +msgstr "Papan Ketik Logitech Media Elite" #: ../rules/base.xml.in.h:92 -msgid "Bengali (India, Probhat)" -msgstr "Bengal (India, Probhat)" +msgid "Logitech Cordless Desktop" +msgstr "Logitech Cordless Desktop" #: ../rules/base.xml.in.h:93 -msgid "Bengali (India, Uni Gitanjali)" -msgstr "Bengali (India, Uni Gitanjali)" +msgid "Logitech Cordless Desktop iTouch" +msgstr "Logitech Cordless Desktop iTouch" #: ../rules/base.xml.in.h:94 -msgid "Bengali (Probhat)" -msgstr "Bengal (Probhat)" +msgid "Logitech Cordless Desktop Navigator" +msgstr "Logitech Cordless Desktop Navigator" #: ../rules/base.xml.in.h:95 -msgid "Berber (Morocco, Tifinagh alternative phonetic)" -msgstr "Berber (Maroko, fonetik alternatif Tifinagh)" +msgid "Logitech Cordless Desktop Optical" +msgstr "Logitech Cordless Desktop Optical" #: ../rules/base.xml.in.h:96 -msgid "Berber (Morocco, Tifinagh alternative)" -msgstr "Berber (Maroko, alternatif Tifinagh)" +msgid "Logitech Cordless Desktop (alternate option)" +msgstr "Logitech Cordless Desktop (pilihan alternatif)" #: ../rules/base.xml.in.h:97 -msgid "Berber (Morocco, Tifinagh extended phonetic)" -msgstr "Berber (Maroko, fonetik Tifinagh diperluas)" +msgid "Logitech Cordless Desktop Pro (alternate option 2)" +msgstr "Logitech Cordless Desktop Pro (opsi alternatif 2)" #: ../rules/base.xml.in.h:98 -msgid "Berber (Morocco, Tifinagh extended)" -msgstr "Berber (Maroko, Tifinagh diperluas)" +msgid "Logitech Cordless Freedom/Desktop Navigator" +msgstr "Logitech Cordless Freedom/Desktop Navigator" #: ../rules/base.xml.in.h:99 -msgid "Berber (Morocco, Tifinagh phonetic)" -msgstr "Berber (Maroko, fonetik Tifinagh)" +msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)" +msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)" #: ../rules/base.xml.in.h:100 -msgid "Berber (Morocco, Tifinagh)" -msgstr "Berber (Morocco, Tifinagh)" +msgid "Logitech Internet Keyboard" +msgstr "Papan Ketik Internet Logitech" #: ../rules/base.xml.in.h:101 -msgid "Bosnian" -msgstr "Bosnia" +msgid "Logitech iTouch" +msgstr "Logitech iTouch" #: ../rules/base.xml.in.h:102 -msgid "Bosnian (US keyboard with Bosnian digraphs)" -msgstr "Bosnia (papan tik AS dengan digraf Bosnia)" +msgid "Logitech Internet Navigator Keyboard" +msgstr "Papan Ketik Navigator Internet Logitech" #: ../rules/base.xml.in.h:103 -msgid "Bosnian (US keyboard with Bosnian letters)" -msgstr "Bosnia (papan tik AS dengan huruf Bosnia)" +msgid "Logitech Cordless Desktop EX110" +msgstr "Logitech Cordless Desktop EX110" #: ../rules/base.xml.in.h:104 -msgid "Bosnian (use Bosnian digraphs)" -msgstr "Bosnia (gunakan diagraph Bosnia)" +msgid "Logitech iTouch Internet Navigator Keyboard SE" +msgstr "Logitech iTouch Internet Navigator Keyboard SE" #: ../rules/base.xml.in.h:105 -msgid "Bosnian (use guillemets for quotes)" -msgstr "Bosnia (gunakan guillemets untuk tanda petik)" +msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)" +msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)" #: ../rules/base.xml.in.h:106 -msgid "Both Alt keys together" -msgstr "Kedua tombol Alt bersama" +msgid "Logitech Ultra-X Keyboard" +msgstr "Papan Ketik Logitech Ultra-X" #: ../rules/base.xml.in.h:107 -msgid "Both Ctrl keys together" -msgstr "Kedua tombol Ctrl bersama" +msgid "Logitech Ultra-X Cordless Media Desktop Keyboard" +msgstr "Papan Ketik Logitech Ultra-X Cordless Media Desktop" #: ../rules/base.xml.in.h:108 -msgid "Both Shift keys together" -msgstr "Kedua tombol Shift bersama" +msgid "Logitech diNovo Keyboard" +msgstr "Papan Ketik Logitech diNovo" #: ../rules/base.xml.in.h:109 -msgid "Both Shift-Keys together activate Caps Lock, one Shift-Key deactivates" -msgstr "Kedua tombol Shift bersamaan mengaktifkan Caps Lock, satu Tombol-Shift mematikannya" +msgid "Logitech diNovo Edge Keyboard" +msgstr "Papan Ketik Logitech diNovo Edge" #: ../rules/base.xml.in.h:110 -msgid "Both Shift-Keys together toggle Caps Lock" -msgstr "Kedua tombol Shift bersama ubah Caps Lock" +msgid "Memorex MX1998" +msgstr "Memorex MX1998" #: ../rules/base.xml.in.h:111 -msgid "Both Shift-Keys together toggle ShiftLock" -msgstr "Kedua tombol Shift bersama menjungkitkan ShiftLock" +msgid "Memorex MX2500 EZ-Access Keyboard" +msgstr "Papan Ketik Memorex MX2500 EZ-Access" #: ../rules/base.xml.in.h:112 -msgid "Braille" -msgstr "Braille" +msgid "Memorex MX2750" +msgstr "Memorex MX2750" #: ../rules/base.xml.in.h:113 -msgid "Braille (left hand)" -msgstr "Braille (tangan kiri)" +msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000" +msgstr "Papan Tik Ergonomis Nirkabel Alami Microsoft 4000" #: ../rules/base.xml.in.h:114 -msgid "Braille (right hand)" -msgstr "Braille (tangan kanan)" +msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000" +msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000" #: ../rules/base.xml.in.h:115 -msgid "Brother Internet Keyboard" -msgstr "Papan Tik Internet Brother" +msgid "Microsoft Internet Keyboard" +msgstr "Papan Ketik Internet Microsoft" #: ../rules/base.xml.in.h:116 -msgid "Bulgarian" -msgstr "Bulgaria" +msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" +msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" #: ../rules/base.xml.in.h:117 -msgid "Bulgarian (new phonetic)" -msgstr "Bulgaria (fonetik baru)" +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:118 -msgid "Bulgarian (traditional phonetic)" -msgstr "Bulgaria (fonetik tradisional)" +msgid "Microsoft Natural Keyboard Pro OEM" +msgstr "Microsoft Natural Keyboard Pro OEM" #: ../rules/base.xml.in.h:119 -msgid "Burmese" -msgstr "Burma" +msgid "ViewSonic KU-306 Internet Keyboard" +msgstr "Papan Ketik Internet ViewSonic KU-306" #: ../rules/base.xml.in.h:120 -msgid "Cameroon Multilingual (Dvorak)" -msgstr "Kamerun Multibahasa (Dvorak)" +msgid "Microsoft Internet Keyboard Pro, Swedish" +msgstr "Microsoft Internet Keyboard Pro, Swedia" #: ../rules/base.xml.in.h:121 -msgid "Cameroon Multilingual (azerty)" -msgstr "Kamerun Multibahasa (azerty)" +msgid "Microsoft Office Keyboard" +msgstr "Papan Ketik Microsoft Office" #: ../rules/base.xml.in.h:122 -msgid "Cameroon Multilingual (qwerty)" -msgstr "Kamerun Multibahasa (qwerty)" +msgid "Microsoft Wireless Multimedia Keyboard 1.0A" +msgstr "Microsoft Wireless Multimedia Keyboard 1.0A" #: ../rules/base.xml.in.h:123 -msgid "Canadian Multilingual" -msgstr "Kanada Multibahasa" +msgid "Microsoft Natural Keyboard Elite" +msgstr "Microsoft Natural Keyboard Elite" #: ../rules/base.xml.in.h:124 -msgid "Canadian Multilingual (first part)" -msgstr "Kanada Multibahasa (bagian pertama)" +msgid "Microsoft Comfort Curve Keyboard 2000" +msgstr "Microsoft Comfort Curve Keyboard 2000" #: ../rules/base.xml.in.h:125 -msgid "Canadian Multilingual (second part)" -msgstr "Kanada Multibahasa (bagian kedua)" +msgid "Ortek MCK-800 MM/Internet keyboard" +msgstr "Ortek MCK-800 MM/Internet keyboard" #: ../rules/base.xml.in.h:126 -msgid "Caps Lock" -msgstr "Caps Lock" +msgid "Propeller Voyager (KTEZ-1000)" +msgstr "Propeller Voyager (KTEZ-1000)" #: ../rules/base.xml.in.h:127 -msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" -msgstr "Caps Lock (ke tata letak pertama), Shift+Caps Lock (ke tata letak terakhir)" +msgid "QTronix Scorpius 98N+" +msgstr "QTronix Scorpius 98N+" #: ../rules/base.xml.in.h:128 -msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" -msgstr "Caps Lock (ketika ditekan), Alt+Caps Lock melakukan aksi capslock asli" +msgid "Samsung SDM 4500P" +msgstr "Samsung SDM 4500P" #: ../rules/base.xml.in.h:129 -msgid "Caps Lock acts as Shift with locking. Shift \"pauses\" Caps Lock" -msgstr "Caps Lock bertindak sebagai Shift dengan mengunci. Shift \"jeda\" Caps Lock." +msgid "Samsung SDM 4510P" +msgstr "Samsung SDM 4510P" #: ../rules/base.xml.in.h:130 -msgid "Caps Lock acts as Shift with locking. Shift doesn't affect Caps Lock" -msgstr "Caps Lock bertindak sebagai Shift yang terkunci. Shift tidak mempengaruhi Caps Lock" +msgid "Sanwa Supply SKB-KG3" +msgstr "Sanwa Supply SKB-KG3" #: ../rules/base.xml.in.h:131 -msgid "Caps Lock as Ctrl" -msgstr "Caps Lock sebagai Ctrl" +msgid "SK-1300" +msgstr "SK-1300" #: ../rules/base.xml.in.h:132 -msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" -msgstr "Caps Lock memilih level ketiga, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ketiga lainnya" +msgid "SK-2500" +msgstr "SK-2500" #: ../rules/base.xml.in.h:133 -msgid "Caps Lock is disabled" -msgstr "Caps Lock dinonaktifkan" +msgid "SK-6200" +msgstr "SK-6200" #: ../rules/base.xml.in.h:134 -msgid "Caps Lock key behavior" -msgstr "Perilaku tombol Caps Lock" +msgid "SK-7100" +msgstr "SK-7100" #: ../rules/base.xml.in.h:135 -msgid "Caps Lock toggles Shift so all keys are affected" -msgstr "Caps Lock mengubah Shift sehingga semua tombol terpengaruh" +msgid "Super Power Multimedia Keyboard" +msgstr "Super Power Multimedia Keyboard" #: ../rules/base.xml.in.h:136 -msgid "Caps Lock toggles normal capitalization of alphabetic characters" -msgstr "Caps Lock mengubah huruf besar normal atau karakter secara alfabetis" +msgid "SVEN Ergonomic 2500" +msgstr "SVEN Ergonomic 2500" #: ../rules/base.xml.in.h:137 -msgid "Caps Lock uses internal capitalization. Shift \"pauses\" Caps Lock" -msgstr "Caps Lock menggunakan huruf besar internal. Shift \"pauses\" Caps Lock" +msgid "SVEN Slim 303" +msgstr "SVEN Slim 303" #: ../rules/base.xml.in.h:138 -msgid "Caps Lock uses internal capitalization. Shift doesn't affect Caps Lock" -msgstr "Caps Lock menggunakan huruf besar internal. Shift tidak mempengaruhi Caps Lock" +msgid "Symplon PaceBook (tablet PC)" +msgstr "Symplon PaceBook (tablet PC)" #: ../rules/base.xml.in.h:139 -msgid "Catalan" -msgstr "Katala" +msgid "Toshiba Satellite S3000" +msgstr "Toshiba Satellite S3000" #: ../rules/base.xml.in.h:140 -msgid "Catalan (Spain, with middle-dot L)" -msgstr "Katala (Spanyol, dengan titik-tengah pada L)" +msgid "Trust Wireless Keyboard Classic" +msgstr "Trust Wireless Keyboard Classic" #: ../rules/base.xml.in.h:141 -msgid "Cherokee" -msgstr "Cherokee" +msgid "Trust Direct Access Keyboard" +msgstr "Trust Direct Access Keyboard" #: ../rules/base.xml.in.h:142 -msgid "Cherry B.UNLIMITED" -msgstr "Cherry B.UNLIMITED" +msgid "Trust Slimline" +msgstr "Trust Slimline" #: ../rules/base.xml.in.h:143 -msgid "Cherry Blue Line CyBo@rd" -msgstr "Cherry Blue Line CyBo@rd" +msgid "TypeMatrix EZ-Reach 2020" +msgstr "TypeMatrix EZ-Reach 2020" #: ../rules/base.xml.in.h:144 -msgid "Cherry Blue Line CyBo@rd (alternate option)" -msgstr "Cherry Blue Line CyBo@rd (alternate option)" +msgid "TypeMatrix EZ-Reach 2030 PS2" +msgstr "TypeMatrix EZ-Reach 2030 PS2" #: ../rules/base.xml.in.h:145 -msgid "Cherry CyBo@rd USB-Hub" -msgstr "Cherry CyBo@rd USB-Hub" +msgid "TypeMatrix EZ-Reach 2030 USB" +msgstr "TypeMatrix EZ-Reach 2030 USB" #: ../rules/base.xml.in.h:146 -msgid "Cherry CyMotion Expert" -msgstr "Cherry CyMotion Expert" +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:147 -msgid "Cherry CyMotion Master Linux" -msgstr "Cherry CyMotion Master Linux" +msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" +msgstr "TypeMatrix EZ-Reach 2030 USB (mode 106:JP)" #: ../rules/base.xml.in.h:148 -msgid "Cherry CyMotion Master XPress" -msgstr "Cherry CyMotion Master XPress" +msgid "Yahoo! Internet Keyboard" +msgstr "Papan Ketik Internet Yahoo!" #: ../rules/base.xml.in.h:149 -msgid "Chicony Internet Keyboard" -msgstr "Papan Tik Internet Chicony" +msgid "MacBook/MacBook Pro" +msgstr "MacBook/MacBook Pro" #: ../rules/base.xml.in.h:150 -msgid "Chicony KB-9885" -msgstr "Chicony KB-9885" +msgid "MacBook/MacBook Pro (Intl)" +msgstr "MacBook/MacBook Pro (Intl)" #: ../rules/base.xml.in.h:151 -msgid "Chicony KU-0108" -msgstr "Chicony KU-0108" +msgid "Macintosh" +msgstr "Macintosh" #: ../rules/base.xml.in.h:152 -msgid "Chicony KU-0420" -msgstr "Chicony KU-0420" +msgid "Macintosh Old" +msgstr "Macintosh Old" #: ../rules/base.xml.in.h:153 -msgid "Chinese" -msgstr "Cina" +msgid "Happy Hacking Keyboard for Mac" +msgstr "Happy Hacking Keyboard untuk Mac" #: ../rules/base.xml.in.h:154 -msgid "Chuvash" -msgstr "Chuvash" +msgid "Acer C300" +msgstr "Acer C300" #: ../rules/base.xml.in.h:155 -msgid "Chuvash (Latin)" -msgstr "Chuvash (Latin)" +msgid "Acer Ferrari 4000" +msgstr "Acer Ferrari 4000" #: ../rules/base.xml.in.h:156 -msgid "Classmate PC" -msgstr "Classmate PC" +msgid "Acer Laptop" +msgstr "Laptop Acer" #: ../rules/base.xml.in.h:157 -msgid "CloGaelach" -msgstr "CloGaelach" +msgid "Asus Laptop" +msgstr "Laptop Asus" #: ../rules/base.xml.in.h:158 -msgid "Compaq Easy Access Keyboard" -msgstr "Papan Ketik Akses Mudah Compaq" +msgid "Apple" +msgstr "Apple" #: ../rules/base.xml.in.h:159 -msgid "Compaq Internet Keyboard (13 keys)" -msgstr "Papan Ketik Internet Compaq (13 tombol)" +msgid "Apple Laptop" +msgstr "Laptop Apple" #: ../rules/base.xml.in.h:160 -msgid "Compaq Internet Keyboard (18 keys)" -msgstr "Papan Ketik Internet Compaq (18 tombol)" +msgid "Apple Aluminium Keyboard (ANSI)" +msgstr "Papan Ketik Aluminium Apple (ANSI)" #: ../rules/base.xml.in.h:161 -msgid "Compaq Internet Keyboard (7 keys)" -msgstr "Papan Ketik Internet Compaq (7 tombol)" +msgid "Apple Aluminium Keyboard (ISO)" +msgstr "Papan Ketik Aluminium (ISO)" #: ../rules/base.xml.in.h:162 -msgid "Compaq iPaq Keyboard" -msgstr "Papan Ketik Compaq iPaq" +msgid "Apple Aluminium Keyboard (JIS)" +msgstr "Papan Ketik Aluminium (JIS)" #: ../rules/base.xml.in.h:163 -msgid "Compose key position" -msgstr "Posisi tombol Compose" +msgid "SILVERCREST Multimedia Wireless Keyboard" +msgstr "Papan Ketik SILVERCREST Multimedia Wireless" #: ../rules/base.xml.in.h:164 -msgid "Control + Alt + Backspace" -msgstr "Control + Alt + Backspace" +msgid "Laptop/notebook eMachines m68xx" +msgstr "Laptop/notebook eMachines m68xx" #: ../rules/base.xml.in.h:165 -msgid "Control is mapped to Alt keys, Alt is mapped to Win keys" -msgstr "Kendali dipetakan ke tombol Alt, Alt dipetakan ke tombol Win" +msgid "BenQ X-Touch" +msgstr "BenQ X-Touch" #: ../rules/base.xml.in.h:166 -msgid "Control is mapped to Win keys (and the usual Ctrl keys)" -msgstr "Kendali dipetakan ke tombol Win ( dan tombol Ctrl biasa)" +msgid "BenQ X-Touch 730" +msgstr "BenQ X-Touch 730" #: ../rules/base.xml.in.h:167 -msgid "Creative Desktop Wireless 7000" -msgstr "Creative Desktop Wireless 7000" +msgid "BenQ X-Touch 800" +msgstr "BenQ X-Touch 800" #: ../rules/base.xml.in.h:168 -msgid "Crimean Tatar (Turkish Alt-Q)" -msgstr "Crimean Tatar (Turkish Alt-Q)" +msgid "Happy Hacking Keyboard" +msgstr "Happy Hacking Keyboard" #: ../rules/base.xml.in.h:169 -msgid "Crimean Tatar (Turkish F)" -msgstr "Crimean Tatar (Turkish F)" +msgid "Classmate PC" +msgstr "Classmate PC" #: ../rules/base.xml.in.h:170 -msgid "Crimean Tatar (Turkish Q)" -msgstr "Crimean Tatar (Turkish Q)" +msgid "OLPC" +msgstr "OLPC" #: ../rules/base.xml.in.h:171 -msgid "Croatian" -msgstr "Kroasia" +msgid "Sun Type 7 USB" +msgstr "Sun Type 7 USB" #: ../rules/base.xml.in.h:172 -msgid "Croatian (US keyboard with Croatian digraphs)" -msgstr "Kroasia (papan tik AS dengan digraf Kroasia)" +msgid "Sun Type 7 USB (European layout)" +msgstr "Sun Type 7 USB (tata letak Eropa)" #: ../rules/base.xml.in.h:173 -msgid "Croatian (US keyboard with Croatian letters)" -msgstr "Kroasia (papan tik AS dengan huruf Kroasia)" +msgid "Sun Type 7 USB (Unix layout)" +msgstr "Sun Type 7 USB (tata letak Unix)" #: ../rules/base.xml.in.h:174 -msgid "Croatian (use Croatian digraphs)" -msgstr "Kroasis (gunakan diagraph Kroasia)" +msgid "Sun Type 7 USB (Japanese layout) / Japanese 106-key" +msgstr "Sun Type 7 USB (tata letak Jepang) / Jepang 106-tombol" #: ../rules/base.xml.in.h:175 -msgid "Croatian (use guillemets for quotes)" -msgstr "Kroasia (gunakan guillemets untuk tanda petik)" +msgid "Sun Type 6/7 USB" +msgstr "Sun Type 6/7 USB" #: ../rules/base.xml.in.h:176 -msgid "Ctrl key position" -msgstr "Posisi tombol Ctrl" +msgid "Sun Type 6/7 USB (European layout)" +msgstr "Sun Type 6/7 USB (tata letak Eropa)" #: ../rules/base.xml.in.h:177 -msgid "Ctrl+Shift" -msgstr "Ctrl+Shift" +msgid "Sun Type 6 USB (Unix layout)" +msgstr "Sun Type 6 USB (tata letak Unix)" #: ../rules/base.xml.in.h:178 -msgid "Czech" -msgstr "Ceko" +msgid "Sun Type 6 USB (Japanese layout)" +msgstr "Sun Type 6 USB (tata letak Jepang)" #: ../rules/base.xml.in.h:179 -msgid "Czech (UCW layout, accented letters only)" -msgstr "Ceko (tata letak UCW, hanya huruf beraksen)" +msgid "Sun Type 6 (Japanese layout)" +msgstr "Sun Type 6 (tata letak Jepang)" #: ../rules/base.xml.in.h:180 -msgid "Czech (US Dvorak with CZ UCW support)" -msgstr "Ceko (Dvorak AS dengan dukungan CZ UCW)" +msgid "Targa Visionary 811" +msgstr "Targa Visionary 811" #: ../rules/base.xml.in.h:181 -msgid "Czech (qwerty)" -msgstr "Ceko (qwerty)" +msgid "Unitek KB-1925" +msgstr "Unitek KB-1925" #: ../rules/base.xml.in.h:182 -msgid "Czech (qwerty, extended Backslash)" -msgstr "Ceko (qwerty, Backslash diperpanjang)" +msgid "FL90" +msgstr "FL90" #: ../rules/base.xml.in.h:183 -msgid "Czech (with <\\|> key)" -msgstr "Ceko (dengan tombol <\\|>)" +msgid "Creative Desktop Wireless 7000" +msgstr "Creative Desktop Wireless 7000" #: ../rules/base.xml.in.h:184 -msgid "DTK2000" -msgstr "DTK2000" - -#: ../rules/base.xml.in.h:185 -msgid "Danish" -msgstr "Denmark" - -#: ../rules/base.xml.in.h:186 -msgid "Danish (Dvorak)" -msgstr "Denmark (Dvorak)" +msgid "Htc Dream phone" +msgstr "Telepon Htc Dream" -#: ../rules/base.xml.in.h:187 -msgid "Danish (Macintosh)" -msgstr "Denmark (Macintosh)" +#. Keyboard indicator for English layouts +#: ../rules/base.xml.in.h:186 ../rules/base.extras.xml.in.h:33 +msgid "en" +msgstr "en" -#: ../rules/base.xml.in.h:188 -msgid "Danish (Macintosh, eliminate dead keys)" -msgstr "Denmark (Macintosh, hapus tombol mati" +#: ../rules/base.xml.in.h:187 ../rules/base.extras.xml.in.h:34 +msgid "English (US)" +msgstr "Inggris (AS)" +#. Keyboard indicator for Cherokee layouts #: ../rules/base.xml.in.h:189 -msgid "Danish (eliminate dead keys)" -msgstr "Denmark (hapus tombol mati" +msgid "chr" +msgstr "chr" #: ../rules/base.xml.in.h:190 -msgid "Default numeric keypad keys" -msgstr "Tombol angka keypad standar" +msgid "Cherokee" +msgstr "Cherokee" #: ../rules/base.xml.in.h:191 -msgid "Dell" -msgstr "Dell" +msgid "English (US, with euro on 5)" +msgstr "Inggris (AS, dengan euro pada 5)" #: ../rules/base.xml.in.h:192 -msgid "Dell 101-key PC" -msgstr "PC 101-tombol Dell" +msgid "English (US, international with dead keys)" +msgstr "Inggris (AS, internasional dengan tombol mati)" #: ../rules/base.xml.in.h:193 -msgid "Dell Laptop/notebook Inspiron 6xxx/8xxx" -msgstr "Dell Laptop/notebook Inspiron 6xxx/8xxx" +msgid "English (US, alternative international)" +msgstr "Inggris (AS, internasional alternatif)" #: ../rules/base.xml.in.h:194 -msgid "Dell Laptop/notebook Precision M series" -msgstr "Dell Laptop/notebook Precision M series" +msgid "English (Colemak)" +msgstr "Inggris (Colemak)" #: ../rules/base.xml.in.h:195 -msgid "Dell Latitude series laptop" -msgstr "Laptop seri Dell Latitude" +msgid "English (Dvorak)" +msgstr "Inggris (Dvorak)" #: ../rules/base.xml.in.h:196 -msgid "Dell Precision M65" -msgstr "Dell Precision M65" +msgid "English (Dvorak, international with dead keys)" +msgstr "Inggris (Dvorak, internasional dengan tombol mati)" #: ../rules/base.xml.in.h:197 -msgid "Dell SK-8125" -msgstr "Dell SK-8125" +msgid "English (Dvorak alternative international no dead keys)" +msgstr "Inggris (Dvorak alternatif Internasional tanpa tombol mati)" #: ../rules/base.xml.in.h:198 -msgid "Dell SK-8135" -msgstr "Dell SK-8135" +msgid "English (left handed Dvorak)" +msgstr "Inggris (Dvorak kidal)" #: ../rules/base.xml.in.h:199 -msgid "Dell USB Multimedia Keyboard" -msgstr "Papan Ketik Multimedia USB Dell" +msgid "English (right handed Dvorak)" +msgstr "Inggris (Dvorak tangan kanan)" #: ../rules/base.xml.in.h:200 -msgid "Dexxa Wireless Desktop Keyboard" -msgstr "Papan Ketik Desktop Nirkabel Dexxa" +msgid "English (classic Dvorak)" +msgstr "Inggris (Dvorak klasik)" #: ../rules/base.xml.in.h:201 -msgid "Dhivehi" -msgstr "Dhivehi" - -#: ../rules/base.xml.in.h:202 -msgid "Diamond 9801 / 9802 series" -msgstr "Diamond 9801 / 9802 series" +msgid "English (programmer Dvorak)" +msgstr "Inggris (Dvorak pemrogram)" -#: ../rules/base.xml.in.h:203 -msgid "Dutch" -msgstr "Belanda" +#. Keyboard indicator for Russian layouts +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 +msgid "ru" +msgstr "ru" #: ../rules/base.xml.in.h:204 -msgid "Dutch (Macintosh)" -msgstr "Belanda (Macintosh)" +msgid "Russian (US, phonetic)" +msgstr "Rusia (AS, fonetik)" #: ../rules/base.xml.in.h:205 -msgid "Dutch (Sun dead keys)" -msgstr "Belanda (tombol mati Sun)" +msgid "English (Macintosh)" +msgstr "Inggris (Macintosh)" #: ../rules/base.xml.in.h:206 -msgid "Dutch (standard)" -msgstr "Belanda (standar)" +msgid "English (international AltGr dead keys)" +msgstr "Inggris (internasional AltGr tombol mati)" #: ../rules/base.xml.in.h:207 -msgid "Dzongkha" -msgstr "Dzongkha" +msgid "English (the divide/multiply keys toggle the layout)" +msgstr "Inggris (tombol bagi/kali menjungkitkan tata letak)" #: ../rules/base.xml.in.h:208 -msgid "Enable extra typographic characters" -msgstr "Aktifkan karakter tipografi ekstra" +msgid "Serbo-Croatian (US)" +msgstr "Serbo-Kroasia (AS)" #: ../rules/base.xml.in.h:209 -msgid "English (Cameroon)" -msgstr "Inggris (Kamerun)" +msgid "English (Workman)" +msgstr "Inggris (Workman)" #: ../rules/base.xml.in.h:210 -msgid "English (Canada)" -msgstr "Inggris (Kanada)" +msgid "English (Workman, international with dead keys)" +msgstr "Inggris (Workman,internasional dengan tombol mati)" -#: ../rules/base.xml.in.h:211 -msgid "English (Colemak)" -msgstr "Inggris (Colemak)" - -#: ../rules/base.xml.in.h:212 -msgid "English (Dvorak alternative international no dead keys)" -msgstr "Inggris (Dvorak alternatif Internasional tanpa tombol mati)" +#. Keyboard indicator for Persian layouts +#: ../rules/base.xml.in.h:212 ../rules/base.extras.xml.in.h:15 +msgid "fa" +msgstr "fa" #: ../rules/base.xml.in.h:213 -msgid "English (Dvorak international with dead keys)" -msgstr "Inggris (Dvorak internasional dengan tombol mati)" - -#: ../rules/base.xml.in.h:214 -msgid "English (Dvorak)" -msgstr "Inggris (Dvorak)" +msgid "Afghani" +msgstr "Afganistan" +#. Keyboard indicator for Pashto layouts #: ../rules/base.xml.in.h:215 -msgid "English (Ghana)" -msgstr "Inggris (Ghana)" +msgid "ps" +msgstr "ps" #: ../rules/base.xml.in.h:216 -msgid "English (Ghana, GILLBT)" -msgstr "Inggris (Ghana, GILLBT)" - -#: ../rules/base.xml.in.h:217 -msgid "English (Ghana, multilingual)" -msgstr "Inggris (Ghana, multibahasa)" +msgid "Pashto" +msgstr "Pashto" +#. Keyboard indicator for Uzbek layouts #: ../rules/base.xml.in.h:218 -msgid "English (India, with RupeeSign)" -msgstr "English (India, dengan RupeeSign)" +msgid "uz" +msgstr "uz" #: ../rules/base.xml.in.h:219 -msgid "English (Macintosh)" -msgstr "Inggris (Macintosh)" +msgid "Uzbek (Afghanistan)" +msgstr "Uzbek (Afghanistan)" #: ../rules/base.xml.in.h:220 -msgid "English (Mali, US Macintosh)" -msgstr "Inggris (Mali, Macintosh AS)" +msgid "Pashto (Afghanistan, OLPC)" +msgstr "Pashto (Afghanistan, OLPC)" #: ../rules/base.xml.in.h:221 -msgid "English (Mali, US international)" -msgstr "Inggris (Mali, Internasional AS)" +msgid "Persian (Afghanistan, Dari OLPC)" +msgstr "Persia (Afghanistan, Dari OLPC)" #: ../rules/base.xml.in.h:222 -msgid "English (Nigeria)" -msgstr "Inggris (Nigeria)" - -#: ../rules/base.xml.in.h:223 -msgid "English (South Africa)" -msgstr "Inggris (Afrika Selatan)" +msgid "Uzbek (Afghanistan, OLPC)" +msgstr "Uzbek (Afghanistan, OLPC)" -#: ../rules/base.xml.in.h:224 -msgid "English (UK)" -msgstr "Inggris (Britania)" +#. Keyboard indicator for Arabic layouts +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 +msgid "ar" +msgstr "ar" -#: ../rules/base.xml.in.h:225 -msgid "English (UK, Colemak)" -msgstr "Inggris (UK, Colemak)" +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 +msgid "Arabic" +msgstr "Arab" #: ../rules/base.xml.in.h:226 -msgid "English (UK, Dvorak with UK punctuation)" -msgstr "Inggris (Britania, Dvorak dengan pungtuasi Britania)" +msgid "Arabic (azerty)" +msgstr "Arab (azerty)" #: ../rules/base.xml.in.h:227 -msgid "English (UK, Dvorak)" -msgstr "Inggris (Britania, Dvorak)" +msgid "Arabic (azerty/digits)" +msgstr "Arab (azerty/digit)" #: ../rules/base.xml.in.h:228 -msgid "English (UK, Macintosh international)" -msgstr "Inggris (Britania, Macintosh internasional)" +msgid "Arabic (digits)" +msgstr "Arab (digits)" #: ../rules/base.xml.in.h:229 -msgid "English (UK, Macintosh)" -msgstr "Inggris (Britania, Macintosh)" +msgid "Arabic (qwerty)" +msgstr "Arab (qwerty)" #: ../rules/base.xml.in.h:230 -msgid "English (UK, extended WinKeys)" -msgstr "Inggris (Britania, Winkeys diperluas)" +msgid "Arabic (qwerty/digits)" +msgstr "Arab (qwerty/digit)" #: ../rules/base.xml.in.h:231 -msgid "English (UK, international with dead keys)" -msgstr "Inggris (Britania, internasional dengan tombol mati)" - -#: ../rules/base.xml.in.h:232 ../rules/base.extras.xml.in.h:8 -msgid "English (US)" -msgstr "Inggris (AS)" +msgid "Arabic (Buckwalter)" +msgstr "Arab (Buckwalter)" +#. Keyboard indicator for Albanian layouts #: ../rules/base.xml.in.h:233 -msgid "English (US, alternative international)" -msgstr "Inggris (AS, internasional alternatif)" +msgid "sq" +msgstr "sq" #: ../rules/base.xml.in.h:234 -msgid "English (US, international with dead keys)" -msgstr "Inggris (AS, internasional dengan tombol mati)" - -#: ../rules/base.xml.in.h:235 -msgid "English (US, with euro on 5)" -msgstr "Inggris (AS, dengan euro pada 5)" +msgid "Albanian" +msgstr "Albania" -#: ../rules/base.xml.in.h:236 -msgid "English (classic Dvorak)" -msgstr "Inggris (Dvorak klasik)" +#. Keyboard indicator for Armenian layouts +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 +msgid "hy" +msgstr "hy" -#: ../rules/base.xml.in.h:237 -msgid "English (international AltGr dead keys)" -msgstr "Inggris (internasional AltGr tombol mati)" +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 +msgid "Armenian" +msgstr "Armenia" #: ../rules/base.xml.in.h:238 -msgid "English (layout toggle on multiply/divide key)" -msgstr "Inggris (ubah tata letak pada tombol perkalian/pembagian)" +msgid "Armenian (phonetic)" +msgstr "Armenia (fonetik)" #: ../rules/base.xml.in.h:239 -msgid "English (left handed Dvorak)" -msgstr "Inggris (Dvorak kidal)" +msgid "Armenian (alternative phonetic)" +msgstr "Armenia (fonetik alternatif)" #: ../rules/base.xml.in.h:240 -msgid "English (programmer Dvorak)" -msgstr "Inggris (Dvorak pemrogram)" +msgid "Armenian (eastern)" +msgstr "Armenia (timur)" #: ../rules/base.xml.in.h:241 -msgid "English (right handed Dvorak)" -msgstr "Inggris (Dvorak tangan kanan)" +msgid "Armenian (western)" +msgstr "Armenia (barat)" #: ../rules/base.xml.in.h:242 -msgid "Ennyah DKB-1008" -msgstr "Ennyah DKB-1008" - -#: ../rules/base.xml.in.h:243 -msgid "Enter on keypad" -msgstr "Enter pada keypad" +msgid "Armenian (alternative eastern)" +msgstr "Armenia (timur alternatif)" -#: ../rules/base.xml.in.h:244 -msgid "Esperanto" -msgstr "Esperanto" +#. Keyboard indicator for German layouts +#: ../rules/base.xml.in.h:244 ../rules/base.extras.xml.in.h:10 +msgid "de" +msgstr "de" #: ../rules/base.xml.in.h:245 -msgid "Esperanto (Portugal, Nativo)" -msgstr "Esperanto (Portugal, Nativo)" +msgid "German (Austria)" +msgstr "Jerman (Austria)" #: ../rules/base.xml.in.h:246 -msgid "Esperanto (displaced semicolon and quote, obsolete)" -msgstr "Esperanto (titik koma dan tanda kutip tergeser, kuno)" +msgid "German (Austria, eliminate dead keys)" +msgstr "Jerman (Austria, hapus tombol mati)" #: ../rules/base.xml.in.h:247 -msgid "Estonian" -msgstr "Estonia" +msgid "German (Austria, Sun dead keys)" +msgstr "Jerman (Austria, tombol mati Sun)" #: ../rules/base.xml.in.h:248 -msgid "Estonian (Dvorak)" -msgstr "Estonia (Dvorak)" - -#: ../rules/base.xml.in.h:249 -msgid "Estonian (US keyboard with Estonian letters)" -msgstr "Estonia (papan tik AS dengan huruf Estonia)" +msgid "German (Austria, Macintosh)" +msgstr "Jerman (Austria, Macintosh)" +#. Keyboard indicator for Azerbaijani layouts #: ../rules/base.xml.in.h:250 -msgid "Estonian (eliminate dead keys)" -msgstr "Estonia (hapus tombol mati)" +msgid "az" +msgstr "az" #: ../rules/base.xml.in.h:251 -msgid "Euro on 2" -msgstr "Euro pada 2" +msgid "Azerbaijani" +msgstr "Ajarbaijan" #: ../rules/base.xml.in.h:252 -msgid "Euro on 4" -msgstr "Euro pada 4" - -#: ../rules/base.xml.in.h:253 -msgid "Euro on 5" -msgstr "Euro pada 5" +msgid "Azerbaijani (Cyrillic)" +msgstr "Azerbaijan (Sirilik)" +#. Keyboard indicator for Belarusian layouts #: ../rules/base.xml.in.h:254 -msgid "Euro on E" -msgstr "Euro pada E" +msgid "by" +msgstr "by" #: ../rules/base.xml.in.h:255 -msgid "Everex STEPnote" -msgstr "Everex STEPnote" +msgid "Belarusian" +msgstr "Belarusia" #: ../rules/base.xml.in.h:256 -msgid "Ewe" -msgstr "Ewe" +msgid "Belarusian (legacy)" +msgstr "Belarusia (legacy)" #: ../rules/base.xml.in.h:257 -msgid "FL90" -msgstr "FL90" - -#: ../rules/base.xml.in.h:258 -msgid "Faroese" -msgstr "Faro" +msgid "Belarusian (Latin)" +msgstr "Belarusia (Latin)" -#: ../rules/base.xml.in.h:259 -msgid "Faroese (eliminate dead keys)" -msgstr "Faro (hapus tombol mati)" +#. Keyboard indicator for Belgian layouts +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 +msgid "be" +msgstr "be" -#: ../rules/base.xml.in.h:260 -msgid "Filipino" -msgstr "Filipina" +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 +msgid "Belgian" +msgstr "Belgia" #: ../rules/base.xml.in.h:261 -msgid "Filipino (Capewell-Dvorak Baybayin)" -msgstr "Filipina (Capewell-Dvorak Baybayin)" +msgid "Belgian (alternative)" +msgstr "Belgia (alternatif)" #: ../rules/base.xml.in.h:262 -msgid "Filipino (Capewell-Dvorak Latin)" -msgstr "Filipina (Capewell-Dvorak Latin)" +msgid "Belgian (alternative, Latin-9 only)" +msgstr "Belgia (alternative, hanya Latin-9)" #: ../rules/base.xml.in.h:263 -msgid "Filipino (Capewell-QWERF 2006 Baybayin)" -msgstr "Filipina (Capewell-QWERF 2006 Baybayin)" +msgid "Belgian (alternative, Sun dead keys)" +msgstr "Belgia (alternatif, tombol mati Sun)" #: ../rules/base.xml.in.h:264 -msgid "Filipino (Capewell-QWERF 2006 Latin)" -msgstr "Filipina (Capewell-QWERF 2006 Latin)" +msgid "Belgian (ISO alternate)" +msgstr "Belgia (alternatif ISO)" #: ../rules/base.xml.in.h:265 -msgid "Filipino (Colemak Baybayin)" -msgstr "Filipina (Colemak Baybayin)" +msgid "Belgian (eliminate dead keys)" +msgstr "Belgia (hapus tombol mati)" #: ../rules/base.xml.in.h:266 -msgid "Filipino (Colemak Latin)" -msgstr "Filipina (Colemak Latin)" +msgid "Belgian (Sun dead keys)" +msgstr "Belgia (tombol mati Sun)" #: ../rules/base.xml.in.h:267 -msgid "Filipino (Dvorak Baybayin)" -msgstr "Filipina (Dvorak Baybayin)" - -#: ../rules/base.xml.in.h:268 -msgid "Filipino (Dvorak Latin)" -msgstr "Filipina (Dvorak Latin)" +msgid "Belgian (Wang model 724 azerty)" +msgstr "Belgia (Wang model 724 azerty)" +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 -msgid "Filipino (QWERTY Baybayin)" -msgstr "Filipina (QWERTY Baybayin)" +msgid "bn" +msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Finnish" -msgstr "Finlandia" +msgid "Bangla" +msgstr "Bangla" #: ../rules/base.xml.in.h:271 -msgid "Finnish (Macintosh)" -msgstr "Finlandia (Macintosh)" - -#: ../rules/base.xml.in.h:272 -msgid "Finnish (classic)" -msgstr "Finlandia (klasik)" +msgid "Bangla (Probhat)" +msgstr "Bangla (Probhat)" +#. Keyboard indicator for Indian layouts #: ../rules/base.xml.in.h:273 -msgid "Finnish (classic, eliminate dead keys)" -msgstr "Finlandia (klasik, hapus tombol mati)" +msgid "in" +msgstr "in" + +#: ../rules/base.xml.in.h:274 +msgid "Indian" +msgstr "India" + +#: ../rules/base.xml.in.h:275 +msgid "Bangla (India)" +msgstr "Bangla (India)" -#. This assumes the KP_ abstract symbols are actually useful for some apps -#. The description needs to be rewritten #: ../rules/base.xml.in.h:276 -msgid "Four-level key with abstract separators" -msgstr "Tombol empat-level dengan pemisah abstrak" +msgid "Bangla (India, Probhat)" +msgstr "Bangla (India, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Four-level key with comma" -msgstr "Tombol empat-level dengan koma" +msgid "Bangla (India, Baishakhi)" +msgstr "Bangla (India, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Four-level key with dot" -msgstr "Tombol empat-level dengan titik" +msgid "Bangla (India, Bornona)" +msgstr "Bangla (India, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Four-level key with dot, latin-9 restriction" -msgstr "Tombol empat-level dengan titik, pembatasan latin-9" +msgid "Bangla (India, Uni Gitanjali)" +msgstr "Bangla (India, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Four-level key with momayyez" -msgstr "Tombol empat level dengan momayyez" - -#: ../rules/base.xml.in.h:281 -msgid "French" -msgstr "Perancis" +msgid "Bangla (India, Baishakhi Inscript)" +msgstr "Bangla (India, Baishakhi Inscript)" +#. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:282 -msgid "French (Bepo, ergonomic, Dvorak way)" -msgstr "Perancis (Bepo, ergonomis, Dvorak way)" +msgid "gu" +msgstr "gu" #: ../rules/base.xml.in.h:283 -msgid "French (Bepo, ergonomic, Dvorak way, latin-9 only)" -msgstr "Perancis (Bepo, ergonomis, Dvorak way, hanya latin-9)" - -#: ../rules/base.xml.in.h:284 -msgid "French (Breton)" -msgstr "Perancis (Breton)" +msgid "Gujarati" +msgstr "Gujurati" +#. Keyboard indicator for Punjabi layouts #: ../rules/base.xml.in.h:285 -msgid "French (Cameroon)" -msgstr "Perancis (Kamerun)" +msgid "pa" +msgstr "pa" -#: ../rules/base.xml.in.h:286 ../rules/base.extras.xml.in.h:11 -msgid "French (Canada)" -msgstr "Perancis (Kanada)" +#: ../rules/base.xml.in.h:286 +msgid "Punjabi (Gurmukhi)" +msgstr "Punjab (Gurmukhi)" #: ../rules/base.xml.in.h:287 -msgid "French (Canada, Dvorak)" -msgstr "Perancis (Kanada, Dvorak)" - -#: ../rules/base.xml.in.h:288 -msgid "French (Canada, legacy)" -msgstr "Perancis (Kanada, legacy)" +msgid "Punjabi (Gurmukhi Jhelum)" +msgstr "Punjab (Gurmukhi Jhelum)" +#. Keyboard indicator for Kannada layouts #: ../rules/base.xml.in.h:289 -msgid "French (Democratic Republic of the Congo)" -msgstr "Perancis (Republik Demokratik Kongo)" +msgid "kn" +msgstr "kn" #: ../rules/base.xml.in.h:290 -msgid "French (Dvorak)" -msgstr "Perancis (Dvorak)" +msgid "Kannada" +msgstr "Kannada" #: ../rules/base.xml.in.h:291 -msgid "French (Guinea)" -msgstr "Perancis (Guinea)" - -#: ../rules/base.xml.in.h:292 -msgid "French (Macintosh)" -msgstr "French (Macintosh)" +msgid "Kannada (KaGaPa phonetic)" +msgstr "Kannada (fonetik KaGaPa)" +#. Keyboard indicator for Malayalam layouts #: ../rules/base.xml.in.h:293 -msgid "French (Mali, alternative)" -msgstr "Perancis (Mali, alternatif)" +msgid "ml" +msgstr "ml" #: ../rules/base.xml.in.h:294 -msgid "French (Morocco)" -msgstr "Perancis (Maroko)" +msgid "Malayalam" +msgstr "Malayalam" #: ../rules/base.xml.in.h:295 -msgid "French (Sun dead keys)" -msgstr "Perancis (tombol mati Sun)" +msgid "Malayalam (Lalitha)" +msgstr "Malayalam (Lalitha)" #: ../rules/base.xml.in.h:296 -msgid "French (Switzerland)" -msgstr "Perancis (Swiss)" - -#: ../rules/base.xml.in.h:297 -msgid "French (Switzerland, Macintosh)" -msgstr "Perancis (Swiss, Macintosh)" +msgid "Malayalam (enhanced Inscript with Rupee Sign)" +msgstr "Malayalam (Inscript ditingkatkan dengan Tanda Rupee)" +#. Keyboard indicator for Oriya layouts #: ../rules/base.xml.in.h:298 -msgid "French (Switzerland, Sun dead keys)" -msgstr "Perancis (Swiss, tombol mati Sun)" +msgid "or" +msgstr "or" #: ../rules/base.xml.in.h:299 -msgid "French (Switzerland, eliminate dead keys)" -msgstr "Perancis (Swiss, hapus tombol mati)" - -#: ../rules/base.xml.in.h:300 -msgid "French (alternative)" -msgstr "Perancis (alternatif)" +msgid "Oriya" +msgstr "Oriya" +#. Keyboard indicator for Tamil layouts #: ../rules/base.xml.in.h:301 -msgid "French (alternative, Sun dead keys)" -msgstr "Perancis (alternatif, tombol mati Sun)" +msgid "ta" +msgstr "ta" #: ../rules/base.xml.in.h:302 -msgid "French (alternative, eliminate dead keys)" -msgstr "Perancis (alternatif, hapus tombol mati)" +msgid "Tamil (Unicode)" +msgstr "Tamil (Unicode)" #: ../rules/base.xml.in.h:303 -msgid "French (alternative, latin-9 only)" -msgstr "Perancis (alternatif, hanya latin-9)" +msgid "Tamil (keyboard with numerals)" +msgstr "Tamil (papan tik dengan angka)" #: ../rules/base.xml.in.h:304 -msgid "French (eliminate dead keys)" -msgstr "Perancis (hapus tombol mati)" +msgid "Tamil (TAB typewriter)" +msgstr "Tamil (mesin tik TAB)" #: ../rules/base.xml.in.h:305 -msgid "French (legacy, alternative)" -msgstr "Perancis (legacy, alternatif)" +msgid "Tamil (TSCII typewriter)" +msgstr "Tamil (mestin tik TSCII)" #: ../rules/base.xml.in.h:306 -msgid "French (legacy, alternative, Sun dead keys)" -msgstr "Perancis (legacy, alternatif, tombol mati Sun)" - -#: ../rules/base.xml.in.h:307 -msgid "French (legacy, alternative, eliminate dead keys)" -msgstr "Perancis (legacy, alternatif, hapus tombol mati)" +msgid "Tamil" +msgstr "Tamil" +#. Keyboard indicator for Telugu layouts #: ../rules/base.xml.in.h:308 -msgid "Fujitsu-Siemens Computers AMILO laptop" -msgstr "Fujitsu-Siemens Computers AMILO laptop" +msgid "te" +msgstr "te" #: ../rules/base.xml.in.h:309 -msgid "Fula" -msgstr "Fula" +msgid "Telugu" +msgstr "Telugu" #: ../rules/base.xml.in.h:310 -msgid "Ga" -msgstr "Ga" - -#: ../rules/base.xml.in.h:311 -msgid "Generic 101-key PC" -msgstr "PC 101-tombol Generik " +msgid "Telugu (KaGaPa phonetic)" +msgstr "Telugu (fonetik KaGaPa)" +#. Keyboard indicator for Urdu layouts #: ../rules/base.xml.in.h:312 -msgid "Generic 102-key (Intl) PC" -msgstr "PC 102-tombol (Intl) Generic" +msgid "ur" +msgstr "ur" #: ../rules/base.xml.in.h:313 -msgid "Generic 104-key PC" -msgstr "PC 104-tombol Generik " +msgid "Urdu (phonetic)" +msgstr "Urdu (fonetik)" #: ../rules/base.xml.in.h:314 -msgid "Generic 105-key (Intl) PC" -msgstr "PC 105-tombol (Intl) Generic" +msgid "Urdu (alternative phonetic)" +msgstr "Urdu (fonetik alternatif)" #: ../rules/base.xml.in.h:315 -msgid "Genius Comfy KB-12e" -msgstr "Genius Comfy KB-12e" - -#: ../rules/base.xml.in.h:316 -msgid "Genius Comfy KB-16M / Genius MM Keyboard KWD-910" -msgstr "Genius Comfy KB-16M / Genius MM Keyboard KWD-910" +msgid "Urdu (WinKeys)" +msgstr "Urdu (WinKeys)" +#. Keyboard indicator for Hindi layouts #: ../rules/base.xml.in.h:317 -msgid "Genius Comfy KB-21e-Scroll" -msgstr "Genius Comfy KB-21e-Scroll" +msgid "hi" +msgstr "hi" #: ../rules/base.xml.in.h:318 -msgid "Genius KB-19e NB" -msgstr "Genius KB-19e NB" +msgid "Hindi (Bolnagri)" +msgstr "Hindi (Bolnagri)" #: ../rules/base.xml.in.h:319 -msgid "Genius KKB-2050HS" -msgstr "Genius KKB-2050HS" +msgid "Hindi (Wx)" +msgstr "Hindi (Wx)" #: ../rules/base.xml.in.h:320 -msgid "Georgian" -msgstr "Georgia" - -#: ../rules/base.xml.in.h:321 -msgid "Georgian (France, AZERTY Tskapo)" -msgstr "Georgia (Perancis, AZERTY Tskapo)" +msgid "Hindi (KaGaPa phonetic)" +msgstr "Hindi (fonetik KaGaPa)" +#. Keyboard indicator for Sanskrit layouts #: ../rules/base.xml.in.h:322 -msgid "Georgian (Italy)" -msgstr "Georgia (Italia)" +msgid "sa" +msgstr "sa" #: ../rules/base.xml.in.h:323 -msgid "Georgian (MESS)" -msgstr "Georgia (MESS)" - -#: ../rules/base.xml.in.h:324 -msgid "Georgian (ergonomic)" -msgstr "Georgia (ergonomik)" +msgid "Sanskrit (KaGaPa phonetic)" +msgstr "Sanskerta (fonetik KaGaPa)" -#: ../rules/base.xml.in.h:325 ../rules/base.extras.xml.in.h:12 -msgid "German" -msgstr "Jerman" +#. Keyboard indicator for Marathi layouts +#: ../rules/base.xml.in.h:325 +msgid "mr" +msgstr "mr" #: ../rules/base.xml.in.h:326 -msgid "German (Austria)" -msgstr "Jerman (Austria)" +msgid "Marathi (KaGaPa phonetic)" +msgstr "Marathi (fonetik KaGaPa)" #: ../rules/base.xml.in.h:327 -msgid "German (Austria, Macintosh)" -msgstr "Jerman (Austria, Macintosh)" - -#: ../rules/base.xml.in.h:328 -msgid "German (Austria, Sun dead keys)" -msgstr "Jerman (Austria, tombol mati Sun)" +msgid "English (India, with RupeeSign)" +msgstr "English (India, dengan RupeeSign)" +#. Keyboard indicator for Bosnian layouts #: ../rules/base.xml.in.h:329 -msgid "German (Austria, eliminate dead keys)" -msgstr "Jerman (Austria, hapus tombol mati)" +msgid "bs" +msgstr "bs" #: ../rules/base.xml.in.h:330 -msgid "German (Dvorak)" -msgstr "Jerman (Dvorak)" +msgid "Bosnian" +msgstr "Bosnia" #: ../rules/base.xml.in.h:331 -msgid "German (Macintosh)" -msgstr "German (Macintosh)" +msgid "Bosnian (use guillemets for quotes)" +msgstr "Bosnia (gunakan guillemets untuk tanda petik)" #: ../rules/base.xml.in.h:332 -msgid "German (Macintosh, eliminate dead keys)" -msgstr "Jerman (Macintosh, hapus tombol mati)" +msgid "Bosnian (use Bosnian digraphs)" +msgstr "Bosnia (gunakan diagraph Bosnia)" #: ../rules/base.xml.in.h:333 -msgid "German (Neo 2)" -msgstr "Jerman (Neo 2)" +msgid "Bosnian (US keyboard with Bosnian digraphs)" +msgstr "Bosnia (papan tik AS dengan digraf Bosnia)" #: ../rules/base.xml.in.h:334 -msgid "German (Sun dead keys)" -msgstr "Jerman (tombol mati Sun)" - -#: ../rules/base.xml.in.h:335 -msgid "German (Switzerland)" -msgstr "Jerman (Swiss)" +msgid "Bosnian (US keyboard with Bosnian letters)" +msgstr "Bosnia (papan tik AS dengan huruf Bosnia)" -#: ../rules/base.xml.in.h:336 -msgid "German (Switzerland, Macintosh)" -msgstr "Jerman (Swiss, Macintosh)" +#. Keyboard indicator for Portuguese layouts +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 +msgid "pt" +msgstr "pt" -#: ../rules/base.xml.in.h:337 -msgid "German (Switzerland, Sun dead keys)" -msgstr "Jerman (Swiss, tombol mati Sun)" +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 +msgid "Portuguese (Brazil)" +msgstr "Portugis (Brasil)" #: ../rules/base.xml.in.h:338 -msgid "German (Switzerland, eliminate dead keys)" -msgstr "Jerman (Swiss, hapus tombol mati)" +msgid "Portuguese (Brazil, eliminate dead keys)" +msgstr "Portugis (Brasil, hapus tombo mati)" #: ../rules/base.xml.in.h:339 -msgid "German (Switzerland, legacy)" -msgstr "Jerman (Swiss, legacy)" +msgid "Portuguese (Brazil, Dvorak)" +msgstr "Portugis (Brasil, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "German (dead acute)" -msgstr "Jerman (acute mati)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Portugis (Brasil, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "German (dead grave acute)" -msgstr "Jerman (grave acute mati)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Portugis (Brasil, Nativo untuk papan ketik AS)" #: ../rules/base.xml.in.h:342 -msgid "German (eliminate dead keys)" -msgstr "Jerman (hapus tombol mati)" - -#: ../rules/base.xml.in.h:343 -msgid "Greek" -msgstr "Yunani" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brazil, Nativo)" +#. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 -msgid "Greek (eliminate dead keys)" -msgstr "Yunani (hapus tombol mati)" +msgid "bg" +msgstr "bg" #: ../rules/base.xml.in.h:345 -msgid "Greek (extended)" -msgstr "Yunani (diperluas)" +msgid "Bulgarian" +msgstr "Bulgaria" #: ../rules/base.xml.in.h:346 -msgid "Greek (polytonic)" -msgstr "Yunani (politonik)" +msgid "Bulgarian (traditional phonetic)" +msgstr "Bulgaria (fonetik tradisional)" #: ../rules/base.xml.in.h:347 -msgid "Greek (simple)" -msgstr "Yunani (sederhana)" +msgid "Bulgarian (new phonetic)" +msgstr "Bulgaria (fonetik baru)" #: ../rules/base.xml.in.h:348 -msgid "Gujarati" -msgstr "Gujurati" - -#: ../rules/base.xml.in.h:349 -msgid "Gyration" -msgstr "Gyration" +msgid "Arabic (Morocco)" +msgstr "Arab (Maroko)" -#: ../rules/base.xml.in.h:350 -msgid "HTC Dream" -msgstr "HTC Dream" +#. Keyboard indicator for French layouts +#: ../rules/base.xml.in.h:350 ../rules/base.extras.xml.in.h:3 +msgid "fr" +msgstr "fr" #: ../rules/base.xml.in.h:351 -msgid "Happy Hacking Keyboard" -msgstr "Happy Hacking Keyboard" - -#: ../rules/base.xml.in.h:352 -msgid "Happy Hacking Keyboard for Mac" -msgstr "Happy Hacking Keyboard untuk Mac" +msgid "French (Morocco)" +msgstr "Perancis (Maroko)" +#. Keyboard indicator for Berber layouts #: ../rules/base.xml.in.h:353 -msgid "Hausa" -msgstr "Hausa" +msgid "ber" +msgstr "ber" #: ../rules/base.xml.in.h:354 -msgid "Hebrew" -msgstr "Ibrani" +msgid "Berber (Morocco, Tifinagh)" +msgstr "Berber (Morocco, Tifinagh)" #: ../rules/base.xml.in.h:355 -msgid "Hebrew (Biblical, Tiro)" -msgstr "Ibrani (Biblical, Tiro)" +msgid "Berber (Morocco, Tifinagh alternative)" +msgstr "Berber (Maroko, alternatif Tifinagh)" #: ../rules/base.xml.in.h:356 -msgid "Hebrew (lyx)" -msgstr "Ibrani (lyx)" +msgid "Berber (Morocco, Tifinagh alternative phonetic)" +msgstr "Berber (Maroko, fonetik alternatif Tifinagh)" #: ../rules/base.xml.in.h:357 -msgid "Hebrew (phonetic)" -msgstr "Ibrani (fonetik)" +msgid "Berber (Morocco, Tifinagh extended)" +msgstr "Berber (Maroko, Tifinagh diperluas)" #: ../rules/base.xml.in.h:358 -msgid "Hewlett-Packard Internet Keyboard" -msgstr "Papan Ketik Internet Hewlett-Packard" +msgid "Berber (Morocco, Tifinagh phonetic)" +msgstr "Berber (Maroko, fonetik Tifinagh)" #: ../rules/base.xml.in.h:359 -msgid "Hewlett-Packard Mini 110 Notebook" -msgstr "Hewlett-Packard Mini 110 Notebook" - -#: ../rules/base.xml.in.h:360 -msgid "Hewlett-Packard Omnibook 500 FA" -msgstr "Hewlett-Packard Omnibook 500 FA" +msgid "Berber (Morocco, Tifinagh extended phonetic)" +msgstr "Berber (Maroko, fonetik Tifinagh diperluas)" +#. Keyboard indicator for Cameroon layouts #: ../rules/base.xml.in.h:361 -msgid "Hewlett-Packard Omnibook 5xx" -msgstr "Hewlett-Packard Omnibook 5xx" +msgid "cm" +msgstr "cm" #: ../rules/base.xml.in.h:362 -msgid "Hewlett-Packard Omnibook 6000/6100" -msgstr "Hewlett-Packard Omnibook 6000/6100" +msgid "English (Cameroon)" +msgstr "Inggris (Kamerun)" #: ../rules/base.xml.in.h:363 -msgid "Hewlett-Packard Omnibook XE3 GC" -msgstr "Hewlett-Packard Omnibook XE3 GC" +msgid "French (Cameroon)" +msgstr "Perancis (Kamerun)" #: ../rules/base.xml.in.h:364 -msgid "Hewlett-Packard Omnibook XE3 GF" -msgstr "Hewlett-Packard Omnibook XE3 GF" +msgid "Cameroon Multilingual (qwerty)" +msgstr "Kamerun Multibahasa (qwerty)" #: ../rules/base.xml.in.h:365 -msgid "Hewlett-Packard Omnibook XT1000" -msgstr "Hewlett-Packard Omnibook XT1000" +msgid "Cameroon Multilingual (azerty)" +msgstr "Kamerun Multibahasa (azerty)" #: ../rules/base.xml.in.h:366 -msgid "Hewlett-Packard Pavilion ZT11xx" -msgstr "Hewlett-Packard Pavilion ZT11xx" - -#: ../rules/base.xml.in.h:367 -msgid "Hewlett-Packard Pavilion dv5" -msgstr "Hewlett-Packard Pavilion dv5" +msgid "Cameroon Multilingual (Dvorak)" +msgstr "Kamerun Multibahasa (Dvorak)" +#. Keyboard indicator for Burmese layouts #: ../rules/base.xml.in.h:368 -msgid "Hewlett-Packard SK-250x Multimedia Keyboard" -msgstr "Papan Ketik Multimedia Hewlett-Packard SK-2501" +msgid "my" +msgstr "my" #: ../rules/base.xml.in.h:369 -msgid "Hewlett-Packard nx9020" -msgstr "Hewlett-Packard nx9020" +msgid "Burmese" +msgstr "Burma" -#: ../rules/base.xml.in.h:370 -msgid "Hexadecimal" -msgstr "Heksadesimal" +#: ../rules/base.xml.in.h:370 ../rules/base.extras.xml.in.h:4 +msgid "French (Canada)" +msgstr "Perancis (Kanada)" #: ../rules/base.xml.in.h:371 -msgid "Hindi (Bolnagri)" -msgstr "Hindi (Bolnagri)" +msgid "French (Canada, Dvorak)" +msgstr "Perancis (Kanada, Dvorak)" #: ../rules/base.xml.in.h:372 -msgid "Hindi (Wx)" -msgstr "Hindi (Wx)" +msgid "French (Canada, legacy)" +msgstr "Perancis (Kanada, legacy)" #: ../rules/base.xml.in.h:373 -msgid "Honeywell Euroboard" -msgstr "Honeywell Euroboard" +msgid "Canadian Multilingual" +msgstr "Kanada Multibahasa" #: ../rules/base.xml.in.h:374 -msgid "Htc Dream phone" -msgstr "Telepon Htc Dream" +msgid "Canadian Multilingual (first part)" +msgstr "Kanada Multibahasa (bagian pertama)" #: ../rules/base.xml.in.h:375 -msgid "Hungarian" -msgstr "Hungaria" - -#: ../rules/base.xml.in.h:376 -msgid "Hungarian (101/qwerty/comma/dead keys)" -msgstr "Hungaria (101/qwerty/koma/tombol mati)" +msgid "Canadian Multilingual (second part)" +msgstr "Kanada Multibahasa (bagian kedua)" +#. Keyboard indicator for Inuktikut layouts #: ../rules/base.xml.in.h:377 -msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" -msgstr "Hungaria (101/qwerty/koma/hapus tombol mati)" +msgid "ike" +msgstr "ike" #: ../rules/base.xml.in.h:378 -msgid "Hungarian (101/qwerty/dot/dead keys)" -msgstr "Hungaria (101/qwerty/titik/tombol mati)" +msgid "Inuktitut" +msgstr "Inuktitut" #: ../rules/base.xml.in.h:379 -msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" -msgstr "Hungaria (101/qwerty/titik/hapus tombol mati)" +msgid "English (Canada)" +msgstr "Inggris (Kanada)" #: ../rules/base.xml.in.h:380 -msgid "Hungarian (101/qwertz/comma/dead keys)" -msgstr "Hungaria (101/qwertz/koma/tombol mati)" - -#: ../rules/base.xml.in.h:381 -msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" -msgstr "Hungaria (101/qwertz/koma/hapus tombol mati)" +msgid "French (Democratic Republic of the Congo)" +msgstr "Perancis (Republik Demokratik Kongo)" +#. Keyboard indicator for Taiwanese layouts #: ../rules/base.xml.in.h:382 -msgid "Hungarian (101/qwertz/dot/dead keys)" -msgstr "Hungaria (101/awertz/titik/tombol mati)" +msgid "zh" +msgstr "zh" #: ../rules/base.xml.in.h:383 -msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" -msgstr "Hungaria (101/qwertz/titik/hapus tombol mati)" +msgid "Chinese" +msgstr "Cina" #: ../rules/base.xml.in.h:384 -msgid "Hungarian (102/qwerty/comma/dead keys)" -msgstr "Hungaria (102/qwerty/koma/tombol mati)" +msgid "Tibetan" +msgstr "Tibetan" #: ../rules/base.xml.in.h:385 -msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" -msgstr "Hungaria (102/qwerty/koma/hapus tombol mati)" +msgid "Tibetan (with ASCII numerals)" +msgstr "Tibetan (with ASCII numerals)" #: ../rules/base.xml.in.h:386 -msgid "Hungarian (102/qwerty/dot/dead keys)" -msgstr "Hungaria (102/qwerty/titik/tombol mati)" +msgid "ug" +msgstr "ug" #: ../rules/base.xml.in.h:387 -msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" -msgstr "Hungaria (102/qwerty/titik/hapus tombol mati)" - -#: ../rules/base.xml.in.h:388 -msgid "Hungarian (102/qwertz/comma/dead keys)" -msgstr "Hungaria (102/qwertz/koma/tombol mati)" +msgid "Uyghur" +msgstr "Uyghur" +#. Keyboard indicator for Croatian layouts #: ../rules/base.xml.in.h:389 -msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" -msgstr "Hungaria (102/qwertz/koma/hapus tombol mati)" +msgid "hr" +msgstr "hr" #: ../rules/base.xml.in.h:390 -msgid "Hungarian (102/qwertz/dot/dead keys)" -msgstr "Hungaria (102/qwertz/titik/tombol mati)" +msgid "Croatian" +msgstr "Kroasia" #: ../rules/base.xml.in.h:391 -msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" -msgstr "Hungaria (102/qwertz/titik/hapus tombol mati)" +msgid "Croatian (use guillemets for quotes)" +msgstr "Kroasia (gunakan guillemets untuk tanda petik)" #: ../rules/base.xml.in.h:392 -msgid "Hungarian (eliminate dead keys)" -msgstr "Hungaria (hapus tombol mati)" +msgid "Croatian (use Croatian digraphs)" +msgstr "Kroasis (gunakan diagraph Kroasia)" #: ../rules/base.xml.in.h:393 -msgid "Hungarian (qwerty)" -msgstr "Hungaria (qwerty)" +msgid "Croatian (US keyboard with Croatian digraphs)" +msgstr "Kroasia (papan tik AS dengan digraf Kroasia)" #: ../rules/base.xml.in.h:394 -msgid "Hungarian (standard)" -msgstr "Hungaria (standar)" - -#: ../rules/base.xml.in.h:395 -msgid "Hyper is mapped to Win-keys" -msgstr "Hiper dipetakan ke tombol Win" +msgid "Croatian (US keyboard with Croatian letters)" +msgstr "Kroasia (papan tik AS dengan huruf Kroasia)" -#: ../rules/base.xml.in.h:396 -msgid "IBM Rapid Access" -msgstr "IBM Rapid Access" +#. Keyboard indicator for Chech layouts +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +msgid "cs" +msgstr "cs" -#: ../rules/base.xml.in.h:397 -msgid "IBM Rapid Access II" -msgstr "IBM Rapid Access II" +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 +msgid "Czech" +msgstr "Ceko" #: ../rules/base.xml.in.h:398 -msgid "IBM Space Saver" -msgstr "IBM Space Saver" +msgid "Czech (with <\\|> key)" +msgstr "Ceko (dengan tombol <\\|>)" #: ../rules/base.xml.in.h:399 -msgid "IBM ThinkPad 560Z/600/600E/A22E" -msgstr "IBM ThinkPad 560Z/600/600E/A22E" +msgid "Czech (qwerty)" +msgstr "Ceko (qwerty)" #: ../rules/base.xml.in.h:400 -msgid "IBM ThinkPad R60/T60/R61/T61" -msgstr "IBM ThinkPad R60/T60/R61/T61" +msgid "Czech (qwerty, extended Backslash)" +msgstr "Ceko (qwerty, Backslash diperpanjang)" #: ../rules/base.xml.in.h:401 -msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" -msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t" +msgid "Czech (UCW layout, accented letters only)" +msgstr "Ceko (tata letak UCW, hanya huruf beraksen)" #: ../rules/base.xml.in.h:402 -msgid "Icelandic" -msgstr "Islandia" - -#: ../rules/base.xml.in.h:403 -msgid "Icelandic (Dvorak)" -msgstr "Islandia (Dvorak)" +msgid "Czech (US Dvorak with CZ UCW support)" +msgstr "Ceko (Dvorak AS dengan dukungan CZ UCW)" -#: ../rules/base.xml.in.h:404 -msgid "Icelandic (Macintosh)" -msgstr "Islandia (Macintosh)" +#. Keyboard indicator for Danish layouts +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +msgid "da" +msgstr "da" -#: ../rules/base.xml.in.h:405 -msgid "Icelandic (Sun dead keys)" -msgstr "Islandia (tombol mati Sun)" +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 +msgid "Danish" +msgstr "Denmark" #: ../rules/base.xml.in.h:406 -msgid "Icelandic (eliminate dead keys)" -msgstr "Islandia (hapus tombol mati)" +msgid "Danish (eliminate dead keys)" +msgstr "Denmark (hapus tombol mati" #: ../rules/base.xml.in.h:407 -msgid "Igbo" -msgstr "Igbo" +msgid "Danish (Macintosh)" +msgstr "Denmark (Macintosh)" #: ../rules/base.xml.in.h:408 -msgid "Indian" -msgstr "India" +msgid "Danish (Macintosh, eliminate dead keys)" +msgstr "Denmark (Macintosh, hapus tombol mati" #: ../rules/base.xml.in.h:409 -msgid "Inuktitut" -msgstr "Inuktitut" - -#: ../rules/base.xml.in.h:410 -msgid "Iraqi" -msgstr "Irak" +msgid "Danish (Dvorak)" +msgstr "Denmark (Dvorak)" -#: ../rules/base.xml.in.h:411 -msgid "Irish" -msgstr "Irlandia" +#. Keyboard indicator for Dutch layouts +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +msgid "nl" +msgstr "nl" -#: ../rules/base.xml.in.h:412 -msgid "Irish (UnicodeExpert)" -msgstr "Irlandia (UnicodeExpert)" +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 +msgid "Dutch" +msgstr "Belanda" #: ../rules/base.xml.in.h:413 -msgid "Italian" -msgstr "Italia" +msgid "Dutch (Sun dead keys)" +msgstr "Belanda (tombol mati Sun)" #: ../rules/base.xml.in.h:414 -msgid "Italian (Macintosh)" -msgstr "Italia (Macintosh)" +msgid "Dutch (Macintosh)" +msgstr "Belanda (Macintosh)" #: ../rules/base.xml.in.h:415 -msgid "Italian (US keyboard with Italian letters)" -msgstr "Italia (papan tik AS dengan huruf Italia)" - -#: ../rules/base.xml.in.h:416 -msgid "Italian (eliminate dead keys)" -msgstr "Italia (hapus tombol mati)" +msgid "Dutch (standard)" +msgstr "Belanda (standar)" +#. Keyboard indicator for Dzongkha layouts #: ../rules/base.xml.in.h:417 -msgid "Japanese" -msgstr "Jepang" +msgid "dz" +msgstr "dz" #: ../rules/base.xml.in.h:418 -msgid "Japanese (Kana 86)" -msgstr "Jepang (Kana 86)" - -#: ../rules/base.xml.in.h:419 -msgid "Japanese (Kana)" -msgstr "Jepang (Kana)" +msgid "Dzongkha" +msgstr "Dzongkha" -#: ../rules/base.xml.in.h:420 -msgid "Japanese (Macintosh)" -msgstr "Jepang (Macintosh)" +#. Keyboard indicator for Estonian layouts +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +msgid "et" +msgstr "et" -#: ../rules/base.xml.in.h:421 -msgid "Japanese (OADG 109A)" -msgstr "Jepang (OADG 109A)" +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 +msgid "Estonian" +msgstr "Estonia" #: ../rules/base.xml.in.h:422 -msgid "Japanese (PC-98xx Series)" -msgstr "Jepang (Seri PC-98xx)" +msgid "Estonian (eliminate dead keys)" +msgstr "Estonia (hapus tombol mati)" #: ../rules/base.xml.in.h:423 -msgid "Japanese keyboard options" -msgstr "Pilihan papan ketik Jepang" +msgid "Estonian (Dvorak)" +msgstr "Estonia (Dvorak)" #: ../rules/base.xml.in.h:424 -msgid "Kalmyk" -msgstr "Kalmyk" +msgid "Estonian (US keyboard with Estonian letters)" +msgstr "Estonia (papan tik AS dengan huruf Estonia)" -#: ../rules/base.xml.in.h:425 -msgid "Kana Lock key is locking" -msgstr "Tombol Kana Lock terkunci" +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 +msgid "Persian" +msgstr "Persia" #: ../rules/base.xml.in.h:426 -msgid "Kannada" -msgstr "Kannada" - -#: ../rules/base.xml.in.h:427 -msgid "Kashubian" -msgstr "Kashubian" +msgid "Persian (with Persian Keypad)" +msgstr "Persia (dengan papan tik Persia)" +#. Keyboard indicator for Kurdish layouts #: ../rules/base.xml.in.h:428 -msgid "Kazakh" -msgstr "Kazakh" +msgid "ku" +msgstr "ku" #: ../rules/base.xml.in.h:429 -msgid "Kazakh (with Russian)" -msgstr "Kazakh (dengan Rusia)" +msgid "Kurdish (Iran, Latin Q)" +msgstr "Kurdi (Iran, Latin Q)" #: ../rules/base.xml.in.h:430 -msgid "Key sequence to kill the X server" -msgstr "Sekuensi kunci untuk mematikan server X" +msgid "Kurdish (Iran, F)" +msgstr "Kurdi (Iran, F)" #: ../rules/base.xml.in.h:431 -msgid "Key to choose 3rd level" -msgstr "Tekan Menu Kiri untuk memilih level 3" +msgid "Kurdish (Iran, Latin Alt-Q)" +msgstr "Kurdi (Iran, Latin Alt-Q)" #: ../rules/base.xml.in.h:432 -msgid "Key to choose 5th level" -msgstr "Tombol untuk memilih level kelima" +msgid "Kurdish (Iran, Arabic-Latin)" +msgstr "Kurdi (Iran, Arab-Latin)" #: ../rules/base.xml.in.h:433 -msgid "Key(s) to change layout" -msgstr "Tombol untuk mengubah tata letak" +msgid "Iraqi" +msgstr "Irak" #: ../rules/base.xml.in.h:434 -msgid "Keytronic FlexPro" -msgstr "Keytronic FlexPro" +msgid "Kurdish (Iraq, Latin Q)" +msgstr "Kurdi (Irak, Latin Q)" #: ../rules/base.xml.in.h:435 -msgid "Khmer (Cambodia)" -msgstr "Khmer (Kamboja)" +msgid "Kurdish (Iraq, F)" +msgstr "Kurdi (Irak, F)" #: ../rules/base.xml.in.h:436 -msgid "Kikuyu" -msgstr "Kikuyu" +msgid "Kurdish (Iraq, Latin Alt-Q)" +msgstr "Kurdi (Irak, Latin Alt-Q)" #: ../rules/base.xml.in.h:437 -msgid "Kinesis" -msgstr "Kinesis" - -#: ../rules/base.xml.in.h:438 -msgid "Komi" -msgstr "Komi" +msgid "Kurdish (Iraq, Arabic-Latin)" +msgstr "Kurdi (Irak, Arab-Latin)" +#. Keyboard indicator for Faroese layouts #: ../rules/base.xml.in.h:439 -msgid "Korean" -msgstr "Korea" +msgid "fo" +msgstr "fo" #: ../rules/base.xml.in.h:440 -msgid "Korean (101/104 key compatible)" -msgstr "Korea (kompatibel dengan 101/104 tombol)" +msgid "Faroese" +msgstr "Faro" #: ../rules/base.xml.in.h:441 -msgid "Kurdish (Iran, Arabic-Latin)" -msgstr "Kurdi (Iran, Arab-Latin)" - -#: ../rules/base.xml.in.h:442 -msgid "Kurdish (Iran, F)" -msgstr "Kurdi (Iran, F)" +msgid "Faroese (eliminate dead keys)" +msgstr "Faro (hapus tombol mati)" -#: ../rules/base.xml.in.h:443 -msgid "Kurdish (Iran, Latin Alt-Q)" -msgstr "Kurdi (Iran, Latin Alt-Q)" +#. Keyboard indicator for Finnish layouts +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +msgid "fi" +msgstr "fi" -#: ../rules/base.xml.in.h:444 -msgid "Kurdish (Iran, Latin Q)" -msgstr "Kurdi (Iran, Latin Q)" +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 +msgid "Finnish" +msgstr "Finlandia" #: ../rules/base.xml.in.h:445 -msgid "Kurdish (Iraq, Arabic-Latin)" -msgstr "Kurdi (Irak, Arab-Latin)" +msgid "Finnish (classic)" +msgstr "Finlandia (klasik)" #: ../rules/base.xml.in.h:446 -msgid "Kurdish (Iraq, F)" -msgstr "Kurdi (Irak, F)" +msgid "Finnish (classic, eliminate dead keys)" +msgstr "Finlandia (klasik, hapus tombol mati)" #: ../rules/base.xml.in.h:447 -msgid "Kurdish (Iraq, Latin Alt-Q)" -msgstr "Kurdi (Irak, Latin Alt-Q)" +msgid "Northern Saami (Finland)" +msgstr "Saami Utara (Finlandia)" #: ../rules/base.xml.in.h:448 -msgid "Kurdish (Iraq, Latin Q)" -msgstr "Kurdi (Irak, Latin Q)" +msgid "Finnish (Macintosh)" +msgstr "Finlandia (Macintosh)" -#: ../rules/base.xml.in.h:449 -msgid "Kurdish (Syria, F)" -msgstr "Kurdi (Suriah, F)" +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 +msgid "French" +msgstr "Perancis" #: ../rules/base.xml.in.h:450 -msgid "Kurdish (Syria, Latin Alt-Q)" -msgstr "Kurdi (Suriah, Latin Alt-Q)" +msgid "French (eliminate dead keys)" +msgstr "Perancis (hapus tombol mati)" #: ../rules/base.xml.in.h:451 -msgid "Kurdish (Syria, Latin Q)" -msgstr "Kurdi (Suriah, Latin Q" +msgid "French (Sun dead keys)" +msgstr "Perancis (tombol mati Sun)" #: ../rules/base.xml.in.h:452 -msgid "Kurdish (Turkey, F)" -msgstr "Kurdi (Turki, F)" +msgid "French (alternative)" +msgstr "Perancis (alternatif)" #: ../rules/base.xml.in.h:453 -msgid "Kurdish (Turkey, Latin Alt-Q)" -msgstr "Kurdi (Turki, Latin Alt-Q)" +msgid "French (alternative, Latin-9 only)" +msgstr "Perancis (alternatif, hanya Latin-9)" #: ../rules/base.xml.in.h:454 -msgid "Kurdish (Turkey, Latin Q)" -msgstr "Kurdi (Turki, Latin Q)" +msgid "French (alternative, eliminate dead keys)" +msgstr "Perancis (alternatif, hapus tombol mati)" #: ../rules/base.xml.in.h:455 -msgid "Kyrgyz" -msgstr "Kyrgyzstan" +msgid "French (alternative, Sun dead keys)" +msgstr "Perancis (alternatif, tombol mati Sun)" #: ../rules/base.xml.in.h:456 -msgid "Kyrgyz (phonetic)" -msgstr "Kyrgystan (fonetik)" +msgid "French (legacy, alternative)" +msgstr "Perancis (legacy, alternatif)" #: ../rules/base.xml.in.h:457 -msgid "Lao" -msgstr "Lao" +msgid "French (legacy, alternative, eliminate dead keys)" +msgstr "Perancis (legacy, alternatif, hapus tombol mati)" #: ../rules/base.xml.in.h:458 -msgid "Lao (STEA proposed standard layout)" -msgstr "Laos (tata letak standar yang diusulkan STEA)" +msgid "French (legacy, alternative, Sun dead keys)" +msgstr "Perancis (legacy, alternatif, tombol mati Sun)" #: ../rules/base.xml.in.h:459 -msgid "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" -msgstr "Laptop/notebook Compaq (eg. Armada) Laptop Keyboard" +msgid "French (Bepo, ergonomic, Dvorak way)" +msgstr "Perancis (Bepo, ergonomis, Dvorak way)" #: ../rules/base.xml.in.h:460 -msgid "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" -msgstr "Laptop/notebook Compaq (eg. Presario) Internet Keyboard" +msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" +msgstr "Perancis (Bepo, ergonomis, Dvorak way, hanya Latin-9)" #: ../rules/base.xml.in.h:461 -msgid "Laptop/notebook eMachines m68xx" -msgstr "Laptop/notebook eMachines m68xx" +msgid "French (Dvorak)" +msgstr "Perancis (Dvorak)" -#: ../rules/base.xml.in.h:462 ../rules/base.extras.xml.in.h:16 -msgid "Latvian" -msgstr "Latvia" +#: ../rules/base.xml.in.h:462 +msgid "French (Macintosh)" +msgstr "French (Macintosh)" #: ../rules/base.xml.in.h:463 -msgid "Latvian (F variant)" -msgstr "Latvia (varian F)" +msgid "French (Breton)" +msgstr "Perancis (Breton)" #: ../rules/base.xml.in.h:464 -msgid "Latvian (adapted)" -msgstr "Latvia (diadaptasi)" +msgid "Occitan" +msgstr "Occitan" #: ../rules/base.xml.in.h:465 -msgid "Latvian (apostrophe variant)" -msgstr "Latvia (varian apostrof)" +msgid "Georgian (France, AZERTY Tskapo)" +msgstr "Georgia (Perancis, AZERTY Tskapo)" #: ../rules/base.xml.in.h:466 -msgid "Latvian (ergonomic, ŪGJRMV)" -msgstr "Latvia (ergonomis, ŪGJRMV)" +msgid "English (Ghana)" +msgstr "Inggris (Ghana)" #: ../rules/base.xml.in.h:467 -msgid "Latvian (modern)" -msgstr "Latvia (modern)" - -#: ../rules/base.xml.in.h:468 -msgid "Latvian (tilde variant)" -msgstr "Latvia (varian tilde)" +msgid "English (Ghana, multilingual)" +msgstr "Inggris (Ghana, multibahasa)" +#. Keyboard indicator for Akan layouts #: ../rules/base.xml.in.h:469 -msgid "Left Alt" -msgstr "Alt Kiri" +msgid "ak" +msgstr "ak" #: ../rules/base.xml.in.h:470 -msgid "Left Alt (while pressed)" -msgstr "Alt Kiri (ketika ditekan)" - -#: ../rules/base.xml.in.h:471 -msgid "Left Alt is swapped with Left Win" -msgstr "Alt Kiri ditukar dengan Win Kiri" +msgid "Akan" +msgstr "Akan" +#. Keyboard indicator for Ewe layouts #: ../rules/base.xml.in.h:472 -msgid "Left Alt+Left Shift" -msgstr "Alt Kiri+Shift Kiri" +msgid "ee" +msgstr "ee" #: ../rules/base.xml.in.h:473 -msgid "Left Ctrl" -msgstr "Ctrl Kiri" - -#: ../rules/base.xml.in.h:474 -msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" -msgstr "Ctrl Kiri (ke tata letak pertama), Ctrl Kanan (ke tata letak terakhir)" +msgid "Ewe" +msgstr "Ewe" +#. Keyboard indicator for Fula layouts #: ../rules/base.xml.in.h:475 -msgid "Left Ctrl as Meta" -msgstr "Ctrl Kiri sebagai Meta" +msgid "ff" +msgstr "ff" #: ../rules/base.xml.in.h:476 -msgid "Left Ctrl+Left Shift" -msgstr "Ctrl Kiri+Shift Kiri" - -#: ../rules/base.xml.in.h:477 -msgid "Left Shift" -msgstr "Shift Kiri" +msgid "Fula" +msgstr "Fula" +#. Keyboard indicator for Ga layouts #: ../rules/base.xml.in.h:478 -msgid "Left Win" -msgstr "Win Kiri" +msgid "gaa" +msgstr "gaa" #: ../rules/base.xml.in.h:479 -msgid "Left Win (to first layout), Right Win/Menu (to last layout)" -msgstr "Win Kiri (ke tata letak pertama), Win/Menu Kanan (ke tata letak terakhir)" - -#: ../rules/base.xml.in.h:480 -msgid "Left Win (while pressed)" -msgstr "Win Kiri (ketika ditekan)" +msgid "Ga" +msgstr "Ga" +#. Keyboard indicator for Hausa layouts #: ../rules/base.xml.in.h:481 -msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Win kiri memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" +msgid "ha" +msgstr "ha" #: ../rules/base.xml.in.h:482 -msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" -msgstr "Ctrl Kiri+Win Kiri (ke tata letak pertama), Ctrl Kanan+Menu (ke tata letak kedua)" - -#: ../rules/base.xml.in.h:483 -msgid "Legacy" -msgstr "Legacy" +msgid "Hausa" +msgstr "Hausa" +#. Keyboard indicator for Avatime layouts #: ../rules/base.xml.in.h:484 -msgid "Legacy Wang 724" -msgstr "Legacy Wang 724" +msgid "avn" +msgstr "avn" + +#: ../rules/base.xml.in.h:485 +msgid "Avatime" +msgstr "Avatime" -#. Actually, with KP_SEPARATOR, as the old keypad(comma) #: ../rules/base.xml.in.h:486 -msgid "Legacy key with comma" -msgstr "Tombol Legacy dengan koma" +msgid "English (Ghana, GILLBT)" +msgstr "Inggris (Ghana, GILLBT)" #: ../rules/base.xml.in.h:487 -msgid "Legacy key with dot" -msgstr "Tombol Legacy dengan titik" - -#: ../rules/base.xml.in.h:488 ../rules/base.extras.xml.in.h:25 -msgid "Lithuanian" -msgstr "Lituania" +msgid "French (Guinea)" +msgstr "Perancis (Guinea)" +#. Keyboard indicator for Georgian layouts #: ../rules/base.xml.in.h:489 -msgid "Lithuanian (IBM LST 1205-92)" -msgstr "Lituania (IBM LST 1205-92)" +msgid "ka" +msgstr "ka" #: ../rules/base.xml.in.h:490 -msgid "Lithuanian (LEKP)" -msgstr "Lituania (LEKP)" +msgid "Georgian" +msgstr "Georgia" #: ../rules/base.xml.in.h:491 -msgid "Lithuanian (LEKPa)" -msgstr "Lituania (LEKPa)" +msgid "Georgian (ergonomic)" +msgstr "Georgia (ergonomik)" #: ../rules/base.xml.in.h:492 -msgid "Lithuanian (US keyboard with Lithuanian letters)" -msgstr "Lituania (papan tik AS dengan huruf Lituania)" +msgid "Georgian (MESS)" +msgstr "Georgia (MESS)" #: ../rules/base.xml.in.h:493 -msgid "Lithuanian (standard)" -msgstr "Lituania (standar)" +msgid "Russian (Georgia)" +msgstr "Rusia (Georgia)" #: ../rules/base.xml.in.h:494 -msgid "Logitech Access Keyboard" -msgstr "Logitech Access Keyboard" +msgid "Ossetian (Georgia)" +msgstr "Ossetia (Georgia)" -#: ../rules/base.xml.in.h:495 -msgid "Logitech Cordless Desktop" -msgstr "Logitech Cordless Desktop" +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 +msgid "German" +msgstr "Jerman" #: ../rules/base.xml.in.h:496 -msgid "Logitech Cordless Desktop (alternate option)" -msgstr "Logitech Cordless Desktop (pilihan alternatif)" +msgid "German (dead acute)" +msgstr "Jerman (acute mati)" #: ../rules/base.xml.in.h:497 -msgid "Logitech Cordless Desktop EX110" -msgstr "Logitech Cordless Desktop EX110" +msgid "German (dead grave acute)" +msgstr "Jerman (grave acute mati)" #: ../rules/base.xml.in.h:498 -msgid "Logitech Cordless Desktop LX-300" -msgstr "Logitech Cordless Desktop LX-300" +msgid "German (eliminate dead keys)" +msgstr "Jerman (hapus tombol mati)" #: ../rules/base.xml.in.h:499 -msgid "Logitech Cordless Desktop Navigator" -msgstr "Logitech Cordless Desktop Navigator" +msgid "German (T3)" +msgstr "Jerman (T3)" #: ../rules/base.xml.in.h:500 -msgid "Logitech Cordless Desktop Optical" -msgstr "Logitech Cordless Desktop Optical" +msgid "Romanian (Germany)" +msgstr "Rumania (Jerman)" #: ../rules/base.xml.in.h:501 -msgid "Logitech Cordless Desktop Pro (alternate option 2)" -msgstr "Logitech Cordless Desktop Pro (opsi alternatif 2)" +msgid "Romanian (Germany, eliminate dead keys)" +msgstr "Rumania (Jerman, hapus tombol mati)" #: ../rules/base.xml.in.h:502 -msgid "Logitech Cordless Desktop iTouch" -msgstr "Logitech Cordless Desktop iTouch" +msgid "German (Dvorak)" +msgstr "Jerman (Dvorak)" #: ../rules/base.xml.in.h:503 -msgid "Logitech Cordless Freedom/Desktop Navigator" -msgstr "Logitech Cordless Freedom/Desktop Navigator" +msgid "German (Sun dead keys)" +msgstr "Jerman (tombol mati Sun)" #: ../rules/base.xml.in.h:504 -msgid "Logitech G15 extra keys via G15daemon" -msgstr "Logitech G15 extra keys via G15daemon" +msgid "German (Neo 2)" +msgstr "Jerman (Neo 2)" #: ../rules/base.xml.in.h:505 -msgid "Logitech Generic Keyboard" -msgstr "Papan Ketik Generik Logitech" +msgid "German (Macintosh)" +msgstr "German (Macintosh)" #: ../rules/base.xml.in.h:506 -msgid "Logitech Internet 350 Keyboard" -msgstr "Papan Ketik Logitech Internet 350" +msgid "German (Macintosh, eliminate dead keys)" +msgstr "Jerman (Macintosh, hapus tombol mati)" #: ../rules/base.xml.in.h:507 -msgid "Logitech Internet Keyboard" -msgstr "Papan Ketik Internet Logitech" +msgid "Lower Sorbian" +msgstr "Lower Sorbian" #: ../rules/base.xml.in.h:508 -msgid "Logitech Internet Navigator Keyboard" -msgstr "Papan Ketik Navigator Internet Logitech" +msgid "Lower Sorbian (qwertz)" +msgstr "Lower Sorbian (qwertz)" #: ../rules/base.xml.in.h:509 -msgid "Logitech Media Elite Keyboard" -msgstr "Papan Ketik Logitech Media Elite" +msgid "German (qwerty)" +msgstr "Jerman (qwerty)" #: ../rules/base.xml.in.h:510 -msgid "Logitech Ultra-X Cordless Media Desktop Keyboard" -msgstr "Papan Ketik Logitech Ultra-X Cordless Media Desktop" +msgid "Russian (Germany, phonetic)" +msgstr "Rusia (Jerman, fonetik)" #: ../rules/base.xml.in.h:511 -msgid "Logitech Ultra-X Keyboard" -msgstr "Papan Ketik Logitech Ultra-X" - -#: ../rules/base.xml.in.h:512 -msgid "Logitech diNovo Edge Keyboard" -msgstr "Papan Ketik Logitech diNovo Edge" +msgid "German (legacy)" +msgstr "Jerman (legacy)" -#: ../rules/base.xml.in.h:513 -msgid "Logitech diNovo Keyboard" -msgstr "Papan Ketik Logitech diNovo" +#. Keyboard indicator for Greek layouts +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +msgid "gr" +msgstr "gr" -#: ../rules/base.xml.in.h:514 -msgid "Logitech iTouch" -msgstr "Logitech iTouch" +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 +msgid "Greek" +msgstr "Yunani" #: ../rules/base.xml.in.h:515 -msgid "Logitech iTouch Cordless Keyboard (model Y-RB6)" -msgstr "Logitech iTouch Cordless Keyboard (model Y-RB6)" +msgid "Greek (simple)" +msgstr "Yunani (sederhana)" #: ../rules/base.xml.in.h:516 -msgid "Logitech iTouch Internet Navigator Keyboard SE" -msgstr "Logitech iTouch Internet Navigator Keyboard SE" +msgid "Greek (extended)" +msgstr "Yunani (diperluas)" #: ../rules/base.xml.in.h:517 -msgid "Logitech iTouch Internet Navigator Keyboard SE (USB)" -msgstr "Logitech iTouch Internet Navigator Keyboard SE (USB)" +msgid "Greek (eliminate dead keys)" +msgstr "Yunani (hapus tombol mati)" #: ../rules/base.xml.in.h:518 -msgid "Lower Sorbian" -msgstr "Lower Sorbian" - -#: ../rules/base.xml.in.h:519 -msgid "Lower Sorbian (qwertz)" -msgstr "Lower Sorbian (qwertz)" +msgid "Greek (polytonic)" +msgstr "Yunani (politonik)" +#. Keyboard indicator for Hungarian layouts #: ../rules/base.xml.in.h:520 -msgid "MacBook/MacBook Pro" -msgstr "MacBook/MacBook Pro" +msgid "hu" +msgstr "hu" #: ../rules/base.xml.in.h:521 -msgid "MacBook/MacBook Pro (Intl)" -msgstr "MacBook/MacBook Pro (Intl)" +msgid "Hungarian" +msgstr "Hungaria" #: ../rules/base.xml.in.h:522 -msgid "Macedonian" -msgstr "Masedonia" +msgid "Hungarian (standard)" +msgstr "Hungaria (standar)" #: ../rules/base.xml.in.h:523 -msgid "Macedonian (eliminate dead keys)" -msgstr "Makedonia (hapus tombol mati)" +msgid "Hungarian (eliminate dead keys)" +msgstr "Hungaria (hapus tombol mati)" #: ../rules/base.xml.in.h:524 -msgid "Macintosh" -msgstr "Macintosh" +msgid "Hungarian (qwerty)" +msgstr "Hungaria (qwerty)" #: ../rules/base.xml.in.h:525 -msgid "Macintosh Old" -msgstr "Macintosh Old" +msgid "Hungarian (101/qwertz/comma/dead keys)" +msgstr "Hungaria (101/qwertz/koma/tombol mati)" #: ../rules/base.xml.in.h:526 -msgid "Make Caps Lock an additional Backspace" -msgstr "Buat Caps Lock sebagai tambahan Backspace" +msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" +msgstr "Hungaria (101/qwertz/koma/hapus tombol mati)" #: ../rules/base.xml.in.h:527 -msgid "Make Caps Lock an additional Control but keep the Caps_Lock keysym" -msgstr "Buat Caps Lock sebagai tambahan Control tapi pertahankan keysym Caps_Lock" +msgid "Hungarian (101/qwertz/dot/dead keys)" +msgstr "Hungaria (101/awertz/titik/tombol mati)" #: ../rules/base.xml.in.h:528 -msgid "Make Caps Lock an additional ESC" -msgstr "Buat Caps Lock sebagai tambahan ESC" +msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" +msgstr "Hungaria (101/qwertz/titik/hapus tombol mati)" #: ../rules/base.xml.in.h:529 -msgid "Make Caps Lock an additional Hyper" -msgstr "Buat Caps Lock sebagai tambahan Hiper" +msgid "Hungarian (101/qwerty/comma/dead keys)" +msgstr "Hungaria (101/qwerty/koma/tombol mati)" #: ../rules/base.xml.in.h:530 -msgid "Make Caps Lock an additional Num Lock" -msgstr "Buat Caps Lock sebagai tambahan Num Lock" +msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" +msgstr "Hungaria (101/qwerty/koma/hapus tombol mati)" #: ../rules/base.xml.in.h:531 -msgid "Make Caps Lock an additional Super" -msgstr "Buat Caps Lock sebagai tambahan Super" +msgid "Hungarian (101/qwerty/dot/dead keys)" +msgstr "Hungaria (101/qwerty/titik/tombol mati)" #: ../rules/base.xml.in.h:532 -msgid "Make Zenkaku Hankaku an additional ESC" -msgstr "Buat Zenkaku Hankaku sebagai tambahan ESC" +msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" +msgstr "Hungaria (101/qwerty/titik/hapus tombol mati)" #: ../rules/base.xml.in.h:533 -msgid "Malayalam" -msgstr "Malayalam" +msgid "Hungarian (102/qwertz/comma/dead keys)" +msgstr "Hungaria (102/qwertz/koma/tombol mati)" #: ../rules/base.xml.in.h:534 -msgid "Malayalam (Lalitha)" -msgstr "Malayalam (Lalitha)" +msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" +msgstr "Hungaria (102/qwertz/koma/hapus tombol mati)" #: ../rules/base.xml.in.h:535 -msgid "Malayalam (enhanced Inscript with Rupee Sign)" -msgstr "Malayalam (Inscript ditingkatkan dengan Tanda Rupee)" +msgid "Hungarian (102/qwertz/dot/dead keys)" +msgstr "Hungaria (102/qwertz/titik/tombol mati)" #: ../rules/base.xml.in.h:536 -msgid "Maltese" -msgstr "Malta" +msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" +msgstr "Hungaria (102/qwertz/titik/hapus tombol mati)" #: ../rules/base.xml.in.h:537 -msgid "Maltese (with US layout)" -msgstr "Malta (dengan tata letak AS)" +msgid "Hungarian (102/qwerty/comma/dead keys)" +msgstr "Hungaria (102/qwerty/koma/tombol mati)" #: ../rules/base.xml.in.h:538 -msgid "Maori" -msgstr "Maori" +msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" +msgstr "Hungaria (102/qwerty/koma/hapus tombol mati)" #: ../rules/base.xml.in.h:539 -msgid "Mari" -msgstr "Mari" +msgid "Hungarian (102/qwerty/dot/dead keys)" +msgstr "Hungaria (102/qwerty/titik/tombol mati)" #: ../rules/base.xml.in.h:540 -msgid "Memorex MX1998" -msgstr "Memorex MX1998" - -#: ../rules/base.xml.in.h:541 -msgid "Memorex MX2500 EZ-Access Keyboard" -msgstr "Papan Ketik Memorex MX2500 EZ-Access" +msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" +msgstr "Hungaria (102/qwerty/titik/hapus tombol mati)" +#. Keyboard indicator for Icelandic layouts #: ../rules/base.xml.in.h:542 -msgid "Memorex MX2750" -msgstr "Memorex MX2750" +msgid "is" +msgstr "is" #: ../rules/base.xml.in.h:543 -msgid "Menu" -msgstr "Menu" +msgid "Icelandic" +msgstr "Islandia" #: ../rules/base.xml.in.h:544 -msgid "Menu as Right Ctrl" -msgstr "Menu sebagai Ctrl Kanan" +msgid "Icelandic (Sun dead keys)" +msgstr "Islandia (tombol mati Sun)" #: ../rules/base.xml.in.h:545 -msgid "Meta is mapped to Left Win" -msgstr "Meta dipetakan ke tombol Win Kiri" +msgid "Icelandic (eliminate dead keys)" +msgstr "Islandia (hapus tombol mati)" #: ../rules/base.xml.in.h:546 -msgid "Meta is mapped to Win keys" -msgstr "Meta dipetakan ke tombol Win" +msgid "Icelandic (Macintosh)" +msgstr "Islandia (Macintosh)" #: ../rules/base.xml.in.h:547 -msgid "Microsoft Comfort Curve Keyboard 2000" -msgstr "Microsoft Comfort Curve Keyboard 2000" - -#: ../rules/base.xml.in.h:548 -msgid "Microsoft Internet Keyboard" -msgstr "Papan Ketik Internet Microsoft" +msgid "Icelandic (Dvorak)" +msgstr "Islandia (Dvorak)" -#: ../rules/base.xml.in.h:549 -msgid "Microsoft Internet Keyboard Pro, Swedish" -msgstr "Microsoft Internet Keyboard Pro, Swedia" +#. Keyboard indicator for Hebrew layouts +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +msgid "he" +msgstr "he" -#: ../rules/base.xml.in.h:550 -msgid "Microsoft Natural" -msgstr "Microsoft Natural" +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 +msgid "Hebrew" +msgstr "Ibrani" #: ../rules/base.xml.in.h:551 -msgid "Microsoft Natural Keyboard Elite" -msgstr "Microsoft Natural Keyboard Elite" +msgid "Hebrew (lyx)" +msgstr "Ibrani (lyx)" #: ../rules/base.xml.in.h:552 -msgid "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" -msgstr "Microsoft Natural Keyboard Pro / Microsoft Internet Keyboard Pro" +msgid "Hebrew (phonetic)" +msgstr "Ibrani (fonetik)" #: ../rules/base.xml.in.h:553 -msgid "Microsoft Natural Keyboard Pro OEM" -msgstr "Microsoft Natural Keyboard Pro OEM" - -#: ../rules/base.xml.in.h:554 -msgid "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro" -msgstr "Microsoft Natural Keyboard Pro USB / Microsoft Internet Keyboard Pro" +msgid "Hebrew (Biblical, Tiro)" +msgstr "Ibrani (Biblical, Tiro)" -#: ../rules/base.xml.in.h:555 -msgid "Microsoft Natural Wireless Ergonomic Keyboard 4000" -msgstr "Papan Tik Ergonomis Nirkabel Alami Microsoft 4000" +#. Keyboard indicator for Italian layouts +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +msgid "it" +msgstr "it" -#: ../rules/base.xml.in.h:556 -msgid "Microsoft Natural Wireless Ergonomic Keyboard 7000" -msgstr "Microsoft Natural Wireless Ergonomic Keyboard 7000" +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 +msgid "Italian" +msgstr "Italia" #: ../rules/base.xml.in.h:557 -msgid "Microsoft Office Keyboard" -msgstr "Papan Ketik Microsoft Office" +msgid "Italian (eliminate dead keys)" +msgstr "Italia (hapus tombol mati)" #: ../rules/base.xml.in.h:558 -msgid "Microsoft Wireless Multimedia Keyboard 1.0A" -msgstr "Microsoft Wireless Multimedia Keyboard 1.0A" +msgid "Italian (Macintosh)" +msgstr "Italia (Macintosh)" #: ../rules/base.xml.in.h:559 -msgid "Miscellaneous compatibility options" -msgstr "Pilihan kompabilitas lain-lain" +msgid "Italian (US keyboard with Italian letters)" +msgstr "Italia (papan tik AS dengan huruf Italia)" #: ../rules/base.xml.in.h:560 -msgid "Mongolian" -msgstr "Mongolia" +msgid "Georgian (Italy)" +msgstr "Georgia (Italia)" #: ../rules/base.xml.in.h:561 -msgid "Montenegrin" -msgstr "Montenegro" - -#: ../rules/base.xml.in.h:562 -msgid "Montenegrin (Cyrillic with guillemets)" -msgstr "Montenegro (Sirilik dengan guillemets)" +msgid "Italian (IBM 142)" +msgstr "Italia (IBM 142)" -#: ../rules/base.xml.in.h:563 -msgid "Montenegrin (Cyrillic)" -msgstr "Montenegro (Sirilik)" +#. Keyboard indicator for Japanese layouts +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +msgid "ja" +msgstr "ja" -#: ../rules/base.xml.in.h:564 -msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" -msgstr "Montenegro (Sirilik, Z dan ZHE ditukar)" +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 +msgid "Japanese" +msgstr "Jepang" #: ../rules/base.xml.in.h:565 -msgid "Montenegrin (Latin Unicode qwerty)" -msgstr "Montenegro (qwerty Unicode Latin)" +msgid "Japanese (Kana)" +msgstr "Jepang (Kana)" #: ../rules/base.xml.in.h:566 -msgid "Montenegrin (Latin Unicode)" -msgstr "Montenegro (Unicode Latin)" +msgid "Japanese (Kana 86)" +msgstr "Jepang (Kana 86)" #: ../rules/base.xml.in.h:567 -msgid "Montenegrin (Latin qwerty)" -msgstr "Montenegro (qwerty Latin)" +msgid "Japanese (OADG 109A)" +msgstr "Jepang (OADG 109A)" #: ../rules/base.xml.in.h:568 -msgid "Montenegrin (Latin with guillemets)" -msgstr "Montenegro (Latin dengan guillemets)" +msgid "Japanese (Macintosh)" +msgstr "Jepang (Macintosh)" #: ../rules/base.xml.in.h:569 -msgid "NICOLA-F style Backspace" -msgstr "NICOLA-F style Backspace" - -#: ../rules/base.xml.in.h:570 -msgid "Nepali" -msgstr "Nepal" +msgid "Japanese (Dvorak)" +msgstr "Jepang (Dvorak)" +#. Keyboard indicator for Kikuyu layouts #: ../rules/base.xml.in.h:571 -msgid "Non-breakable space character at fourth level" -msgstr "Karakter spasi yang tidak pecah pada level 4" +msgid "ki" +msgstr "ki" #: ../rules/base.xml.in.h:572 -msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" -msgstr "Karakter spasi yang tidak pecah pada level 4, karakter spasi yang tidak pecah dan tipis pada level 6" +msgid "Kyrgyz" +msgstr "Kyrgyzstan" #: ../rules/base.xml.in.h:573 -msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" -msgstr "Karakter spasi yang tidak pecah pada level 4, karakter spasi yang tidak pecah dan tipis pada level 6 (via Ctrl+Shift)" - -#: ../rules/base.xml.in.h:574 -msgid "Non-breakable space character at second level" -msgstr "Karakter spasi yang tidak pecah pada level 2" +msgid "Kyrgyz (phonetic)" +msgstr "Kyrgystan (fonetik)" +#. Keyboard indicator for Khmer layouts #: ../rules/base.xml.in.h:575 -msgid "Non-breakable space character at third level" -msgstr "Karakter spasi yang tidak pecah pada level 3" +msgid "km" +msgstr "km" #: ../rules/base.xml.in.h:576 -msgid "Non-breakable space character at third level, nothing at fourth level" -msgstr "Karakter spasi yang tidak pecah pada level 3, tidak ada pada level 4" - -#: ../rules/base.xml.in.h:577 -msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" -msgstr "Karakter spasi yang tidak pecah pada level 3, karakter spasi yang tidak pecah dan tipis pada level 4" +msgid "Khmer (Cambodia)" +msgstr "Khmer (Kamboja)" +#. Keyboard indicator for Kazakh layouts #: ../rules/base.xml.in.h:578 -msgid "Northern Saami (Finland)" -msgstr "Saami Utara (Finlandia)" +msgid "kk" +msgstr "kk" #: ../rules/base.xml.in.h:579 -msgid "Northern Saami (Norway)" -msgstr "Saami Utara (Norwegia)" +msgid "Kazakh" +msgstr "Kazakh" #: ../rules/base.xml.in.h:580 -msgid "Northern Saami (Norway, eliminate dead keys)" -msgstr "Saami Utara (Norwegia, hapus tombo mati)" +msgid "Russian (Kazakhstan, with Kazakh)" +msgstr "Rusia (Kazakhstan, dengan Kazakh)" #: ../rules/base.xml.in.h:581 -msgid "Northern Saami (Sweden)" -msgstr "Saami Utara (Swedia)" - -#: ../rules/base.xml.in.h:582 -msgid "Northgate OmniKey 101" -msgstr "Northgate OmniKey 101" +msgid "Kazakh (with Russian)" +msgstr "Kazakh (dengan Rusia)" +#. Keyboard indicator for Lao layouts #: ../rules/base.xml.in.h:583 -msgid "Norwegian" -msgstr "Norwegia" +msgid "lo" +msgstr "lo" #: ../rules/base.xml.in.h:584 -msgid "Norwegian (Dvorak)" -msgstr "Norwegia (Dvorak)" +msgid "Lao" +msgstr "Lao" #: ../rules/base.xml.in.h:585 -msgid "Norwegian (Macintosh)" -msgstr "Norwegia (Macintosh)" - -#: ../rules/base.xml.in.h:586 -msgid "Norwegian (Macintosh, eliminate dead keys)" -msgstr "Norwegia (Macintosh, hapus tombol mati)" +msgid "Lao (STEA proposed standard layout)" +msgstr "Laos (tata letak standar yang diusulkan STEA)" -#: ../rules/base.xml.in.h:587 -msgid "Norwegian (eliminate dead keys)" -msgstr "Norwegia (hapus tombol mati)" +#. Keyboard indicator for Spanish layouts +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 +msgid "es" +msgstr "es" #: ../rules/base.xml.in.h:588 -msgid "Num Lock" -msgstr "Num Lock" +msgid "Spanish (Latin American)" +msgstr "Spanyol (Amerika Latin)" #: ../rules/base.xml.in.h:589 -msgid "Numeric keypad delete key behaviour" -msgstr "Keypad numerik menghapus perilaku tombol" +msgid "Spanish (Latin American, eliminate dead keys)" +msgstr "Spanyol (Amerika Latin, hapus tombol mati)" #: ../rules/base.xml.in.h:590 -msgid "Numeric keypad keys always enter digits (as in Mac OS)" -msgstr "Keypad numerik selalu memasukkan digit (seperti dalam Mac OS)" +msgid "Spanish (Latin American, include dead tilde)" +msgstr "Spanyol (Amerika Latin, termasuk tilde mati)" #: ../rules/base.xml.in.h:591 -msgid "Numeric keypad layout selection" -msgstr "Pilihan layout Keypad numerik " - -#: ../rules/base.xml.in.h:592 -msgid "OLPC" -msgstr "OLPC" +msgid "Spanish (Latin American, Sun dead keys)" +msgstr "Spanyol (Amerika Latin, tombol mati Sun)" -#: ../rules/base.xml.in.h:593 -msgid "Occitan" -msgstr "Occitan" +#. Keyboard indicator for Lithuanian layouts +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 +msgid "lt" +msgstr "lt" -#: ../rules/base.xml.in.h:594 -msgid "Ogham" -msgstr "Ogham" +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 +msgid "Lithuanian" +msgstr "Lituania" #: ../rules/base.xml.in.h:595 -msgid "Ogham (IS434)" -msgstr "Ogham (IS434)" +msgid "Lithuanian (standard)" +msgstr "Lituania (standar)" #: ../rules/base.xml.in.h:596 -msgid "Oriya" -msgstr "Oriya" +msgid "Lithuanian (US keyboard with Lithuanian letters)" +msgstr "Lituania (papan tik AS dengan huruf Lituania)" #: ../rules/base.xml.in.h:597 -msgid "Ortek MCK-800 MM/Internet keyboard" -msgstr "Ortek MCK-800 MM/Internet keyboard" +msgid "Lithuanian (IBM LST 1205-92)" +msgstr "Lituania (IBM LST 1205-92)" #: ../rules/base.xml.in.h:598 -msgid "Ossetian (Georgia)" -msgstr "Ossetia (Georgia)" +msgid "Lithuanian (LEKP)" +msgstr "Lituania (LEKP)" #: ../rules/base.xml.in.h:599 -msgid "Ossetian (WinKeys)" -msgstr "Ossetia (WinKeys)" - -#: ../rules/base.xml.in.h:600 -msgid "Ossetian (legacy)" -msgstr "Ossetia (warisan)" +msgid "Lithuanian (LEKPa)" +msgstr "Lituania (LEKPa)" -#: ../rules/base.xml.in.h:601 -msgid "PC-98xx Series" -msgstr "Seri PC-98xx" +#. Keyboard indicator for Latvian layouts +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 +msgid "lv" +msgstr "lv" -#: ../rules/base.xml.in.h:602 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannonian Rusyn (homofon)" +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 +msgid "Latvian" +msgstr "Latvia" #: ../rules/base.xml.in.h:603 -msgid "Pashto" -msgstr "Pashto" +msgid "Latvian (apostrophe variant)" +msgstr "Latvia (varian apostrof)" #: ../rules/base.xml.in.h:604 -msgid "Pashto (Afghanistan, OLPC)" -msgstr "Pashto (Afghanistan, OLPC)" +msgid "Latvian (tilde variant)" +msgstr "Latvia (varian tilde)" #: ../rules/base.xml.in.h:605 -msgid "Pause" -msgstr "Pause" +msgid "Latvian (F variant)" +msgstr "Latvia (varian F)" -#: ../rules/base.xml.in.h:606 ../rules/base.extras.xml.in.h:27 -msgid "Persian" -msgstr "Persia" +#: ../rules/base.xml.in.h:606 +msgid "Latvian (modern)" +msgstr "Latvia (modern)" #: ../rules/base.xml.in.h:607 -msgid "Persian (Afghanistan, Dari OLPC)" -msgstr "Persia (Afghanistan, Dari OLPC)" +msgid "Latvian (ergonomic, ŪGJRMV)" +msgstr "Latvia (ergonomis, ŪGJRMV)" #: ../rules/base.xml.in.h:608 -msgid "Persian (with Persian Keypad)" -msgstr "Persia (dengan papan tik Persia)" - -#: ../rules/base.xml.in.h:609 ../rules/base.extras.xml.in.h:28 -msgid "Polish" -msgstr "Polandia" +msgid "Latvian (adapted)" +msgstr "Latvia (diadaptasi)" +#. Keyboard indicator for Maori layouts #: ../rules/base.xml.in.h:610 -msgid "Polish (Dvorak)" -msgstr "Polandia (Dvorak)" +msgid "mi" +msgstr "mi" #: ../rules/base.xml.in.h:611 -msgid "Polish (Dvorak, Polish quotes on key 1)" -msgstr "Polandia (Dvorak, tanda kutip Polandia pada tombol 1)" - -#: ../rules/base.xml.in.h:612 -msgid "Polish (Dvorak, Polish quotes on quotemark key)" -msgstr "Polandia (Dvorak, tanda kutip Polandia pada tombol quotemark)" +msgid "Maori" +msgstr "Maori" -#: ../rules/base.xml.in.h:613 -msgid "Polish (programmer Dvorak)" -msgstr "Polandia (Dvorak pemrogram)" +#. Keyboard indicator for Serbian layouts +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 +msgid "sr" +msgstr "sr" #: ../rules/base.xml.in.h:614 -msgid "Polish (qwertz)" -msgstr "Polandia (qwertz)" +msgid "Montenegrin" +msgstr "Montenegro" #: ../rules/base.xml.in.h:615 -msgid "Portuguese" -msgstr "Portugis" +msgid "Montenegrin (Cyrillic)" +msgstr "Montenegro (Sirilik)" #: ../rules/base.xml.in.h:616 -msgid "Portuguese (Brazil)" -msgstr "Portugis (Brasil)" +msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" +msgstr "Montenegro (Sirilik, Z dan ZHE ditukar)" #: ../rules/base.xml.in.h:617 -msgid "Portuguese (Brazil, Dvorak)" -msgstr "Portugis (Brasil, Dvorak)" +msgid "Montenegrin (Latin Unicode)" +msgstr "Montenegro (Unicode Latin)" #: ../rules/base.xml.in.h:618 -msgid "Portuguese (Brazil, eliminate dead keys)" -msgstr "Portugis (Brasil, hapus tombo mati)" +msgid "Montenegrin (Latin qwerty)" +msgstr "Montenegro (qwerty Latin)" #: ../rules/base.xml.in.h:619 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugis (Brasil, nativo untuk Esperanto)" +msgid "Montenegrin (Latin Unicode qwerty)" +msgstr "Montenegro (qwerty Unicode Latin)" #: ../rules/base.xml.in.h:620 -msgid "Portuguese (Brazil, nativo for USA keyboards)" -msgstr "Portugis (Brasil, nativo untuk papan tik AS)" +msgid "Montenegrin (Cyrillic with guillemets)" +msgstr "Montenegro (Sirilik dengan guillemets)" #: ../rules/base.xml.in.h:621 -msgid "Portuguese (Brazil, nativo)" -msgstr "Portugis (Brasil, nativo)" - -#: ../rules/base.xml.in.h:622 -msgid "Portuguese (Macintosh)" -msgstr "Portugis (Macintosh)" +msgid "Montenegrin (Latin with guillemets)" +msgstr "Montenegro (Latin dengan guillemets)" +#. Keyboard indicator for Macedonian layouts #: ../rules/base.xml.in.h:623 -msgid "Portuguese (Macintosh, Sun dead keys)" -msgstr "Portugis (Macintosh, tombol mati Sun)" +msgid "mk" +msgstr "mk" #: ../rules/base.xml.in.h:624 -msgid "Portuguese (Macintosh, eliminate dead keys)" -msgstr "Portugis (Macintosh, hapus tombol mati)" +msgid "Macedonian" +msgstr "Masedonia" #: ../rules/base.xml.in.h:625 -msgid "Portuguese (Nativo for USA keyboards)" -msgstr "Portugis (Nativo untuk papan tik AS)" - -#: ../rules/base.xml.in.h:626 -msgid "Portuguese (Nativo)" -msgstr "Portugis (Nativo)" +msgid "Macedonian (eliminate dead keys)" +msgstr "Makedonia (hapus tombol mati)" +#. Keyboard indicator for Maltese layouts #: ../rules/base.xml.in.h:627 -msgid "Portuguese (Sun dead keys)" -msgstr "Portugis (tombol mati Sun)" +msgid "mt" +msgstr "mt" #: ../rules/base.xml.in.h:628 -msgid "Portuguese (eliminate dead keys)" -msgstr "Portugis (hapus tombol mati)" +msgid "Maltese" +msgstr "Malta" #: ../rules/base.xml.in.h:629 -msgid "Propeller Voyager (KTEZ-1000)" -msgstr "Propeller Voyager (KTEZ-1000)" - -#: ../rules/base.xml.in.h:630 -msgid "PrtSc" -msgstr "PrtSc" +msgid "Maltese (with US layout)" +msgstr "Malta (dengan tata letak AS)" +#. Keyboard indicator for Mongolian layouts #: ../rules/base.xml.in.h:631 -msgid "Punjabi (Gurmukhi Jhelum)" -msgstr "Punjab (Gurmukhi Jhelum)" +msgid "mn" +msgstr "mn" #: ../rules/base.xml.in.h:632 -msgid "Punjabi (Gurmukhi)" -msgstr "Punjab (Gurmukhi)" - -#: ../rules/base.xml.in.h:633 -msgid "QTronix Scorpius 98N+" -msgstr "QTronix Scorpius 98N+" +msgid "Mongolian" +msgstr "Mongolia" -#: ../rules/base.xml.in.h:634 -msgid "Right Alt" -msgstr "Alt Kanan" +#. Keyboard indicator for Norwegian layouts +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +msgid "no" +msgstr "no" -#: ../rules/base.xml.in.h:635 -msgid "Right Alt (while pressed)" -msgstr "Alt Kanan (ketika ditekan)" +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 +msgid "Norwegian" +msgstr "Norwegia" #: ../rules/base.xml.in.h:636 -msgid "Right Alt as Right Ctrl" -msgstr "Alt Kanan sebagai Ctrl Kanan" +msgid "Norwegian (eliminate dead keys)" +msgstr "Norwegia (hapus tombol mati)" #: ../rules/base.xml.in.h:637 -msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Alt kanan memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" +msgid "Norwegian (Dvorak)" +msgstr "Norwegia (Dvorak)" #: ../rules/base.xml.in.h:638 -msgid "Right Alt key never chooses 3rd level" -msgstr "Alt Kanan tidak pernah memilih level 3" +msgid "Northern Saami (Norway)" +msgstr "Saami Utara (Norwegia)" #: ../rules/base.xml.in.h:639 -msgid "Right Alt, Shift+Right Alt key is Multi_Key" -msgstr "Alt Kanan, Shift+Right Alt adalah Multi_Key" +msgid "Northern Saami (Norway, eliminate dead keys)" +msgstr "Saami Utara (Norwegia, hapus tombo mati)" #: ../rules/base.xml.in.h:640 -msgid "Right Ctrl" -msgstr "Ctrl Kanan" +msgid "Norwegian (Macintosh)" +msgstr "Norwegia (Macintosh)" #: ../rules/base.xml.in.h:641 -msgid "Right Ctrl (while pressed)" -msgstr "Ctrl Kanan (ketika ditekan)" +msgid "Norwegian (Macintosh, eliminate dead keys)" +msgstr "Norwegia (Macintosh, hapus tombol mati)" #: ../rules/base.xml.in.h:642 -msgid "Right Ctrl as Right Alt" -msgstr "Ctrl Kanan bertindak seperti Alt Kanan" +msgid "Norwegian (Colemak)" +msgstr "Norwegia (Colemak)" -#: ../rules/base.xml.in.h:643 -msgid "Right Ctrl+Right Shift" -msgstr "Ctrl Kanan+Shift Kanan" - -#: ../rules/base.xml.in.h:644 -msgid "Right Shift" -msgstr "Shift Kanan" +#. Keyboard indicator for Polish layouts +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +msgid "pl" +msgstr "pl" -#: ../rules/base.xml.in.h:645 -msgid "Right Win" -msgstr "Win Kanan" +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 +msgid "Polish" +msgstr "Polandia" #: ../rules/base.xml.in.h:646 -msgid "Right Win (while pressed)" -msgstr "Win Kanan (ketika ditekan)" +msgid "Polish (legacy)" +msgstr "Polandia (warisan)" #: ../rules/base.xml.in.h:647 -msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" -msgstr "Win kanan memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima" +msgid "Polish (qwertz)" +msgstr "Polandia (qwertz)" -#: ../rules/base.xml.in.h:648 ../rules/base.extras.xml.in.h:30 -msgid "Romanian" -msgstr "Rumania" +#: ../rules/base.xml.in.h:648 +msgid "Polish (Dvorak)" +msgstr "Polandia (Dvorak)" #: ../rules/base.xml.in.h:649 -msgid "Romanian (Germany)" -msgstr "Rumania (Jerman)" +msgid "Polish (Dvorak, Polish quotes on quotemark key)" +msgstr "Polandia (Dvorak, tanda kutip Polandia pada tombol quotemark)" #: ../rules/base.xml.in.h:650 -msgid "Romanian (Germany, eliminate dead keys)" -msgstr "Rumania (Jerman, hapus tombol mati)" +msgid "Polish (Dvorak, Polish quotes on key 1)" +msgstr "Polandia (Dvorak, tanda kutip Polandia pada tombol 1)" #: ../rules/base.xml.in.h:651 -msgid "Romanian (WinKeys)" -msgstr "Rumania (WinKeys)" +msgid "Kashubian" +msgstr "Kashubian" #: ../rules/base.xml.in.h:652 -msgid "Romanian (cedilla)" -msgstr "Rumania (cedilla)" +msgid "Russian (Poland, phonetic Dvorak)" +msgstr "Rusia (Polandia, Dvorak fonetik)" #: ../rules/base.xml.in.h:653 -msgid "Romanian (standard cedilla)" -msgstr "Rumania (standard cedilla)" +msgid "Polish (programmer Dvorak)" +msgstr "Polandia (Dvorak pemrogram)" -#: ../rules/base.xml.in.h:654 -msgid "Romanian (standard)" -msgstr "Rumania (standar)" +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 +msgid "Portuguese" +msgstr "Portugis" #: ../rules/base.xml.in.h:655 -msgid "Rupee on 4" -msgstr "Rupee pada 4" +msgid "Portuguese (eliminate dead keys)" +msgstr "Portugis (hapus tombol mati)" -#: ../rules/base.xml.in.h:656 ../rules/base.extras.xml.in.h:32 -msgid "Russian" -msgstr "Rusia" +#: ../rules/base.xml.in.h:656 +msgid "Portuguese (Sun dead keys)" +msgstr "Portugis (tombol mati Sun)" #: ../rules/base.xml.in.h:657 -msgid "Russian (DOS)" -msgstr "Rusia (DOS)" +msgid "Portuguese (Macintosh)" +msgstr "Portugis (Macintosh)" #: ../rules/base.xml.in.h:658 -msgid "Russian (Georgia)" -msgstr "Rusia (Georgia)" +msgid "Portuguese (Macintosh, eliminate dead keys)" +msgstr "Portugis (Macintosh, hapus tombol mati)" #: ../rules/base.xml.in.h:659 -msgid "Russian (Germany, phonetic)" -msgstr "Rusia (Jerman, fonetik)" +msgid "Portuguese (Macintosh, Sun dead keys)" +msgstr "Portugis (Macintosh, tombol mati Sun)" #: ../rules/base.xml.in.h:660 -msgid "Russian (Kazakhstan, with Kazakh)" -msgstr "Rusia (Kazakhstan, dengan Kazakh)" +msgid "Portuguese (Nativo)" +msgstr "Portugis (Nativo)" #: ../rules/base.xml.in.h:661 -msgid "Russian (Poland, phonetic Dvorak)" -msgstr "Rusia (Polandia, Dvorak fonetik)" +msgid "Portuguese (Nativo for US keyboards)" +msgstr "Portugis (Nativo untuk papan tik AS)" #: ../rules/base.xml.in.h:662 -msgid "Russian (Sweden, phonetic)" -msgstr "Rusia (Swedia, fonetik)" - -#: ../rules/base.xml.in.h:663 -msgid "Russian (Sweden, phonetic, eliminate dead keys)" -msgstr "Rusia (Swedia, fonetik, hapus tombol mati)" +msgid "Esperanto (Portugal, Nativo)" +msgstr "Esperanto (Portugal, Nativo)" -#: ../rules/base.xml.in.h:664 -msgid "Russian (US, phonetic)" -msgstr "Rusia (AS, fonetik)" +#. Keyboard indicator for Romanian layouts +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +msgid "ro" +msgstr "ro" -#: ../rules/base.xml.in.h:665 -msgid "Russian (Ukraine, standard RSTU)" -msgstr "Rusia (Ukraina, standar RSTU)" +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 +msgid "Romanian" +msgstr "Rumania" #: ../rules/base.xml.in.h:666 -msgid "Russian (legacy)" -msgstr "Rusia (legacy)" +msgid "Romanian (cedilla)" +msgstr "Rumania (cedilla)" #: ../rules/base.xml.in.h:667 -msgid "Russian (phonetic WinKeys)" -msgstr "Rusia (WinKeys fonetik)" +msgid "Romanian (standard)" +msgstr "Rumania (standar)" #: ../rules/base.xml.in.h:668 -msgid "Russian (phonetic)" -msgstr "Rusia (fonetik)" +msgid "Romanian (standard cedilla)" +msgstr "Rumania (standard cedilla)" #: ../rules/base.xml.in.h:669 -msgid "Russian (typewriter)" -msgstr "Rusia (mesin tik)" +msgid "Romanian (WinKeys)" +msgstr "Rumania (WinKeys)" -#: ../rules/base.xml.in.h:670 -msgid "Russian (typewriter, legacy)" -msgstr "Rusia (mesin tik, warisan)" +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 +msgid "Russian" +msgstr "Rusia" #: ../rules/base.xml.in.h:671 -msgid "SILVERCREST Multimedia Wireless Keyboard" -msgstr "Papan Ketik SILVERCREST Multimedia Wireless" +msgid "Russian (phonetic)" +msgstr "Rusia (fonetik)" #: ../rules/base.xml.in.h:672 -msgid "SK-1300" -msgstr "SK-1300" +msgid "Russian (phonetic WinKeys)" +msgstr "Rusia (WinKeys fonetik)" #: ../rules/base.xml.in.h:673 -msgid "SK-2500" -msgstr "SK-2500" +msgid "Russian (typewriter)" +msgstr "Rusia (mesin tik)" #: ../rules/base.xml.in.h:674 -msgid "SK-6200" -msgstr "SK-6200" +msgid "Russian (legacy)" +msgstr "Rusia (legacy)" #: ../rules/base.xml.in.h:675 -msgid "SK-7100" -msgstr "SK-7100" +msgid "Russian (typewriter, legacy)" +msgstr "Rusia (mesin tik, warisan)" #: ../rules/base.xml.in.h:676 -msgid "SVEN Ergonomic 2500" -msgstr "SVEN Ergonomic 2500" +msgid "Tatar" +msgstr "Tatar" #: ../rules/base.xml.in.h:677 -msgid "SVEN Slim 303" -msgstr "SVEN Slim 303" +msgid "Ossetian (legacy)" +msgstr "Ossetia (warisan)" #: ../rules/base.xml.in.h:678 -msgid "Saisiyat (Taiwan)" -msgstr "Saisiyat (Taiwan)" +msgid "Ossetian (WinKeys)" +msgstr "Ossetia (WinKeys)" #: ../rules/base.xml.in.h:679 -msgid "Samsung SDM 4500P" -msgstr "Samsung SDM 4500P" +msgid "Chuvash" +msgstr "Chuvash" #: ../rules/base.xml.in.h:680 -msgid "Samsung SDM 4510P" -msgstr "Samsung SDM 4510P" +msgid "Chuvash (Latin)" +msgstr "Chuvash (Latin)" #: ../rules/base.xml.in.h:681 -msgid "Sanwa Supply SKB-KG3" -msgstr "Sanwa Supply SKB-KG3" +msgid "Udmurt" +msgstr "Udmurt" #: ../rules/base.xml.in.h:682 -msgid "Scroll Lock" -msgstr "Scroll Lock" +msgid "Komi" +msgstr "Komi" #: ../rules/base.xml.in.h:683 -msgid "Semi-colon on third level" -msgstr "Semi-kolon pada level ketiga" +msgid "Yakut" +msgstr "Yakut" #: ../rules/base.xml.in.h:684 -msgid "Serbian (Cyrillic with guillemets)" -msgstr "Serbia (Sirilik dengan guillemets)" +msgid "Kalmyk" +msgstr "Kalmyk" #: ../rules/base.xml.in.h:685 -msgid "Serbian (Cyrillic)" -msgstr "Serbia (Sirilik)" +msgid "Russian (DOS)" +msgstr "Rusia (DOS)" #: ../rules/base.xml.in.h:686 -msgid "Serbian (Cyrillic, Z and ZHE swapped)" -msgstr "Serbia (Sirilik, Z dan ZHE ditukar)" +msgid "Russian (Macintosh)" +msgstr "Rusia (Macintosh)" #: ../rules/base.xml.in.h:687 -msgid "Serbian (Latin Unicode qwerty)" -msgstr "Serbia (Latin Unicode qwerty)" +msgid "Serbian (Russia)" +msgstr "Serbia (Rusia)" #: ../rules/base.xml.in.h:688 -msgid "Serbian (Latin Unicode)" -msgstr "Serbia (Latin Unicode)" +msgid "Bashkirian" +msgstr "Bashkirian" #: ../rules/base.xml.in.h:689 -msgid "Serbian (Latin qwerty)" -msgstr "Serbia (Latin qwerty)" +msgid "Mari" +msgstr "Mari" -#: ../rules/base.xml.in.h:690 -msgid "Serbian (Latin with guillemets)" -msgstr "Serbia (Latin dengan guillemets)" +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 +msgid "Serbian" +msgstr "Serbia" #: ../rules/base.xml.in.h:691 -msgid "Serbian (Latin)" -msgstr "Serbia (Latin)" +msgid "Serbian (Cyrillic, Z and ZHE swapped)" +msgstr "Serbia (Sirilik, Z dan ZHE ditukar)" #: ../rules/base.xml.in.h:692 -msgid "Serbian (Russia)" -msgstr "Serbia (Rusia)" +msgid "Serbian (Latin)" +msgstr "Serbia (Latin)" #: ../rules/base.xml.in.h:693 -msgid "Serbo-Croatian (US)" -msgstr "Serbo-Kroasia (AS)" +msgid "Serbian (Latin Unicode)" +msgstr "Serbia (Latin Unicode)" #: ../rules/base.xml.in.h:694 -msgid "Shift cancels Caps Lock" -msgstr "Shift membatalkan Caps Lock" +msgid "Serbian (Latin qwerty)" +msgstr "Serbia (Latin qwerty)" #: ../rules/base.xml.in.h:695 -msgid "Shift does not cancel Num Lock, chooses 3rd level instead" -msgstr "Shift tidak membatalkan Num Lock, lebih memilih level ketiga" +msgid "Serbian (Latin Unicode qwerty)" +msgstr "Serbia (Latin Unicode qwerty)" #: ../rules/base.xml.in.h:696 -msgid "Shift with numeric keypad keys works as in MS Windows" -msgstr "Shit dengan keypad numerik bekerja sesuai pada MS Windows" +msgid "Serbian (Cyrillic with guillemets)" +msgstr "Serbia (Sirilik dengan guillemets)" #: ../rules/base.xml.in.h:697 -msgid "Shift+Caps Lock" -msgstr "Shift+Caps Lock" +msgid "Serbian (Latin with guillemets)" +msgstr "Serbia (Latin dengan guillemets)" #: ../rules/base.xml.in.h:698 -msgid "Sindhi" -msgstr "Sindhi" - -#: ../rules/base.xml.in.h:699 -msgid "Sinhala (phonetic)" -msgstr "Sinhala (fonetik)" +msgid "Pannonian Rusyn" +msgstr "Pannonian Rusyn" +#. Keyboard indicator for Slovenian layouts #: ../rules/base.xml.in.h:700 -msgid "Slovak" -msgstr "Slovakia" +msgid "sl" +msgstr "sl" #: ../rules/base.xml.in.h:701 -msgid "Slovak (extended Backslash)" -msgstr "Slowakia (Backslash diperluas)" +msgid "Slovenian" +msgstr "Slovenia" #: ../rules/base.xml.in.h:702 -msgid "Slovak (qwerty)" -msgstr "Slovakia (qwerty)" +msgid "Slovenian (use guillemets for quotes)" +msgstr "Slovenia (gunakan guillemets untuk tanda petik)" #: ../rules/base.xml.in.h:703 -msgid "Slovak (qwerty, extended Backslash)" -msgstr "Slowakia (qwerty, Backslash diperluas)" - -#: ../rules/base.xml.in.h:704 -msgid "Slovenian" -msgstr "Slovenia" - -#: ../rules/base.xml.in.h:705 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Slovenia (papan tik AS dengan huruf Slovenia)" -#: ../rules/base.xml.in.h:706 -msgid "Slovenian (use guillemets for quotes)" -msgstr "Slovenia (gunakan guillemets untuk tanda petik)" +#. Keyboard indicator for Slovak layouts +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +msgid "sk" +msgstr "sk" + +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 +msgid "Slovak" +msgstr "Slovakia" #: ../rules/base.xml.in.h:707 -msgid "Spanish" -msgstr "Spanyol" +msgid "Slovak (extended Backslash)" +msgstr "Slowakia (Backslash diperluas)" #: ../rules/base.xml.in.h:708 -msgid "Spanish (Dvorak)" -msgstr "Spanyol (Dvorak)" +msgid "Slovak (qwerty)" +msgstr "Slovakia (qwerty)" #: ../rules/base.xml.in.h:709 -msgid "Spanish (Latin American)" -msgstr "Spanyol (Amerika Latin)" +msgid "Slovak (qwerty, extended Backslash)" +msgstr "Slowakia (qwerty, Backslash diperluas)" -#: ../rules/base.xml.in.h:710 -msgid "Spanish (Latin American, Sun dead keys)" -msgstr "Spanyol (Amerika Latin, tombol mati Sun)" +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 +msgid "Spanish" +msgstr "Spanyol" #: ../rules/base.xml.in.h:711 -msgid "Spanish (Latin American, eliminate dead keys)" -msgstr "Spanyol (Amerika Latin, hapus tombol mati)" +msgid "Spanish (eliminate dead keys)" +msgstr "Spanyol (hapus tombol mati)" #: ../rules/base.xml.in.h:712 -msgid "Spanish (Latin American, include dead tilde)" -msgstr "Spanyol (Amerika Latin, termasuk tilde mati)" +msgid "Spanish (include dead tilde)" +msgstr "Spanyol (termasuk tilde mati)" #: ../rules/base.xml.in.h:713 -msgid "Spanish (Macintosh)" -msgstr "Spanyol (Macintosh)" - -#: ../rules/base.xml.in.h:714 msgid "Spanish (Sun dead keys)" msgstr "Spanyol (tombol mati Sun)" +#: ../rules/base.xml.in.h:714 +msgid "Spanish (Dvorak)" +msgstr "Spanyol (Dvorak)" + #: ../rules/base.xml.in.h:715 -msgid "Spanish (eliminate dead keys)" -msgstr "Spanyol (hapus tombol mati)" +msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" +msgstr "Asturia (Spanyol, dengan titik di bawah pada H dan L)" #: ../rules/base.xml.in.h:716 -msgid "Spanish (include dead tilde)" -msgstr "Spanyol (termasuk tilde mati)" +msgid "Catalan (Spain, with middle-dot L)" +msgstr "Katala (Spanyol, dengan titik-tengah pada L)" #: ../rules/base.xml.in.h:717 -msgid "Special keys (Ctrl+Alt+<key>) handled in a server" -msgstr "Tombol spesial (Ctrl+Alt+<key>) ditangani pada server" - -#: ../rules/base.xml.in.h:718 -msgid "Sun Type 5/6" -msgstr "Sun Type 5/6" +msgid "Spanish (Macintosh)" +msgstr "Spanyol (Macintosh)" -#: ../rules/base.xml.in.h:719 -msgid "Super Power Multimedia Keyboard" -msgstr "Super Power Multimedia Keyboard" +#. Keyboard indicator for Swedish layouts +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +msgid "sv" +msgstr "sv" -#: ../rules/base.xml.in.h:720 -msgid "Swahili (Kenya)" -msgstr "Swahili (Kenya)" +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 +msgid "Swedish" +msgstr "Swedia" #: ../rules/base.xml.in.h:721 -msgid "Swahili (Tanzania)" -msgstr "Swahili (Tanzania)" +msgid "Swedish (eliminate dead keys)" +msgstr "Swedia (hapus tombol mati)" #: ../rules/base.xml.in.h:722 -msgid "Swap Ctrl and Caps Lock" -msgstr "Tukar Ctrl dan Caps Lock" +msgid "Swedish (Dvorak)" +msgstr "Swedia (Dvorak)" #: ../rules/base.xml.in.h:723 -msgid "Swap ESC and Caps Lock" -msgstr "Tukar ESC dan Caps Lock" +msgid "Russian (Sweden, phonetic)" +msgstr "Rusia (Swedia, fonetik)" #: ../rules/base.xml.in.h:724 -msgid "Swedish" -msgstr "Swedia" +msgid "Russian (Sweden, phonetic, eliminate dead keys)" +msgstr "Rusia (Swedia, fonetik, hapus tombol mati)" #: ../rules/base.xml.in.h:725 -msgid "Swedish (Dvorak)" -msgstr "Swedia (Dvorak)" +msgid "Northern Saami (Sweden)" +msgstr "Saami Utara (Swedia)" #: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" @@ -2920,971 +2703,1495 @@ msgid "Swedish (Svdvorak)" msgstr "Swedia (Svdvorak)" #: ../rules/base.xml.in.h:728 -msgid "Swedish (eliminate dead keys)" -msgstr "Swedia (hapus tombol mati)" - -#: ../rules/base.xml.in.h:729 msgid "Swedish Sign Language" msgstr "Bahasa Isyarat Swedia" +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 +msgid "German (Switzerland)" +msgstr "Jerman (Swiss)" + #: ../rules/base.xml.in.h:730 -msgid "Symplon PaceBook (tablet PC)" -msgstr "Symplon PaceBook (tablet PC)" +msgid "German (Switzerland, legacy)" +msgstr "Jerman (Swiss, legacy)" #: ../rules/base.xml.in.h:731 -msgid "Syriac" -msgstr "Syriac" +msgid "German (Switzerland, eliminate dead keys)" +msgstr "Jerman (Swiss, hapus tombol mati)" #: ../rules/base.xml.in.h:732 -msgid "Syriac (phonetic)" -msgstr "Suriah (fonetik)" +msgid "German (Switzerland, Sun dead keys)" +msgstr "Jerman (Swiss, tombol mati Sun)" #: ../rules/base.xml.in.h:733 -msgid "Taiwanese" -msgstr "Taiwan" +msgid "French (Switzerland)" +msgstr "Perancis (Swiss)" #: ../rules/base.xml.in.h:734 -msgid "Taiwanese (indigenous)" -msgstr "Taiwan (asli)" +msgid "French (Switzerland, eliminate dead keys)" +msgstr "Perancis (Swiss, hapus tombol mati)" #: ../rules/base.xml.in.h:735 -msgid "Tajik" -msgstr "Tajikistan" +msgid "French (Switzerland, Sun dead keys)" +msgstr "Perancis (Swiss, tombol mati Sun)" #: ../rules/base.xml.in.h:736 -msgid "Tajik (legacy)" -msgstr "Tajik (warisan)" +msgid "French (Switzerland, Macintosh)" +msgstr "Perancis (Swiss, Macintosh)" #: ../rules/base.xml.in.h:737 -msgid "Tamil" -msgstr "Tamil" +msgid "German (Switzerland, Macintosh)" +msgstr "Jerman (Swiss, Macintosh)" #: ../rules/base.xml.in.h:738 -msgid "Tamil (Sri Lanka, TAB Typewriter)" -msgstr "Tamil (Sri Lanka, Mesin Tik TAB)" - -#: ../rules/base.xml.in.h:739 -msgid "Tamil (Sri Lanka, Unicode)" -msgstr "Tamil (Sri Lanka, Unicode)" +msgid "Arabic (Syria)" +msgstr "Arab (Siria)" +#. Keyboard indicator for Syriac layouts #: ../rules/base.xml.in.h:740 -msgid "Tamil (TAB typewriter)" -msgstr "Tamil (mesin tik TAB)" +msgid "syc" +msgstr "syc" #: ../rules/base.xml.in.h:741 -msgid "Tamil (TSCII typewriter)" -msgstr "Tamil (mestin tik TSCII)" +msgid "Syriac" +msgstr "Syriac" #: ../rules/base.xml.in.h:742 -msgid "Tamil (Unicode)" -msgstr "Tamil (Unicode)" +msgid "Syriac (phonetic)" +msgstr "Suriah (fonetik)" #: ../rules/base.xml.in.h:743 -msgid "Tamil (keyboard with numerals)" -msgstr "Tamil (papan tik dengan angka)" +msgid "Kurdish (Syria, Latin Q)" +msgstr "Kurdi (Suriah, Latin Q" #: ../rules/base.xml.in.h:744 -msgid "Targa Visionary 811" -msgstr "Targa Visionary 811" +msgid "Kurdish (Syria, F)" +msgstr "Kurdi (Suriah, F)" #: ../rules/base.xml.in.h:745 -msgid "Tatar" -msgstr "Tatar" - -#: ../rules/base.xml.in.h:746 -msgid "Telugu" -msgstr "Telugu" +msgid "Kurdish (Syria, Latin Alt-Q)" +msgstr "Kurdi (Suriah, Latin Alt-Q)" +#. Keyboard indicator for Tajik layouts #: ../rules/base.xml.in.h:747 -msgid "Thai" -msgstr "Thailand" +msgid "tg" +msgstr "tg" #: ../rules/base.xml.in.h:748 -msgid "Thai (Pattachote)" -msgstr "Thailand (Pattachote)" +msgid "Tajik" +msgstr "Tajikistan" #: ../rules/base.xml.in.h:749 -msgid "Thai (TIS-820.2538)" -msgstr "Thailand (TIS-820.2538)" - -#: ../rules/base.xml.in.h:750 -msgid "Tibetan" -msgstr "Tibetan" +msgid "Tajik (legacy)" +msgstr "Tajik (warisan)" +#. Keyboard indicator for Sinhala layouts #: ../rules/base.xml.in.h:751 -msgid "Tibetan (with ASCII numerals)" -msgstr "Tibetan (with ASCII numerals)" +msgid "si" +msgstr "si" #: ../rules/base.xml.in.h:752 -msgid "To the corresponding key in a Dvorak keyboard." -msgstr "Ke tombol dalam papan ketik Dvorak." +msgid "Sinhala (phonetic)" +msgstr "Sinhala (fonetik)" #: ../rules/base.xml.in.h:753 -msgid "To the corresponding key in a Qwerty keyboard." -msgstr "Ke tombol dalam papan ketik Qwerty." +msgid "Tamil (Sri Lanka, Unicode)" +msgstr "Tamil (Sri Lanka, Unicode)" #: ../rules/base.xml.in.h:754 -msgid "Toggle PointerKeys with Shift + NumLock." -msgstr "Jungkitkan PointerKeys dengan Shift + NumLock." - -#: ../rules/base.xml.in.h:755 -msgid "Toshiba Satellite S3000" -msgstr "Toshiba Satellite S3000" +msgid "Tamil (Sri Lanka, TAB Typewriter)" +msgstr "Tamil (Sri Lanka, Mesin Tik TAB)" +#. Keyboard indicator for Thai layouts #: ../rules/base.xml.in.h:756 -msgid "Trust Direct Access Keyboard" -msgstr "Trust Direct Access Keyboard" +msgid "th" +msgstr "th" #: ../rules/base.xml.in.h:757 -msgid "Trust Slimline" -msgstr "Trust Slimline" +msgid "Thai" +msgstr "Thailand" #: ../rules/base.xml.in.h:758 -msgid "Trust Wireless Keyboard Classic" -msgstr "Trust Wireless Keyboard Classic" +msgid "Thai (TIS-820.2538)" +msgstr "Thailand (TIS-820.2538)" #: ../rules/base.xml.in.h:759 -msgid "Tswana" -msgstr "Tswana" +msgid "Thai (Pattachote)" +msgstr "Thailand (Pattachote)" + +#. Keyboard indicator for Turkish layouts +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +msgid "tr" +msgstr "tr" -#: ../rules/base.xml.in.h:760 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turki" -#: ../rules/base.xml.in.h:761 -msgid "Turkish (Alt-Q)" -msgstr "Turki (Alt-Q)" - -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turki (F)" -#: ../rules/base.xml.in.h:763 -msgid "Turkish (Sun dead keys)" -msgstr "Turki (tombol mati Sun)" - #: ../rules/base.xml.in.h:764 -msgid "Turkish (international with dead keys)" -msgstr "Turki (internasional dengan tombol mati)" +msgid "Turkish (Alt-Q)" +msgstr "Turki (Alt-Q)" #: ../rules/base.xml.in.h:765 -msgid "Turkmen" -msgstr "Turkmen" +msgid "Turkish (Sun dead keys)" +msgstr "Turki (tombol mati Sun)" #: ../rules/base.xml.in.h:766 -msgid "Turkmen (Alt-Q)" -msgstr "Turkmen (Alt-Q)" +msgid "Kurdish (Turkey, Latin Q)" +msgstr "Kurdi (Turki, Latin Q)" #: ../rules/base.xml.in.h:767 -msgid "TypeMatrix EZ-Reach 2020" -msgstr "TypeMatrix EZ-Reach 2020" +msgid "Kurdish (Turkey, F)" +msgstr "Kurdi (Turki, F)" #: ../rules/base.xml.in.h:768 -msgid "TypeMatrix EZ-Reach 2030 PS2" -msgstr "TypeMatrix EZ-Reach 2030 PS2" +msgid "Kurdish (Turkey, Latin Alt-Q)" +msgstr "Kurdi (Turki, Latin Alt-Q)" #: ../rules/base.xml.in.h:769 -msgid "TypeMatrix EZ-Reach 2030 USB" -msgstr "TypeMatrix EZ-Reach 2030 USB" - -#: ../rules/base.xml.in.h:770 -msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)" -msgstr "TypeMatrix EZ-Reach 2030 USB (mode 102/105:EU)" +msgid "Turkish (international with dead keys)" +msgstr "Turki (internasional dengan tombol mati)" -#: ../rules/base.xml.in.h:771 -msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)" -msgstr "TypeMatrix EZ-Reach 2030 USB (mode 106:JP)" +#. Keyboard indicator for Crimean Tatar layouts +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 +msgid "crh" +msgstr "crh" #: ../rules/base.xml.in.h:772 -msgid "Udmurt" -msgstr "Udmurt" +msgid "Crimean Tatar (Turkish Q)" +msgstr "Crimean Tatar (Turkish Q)" #: ../rules/base.xml.in.h:773 -msgid "Ukrainian" -msgstr "Ukraina" +msgid "Crimean Tatar (Turkish F)" +msgstr "Crimean Tatar (Turkish F)" #: ../rules/base.xml.in.h:774 -msgid "Ukrainian (WinKeys)" -msgstr "Ukraina (WinKeys)" +msgid "Crimean Tatar (Turkish Alt-Q)" +msgstr "Crimean Tatar (Turkish Alt-Q)" #: ../rules/base.xml.in.h:775 -msgid "Ukrainian (homophonic)" -msgstr "Ukraina (homofonik)" +msgid "Taiwanese" +msgstr "Taiwan" #: ../rules/base.xml.in.h:776 -msgid "Ukrainian (legacy)" -msgstr "Ukraina (legacy)" - -#: ../rules/base.xml.in.h:777 -msgid "Ukrainian (phonetic)" -msgstr "Ukraina (fonetik)" +msgid "Taiwanese (indigenous)" +msgstr "Taiwan (asli)" +#. Keyboard indicator for Saisiyat layouts #: ../rules/base.xml.in.h:778 -msgid "Ukrainian (standard RSTU)" -msgstr "Ukraina (standard RSTU)" +msgid "xsy" +msgstr "xsy" #: ../rules/base.xml.in.h:779 -msgid "Ukrainian (typewriter)" -msgstr "Ukraina (mesin tik)" - -#: ../rules/base.xml.in.h:780 -msgid "Unicode additions (arrows and math operators)" -msgstr "Tambahan unicode (panah dan operator matematika)" +msgid "Saisiyat (Taiwan)" +msgstr "Saisiyat (Taiwan)" -#: ../rules/base.xml.in.h:781 -msgid "Unicode additions (arrows and math operators). Math operators on default level" -msgstr "Tambahan unicode (panah dan operator matematika). Operator matematika pada level standar" +#. Keyboard indicator for Ukranian layouts +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +msgid "uk" +msgstr "uk" -#: ../rules/base.xml.in.h:782 -msgid "Unitek KB-1925" -msgstr "Unitek KB-1925" +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 +msgid "Ukrainian" +msgstr "Ukraina" #: ../rules/base.xml.in.h:783 -msgid "Urdu (Pakistan)" -msgstr "Urdu (Pakistan)" +msgid "Ukrainian (phonetic)" +msgstr "Ukraina (fonetik)" #: ../rules/base.xml.in.h:784 -msgid "Urdu (Pakistan, CRULP)" -msgstr "Urdu (Pakistan, CRULP)" +msgid "Ukrainian (typewriter)" +msgstr "Ukraina (mesin tik)" #: ../rules/base.xml.in.h:785 -msgid "Urdu (Pakistan, NLA)" -msgstr "Urdu (Pakistan, NLA)" +msgid "Ukrainian (WinKeys)" +msgstr "Ukraina (WinKeys)" #: ../rules/base.xml.in.h:786 -msgid "Urdu (WinKeys)" -msgstr "Urdu (WinKeys)" +msgid "Ukrainian (legacy)" +msgstr "Ukraina (legacy)" #: ../rules/base.xml.in.h:787 -msgid "Urdu (alternative phonetic)" -msgstr "Urdu (fonetik alternatif)" +msgid "Ukrainian (standard RSTU)" +msgstr "Ukraina (standard RSTU)" #: ../rules/base.xml.in.h:788 -msgid "Urdu (phonetic)" -msgstr "Urdu (fonetik)" +msgid "Russian (Ukraine, standard RSTU)" +msgstr "Rusia (Ukraina, standar RSTU)" #: ../rules/base.xml.in.h:789 -msgid "Use keyboard LED to show alternative layout" -msgstr "Gunakan papan ketik LED untuk menunjukkan layout alternatif" +msgid "Ukrainian (homophonic)" +msgstr "Ukraina (homofonik)" -#: ../rules/base.xml.in.h:790 -msgid "Using space key to input non-breakable space character" -msgstr "Menggunakan spasi untuk input karakter spasi yang tidak pecah" +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 +msgid "English (UK)" +msgstr "Inggris (Britania)" #: ../rules/base.xml.in.h:791 -msgid "Usual space at any level" -msgstr "Tombol spasi biasa pada semua level" +msgid "English (UK, extended WinKeys)" +msgstr "Inggris (Britania, Winkeys diperluas)" #: ../rules/base.xml.in.h:792 -msgid "Uyghur" -msgstr "Uyghur" +msgid "English (UK, international with dead keys)" +msgstr "Inggris (Britania, internasional dengan tombol mati)" #: ../rules/base.xml.in.h:793 -msgid "Uzbek" -msgstr "Uzbek" +msgid "English (UK, Dvorak)" +msgstr "Inggris (Britania, Dvorak)" #: ../rules/base.xml.in.h:794 -msgid "Uzbek (Afghanistan)" -msgstr "Uzbek (Afghanistan)" +msgid "English (UK, Dvorak with UK punctuation)" +msgstr "Inggris (Britania, Dvorak dengan pungtuasi Britania)" #: ../rules/base.xml.in.h:795 -msgid "Uzbek (Afghanistan, OLPC)" -msgstr "Uzbek (Afghanistan, OLPC)" +msgid "English (UK, Macintosh)" +msgstr "Inggris (Britania, Macintosh)" #: ../rules/base.xml.in.h:796 -msgid "Uzbek (Latin)" -msgstr "Uzbek (Latin)" +msgid "English (UK, Macintosh international)" +msgstr "Inggris (Britania, Macintosh internasional)" #: ../rules/base.xml.in.h:797 -msgid "Vietnamese" -msgstr "Vietnam" +msgid "English (UK, Colemak)" +msgstr "Inggris (UK, Colemak)" #: ../rules/base.xml.in.h:798 -msgid "ViewSonic KU-306 Internet Keyboard" -msgstr "Papan Ketik Internet ViewSonic KU-306" +msgid "Uzbek" +msgstr "Uzbek" #: ../rules/base.xml.in.h:799 -msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" -msgstr "Wang 724 keypad dengan tambahan Unicode (panah and operator matematika)" - -#: ../rules/base.xml.in.h:800 -msgid "Wang 724 keypad with Unicode additions (arrows and math operators). Math operators on default level" -msgstr "Wang 724 keypad dengan tambahan Unicode (panah and operator matematika). Operator matematika pada level standar" +msgid "Uzbek (Latin)" +msgstr "Uzbek (Latin)" +#. Keyboard indicator for Vietnamese layouts #: ../rules/base.xml.in.h:801 -msgid "Winbook Model XP5" -msgstr "Winbook Model XP5" +msgid "vi" +msgstr "vi" #: ../rules/base.xml.in.h:802 -msgid "Wolof" -msgstr "Wolof" - -#: ../rules/base.xml.in.h:803 -msgid "Yahoo! Internet Keyboard" -msgstr "Papan Ketik Internet Yahoo!" +msgid "Vietnamese" +msgstr "Vietnam" -#: ../rules/base.xml.in.h:804 -msgid "Yakut" -msgstr "Yakut" +#. Keyboard indicator for Korean layouts +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +msgid "ko" +msgstr "ko" -#: ../rules/base.xml.in.h:805 -msgid "Yoruba" -msgstr "Yoruba" +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 +msgid "Korean" +msgstr "Korea" #: ../rules/base.xml.in.h:806 -msgid "Zero-width non-joiner character at second level" -msgstr "Karakter non-penggabung lebar-nol pada level kedua" +msgid "Korean (101/104 key compatible)" +msgstr "Korea (kompatibel dengan 101/104 tombol)" #: ../rules/base.xml.in.h:807 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" -msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga" - -#: ../rules/base.xml.in.h:808 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" -msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga, tak ada di level keempat" +msgid "Japanese (PC-98xx Series)" +msgstr "Jepang (Seri PC-98xx)" +#. Keyboard indicator for Irish layouts #: ../rules/base.xml.in.h:809 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" -msgstr "Karakter non-penggabung lebar-nol pada level ketiga, karakter spasi non-dilepaskan pada level ketiga, spasi non-dilepaskan tipis pada level keempat" +msgid "ie" +msgstr "ie" #: ../rules/base.xml.in.h:810 -msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" -msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga, penggabung lebar-nol pada level keempat" +msgid "Irish" +msgstr "Irlandia" #: ../rules/base.xml.in.h:811 -msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" -msgstr "Karakter non-penggabung lebar nol pada level kedua, karakter penggabung lebar-nol pada level ketiga" +msgid "CloGaelach" +msgstr "CloGaelach" #: ../rules/base.xml.in.h:812 -msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" -msgstr "Karakter non-penggabung pada level kedua, karakter penggabung lebar-nol pada level ketiga, karakter spasi non-dilepaskan pada level keempat" +msgid "Irish (UnicodeExpert)" +msgstr "Irlandia (UnicodeExpert)" #: ../rules/base.xml.in.h:813 -msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" -msgstr "Karakter non-penggabung lebar-nol pada level ketiga, penggabung lebar-nol pada level keempat" +msgid "Ogham" +msgstr "Ogham" + +#: ../rules/base.xml.in.h:814 +msgid "Ogham (IS434)" +msgstr "Ogham (IS434)" -#. Keyboard indicator for Akan layouts #: ../rules/base.xml.in.h:815 -msgid "ak" -msgstr "ak" +msgid "Urdu (Pakistan)" +msgstr "Urdu (Pakistan)" + +#: ../rules/base.xml.in.h:816 +msgid "Urdu (Pakistan, CRULP)" +msgstr "Urdu (Pakistan, CRULP)" -#. Keyboard indicator for Amharic layouts #: ../rules/base.xml.in.h:817 -msgid "am" -msgstr "am" +msgid "Urdu (Pakistan, NLA)" +msgstr "Urdu (Pakistan, NLA)" -#. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:819 -msgid "ar" -msgstr "ar" +#: ../rules/base.xml.in.h:818 +msgid "Arabic (Pakistan)" +msgstr "Arab (Pakistan)" + +#. Keyboard indicator for Sindhi layouts +#: ../rules/base.xml.in.h:820 +msgid "sd" +msgstr "sd" -#. Keyboard indicator for Avatime layouts #: ../rules/base.xml.in.h:821 -msgid "avn" -msgstr "avn" +msgid "Sindhi" +msgstr "Sindhi" -#. Keyboard indicator for Azerbaijani layouts +#. Keyboard indicator for Dhivehi layouts #: ../rules/base.xml.in.h:823 -msgid "az" -msgstr "az" +msgid "dv" +msgstr "dv" + +#: ../rules/base.xml.in.h:824 +msgid "Dhivehi" +msgstr "Dhivehi" -#. Keyboard indicator for Belgian layouts #: ../rules/base.xml.in.h:825 -msgid "be" -msgstr "be" +msgid "English (South Africa)" +msgstr "Inggris (Afrika Selatan)" -#. Keyboard indicator for Berber layouts +#. Keyboard indicator for Esperanto layouts #: ../rules/base.xml.in.h:827 -msgid "ber" -msgstr "ber" +msgid "eo" +msgstr "eo" + +#: ../rules/base.xml.in.h:828 +msgid "Esperanto" +msgstr "Esperanto" -#. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:829 -msgid "bg" -msgstr "bg" +msgid "Esperanto (displaced semicolon and quote, obsolete)" +msgstr "Esperanto (titik koma dan tanda kutip tergeser, kuno)" -#. Keyboard indicator for Bambara layouts +#. Keyboard indicator for Nepali layouts #: ../rules/base.xml.in.h:831 -msgid "bm" -msgstr "bm" +msgid "ne" +msgstr "ne" + +#: ../rules/base.xml.in.h:832 +msgid "Nepali" +msgstr "Nepal" -#. Keyboard indicator for Bengali layouts #: ../rules/base.xml.in.h:833 -msgid "bn" -msgstr "bn" +msgid "English (Nigeria)" +msgstr "Inggris (Nigeria)" -#. Keyboard indicator for Braille layouts +#. Keyboard indicator for Igbo layouts #: ../rules/base.xml.in.h:835 -msgid "brl" -msgstr "brl" +msgid "ig" +msgstr "ig" -#. Keyboard indicator for Bosnian layouts -#: ../rules/base.xml.in.h:837 -msgid "bs" -msgstr "bs" +#: ../rules/base.xml.in.h:836 +msgid "Igbo" +msgstr "Igbo" + +#. Keyboard indicator for Yoruba layouts +#: ../rules/base.xml.in.h:838 +msgid "yo" +msgstr "yo" -#. Keyboard indicator for Belarusian layouts #: ../rules/base.xml.in.h:839 -msgid "by" -msgstr "by" +msgid "Yoruba" +msgstr "Yoruba" -#. Keyboard indicator for Catalan layouts +#. Keyboard indicator for Amharic layouts #: ../rules/base.xml.in.h:841 -msgid "ca" -msgstr "ca" +msgid "am" +msgstr "am" -#. Keyboard indicator for Cherokee layouts -#: ../rules/base.xml.in.h:843 -msgid "chr" -msgstr "chr" +#: ../rules/base.xml.in.h:842 +msgid "Amharic" +msgstr "Amharic" + +#. Keyboard indicator for Wolof layouts +#: ../rules/base.xml.in.h:844 +msgid "wo" +msgstr "wo" -#. Keyboard indicator for Cameroon layouts #: ../rules/base.xml.in.h:845 -msgid "cm" -msgstr "cm" +msgid "Wolof" +msgstr "Wolof" -#. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:847 ../rules/base.extras.xml.in.h:38 -msgid "crh" -msgstr "crh" +#. Keyboard indicator for Braille layouts +#: ../rules/base.xml.in.h:847 +msgid "brl" +msgstr "brl" + +#: ../rules/base.xml.in.h:848 +msgid "Braille" +msgstr "Braille" -#. Keyboard indicator for Chech layouts #: ../rules/base.xml.in.h:849 -msgid "cs" -msgstr "cs" +msgid "Braille (left hand)" +msgstr "Braille (tangan kiri)" -#. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:851 -msgid "da" -msgstr "da" +#: ../rules/base.xml.in.h:850 +msgid "Braille (right hand)" +msgstr "Braille (tangan kanan)" -#. Keyboard indicator for German layouts -#: ../rules/base.xml.in.h:853 ../rules/base.extras.xml.in.h:39 -msgid "de" -msgstr "de" +#. Keyboard indicator for Turkmen layouts +#: ../rules/base.xml.in.h:852 +msgid "tk" +msgstr "tk" -#. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:855 -msgid "dv" -msgstr "dv" +#: ../rules/base.xml.in.h:853 +msgid "Turkmen" +msgstr "Turkmen" + +#: ../rules/base.xml.in.h:854 +msgid "Turkmen (Alt-Q)" +msgstr "Turkmen (Alt-Q)" + +#. Keyboard indicator for Bambara layouts +#: ../rules/base.xml.in.h:856 +msgid "bm" +msgstr "bm" -#. Keyboard indicator for Dzongkha layouts #: ../rules/base.xml.in.h:857 -msgid "dz" -msgstr "dz" +msgid "Bambara" +msgstr "Bambara" + +#: ../rules/base.xml.in.h:858 +msgid "French (Mali, alternative)" +msgstr "Perancis (Mali, alternatif)" -#. Keyboard indicator for Ewe layouts #: ../rules/base.xml.in.h:859 -msgid "ee" -msgstr "ee" +msgid "English (Mali, US Macintosh)" +msgstr "Inggris (Mali, Macintosh AS)" -#. Keyboard indicator for English layouts -#: ../rules/base.xml.in.h:861 ../rules/base.extras.xml.in.h:40 -msgid "en" -msgstr "en" +#: ../rules/base.xml.in.h:860 +msgid "English (Mali, US international)" +msgstr "Inggris (Mali, Internasional AS)" + +#. Keyboard indicator for Swahili layouts +#: ../rules/base.xml.in.h:862 +msgid "sw" +msgstr "sw" -#. Keyboard indicator for Esperanto layouts #: ../rules/base.xml.in.h:863 -msgid "eo" -msgstr "eo" +msgid "Swahili (Tanzania)" +msgstr "Swahili (Tanzania)" + +#: ../rules/base.xml.in.h:864 +msgid "Swahili (Kenya)" +msgstr "Swahili (Kenya)" -#. Keyboard indicator for Spanish layouts #: ../rules/base.xml.in.h:865 -msgid "es" -msgstr "es" +msgid "Kikuyu" +msgstr "Kikuyu" -#. Keyboard indicator for Estonian layouts +#. Keyboard indicator for Tswana layouts #: ../rules/base.xml.in.h:867 -msgid "et" -msgstr "et" +msgid "tn" +msgstr "tn" -#. Keyboard indicator for Persian layouts -#: ../rules/base.xml.in.h:869 ../rules/base.extras.xml.in.h:41 -msgid "fa" -msgstr "fa" +#: ../rules/base.xml.in.h:868 +msgid "Tswana" +msgstr "Tswana" + +#. Keyboard indicator for Filipino layouts +#: ../rules/base.xml.in.h:870 +msgid "ph" +msgstr "ph" -#. Keyboard indicator for Fula layouts #: ../rules/base.xml.in.h:871 -msgid "ff" -msgstr "ff" +msgid "Filipino" +msgstr "Filipina" + +#: ../rules/base.xml.in.h:872 +msgid "Filipino (QWERTY Baybayin)" +msgstr "Filipina (QWERTY Baybayin)" -#. Keyboard indicator for Finnish layouts #: ../rules/base.xml.in.h:873 -msgid "fi" -msgstr "fi" +msgid "Filipino (Capewell-Dvorak Latin)" +msgstr "Filipina (Capewell-Dvorak Latin)" + +#: ../rules/base.xml.in.h:874 +msgid "Filipino (Capewell-Dvorak Baybayin)" +msgstr "Filipina (Capewell-Dvorak Baybayin)" -#. Keyboard indicator for Faroese layouts #: ../rules/base.xml.in.h:875 -msgid "fo" -msgstr "fo" +msgid "Filipino (Capewell-QWERF 2006 Latin)" +msgstr "Filipina (Capewell-QWERF 2006 Latin)" -#. Keyboard indicator for French layouts -#: ../rules/base.xml.in.h:877 ../rules/base.extras.xml.in.h:42 -msgid "fr" -msgstr "fr" +#: ../rules/base.xml.in.h:876 +msgid "Filipino (Capewell-QWERF 2006 Baybayin)" +msgstr "Filipina (Capewell-QWERF 2006 Baybayin)" + +#: ../rules/base.xml.in.h:877 +msgid "Filipino (Colemak Latin)" +msgstr "Filipina (Colemak Latin)" + +#: ../rules/base.xml.in.h:878 +msgid "Filipino (Colemak Baybayin)" +msgstr "Filipina (Colemak Baybayin)" -#. Keyboard indicator for Ga layouts #: ../rules/base.xml.in.h:879 -msgid "gaa" -msgstr "gaa" +msgid "Filipino (Dvorak Latin)" +msgstr "Filipina (Dvorak Latin)" + +#: ../rules/base.xml.in.h:880 +msgid "Filipino (Dvorak Baybayin)" +msgstr "Filipina (Dvorak Baybayin)" -#. Keyboard indicator for Greek layouts #: ../rules/base.xml.in.h:881 -msgid "gr" -msgstr "gr" +msgid "md" +msgstr "md" + +#: ../rules/base.xml.in.h:882 +msgid "Moldavian" +msgstr "Moldavia" -#. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:883 -msgid "gu" -msgstr "gu" +msgid "gag" +msgstr "gag" + +#: ../rules/base.xml.in.h:884 +msgid "Moldavian (Gagauz)" +msgstr "Moldavia (Gagauz)" -#. Keyboard indicator for Hausa layouts #: ../rules/base.xml.in.h:885 -msgid "ha" -msgstr "ha" +msgid "Switching to another layout" +msgstr "Bertukar ke tata letak lain" + +#: ../rules/base.xml.in.h:886 +msgid "Right Alt (while pressed)" +msgstr "Alt Kanan (ketika ditekan)" -#. Keyboard indicator for Hebrew layouts #: ../rules/base.xml.in.h:887 -msgid "he" -msgstr "he" +msgid "Left Alt (while pressed)" +msgstr "Alt Kiri (ketika ditekan)" + +#: ../rules/base.xml.in.h:888 +msgid "Left Win (while pressed)" +msgstr "Win Kiri (ketika ditekan)" -#. Keyboard indicator for Hindi layouts #: ../rules/base.xml.in.h:889 -msgid "hi" -msgstr "hi" +msgid "Right Win (while pressed)" +msgstr "Win Kanan (ketika ditekan)" + +#: ../rules/base.xml.in.h:890 +msgid "Any Win key (while pressed)" +msgstr "Tombol Win apapun (ketika ditekan)" -#. Keyboard indicator for Croatian layouts #: ../rules/base.xml.in.h:891 -msgid "hr" -msgstr "hr" +msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" +msgstr "Caps Lock (ketika ditekan), Alt+Caps Lock melakukan aksi capslock asli" + +#: ../rules/base.xml.in.h:892 +msgid "Right Ctrl (while pressed)" +msgstr "Ctrl Kanan (ketika ditekan)" -#. Keyboard indicator for Hungarian layouts #: ../rules/base.xml.in.h:893 -msgid "hu" -msgstr "hu" +msgid "Right Alt" +msgstr "Alt Kanan" -#. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:895 ../rules/base.extras.xml.in.h:43 -msgid "hy" -msgstr "hy" +#: ../rules/base.xml.in.h:894 +msgid "Left Alt" +msgstr "Alt Kiri" + +#: ../rules/base.xml.in.h:895 +msgid "Caps Lock" +msgstr "Caps Lock" + +#: ../rules/base.xml.in.h:896 +msgid "Shift+Caps Lock" +msgstr "Shift+Caps Lock" -#. Keyboard indicator for Irish layouts #: ../rules/base.xml.in.h:897 -msgid "ie" -msgstr "ie" +msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" +msgstr "Caps Lock (ke tata letak pertama), Shift+Caps Lock (ke tata letak terakhir)" + +#: ../rules/base.xml.in.h:898 +msgid "Left Win (to first layout), Right Win/Menu (to last layout)" +msgstr "Win Kiri (ke tata letak pertama), Win/Menu Kanan (ke tata letak terakhir)" -#. Keyboard indicator for Igbo layouts #: ../rules/base.xml.in.h:899 -msgid "ig" -msgstr "ig" +msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" +msgstr "Ctrl Kiri (ke tata letak pertama), Ctrl Kanan (ke tata letak terakhir)" + +#: ../rules/base.xml.in.h:900 +msgid "Alt+Caps Lock" +msgstr "Tombol Alt+Caps" -#. Keyboard indicator for Inuktikut layouts #: ../rules/base.xml.in.h:901 -msgid "ike" -msgstr "ike" +msgid "Both Shift keys together" +msgstr "Kedua tombol Shift bersama" + +#: ../rules/base.xml.in.h:902 +msgid "Both Alt keys together" +msgstr "Kedua tombol Alt bersama" -#. Keyboard indicator for Indian layouts #: ../rules/base.xml.in.h:903 -msgid "in" -msgstr "in" +msgid "Both Ctrl keys together" +msgstr "Kedua tombol Ctrl bersama" + +#: ../rules/base.xml.in.h:904 +msgid "Ctrl+Shift" +msgstr "Ctrl+Shift" -#. Keyboard indicator for Icelandic layouts #: ../rules/base.xml.in.h:905 -msgid "is" -msgstr "is" +msgid "Left Ctrl+Left Shift" +msgstr "Ctrl Kiri+Shift Kiri" + +#: ../rules/base.xml.in.h:906 +msgid "Right Ctrl+Right Shift" +msgstr "Ctrl Kanan+Shift Kanan" -#. Keyboard indicator for Italian layouts #: ../rules/base.xml.in.h:907 -msgid "it" -msgstr "it" +msgid "Alt+Ctrl" +msgstr "Alt+Ctrl" + +#: ../rules/base.xml.in.h:908 +msgid "Alt+Shift" +msgstr "Alt+Shift" -#. Keyboard indicator for Japanese layouts #: ../rules/base.xml.in.h:909 -msgid "ja" -msgstr "ja" +msgid "Left Alt+Left Shift" +msgstr "Alt Kiri+Shift Kiri" + +#: ../rules/base.xml.in.h:910 +msgid "Alt+Space" +msgstr "Alt+Space" -#. Keyboard indicator for Georgian layouts #: ../rules/base.xml.in.h:911 -msgid "ka" -msgstr "ka" +msgid "Menu" +msgstr "Menu" + +#: ../rules/base.xml.in.h:912 +msgid "Left Win" +msgstr "Win Kiri" -#. Keyboard indicator for Kikuyu layouts #: ../rules/base.xml.in.h:913 -msgid "ki" -msgstr "ki" +msgid "Right Win" +msgstr "Win Kanan" + +#: ../rules/base.xml.in.h:914 +msgid "Left Shift" +msgstr "Shift Kiri" -#. Keyboard indicator for Kazakh layouts #: ../rules/base.xml.in.h:915 -msgid "kk" -msgstr "kk" +msgid "Right Shift" +msgstr "Shift Kanan" + +#: ../rules/base.xml.in.h:916 +msgid "Left Ctrl" +msgstr "Ctrl Kiri" -#. Keyboard indicator for Khmer layouts #: ../rules/base.xml.in.h:917 -msgid "km" -msgstr "km" +msgid "Right Ctrl" +msgstr "Ctrl Kanan" + +#: ../rules/base.xml.in.h:918 +msgid "Scroll Lock" +msgstr "Scroll Lock" -#. Keyboard indicator for Kannada layouts #: ../rules/base.xml.in.h:919 -msgid "kn" -msgstr "kn" +msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" +msgstr "Ctrl Kiri+Win Kiri (ke tata letak pertama), Ctrl Kanan+Menu (ke tata letak kedua)" + +#: ../rules/base.xml.in.h:920 +msgid "Key to choose 3rd level" +msgstr "Tekan Menu Kiri untuk memilih level 3" -#. Keyboard indicator for Korean layouts #: ../rules/base.xml.in.h:921 -msgid "ko" -msgstr "ko" +msgid "Any Win key" +msgstr "Tombol Win apapun" + +#: ../rules/base.xml.in.h:922 +msgid "Any Alt key" +msgstr "Tombol Alt apapun" -#. Keyboard indicator for Kurdish layouts #: ../rules/base.xml.in.h:923 -msgid "ku" -msgstr "ku" +msgid "Right Alt, Shift+Right Alt key is Compose" +msgstr "Alt Kanan, Shift+Right Alt adalah Compose" + +#: ../rules/base.xml.in.h:924 +msgid "Right Alt key never chooses 3rd level" +msgstr "Alt Kanan tidak pernah memilih level 3" -#. Keyboard indicator for Lao layouts #: ../rules/base.xml.in.h:925 -msgid "lo" -msgstr "lo" +msgid "Enter on keypad" +msgstr "Enter pada keypad" -#. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:927 ../rules/base.extras.xml.in.h:45 -msgid "lt" -msgstr "lt" +#: ../rules/base.xml.in.h:926 +msgid "Backslash" +msgstr "Backslash" -#. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:929 ../rules/base.extras.xml.in.h:46 -msgid "lv" -msgstr "lv" +#: ../rules/base.xml.in.h:927 +msgid "<Less/Greater>" +msgstr "<Lebih Kecil/Lebih Besar>" + +#: ../rules/base.xml.in.h:928 +msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "Caps Lock memilih level ketiga, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ketiga lainnya" + +#: ../rules/base.xml.in.h:929 +msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "Backslash memilih level ketiga, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ketiga lainnya" + +#: ../rules/base.xml.in.h:930 +msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" +msgstr "<Lebih Kecil/Lebih Besar> memilih level ke-3, berfungsi sebagai kunci sekali jika ditekan bersamaan dengan pemilih-level-ke-3 lainnya" -#. Keyboard indicator for Maori layouts #: ../rules/base.xml.in.h:931 -msgid "mi" -msgstr "mi" +msgid "Ctrl key position" +msgstr "Posisi tombol Ctrl" + +#: ../rules/base.xml.in.h:932 +msgid "Caps Lock as Ctrl" +msgstr "Caps Lock sebagai Ctrl" -#. Keyboard indicator for Macedonian layouts #: ../rules/base.xml.in.h:933 -msgid "mk" -msgstr "mk" +msgid "Left Ctrl as Meta" +msgstr "Ctrl Kiri sebagai Meta" + +#: ../rules/base.xml.in.h:934 +msgid "Swap Ctrl and Caps Lock" +msgstr "Tukar Ctrl dan Caps Lock" -#. Keyboard indicator for Malayalam layouts #: ../rules/base.xml.in.h:935 -msgid "ml" -msgstr "ml" +msgid "At left of 'A'" +msgstr "Di sebelah kiri 'A'" + +#: ../rules/base.xml.in.h:936 +msgid "At bottom left" +msgstr "Di kiri bawah" -#. Keyboard indicator for Mongolian layouts #: ../rules/base.xml.in.h:937 -msgid "mn" -msgstr "mn" +msgid "Right Ctrl as Right Alt" +msgstr "Ctrl Kanan bertindak seperti Alt Kanan" + +#: ../rules/base.xml.in.h:938 +msgid "Menu as Right Ctrl" +msgstr "Menu sebagai Ctrl Kanan" -#. Keyboard indicator for Maltese layouts #: ../rules/base.xml.in.h:939 -msgid "mt" -msgstr "mt" +msgid "Right Alt as Right Ctrl" +msgstr "Alt Kanan sebagai Ctrl Kanan" + +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Tukar tombol Alt Kiri dengan tombol Ctrl Kiri" -#. Keyboard indicator for Burmese layouts #: ../rules/base.xml.in.h:941 -msgid "my" -msgstr "my" +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Tukar tombol Win Kiri dengan tombol Ctrl Kiri" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Alt Kiri adalah Ctrl, CTrl Kiri adalan Win, Win Kiri adalah Alt" -#. Keyboard indicator for Nepali layouts #: ../rules/base.xml.in.h:943 -msgid "ne" -msgstr "ne" +msgid "Use keyboard LED to show alternative layout" +msgstr "Gunakan papan ketik LED untuk menunjukkan layout alternatif" + +#: ../rules/base.xml.in.h:944 +msgid "Num Lock" +msgstr "Num Lock" -#. Keyboard indicator for Dutch layouts #: ../rules/base.xml.in.h:945 -msgid "nl" -msgstr "nl" +msgid "Layout of numeric keypad" +msgstr "Tata letak keypad numerik" + +#: ../rules/base.xml.in.h:946 +msgid "Legacy" +msgstr "Legacy" -#. Keyboard indicator for Norwegian layouts #: ../rules/base.xml.in.h:947 -msgid "no" -msgstr "no" +msgid "Unicode additions (arrows and math operators)" +msgstr "Tambahan unicode (panah dan operator matematika)" + +#: ../rules/base.xml.in.h:948 +msgid "Unicode additions (arrows and math operators; math operators on default level)" +msgstr "Tambahan unicode (panah dan operator matematika; operator matematika pada level baku)" -#. Keyboard indicator for Oriya layouts #: ../rules/base.xml.in.h:949 -msgid "or" -msgstr "or" +msgid "Legacy Wang 724" +msgstr "Legacy Wang 724" + +#: ../rules/base.xml.in.h:950 +msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" +msgstr "Wang 724 keypad dengan tambahan Unicode (panah and operator matematika)" -#. Keyboard indicator for Punjabi layouts #: ../rules/base.xml.in.h:951 -msgid "pa" -msgstr "pa" +msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" +msgstr "Wang 724 keypad dengan tambahan Unicode (panah and operator matematika; operator matematika pada level baku)" + +#: ../rules/base.xml.in.h:952 +msgid "Hexadecimal" +msgstr "Heksadesimal" -#. Keyboard indicator for Filipino layouts #: ../rules/base.xml.in.h:953 -msgid "ph" -msgstr "ph" +msgid "ATM/phone-style" +msgstr "Gaya ATM/telepon" -#. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:955 ../rules/base.extras.xml.in.h:47 -msgid "pl" -msgstr "pl" +#: ../rules/base.xml.in.h:954 +msgid "Numeric keypad delete key behaviour" +msgstr "Keypad numerik menghapus perilaku tombol" -#. Keyboard indicator for Pashto layouts +#: ../rules/base.xml.in.h:955 +msgid "Legacy key with dot" +msgstr "Tombol Legacy dengan titik" + +#. Actually, with KP_SEPARATOR, as the old keypad(comma) #: ../rules/base.xml.in.h:957 -msgid "ps" -msgstr "ps" +msgid "Legacy key with comma" +msgstr "Tombol Legacy dengan koma" + +#: ../rules/base.xml.in.h:958 +msgid "Four-level key with dot" +msgstr "Tombol empat-level dengan titik" -#. Keyboard indicator for Portuguese layouts #: ../rules/base.xml.in.h:959 -msgid "pt" -msgstr "pt" +msgid "Four-level key with dot, Latin-9 only" +msgstr "Tombol empat-level dengan titik, hanya Latin-9" -#. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:961 ../rules/base.extras.xml.in.h:48 -msgid "ro" -msgstr "ro" +#: ../rules/base.xml.in.h:960 +msgid "Four-level key with comma" +msgstr "Tombol empat-level dengan koma" -#. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:963 ../rules/base.extras.xml.in.h:49 -msgid "ru" -msgstr "ru" +#: ../rules/base.xml.in.h:961 +msgid "Four-level key with momayyez" +msgstr "Tombol empat level dengan momayyez" + +#. This assumes the KP_ abstract symbols are actually useful for some apps +#. The description needs to be rewritten +#: ../rules/base.xml.in.h:964 +msgid "Four-level key with abstract separators" +msgstr "Tombol empat-level dengan pemisah abstrak" -#. Keyboard indicator for Sindhi layouts #: ../rules/base.xml.in.h:965 -msgid "sd" -msgstr "sd" +msgid "Semicolon on third level" +msgstr "Titik koma pada level ketiga" + +#: ../rules/base.xml.in.h:966 +msgid "Caps Lock key behavior" +msgstr "Perilaku tombol Caps Lock" -#. Keyboard indicator for Sinhala layouts #: ../rules/base.xml.in.h:967 -msgid "si" -msgstr "si" +msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" +msgstr "Caps Lock menggunakan kapitalisasi internal. Shift \"mengistirahatkan\" Caps Lock" + +#: ../rules/base.xml.in.h:968 +msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" +msgstr "Caps Lock menggunakan kapitalisasi internal. Shift tidak mempengaruhi Caps Lock" -#. Keyboard indicator for Slovak layouts #: ../rules/base.xml.in.h:969 -msgid "sk" -msgstr "sk" +msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" +msgstr "Caps Lock bertindak sebagai Shift dengan penguncian; Shift \"mengistirahatkan\" Caps Lock" + +#: ../rules/base.xml.in.h:970 +msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" +msgstr "Caps Lock bertindak sebagai Shift dengan penguncian; Shift tidak mempengaruhi Caps Lock" -#. Keyboard indicator for Slovenian layouts #: ../rules/base.xml.in.h:971 -msgid "sl" -msgstr "sl" +msgid "Caps Lock toggles normal capitalization of alphabetic characters" +msgstr "Caps Lock mengubah huruf besar normal atau karakter secara alfabetis" + +#: ../rules/base.xml.in.h:972 +msgid "Make Caps Lock an additional Num Lock" +msgstr "Buat Caps Lock sebagai tambahan Num Lock" -#. Keyboard indicator for Albanian layouts #: ../rules/base.xml.in.h:973 -msgid "sq" -msgstr "sq" +msgid "Swap ESC and Caps Lock" +msgstr "Tukar ESC dan Caps Lock" -#. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:975 ../rules/base.extras.xml.in.h:51 -msgid "sr" -msgstr "sr" +#: ../rules/base.xml.in.h:974 +msgid "Make Caps Lock an additional ESC" +msgstr "Buat Caps Lock sebagai tambahan ESC" + +#: ../rules/base.xml.in.h:975 +msgid "Make Caps Lock an additional Backspace" +msgstr "Buat Caps Lock sebagai tambahan Backspace" + +#: ../rules/base.xml.in.h:976 +msgid "Make Caps Lock an additional Super" +msgstr "Buat Caps Lock sebagai tambahan Super" -#. Keyboard indicator for Swedish layouts #: ../rules/base.xml.in.h:977 -msgid "sv" -msgstr "sv" +msgid "Make Caps Lock an additional Hyper" +msgstr "Buat Caps Lock sebagai tambahan Hiper" + +#: ../rules/base.xml.in.h:978 +msgid "Caps Lock toggles ShiftLock (affects all keys)" +msgstr "Caps Lock menjungkitkan ShiftLock (mempengaruhi semua tombol)" -#. Keyboard indicator for Swahili layouts #: ../rules/base.xml.in.h:979 -msgid "sw" -msgstr "sw" +msgid "Caps Lock is disabled" +msgstr "Caps Lock dinonaktifkan" + +#: ../rules/base.xml.in.h:980 +msgid "Make Caps Lock an additional Ctrl" +msgstr "Buat Caps Lock sebagai Ctrl tambahan" -#. Keyboard indicator for Syriac layouts #: ../rules/base.xml.in.h:981 -msgid "syc" -msgstr "syc" +msgid "Alt/Win key behavior" +msgstr "Tindakan Tombol Alt/Win " + +#: ../rules/base.xml.in.h:982 +msgid "Add the standard behavior to Menu key" +msgstr "Tambah tindakan standar pada tombol Menu" -#. Keyboard indicator for Tamil layouts #: ../rules/base.xml.in.h:983 -msgid "ta" -msgstr "ta" +msgid "Alt and Meta are on Alt keys" +msgstr "Alt dan Meta pada tombol Alt" + +#: ../rules/base.xml.in.h:984 +msgid "Alt is mapped to Win keys (and the usual Alt keys)" +msgstr "Alt dipetakan ke tombol Win (dan tombol Alt yang biasa)" -#. Keyboard indicator for Telugu layouts #: ../rules/base.xml.in.h:985 -msgid "te" -msgstr "te" +msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" +msgstr "Ctrl dipetakan ke tombol Win (dan tombol Ctrl yang biasa)" + +#: ../rules/base.xml.in.h:986 +msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" +msgstr "Ctrl dipetakan ke tombol Alt, Alt dipetakan ke tombol Win" -#. Keyboard indicator for Tajik layouts #: ../rules/base.xml.in.h:987 -msgid "tg" -msgstr "tg" +msgid "Meta is mapped to Win keys" +msgstr "Meta dipetakan ke tombol Win" + +#: ../rules/base.xml.in.h:988 +msgid "Meta is mapped to Left Win" +msgstr "Meta dipetakan ke tombol Win Kiri" -#. Keyboard indicator for Thai layouts #: ../rules/base.xml.in.h:989 -msgid "th" -msgstr "th" +msgid "Hyper is mapped to Win-keys" +msgstr "Hiper dipetakan ke tombol Win" + +#: ../rules/base.xml.in.h:990 +msgid "Alt is mapped to Right Win, Super to Menu" +msgstr "Alt dipetakan ke Win Kanan, Super ke Menu" -#. Keyboard indicator for Turkmen layouts #: ../rules/base.xml.in.h:991 -msgid "tk" -msgstr "tk" +msgid "Alt is swapped with Win" +msgstr "Alt ditukar dengan Win" + +#: ../rules/base.xml.in.h:992 +msgid "Position of Compose key" +msgstr "Posisi tombol Compose" -#. Keyboard indicator for Tswana layouts #: ../rules/base.xml.in.h:993 -msgid "tn" -msgstr "tn" +msgid "3rd level of Left Win" +msgstr "Tingkat 3 dari Win Kiri" + +#: ../rules/base.xml.in.h:994 +msgid "3rd level of Right Win" +msgstr "Tingkat 3 dari Win Kanan" -#. Keyboard indicator for Turkish layouts #: ../rules/base.xml.in.h:995 -msgid "tr" -msgstr "tr" +msgid "3rd level of Menu" +msgstr "Tingkat 3 dari Menu" + +#: ../rules/base.xml.in.h:996 +msgid "3rd level of Left Ctrl" +msgstr "Tingkat 3 dari Ctrl Kiri" -#. Keyboard indicator for Ukranian layouts #: ../rules/base.xml.in.h:997 -msgid "uk" -msgstr "uk" +msgid "3rd level of Right Ctrl" +msgstr "Tingkat 3 dari Ctrl Kanan" + +#: ../rules/base.xml.in.h:998 +msgid "3rd level of Caps Lock" +msgstr "Tingkat 3 dari Caps Lock" -#. Keyboard indicator for Urdu layouts #: ../rules/base.xml.in.h:999 -msgid "ur" -msgstr "ur" +msgid "3rd level of <Less/Greater>" +msgstr "Tingkat 3 dari <Lebih Kecil/Lebih Besar>" + +#: ../rules/base.xml.in.h:1000 +msgid "Pause" +msgstr "Pause" -#. Keyboard indicator for Uzbek layouts #: ../rules/base.xml.in.h:1001 -msgid "uz" -msgstr "uz" +msgid "PrtSc" +msgstr "PrtSc" + +#: ../rules/base.xml.in.h:1002 +msgid "Miscellaneous compatibility options" +msgstr "Pilihan kompabilitas lain-lain" -#. Keyboard indicator for Vietnamese layouts #: ../rules/base.xml.in.h:1003 -msgid "vi" -msgstr "vi" +msgid "Default numeric keypad keys" +msgstr "Tombol angka keypad standar" + +#: ../rules/base.xml.in.h:1004 +msgid "Numeric keypad keys always enter digits (as in Mac OS)" +msgstr "Keypad numerik selalu memasukkan digit (seperti dalam Mac OS)" -#. Keyboard indicator for Wolof layouts #: ../rules/base.xml.in.h:1005 -msgid "wo" -msgstr "wo" +msgid "Shift with numeric keypad keys works as in MS Windows" +msgstr "Shit dengan keypad numerik bekerja sesuai pada MS Windows" + +#: ../rules/base.xml.in.h:1006 +msgid "Shift does not cancel Num Lock, chooses 3rd level instead" +msgstr "Shift tidak membatalkan Num Lock, lebih memilih level ketiga" -#. Keyboard indicator for Saisiyat layouts #: ../rules/base.xml.in.h:1007 -msgid "xsy" -msgstr "xsy" +msgid "Special keys (Ctrl+Alt+<key>) handled in a server" +msgstr "Tombol spesial (Ctrl+Alt+<key>) ditangani pada server" + +#: ../rules/base.xml.in.h:1008 +msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" +msgstr "Papan Ketik Aluminium Apple: mengemulasi tombol PC (Print, Scroll_Lock, Pause, Num Lock)" -#. Keyboard indicator for Yoruba layouts #: ../rules/base.xml.in.h:1009 -msgid "yo" -msgstr "yo" +msgid "Shift cancels Caps Lock" +msgstr "Shift membatalkan Caps Lock" + +#: ../rules/base.xml.in.h:1010 +msgid "Enable extra typographic characters" +msgstr "Aktifkan karakter tipografi ekstra" -#. Keyboard indicator for Taiwanese layouts #: ../rules/base.xml.in.h:1011 -msgid "zh" -msgstr "zh" +msgid "Both Shift keys together toggle Caps Lock" +msgstr "Kedua tombol Shift bersamaan menjungkitkan Caps Lock" -#: ../rules/base.extras.xml.in.h:1 -msgid "APL Keyboard Symbols" -msgstr "Simbol Papan Tik APL" +#: ../rules/base.xml.in.h:1012 +msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" +msgstr "Kedua tombol Shift bersamaan mengaktifkan Caps Lock, satu tombol Shift mematikannya" -#: ../rules/base.extras.xml.in.h:3 -msgid "Armenian (OLPC phonetic)" -msgstr "Armenia (fonetik OLPC)" +#: ../rules/base.xml.in.h:1013 +msgid "Both Shift keys together toggle ShiftLock" +msgstr "Kedua tombol Shift bersamaan menjungkitkan ShiftLock" -#: ../rules/base.extras.xml.in.h:4 -msgid "Atsina" -msgstr "Atsina" +#: ../rules/base.xml.in.h:1014 +msgid "Shift + NumLock toggles PointerKeys" +msgstr "Shift + NumLock menjungkitkan PointerKeys" + +#: ../rules/base.xml.in.h:1015 +msgid "Allow breaking grabs with keyboard actions (warning: security risk)" +msgstr "Izinkan memecah genggaman dengan aksi papan tik (peringatan: resiko keamanan)" + +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Izinkan pencatatan genggaman dan pohon jendela" + +#: ../rules/base.xml.in.h:1017 +msgid "Adding currency signs to certain keys" +msgstr "Menambahkan tanda mata uang ke tombol tertentu" + +#: ../rules/base.xml.in.h:1018 +msgid "Euro on E" +msgstr "Euro pada E" + +#: ../rules/base.xml.in.h:1019 +msgid "Euro on 2" +msgstr "Euro pada 2" + +#: ../rules/base.xml.in.h:1020 +msgid "Euro on 4" +msgstr "Euro pada 4" + +#: ../rules/base.xml.in.h:1021 +msgid "Euro on 5" +msgstr "Euro pada 5" + +#: ../rules/base.xml.in.h:1022 +msgid "Rupee on 4" +msgstr "Rupee pada 4" + +#: ../rules/base.xml.in.h:1023 +msgid "Key to choose 5th level" +msgstr "Tombol untuk memilih level kelima" + +#: ../rules/base.xml.in.h:1024 +msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "<Lebih Kecil/Lebih Besar> pilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" + +#: ../rules/base.xml.in.h:1025 +msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Alt kanan memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" + +#: ../rules/base.xml.in.h:1026 +msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Win kiri memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima lainnya" + +#: ../rules/base.xml.in.h:1027 +msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" +msgstr "Win kanan memilih level kelima, terkunci jika ditekan bersamaan dengan pemilih-level-kelima" + +#: ../rules/base.xml.in.h:1028 +msgid "Using space key to input non-breakable space character" +msgstr "Menggunakan spasi untuk input karakter spasi yang tidak pecah" + +#: ../rules/base.xml.in.h:1029 +msgid "Usual space at any level" +msgstr "Tombol spasi biasa pada semua level" + +#: ../rules/base.xml.in.h:1030 +msgid "Non-breakable space character at second level" +msgstr "Karakter spasi yang tidak pecah pada level 2" + +#: ../rules/base.xml.in.h:1031 +msgid "Non-breakable space character at third level" +msgstr "Karakter spasi yang tidak pecah pada level 3" + +#: ../rules/base.xml.in.h:1032 +msgid "Non-breakable space character at third level, nothing at fourth level" +msgstr "Karakter spasi yang tidak pecah pada level 3, tidak ada pada level 4" + +#: ../rules/base.xml.in.h:1033 +msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" +msgstr "Karakter spasi yang tidak pecah pada level 3, karakter spasi yang tidak pecah dan tipis pada level 4" + +#: ../rules/base.xml.in.h:1034 +msgid "Non-breakable space character at fourth level" +msgstr "Karakter spasi yang tidak pecah pada level 4" + +#: ../rules/base.xml.in.h:1035 +msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" +msgstr "Karakter spasi yang tidak pecah pada level 4, karakter spasi yang tidak pecah dan tipis pada level 6" + +#: ../rules/base.xml.in.h:1036 +msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" +msgstr "Karakter spasi yang tidak pecah pada level 4, karakter spasi yang tidak pecah dan tipis pada level 6 (via Ctrl+Shift)" + +#: ../rules/base.xml.in.h:1037 +msgid "Zero-width non-joiner character at second level" +msgstr "Karakter non-penggabung lebar-nol pada level kedua" + +#: ../rules/base.xml.in.h:1038 +msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" +msgstr "Karakter non-penggabung lebar nol pada level kedua, karakter penggabung lebar-nol pada level ketiga" + +#: ../rules/base.xml.in.h:1039 +msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" +msgstr "Karakter non-penggabung pada level kedua, karakter penggabung lebar-nol pada level ketiga, karakter spasi non-dilepaskan pada level keempat" + +#: ../rules/base.xml.in.h:1040 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" +msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga" + +#: ../rules/base.xml.in.h:1041 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" +msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga, tak ada di level keempat" + +#: ../rules/base.xml.in.h:1042 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" +msgstr "Karakter non-penggabung lebar-nol pada level kedua, karakter spasi non-dilepaskan pada level ketiga, penggabung lebar-nol pada level keempat" + +#: ../rules/base.xml.in.h:1043 +msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" +msgstr "Karakter non-penggabung lebar-nol pada level ketiga, karakter spasi non-dilepaskan pada level ketiga, spasi non-dilepaskan tipis pada level keempat" + +#: ../rules/base.xml.in.h:1044 +msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" +msgstr "Karakter non-penggabung lebar-nol pada level ketiga, penggabung lebar-nol pada level keempat" + +#: ../rules/base.xml.in.h:1045 +msgid "Japanese keyboard options" +msgstr "Pilihan papan ketik Jepang" + +#: ../rules/base.xml.in.h:1046 +msgid "Kana Lock key is locking" +msgstr "Tombol Kana Lock terkunci" + +#: ../rules/base.xml.in.h:1047 +msgid "NICOLA-F style Backspace" +msgstr "NICOLA-F style Backspace" + +#: ../rules/base.xml.in.h:1048 +msgid "Make Zenkaku Hankaku an additional ESC" +msgstr "Buat Zenkaku Hankaku sebagai tambahan ESC" + +#: ../rules/base.xml.in.h:1049 +msgid "Adding Esperanto supersigned letters" +msgstr "Menambah huruf supersigned Esperanto" + +#: ../rules/base.xml.in.h:1050 +msgid "To the corresponding key in a Qwerty layout" +msgstr "Ke tombol terkait dalam tata letak Qwerty" + +#: ../rules/base.xml.in.h:1051 +msgid "To the corresponding key in a Dvorak layout" +msgstr "Ke tombol terkait dalam tata letak Dvorak" + +#: ../rules/base.xml.in.h:1052 +msgid "To the corresponding key in a Colemak layout" +msgstr "Ke tombol terkait dalam tata letak Colemak" + +#: ../rules/base.xml.in.h:1053 +msgid "Maintain key compatibility with old Solaris keycodes" +msgstr "Memelihara kompatibilitas tombol dengan kode tombol Solaris tua" + +#: ../rules/base.xml.in.h:1054 +msgid "Sun Key compatibility" +msgstr "Kompatibilitas Tombol Sun" + +#: ../rules/base.xml.in.h:1055 +msgid "Key sequence to kill the X server" +msgstr "Sekuensi kunci untuk mematikan server X" + +#: ../rules/base.xml.in.h:1056 +msgid "Ctrl + Alt + Backspace" +msgstr "Ctrl + Alt + Backspace" + +#: ../rules/base.extras.xml.in.h:1 +msgid "apl" +msgstr "apl" + +#: ../rules/base.extras.xml.in.h:2 +msgid "APL keyboard symbols" +msgstr "Simbol papan tik APL" #: ../rules/base.extras.xml.in.h:5 -msgid "Avestan" -msgstr "Avestan" +msgid "kut" +msgstr "kut" #: ../rules/base.extras.xml.in.h:6 -msgid "Couer D'alene Salish" -msgstr "Couer D'alene Salish" +msgid "Kutenai" +msgstr "Kutenai" #: ../rules/base.extras.xml.in.h:7 -msgid "Crimean Tatar (Dobruja Q)" -msgstr "Tatar Krimea (Dobruja Q)" +msgid "shs" +msgstr "shs" -#: ../rules/base.extras.xml.in.h:9 -msgid "English (US, international AltGr Unicode combining)" -msgstr "Inggris (AS, internasional AltGr menggabungkan Unicode)" +#: ../rules/base.extras.xml.in.h:8 +msgid "Secwepemctsin" +msgstr "Secwepemctsin" -#: ../rules/base.extras.xml.in.h:10 -msgid "English (US, international AltGr Unicode combining, alternative)" -msgstr "Inggris (AS, internasional (AltGr menggabungkan Unicode, alternatif)" +#: ../rules/base.extras.xml.in.h:9 +msgid "Multilingual (Canada, Sun Type 6/7)" +msgstr "Multibahasa (Kanada, Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:13 +#: ../rules/base.extras.xml.in.h:12 msgid "German (US keyboard with German letters)" msgstr "Jerman (papan tik AS dengan huruf Jerman)" -#: ../rules/base.extras.xml.in.h:14 +#: ../rules/base.extras.xml.in.h:13 msgid "German (with Hungarian letters and no dead keys)" msgstr "Jerman (dengan huruf Hungaria dan tanpa tombol mati)" -#: ../rules/base.extras.xml.in.h:15 -msgid "Kutenai" -msgstr "Kutenai" +#: ../rules/base.extras.xml.in.h:14 +msgid "German (Sun Type 6/7)" +msgstr "Jerman (Sun Tipe 6/7)" #: ../rules/base.extras.xml.in.h:17 -msgid "Latvian (US Colemak)" -msgstr "Latvia (Colemak AS)" +msgid "Avestan" +msgstr "Avestan" -#: ../rules/base.extras.xml.in.h:18 -msgid "Latvian (US Colemak, apostrophe variant)" -msgstr "Latvia (Colemak AS, varian apostrop)" +#: ../rules/base.extras.xml.in.h:20 +msgid "Lithuanian (US Dvorak with Lithuanian letters)" +msgstr "Lituania (Dvorak AS dengan huruf Lituania)" + +#: ../rules/base.extras.xml.in.h:21 +msgid "Lithuanian (Sun Type 6/7)" +msgstr "Lithuania (Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:19 +#: ../rules/base.extras.xml.in.h:24 msgid "Latvian (US Dvorak)" msgstr "Latvia (Dvorak AS)" -#: ../rules/base.extras.xml.in.h:20 +#: ../rules/base.extras.xml.in.h:25 msgid "Latvian (US Dvorak, Y variant)" msgstr "Latvia (Dvorak AS, varian Y)" -#: ../rules/base.extras.xml.in.h:21 +#: ../rules/base.extras.xml.in.h:26 msgid "Latvian (US Dvorak, minus variant)" msgstr "Latvia (Dvorak AS, tanpa varian)" -#: ../rules/base.extras.xml.in.h:22 +#: ../rules/base.extras.xml.in.h:27 msgid "Latvian (programmer US Dvorak)" msgstr "Latvia (Dvorak AS pemrogram)" -#: ../rules/base.extras.xml.in.h:23 +#: ../rules/base.extras.xml.in.h:28 msgid "Latvian (programmer US Dvorak, Y variant)" msgstr "Latvia (Dvorak AS pemrogram, varian Y)" -#: ../rules/base.extras.xml.in.h:24 +#: ../rules/base.extras.xml.in.h:29 msgid "Latvian (programmer US Dvorak, minus variant)" msgstr "Latvia (Dvorak AS pemrogram, tanpa varian)" -#: ../rules/base.extras.xml.in.h:26 -msgid "Lithuanian (US Dvorak with Lithuanian letters)" -msgstr "Lituania (Dvorak AS dengan huruf Lituania)" +#: ../rules/base.extras.xml.in.h:30 +msgid "Latvian (US Colemak)" +msgstr "Latvia (Colemak AS)" -#: ../rules/base.extras.xml.in.h:29 +#: ../rules/base.extras.xml.in.h:31 +msgid "Latvian (US Colemak, apostrophe variant)" +msgstr "Latvia (Colemak AS, varian apostrop)" + +#: ../rules/base.extras.xml.in.h:32 +msgid "Latvian (Sun Type 6/7)" +msgstr "Latvia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:35 +msgid "English (US, international AltGr Unicode combining)" +msgstr "Inggris (AS, internasional AltGr menggabungkan Unicode)" + +#: ../rules/base.extras.xml.in.h:36 +msgid "English (US, international AltGr Unicode combining, alternative)" +msgstr "Inggris (AS, internasional (AltGr menggabungkan Unicode, alternatif)" + +#: ../rules/base.extras.xml.in.h:37 +msgid "Atsina" +msgstr "Atsina" + +#: ../rules/base.extras.xml.in.h:38 +msgid "Coeur d'Alene Salish" +msgstr "Couer d'Alene Salish" + +#: ../rules/base.extras.xml.in.h:39 +msgid "English (US, Sun Type 6/7)" +msgstr "Inggris (AS, Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Inggris (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polandia (internasional dengan tombol mati)" -#: ../rules/base.extras.xml.in.h:31 +#: ../rules/base.extras.xml.in.h:44 +msgid "Polish (Colemak)" +msgstr "Polandia (Colemak)" + +#: ../rules/base.extras.xml.in.h:45 +msgid "Polish (Sun Type 6/7)" +msgstr "Polandia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:49 +msgid "Crimean Tatar (Dobruja Q)" +msgstr "Tatar Krimea (Dobruja Q)" + +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumania (Touchtype ergonomis)" -#: ../rules/base.extras.xml.in.h:33 +#: ../rules/base.extras.xml.in.h:51 +msgid "Romanian (Sun Type 6/7)" +msgstr "Rumania (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:54 +msgid "Serbian (combining accents instead of dead keys)" +msgstr "Serbia (menggabungkan aksen ketimbang tombol mati)" + +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russia (dengan tata letak Ukraina-Belarusia)" -#: ../rules/base.extras.xml.in.h:34 -msgid "Secwepemctsin" -msgstr "Secwepemctsin" +#: ../rules/base.extras.xml.in.h:58 +msgid "Russian (Sun Type 6/7)" +msgstr "Rusia (Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:35 -msgid "Serbian" -msgstr "Serbia" +#: ../rules/base.extras.xml.in.h:61 +msgid "Armenian (OLPC phonetic)" +msgstr "Armenia (fonetik OLPC)" -#: ../rules/base.extras.xml.in.h:36 -msgid "Serbian (combining accents instead of dead keys)" -msgstr "Serbia (menggabungkan aksen ketimbang tombol mati)" +#: ../rules/base.extras.xml.in.h:64 +msgid "Hebrew (Biblical, SIL phonetic)" +msgstr "Ibrani (Biblical, fonetik SIL)" -#: ../rules/base.extras.xml.in.h:37 -msgid "apl" -msgstr "apl" +#: ../rules/base.extras.xml.in.h:67 +msgid "Arabic (Sun Type 6/7)" +msgstr "Arab (Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:44 -msgid "kut" -msgstr "kut" +#: ../rules/base.extras.xml.in.h:70 +msgid "Belgian (Sun Type 6/7)" +msgstr "Belgia (Sun Tipe 6/7)" -#: ../rules/base.extras.xml.in.h:50 -msgid "shs" -msgstr "shs" +#: ../rules/base.extras.xml.in.h:73 +msgid "Portuguese (Brazil, Sun Type 6/7)" +msgstr "Portugis (Brasil, Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:76 +msgid "Czech (Sun Type 6/7)" +msgstr "Ceko (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:79 +msgid "Danish (Sun Type 6/7)" +msgstr "Denmark (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:82 +msgid "Dutch (Sun Type 6/7)" +msgstr "Belanda (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:85 +msgid "Estonian (Sun Type 6/7)" +msgstr "Estonia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:88 +msgid "Finnish (Sun Type 6/7)" +msgstr "Finlandia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:90 +msgid "French (Sun Type 6/7)" +msgstr "Perancis (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:93 +msgid "Greek (Sun Type 6/7)" +msgstr "Yunani (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:96 +msgid "Italian (Sun Type 6/7)" +msgstr "Italia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:99 +msgid "Japanese (Sun Type 6)" +msgstr "Jepang (Sun Tipe 6)" + +#: ../rules/base.extras.xml.in.h:100 +msgid "Japanese (Sun Type 7 - pc compatible)" +msgstr "Jepang (Sun Tipe 7 - kompatibel pc)" + +#: ../rules/base.extras.xml.in.h:101 +msgid "Japanese (Sun Type 7 - sun compatible)" +msgstr "Jepang (Sun Tipe 7 - kompatibel sun)" + +#: ../rules/base.extras.xml.in.h:104 +msgid "Norwegian (Sun Type 6/7)" +msgstr "Norwegia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:106 +msgid "Portuguese (Sun Type 6/7)" +msgstr "Portugis (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:109 +msgid "Slovak (Sun Type 6/7)" +msgstr "Slowakia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:112 +msgid "Spanish (Sun Type 6/7)" +msgstr "Spanyol (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:115 +msgid "Swedish (Sun Type 6/7)" +msgstr "Swedia (Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:117 +msgid "German (Switzerland, Sun Type 6/7)" +msgstr "Jerman (Swiss, Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:118 +msgid "French (Switzerland, Sun Type 6/7)" +msgstr "Perancis (Swiss, Sun Tipe 6/7)" + +#: ../rules/base.extras.xml.in.h:121 +msgid "Turkish (Sun Type 6/7)" +msgstr "Turki (Sun Tipe 6/7)" -#~ msgid "German (qwerty)" -#~ msgstr "Jerman (qwerty)" +#: ../rules/base.extras.xml.in.h:124 +msgid "Ukrainian (Sun Type 6/7)" +msgstr "Ukraina (Sun Tipe 6/7)" -#~ msgid "Japanese (Dvorak)" -#~ msgstr "Jepang (Dvorak)" +#: ../rules/base.extras.xml.in.h:126 +msgid "English (UK, Sun Type 6/7)" +msgstr "Inggris (UK, Sun Tipe 6/7)" -#~ msgid "Allow breaking grabs with keyboard actions (warning: security risk)" -#~ msgstr "Ijinkan memecah genggaman dengan aksi papan tik (peringatan: resiko keamanan)" +#: ../rules/base.extras.xml.in.h:129 +msgid "Korean (Sun Type 6/7)" +msgstr "Korea (Sun Type 6/7)" -#~ msgid "Hebrew (Biblical SIL)" -#~ msgstr "Ibrani (SIL Biblical)" +#~ msgid "Bengali" +#~ msgstr "Bengali" -#~ msgid "Biblical SIL phonetic" -#~ msgstr "Fonetik SIL Biblical" +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Portugis (Brasil, nativo untuk Esperanto)" diff --git a/xorg-server/xkeyboard-config/po/nl.po b/xorg-server/xkeyboard-config/po/nl.po index b85b6e609..61ee5012f 100644 --- a/xorg-server/xkeyboard-config/po/nl.po +++ b/xorg-server/xkeyboard-config/po/nl.po @@ -1,12 +1,13 @@ # Dutch translations for xkeyboard-config. -# Copyright (C) 2013 Free Software Foundation, Inc. +# Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the xkeyboard-config package. # -# Three trains, two busses, one good shake. +# “There's a big gang of penguins closing in, +# with a mean look in their eyes...” # # Taco Witte <tcwitte@cs.uu.nl>, 2003, 2004, 2005, 2006. # Tino Meinen <tino.meinen@gmail.com>, 2007, 2008, 2009, 2011, 2012. -# Benno Schulenberg <benno@vertaalt.nl>, 2013. +# Benno Schulenberg <benno@vertaalt.nl>, 2013, 2014. # ------------------------------------------------------------------------------ # *** Vocabulair *** # Caps Lock - CapsLock (vergrendelt Shift alleen voor lettertoetsen) @@ -31,10 +32,10 @@ # ------------------------------------------------------------------------------ msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-15 09:44+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 14:15+0100\n" "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" "Language: nl\n" @@ -845,7 +846,7 @@ msgid "English (programmer Dvorak)" msgstr "Engels (programmeer-Dvorak)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -869,6 +870,7 @@ msgstr "Engels (de delen-/vermenigvuldigen-toetsen schakelen de indeling)" msgid "Serbo-Croatian (US)" msgstr "Servo-Kroatisch (US)" +# "Workman" is een toetsenbordindeling. #: ../rules/base.xml.in.h:209 msgid "English (Workman)" msgstr "Engels (Workman)" @@ -917,11 +919,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Oezbeeks (Afghanistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabisch" @@ -959,11 +961,11 @@ msgid "Albanian" msgstr "Albanees" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armeens" @@ -1039,11 +1041,11 @@ msgid "Belarusian (Latin)" msgstr "Wit-Russisch (Latijns)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belgisch" @@ -1075,17 +1077,17 @@ msgstr "Belgisch (Sun dode toetsen)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belgisch (Wang model 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengaals" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengaals (Probhat)" #. Keyboard indicator for Indian layouts @@ -1098,27 +1100,28 @@ msgid "Indian" msgstr "Indisch" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengaals (India)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengaals (India, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengaals (India, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengaals (India, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengaals (India, Uni Gitanjali)" +# "Baishakhi Inscript" is een toetsenbordindeling. #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengaals (India, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1307,11 +1310,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bosnisch (US-toetsenbord met Bosnische lettertekens)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugees (Brazilië)" @@ -1323,17 +1326,18 @@ msgstr "Portugees (Brazilië, zonder dode toetsen)" msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugees (Brazilië, Dvorak)" +# Nativo is een soort indeling, net als Dvorak en Colemak. #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Portugees (Brazilië, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Portugees (Brazilië, Nativo voor US-toetsenborden)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugees (Brazilië, Nativo voor Esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brazilië, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1487,364 +1491,368 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibetaans (met ASCII-cijfers)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Oeigoers" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Kroatisch" # Guillemets of ook quillemets zijn Franse aanhalingstekens. # Dit is de "Nederlandse" en dit is de «Franse manier» van aanhalen. -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Kroatisch (met Franse aanhalingstekens)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Kroatisch (met Kroatische digrafen)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Kroatisch (US-toetsenbord met Kroatische digrafen)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Kroatisch (US-toetsenbord met Kroatische lettertekens)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tsjechisch" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tsjechisch (met <\\|>-toets)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tsjechisch (qwerty)" # XXX brede backslash/uitgebreide backslash -- wat is dit? -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tsjechisch (qwerty, brede backslash-toets)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tsjechisch (UCW-indeling, alleen lettertekens met accenten)" # XXX CZ? -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tsjechisch (US Dvorak met Tsjechische UCW-ondersteuning)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Deens" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Deens (zonder dode toetsen)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Deens (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Deens (Macintosh, zonder dode toetsen)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Deens (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Nederlands" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Nederlands (Sun dode toetsen)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Nederlands (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Nederlands (standaard)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" # Dzongkha is een taal die is afgeleid van het oud-Tibetaans. -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" # Estisch, de taal die ook Estlands of Ests wordt genoemd, # heeft ongeveer 1 miljoen sprekers. -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estisch" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estisch (zonder dode toetsen)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estisch (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estisch (US-toetsenbord met Estische lettertekens)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persisch" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persisch (met Persisch cijferblok)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Koerdisch (Iran, Latijns Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Koerdisch (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Koerdisch (Iran, Latijns Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Koerdisch (Iran, Arabisch-Latijns)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Irakees" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Koerdisch (Irak, Latijns Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Koerdisch (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Koerdisch (Irak, Latijns Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Koerdisch (Irak, Arabisch-Latijns)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Faeröers" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Faeröers (zonder dode toetsen)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Fins" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Fins (klassiek)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Fins (klassiek, zonder dode toetsen)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Noord-Samisch (Finland)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Fins (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Frans" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Frans (zonder dode toetsen)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Frans (Sun dode toetsen)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Frans (alternatief)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Frans (alternatief, enkel Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Frans (alternatief, zonder dode toetsen)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Frans (alternatief, Sun dode toetsen)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Frans (historisch, alternatief)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Frans (historisch, alternatief, zonder dode toetsen)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Frans (historisch, alternatief, Sun dode toetsen)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Frans (Bepo, ergonomisch, op Dvorak-wijze)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Frans (Bepo, ergonomisch, Dvorak-wijze, enkel Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Frans (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Frans (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Frans (Bretons)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occitaans" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Georgisch (Frankrijk, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Engels (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Engels (Ghana, meertalig)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akaans" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Engels (Ghana, GILLBT)" @@ -1852,800 +1860,800 @@ msgstr "Engels (Ghana, GILLBT)" # de Republiek Guinee, is grondwettelijk een presidentiële republiek in # West-Afrika, gelegen aan de Atlantische Oceaan tussen Guinee-Bissau en # Sierra Leone. De hoofdstad is Conakry. -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Frans (Guinee)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgisch" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgisch (ergonomisch)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgisch (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russisch (Georgisch)" # Russisch (Georgisch) -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Ossetisch (Georgië)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Duits" # acute - aigu (bijv. á) -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Duits (dode aigu)" # grave (bijv: à) -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Duits (dode grave en aigu)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Duits (zonder dode toetsen)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Duits (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Roemeens (Duitsland)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Roemeens (Duitsland, zonder dode toetsen)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Duits (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Duits (Sun dode toetsen)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Duits (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Duits (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Duits (Macintosh, zonder dode toetsen)" # Het Nedersorbisch is de noordelijke versie van de in Brandenburg # gesproken Sorbische taal. # http://nl.wikipedia.org/wiki/Nedersorbisch -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Nedersorbisch" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Nedersorbisch (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Duits (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russisch (Duitsland, fonetisch)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Duits (historisch)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grieks" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grieks (eenvoudig)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grieks (uitgebreid)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grieks (zonder dode toetsen)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grieks (meertonig)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Hongaars" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Hongaars (standaard)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Hongaars (zonder dode toetsen)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Hongaars (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Hongaars (101/qwertz/komma/dode toetsen)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Hongaars (101/qwertz/komma/zonder dode toetsen)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Hongaars (101/qwertz/punt/dode toetsen)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Hongaars (101/qwertz/punt/zonder dode toetsen)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Hongaars (101/qwerty/komma/dode toetsen)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Hongaars (101/qwerty/komma/zonder dode toetsen)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Hongaars (101/qwerty/punt/dode toetsen)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Hongaars (101/qwerty/punt/zonder dode toetsen)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Hongaars (102/qwertz/komma/dode toetsen)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Hongaars (102/qwertz/komma/zonder dode toetsen)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Hongaars (102/qwertz/punt/dode toetsen)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Hongaars (102/qwertz/punt/zonder dode toetsen)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Hongaars (102/qwerty/komma/dode toetsen)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Hongaars (102/qwerty/komma/zonder dode toetsen)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Hongaars (102/qwerty/punt/dode toetsen)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Hongaars (102/qwerty/punt/zonder dode toetsen)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "IJslands" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "IJslands (Sun dode toetsen)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "IJslands (zonder dode toetsen)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "IJslands (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "IJslands (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebreeuws" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebreeuws (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebreeuws (fonetisch)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebreeuws (Bijbels, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italiaans" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italiaans (zonder dode toetsen)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italiaans (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italiaans (US-toetsenbord met Italiaanse lettertekens)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgisch (Italië)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italiaans (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japans" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japans (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japans (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japans (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japans (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japans (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgizisch" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgizisch (fonetisch)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmer (Cambodja)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazachstaans" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russisch (Kazachstans, met Kazachstaans)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazachstaans (met Russisch)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Lao" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Lao (STEA voorgestelde standaard indeling)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Spaans (Latijns-Amerika)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Spaans (Latijns-Amerika, zonder dode toetsen)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Spaans (Latijns-Amerika, met dode tilde)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Spaans (Latijns-Amerika, Sun dode toetsen)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litouws" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litouws (standaard)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litouws (US-toetsenbord met Litouwse lettertekens)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litouws (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litouws (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litouws (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Lets" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Lets (apostrof-variant)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Lets (tilde-variant)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Lets (F-variant)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Lets (modern)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Lets (ergonomisch, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Lets (aangepast)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" # Montenegrijns is het Servo-Kroatische (Štokavische) dialect # dat in Montenegro wordt gesproken. -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrijns" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrijns (Cyrillisch)" # verwisseld/gewisseld/omgewisseld -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrijns (Cyrillisch, Z en ZHE omgewisseld)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrijns (Latijns Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrijns (Latijns qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrijns (Latijns Unicode qwerty)" # Guillemets (of ook quillemets) zijn Franse aanhalingstekens. # Voorbeeld: "Nederlandse" en «Franse manier» van aanhalen. -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrijns (Cyrillisch met Franse aanhalingstekens)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrijns (Latijns met Franse aanhalingstekens)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedonisch" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedonisch (zonder dode toetsen)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltees" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltees (met US-indeling)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongools" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Noors" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Noors (zonder dode toetsen)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Noors (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Noord-Samisch (Noorwegen)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Noord-Samisch (Noorwegen, zonder dode toetsen)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Noors (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Noors (Macintosh, zonder dode toetsen)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Noors (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Pools" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Pools (historisch)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Pools (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Pools (Dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Pools (Dvorak, Poolse aanhalingstekens op aanhalingstekentoets)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Pools (Dvorak, Poolse aanhalingstekens op toets 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kasjoebisch" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russisch (Polen, fonetisch Dvorak)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Pools (programmeer-Dvorak)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugees" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugees (zonder dode toetsen)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugees (Sun dode toetsen)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugees (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugees (Macintosh, zonder dode toetsen)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugees (Macintosh, Sun dode toetsen)" # Nativo is een soort indeling, net als Dvorak en Colemak. -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Portugees (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugees (Nativo voor US-toetsenborden)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Roemeens" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Roemeens (cedilla)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Roemeens (standaard)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Roemeens (standaard cedilla)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Roemeens (Windows-toetsen)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russisch" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russisch (fonetisch)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russisch (fonetisch, Windows-toetsen)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russisch (typmachine)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russisch (historisch)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russisch (typmachine, historisch)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatar" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Ossetisch (historisch)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Ossetisch (Windows-toetsen)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Tsjoevasjisch" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Tsjoevasjisch (Latijns)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurts" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" # Het Jakoets is een Turkse taal met ongeveer 360 duizend sprekers. -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakoets" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russisch (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russisch (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Servisch (Rusland)" # Het Basjkiers is een Turkse taal, voornamelijk gesproken door de Basjkieren. -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Basjkiers" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Servisch" # verwisseld/gewisseld/omgewisseld -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Servisch (Cyrillisch, Z en ZHE omgewisseld)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Servisch (Latijns)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Servisch (Latijns Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Servisch (Latijns qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Servisch (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:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Servisch (Cyrillisch met Franse aanhalingstekens)" # Guillemets of ook quillemets zijn Franse aanhalingstekens. # Dit is "Nederlands" en dit is de «Franse manier» van aanhalen. -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Servisch (Latijns met Franse aanhalingstekens)" @@ -2654,764 +2662,764 @@ msgstr "Servisch (Latijns met Franse aanhalingstekens)" # 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:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannonisch Rusyn (homophonisch)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannonisch Rusyn" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Sloveens" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Sloveens (met Franse aanhalingstekens voor citaten)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Sloveens (US-toetsenbord met Sloveense lettertekens)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Slowaaks" # XXX brede backslash/uitgebreide backslash -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Slowaaks (brede backslash-toets)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Slowaaks (qwerty)" # XXX brede backslash/uitgebreide backslash -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Slowaaks (qwerty, brede backslash-toets)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Spaans" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Spaans (zonder dode toetsen)" # inactieve/dode/latente -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Spaans (met dode tilde)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Spaans (Sun dode toetsen)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Spaans (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturisch (Spanje, met onderpunts H en onderpunts L)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Catalaans (Spanje, met middenpunts L)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Spaans (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Zweeds" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Zweeds (zonder dode toetsen)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Zweeds (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russisch (Zweden, fonetisch)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russisch (Zweden, fonetisch, zonder dode toetsen)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Noord-Samisch (Zweden)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Zweeds (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Zweeds (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Zweedse gebarentaal" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Duits (Zwitserland)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Duits (Zwitserland, historisch)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Duits (Zwitserland, zonder dode toetsen)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Duits (Zwitserland, Sun dode toetsen)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Frans (Zwitserland)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Frans (Zwitserland, zonder dode toetsen)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Frans (Zwitserland, Sun dode toetsen)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Frans (Zwitserland, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Duits (Zwitserland, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabisch (Syrië)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syrisch" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syrisch (fonetisch)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Koerdisch (Syrië, Latijns Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Koerdisch (Syrië, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Koerdisch (Syrië, Latijns Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" # Het Tadzjieks of Tajiki. -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadzjieks" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadzjieks (historisch)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Singalees (fonetisch)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamil (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamil (Sri Lanka, TAB-typmachine)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" # Het Thai is de officiële taal van Thailand. -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Thai" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Thai (TIS-820.2538)" # Pattachote en Kedmanee zijn de twee toetsenbordindelingen voor Thai. -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Thai (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turks" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turks (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turks (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turks (Sun dode toetsen)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Koerdisch (Turks, Latijns Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Koerdisch (Turks, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Koerdisch (Turks, Latijns Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turks (internationaal, met dode toetsen)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krim-Tataars (Turks Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krim-Tataars (Turks F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krim-Tataars (Turks Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanees" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanees (oorspronkelijk)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" # Saisiyat, ook Saiset, Seisirat, Saisett, Saisiat, Saisiett, Saisirat, # Saisyet, Saisyett, Amutoura of Bouiok. -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Oekraïens" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Oekraïens (fonetisch)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Oekraïens (typmachine)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Oekraïens (Windows-toetsen)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Oekraïens (historisch)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Oekraïens (standaard RSTU)" # Oekraïens (standaard RSTU). -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russisch (Oekraïne, standaard RSTU)" # 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:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Oekraïens (homophonisch)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Engels (UK)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Engels (UK, uitgebreid Windows-toetsen)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Engels (UK, internationaal, met dode toetsen)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Engels (UK, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Engels (UK, Dvorak met UK-leestekens)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Engels (UK, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Engels (UK, Macintosh internationaal)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Engels (UK, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Oezbeeks" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Oezbeeks (Latijns)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Viëtnamees" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreaans" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreaans (101/104-toetsen compatibel)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japans (PC-98xx serie)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Iers" # Iers. -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Iers (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogham" # Iers (Ogham IS434). -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" # Het Urdu, vroeger door Westerse taalkundigen vaak Hindoestani genoemd, # is de officiële taal van Pakistan. -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabisch (Pakistan)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Engels (Zuid-Afrika)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (puntkomma en aanhalingsteken op afwijkende plek, historisch)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalees" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Engels (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" # Het Yoruba is een Afrikaanse taal. Het is de taal van de Yoruba # en wordt gesproken in Nigeria, Benin en Togo. -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Yoruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" # Het Amhaars is een Semitische taal die in Ethiopië gesproken wordt. -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amhaars" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (linkerhand)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (rechterhand)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmeens" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmeens (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" # Bambara, ook bekend onder de naam Bamanankan, is een Mande-taal die door meer # dan zes miljoen mensen gesproken wordt, voornamelijk in Mali. -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Frans (Mali, alternatief)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Engels (Mali, US Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Engels (Mali, US internationaal)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Swahili (Tanzania)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Swahili (Kenia)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" # Tswana of Setswana is een Bantoetaal die wordt gesproken in Botswana. # Andere benamingen voor Tswana zijn onder meer Sechuana en Beetjuans. -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" # Het Filipijns (Filipino of Pilipino). -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipijns" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipijns (QWERTY Baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipijns (Capewell-Dvorak Latijns)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipijns (Capewell-Dvorak Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipijns (Capewell-QWERF 2006 Latijns)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipijns (Capewell-QWERF 2006 Baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipijns (Colemak Latijns)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipijns (Colemak Baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipijns (Dvorak Latijns)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipijns (Dvorak Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldavisch" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldavisch (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Overschakelen naar een andere indeling" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Rechter Alt-toets (ingedrukt gehouden)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Linker Alt-toets (ingedrukt gehouden)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Linker Windows-toets (ingedrukt gehouden)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Rechter Windows-toets (ingedrukt gehouden)" # Beide Win-toetsen wisselen de indeling gedurende het indrukken. -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Elke Windows-toets (ingedrukt gehouden)" # XXX -- what IS original capslock action? -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" msgstr "CapsLock (ingedrukt gehouden); Alt+CapsLock geeft de oorspronkelijke caps-lock actie" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Rechter Ctrl-toets (ingedrukt gehouden)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Rechter Alt-toets" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Linker Alt-toets" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "CapsLock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift + CapsLock" # CapsLock wisselt naar de eerste indeling, Shift+CapsLock wisselt naar de laatste indeling. -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "CapsLock (naar eerste indeling), Shift+CapsLock (naar laatste indeling)" # Linker Win-toets wisselt naar de eerste indeling, rechter Win/Menu-toets wisselt naar de laatste indeling. -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Linker Windows-toets (naar eerste indeling), rechter Windows/Menu-toets (naar laatste indeling)" # Linker Win-toets wisselt naar de eerste indeling, rechter Win/Menu-toets wisselt naar de laatste indeling. -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Linker Ctrl-toets (naar eerste indeling), rechter Ctrl-toets (naar laatste indeling)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt + CapsLock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Beide Shift-toetsen samen" @@ -3419,554 +3427,570 @@ msgstr "Beide Shift-toetsen samen" # "Beide Alt-toetsen samen verandert de groep." # # tezamen/samen/tegelijk -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Beide Alt-toetsen samen" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Beide Ctrl-toetsen samen" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl + Shift" # Linker Ctrl + Shift-toets -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Linker Ctrl + linker Shift-toets" # Rechter Ctrl + Shift-toets -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Rechter Ctrl + rechter Shift-toets" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt + Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt + Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Linker Alt + linker Shift-toets" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt + Spatie" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Linker Windows-toets" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Rechter Windows-toets" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Linker Shift-toets" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Rechter Shift-toets" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Linker Ctrl-toets" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Rechter Ctrl-toets" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll-Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Linker Ctrl + linker Windows-toets (naar eerste indeling), rechter Ctrl + Menu-toets (naar tweede indeling)" # aan te zetten/te kiezen/te selecteren/te krijgen/te bereiken # 'to choose' is hier een slechte woordkeuze IMO -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Toegang tot het derde niveau" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Elke Windows-toets" # Beide/Willekeurige/Een van de/Een/Elke -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Elke Alt-toets" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Rechter Alt-toets (Shift + rechter Alt-toets is samensteltoets)" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Rechter Alt-toets geeft nooit het derde niveau" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter op cijferblok" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Backslash" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Kleiner dan/Groter dan>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "CapsLock, vergrendelt eenmalig samen met andere derdeniveaukiezer" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Backslash, vergrendelt eenmalig samen met andere derdeniveaukiezer" # locks - op slot gezet/blijvend/in stand houden # latches - vergrendelt -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Kleiner dan/Groter dan>, vergrendelt eenmalig samen met andere derdeniveaukiezer" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Positie van Ctrl-toets" # Ctrl-toets is hier duidelijker -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "CapsLock is Ctrl-toets" # fungeert als/werkt als/is -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Linker Ctrl is Meta-toets" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Ctrl en CapsLock omwisselen" # Ctrl-toets links van ‘A’ -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Links van de A" # "Ctrl-toets zit linksonder" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Linksonder" # fungeert als/werkt als/is -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Rechter Ctrl is rechter Alt-toets" # fungeert als/werkt als/is -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu is rechter Ctrl-toets" # fungeert als/werkt als/is -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Rechter Alt is rechter Ctrl-toets" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Linker Alt- en linker Ctrl-toets omwisselen" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Linker Windows- en linker Ctrl-toets omwisselen" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Linker Alt is Ctrl, linker Ctrl is Windows-toets, linker Windows-toets is Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Toetsenbord-LED gebruiken om alternatieve indeling te tonen" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "NumLock" # dubbelop numeriek/cijfer -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Indeling van het cijferblok" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Historisch" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Unicode-aanvullingen (pijlen en wiskundige operatoren)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Unicode-aanvullingen (pijlen en wiskundige operatoren; de laatste op standaardniveau)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Historisch Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 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; de laatste op standaardniveau)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadecimaal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefoonstijl" # Op het cijferblok is de delete toets aangegeven met "Del", maar # voor de duidelijkheid maar "Delete-toetsgedrag" van gemaakt. -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Gedrag van Delete-toets op cijferblok" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Historisch met punt" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Historisch met komma" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Vierniveaus-toets met punt" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Vierniveaus-toets met punt, beperkt tot Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Vierniveaus-toets met komma" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Vierniveaus-toets met momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Vierniveaus-toets met abstracte scheidingstekens" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Puntkomma op derde niveau" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Gedrag van CapsLock-toets" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "CapsLock gebruikt interne conversie naar hoofdletters; Shift heft CapsLock tijdelijk op" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "CapsLock gebruikt interne conversie naar hoofdletters; Shift heft CapsLock niet op" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "CapsLock werkt als Shift met vergrendeling; Shift heft CapsLock tijdelijk op" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" msgstr "CapsLock werkt als Shift met vergrendeling; Shift heft CapsLock niet op" # heeft alleen effect op/werkt alleen op/beïnvloedt alleen ~ # de alfabetische toetsen/ # bepaalt hoofdletters/kleine letters bij alfabetische tekens.< -#: ../rules/base.xml.in.h:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "CapsLock beïnvloedt alleen alfabetische tekens" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Van CapsLock een extra NumLock maken" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Esc en CapsLock omwisselen" # ESC-toets. -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Van CapsLock een extra ESC maken" # Backspace-toets. -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Van CapsLock een extra Backspace maken" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Van CapsLock een extra Super maken" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Van CapsLock een extra Hyper maken" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "CapsLock schakelt Shift-vergrendeling aan/uit (beïnvloedt alle toetsen)" # heeft geen functie/geen effect -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "CapsLock is uitgeschakeld" # Ctrl-toets -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Van CapsLock een extra Ctrl maken" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Gedrag van Alt/Windows-toetsen" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Het standaardgedrag toevoegen aan de Menu-toets" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt en Meta zitten op de Alt-toetsen" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt zit op de Windows-toetsen (én op de gebruikelijke Alt-toetsen)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl zit op de Windows-toetsen (én op de gebruikelijke Ctrl-toetsen)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl zit op de Alt-toetsen, Alt zit op de Windows-toetsen" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta zit op de Windows-toetsen" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta zit op de linker Windows-toets" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper zit op de Windows-toetsen" # wordt afgebeeld op/zit op # zit op is veel korter en is ook duidelijker -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt zit op de rechter Windows-toets, Super op de Menu-toets" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt- en Windows-toetsen omwisselen" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Positie van samensteltoets" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "derde niveau van linker Windows-toets" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "derde niveau van rechter Windows-toets" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "derde niveau van Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "derde niveau van linker Ctrl-toets" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "derde niveau van rechter Ctrl-toets" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "derde niveau van CapsLock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "derde niveau van <Kleiner dan/Groter dan>" # De tekst op de Pause-toets is meestal "Pause". -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Overige compatibiliteitsopties" # dubbelop numeriek/cijfer -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Standaard cijferblok-toetsen" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Cijferblok-toetsen geven altijd cijfers (net als bij Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift heft NumLock niet op, maar geeft juist het derde niveau" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Speciale toetsen (Ctrl+Alt+<toets>) afgehandeld in een server" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" msgstr "Apple Aluminium-toetsenbord: PC-toetsen emuleren (Print, Scroll-Lock, Pause, NumLock)" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift schakelt CapsLock uit" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Extra typografische tekens aanzetten" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Beide Shift-toetsen samen schakelen CapsLock aan/uit" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Beide Shift-toetsen samen zetten CapsLock aan, één Shift-toets zet uit" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Beide Shift-toetsen samen schakelen ShiftLock aan/uit" # PointerKeys are the mouse emulation that XKB provides on the press of a key. # (Test with Shift+NumLock, then the keypad will move the mouse around.) -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock schakelen 'muistoetsen' aan/uit" # XXX -- what does "grab" mean? -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Het verbreken van 'grabs' via toetsenbord toestaan (veiligheidsrisico)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Het loggen van 'grabs' en 'window trees' toestaan" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Valutatekens aan bepaalde toetsen toevoegen" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euroteken op E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euroteken op 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euroteken op 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euroteken op 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Roepie op 4" # aan te zetten/te kiezen/te selecteren/te krijgen # 'to choose' is hier een slechte woordkeuze IMO -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "De toets om het vijde niveau te krijgen" # locks - op slot gezet/blijvend/in stand houden -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Kleiner dan/Groter dan> geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Rechter Alt-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Linker Windows-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Rechter Windows-toets geeft vijfde niveau, en vergrendelt wanneer ingedrukt samen met andere vijfdeniveau-kiezer" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Gebruik van spatiebalk voor het invoeren van harde (niet-afbrekende) spaties" # Spatiebalk geeft de gebruikelijke spatie op elk niveau. -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Gewone spatie op elk niveau" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Harde spatie op het tweede niveau" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Harde spatie op het derde niveau" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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" # Spatiebalk geeft harde spatie op het vierde niveau. -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Harde spatie op het vierde niveau" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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)" @@ -3980,85 +4004,85 @@ msgstr "Harde spatie op het vierde niveau, smalle harde spatie op het zesde nive # 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Nulbreedte-losmaker op het tweede niveau" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Japanse toetsenbordopties" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Kana Lock-toets is vergrendelend" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F-stijl backspace" # De Zenkaku Hankaku toets converteert tussen volle breedte en half breedte karakters. -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Van de Zenkaku Hankaku-toets een extra ESC-toets maken" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Esperanto-letters met accenten toevoegen" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Aan de gerelateerde toets in een Qwerty-indeling" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Aan de gerelateerde toets in een Dvorak-indeling" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Aan de gerelateerde toets in een Colemak-indeling" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Toetscompatibiliteit behouden met oude Solaris-toetscodes" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Sun-toetsen-compatibiliteit" # om zeep te helpen/af te breken/te stoppen/ -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Toetscombinatie om de X-server af te breken" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4185,149 +4209,154 @@ msgstr "Cœur d'Alène Salish" msgid "English (US, Sun Type 6/7)" msgstr "Engels (US, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +# "Norman" is een toetsenbordindeling. +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Engels (Norman)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Pools (internationaal, met dode toetsen)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Pools (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Pools (Sun type 6/7)" # Krim-Tataars of Krim-Turks. # http://nl.wikipedia.org/wiki/Krim-Tataars -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krim-Tataars (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Roemeens (ergonomisch Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Roemeens (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Servisch (Combinerende accenten in plaats van dode toetsen)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russisch (met Oekraïens-Wit-Russische indeling)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armeens (OLPC, fonetisch)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebreeuws (Bijbels, SIL-fonetisch)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belgisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugees (Brazilië, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tsjechisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Deens (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Nederlands (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estisch (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Fins (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Frans (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grieks (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italiaans (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japans (Sun type 6/)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japans (Sun type 7 - PC-compatibel)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japans (Sun type 7 - Sun-compatibel)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Noors (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugees (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Slowaaks (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Spaans (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Zweeds (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Duits (Zwitserland, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Frans (Zwitserland, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turks (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Oekraïens (Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Engels (UK, Sun type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreaans (Sun type 6/7)" @@ -4463,9 +4492,6 @@ msgstr "Koreaans (Sun type 6/7)" #~ msgid "Myanmar" #~ msgstr "Myanmar" -#~ msgid "Nativo" -#~ msgstr "Nativo" - #~ msgid "Netherlands" #~ msgstr "Nederland" @@ -4560,7 +4586,7 @@ msgstr "Koreaans (Sun type 6/7)" #~ msgstr "qwertz" #~ msgid "ACPI Standard" -#~ msgstr "ACPI standaard" +#~ msgstr "ACPI-standaard" #~ msgid "Baltic+" #~ msgstr "Baltisch+" diff --git a/xorg-server/xkeyboard-config/po/pl.po b/xorg-server/xkeyboard-config/po/pl.po index fcb4f678c..deb05f4c7 100644 --- a/xorg-server/xkeyboard-config/po/pl.po +++ b/xorg-server/xkeyboard-config/po/pl.po @@ -1,13 +1,13 @@ # Polish translation for xkeyboard-config. # This file is distributed under the same license as the xkeyboard-config package. -# Jakub Bogusz <qboosh@pld-linux.org>, 2009-2013. +# Jakub Bogusz <qboosh@pld-linux.org>, 2009-2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 16:31+0200\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-17 17:01+0100\n" "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n" "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n" "Language: pl\n" @@ -814,7 +814,7 @@ msgid "English (programmer Dvorak)" msgstr "Angielski (Dvoraka programisty)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -886,11 +886,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Uzbecki (Afganistan, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Arabski" @@ -928,11 +928,11 @@ msgid "Albanian" msgstr "Albański" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armeński" @@ -1008,11 +1008,11 @@ msgid "Belarusian (Latin)" msgstr "Białoruski (łaciński)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belgijski" @@ -1044,17 +1044,17 @@ msgstr "Belgijski (klawisze akcentów Suna)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belgijski (Wang model 724 AZERTY)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengalski" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengalski (Probhat)" #. Keyboard indicator for Indian layouts @@ -1067,27 +1067,27 @@ msgid "Indian" msgstr "Indyjski" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengalski (Indie)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengalski (Indie, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengalski (Indie, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengalski (Indie, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengalski (Indie, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengalski (Indie, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1271,11 +1271,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bośniacki (klawiatura US z literami bośniackimi)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Portugalski (Brazylia)" @@ -1288,16 +1288,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portugalski (Brazylia, Dvoraka)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" -msgstr "Portugalski (Brazylia, nativo)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Portugalski (Brazylia, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" -msgstr "Portugalski (Brazylia, nativo dla klawiatur US)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Portugalski (Brazylia, Nativo dla klawiatur US)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Portugalski (Brazylia, nativo dla esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brazylia, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1451,2462 +1451,2482 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tybetański (z liczbami ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Ujgurski" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Chorwacki" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Chorwacki (z użyciem cudzysłowów do cytowania)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Chorwacki (z użyciem dwuznaków chorwackich)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Chorwacki (klawiatura US z dwuznakami chorwackimi)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Chorwacki (klawiatura US z literami chorwackimi)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Czeski" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Czeski (z klawiszem <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Czeski (QWERTY)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Czeski (QWERTY, rozszerzony Backslash)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Czeski (układ UCW - tylko litery akcentowane)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Czeski (US Dvoraka z obsługą CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Duński" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Duński (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Duński (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Duński (Macintosh, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Duński (Dvoraka)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Holenderski" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Holenderski (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Holenderski (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Holenderski (standardowy)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongka" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estoński" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estoński (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estoński (Dvoraka)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estoński (klawiatura US z literami estońskimi)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Perski" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Perski (z perską klawiaturą numeryczną)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Kurdyjski (Iran, łaciński Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Kurdyjski (Iran, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Kurdyjski (Iran, łaciński Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Kurdyjski (Iran, arabsko-łaciński)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iracki" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Kurdyjski (Irak, łaciński Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Kurdyjski (Irak, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Kurdyjski (Irak, łaciński Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Kurdyjski (Irak, arabsko-łaciński)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Farerski" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Farerski (bez klawiszy akcentów)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Fiński" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Fiński (klasyczny)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Fiński (klasyczny, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Północnolapoński (Finlandia)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Fiński (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Francuski" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Francuski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Francuski (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Francuski (alternatywny)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Francuski (alternatywny, tylko Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Francuski (alternatywny, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Francuski (alternatywny, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Francuski (stary, alternatywny)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Francuski (stary alternatywny, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Francuski (stary alternatywny, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Francuski (Bepo, ergonomiczny, w stylu Dvoraka)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Francuski (Bepo, ergonomiczny, w stylu Dvoraka, tylko Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Francuski (Dvoraka)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Francuski (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Francuski (bretoński)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Okcytański" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Gruziński (Francja, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Angielski (Ghana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Angielski (Ghana, wielojęzyczny)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fulani" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Angielski (Ghana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Francuski (Gwinea)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Gruziński" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Gruziński (ergonomiczny)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Gruziński (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Rosyjski (gruziński)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Osetyjski (Gruzja)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Niemiecki" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Niemiecki (akcent ostry)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Niemiecki (akcent gravis)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Niemiecki (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Niemiecki (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Rumuński (Niemcy)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Rumuński (Niemcy, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Niemiecki (Dvoraka)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Niemiecki (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Niemiecki (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Niemiecki (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Niemiecki (Macintosh, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Dolnołużycki" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Dolnołużycki (QWERTZ)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Niemiecki (QWERTY)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Rosyjski (Niemcy, fonetyczny)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Niemiecki (stary)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grecki" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grecki (prosty)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grecki (rozszerzony)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grecki (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grecki (politoniczny)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Węgierski" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Węgierski (standardowy)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Węgierski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Węgierski (QWERTY)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Węgierski (101/QWERTZ/przecinek/klawisze akcentów)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Węgierski (101/QWERTZ/przecinek/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Węgierski (101/QWERTZ/kropka/klawisze akcentów)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Węgierski (101/QWERTZ/kropka/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Węgierski (101/QWERTY/przecinek/klawisze akcentów)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Węgierski (101/QWERTY/przecinek/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Węgierski (101/QWERTY/kropka/klawisze akcentów)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Węgierski (101/QWERTY/kropka/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Węgierski (102/QWERTZ/przecinek/klawisze akcentów)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Węgierski (102/QWERTZ/przecinek/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Węgierski (102/QWERTZ/kropka/klawisze akcentów)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Węgierski (102/QWERTZ/kropka/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Węgierski (102/QWERTY/przecinek/klawisze akcentów)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Węgierski (102/QWERTY/przecinek/bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Węgierski (102/QWERTY/kropka/klawisze akcentów)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Węgierski (102/QWERTY/kropka/bez klawiszy akcentów)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandzki" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandzki (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandzki (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandzki (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandzki (Dvoraka)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebrajski" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebrajski (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebrajski (fonetyczny)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebrajski (biblijny, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Włoski" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Włoski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Włoski (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Włoski (klawiatura US z literami włoskimi)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Gruziński (Włochy)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Włoski (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japoński" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japoński (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japoński (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japoński (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japoński (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japoński (Dvoraka)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Kirgiski" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Kirgiski (fonetyczny)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Khmerski (Kambodża)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Kazaski" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Rosyjski (Kazahstan, z kazaskim)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Kazaski (z rosyjskim)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Laotański" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Laotański (proponowany układ standardowy STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Hiszpański (Ameryka Łacińska)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Hiszpański (Ameryka Łacińska, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Hiszpański (Ameryka Łacińska, ze znakiem tyldy)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Hiszpański (Ameryka Łacińska, klawisze akcentów Suna)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Litewski" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Litewski (standardowy)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Litewski (klawiatura US z literami litewskimi)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Litewski (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Litewski (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Litewski (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Łotewski" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Łotewski (wariant z apostrofem)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Łotewski (wariant z tyldą)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Łotewski (wariant F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Łotewski (współczesny)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Łotewski (ergonomiczny ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Łotewski (zaadaptowany)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maoryski" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Czarnogórski" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Czarnogórski (cyrylicki)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Czarnogórski (cyrylicki, zamienione Z i Ż)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Czarnogórski (łaciński unikodowy)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Czarnogórski (łaciński QWERTY)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Czarnogórski (łaciński unikodowy QWERTY)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Czarnogórski (cyrylicki z cudzysłowami)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Czarnogórski (łaciński z cudzysłowami)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedoński" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedoński (bez klawiszy akcentów)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltański" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltański (z układem US)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongolski" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norweski" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norweski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norweski (Dvoraka)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Północnolapoński (Norwegia)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Północnolapoński (Norwegia, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norweski (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norweski (Macintosh, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norweski (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polski" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polski (stary)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polski (QWERTZ)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polski (Dvoraka)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem cudzysłowu)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polski (Dvoraka, polskie cudzysłowy pod klawiszem 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kaszubski" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Rosyjski (Polska, fonetyczny Dvoraka)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polski (Dvoraka programisty)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Portugalski" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Portugalski (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Portugalski (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Portugalski (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Portugalski (Macintosh, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Portugalski (Macintosh, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" -msgstr "Portugalski (nativo)" +msgstr "Portugalski (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Portugalski (Nativo dla klawiatur US)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugalia, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Rumuński" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Rumuński (cedilla)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Rumuński (standardowy)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Rumuński (standardowy cedilla)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Rumuński (klawisze Win)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Rosyjski" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Rosyjski (fonetyczny)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Rosyjski (fonetyczny, klawisze Win)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Rosyjski (maszynistki)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Rosyjski (stary)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Rosyjski (maszynistki, stary)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tatarski" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Osetyjski (stary)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Osetyjski (klawisze Win)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Czuwaski" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Czuwaski (łaciński)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurcki" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Jakucki" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kałmucki" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Rosyjski (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Rosyjski (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Serbski (Rosja)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Baszkirski" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Maryjski" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Serbski" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Serbski (cyrylicki, zamienione Z i Ż)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Serbski (łaciński)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Serbski (łaciński unikodowy)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Serbski (łaciński QWERTY)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Serbski (łaciński unikodowy QWERTY)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Serbski (cyrylicki z cudzysłowami)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Serbski (łaciński z cudzysłowami)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Pannońskorusiński (homofoniczny)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Pannońskorusiński" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Słoweński" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Słoweński (używanie cudzysłowów do cytowania)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Słoweński (klawiatura US z literami słoweńskimi)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Słowacki" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Słowacki (rozszerzony backslash)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Słowacki (QWERTY)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Słowacki (QWERTY, rozszerzony Backslash)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Hiszpański" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Hiszpański (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Hiszpański (ze znakiem tyldy)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Hiszpański (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Hiszpański (Dvoraka)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturski (hiszpański, z H i L z dolną kropką)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Kataloński (hiszpański, z L ze środkową kropką)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Hiszpański (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Szwedzki" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Szwedzki (bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Szwedzki (Dvoraka)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Rosyjski (Szwecja, fonetyczny)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Rosyjski (Szwecja, fonetyczny, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Północnolapoński (Szwecja)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Szwedzki (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Szwedzki (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Szwedzki migowy" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Niemiecki (Szwajcaria)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Niemiecki (Szwajcaria, stary)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Niemiecki (Szwajcaria, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Niemiecki (Szwajcaria, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Francuski (Szwajcaria)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Francuski (Szwajcaria, bez klawiszy akcentów)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Francuski (Szwajcaria, klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Francuski (Szwajcaria, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Niemiecki (Szwajcaria, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Arabski (syryjski)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Syryjski" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Syryjski (fonetyczny)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Kurdyjski (Syria, łaciński Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Kurdyjski (Syria, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Kurdyjski (Syria, łaciński Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadżycki" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadżycki (stary)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Syngaleski (fonetyczny)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tamilski (Sri Lanka, unikodowy)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tamilski (Sri Lanka, maszynistki TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Tajski" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Tajski (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Tajski (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turecki" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turecki (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turecki (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turecki (klawisze akcentów Suna)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Kurdyjski (Turcja, łaciński Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Kurdyjski (Turcja, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Kurdyjski (Turcja, łaciński Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turecki (międzynarodowy z klawiszami akcentów)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Krymskotatarski (turecki Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Krymskotatarski (turecki F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Krymskotatarski (turecki Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Tajwański" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Tajwański (autochtoniczny)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiyat (Tajwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ukraiński" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ukraiński (fonetyczny)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ukraiński (maszynistki)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ukraiński (klawisze Win)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ukraiński (stary)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ukraiński (standardowy RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Rosyjski (Ukraina, standardowy RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ukraiński (homofoniczny)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Angielski (Wielka Brytania)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Angielski (Wielka Brytania, rozszerzone klawisze Win)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Angielski (Wielka Brytania, międzynarodowy z klawiszami akcentów)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Angielski (Wielka Brytania, Dvoraka)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Angielski (Wielka Brytania, Dvoraka z brytyjskimi znakami przestankowymi)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Angielski (Wielka Brytania, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Angielski (Wielka Brytania, międzynarodowy Macintosh)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Angielski (Wielka Brytania, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Uzbecki" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Uzbecki (łaciński)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Wietnamski" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Koreański" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Koreański (kompatybilny ze 101/104 klawiszami)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japoński (serie PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlandzki" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "Irlandzki gaelicki" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlandzki (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogamiczny" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogamiczny (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Pakistan)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Pakistan, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Pakistan, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Arabski (pakistański)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Sindhi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Malediwski" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Angielski (Afryka Południowa)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperancki" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (zamieniony średnik i apostrof, przestarzałe)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalski" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Angielski (Nigeria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Ibo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Joruba" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amharski" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braille'a" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (leworęczny)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (praworęczny)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turkmeński" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turkmeński (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Francuski (Mali, alternatywny)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Angielski (Mali, USA - Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Angielski (Mali, międzynarodowy USA)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Suahili (Tanzania)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Suahili (Kenia)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikiju" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipiński" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipino (baybain QWERTY)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipiński (łaciński Capewella-Dvoraka)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipiński (baybayin Capewella-Dvoraka)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipiński (łaciński Capewella-QWERF 2006)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipiński (baybayin Capewella-QWERF 2006)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipiński (łaciński Colemak)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipiński (baybain Colemak)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipiński (łaciński Dvoraka)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipiński (baybain Dvoraka)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Mołdawski" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Mołdawski (gagauski)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Przełączenie na inny układ" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Prawy Alt (wciśnięty)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Lewy Alt (wciśnięty)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Lewy Win (wciśnięty)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Prawy Win (wciśnięty)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Dowolny klawisz Win (wciśnięty)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Prawy Ctrl (wciśnięty)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Prawy Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Lewy Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "CapsLock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+CapsLock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 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:897 +#: ../rules/base.xml.in.h:898 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:898 +#: ../rules/base.xml.in.h:899 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:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+CapsLock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Oba klawisze Shift naraz" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Oba klawisze Alt naraz" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Oba klawisze Ctrl naraz" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Lewy Ctrl+lewy Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Prawy Ctrl+prawy Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Lewy Alt+lewy Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Spacja" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Lewy Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Prawy Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Lewy Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Prawy Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Lewy Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Prawy Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "ScrollLock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 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:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Klawisz wybierający poziom 3." -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Dowolny klawisz Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Dowolny klawisz Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Prawy Alt, Shift+prawy Alt jako Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Prawy Alt nigdy nie wybierający poziomu 3." -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter na klawiaturze numerycznej" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Backslash" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Mniejsze/Większe>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "CapsLock wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3." -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Odwrotny ukośnik wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3." -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Mniejsze/Większe> wybiera poziom 3., jednorazowo blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 3." -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Położenie klawisza Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "CapsLock jako Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Lewy Ctrl jako Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Zamiana Ctrl i CapsLocka" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Z lewej 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "W lewym dolnym rogu" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Prawy Ctrl jako prawy Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu jako prawy Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Prawy Alt jako prawy Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Zamiana lewego Alta z lewym Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Zamiana lewego Win z lewym Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Lewy Alt jako Ctrl, lewy Ctrl jako Win, lewy Win jako Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Używanie diody na klawiaturze do sygnalizacji układu alternatywnego" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "NumLock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Układ klawiatury numerycznej" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Stary" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Dodatki Unicode (strzałki i symbole matematyczne)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 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:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Legacy Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 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:947 +#: ../rules/base.xml.in.h:951 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:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Szesnastkowy" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/telefoniczna" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Zachowanie klawisza Delete na klawiaturze numerycznej" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Klawisz tradycyjny z kropką" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Klawisz tradycyjny z przecinkiem" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Klawisz czterofunkcyjny z kropką" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Klawisz czterofunkcyjny z kropką, tylko Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Klawisz czterofunkcyjny z przecinkiem" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Klawisz czterofunkcyjny ze znakiem momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Klawisz czterofunkcyjny z abstrakcyjnymi separatorami" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Średnik na poziomie 3." -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Zachowanie klawisza CapsLock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 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:964 +#: ../rules/base.xml.in.h:968 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:965 +#: ../rules/base.xml.in.h:969 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:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "CapsLock przełącza wielkość znaków alfabetycznych" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "CapsLock jako dodatkowy NumLock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Zamiana Esc i CapsLocka" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "CapsLock jako dodatkowy Esc" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "CapsLock jako dodatkowy Backspace" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "CapsLock jako dodatkowy Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "CapsLock jako dodatkowy Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "CapsLock przełącza ShiftLock (wpływając na wszystkie klawisze)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "CapsLock wyłączony" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "CapsLock jako dodatkowy Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Zachowanie klawiszy Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Dodanie standardowego działania klawisza Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt i Meta pod klawiszami Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt pod klawiszami Win (oraz zwykłymi klawiszami Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl pod klawiszami Win (oraz zwykłymi klawiszami Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl pod klawiszami Alt, Alt pod klawiszami Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta pod klawiszami Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta pod lewym Win" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper pod klawiszami Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt pod prawym Win, Super pod Menu" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Lewy zamieniony z Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Położenie klawisza Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Pozion 3. lewego klawisza Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Pozion 3. prawego klawisza Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Poziom 3. klawisza Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Poziom 3. lewego klawisza Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Poziom 3. prawego klawisza Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Poziom 3. klawisza Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Poziom 3. klawisza <Mniejsze/Większe>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pauza" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Różne opcje kompatybilności" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Domyślne klawisze klawiatury numerycznej" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Klawiatura numeryczna zawsze prowadza cyfry (jak w Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 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:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift nie anuluje NumLocka, wybiera poziom 3." -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Klawisze specjalne (Ctrl+Alt+<klawisz>) obsługiwane przez serwer" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift anuluje CapsLock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Włączenie dodatkowych znaków typograficznych" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Oba klawisze Shift naraz przełączają CapsLock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 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:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Oba klawisze Shift naraz przełączają ShiftLock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock przełącza klawisze kursorów" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Akcje klawiatury mogą przełamywać przechwytywanie (uwaga: zagrożenie bezpieczeństwa)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Możliwe przechwytywanie i logowanie drzewa okien" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Dodanie znaków walut do pewnych klawiszy" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro pod E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro pod 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro pod 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro pod 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupia pod 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Klawisz wybierający poziom 5." -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Mniejsze/Większe> wybiera poziom 5., blokuje przy naciśnięciu z innym klawiszem wybierającym poziom 5." -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 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:1021 +#: ../rules/base.xml.in.h:1026 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:1022 +#: ../rules/base.xml.in.h:1027 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:1023 +#: ../rules/base.xml.in.h:1028 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:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Zwykła spacja na dowolnym poziomie" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Znak niełamliwej spacji na poziomie 2." -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Znak niełamliwej spacji na poziomie 3." -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 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:1028 +#: ../rules/base.xml.in.h:1033 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:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Znak niełamliwej spacji na poziomie 4." -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 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:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Znak rozdzielający zerowej szerokości na poziomie 2." -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 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:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 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:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 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:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Opcje klawiatury japońskiej" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Blokujący klawisz Kana Lock" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Backspace w stylu NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Zenkaku Hankaku jako dodatkowy Esc" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Dodanie akcentów Esperanto (supersigno)" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Pod odpowiednimi klawiszami wg układu QWERTY" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Pod odpowiednimi klawiszami wg układu Dvoraka" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Pod odpowiednimi klawiszami wg układu Colemak" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Zachowanie zgodności klawiszy ze starymi kodami Solarisa" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Zgodność klawiszy z Sunem" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Sekwencja klawiszy zabijająca serwer X" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4018,146 +4038,150 @@ msgstr "Coeur d'Alene Salish" msgid "English (US, Sun Type 6/7)" msgstr "Angielski (USA, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Angielski (Normana)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polski (międzynarodowy z klawiszami akcentów)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polski (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Krymskotatarski (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Rumuński (ergonomiczny Touchtype)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Rumuński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Serbski (łączenie akcentów zamiast klawiszy akcentów)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Rosyjski (z układem ukraińsko-białoruskim)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Rosyjski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armeński (fonetyczny OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebrajski (biblijny, fonetyczny SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Arabski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belgijski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Portugalski (Brazylia, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Czeski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Duński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Holenderski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estoński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Fiński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Francuski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grecki (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Włoski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japoński (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japoński (Sun Type 7 - kompatybilny z PC)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japoński (Sun Type 7 - kompatybilny z Sunem)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norweski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Portugalski (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Słowacki (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Hiszpański (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Szwedzki (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Niemiecki (Szwajcaria, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Francuski (Szwajcaria, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turecki (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ukraiński (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Angielski (USA, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Koreański (Sun Type 6/7)" diff --git a/xorg-server/xkeyboard-config/po/pt_BR.po b/xorg-server/xkeyboard-config/po/pt_BR.po index 53be57077..c5331d532 100644 --- a/xorg-server/xkeyboard-config/po/pt_BR.po +++ b/xorg-server/xkeyboard-config/po/pt_BR.po @@ -1,15 +1,15 @@ # Brazilian Portuguese translation for xkeyboard-config -# Copyright (c) 2013 Canonical Ltd, and Rosetta Contributors 2013 +# Copyright (c) 2014 Canonical Ltd, and Rosetta Contributors 2014 # This file is distributed under the same license as the xkeyboard-config package. # Gabriell Nascimento <gabriellhrn@gmail.com>, 2012. -# Enrico Nicoletto <liverig@gmail.com>, 2013. +# Enrico Nicoletto <liverig@gmail.com>, 2013, 2014. # msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 20:48-0300\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 09:43-0300\n" "Last-Translator: Enrico Nicoletto <liverig@gmail.com>\n" "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net>\n" "Language: pt_BR\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2012-09-01 07:16+0000\n" -"X-Generator: Poedit 1.5.7\n" +"X-Generator: Poedit 1.6.3\n" #: ../rules/base.xml.in.h:1 msgid "Generic 101-key PC" @@ -818,7 +818,7 @@ msgid "English (programmer Dvorak)" msgstr "Inglês (Dvorak para programador)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -890,11 +890,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Uzbeque (Afeganistão, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Árabe" @@ -932,11 +932,11 @@ msgid "Albanian" msgstr "Albanês" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Armênio" @@ -1012,11 +1012,11 @@ msgid "Belarusian (Latin)" msgstr "Bielorrusso (latino)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Belga" @@ -1048,17 +1048,17 @@ msgstr "Belga (Teclas mortas da Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Belga (Wang modelo 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Bengali" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Bengali (Probhat)" #. Keyboard indicator for Indian layouts @@ -1071,27 +1071,27 @@ msgid "Indian" msgstr "Indiano" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Bengali (Índia)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Bengali (Índia, Probhat)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Bengali (Índia, Baishakhi)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Bengali (Índia, Bornona)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Bengali (Índia, Uni Gitanjali)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Bengali (Índia, Baishakhi Inscript)" #. Keyboard indicator for Gujarati layouts @@ -1275,11 +1275,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Bósnio (Teclado EUA com letras bósnias)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Português (Brasil)" @@ -1292,16 +1292,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Portuguese (Brasil, Dvorak)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "Português (Brasil, nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "Português (Brasil, nativo para teclados americanos)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Português (Brasil, nativo para Esperanto)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Esperanto (Brasil, nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1455,2462 +1455,2483 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Tibetano (com númerais ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Uigur" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Croata" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Croata (utilizar aspas para citações)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Croata (utilizar dígrafos croatas)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Croata (Teclado EUA com digráfos croatas)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Croata (Teclado EUA com letras croatas)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Tchéco" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Tcheco (com a tecla <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Tcheco (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Tcheco (qwerty, barra invertida extendida)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Tcheco (leiaute UCW, apenas letras acentuadas)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Tcheco (Dvorak americano com suporte CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Dinamarquês" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Dinamarquês (sem teclas mortas)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Dinamarquês (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Dinamarquês (Macintosh, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Dinamarquês (Dvorak)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Holandês" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Holandês (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Holandês (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Holandês (padrão)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Dzongkha" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Estônio" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Estoniano (sem teclas mortas)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Estoniano (Dvorak)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Estoniano (teclado EUA com letras estonianas)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Persa" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Persa (com teclado númerico persa)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Curdo (Irã, Q latino)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Curdo (Irã, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Curdo (Irã, latino Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Curdo (Irã, Arábico-Latino)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Iraqui" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Curdo (Irã, Q latino)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Curdo (Iraque, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Curdo (Iraque, alt-Q latino)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Curdo (Iraque, Arábico-Latino)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Faroês" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Feroês (sem teclas mortas)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Finlandês" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Finlandês (clássico)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Finlandês (clássico, sem teclas mortas)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Lapão setentrional (Finlândia)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Finlandês (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Francês" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Francês (sem teclas mortas)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Francês (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Francês (alternativo)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Francês (alternativo, apenas Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Francês (alternativo, sem teclas mortas)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Francês (alternativo, com teclas mortas da Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Francês (legado, alternativo)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Francês (legado, alternativo, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Francês (legado, alternativo, teclas mortas da Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Francês (Bepó, ergonômico, Dvorak)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Francês (Bepó, ergonômico, modo Dvorak, apenas Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Francês (Dvorak)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Francês (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Francês (Bretão)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Occitano" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Georgiano (França, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Inglês (Gana)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Inglês (Gana, multilíngue)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Akan" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Fula" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Ga" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Avatime" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Inglês (Gana, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Francês (Guiné)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Georgiano" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgiano (ergonômico)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Georgiano (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Russo (Geórgia)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Osseto (Geórgia)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Alemão" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Alemão (com acento agudo)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Alemão (com acentos grave e agudo)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Alemão (sem teclas mortas)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Alemão (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Romeno (Alemanha)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Romeno (Alemanha, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Alemão (Dvorak)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Alemão (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Alemão (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Alemão (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Alemão (Macintosh, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Baixo Sorábio" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Baixo Sorábio (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Alemão (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Russo (Alemanha, fonético)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Alemão (legado)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Grego" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Grego (simplificado)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Grego (estendido)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Grego (sem teclas mortas)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Grego (politônico)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Húngaro" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Húngaro (padrão)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Húngaro (sem teclas mortas)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Húngaro (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Húngaro (101 teclas, qwertz, com vírgula e teclas mortas)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Húngaro (101 teclas, qwertz, com vírgula e sem teclas mortas)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Húngaro (101 teclas, qwertz, com ponto e teclas mortas)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Húngaro (101 teclas, qwertz, com ponto e sem teclas mortas)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Húngaro (101 teclas, qwerty, com vírgula e teclas mortas)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Húngaro (101 teclas, qwerty, com vírgula e sem teclas mortas)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Húngaro (101 teclas, qwerty, com ponto e teclas mortas)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Húngaro (101 teclas, qwerty, com ponto e sem teclas mortas)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Húngaro (102 teclas, qwertz, com vírgula e teclas mortas)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Húngaro (102 teclas, qwertz, com vírgula e sem teclas mortas)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Húngaro (102 teclas, qwertz, com ponto e teclas mortas)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Húngaro (102 teclas, qwertz, com ponto e sem teclas mortas)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Húngaro (102 teclas, qwerty, com vírgula e teclas mortas)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Húngaro (102 teclas, qwerty, com vírgula e sem teclas mortas)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Húngaro (102 teclas, qwerty, com ponto e teclas mortas)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Húngaro (102 teclas, qwerty, com ponto e sem teclas mortas)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Islandês" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Islandês (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Islandês (sem teclas mortas)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Islandês (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Islandês (Dvorak)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Hebraico" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Hebraico (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Hebraico (fonético)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Hebraico (Bíblico, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Italiano" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Italiano (sem teclas mortas)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Italiano (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Italiano (Teclado EUA com letras italianas)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Georgiano (Itália)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Italiano (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Japonês" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Japonês (Kana)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Japonês (Kana 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Japonês (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Japonês (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Japonês (Dvorak)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Quirguistão" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Quirguiz (fonético)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Cambojano (Camboja)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Cazaque" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Russo (Cazaquistão, com cazaque)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Cazaque (com Russo)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Laociano" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Laociano (padrão de teclado proposto pela STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Espanhol (América Latina)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Espanhol (América Latina, sem teclas mortas)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Espanhol (América Latina, com tecla til)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Espanhol (América Latina, teclas mortas da Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Lituânio" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Lituano (padrão)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Lituano (Teclado EUA com letras lituanas)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Lituano (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Lituano (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Lituano (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Letão" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Letão (variação com apóstrofes)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Letão (variante com til)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Letão (F variante)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Letão (moderno)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Letão (ergonômico, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Letão (adaptado)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Maori" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Montenegrino" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Montenegrino (Cirílico)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Montenegrino (Cirílico, Z and ZHE invertidos)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Montenegrino (Unicode latino)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Montenegrino (qwerty latino)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Montenegrino (Qwerty Unicode latino)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Montenegrino (Cirílico com aspas angulares)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Montenegrino (Latino com aspas angulares)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Macedônio" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Macedoniano (sem teclas mortas)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Maltês" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Maltês (Teclado EUA)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Mongol" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Norueguês" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Norueguês (sem teclas mortas)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Norueguês (Dvorak)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Lapão setentrional (Noruega)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Lapão setentrional (Noruega, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Norueguês (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Norueguês (Macintosh, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Norueguês (Colemak)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Polonês" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Polonês (legado)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Polonês (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Polonês (Dvorak)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Polonês (Dvorak, aspas polonesas na tecla de aspas)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Polonês (Dvorak, aspas polonesas na tecla 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Kashubian" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Russo (Polônia, Dvorak fonético)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Polonês (Dvorak para programador)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Português" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Português (sem teclas mortas)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Português (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Português (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Português (Macintosh, eliminar teclas mortas)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Português (Macintosh, teclas mortas da Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Português (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Português (Nativo para teclados americanos)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Esperanto (Portugal, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Romênio" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Romeno (com cedilha)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Romeno (padrão)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Romeno (padrão, com cedilha)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Romeno (teclas Windows)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Russo" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Russo (fonético)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Russo (fonético com teclas Windows)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Russo (máquina de escrever)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Russo (legado)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Russo (máquina de escrever, legado)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Tátar" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Osseto (legado)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Osseto (WinKeys)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Tchuvache" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Tchuvache (Latino)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Udmurt" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Komi" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Yakut" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Kalmyk" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Russo (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Russo (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Sérvio (Rússia)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Bashkirian" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Mari" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Sérvio" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Sérvio (Cirílico, Z e ZHE trocados)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Sérvio (Latino)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Sérvio (Latino Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Sérvio (qwerty, Latino)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Sérvio (qwerty, Latino Unicode)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Sérvio (Cirílico com guillemets)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Sérvio (Latin com aspas angulares)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Ruteno (homofônico)" +# http://pt.wikipedia.org/wiki/Rusins --Enrico +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Rusins da Panônia" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Esloveno" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Esloveno (utilizar aspas para citações)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Esloveno (teclado US com letras eslovenas)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Eslovaco" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Eslovaco (barra invertida extendida)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Eslováquio (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Eslovaco (qwerty, barra invertida extendida)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Espanhol" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Espanhol (sem teclas mortas)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Espanhol (com tecla til)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Espanhol (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Espanhol (Dvorak)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Asturiano (Espanha, com ponto inferior no H e ponto inferior no L)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Catalão (Espanha, com ponto mediano entre o L)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Espanhol (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Suéco" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Sueco (sem teclas mortas)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Sueco (Dvorak)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Russo (Suécia, fonético)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Russo (Suécia, fonético, sem teclas mortas)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Lapão setentrional (Suécia)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Sueco (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Sueco (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Língua de sinais sueca" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Alemão (Suíça)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Alemão (Suíça, legado)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Alemão (Suiça, sem teclas mortas)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Alemão (Suiça, com teclas mortas da Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Francês (Suíça)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Francês (Suíça, sem teclas mortas)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Francês (Suíça, com teclas mortas da Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Francês (Suíça, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Alemão (Suíça, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Árabe (Síria)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Sírio" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Sírio (fonético)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Curdo (Síria, Q latino)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Curdo (Síria, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Curdo (Síria, alt-Q latino)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Tadjique" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Tadjique (legado)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Sinhala (fonética)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Tâmil (Sri Lanka, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Tâmil (Sri Lanka, máquina de escrever TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Tailandês" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Tailandês (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Tailandês (Pattachote)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Turco" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Turco (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Turco (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Turco (Teclas mortas da Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Curdo (Turquia, Q latino)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Curdo (Turquia, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Curdo (Turquia, alt-Q latino)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Turco (internacional com teclas mortas)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Crimean Tatar (Turkish Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Crimean Tatar (Turkish F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Crimean Tatar (Turkish Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Taiwanês" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Taiwanês (indígena)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Saisiat (Taiwan)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Ucraniano" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Ucraniano (fonético)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Ucraniano (Máquina de escrever)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Ucraniano (teclas Windows)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Ucraniano (legado)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Ucraniano (padrão RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Russo (Ucrânia, RSTU padrão)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Ucraniano (homofônico)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Inglês (Reino Unido)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Inglês (Reino Unido, WinKeys estendidas)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Inglês (Reino Unido, internacional com teclas mortas)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Inglês (Reino Unido, Dvorak)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Inglês (Reino Unido, Dvorak com pontuação do Reino Unido)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Inglês (Reino Unido, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Inglês (Reino Unido, Macintosh internacional)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Inglês (Reino Unido, Colemak)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Uzbeque" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Uzbeque (Latino)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Vietnamês" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Coreano" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Coreano (compatível com 101/104 teclas)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Japonês (PC-98xx Series)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Irlandês" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Irlandês (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Ogam" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Ogham (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Urdu (Paquistão)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Urdu (Paquistão, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Urdu (Paquistão, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Árabe (Paquistão)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Síndi" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Dhivehi" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Inglês (África do Sul)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Esperanto" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Esperanto (ponto-e-vírgula e aspas deslocadas, obsoleto)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Nepalês" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Inglês (Nigéria)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Iorubá" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Amárico" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Wolof" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Braile" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Braille (canhoto)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Braille (destro)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Turcomano" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Turcomano (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Bambara" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Francês (Mali, alternativo)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Inglês (Mali, US Macintosh)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Inglês (Mali, US internacional)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Suaíli (Tanzânia)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Suaíli (Quênia)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Kikuyu" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Tswana" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Filipino" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Filipino (QWERTY baybayin)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Filipino (Capewell-Dvorak latino)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Filipino (Capewell-Dvorak Baybayin)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Filipino (Capewell-QWERF 2006 latino)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Filipino (Capewell-QWERF 2006 baybayin)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Filipino (Colemak latino)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Filipino (Colemak baybayin)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Filipino (Dvorak latino)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Filipino (Dvorak Baybayin)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Moldávio" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Moldávio (Gagauz)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Alternando para outra disposição" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Alt Direito (quando pressionado)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Alt Esquerdo (quando pressionado)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Win Esquerdo (quando pressionado)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Win Direito (quando pressionado)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Qualquer tecla Windows (quando pressionada)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 msgid "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" msgstr "Caps Lock (quando pressionada), Alt+Caps Lock faz a ação capslock original" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Ctrl Direito (quando pressionado)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Alt direito" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Alt Esquerdo" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (para a primeira disposição), Shift+Caps Lock (para a última disposição)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Win Esquerdo (para primeiro leiaute), Win Direito/Menu (para último leiaute)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Ctrl Esquerdo (para primeiro leiaute), Ctrl Direito (para último leiaute)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Ambas teclas Shift juntas" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Ambas teclas Alt juntas" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Ambas teclas Ctrl juntas" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Ctrl Esquerdo+Shift Esquerdo" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Ctrl da Direita+Shift da Direita" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Alt da esquerda + Shift da esquerda" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Espaço" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Win Esquerdo" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Win Direito" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Shift Esquerdo" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Shift direito" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Ctrl Esquerdo" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Ctrl Direito" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "CtrlEsquerdo+WinEsquerdo (para primeira disposição), CrtlDireito+Menu (para segunda disposição)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Tecla para escolher terceiro nível" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Qualquer tecla Windows" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Qualquer tecla Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Alt direito, Shift+Alt direito é tecla de composição" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Tecla Alt Direita nunca escolhe terceiro nível" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter no teclado numérico" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Barra invertida" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Menor que/Maior que>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Caps lock escolhe o 3º nível, atua como bloqueio de uma única vez, quando pressionada em conjunto com outra escolha de 3º nível" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Barra invertida escolhe o 3º nível, atua como bloqueio de uma única vez, quando pressionada em conjunto com outra escolha de 3º nível" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Less/Greater> escolhe o 3º nível, atua como bloqueio de uma única vez, quando pressionadas em conjunto com outra escolha de 3º nível" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Posição da tecla Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock como Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Ctrl da esquerda como Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Trocar o Ctrl e o Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "À esquerda de 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Na parte inferior esquerda" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Ctrl Direito como Alt Direito" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu como Ctrl da direita" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Alt da direita como Ctrl da direita" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Alternar a tecla Alt esquerda com a tecla Ctrl esquerda" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Alternar a tecla Win esquerda com a tecla Ctrl esquerda" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Alt esquerdo como Ctrl, Ctrl esquerdo como Win, Win esquerdo como Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Usar LEDs do teclado para mostrar disposição alternativa" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Disposição das teclas do teclado numérico" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Legado" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Adições Unicode (setas e operadores matemáticos)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Adições Unicode (setas e operadores matemáticos; operadores matemáticos no nível padrão)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Legado Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Teclado Wang 724 keypad com adições Unicode (setas e operadores matemáticos)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Teclado Wang 724 keypad com adições Unicode (setas e operadores matemáticos; operadores matemáticos no nível padrão)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Hexadecimal" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "ATM/estilo-telefone" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Teclado numérico elimina comportamento chave" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Legado com tecla ponto" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Legado com tecla vírgula" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Chave de quatro níveis com ponto" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Tecla de quarto nível com ponto, apenas Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Chave de quatro níveis com vírgula" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Tecla de quarto nível com momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Chave de quatro níveis com separadores abstratos" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Ponto-e-vírgula no terceiro nível" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Comportamento da tecla Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock usa caixa alta interna; Shift \"pausa\" o Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock usa caixa alta interna. Shift não afeta o Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock funciona como Shift com trava; Shift \"pausa\" a tecla Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" msgstr "Caps Lock funciona como Shift com trava; Shift não afeta a tecla Caps Lock" -#: ../rules/base.xml.in.h:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock alterna o uso normal de maiúsculas dos caracteres alfabéticos" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Fazer do Caps Lock um Num Lock adicional" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Trocar o Esc e o Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Fazer do Caps Lock um Esc adicional" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Fazer do Caps Lock um Backspace adicional" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Fazer do Caps Lock um Super adicional" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Tornar o Caps Lock uma adição à Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock alterna ShiftLock (todas as teclas são afetadas)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock está desabilitada" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Fazer do Caps Lock um Ctrl adicional" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Comportamento da tecla Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Adicionar o comportamento padrão a tecla Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt e Meta estão nas teclas Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt está mapeado à teclas Win (e as habituais teclas Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl está mapeado para teclas Win (e as habituais teclas Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl está mapeado para teclas Alt, Alt está mapeado para teclas Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta está mapeado para teclas Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta está mapeado para Win esquerdo" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper está mapeado para teclas Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt está mapeado para Win Direito, Super para Menu" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt é trocado por Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Posição da tecla de composição" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "Terceiro nível de Win esquerdo" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "Terceiro nível de Win direito" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "Terceiro nível de Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "Terceiro nível de Ctrl esquerdo" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "Terceiro nível de Ctrl direito" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "Terceiro nível de Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "Terceiro nível de <Menor que/Maior que>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pausa" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Opções variadas de compatibilidade" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Pré-definição das teclas do teclado numérico" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "Teclas do teclado numérico sempre introduzem dígitos (como no Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Shift com teclas do teclado numérico funciona como no MS Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift não cancela o Num Lock, mas escolhe o 3º nível" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Teclas especiais (Ctrl+Alt+<key>) tratadas em um servidor" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num Lock)" msgstr "Teclado Apple Aluminium: emular teclas de PC (Print, Scroll Lock, Pause, Num Lock)" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift cancela o Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Habilitar caracteres tipográficos extras" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Ambas as teclas Shift juntas alternam o Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Ambas as teclas Shift juntas ativam o Caps Lock, uma tecla Shift desativa" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Ambas as teclas Shift juntas alternam o Shift Lock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock alterna teclas de ponteiro" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Permitir ganho de quebra com as ações do teclado (aviso: risco de segurança)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Permitir o registro e captura da árvore de janela" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Acrescentar sinal de unidade monetária a certas teclas" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Euro no E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Euro no 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Euro no 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Euro no 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Rupia no 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Tecla para escolher o 5º nível" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Menor que/Maior que> escolhe 5º nível, bloqueia quando pressionada junto com outra tecla de 5º nível" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Alt direito escolhe quinto nível, bloqueia quando pressionado com outro escolhedor de 5º nível" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Win esquerdo escolhe 5º nível, bloqueia quando pressionada junto com outro escolhedor de 5º nível" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Win direito escolhe quinto nível, bloqueia quando pressionado com outro escolhedor de 5º nível" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Usar a tecla de espaco para inserir caractere de espaço sem quebra de linha" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Espaço normal em qualquer nível" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Caractere de espaço sem quebra de linha no segundo nível." -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Caractere de espaço sem quebra de linha no terceiro nível." -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Caractere de espaço sem quebra de linha no terceiro nível, nada no quarto nível." -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Caractere de espaço não quebrável no terceiro nível, caractere de espaço não quebrável fino no quarto nível" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Caractere de espaço sem quebra de linha no quarto nível." -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Caractere de espaço não quebrável no quarto nível, caractere de espaço não quebrável fino no sexto nível" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level (via Ctrl+Shift)" msgstr "Caractere de espaço não quebrável no quarto nível, caractere de espaço não quebrável fino no sexto nível (via Ctrl+Shift)" -#: ../rules/base.xml.in.h:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Separação de tamanho nulo no segundo nível" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Separação de tamanho nulo no segundo nível, união de tamanho nulo no terceiro nível" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level, non-breakable space character at fourth level" msgstr "Separação de tamanho nulo no segundo nível, união de tamanho nulo no terceiro nível, caractere de espaço não quebrável no quarto nível" -#: ../rules/base.xml.in.h:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Separação de tamanho nulo no segundo nível, caractere de espaço não quebrável no terceiro nível" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, nothing at fourth level" msgstr "Separação de tamanho nulo no segundo nível, caractere de espaço não quebrável no terceiro nível, nada no quarto nível" -#: ../rules/base.xml.in.h:1037 +#: ../rules/base.xml.in.h:1042 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, zero-width joiner at fourth level" msgstr "Separação de tamanho nulo no segundo nível, caractere de espaço não quebrável no terceiro nível, união de tamanho nulo no quarto nível" -#: ../rules/base.xml.in.h:1038 +#: ../rules/base.xml.in.h:1043 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level, thin non-breakable space at fourth level" msgstr "Separação de tamanho nulo no segundo nível, caractere de espaço não quebrável no terceiro nível, espaço não quebrável fino no quarto nível" -#: ../rules/base.xml.in.h:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Separação de tamanho nulo no terceiro nível, união de tamanho nulo no quarto nível" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Teclado Japonês opcional" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Tecla Kana Lock está bloqueando" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F estilo Backspace" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Fazer Zenkaku Hankaku um ESC adicional" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Adicionando letras diacríticas Esperanto" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "Para a tecla correspondente em uma disposição Qwerty." -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "Para a tecla correspondente em uma disposição Dvorak." -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "Para a tecla correspondente em uma disposição Colemak." -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Mantém compatibilidade de teclas com antigos código de teclas Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Compatibilidade com teclas Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Sequência de teclas para matar o servidor X" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4022,150 +4043,160 @@ msgstr "Salish de Coeur d'Alene" msgid "English (US, Sun Type 6/7)" msgstr "Inglês (EUA, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Inglês (Normando)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Polonês (internacional com teclas mortas)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Polonês (Colemak)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Polonês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Tártaro da Crimeia (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Romeno (Touchtype ergonômico)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Romeno (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Sérvio (acentos de combinação em vez de teclas mortas)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Russo (com padrão Ucrânia-Bielorrússia)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Russo (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Armênio (OLPC fonético)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Hebraico (Bíblico, fonética SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Árabe (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Belga (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Português (Brasil, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Tcheco (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Dinamarquês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Holandês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Estoniano (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Finlandês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Francês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Grego (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Italiano (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Japonês (Sun tipo 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Japonês (Sun tipo 7 - compatível com pc)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Japonês (Sun tipo 7 - compatível com Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Norueguês (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Português (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Eslovaco (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Espanhol (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Sueco (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Alemão (Suiça, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Francês (Suíça, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Turco (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Ucraniano (Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Inglês (Reino Unido, Sun tipo 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Coreano (Sun tipo 6/7)" +#~ msgid "Bengali" +#~ msgstr "Bengali" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Português (Brasil, nativo para Esperanto)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Inglês (Mudando disposição nas teclas de divisão e multiplicação)" diff --git a/xorg-server/xkeyboard-config/po/ru.po b/xorg-server/xkeyboard-config/po/ru.po index c4cec2fc7..e2f686fdf 100644 --- a/xorg-server/xkeyboard-config/po/ru.po +++ b/xorg-server/xkeyboard-config/po/ru.po @@ -7,14 +7,14 @@ # Nickolay V. Shmyrev <nshmyrev@yandex.ru>, 2006. # Misha Shnurapet <zayzayats@yandex.ru>, 2010. # ChALkeR <chalkerx@gmail.com>, 2010. -# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2011, 2012, 2013. +# Yuri Kozlov <yuray@komyakino.ru>, 2009, 2010, 2011, 2012, 2013, 2014. # Pavel Maryanov <acid@jack.kiev.ua>, 2011. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config 2.9.91\n" +"Project-Id-Version: xkeyboard-config 2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-15 09:51+0400\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 19:29+0400\n" "Last-Translator: Yuri Kozlov <yuray@komyakino.ru>\n" "Language-Team: Russian <gnu@mx.ru>\n" "Language: ru\n" @@ -796,34 +796,34 @@ msgstr "Английская (Коулмак)" #: ../rules/base.xml.in.h:195 msgid "English (Dvorak)" -msgstr "Английская (Дворак)" +msgstr "Английская (дворак)" #: ../rules/base.xml.in.h:196 msgid "English (Dvorak, international with dead keys)" -msgstr "Английская (Дворак, международная с спец. клавишами)" +msgstr "Английская (дворак, международная с спец. клавишами)" #: ../rules/base.xml.in.h:197 msgid "English (Dvorak alternative international no dead keys)" -msgstr "Английская (Дворак альтернативная международная без спец. клавиш)" +msgstr "Английская (дворак альтернативная международная без спец. клавиш)" #: ../rules/base.xml.in.h:198 msgid "English (left handed Dvorak)" -msgstr "Английская (Дворак под левую руку)" +msgstr "Английская (дворак под левую руку)" #: ../rules/base.xml.in.h:199 msgid "English (right handed Dvorak)" -msgstr "Английская (Дворак под правую руку)" +msgstr "Английская (дворак под правую руку)" #: ../rules/base.xml.in.h:200 msgid "English (classic Dvorak)" -msgstr "Английская (классическая Дворак)" +msgstr "Английская (классическая дворак)" #: ../rules/base.xml.in.h:201 msgid "English (programmer Dvorak)" -msgstr "Английская (Дворак для программистов)" +msgstr "Английская (дворак для программистов)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -895,11 +895,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Узбекская (Афганистан, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Арабская" @@ -937,11 +937,11 @@ msgid "Albanian" msgstr "Албанская" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Армянская" @@ -1017,11 +1017,11 @@ msgid "Belarusian (Latin)" msgstr "Белорусская (латиница)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Бельгийская" @@ -1053,18 +1053,18 @@ msgstr "Бельгийская (спец. клавиши (dead keys) Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Бельгийская (Wang model 724 azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Бенгальская" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" -msgstr "Бенгальская (Индия, Probhat)" +msgid "Bangla (Probhat)" +msgstr "Бенгальская (пробхат)" #. Keyboard indicator for Indian layouts #: ../rules/base.xml.in.h:273 @@ -1076,28 +1076,28 @@ msgid "Indian" msgstr "Индийская" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Бенгальская (Индия)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" -msgstr "Бенгальская (Индия, Probhat)" +msgid "Bangla (India, Probhat)" +msgstr "Бенгальская (Индия, пробхат)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" -msgstr "Бенгальская (Индия, Baishakhi)" +msgid "Bangla (India, Baishakhi)" +msgstr "Бенгальская (Индия, байшакхи)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" -msgstr "Бенгальская (Индия, Bornona)" +msgid "Bangla (India, Bornona)" +msgstr "Бенгальская (Индия, борона)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" -msgstr "Бенгальская (Индия, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" +msgstr "Бенгальская (Индия, юни-гитанжали)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" -msgstr "Бенгальская (Индия, письменность Baishakhi)" +msgid "Bangla (India, Baishakhi Inscript)" +msgstr "Бенгальская (Индия, письменность байшакхи)" #. Keyboard indicator for Gujarati layouts #: ../rules/base.xml.in.h:282 @@ -1280,11 +1280,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Боснийская (клавиатура США с боснийскими буквами)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Португальская (Бразилия)" @@ -1294,19 +1294,19 @@ msgstr "Португальская (Бразилия, без спец. клав #: ../rules/base.xml.in.h:339 msgid "Portuguese (Brazil, Dvorak)" -msgstr "Португальская (Бразилия, Дворак)" +msgstr "Португальская (Бразилия, дворак)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" -msgstr "Португальская (Бразилия, nativo)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Португальская (Бразилия, навито)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" -msgstr "Португальская (Бразилия, nativo для клавиатур US)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Португальская (Бразилия, навито для клавиатур US)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Португальская (Бразилия, nativo для эсперанто)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Эсперанто (Бразилия, навито)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1390,7 +1390,7 @@ msgstr "Камерунская многоязыковая (azerty)" #: ../rules/base.xml.in.h:366 msgid "Cameroon Multilingual (Dvorak)" -msgstr "Камерунская многоязыковая (Дворак)" +msgstr "Камерунская многоязыковая (дворак)" #. Keyboard indicator for Burmese layouts #: ../rules/base.xml.in.h:368 @@ -1407,7 +1407,7 @@ msgstr "Французская (Канада)" #: ../rules/base.xml.in.h:371 msgid "French (Canada, Dvorak)" -msgstr "Французская (Канада, Дворак)" +msgstr "Французская (Канада, дворак)" #: ../rules/base.xml.in.h:372 msgid "French (Canada, legacy)" @@ -1460,2462 +1460,2482 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Тибетская (с цифрами ASCII)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Уйгурская" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Хорватская" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Хорватская (используются кавычки ёлочки как кавычки)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Хорватская (используются хорватские диграфы)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Хорватская (клавиатура США с хорватскими диграфами)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Хорватская (клавиатура США с хорватскими буквами)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Чешская" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Чешская (с клавишей <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Чешская (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Чешская (qwerty, расширенные функции Backslash)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Чешская (раскладка UCW, только символы акцентов)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" -msgstr "Чешская (Дворак США с поддержкой CZ UCW)" +msgstr "Чешская (дворак США с поддержкой CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Датская" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Датская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Датская (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Датская (Macintosh, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" -msgstr "Датская (Дворак)" +msgstr "Датская (дворак)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Голландская" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Голландская (спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Голландская (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Голландская (стандартная)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Дзонг-кэ (dz" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Эстонская" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Эстонская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" -msgstr "Эстонская (Дворак)" +msgstr "Эстонская (дворак)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Эстонская (клавиатура США с эстонскими буквами)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Персидская" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Персидская (с персидской доп. панелью)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Курдская (Иран, латинская Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Курдская (Иран, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Курдская (Иран, латинская Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Курдская (Иран, арабо-латинская)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Иракская" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Курдская (Ирак, латинская Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Курдская (Ирак, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Курдская (Ирак, латинская alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Курдская (Ирак, арабо-латинская)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Фарерская" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Фарерская (без спец. клавиш (dead keys))" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Финская" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Финская (классическая)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Финская (классическая, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Северная Саамская (Финляндия)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Финская (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Французская" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Французская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Французская (со спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Французская (альтернативная)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Французская (альтернативная, только Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Французская (альтернативная, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Французская (альтернативная, спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Французская (устаревшая, альтернативная)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Французская (устаревшая, альтернативная, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Французская (устаревшая, альтернативная, с спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" -msgstr "Французская (Бепо, эргономичная, похожая на Дворак)" +msgstr "Французская (Бепо, эргономичная, похожа на дворак)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" -msgstr "Французская (Бепо, эргономичная, похожая на Дворак, только Latin-9)" +msgstr "Французская (Бепо, эргономичная, похожа на дворак, только Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" -msgstr "Французская (Дворак)" +msgstr "Французская (дворак)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Французская (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Французская (бретонская)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Окситанский" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Грузинская (Франция, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Английская (Гана)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Английская (Гана, международная)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Аканская" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Фулайская" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Гайская" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Хауза" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Аватайм" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Английская (Гана, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Французская (Гвинея)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Грузинская" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Georgian (эргономичная)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Грузинская (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Русская (Грузия)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Осетинская (Грузия)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Немецкая" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Немецкая (с акутом (dead acute))" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Немецкая (с dead grave acute)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Немецкая (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Немецкая (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Румынская (Германия)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Румынская (Германия, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" -msgstr "Немецкая (Дворак)" +msgstr "Немецкая (дворак)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Немецкая (со спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Немецкая (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Немецкая (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Немецкая (Macintosh, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Нижнелужицкая" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Нижнелужицкая (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Немецкая (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Русская (Германия, фонетическая)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Немецкая (устаревшая)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Греческая" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Греческая (простая)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Греческая (расширенная)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Греческая (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Греческая (полифоническая)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Венгерская" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Венгерская (стандартная)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Венгерская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Венгерская (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Венгерская (101/qwertz/запятая/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Венгерская (101/qwertz/запятая/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Венгерская (101/qwertz/точка/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Венгерская (101/qwertz/точка/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Венгерская (pc101/qwerty/запятая/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Венгерская (pc101/qwerty/запятая/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Венгерская (pc101/qwerty/точка/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Венгерская (pc101/qwerty/точка/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Венгерская (102/qwertz/запятая/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Венгерская (102/qwertz/запятая/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Венгерская (102/qwertz/точка/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Венгерская (102/qwertz/точка/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Венгерская (102/qwerty/запятая/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Венгерская (102/qwerty/запятая/без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Венгерская (102/qwerty/точка/спец. клавиши (dead keys))" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Венгерская (102/qwerty/точка/без спец. клавиш (dead keys))" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Исландская" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Исландская (спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Исландская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Исландская (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" -msgstr "Исландская (Дворак)" +msgstr "Исландская (дворак)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Иврит" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Иврит (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Иврит (фонетическая)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Иврит (библейский, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Итальянская" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Итальянская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Итальянская (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Итальянская (клавиатура США с итальянскими буквами)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Грузинская (Италия)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Итальянская (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Японская" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Японская (Кана)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Японская (Кана 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Японская (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Японская (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" -msgstr "Японская (Дворак)" +msgstr "Японская (дворак)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Киргизская" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Киргизская (фонетическая)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Кхмерская (Камбоджа)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Казахская" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Русская (Казахстан, с казахской)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Казахская (с русским)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Лаосская" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Лаосская (стандартная раскладка, предложенная STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Испанская (латиноамериканская)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Испанская (латиноамериканская, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Испанская (латиноамериканская, с dead tilde)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Испанская (латиноамериканская, с спец. клавишами (dead keys) Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Литовская" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Литовская (стандартная)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Литовская (клавиатура США с литовскими буквами)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Литовская (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Литовская (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Литовская (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Латышская" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Латышская (вариант с апострофом)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Латышская (вариант с тильдой)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Латышская (вариант с F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Латышская (современная)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Латышская (эргономичная, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Латышская (адаптированная)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Маори" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Черногорская" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Черногорская (кириллица)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Черногорская (кириллица, З и Ж переставлены местами)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Черногорская (латинская юникодная)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Черногорская (латинская qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Черногорская (латинская юникодная qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Черногорская (кириллица с кавычками ёлочками)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Черногорская (латинская с кавычками ёлочками)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Македонская" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Македонская (без спец. клавиш (dead keys))" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Мальтийская" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Мальтийская (с раскладкой США)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Монгольская" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Норвежская" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Норвежская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" -msgstr "Норвежская (Дворак)" +msgstr "Норвежская (дворак)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Северная Саамская (Норвегия)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Северная Саамская (Норвегия, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Норвежская (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Норвежская (Macintosh, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Норвежская (Коулмак)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Польская" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Польская (устаревшая)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Польская (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" -msgstr "Польская (Дворак)" +msgstr "Польская (дворак)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" -msgstr "Польская (Дворак, польские кавычки на клавишах с кавычками)" +msgstr "Польская (дворак, польские кавычки на клавишах с кавычками)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" -msgstr "Польская (Дворак, польские кавычки на клавише 1)" +msgstr "Польская (дворак, польские кавычки на клавише 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Кашубская" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" -msgstr "Русский (Польша, фонетический Дворак)" +msgstr "Русский (Польша, фонетический дворак)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" -msgstr "Польская (Дворак для программистов)" +msgstr "Польская (дворак для программистов)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Португальская" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Португальская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Португальская (спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Португальская (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Португальская (Macintosh, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Португальская (Macintosh, спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Португальская (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Португальская (Nativo для клавиатур US)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Эсперанто (Португалия, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Румынская" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Румынская (седиль)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Румынская (стандартная)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Румынская (стандартная седиль)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Румынская (клавиши Win)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Русская" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Русская (фонетическая)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Русская (фонетическая с клавишами Win)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Русская (печатная машинка)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Русская (устаревшая)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Русская (печатная машинка, устаревшая)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Татарская" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Осетинская (устаревшая)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Осетинская (с клавишами Win)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Чувашия" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Чувашская (латиница)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Удмуртская" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Коми" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Якутская" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Калмыцкая" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Русская (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Русская (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Сербская (Россия)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Башкирская" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Марийская" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Сербская" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Сербская (кириллица, З и Ж переставлены местами)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Сербская (латинская)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Сербская (латинская юникодная)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Сербская (латинская qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Сербская (латинская юникодная qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Сербская (кириллица с кавычками ёлочками)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Сербская (латинская с кавычками ёлочками)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Паннонская русинская (омофоническая)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Паннонская русинская" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Словенская" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Словенская (используются кавычки ёлочки как кавычки)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Словенская (клавиатура США с словенскими буквами)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Словацкая" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Словацкая (расширенные функции Backslash)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Словацкая (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Словацкая (qwerty, расширенные функции Backslash)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Испанская" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Испанская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Испанская (с dead tilde)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Испанская (с спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" -msgstr "Испанская (Дворак)" +msgstr "Испанская (дворак)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Астурлеонская (испанский вариант с нижними точками у H и L)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Каталонская (испанский вариант с точкой в L посередине)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Испанская (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Шведская" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Шведская (без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" -msgstr "Шведская (Дворак)" +msgstr "Шведская (дворак)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Русская (Швеция, фонетическая)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Русская (Швеция, фонетическая, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Северная Саамская (Швеция)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Шведская (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Шведская (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Шведский язык жестов" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Немецкая (Швейцария)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Немецкая (Швейцария, устаревшая)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Немецкая (Швейцария, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Немецкая (Швейцария, с спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Французская (Швейцария)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Французская (Швейцария, без спец. клавиш (dead keys))" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Французская (Швейцария, спец. клавиши (dead keys) Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Французская (Швейцария, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Немецкая (Швейцария, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Арабская (Сирия)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Сирийская" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Сирийская (фонетическая)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Курдская (Сирия, латинская Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Курдская (Сирия, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Курдская (Сирия, латинская Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Таджикская" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Таджикская (устаревшая)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Сингальская (фонетическая)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Тамильская (Шри-Ланка, юникодная)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Тамильская (Шри-Ланка, печатная машинка TAB)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Тайская" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Тайская (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Тайская (паттачотская)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Турецкая" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Турецкая (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Турецкая (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Турецкая (со спец. клавишами (dead keys) Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Курдская (Турция, латинская Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Курдская (Турция, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Курдская (Турция, латинская Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Турецкая (международная со спец. клавишами)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Крымско-татарская (турецкая Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Крымско-татарская (турецкая F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Крымско-татарская (турецкая Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Тайваньская" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Тайваньская (туземная)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Сайсьят (Тайвань)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Украинская" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Украинская (фонетическая)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Украинская (печатная машинка)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Украинская (с клавишами Win)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Украинская (устаревшая)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Украинская (стандартная RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Русская (Украина, стандартная RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Украинская (омофоническая)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Английская (Великобритания)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Английская (Великобритания, расширенная клавишами Win)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Английская (Великобритания, международная с спец. клавишами (dead keys))" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" -msgstr "Английская (Великобритания, Дворак)" +msgstr "Английская (Великобритания, дворак)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" -msgstr "Английская (Великобритания, Дворак с английской пунктуацией)" +msgstr "Английская (Великобритания, дворак с английской пунктуацией)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Английская (Великобритания, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Английская (Великобритания, Macintosh международная)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Английская (Великобритания, Коулмак)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Узбекская" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Узбекская (латинская)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "Вьетнамская" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Корейская" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Корейская (совместимая c 101/104 кнопочной)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Японская (PC-98xx Series)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Ирландская" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "CloGaelach" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Ирландская (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Огхам" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Огхам (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Урдская (Пакистан)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Урдская (Пакистан, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Урдская (Пакистан, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Арабская (Пакистан)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Синдхи" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Дивехи" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Английская (Южная Африка)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Эсперанто" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Эсперанто (смещённые точка с запятой и кавычка, устарела)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Непальская" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Английская (Нигерия)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Игбо" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Йорубская" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Амхарская" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Волофская" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Брайля" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Брайля (под левую руку)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Брайля (под правую руку)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Туркменская" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Туркменская (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Баманская" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Французская (Мали, альтернативная)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Английская (Мали, Macintosh США)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Английская (Мали, международная США)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Суахильская (Танзания)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Суахильская (Кения)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Кикуйу" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Тсванская" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Филиппинская" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Филиппинская (QWERTY байбайинская)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" -msgstr "Филиппинская (Кэйпвелл-Дворак латиница)" +msgstr "Филиппинская (кэйпвелл-дворак латиница)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" -msgstr "Филиппинская (Кэйпвелл-Дворак байбайинcкая)" +msgstr "Филиппинская (кэйпвелл-дворак байбайинcкая)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Филиппинская (Кэйпвелл-QWERF 2006 латиница)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Филиппинская (Кэйпвелл-QWERF 2006 байбайинская)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Филиппинская (Коулмак латиница)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Филиппинская (Коулмак байбайинская)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" -msgstr "Филиппинская (Дворак латиница)" +msgstr "Филиппинская (дворак латиница)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" -msgstr "Филиппинская (Дворак байбайинcкая)" +msgstr "Филиппинская (дворак байбайинcкая)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Молдавская" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Молдавская (гагаузская)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Переключение на другую раскладку" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Правая клавиша Alt (пока нажата)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Левая клавиша Alt (пока нажата)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Левая клавиша Win (пока нажата)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Правая клавиша Win (пока нажата)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Любая клавиша Win (на время нажатия)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Правая клавиша Ctrl (пока нажата)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Правая клавиша Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Левая клавиша Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (на первую раскладку), Shift+Caps Lock (на последнюю раскладку)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Левая Win (на первую раскладку), Правая Win/Menu (на последнюю раскладку)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Левая Ctrl (на первую раскладку), Правая Ctrl (на последнюю раскладку)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Обе клавиши Shift, нажатые вместе" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Обе клавиши Alt, нажатые вместе" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Обе клавиши Ctrl, нажатые вместе" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Левая Ctrl+Левая Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Правая Ctrl+Правая Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Левая Alt+Левая Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Пробел" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Левая клавиша Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Правая клавиша Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Левая клавиша Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Правая клавиша Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Левая клавиша Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Правая клавиша Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Левая-Ctrl+Левая-Win (на первую раскладку), Правая-Ctrl+Menu (на вторую раскладку)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Клавиша для выбора 3-го ряда" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Любая клавиша Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Любая клавиша Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Правая клавиша Alt, Shift и правая Alt вместе работают как Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "По правой клавише Alt никогда не выбирается третий ряд" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter на цифровой клавиатуре" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Backslash" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Меньше чем/Больше чем>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Caps Lock выбирается 3-й ряд, действует как разовая блокировка при нажатии вместе с другим выборщиком-3-го-ряда" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Backslash выбирается 3-й ряд, действует как разовая блокировка при нажатии вместе с другим выборщиком-3-го-ряда" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Меньше чем/Больше чем> выбирается 3-й ряд, действует как разовая блокировка при нажатии вместе с другим выборщиком-3-го-ряда" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Положение клавиши Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock как Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Левая клавиша Ctrl как Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Поменять местами клавиши Ctrl и Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Слева от 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Снизу слева" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Правая клавиша Ctrl работает как правая клавиша Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu как правая клавиша Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Правая клавиша Alt как правая клавиша Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Левая клавиша Alt поменяна местами с левой клавишей Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Левая клавиша Win поменяна местами с левой клавишей Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Левая клавиша Alt как Ctrl, левая клавиша Ctrl как Win, левая клавиша Win как Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Использовать клавиатурные индикаторы для отображения дополнительных раскладок" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Раскладка цифровой клавиатуры" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Legacy" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Дополнения юникода (стрелки и математические операторы)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Дополнения юникода (стрелки и математические операторы; математические операторы в ряду по умолчанию)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Старая Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "Wang 724 keypad with Unicode additions (arrows and math operators; math operators on default level)" msgstr "Цифровая клавиатура Wang 724 с дополнениями юникода (стрелки и математические операторы; математические операторы в ряду по умолчанию)" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Шестнадцатеричная" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "В стиле банкоматной/телефонной" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Функция клавиши Delete на цифровой клавиатуре" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Клавиша Legacy с точкой" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Клавиша Legacy с запятой" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Четырёх-рядная клавиша с точкой" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Четырёх-рядная клавиша с точкой, только Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Четырёх-рядная клавиша с запятой" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Четырёх-рядная клавиша с momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Четырёх-рядная клавиша с абстрактными разделителями" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Точка с запятой в третьем ряду" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Поведение клавиши Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock включает внутреннюю капитализацию; Shift «приостанавливает» действие Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock включает внутреннюю капитализацию; Shift не влияет на Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock действует как Shift с блокировкой; Shift «приостанавливает» действие Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock переключает обычную капитализацию символов алфавита" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Использовать Caps Lock как дополнительную клавишу Num Lock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Поменять местами клавиши ESC и Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Использовать Caps Lock как дополнительную клавишу ESC" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Использовать Caps Lock как дополнительную клавишу Backspace" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Использовать Caps Lock как дополнительную клавишу Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Использовать Caps Lock как дополнительную клавишу Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock переключает ShiftLock (действует сразу на все клавиши)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock отключён" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Использовать Caps Lock как дополнительную клавишу Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Поведение клавиши Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Добавить обыкновенное поведение на клавишу Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt и Meta на клавишах Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt используется в качестве клавиш Win (и как обычный Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl используется в качестве клавиш Win (и как обычные клавиши Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl используется в качестве клавиш Alt; Alt используется в качестве клавиш Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta соответствует клавишам Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta соответствует левой клавише Win" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper соответствует клавишам Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Alt соответствует правой клавише Win, а Super — Menu" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Клавиша Alt поменяна местами с клавишей Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Положение клавиши Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3-й ряд левой Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3-й ряд правой Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3-й ряд Menu" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3-й ряд левой Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3-й ряд правой Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3-й ряд Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3-й ряд <Меньше чем/Больше чем>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Разные параметры совместимости" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Клавиши цифровой клавиатуры по умолчанию" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "С клавиш цифровой клавиатуры всегда вводятся цифры (как в Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Клавиша Shift с клавишами цифровой клавиатуры работают также как в MS Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift не отменяет Num Lock, а выбирает третий ряд" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Специальные клавиши (Ctrl+Alt+<клв>) обрабатываются сервером" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift отменяет Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Включить дополнительные типографские символы" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Обе клавиши Shift, нажатые вместе, переключают Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Обе клавиши Shift, нажатые вместе, включают Caps Lock, одна клавиша Shift выключает" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Обе клавиши Shift, нажатые вместе, переключают ShiftLock" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock переключают PointerKeys" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Позволить прерывать захват с помощью клавиатуры (предупреждение: угроза безопасности)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Позволить захват и протоколирование дерева окон" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Добавление знаков валют к некоторым клавишам" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Символ евро на клавише E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Символ евро на клавише 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Символ евро на клавише 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Символ евро на клавише 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Символ рупии на клавише 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Клавиша для выбора 5-го ряда" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "По клавише <Меньше чем/Больше чем> выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "По правой клавише Alt выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "По левой клавише Win выбирается 5-й ряд, блокирует, блокирует при нажатии вместе с другим выборщиком-5-го-ряда" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "По правой клавише Win выбирается 5-й ряд, блокируется при нажатии вместе с другим выборщиком-5-го-ряда" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Клавиша пробела используется для ввода символа неразрывного пробела" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Обычный пробел в любом ряду" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Символ неразрывного пробела во втором ряду" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Символ неразрывного пробела в третьем ряду" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Символ неразрывного пробела в третьем ряду, ничего на четвёртом" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Символ неразрывного пробела в третьем ряду, символ тонкого неразрывного пробела в четвёртом ряду" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Символ неразрывного пробела в четвёртом ряду" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Символ неразрывного пробела в четвёртом ряду, символ тонкого неразрывного пробела в шестом ряду" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Несвязывающий символ нулевой ширины во втором ряду" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Несвязывающий символ нулевой ширины во втором ряду, связывающий символ нулевой ширины в третьем ряду" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Несвязывающий символ нулевой ширины во втором ряду, символ неразрывного пробела в третьем ряду" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Несвязывающий символ нулевой ширины в третьем ряду, связывающий символ нулевой ширины в четвёртом ряду" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Настройки японской клавиатуры" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Кана блокируется клавишей Lock" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "Backspace в стиле NICOLA-F" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Использовать Zenkaku Hankaku как дополнительную клавишу ESC" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Добавление букв эсперанто с надстрочными знаками" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "На соответствующую клавишу в раскладке Qwerty" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" -msgstr "На соответствующую клавишу в раскладке Дворак" +msgstr "На соответствующую клавишу в раскладке дворак" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "На соответствующую клавишу в раскладке Коулмак" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Сохранить совместимость со старыми кодами клавиш Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Совместимость с клавишами Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Комбинация клавиш для прерывания работы X-сервера" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -3965,7 +3985,7 @@ msgstr "Авестийская" #: ../rules/base.extras.xml.in.h:20 msgid "Lithuanian (US Dvorak with Lithuanian letters)" -msgstr "Литовская (Дворак США с литовскими буквами)" +msgstr "Литовская (дворак США с литовскими буквами)" #: ../rules/base.extras.xml.in.h:21 msgid "Lithuanian (Sun Type 6/7)" @@ -3973,27 +3993,27 @@ msgstr "Литовская (Sun Type 6/7)" #: ../rules/base.extras.xml.in.h:24 msgid "Latvian (US Dvorak)" -msgstr "Латышская (Дворак США)" +msgstr "Латышская (дворак США)" #: ../rules/base.extras.xml.in.h:25 msgid "Latvian (US Dvorak, Y variant)" -msgstr "Латышская (Дворак США, вариант с Y)" +msgstr "Латышская (дворак США, вариант с Y)" #: ../rules/base.extras.xml.in.h:26 msgid "Latvian (US Dvorak, minus variant)" -msgstr "Латышская (Дворак США, вариант с минусом)" +msgstr "Латышская (дворак США, вариант с минусом)" #: ../rules/base.extras.xml.in.h:27 msgid "Latvian (programmer US Dvorak)" -msgstr "Латышская (Дворак США для программистов)" +msgstr "Латышская (дворак США для программистов)" #: ../rules/base.extras.xml.in.h:28 msgid "Latvian (programmer US Dvorak, Y variant)" -msgstr "Латышская (Дворак США для программистов, вариант с Y)" +msgstr "Латышская (дворак США для программистов, вариант с Y)" #: ../rules/base.extras.xml.in.h:29 msgid "Latvian (programmer US Dvorak, minus variant)" -msgstr "Латышская (Дворак США для программистов, вариант с минусом)" +msgstr "Латышская (дворак США для программистов, вариант с минусом)" #: ../rules/base.extras.xml.in.h:30 msgid "Latvian (US Colemak)" @@ -4027,150 +4047,160 @@ msgstr "Салишская Кёр-д’Ален" msgid "English (US, Sun Type 6/7)" msgstr "Английская (США, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Английская (нормандская)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Польская (международная со спец. клавишами)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Польская (Коулмак)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Польская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Крымско-татарская (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Румынская (эргономичная для слепой печати)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Румынская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Сербская (объединённые надбуквенные знаки вместе спец. клавиш (dead keys))" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Русская (с украинско-белорусской раскладкой)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Русская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Армянская (фонетическая на OLPC)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Иврит (Библейская, фонетическая SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Арабская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Бельгийская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Португальская (Бразилия, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Чешская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Датская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Голландская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Эстонская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Финская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Французская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Греческая (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Итальянская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Японская (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Японская (Sun Type 7, совместимая с pc)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Японская (Sun Type 7, совместимая с sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Норвежская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Португальская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Словацкая (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Испанская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Шведская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Немецкая (Швейцария, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Французская (Швейцария, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Турецкая (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Украинская (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Английская (Великобритания, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Корейская (Sun Type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Бенгальская" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Португальская (Бразилия, nativo для эсперанто)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Английская (переключение раскладки по клавише умножения/деления)" @@ -4441,9 +4471,6 @@ msgstr "Корейская (Sun Type 6/7)" #~ msgid "Aze" #~ msgstr "Aze" -#~ msgid "Bangladesh" -#~ msgstr "Бангладеш" - #~ msgid "Bel" #~ msgstr "Bel" diff --git a/xorg-server/xkeyboard-config/po/uk.po b/xorg-server/xkeyboard-config/po/uk.po index d01490d71..7326eb1f4 100644 --- a/xorg-server/xkeyboard-config/po/uk.po +++ b/xorg-server/xkeyboard-config/po/uk.po @@ -7,13 +7,13 @@ # Andriy Rysin <arysin@bcsii.com>, 2007, 2008. # Andriy Rysin <arysin@gmail.com>, 2008. # Maxim V. Dziumanenko <dziumanenko@gmail.com>, 2004-2011. -# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013. +# Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014. msgid "" msgstr "" -"Project-Id-Version: xkeyboard-config-2.9.91\n" +"Project-Id-Version: xkeyboard-config-2.10.99\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-14 14:41+0200\n" -"PO-Revision-Date: 2013-09-14 16:08+0300\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\n" +"PO-Revision-Date: 2014-01-15 16:54+0200\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" "Language: uk\n" @@ -822,7 +822,7 @@ msgid "English (programmer Dvorak)" msgstr "Англійська (програмістський Дворак)" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "ru" @@ -894,11 +894,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "Узбецька (Афганістан, OLPC)" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "ar" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "Арабська" @@ -936,11 +936,11 @@ msgid "Albanian" msgstr "Албанська" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "hy" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "Вірменська" @@ -1016,11 +1016,11 @@ msgid "Belarusian (Latin)" msgstr "Білоруська (латиниця)" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "be" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "Бельгійська" @@ -1052,17 +1052,17 @@ msgstr "Бельгійська (сліпі клавіші Sun)" msgid "Belgian (Wang model 724 azerty)" msgstr "Бельгійська (модель Wang 724, azerty)" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "bn" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "Бенгальська" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "Бенгальська (пробхат)" #. Keyboard indicator for Indian layouts @@ -1075,27 +1075,27 @@ msgid "Indian" msgstr "Індійська" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "Бенгальська (Індія)" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "Бенгальська (Індія, пробхат)" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "Бенгальська (Індія, байшахі)" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "Бенгальська (Індія, борнона)" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "Бенгальська (Індія, уні гітанджалі)" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "Бенгальська (Індія, байшахі, індійські символи)" #. Keyboard indicator for Gujarati layouts @@ -1279,11 +1279,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "Боснійська (клавіатура США з боснійськими літерами)" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "pt" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "Португальська (Бразилія)" @@ -1296,16 +1296,16 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "Португальська (Бразилія, Дворак)" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" -msgstr "Португальська (Бразилія, nativo)" +msgid "Portuguese (Brazil, Nativo)" +msgstr "Португальська (Бразилія, Nativo)" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" -msgstr "Португальська (Бразилія, nativo для клавіатур США)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" +msgstr "Португальська (Бразилія, Nativo для американських клавіатур)" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" -msgstr "Португальська (Бразилія, nativo для есперанто)" +msgid "Esperanto (Brazil, Nativo)" +msgstr "Есперанто (бразильська, Nativo)" #. Keyboard indicator for Bulgarian layouts #: ../rules/base.xml.in.h:344 @@ -1459,2462 +1459,2482 @@ msgid "Tibetan (with ASCII numerals)" msgstr "Тибетська (з ASCII числами)" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "ug" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "Уйгурська" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "hr" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "Хорватська" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "Хорватська (кутові лапки)" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "Хорватська (з хорватськими диграфами)" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "Хорватська (клавіатура США з хорватськими диграфами)" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "Хорватська (клавіатура США з хорватськими літерами)" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "cs" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "Чеська" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "Чеська (з клавішею <\\|>)" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "Чеська (qwerty)" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "Чеська (qwerty, розширені функції Backslash)" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "Чеська (UCW-розкладка, лише літери з акцентами)" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "Чеська (Дворак-США з підтримкою CZ UCW)" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "da" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "Данська" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "Данська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "Данська (Macintosh)" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "Данська (Macintosh, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "Данська (Дворака)" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "nl" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "Голландська" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "Голландська (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "Голландська (Macintosh)" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "Голландська (стандартна)" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "dz" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "Дзонг-ке" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "et" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "Естонська" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "Естонська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "Естонська (Дворака)" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "Естонська (клавіатура США з естонськими літерами)" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "Перська" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "Перська (з перською дод. панеллю)" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "ku" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "Курдська (Іран, латиниця Q)" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "Курдська (Іран, F)" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "Курдська (Іран, латиниця Alt-Q)" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "Курдська (Іран, арабсько-латинська)" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "Іракська" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "Курдська (Ірак, латиниця Q)" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "Курдська (Ірак, F)" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "Курдська (Ірак, латиниця Alt-Q)" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "Курдська (Ірак, арабсько-латинська)" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "fo" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "Фарерська" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "Фарерська (вимкнути сліпі клавіші)" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "fi" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "Фінська" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "Фінська (класична)" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "Фінська (класична, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "Північно-саамська (Фінляндія)" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "Фінська (Macintosh)" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "Французька" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "Французька (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "Французька (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "Французька (альтернативна)" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "Французька (альтернативна, лише Latin-9)" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "Французька (альтернативна, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "Французька (альтернативна, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "Французька (застаріла, альтернативна)" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "Французька (застаріла, альтернативна, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "Французька (застаріла, альтернативна, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "Французька (Bepo, ергономічна, варіант Дворак)" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "Французька (Bepo, ергономічна, варіант Дворак, лише Latin-9)" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "Французька (Дворак)" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "Французька (Macintosh)" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "Французька (бретонська)" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "Окситанська" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "Грузинська (Франція, AZERTY Tskapo)" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "Англійська (Гана)" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "Англійська (Гана, інтернаціональна)" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "ak" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "Акан" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "ee" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "Ewe" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "ff" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "Фула" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "gaa" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "Га" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "ha" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "Hausa" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "avn" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "Аватіме" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "Англійська (Гана, GILLBT)" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "Французька (Гвінея)" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "ka" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "Грузинська" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "Грузинська (ергономічна)" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "Грузинська (MESS)" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "Російська (Грузія)" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "Осетинська (Грузія)" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "Німецька" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "Німецька (сліпий акут)" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "Німецька (сліпий наголос-акут)" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "Німецька (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "Німецька (T3)" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "Румунська (Німеччина)" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "Німецька (Німеччина, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "Німецька (Дворак)" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "Німецька (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "Німецька (Neo 2)" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "Німецька (Macintosh)" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "Німецька (Macintosh, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "Нижньолужицька" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "Нижньолужицька (qwertz)" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "Німецька (qwerty)" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "Російська (Німеччина, фонетична)" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "Німецька (застаріла)" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "gr" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "Грецька" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "Грецька (проста)" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "Грецька (розширена)" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "Грецька (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "Грецька (поліфонічна)" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "hu" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "Угорська" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "Угорська (стандартна)" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "Угорська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "Угорська (qwerty)" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "Угорська (101/qwertz/кома/сліпі клавіші)" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "Угорська (101/qwertz/крапка/сліпі клавіші)" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "Угорська (101/qwertz/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "Угорська (101/qwerty/кома/сліпі клавіші)" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "Угорська (101/qwerty/кома/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "Угорська (101/qwerty/крапка/сліпі клавіші)" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "Угорська (101/qwerty/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "Угорська (102/qwertz/кома/сліпі клавіші)" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "Угорська (102/qwertz/крапка/сліпі клавіші)" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "Угорська (102/qwertz/крапка/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "Угорська (102/qwerty/кома/сліпі клавіші)" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "Угорська (102/qwerty/кома/вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "Угорська (102/qwerty/крапка/сліпі клавіші)" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "Угорська (102/qwerty/крапка/вимкнути сліпі клавіші)" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "is" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "Ісландська" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "Ісландська (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "Ісландська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "Ісландська (Macintosh)" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "Ісландська (Дворак)" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "he" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "Іврит" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "Іврит (lyx)" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "Іврит (фонетична)" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "Іврит (Біблейська, Tiro)" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "it" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "Італійська" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "Італійська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "Італійська (Macintosh)" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "Італійська (клавіатура США з італійськими літерами)" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "Грузинська (Італія)" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "Італійська (IBM 142)" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "ja" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "Японська" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "Японська (кана)" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "Японська (кана 86)" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "Японська (OADG 109A)" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "Японська (Macintosh)" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "Японська (Дворак)" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "ki" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "Киргизька" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "Киргизька (фонетична)" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "km" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "Кхмерська (Камбоджа)" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "kk" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "Казахська" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "Російська (Казахстан, з казахською)" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "Казахська (з російськими)" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "lo" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "Лаоська" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "Лаоська (стандартна розкладка, запропонована STEA)" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "es" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "Іспанська (латиноамериканська)" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "Іспанська (латиноамериканська, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "Іспанська (латиноамериканська зі «спеціальною» тильдою)" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "Іспанська (латиноамериканська, сліпі клавіші Sun)" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "lt" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "Литовська" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "Литовська (стандартна)" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "Литовська (клавіатура США, з литовськими літерами)" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "Литовська (IBM LST 1205-92)" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "Литовська (LEKP)" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "Литовська (LEKPa)" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "lv" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "Латвійська" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "Латвійська (варіант з апострофом)" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "Латвійська (варіант з тильдою)" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "Латвійська (варіант з літерою F)" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "Латвійська (сучасна)" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "Латвійська (ергономічна, ŪGJRMV)" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "Латвійська (адаптована)" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "mi" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "Маорійська" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "sr" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "Чорногорська" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "Чорногорська (кирилиця)" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "Чорногорська (кирилиця, З та Ж поміняні місцями)" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "Чорногорська (латиниця, Unicode)" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "Чорногорська (латиниця, qwerty)" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "Чорногорська (латиниця, Unicode, qwerty)" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "Чорногорська (кирилиця з кутовими лапками)" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "Чорногорська (латиниця з кутовими лапками)" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "mk" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "Македонська" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "Македонська (вимкнути сліпі клавіші)" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "mt" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "Мальтійська" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "Мальтійська (клавіатура з розкладкою США)" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "mn" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "Монгольська" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "no" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "Норвезька" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "Норвезька (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "Норвезька (Дворак)" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "Північно-саамська (Норвегія)" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "Північно-саамська (Норвегія, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "Норвезька (Macintosh)" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "Норвезька (Macintosh, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "Норвезька (Колемак)" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "pl" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "Польська" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "Польська (застаріла)" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "Польська (qwertz)" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "Польська (Дворак)" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "Польська (Дворак, польські лапки на знаку лапки)" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "Польська (Дворак, польські лапки на клавіші 1)" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "Кашубська" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "Російська (Польща, фонетична Дворака)" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "Польська (програмістський Дворак)" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "Португальська" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "Португальська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "Португальська (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "Португальська (Macintosh)" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "Португальська (Macintosh, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "Португальська (Macintosh, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "Португальська (Nativo)" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "Португальська (nativo для клавіатур США)" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "Есперанто (португальська, Nativo)" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "ro" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "Румунська" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "Румунська (седиль)" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "Румунська (стандартна)" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "Румунська (стандартна седиль)" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "Румунська (з клавішами Win)" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "Російська" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "Російська (фонетична)" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "Російська (фонетична з клавішами Win)" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "Російська (машинопис)" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "Російська (застаріла)" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "Російська (машинопис, застаріла)" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "Татарська" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "Осетинська (застаріла)" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "Осетинська (з клавішами Win)" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "Чуваська" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "Чуваська (латиниця)" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "Удмуртська" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "Комі" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "Якутська" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "Калмицька" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "Російська (DOS)" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "Російська (Macintosh)" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "Сербська (Росія)" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "Башкирська" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "Марійська" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "Сербська" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "Сербська (кирилиця, З та Ж поміняні місцями)" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "Сербська (латиниця)" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "Сербська (латиниця Unicode)" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "Сербська (латиниця, qwerty)" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "Сербська (латиниця, Unicode qwerty)" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "Сербська (кирилиця з кутовими лапками)" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "Сербська (латиниця з кутовими лапками)" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" -msgstr "Паннонська русинська (гомофонна)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" +msgstr "Паннонська русинська" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "sl" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "Словенська" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "Словенська (кутові лапки)" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "Словенська (клавіатура США із словенськими літерами)" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "sk" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "Словацька" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "Словацька (розширені функції Backslash)" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "Словацька (qwerty)" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "Словацька (qwerty, розширені функції Backslash)" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "Іспанська" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "Іспанська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "Іспанська (зі «спеціальною» тильдою)" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "Іспанська (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "Іспанська (Дворак)" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "Астурійська (Іспанія, з H та L з нижньою крапкою)" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "Іспанська (Іспанія, варіант з L із середньою точкою)" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "Іспанська (Macintosh)" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "sv" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "Шведська" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "Шведська (вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "Шведська (Дворак)" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "Російська (шведська, фонетична)" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "Російська (шведська, фонетична, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "Північно-саамська (Швеція)" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "Шведська (Macintosh)" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "Шведська (Svdvorak)" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "Шведська мова жестів" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "Німецька (Швейцарія)" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "Німецька (Швейцарія, застаріла)" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "Німецька (Швейцарія, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "Німецька (Швейцарія, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "Французька (Швейцарія)" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "Французька (Швейцарія, вимкнути сліпі клавіші)" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "Французька (Швейцарія, сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "Французька (Швейцарія, Macintosh)" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "Німецька (Швейцарія, Macintosh)" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "Арабська (Сирія)" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "syc" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "Сирійська" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "Сирійська (фонетична)" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "Курдська (Сирія, латиниця Q)" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "Курдська (Сирія, F)" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "Курдська (Сирія, латиниця Alt-Q)" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "tg" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "Таджицька" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "Таджицька (застаріла)" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "si" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "Сингальська (фонетична)" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "Тамільська (Шрі-Ланка, Unicode)" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "Тамільська (Шрі-Ланка, TAB, машинопис)" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "th" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "Тайська" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "Тайська (TIS-820.2538)" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "Тайська (паттачот)" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "tr" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "Турецька" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "Турецька (F)" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "Турецька (Alt-Q)" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "Турецька (сліпі клавіші Sun)" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "Курдська (Туреччина, латиниця Q)" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "Курдська (Туреччина, F)" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "Курдська (Туреччина, латиниця Alt-Q)" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "Турецька (інтернаціональна зі сліпими клавішами)" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "crh" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "Кримськотатарська (турецька Q)" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "Кримськотатарська (турецька F)" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "Кримськотатарська (турецька Alt-Q)" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "Тайванська" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "Тайванська (місцева)" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "xsy" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "Сайсіят (Тайвань)" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "uk" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "Українська" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "Українська (фонетична)" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "Українська (друкарська машинка)" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "Українська (з клавішами Win)" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "Українська (застаріла)" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "Українська (стандартна RSTU)" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "Російська (Україна, стандартна RSTU)" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "Українська (гомофонна)" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "Англійська (Великобританія)" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "Англійська (Великобританія, розширена, з клавішами Win)" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "Англійська (Великобританія, інтернаціональна зі сліпими клавішами)" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "Англійська (Великобританія, Дворак)" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "Англійська (Великобританія, Дворак з британською пунктуацією)" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "Англійська (Великобританія, Macintosh)" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "Англійська (Великобританія, інтернаціональна Macintosh)" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "Англійська (США, Коулмак)" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "Узбецька" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "Узбецька (латиниця)" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "vi" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "В'єтнамська" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "ko" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "Корейська" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "Корейська (сумісна з 101/104 клавішною)" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "Японська (родина PC-98xx)" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "ie" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "Ірландська" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "Гаельський шрифт" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "Ірландська (UnicodeExpert)" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "Огам" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "Огам (IS434)" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "Урду (Пакистан)" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "Урду (Пакистан, CRULP)" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "Урду (Пакистан, NLA)" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "Арабська (Пакистан)" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "sd" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "Синдхі" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "dv" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "Мальдивська" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "Англійська (ПАР)" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "eo" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "Есперанто" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "Есперанто (посунута крапка з комою та лапки, застаріла)" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "ne" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "Непальська" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "Англійська (Нігерія)" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "ig" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "Igbo" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "yo" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "Йоруба" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "am" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "Амхарська" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "wo" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "Волоф" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "brl" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "Брайля" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "Брайля (для шульги)" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "Брайль (для правші)" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "tk" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "Туркменська" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "Туркменська (Alt-Q)" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "bm" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "Бамбара" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "Французька (Малі, альтернативна)" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "Англійська (Малі, Macintosh США)" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "Англійська (Малі, інтернаціональна США)" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "sw" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "Суахілі (Танзанія)" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "Суахілі (Кенія)" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "Кікуйю" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "tn" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "Тсвана" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "ph" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "Філіппінська" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "Філіппінська (QWERTY, байбаїн)" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "Філіппінська (Кейпвелл-Дворак, латиниця)" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "Філіппінська (Кейпвелл-Дворак, байбаїн)" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "Філіппінська (Кейпвелл-QWERF 2006, латиниця)" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "Філіппінська (Кейпвелл-QWERF 2006, байбаїн)" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "Філіппінська (Коулмак, латиниця)" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "Філіппінська (Коулмак, байбаїн)" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "Філіппінська (Дворак, латиниця)" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "Філіппінська (Дворат, байбаїн)" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "md" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "Молдавська" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "gag" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "Молдавська (гагаузька)" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "Перемикання на іншу розкладку" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "Права клавіша Alt (поки натиснена)" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "Ліва клавіша Alt (поки натиснена)" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "Ліва клавіша Win (поки натиснута)" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "Права клавіша Win (поки натиснена)" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "Будь-яка клавіша Win (на час натискання)" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 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:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "Права клавіша Ctrl (поки натиснута)" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "Права клавіша Alt" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "Ліва клавіша Alt" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "Caps Lock" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "Shift+Caps Lock" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "Caps Lock (на першу розкладку), Shift+Caps Lock (на останню розкладку)" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "Ліва Win (на першу розкладку), Права Win/Menu (на останню розкладку)" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "Ліва Ctrl (на першу розкладку), Правий Ctrl (на останню розкладку)" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "Alt+Caps Lock" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "Обидві клавіші Shift разом" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "Обидві клавіші Alt разом" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "Обидві клавіші Ctrl разом" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "Ctrl+Shift" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "Лівий Ctrl+Лівий Shift" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "Права Ctrl+Права Shift" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "Alt+Ctrl" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "Alt+Shift" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "Лівий Alt+Лівий Shift" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "Alt+Пробіл" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "Menu" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "Ліва клавіша Win" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "Права клавіша Win" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "Ліва клавіша Shift" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "Права клавіша Shift" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "Ліва клавіша Ctrl" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "Права клавіша Ctrl" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "Scroll Lock" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "Ліва Ctrl+ліва Win (на першу розкладку), правий Ctrl+Menu (на другу розкладку)" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "Клавіша для вибору 3-го ряду" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "Будь-яка клавіша Win" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "Будь-яка клавіша Alt" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "Правий Alt, Shift+правий Alt діють як Compose" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "Права клавіша Alt ніколи не обирає 3-й рівень" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "Enter на цифровій клавіатурі" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "Зворотна риска" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "<Менше ніж/Більше ніж>" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Caps Lock вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "Backslash chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "Зворотна похила риска вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed together with another 3rd-level-chooser" msgstr "<Менше/Більше> вибирає 3-ій рівень, одноразовий вибір регістру, якщо натиснути разом зі іншою комбінацією вибору 3-го рівня" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "Розташування клавіші Ctrl" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "Caps Lock працює як Ctrl" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "Ліва клавіша Ctrl як Meta" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "Поміняти місцями клавіші Ctrl та Caps Lock" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "Ліворуч від 'A'" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "Знизу ліворуч" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "Права клавіша Ctrl працює як права клавіша Alt" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "Menu працює як права клавіша Ctrl" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "Права клавіша Alt працює як права клавіша Ctrl" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "Поміняти місцями ліву клавішу Alt і ліву клавішу Ctrl" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "Поміняти місцями ліву клавішу Win і ліву клавішу Ctrl" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "Ліва клавіша Alt працює як Ctrl, ліва Ctrl — як Win, ліва Win — як Alt" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "Використовувати клавіатурні індикатори для індикації альтернативних розкладок" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "Num Lock" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "Розкладка цифрової клавіатури" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "Застаріла" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "Доповнення Unicode (стрілки та математичні оператори)" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "Unicode additions (arrows and math operators; math operators on default level)" msgstr "Доповнення Unicode (стрілки та математичні оператори; математичні оператори на типовому рівні)" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "Стара Wang 724" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "Клавіатура Wang 724 з доповненнями Unicode (стрілки та математичні оператори)" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 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:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "Шістнадцяткова" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "У стилі банкоматної/телефонної" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "Вибір поведінки клавіші del на цифровій клавіатурі" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "Застаріла клавіша з крапкою" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "Застаріла клавіша з комою" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "Клавіша четвертого рівня з крапкою" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "Клавіша четвертого рівня з крапкою, обмежена Latin-9" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "Клавіша четвертого рівня з комою" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "Клавіша четвертого рівня з momayyez" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "Клавіша четвертого рівня з абстрактним розділювачем " -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "Крапка з комою на третьому рівні" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "Поведінка клавіші Caps Lock" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift призупиняє дію Caps Lock" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "Caps Lock вмикає внутрішню капіталізацію. Shift не впливає на Caps Lock" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "Caps Lock дія як Shift з блокуванням. Shift призупиняє дію Caps Lock" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 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:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "Caps Lock вмикає звичайну капіталізацію символів алфавіту" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "Caps Lock — додаткова клавіша Num Lock" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "Поміняти місцями клавіші ESC та Caps Lock" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "Caps Lock — додаткова клавіша ESC" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "Caps Lock — додаткова клавіша Backspace" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "Caps Lock — додаткова клавіша Super" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "Caps Lock — додаткова клавіша Hyper" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "Caps Lock перемикає Shift (діє одразу на всі клавіші)" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "Caps Lock вимкнено" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "Caps Lock — додаткова клавіша Ctrl" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "Поведінка клавіш Alt/Win" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "Додати звичайну поведінку на клавішу Menu" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "Alt та Meta на клавішах Alt" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "Alt використовуються як Win (і як звичайні Alt)" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "Ctrl використовується як Win (і як звичайний Ctrl)" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "Ctrl використовується як клавіші Alt, Alt використовується як Win" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "Meta відповідає клавішам Win" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "Meta відповідає лівій клавіші Win" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "Hyper відповідає клавішам Win" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "Клавіша Alt відповідає правій клавіші Win, а Super - клавіші Menu." -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "Alt міняється з клавішею Win" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "Розташування клавіші Compose" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "3-ій рівень лівої Win" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "3-ій рівень правої Win" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "3-ій рівень клавіші меню" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "3-ій рівень лівої Ctrl" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "3-ій рівень правої Ctrl" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "3-ій рівень Caps Lock" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "3-ій рівень <Менше/Більше>" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "Pause" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "PrtSc" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "Різні параметри сумісності" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "Типові клавіші цифрової клавіатури" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "За допомогою цифрова клавіатура вводяться лише цифри (як у Mac OS)" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "Shift з цифровою клавіатурою працює як у Microsoft Windows" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "Shift не скасовує Num Lock, а вибирає третій рівень" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "Сліпі клавіші (Ctrl+Alt+<key>) обробляються на сервері" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 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:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "Shift скасовує Caps Lock" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "Увімкнути додаткові типографські символи" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "Обидві клавіші Shift разом перемикають стан Caps Lock" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "Натискання обох клавіш Shift вмикають Caps Lock, одна клавіша Shift — вимикає" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "Обидві клавіші Shift разом перемикають стан Shift" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "Shift + NumLock перемикає PointerKeys" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "Дозволити скасування захоплення діями з клавіатури (увага: небезпечно)" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "Дозволити захоплення і журналювання ієрархії вікон" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "Додавання знаків валюти до деяких клавіш" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "Євро на E" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "Євро на 2" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "Євро на 4" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "Євро на 5" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "Символ рупії на 4" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "Клавіша для вибору 5-го ряду" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "<Less/Greater> chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "<Менше ніж/Більше ніж> вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "Right Alt chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Права клавіша Alt вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "Left Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Ліва клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "Right Win chooses 5th level, locks when pressed together with another 5th-level-chooser" msgstr "Права клавіша Win вибирає 5-ий рівень, фіксується, якщо натиснути разом зі іншою комбінацією вибору 5-го рівня" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "Клавіша пробіл генерує символ нерозривного пробілу" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "Звичайний пробіл на будь-якому рівні" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "Символ нерозривного пробілу на другому рівні" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "Символ нерозривного пробілу на третьому рівні" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "Символ нерозривного пробілу на третьому рівні, нічого на четвертому" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "Non-breakable space character at third level, thin non-breakable space character at fourth level" msgstr "Символ нерозривного пробілу на третьому рівні, символ тонкого нерозривного пробілу на четвертому рівні" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "Символ нерозривного пробілу на четвертому рівні" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "Non-breakable space character at fourth level, thin non-breakable space character at sixth level" msgstr "Клавіша пробіл видає нерозривний пробіл на 4-му рівні, вузький нерозривний пробіл на 6-му рівні" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "Незв’язувальний символ нульової ширини на другому рівні" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "Zero-width non-joiner character at second level, zero-width joiner character at third level" msgstr "Незв’язувальний символ нульової ширини на другому рівні, зв’язувальний символ нульової ширини на третьому рівні" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 msgid "Zero-width non-joiner character at second level, non-breakable space character at third level" msgstr "Незв’язувальний символ нульової ширини на другому рівні, нерозривний пробіл на третьому рівні" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 msgid "Zero-width non-joiner character at third level, zero-width joiner at fourth level" msgstr "Незв’язувальний символ нульової ширини на третьому рівні, зв’язувальний символ нульової ширини на четвертому" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "Параметри японської клавіатури" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "Клавіша Kana Lock фіксується" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "NICOLA-F style Backspace" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "Клавіша повних/половинних форм — додаткова клавіша ESC" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "Додавання діакритичних знаків есперанто" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "На відповідну клавішу у розкладці Qwerty" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "На відповідну клавішу у розкладці Дворака" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "На відповідну клавішу у розкладці Колемака" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "Підтримувати сумісність клавіш з застарілими кодами клавіш Solaris" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "Сумісність з кодами клавіш Sun" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "Комбінація клавіш для переривання роботи X-сервера" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "Ctrl + Alt + Backspace" @@ -4026,150 +4046,160 @@ msgstr "Салішська кер-д’ален" msgid "English (US, Sun Type 6/7)" msgstr "Англійська (США, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:42 +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" +msgstr "Англійська (Норман)" + +#: ../rules/base.extras.xml.in.h:43 msgid "Polish (international with dead keys)" msgstr "Польська (інтернаціональна зі сліпими клавішами)" -#: ../rules/base.extras.xml.in.h:43 +#: ../rules/base.extras.xml.in.h:44 msgid "Polish (Colemak)" msgstr "Польська (Коулмак)" -#: ../rules/base.extras.xml.in.h:44 +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "Польська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "Кримськотатарська (Dobruja Q)" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "Румунська (ергономічна для друку наосліп)" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "Румунська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "Сербська (комбінації з акцентами замість сліпих клавіш)" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "Російська (з українсько-білоруською розкладкою)" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "Російська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "Вірменська (OLPC, фонетична)" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "Іврит (біблійна, фонетична, SIL)" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "Арабська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "Бельгійська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "Португальська (Бразилія, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "Чеська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "Данська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "Голландська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "Естонська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "Фінська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "Французька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "Грецька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "Італійська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "Японська (Sun Type 6)" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "Японська (Sun Type 7, сумісна з ПК)" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "Японська (Sun Type 7, сумісна з комп’ютерами Sun)" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "Норвезька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "Португальська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "Словацька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "Іспанська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "Шведська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "Німецька (Швейцарія, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "Французька (Швейцарія, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "Турецька (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "Українська (Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "Англійська (Великобританія, Sun Type 6/7)" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "Корейська (Sun Type 6/7)" +#~ msgid "Bengali" +#~ msgstr "Бенгальська" + +#~ msgid "Portuguese (Brazil, nativo for Esperanto)" +#~ msgstr "Португальська (Бразилія, nativo для есперанто)" + #~ msgid "English (layout toggle on multiply/divide key)" #~ msgstr "Англійська (перемикання розкладки клавішею «помножити/ділити»)" diff --git a/xorg-server/xkeyboard-config/po/xkeyboard-config.pot b/xorg-server/xkeyboard-config/po/xkeyboard-config.pot index 03bc1d527..3952a1efe 100644 --- a/xorg-server/xkeyboard-config/po/xkeyboard-config.pot +++ b/xorg-server/xkeyboard-config/po/xkeyboard-config.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: svu@users.sourceforge.net\n" -"POT-Creation-Date: 2013-09-30 22:59+0100\n" +"POT-Creation-Date: 2014-01-15 01:12+0000\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" @@ -816,7 +816,7 @@ msgid "English (programmer Dvorak)" msgstr "" #. Keyboard indicator for Russian layouts -#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:54 +#: ../rules/base.xml.in.h:203 ../rules/base.extras.xml.in.h:55 msgid "ru" msgstr "" @@ -888,11 +888,11 @@ msgid "Uzbek (Afghanistan, OLPC)" msgstr "" #. Keyboard indicator for Arabic layouts -#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:64 +#: ../rules/base.xml.in.h:224 ../rules/base.extras.xml.in.h:65 msgid "ar" msgstr "" -#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:65 +#: ../rules/base.xml.in.h:225 ../rules/base.extras.xml.in.h:66 msgid "Arabic" msgstr "" @@ -930,11 +930,11 @@ msgid "Albanian" msgstr "" #. Keyboard indicator for Armenian layouts -#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:58 +#: ../rules/base.xml.in.h:236 ../rules/base.extras.xml.in.h:59 msgid "hy" msgstr "" -#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:59 +#: ../rules/base.xml.in.h:237 ../rules/base.extras.xml.in.h:60 msgid "Armenian" msgstr "" @@ -1010,11 +1010,11 @@ msgid "Belarusian (Latin)" msgstr "" #. Keyboard indicator for Belgian layouts -#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:67 +#: ../rules/base.xml.in.h:259 ../rules/base.extras.xml.in.h:68 msgid "be" msgstr "" -#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:68 +#: ../rules/base.xml.in.h:260 ../rules/base.extras.xml.in.h:69 msgid "Belgian" msgstr "" @@ -1046,17 +1046,17 @@ msgstr "" msgid "Belgian (Wang model 724 azerty)" msgstr "" -#. Keyboard indicator for Bengali layouts +#. Keyboard indicator for Bangla layouts #: ../rules/base.xml.in.h:269 msgid "bn" msgstr "" #: ../rules/base.xml.in.h:270 -msgid "Bengali" +msgid "Bangla" msgstr "" #: ../rules/base.xml.in.h:271 -msgid "Bengali (Probhat)" +msgid "Bangla (Probhat)" msgstr "" #. Keyboard indicator for Indian layouts @@ -1069,27 +1069,27 @@ msgid "Indian" msgstr "" #: ../rules/base.xml.in.h:275 -msgid "Bengali (India)" +msgid "Bangla (India)" msgstr "" #: ../rules/base.xml.in.h:276 -msgid "Bengali (India, Probhat)" +msgid "Bangla (India, Probhat)" msgstr "" #: ../rules/base.xml.in.h:277 -msgid "Bengali (India, Baishakhi)" +msgid "Bangla (India, Baishakhi)" msgstr "" #: ../rules/base.xml.in.h:278 -msgid "Bengali (India, Bornona)" +msgid "Bangla (India, Bornona)" msgstr "" #: ../rules/base.xml.in.h:279 -msgid "Bengali (India, Uni Gitanjali)" +msgid "Bangla (India, Uni Gitanjali)" msgstr "" #: ../rules/base.xml.in.h:280 -msgid "Bengali (India, Baishakhi Inscript)" +msgid "Bangla (India, Baishakhi Inscript)" msgstr "" #. Keyboard indicator for Gujarati layouts @@ -1273,11 +1273,11 @@ msgid "Bosnian (US keyboard with Bosnian letters)" msgstr "" #. Keyboard indicator for Portuguese layouts -#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:70 +#: ../rules/base.xml.in.h:336 ../rules/base.extras.xml.in.h:71 msgid "pt" msgstr "" -#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:71 +#: ../rules/base.xml.in.h:337 ../rules/base.extras.xml.in.h:72 msgid "Portuguese (Brazil)" msgstr "" @@ -1290,15 +1290,15 @@ msgid "Portuguese (Brazil, Dvorak)" msgstr "" #: ../rules/base.xml.in.h:340 -msgid "Portuguese (Brazil, nativo)" +msgid "Portuguese (Brazil, Nativo)" msgstr "" #: ../rules/base.xml.in.h:341 -msgid "Portuguese (Brazil, nativo for US keyboards)" +msgid "Portuguese (Brazil, Nativo for US keyboards)" msgstr "" #: ../rules/base.xml.in.h:342 -msgid "Portuguese (Brazil, nativo for Esperanto)" +msgid "Esperanto (Brazil, Nativo)" msgstr "" #. Keyboard indicator for Bulgarian layouts @@ -1453,2503 +1453,2523 @@ msgid "Tibetan (with ASCII numerals)" msgstr "" #: ../rules/base.xml.in.h:386 +msgid "ug" +msgstr "" + +#: ../rules/base.xml.in.h:387 msgid "Uyghur" msgstr "" #. Keyboard indicator for Croatian layouts -#: ../rules/base.xml.in.h:388 +#: ../rules/base.xml.in.h:389 msgid "hr" msgstr "" -#: ../rules/base.xml.in.h:389 +#: ../rules/base.xml.in.h:390 msgid "Croatian" msgstr "" -#: ../rules/base.xml.in.h:390 +#: ../rules/base.xml.in.h:391 msgid "Croatian (use guillemets for quotes)" msgstr "" -#: ../rules/base.xml.in.h:391 +#: ../rules/base.xml.in.h:392 msgid "Croatian (use Croatian digraphs)" msgstr "" -#: ../rules/base.xml.in.h:392 +#: ../rules/base.xml.in.h:393 msgid "Croatian (US keyboard with Croatian digraphs)" msgstr "" -#: ../rules/base.xml.in.h:393 +#: ../rules/base.xml.in.h:394 msgid "Croatian (US keyboard with Croatian letters)" msgstr "" #. Keyboard indicator for Chech layouts -#: ../rules/base.xml.in.h:395 ../rules/base.extras.xml.in.h:73 +#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 msgid "cs" msgstr "" -#: ../rules/base.xml.in.h:396 ../rules/base.extras.xml.in.h:74 +#: ../rules/base.xml.in.h:397 ../rules/base.extras.xml.in.h:75 msgid "Czech" msgstr "" -#: ../rules/base.xml.in.h:397 +#: ../rules/base.xml.in.h:398 msgid "Czech (with <\\|> key)" msgstr "" -#: ../rules/base.xml.in.h:398 +#: ../rules/base.xml.in.h:399 msgid "Czech (qwerty)" msgstr "" -#: ../rules/base.xml.in.h:399 +#: ../rules/base.xml.in.h:400 msgid "Czech (qwerty, extended Backslash)" msgstr "" -#: ../rules/base.xml.in.h:400 +#: ../rules/base.xml.in.h:401 msgid "Czech (UCW layout, accented letters only)" msgstr "" -#: ../rules/base.xml.in.h:401 +#: ../rules/base.xml.in.h:402 msgid "Czech (US Dvorak with CZ UCW support)" msgstr "" #. Keyboard indicator for Danish layouts -#: ../rules/base.xml.in.h:403 ../rules/base.extras.xml.in.h:76 +#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 msgid "da" msgstr "" -#: ../rules/base.xml.in.h:404 ../rules/base.extras.xml.in.h:77 +#: ../rules/base.xml.in.h:405 ../rules/base.extras.xml.in.h:78 msgid "Danish" msgstr "" -#: ../rules/base.xml.in.h:405 +#: ../rules/base.xml.in.h:406 msgid "Danish (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:406 +#: ../rules/base.xml.in.h:407 msgid "Danish (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:407 +#: ../rules/base.xml.in.h:408 msgid "Danish (Macintosh, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:408 +#: ../rules/base.xml.in.h:409 msgid "Danish (Dvorak)" msgstr "" #. Keyboard indicator for Dutch layouts -#: ../rules/base.xml.in.h:410 ../rules/base.extras.xml.in.h:79 +#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 msgid "nl" msgstr "" -#: ../rules/base.xml.in.h:411 ../rules/base.extras.xml.in.h:80 +#: ../rules/base.xml.in.h:412 ../rules/base.extras.xml.in.h:81 msgid "Dutch" msgstr "" -#: ../rules/base.xml.in.h:412 +#: ../rules/base.xml.in.h:413 msgid "Dutch (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:413 +#: ../rules/base.xml.in.h:414 msgid "Dutch (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:414 +#: ../rules/base.xml.in.h:415 msgid "Dutch (standard)" msgstr "" #. Keyboard indicator for Dzongkha layouts -#: ../rules/base.xml.in.h:416 +#: ../rules/base.xml.in.h:417 msgid "dz" msgstr "" -#: ../rules/base.xml.in.h:417 +#: ../rules/base.xml.in.h:418 msgid "Dzongkha" msgstr "" #. Keyboard indicator for Estonian layouts -#: ../rules/base.xml.in.h:419 ../rules/base.extras.xml.in.h:82 +#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 msgid "et" msgstr "" -#: ../rules/base.xml.in.h:420 ../rules/base.extras.xml.in.h:83 +#: ../rules/base.xml.in.h:421 ../rules/base.extras.xml.in.h:84 msgid "Estonian" msgstr "" -#: ../rules/base.xml.in.h:421 +#: ../rules/base.xml.in.h:422 msgid "Estonian (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:422 +#: ../rules/base.xml.in.h:423 msgid "Estonian (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:423 +#: ../rules/base.xml.in.h:424 msgid "Estonian (US keyboard with Estonian letters)" msgstr "" -#: ../rules/base.xml.in.h:424 ../rules/base.extras.xml.in.h:16 +#: ../rules/base.xml.in.h:425 ../rules/base.extras.xml.in.h:16 msgid "Persian" msgstr "" -#: ../rules/base.xml.in.h:425 +#: ../rules/base.xml.in.h:426 msgid "Persian (with Persian Keypad)" msgstr "" #. Keyboard indicator for Kurdish layouts -#: ../rules/base.xml.in.h:427 +#: ../rules/base.xml.in.h:428 msgid "ku" msgstr "" -#: ../rules/base.xml.in.h:428 +#: ../rules/base.xml.in.h:429 msgid "Kurdish (Iran, Latin Q)" msgstr "" -#: ../rules/base.xml.in.h:429 +#: ../rules/base.xml.in.h:430 msgid "Kurdish (Iran, F)" msgstr "" -#: ../rules/base.xml.in.h:430 +#: ../rules/base.xml.in.h:431 msgid "Kurdish (Iran, Latin Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:431 +#: ../rules/base.xml.in.h:432 msgid "Kurdish (Iran, Arabic-Latin)" msgstr "" -#: ../rules/base.xml.in.h:432 +#: ../rules/base.xml.in.h:433 msgid "Iraqi" msgstr "" -#: ../rules/base.xml.in.h:433 +#: ../rules/base.xml.in.h:434 msgid "Kurdish (Iraq, Latin Q)" msgstr "" -#: ../rules/base.xml.in.h:434 +#: ../rules/base.xml.in.h:435 msgid "Kurdish (Iraq, F)" msgstr "" -#: ../rules/base.xml.in.h:435 +#: ../rules/base.xml.in.h:436 msgid "Kurdish (Iraq, Latin Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:436 +#: ../rules/base.xml.in.h:437 msgid "Kurdish (Iraq, Arabic-Latin)" msgstr "" #. Keyboard indicator for Faroese layouts -#: ../rules/base.xml.in.h:438 +#: ../rules/base.xml.in.h:439 msgid "fo" msgstr "" -#: ../rules/base.xml.in.h:439 +#: ../rules/base.xml.in.h:440 msgid "Faroese" msgstr "" -#: ../rules/base.xml.in.h:440 +#: ../rules/base.xml.in.h:441 msgid "Faroese (eliminate dead keys)" msgstr "" #. Keyboard indicator for Finnish layouts -#: ../rules/base.xml.in.h:442 ../rules/base.extras.xml.in.h:85 +#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 msgid "fi" msgstr "" -#: ../rules/base.xml.in.h:443 ../rules/base.extras.xml.in.h:86 +#: ../rules/base.xml.in.h:444 ../rules/base.extras.xml.in.h:87 msgid "Finnish" msgstr "" -#: ../rules/base.xml.in.h:444 +#: ../rules/base.xml.in.h:445 msgid "Finnish (classic)" msgstr "" -#: ../rules/base.xml.in.h:445 +#: ../rules/base.xml.in.h:446 msgid "Finnish (classic, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:446 +#: ../rules/base.xml.in.h:447 msgid "Northern Saami (Finland)" msgstr "" -#: ../rules/base.xml.in.h:447 +#: ../rules/base.xml.in.h:448 msgid "Finnish (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:448 ../rules/base.extras.xml.in.h:88 +#: ../rules/base.xml.in.h:449 ../rules/base.extras.xml.in.h:89 msgid "French" msgstr "" -#: ../rules/base.xml.in.h:449 +#: ../rules/base.xml.in.h:450 msgid "French (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:450 +#: ../rules/base.xml.in.h:451 msgid "French (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:451 +#: ../rules/base.xml.in.h:452 msgid "French (alternative)" msgstr "" -#: ../rules/base.xml.in.h:452 +#: ../rules/base.xml.in.h:453 msgid "French (alternative, Latin-9 only)" msgstr "" -#: ../rules/base.xml.in.h:453 +#: ../rules/base.xml.in.h:454 msgid "French (alternative, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:454 +#: ../rules/base.xml.in.h:455 msgid "French (alternative, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:455 +#: ../rules/base.xml.in.h:456 msgid "French (legacy, alternative)" msgstr "" -#: ../rules/base.xml.in.h:456 +#: ../rules/base.xml.in.h:457 msgid "French (legacy, alternative, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:457 +#: ../rules/base.xml.in.h:458 msgid "French (legacy, alternative, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:458 +#: ../rules/base.xml.in.h:459 msgid "French (Bepo, ergonomic, Dvorak way)" msgstr "" -#: ../rules/base.xml.in.h:459 +#: ../rules/base.xml.in.h:460 msgid "French (Bepo, ergonomic, Dvorak way, Latin-9 only)" msgstr "" -#: ../rules/base.xml.in.h:460 +#: ../rules/base.xml.in.h:461 msgid "French (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:461 +#: ../rules/base.xml.in.h:462 msgid "French (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:462 +#: ../rules/base.xml.in.h:463 msgid "French (Breton)" msgstr "" -#: ../rules/base.xml.in.h:463 +#: ../rules/base.xml.in.h:464 msgid "Occitan" msgstr "" -#: ../rules/base.xml.in.h:464 +#: ../rules/base.xml.in.h:465 msgid "Georgian (France, AZERTY Tskapo)" msgstr "" -#: ../rules/base.xml.in.h:465 +#: ../rules/base.xml.in.h:466 msgid "English (Ghana)" msgstr "" -#: ../rules/base.xml.in.h:466 +#: ../rules/base.xml.in.h:467 msgid "English (Ghana, multilingual)" msgstr "" #. Keyboard indicator for Akan layouts -#: ../rules/base.xml.in.h:468 +#: ../rules/base.xml.in.h:469 msgid "ak" msgstr "" -#: ../rules/base.xml.in.h:469 +#: ../rules/base.xml.in.h:470 msgid "Akan" msgstr "" #. Keyboard indicator for Ewe layouts -#: ../rules/base.xml.in.h:471 +#: ../rules/base.xml.in.h:472 msgid "ee" msgstr "" -#: ../rules/base.xml.in.h:472 +#: ../rules/base.xml.in.h:473 msgid "Ewe" msgstr "" #. Keyboard indicator for Fula layouts -#: ../rules/base.xml.in.h:474 +#: ../rules/base.xml.in.h:475 msgid "ff" msgstr "" -#: ../rules/base.xml.in.h:475 +#: ../rules/base.xml.in.h:476 msgid "Fula" msgstr "" #. Keyboard indicator for Ga layouts -#: ../rules/base.xml.in.h:477 +#: ../rules/base.xml.in.h:478 msgid "gaa" msgstr "" -#: ../rules/base.xml.in.h:478 +#: ../rules/base.xml.in.h:479 msgid "Ga" msgstr "" #. Keyboard indicator for Hausa layouts -#: ../rules/base.xml.in.h:480 +#: ../rules/base.xml.in.h:481 msgid "ha" msgstr "" -#: ../rules/base.xml.in.h:481 +#: ../rules/base.xml.in.h:482 msgid "Hausa" msgstr "" #. Keyboard indicator for Avatime layouts -#: ../rules/base.xml.in.h:483 +#: ../rules/base.xml.in.h:484 msgid "avn" msgstr "" -#: ../rules/base.xml.in.h:484 +#: ../rules/base.xml.in.h:485 msgid "Avatime" msgstr "" -#: ../rules/base.xml.in.h:485 +#: ../rules/base.xml.in.h:486 msgid "English (Ghana, GILLBT)" msgstr "" -#: ../rules/base.xml.in.h:486 +#: ../rules/base.xml.in.h:487 msgid "French (Guinea)" msgstr "" #. Keyboard indicator for Georgian layouts -#: ../rules/base.xml.in.h:488 +#: ../rules/base.xml.in.h:489 msgid "ka" msgstr "" -#: ../rules/base.xml.in.h:489 +#: ../rules/base.xml.in.h:490 msgid "Georgian" msgstr "" -#: ../rules/base.xml.in.h:490 +#: ../rules/base.xml.in.h:491 msgid "Georgian (ergonomic)" msgstr "" -#: ../rules/base.xml.in.h:491 +#: ../rules/base.xml.in.h:492 msgid "Georgian (MESS)" msgstr "" -#: ../rules/base.xml.in.h:492 +#: ../rules/base.xml.in.h:493 msgid "Russian (Georgia)" msgstr "" -#: ../rules/base.xml.in.h:493 +#: ../rules/base.xml.in.h:494 msgid "Ossetian (Georgia)" msgstr "" -#: ../rules/base.xml.in.h:494 ../rules/base.extras.xml.in.h:11 +#: ../rules/base.xml.in.h:495 ../rules/base.extras.xml.in.h:11 msgid "German" msgstr "" -#: ../rules/base.xml.in.h:495 +#: ../rules/base.xml.in.h:496 msgid "German (dead acute)" msgstr "" -#: ../rules/base.xml.in.h:496 +#: ../rules/base.xml.in.h:497 msgid "German (dead grave acute)" msgstr "" -#: ../rules/base.xml.in.h:497 +#: ../rules/base.xml.in.h:498 msgid "German (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:498 +#: ../rules/base.xml.in.h:499 msgid "German (T3)" msgstr "" -#: ../rules/base.xml.in.h:499 +#: ../rules/base.xml.in.h:500 msgid "Romanian (Germany)" msgstr "" -#: ../rules/base.xml.in.h:500 +#: ../rules/base.xml.in.h:501 msgid "Romanian (Germany, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:501 +#: ../rules/base.xml.in.h:502 msgid "German (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:502 +#: ../rules/base.xml.in.h:503 msgid "German (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:503 +#: ../rules/base.xml.in.h:504 msgid "German (Neo 2)" msgstr "" -#: ../rules/base.xml.in.h:504 +#: ../rules/base.xml.in.h:505 msgid "German (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:505 +#: ../rules/base.xml.in.h:506 msgid "German (Macintosh, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:506 +#: ../rules/base.xml.in.h:507 msgid "Lower Sorbian" msgstr "" -#: ../rules/base.xml.in.h:507 +#: ../rules/base.xml.in.h:508 msgid "Lower Sorbian (qwertz)" msgstr "" -#: ../rules/base.xml.in.h:508 +#: ../rules/base.xml.in.h:509 msgid "German (qwerty)" msgstr "" -#: ../rules/base.xml.in.h:509 +#: ../rules/base.xml.in.h:510 msgid "Russian (Germany, phonetic)" msgstr "" -#: ../rules/base.xml.in.h:510 +#: ../rules/base.xml.in.h:511 msgid "German (legacy)" msgstr "" #. Keyboard indicator for Greek layouts -#: ../rules/base.xml.in.h:512 ../rules/base.extras.xml.in.h:90 +#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 msgid "gr" msgstr "" -#: ../rules/base.xml.in.h:513 ../rules/base.extras.xml.in.h:91 +#: ../rules/base.xml.in.h:514 ../rules/base.extras.xml.in.h:92 msgid "Greek" msgstr "" -#: ../rules/base.xml.in.h:514 +#: ../rules/base.xml.in.h:515 msgid "Greek (simple)" msgstr "" -#: ../rules/base.xml.in.h:515 +#: ../rules/base.xml.in.h:516 msgid "Greek (extended)" msgstr "" -#: ../rules/base.xml.in.h:516 +#: ../rules/base.xml.in.h:517 msgid "Greek (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:517 +#: ../rules/base.xml.in.h:518 msgid "Greek (polytonic)" msgstr "" #. Keyboard indicator for Hungarian layouts -#: ../rules/base.xml.in.h:519 +#: ../rules/base.xml.in.h:520 msgid "hu" msgstr "" -#: ../rules/base.xml.in.h:520 +#: ../rules/base.xml.in.h:521 msgid "Hungarian" msgstr "" -#: ../rules/base.xml.in.h:521 +#: ../rules/base.xml.in.h:522 msgid "Hungarian (standard)" msgstr "" -#: ../rules/base.xml.in.h:522 +#: ../rules/base.xml.in.h:523 msgid "Hungarian (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:523 +#: ../rules/base.xml.in.h:524 msgid "Hungarian (qwerty)" msgstr "" -#: ../rules/base.xml.in.h:524 +#: ../rules/base.xml.in.h:525 msgid "Hungarian (101/qwertz/comma/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:525 +#: ../rules/base.xml.in.h:526 msgid "Hungarian (101/qwertz/comma/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:526 +#: ../rules/base.xml.in.h:527 msgid "Hungarian (101/qwertz/dot/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:527 +#: ../rules/base.xml.in.h:528 msgid "Hungarian (101/qwertz/dot/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:528 +#: ../rules/base.xml.in.h:529 msgid "Hungarian (101/qwerty/comma/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:529 +#: ../rules/base.xml.in.h:530 msgid "Hungarian (101/qwerty/comma/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:530 +#: ../rules/base.xml.in.h:531 msgid "Hungarian (101/qwerty/dot/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:531 +#: ../rules/base.xml.in.h:532 msgid "Hungarian (101/qwerty/dot/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:532 +#: ../rules/base.xml.in.h:533 msgid "Hungarian (102/qwertz/comma/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:533 +#: ../rules/base.xml.in.h:534 msgid "Hungarian (102/qwertz/comma/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:534 +#: ../rules/base.xml.in.h:535 msgid "Hungarian (102/qwertz/dot/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:535 +#: ../rules/base.xml.in.h:536 msgid "Hungarian (102/qwertz/dot/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:536 +#: ../rules/base.xml.in.h:537 msgid "Hungarian (102/qwerty/comma/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:537 +#: ../rules/base.xml.in.h:538 msgid "Hungarian (102/qwerty/comma/eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:538 +#: ../rules/base.xml.in.h:539 msgid "Hungarian (102/qwerty/dot/dead keys)" msgstr "" -#: ../rules/base.xml.in.h:539 +#: ../rules/base.xml.in.h:540 msgid "Hungarian (102/qwerty/dot/eliminate dead keys)" msgstr "" #. Keyboard indicator for Icelandic layouts -#: ../rules/base.xml.in.h:541 +#: ../rules/base.xml.in.h:542 msgid "is" msgstr "" -#: ../rules/base.xml.in.h:542 +#: ../rules/base.xml.in.h:543 msgid "Icelandic" msgstr "" -#: ../rules/base.xml.in.h:543 +#: ../rules/base.xml.in.h:544 msgid "Icelandic (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:544 +#: ../rules/base.xml.in.h:545 msgid "Icelandic (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:545 +#: ../rules/base.xml.in.h:546 msgid "Icelandic (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:546 +#: ../rules/base.xml.in.h:547 msgid "Icelandic (Dvorak)" msgstr "" #. Keyboard indicator for Hebrew layouts -#: ../rules/base.xml.in.h:548 ../rules/base.extras.xml.in.h:61 +#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 msgid "he" msgstr "" -#: ../rules/base.xml.in.h:549 ../rules/base.extras.xml.in.h:62 +#: ../rules/base.xml.in.h:550 ../rules/base.extras.xml.in.h:63 msgid "Hebrew" msgstr "" -#: ../rules/base.xml.in.h:550 +#: ../rules/base.xml.in.h:551 msgid "Hebrew (lyx)" msgstr "" -#: ../rules/base.xml.in.h:551 +#: ../rules/base.xml.in.h:552 msgid "Hebrew (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:552 +#: ../rules/base.xml.in.h:553 msgid "Hebrew (Biblical, Tiro)" msgstr "" #. Keyboard indicator for Italian layouts -#: ../rules/base.xml.in.h:554 ../rules/base.extras.xml.in.h:93 +#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 msgid "it" msgstr "" -#: ../rules/base.xml.in.h:555 ../rules/base.extras.xml.in.h:94 +#: ../rules/base.xml.in.h:556 ../rules/base.extras.xml.in.h:95 msgid "Italian" msgstr "" -#: ../rules/base.xml.in.h:556 +#: ../rules/base.xml.in.h:557 msgid "Italian (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:557 +#: ../rules/base.xml.in.h:558 msgid "Italian (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:558 +#: ../rules/base.xml.in.h:559 msgid "Italian (US keyboard with Italian letters)" msgstr "" -#: ../rules/base.xml.in.h:559 +#: ../rules/base.xml.in.h:560 msgid "Georgian (Italy)" msgstr "" -#: ../rules/base.xml.in.h:560 +#: ../rules/base.xml.in.h:561 msgid "Italian (IBM 142)" msgstr "" #. Keyboard indicator for Japanese layouts -#: ../rules/base.xml.in.h:562 ../rules/base.extras.xml.in.h:96 +#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 msgid "ja" msgstr "" -#: ../rules/base.xml.in.h:563 ../rules/base.extras.xml.in.h:97 +#: ../rules/base.xml.in.h:564 ../rules/base.extras.xml.in.h:98 msgid "Japanese" msgstr "" -#: ../rules/base.xml.in.h:564 +#: ../rules/base.xml.in.h:565 msgid "Japanese (Kana)" msgstr "" -#: ../rules/base.xml.in.h:565 +#: ../rules/base.xml.in.h:566 msgid "Japanese (Kana 86)" msgstr "" -#: ../rules/base.xml.in.h:566 +#: ../rules/base.xml.in.h:567 msgid "Japanese (OADG 109A)" msgstr "" -#: ../rules/base.xml.in.h:567 +#: ../rules/base.xml.in.h:568 msgid "Japanese (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:568 +#: ../rules/base.xml.in.h:569 msgid "Japanese (Dvorak)" msgstr "" #. Keyboard indicator for Kikuyu layouts -#: ../rules/base.xml.in.h:570 +#: ../rules/base.xml.in.h:571 msgid "ki" msgstr "" -#: ../rules/base.xml.in.h:571 +#: ../rules/base.xml.in.h:572 msgid "Kyrgyz" msgstr "" -#: ../rules/base.xml.in.h:572 +#: ../rules/base.xml.in.h:573 msgid "Kyrgyz (phonetic)" msgstr "" #. Keyboard indicator for Khmer layouts -#: ../rules/base.xml.in.h:574 +#: ../rules/base.xml.in.h:575 msgid "km" msgstr "" -#: ../rules/base.xml.in.h:575 +#: ../rules/base.xml.in.h:576 msgid "Khmer (Cambodia)" msgstr "" #. Keyboard indicator for Kazakh layouts -#: ../rules/base.xml.in.h:577 +#: ../rules/base.xml.in.h:578 msgid "kk" msgstr "" -#: ../rules/base.xml.in.h:578 +#: ../rules/base.xml.in.h:579 msgid "Kazakh" msgstr "" -#: ../rules/base.xml.in.h:579 +#: ../rules/base.xml.in.h:580 msgid "Russian (Kazakhstan, with Kazakh)" msgstr "" -#: ../rules/base.xml.in.h:580 +#: ../rules/base.xml.in.h:581 msgid "Kazakh (with Russian)" msgstr "" #. Keyboard indicator for Lao layouts -#: ../rules/base.xml.in.h:582 +#: ../rules/base.xml.in.h:583 msgid "lo" msgstr "" -#: ../rules/base.xml.in.h:583 +#: ../rules/base.xml.in.h:584 msgid "Lao" msgstr "" -#: ../rules/base.xml.in.h:584 +#: ../rules/base.xml.in.h:585 msgid "Lao (STEA proposed standard layout)" msgstr "" #. Keyboard indicator for Spanish layouts -#: ../rules/base.xml.in.h:586 ../rules/base.extras.xml.in.h:109 +#: ../rules/base.xml.in.h:587 ../rules/base.extras.xml.in.h:110 msgid "es" msgstr "" -#: ../rules/base.xml.in.h:587 +#: ../rules/base.xml.in.h:588 msgid "Spanish (Latin American)" msgstr "" -#: ../rules/base.xml.in.h:588 +#: ../rules/base.xml.in.h:589 msgid "Spanish (Latin American, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:589 +#: ../rules/base.xml.in.h:590 msgid "Spanish (Latin American, include dead tilde)" msgstr "" -#: ../rules/base.xml.in.h:590 +#: ../rules/base.xml.in.h:591 msgid "Spanish (Latin American, Sun dead keys)" msgstr "" #. Keyboard indicator for Lithuanian layouts -#: ../rules/base.xml.in.h:592 ../rules/base.extras.xml.in.h:18 +#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:18 msgid "lt" msgstr "" -#: ../rules/base.xml.in.h:593 ../rules/base.extras.xml.in.h:19 +#: ../rules/base.xml.in.h:594 ../rules/base.extras.xml.in.h:19 msgid "Lithuanian" msgstr "" -#: ../rules/base.xml.in.h:594 +#: ../rules/base.xml.in.h:595 msgid "Lithuanian (standard)" msgstr "" -#: ../rules/base.xml.in.h:595 +#: ../rules/base.xml.in.h:596 msgid "Lithuanian (US keyboard with Lithuanian letters)" msgstr "" -#: ../rules/base.xml.in.h:596 +#: ../rules/base.xml.in.h:597 msgid "Lithuanian (IBM LST 1205-92)" msgstr "" -#: ../rules/base.xml.in.h:597 +#: ../rules/base.xml.in.h:598 msgid "Lithuanian (LEKP)" msgstr "" -#: ../rules/base.xml.in.h:598 +#: ../rules/base.xml.in.h:599 msgid "Lithuanian (LEKPa)" msgstr "" #. Keyboard indicator for Latvian layouts -#: ../rules/base.xml.in.h:600 ../rules/base.extras.xml.in.h:22 +#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:22 msgid "lv" msgstr "" -#: ../rules/base.xml.in.h:601 ../rules/base.extras.xml.in.h:23 +#: ../rules/base.xml.in.h:602 ../rules/base.extras.xml.in.h:23 msgid "Latvian" msgstr "" -#: ../rules/base.xml.in.h:602 +#: ../rules/base.xml.in.h:603 msgid "Latvian (apostrophe variant)" msgstr "" -#: ../rules/base.xml.in.h:603 +#: ../rules/base.xml.in.h:604 msgid "Latvian (tilde variant)" msgstr "" -#: ../rules/base.xml.in.h:604 +#: ../rules/base.xml.in.h:605 msgid "Latvian (F variant)" msgstr "" -#: ../rules/base.xml.in.h:605 +#: ../rules/base.xml.in.h:606 msgid "Latvian (modern)" msgstr "" -#: ../rules/base.xml.in.h:606 +#: ../rules/base.xml.in.h:607 msgid "Latvian (ergonomic, ŪGJRMV)" msgstr "" -#: ../rules/base.xml.in.h:607 +#: ../rules/base.xml.in.h:608 msgid "Latvian (adapted)" msgstr "" #. Keyboard indicator for Maori layouts -#: ../rules/base.xml.in.h:609 +#: ../rules/base.xml.in.h:610 msgid "mi" msgstr "" -#: ../rules/base.xml.in.h:610 +#: ../rules/base.xml.in.h:611 msgid "Maori" msgstr "" #. Keyboard indicator for Serbian layouts -#: ../rules/base.xml.in.h:612 ../rules/base.extras.xml.in.h:51 +#: ../rules/base.xml.in.h:613 ../rules/base.extras.xml.in.h:52 msgid "sr" msgstr "" -#: ../rules/base.xml.in.h:613 +#: ../rules/base.xml.in.h:614 msgid "Montenegrin" msgstr "" -#: ../rules/base.xml.in.h:614 +#: ../rules/base.xml.in.h:615 msgid "Montenegrin (Cyrillic)" msgstr "" -#: ../rules/base.xml.in.h:615 +#: ../rules/base.xml.in.h:616 msgid "Montenegrin (Cyrillic, Z and ZHE swapped)" msgstr "" -#: ../rules/base.xml.in.h:616 +#: ../rules/base.xml.in.h:617 msgid "Montenegrin (Latin Unicode)" msgstr "" -#: ../rules/base.xml.in.h:617 +#: ../rules/base.xml.in.h:618 msgid "Montenegrin (Latin qwerty)" msgstr "" -#: ../rules/base.xml.in.h:618 +#: ../rules/base.xml.in.h:619 msgid "Montenegrin (Latin Unicode qwerty)" msgstr "" -#: ../rules/base.xml.in.h:619 +#: ../rules/base.xml.in.h:620 msgid "Montenegrin (Cyrillic with guillemets)" msgstr "" -#: ../rules/base.xml.in.h:620 +#: ../rules/base.xml.in.h:621 msgid "Montenegrin (Latin with guillemets)" msgstr "" #. Keyboard indicator for Macedonian layouts -#: ../rules/base.xml.in.h:622 +#: ../rules/base.xml.in.h:623 msgid "mk" msgstr "" -#: ../rules/base.xml.in.h:623 +#: ../rules/base.xml.in.h:624 msgid "Macedonian" msgstr "" -#: ../rules/base.xml.in.h:624 +#: ../rules/base.xml.in.h:625 msgid "Macedonian (eliminate dead keys)" msgstr "" #. Keyboard indicator for Maltese layouts -#: ../rules/base.xml.in.h:626 +#: ../rules/base.xml.in.h:627 msgid "mt" msgstr "" -#: ../rules/base.xml.in.h:627 +#: ../rules/base.xml.in.h:628 msgid "Maltese" msgstr "" -#: ../rules/base.xml.in.h:628 +#: ../rules/base.xml.in.h:629 msgid "Maltese (with US layout)" msgstr "" #. Keyboard indicator for Mongolian layouts -#: ../rules/base.xml.in.h:630 +#: ../rules/base.xml.in.h:631 msgid "mn" msgstr "" -#: ../rules/base.xml.in.h:631 +#: ../rules/base.xml.in.h:632 msgid "Mongolian" msgstr "" #. Keyboard indicator for Norwegian layouts -#: ../rules/base.xml.in.h:633 ../rules/base.extras.xml.in.h:101 +#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 msgid "no" msgstr "" -#: ../rules/base.xml.in.h:634 ../rules/base.extras.xml.in.h:102 +#: ../rules/base.xml.in.h:635 ../rules/base.extras.xml.in.h:103 msgid "Norwegian" msgstr "" -#: ../rules/base.xml.in.h:635 +#: ../rules/base.xml.in.h:636 msgid "Norwegian (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:636 +#: ../rules/base.xml.in.h:637 msgid "Norwegian (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:637 +#: ../rules/base.xml.in.h:638 msgid "Northern Saami (Norway)" msgstr "" -#: ../rules/base.xml.in.h:638 +#: ../rules/base.xml.in.h:639 msgid "Northern Saami (Norway, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:639 +#: ../rules/base.xml.in.h:640 msgid "Norwegian (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:640 +#: ../rules/base.xml.in.h:641 msgid "Norwegian (Macintosh, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:641 +#: ../rules/base.xml.in.h:642 msgid "Norwegian (Colemak)" msgstr "" #. Keyboard indicator for Polish layouts -#: ../rules/base.xml.in.h:643 ../rules/base.extras.xml.in.h:40 +#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 msgid "pl" msgstr "" -#: ../rules/base.xml.in.h:644 ../rules/base.extras.xml.in.h:41 +#: ../rules/base.xml.in.h:645 ../rules/base.extras.xml.in.h:42 msgid "Polish" msgstr "" -#: ../rules/base.xml.in.h:645 +#: ../rules/base.xml.in.h:646 msgid "Polish (legacy)" msgstr "" -#: ../rules/base.xml.in.h:646 +#: ../rules/base.xml.in.h:647 msgid "Polish (qwertz)" msgstr "" -#: ../rules/base.xml.in.h:647 +#: ../rules/base.xml.in.h:648 msgid "Polish (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:648 +#: ../rules/base.xml.in.h:649 msgid "Polish (Dvorak, Polish quotes on quotemark key)" msgstr "" -#: ../rules/base.xml.in.h:649 +#: ../rules/base.xml.in.h:650 msgid "Polish (Dvorak, Polish quotes on key 1)" msgstr "" -#: ../rules/base.xml.in.h:650 +#: ../rules/base.xml.in.h:651 msgid "Kashubian" msgstr "" -#: ../rules/base.xml.in.h:651 +#: ../rules/base.xml.in.h:652 msgid "Russian (Poland, phonetic Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:652 +#: ../rules/base.xml.in.h:653 msgid "Polish (programmer Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:653 ../rules/base.extras.xml.in.h:104 +#: ../rules/base.xml.in.h:654 ../rules/base.extras.xml.in.h:105 msgid "Portuguese" msgstr "" -#: ../rules/base.xml.in.h:654 +#: ../rules/base.xml.in.h:655 msgid "Portuguese (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:655 +#: ../rules/base.xml.in.h:656 msgid "Portuguese (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:656 +#: ../rules/base.xml.in.h:657 msgid "Portuguese (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:657 +#: ../rules/base.xml.in.h:658 msgid "Portuguese (Macintosh, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:658 +#: ../rules/base.xml.in.h:659 msgid "Portuguese (Macintosh, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:659 +#: ../rules/base.xml.in.h:660 msgid "Portuguese (Nativo)" msgstr "" -#: ../rules/base.xml.in.h:660 +#: ../rules/base.xml.in.h:661 msgid "Portuguese (Nativo for US keyboards)" msgstr "" -#: ../rules/base.xml.in.h:661 +#: ../rules/base.xml.in.h:662 msgid "Esperanto (Portugal, Nativo)" msgstr "" #. Keyboard indicator for Romanian layouts -#: ../rules/base.xml.in.h:663 ../rules/base.extras.xml.in.h:45 +#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 msgid "ro" msgstr "" -#: ../rules/base.xml.in.h:664 ../rules/base.extras.xml.in.h:46 +#: ../rules/base.xml.in.h:665 ../rules/base.extras.xml.in.h:47 msgid "Romanian" msgstr "" -#: ../rules/base.xml.in.h:665 +#: ../rules/base.xml.in.h:666 msgid "Romanian (cedilla)" msgstr "" -#: ../rules/base.xml.in.h:666 +#: ../rules/base.xml.in.h:667 msgid "Romanian (standard)" msgstr "" -#: ../rules/base.xml.in.h:667 +#: ../rules/base.xml.in.h:668 msgid "Romanian (standard cedilla)" msgstr "" -#: ../rules/base.xml.in.h:668 +#: ../rules/base.xml.in.h:669 msgid "Romanian (WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:669 ../rules/base.extras.xml.in.h:55 +#: ../rules/base.xml.in.h:670 ../rules/base.extras.xml.in.h:56 msgid "Russian" msgstr "" -#: ../rules/base.xml.in.h:670 +#: ../rules/base.xml.in.h:671 msgid "Russian (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:671 +#: ../rules/base.xml.in.h:672 msgid "Russian (phonetic WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:672 +#: ../rules/base.xml.in.h:673 msgid "Russian (typewriter)" msgstr "" -#: ../rules/base.xml.in.h:673 +#: ../rules/base.xml.in.h:674 msgid "Russian (legacy)" msgstr "" -#: ../rules/base.xml.in.h:674 +#: ../rules/base.xml.in.h:675 msgid "Russian (typewriter, legacy)" msgstr "" -#: ../rules/base.xml.in.h:675 +#: ../rules/base.xml.in.h:676 msgid "Tatar" msgstr "" -#: ../rules/base.xml.in.h:676 +#: ../rules/base.xml.in.h:677 msgid "Ossetian (legacy)" msgstr "" -#: ../rules/base.xml.in.h:677 +#: ../rules/base.xml.in.h:678 msgid "Ossetian (WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:678 +#: ../rules/base.xml.in.h:679 msgid "Chuvash" msgstr "" -#: ../rules/base.xml.in.h:679 +#: ../rules/base.xml.in.h:680 msgid "Chuvash (Latin)" msgstr "" -#: ../rules/base.xml.in.h:680 +#: ../rules/base.xml.in.h:681 msgid "Udmurt" msgstr "" -#: ../rules/base.xml.in.h:681 +#: ../rules/base.xml.in.h:682 msgid "Komi" msgstr "" -#: ../rules/base.xml.in.h:682 +#: ../rules/base.xml.in.h:683 msgid "Yakut" msgstr "" -#: ../rules/base.xml.in.h:683 +#: ../rules/base.xml.in.h:684 msgid "Kalmyk" msgstr "" -#: ../rules/base.xml.in.h:684 +#: ../rules/base.xml.in.h:685 msgid "Russian (DOS)" msgstr "" -#: ../rules/base.xml.in.h:685 +#: ../rules/base.xml.in.h:686 msgid "Russian (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:686 +#: ../rules/base.xml.in.h:687 msgid "Serbian (Russia)" msgstr "" -#: ../rules/base.xml.in.h:687 +#: ../rules/base.xml.in.h:688 msgid "Bashkirian" msgstr "" -#: ../rules/base.xml.in.h:688 +#: ../rules/base.xml.in.h:689 msgid "Mari" msgstr "" -#: ../rules/base.xml.in.h:689 ../rules/base.extras.xml.in.h:52 +#: ../rules/base.xml.in.h:690 ../rules/base.extras.xml.in.h:53 msgid "Serbian" msgstr "" -#: ../rules/base.xml.in.h:690 +#: ../rules/base.xml.in.h:691 msgid "Serbian (Cyrillic, Z and ZHE swapped)" msgstr "" -#: ../rules/base.xml.in.h:691 +#: ../rules/base.xml.in.h:692 msgid "Serbian (Latin)" msgstr "" -#: ../rules/base.xml.in.h:692 +#: ../rules/base.xml.in.h:693 msgid "Serbian (Latin Unicode)" msgstr "" -#: ../rules/base.xml.in.h:693 +#: ../rules/base.xml.in.h:694 msgid "Serbian (Latin qwerty)" msgstr "" -#: ../rules/base.xml.in.h:694 +#: ../rules/base.xml.in.h:695 msgid "Serbian (Latin Unicode qwerty)" msgstr "" -#: ../rules/base.xml.in.h:695 +#: ../rules/base.xml.in.h:696 msgid "Serbian (Cyrillic with guillemets)" msgstr "" -#: ../rules/base.xml.in.h:696 +#: ../rules/base.xml.in.h:697 msgid "Serbian (Latin with guillemets)" msgstr "" -#: ../rules/base.xml.in.h:697 -msgid "Pannonian Rusyn (homophonic)" +#: ../rules/base.xml.in.h:698 +msgid "Pannonian Rusyn" msgstr "" #. Keyboard indicator for Slovenian layouts -#: ../rules/base.xml.in.h:699 +#: ../rules/base.xml.in.h:700 msgid "sl" msgstr "" -#: ../rules/base.xml.in.h:700 +#: ../rules/base.xml.in.h:701 msgid "Slovenian" msgstr "" -#: ../rules/base.xml.in.h:701 +#: ../rules/base.xml.in.h:702 msgid "Slovenian (use guillemets for quotes)" msgstr "" -#: ../rules/base.xml.in.h:702 +#: ../rules/base.xml.in.h:703 msgid "Slovenian (US keyboard with Slovenian letters)" msgstr "" #. Keyboard indicator for Slovak layouts -#: ../rules/base.xml.in.h:704 ../rules/base.extras.xml.in.h:106 +#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 msgid "sk" msgstr "" -#: ../rules/base.xml.in.h:705 ../rules/base.extras.xml.in.h:107 +#: ../rules/base.xml.in.h:706 ../rules/base.extras.xml.in.h:108 msgid "Slovak" msgstr "" -#: ../rules/base.xml.in.h:706 +#: ../rules/base.xml.in.h:707 msgid "Slovak (extended Backslash)" msgstr "" -#: ../rules/base.xml.in.h:707 +#: ../rules/base.xml.in.h:708 msgid "Slovak (qwerty)" msgstr "" -#: ../rules/base.xml.in.h:708 +#: ../rules/base.xml.in.h:709 msgid "Slovak (qwerty, extended Backslash)" msgstr "" -#: ../rules/base.xml.in.h:709 ../rules/base.extras.xml.in.h:110 +#: ../rules/base.xml.in.h:710 ../rules/base.extras.xml.in.h:111 msgid "Spanish" msgstr "" -#: ../rules/base.xml.in.h:710 +#: ../rules/base.xml.in.h:711 msgid "Spanish (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:711 +#: ../rules/base.xml.in.h:712 msgid "Spanish (include dead tilde)" msgstr "" -#: ../rules/base.xml.in.h:712 +#: ../rules/base.xml.in.h:713 msgid "Spanish (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:713 +#: ../rules/base.xml.in.h:714 msgid "Spanish (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:714 +#: ../rules/base.xml.in.h:715 msgid "Asturian (Spain, with bottom-dot H and bottom-dot L)" msgstr "" -#: ../rules/base.xml.in.h:715 +#: ../rules/base.xml.in.h:716 msgid "Catalan (Spain, with middle-dot L)" msgstr "" -#: ../rules/base.xml.in.h:716 +#: ../rules/base.xml.in.h:717 msgid "Spanish (Macintosh)" msgstr "" #. Keyboard indicator for Swedish layouts -#: ../rules/base.xml.in.h:718 ../rules/base.extras.xml.in.h:112 +#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 msgid "sv" msgstr "" -#: ../rules/base.xml.in.h:719 ../rules/base.extras.xml.in.h:113 +#: ../rules/base.xml.in.h:720 ../rules/base.extras.xml.in.h:114 msgid "Swedish" msgstr "" -#: ../rules/base.xml.in.h:720 +#: ../rules/base.xml.in.h:721 msgid "Swedish (eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:721 +#: ../rules/base.xml.in.h:722 msgid "Swedish (Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:722 +#: ../rules/base.xml.in.h:723 msgid "Russian (Sweden, phonetic)" msgstr "" -#: ../rules/base.xml.in.h:723 +#: ../rules/base.xml.in.h:724 msgid "Russian (Sweden, phonetic, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:724 +#: ../rules/base.xml.in.h:725 msgid "Northern Saami (Sweden)" msgstr "" -#: ../rules/base.xml.in.h:725 +#: ../rules/base.xml.in.h:726 msgid "Swedish (Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:726 +#: ../rules/base.xml.in.h:727 msgid "Swedish (Svdvorak)" msgstr "" -#: ../rules/base.xml.in.h:727 +#: ../rules/base.xml.in.h:728 msgid "Swedish Sign Language" msgstr "" -#: ../rules/base.xml.in.h:728 ../rules/base.extras.xml.in.h:115 +#: ../rules/base.xml.in.h:729 ../rules/base.extras.xml.in.h:116 msgid "German (Switzerland)" msgstr "" -#: ../rules/base.xml.in.h:729 +#: ../rules/base.xml.in.h:730 msgid "German (Switzerland, legacy)" msgstr "" -#: ../rules/base.xml.in.h:730 +#: ../rules/base.xml.in.h:731 msgid "German (Switzerland, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:731 +#: ../rules/base.xml.in.h:732 msgid "German (Switzerland, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:732 +#: ../rules/base.xml.in.h:733 msgid "French (Switzerland)" msgstr "" -#: ../rules/base.xml.in.h:733 +#: ../rules/base.xml.in.h:734 msgid "French (Switzerland, eliminate dead keys)" msgstr "" -#: ../rules/base.xml.in.h:734 +#: ../rules/base.xml.in.h:735 msgid "French (Switzerland, Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:735 +#: ../rules/base.xml.in.h:736 msgid "French (Switzerland, Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:736 +#: ../rules/base.xml.in.h:737 msgid "German (Switzerland, Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:737 +#: ../rules/base.xml.in.h:738 msgid "Arabic (Syria)" msgstr "" #. Keyboard indicator for Syriac layouts -#: ../rules/base.xml.in.h:739 +#: ../rules/base.xml.in.h:740 msgid "syc" msgstr "" -#: ../rules/base.xml.in.h:740 +#: ../rules/base.xml.in.h:741 msgid "Syriac" msgstr "" -#: ../rules/base.xml.in.h:741 +#: ../rules/base.xml.in.h:742 msgid "Syriac (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:742 +#: ../rules/base.xml.in.h:743 msgid "Kurdish (Syria, Latin Q)" msgstr "" -#: ../rules/base.xml.in.h:743 +#: ../rules/base.xml.in.h:744 msgid "Kurdish (Syria, F)" msgstr "" -#: ../rules/base.xml.in.h:744 +#: ../rules/base.xml.in.h:745 msgid "Kurdish (Syria, Latin Alt-Q)" msgstr "" #. Keyboard indicator for Tajik layouts -#: ../rules/base.xml.in.h:746 +#: ../rules/base.xml.in.h:747 msgid "tg" msgstr "" -#: ../rules/base.xml.in.h:747 +#: ../rules/base.xml.in.h:748 msgid "Tajik" msgstr "" -#: ../rules/base.xml.in.h:748 +#: ../rules/base.xml.in.h:749 msgid "Tajik (legacy)" msgstr "" #. Keyboard indicator for Sinhala layouts -#: ../rules/base.xml.in.h:750 +#: ../rules/base.xml.in.h:751 msgid "si" msgstr "" -#: ../rules/base.xml.in.h:751 +#: ../rules/base.xml.in.h:752 msgid "Sinhala (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:752 +#: ../rules/base.xml.in.h:753 msgid "Tamil (Sri Lanka, Unicode)" msgstr "" -#: ../rules/base.xml.in.h:753 +#: ../rules/base.xml.in.h:754 msgid "Tamil (Sri Lanka, TAB Typewriter)" msgstr "" #. Keyboard indicator for Thai layouts -#: ../rules/base.xml.in.h:755 +#: ../rules/base.xml.in.h:756 msgid "th" msgstr "" -#: ../rules/base.xml.in.h:756 +#: ../rules/base.xml.in.h:757 msgid "Thai" msgstr "" -#: ../rules/base.xml.in.h:757 +#: ../rules/base.xml.in.h:758 msgid "Thai (TIS-820.2538)" msgstr "" -#: ../rules/base.xml.in.h:758 +#: ../rules/base.xml.in.h:759 msgid "Thai (Pattachote)" msgstr "" #. Keyboard indicator for Turkish layouts -#: ../rules/base.xml.in.h:760 ../rules/base.extras.xml.in.h:118 +#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 msgid "tr" msgstr "" -#: ../rules/base.xml.in.h:761 ../rules/base.extras.xml.in.h:119 +#: ../rules/base.xml.in.h:762 ../rules/base.extras.xml.in.h:120 msgid "Turkish" msgstr "" -#: ../rules/base.xml.in.h:762 +#: ../rules/base.xml.in.h:763 msgid "Turkish (F)" msgstr "" -#: ../rules/base.xml.in.h:763 +#: ../rules/base.xml.in.h:764 msgid "Turkish (Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:764 +#: ../rules/base.xml.in.h:765 msgid "Turkish (Sun dead keys)" msgstr "" -#: ../rules/base.xml.in.h:765 +#: ../rules/base.xml.in.h:766 msgid "Kurdish (Turkey, Latin Q)" msgstr "" -#: ../rules/base.xml.in.h:766 +#: ../rules/base.xml.in.h:767 msgid "Kurdish (Turkey, F)" msgstr "" -#: ../rules/base.xml.in.h:767 +#: ../rules/base.xml.in.h:768 msgid "Kurdish (Turkey, Latin Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:768 +#: ../rules/base.xml.in.h:769 msgid "Turkish (international with dead keys)" msgstr "" #. Keyboard indicator for Crimean Tatar layouts -#: ../rules/base.xml.in.h:770 ../rules/base.extras.xml.in.h:47 +#: ../rules/base.xml.in.h:771 ../rules/base.extras.xml.in.h:48 msgid "crh" msgstr "" -#: ../rules/base.xml.in.h:771 +#: ../rules/base.xml.in.h:772 msgid "Crimean Tatar (Turkish Q)" msgstr "" -#: ../rules/base.xml.in.h:772 +#: ../rules/base.xml.in.h:773 msgid "Crimean Tatar (Turkish F)" msgstr "" -#: ../rules/base.xml.in.h:773 +#: ../rules/base.xml.in.h:774 msgid "Crimean Tatar (Turkish Alt-Q)" msgstr "" -#: ../rules/base.xml.in.h:774 +#: ../rules/base.xml.in.h:775 msgid "Taiwanese" msgstr "" -#: ../rules/base.xml.in.h:775 +#: ../rules/base.xml.in.h:776 msgid "Taiwanese (indigenous)" msgstr "" #. Keyboard indicator for Saisiyat layouts -#: ../rules/base.xml.in.h:777 +#: ../rules/base.xml.in.h:778 msgid "xsy" msgstr "" -#: ../rules/base.xml.in.h:778 +#: ../rules/base.xml.in.h:779 msgid "Saisiyat (Taiwan)" msgstr "" #. Keyboard indicator for Ukranian layouts -#: ../rules/base.xml.in.h:780 ../rules/base.extras.xml.in.h:121 +#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 msgid "uk" msgstr "" -#: ../rules/base.xml.in.h:781 ../rules/base.extras.xml.in.h:122 +#: ../rules/base.xml.in.h:782 ../rules/base.extras.xml.in.h:123 msgid "Ukrainian" msgstr "" -#: ../rules/base.xml.in.h:782 +#: ../rules/base.xml.in.h:783 msgid "Ukrainian (phonetic)" msgstr "" -#: ../rules/base.xml.in.h:783 +#: ../rules/base.xml.in.h:784 msgid "Ukrainian (typewriter)" msgstr "" -#: ../rules/base.xml.in.h:784 +#: ../rules/base.xml.in.h:785 msgid "Ukrainian (WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:785 +#: ../rules/base.xml.in.h:786 msgid "Ukrainian (legacy)" msgstr "" -#: ../rules/base.xml.in.h:786 +#: ../rules/base.xml.in.h:787 msgid "Ukrainian (standard RSTU)" msgstr "" -#: ../rules/base.xml.in.h:787 +#: ../rules/base.xml.in.h:788 msgid "Russian (Ukraine, standard RSTU)" msgstr "" -#: ../rules/base.xml.in.h:788 +#: ../rules/base.xml.in.h:789 msgid "Ukrainian (homophonic)" msgstr "" -#: ../rules/base.xml.in.h:789 ../rules/base.extras.xml.in.h:124 +#: ../rules/base.xml.in.h:790 ../rules/base.extras.xml.in.h:125 msgid "English (UK)" msgstr "" -#: ../rules/base.xml.in.h:790 +#: ../rules/base.xml.in.h:791 msgid "English (UK, extended WinKeys)" msgstr "" -#: ../rules/base.xml.in.h:791 +#: ../rules/base.xml.in.h:792 msgid "English (UK, international with dead keys)" msgstr "" -#: ../rules/base.xml.in.h:792 +#: ../rules/base.xml.in.h:793 msgid "English (UK, Dvorak)" msgstr "" -#: ../rules/base.xml.in.h:793 +#: ../rules/base.xml.in.h:794 msgid "English (UK, Dvorak with UK punctuation)" msgstr "" -#: ../rules/base.xml.in.h:794 +#: ../rules/base.xml.in.h:795 msgid "English (UK, Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:795 +#: ../rules/base.xml.in.h:796 msgid "English (UK, Macintosh international)" msgstr "" -#: ../rules/base.xml.in.h:796 +#: ../rules/base.xml.in.h:797 msgid "English (UK, Colemak)" msgstr "" -#: ../rules/base.xml.in.h:797 +#: ../rules/base.xml.in.h:798 msgid "Uzbek" msgstr "" -#: ../rules/base.xml.in.h:798 +#: ../rules/base.xml.in.h:799 msgid "Uzbek (Latin)" msgstr "" #. Keyboard indicator for Vietnamese layouts -#: ../rules/base.xml.in.h:800 +#: ../rules/base.xml.in.h:801 msgid "vi" msgstr "" -#: ../rules/base.xml.in.h:801 +#: ../rules/base.xml.in.h:802 msgid "Vietnamese" msgstr "" #. Keyboard indicator for Korean layouts -#: ../rules/base.xml.in.h:803 ../rules/base.extras.xml.in.h:126 +#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 msgid "ko" msgstr "" -#: ../rules/base.xml.in.h:804 ../rules/base.extras.xml.in.h:127 +#: ../rules/base.xml.in.h:805 ../rules/base.extras.xml.in.h:128 msgid "Korean" msgstr "" -#: ../rules/base.xml.in.h:805 +#: ../rules/base.xml.in.h:806 msgid "Korean (101/104 key compatible)" msgstr "" -#: ../rules/base.xml.in.h:806 +#: ../rules/base.xml.in.h:807 msgid "Japanese (PC-98xx Series)" msgstr "" #. Keyboard indicator for Irish layouts -#: ../rules/base.xml.in.h:808 +#: ../rules/base.xml.in.h:809 msgid "ie" msgstr "" -#: ../rules/base.xml.in.h:809 +#: ../rules/base.xml.in.h:810 msgid "Irish" msgstr "" -#: ../rules/base.xml.in.h:810 +#: ../rules/base.xml.in.h:811 msgid "CloGaelach" msgstr "" -#: ../rules/base.xml.in.h:811 +#: ../rules/base.xml.in.h:812 msgid "Irish (UnicodeExpert)" msgstr "" -#: ../rules/base.xml.in.h:812 +#: ../rules/base.xml.in.h:813 msgid "Ogham" msgstr "" -#: ../rules/base.xml.in.h:813 +#: ../rules/base.xml.in.h:814 msgid "Ogham (IS434)" msgstr "" -#: ../rules/base.xml.in.h:814 +#: ../rules/base.xml.in.h:815 msgid "Urdu (Pakistan)" msgstr "" -#: ../rules/base.xml.in.h:815 +#: ../rules/base.xml.in.h:816 msgid "Urdu (Pakistan, CRULP)" msgstr "" -#: ../rules/base.xml.in.h:816 +#: ../rules/base.xml.in.h:817 msgid "Urdu (Pakistan, NLA)" msgstr "" -#: ../rules/base.xml.in.h:817 +#: ../rules/base.xml.in.h:818 msgid "Arabic (Pakistan)" msgstr "" #. Keyboard indicator for Sindhi layouts -#: ../rules/base.xml.in.h:819 +#: ../rules/base.xml.in.h:820 msgid "sd" msgstr "" -#: ../rules/base.xml.in.h:820 +#: ../rules/base.xml.in.h:821 msgid "Sindhi" msgstr "" #. Keyboard indicator for Dhivehi layouts -#: ../rules/base.xml.in.h:822 +#: ../rules/base.xml.in.h:823 msgid "dv" msgstr "" -#: ../rules/base.xml.in.h:823 +#: ../rules/base.xml.in.h:824 msgid "Dhivehi" msgstr "" -#: ../rules/base.xml.in.h:824 +#: ../rules/base.xml.in.h:825 msgid "English (South Africa)" msgstr "" #. Keyboard indicator for Esperanto layouts -#: ../rules/base.xml.in.h:826 +#: ../rules/base.xml.in.h:827 msgid "eo" msgstr "" -#: ../rules/base.xml.in.h:827 +#: ../rules/base.xml.in.h:828 msgid "Esperanto" msgstr "" -#: ../rules/base.xml.in.h:828 +#: ../rules/base.xml.in.h:829 msgid "Esperanto (displaced semicolon and quote, obsolete)" msgstr "" #. Keyboard indicator for Nepali layouts -#: ../rules/base.xml.in.h:830 +#: ../rules/base.xml.in.h:831 msgid "ne" msgstr "" -#: ../rules/base.xml.in.h:831 +#: ../rules/base.xml.in.h:832 msgid "Nepali" msgstr "" -#: ../rules/base.xml.in.h:832 +#: ../rules/base.xml.in.h:833 msgid "English (Nigeria)" msgstr "" #. Keyboard indicator for Igbo layouts -#: ../rules/base.xml.in.h:834 +#: ../rules/base.xml.in.h:835 msgid "ig" msgstr "" -#: ../rules/base.xml.in.h:835 +#: ../rules/base.xml.in.h:836 msgid "Igbo" msgstr "" #. Keyboard indicator for Yoruba layouts -#: ../rules/base.xml.in.h:837 +#: ../rules/base.xml.in.h:838 msgid "yo" msgstr "" -#: ../rules/base.xml.in.h:838 +#: ../rules/base.xml.in.h:839 msgid "Yoruba" msgstr "" #. Keyboard indicator for Amharic layouts -#: ../rules/base.xml.in.h:840 +#: ../rules/base.xml.in.h:841 msgid "am" msgstr "" -#: ../rules/base.xml.in.h:841 +#: ../rules/base.xml.in.h:842 msgid "Amharic" msgstr "" #. Keyboard indicator for Wolof layouts -#: ../rules/base.xml.in.h:843 +#: ../rules/base.xml.in.h:844 msgid "wo" msgstr "" -#: ../rules/base.xml.in.h:844 +#: ../rules/base.xml.in.h:845 msgid "Wolof" msgstr "" #. Keyboard indicator for Braille layouts -#: ../rules/base.xml.in.h:846 +#: ../rules/base.xml.in.h:847 msgid "brl" msgstr "" -#: ../rules/base.xml.in.h:847 +#: ../rules/base.xml.in.h:848 msgid "Braille" msgstr "" -#: ../rules/base.xml.in.h:848 +#: ../rules/base.xml.in.h:849 msgid "Braille (left hand)" msgstr "" -#: ../rules/base.xml.in.h:849 +#: ../rules/base.xml.in.h:850 msgid "Braille (right hand)" msgstr "" #. Keyboard indicator for Turkmen layouts -#: ../rules/base.xml.in.h:851 +#: ../rules/base.xml.in.h:852 msgid "tk" msgstr "" -#: ../rules/base.xml.in.h:852 +#: ../rules/base.xml.in.h:853 msgid "Turkmen" msgstr "" -#: ../rules/base.xml.in.h:853 +#: ../rules/base.xml.in.h:854 msgid "Turkmen (Alt-Q)" msgstr "" #. Keyboard indicator for Bambara layouts -#: ../rules/base.xml.in.h:855 +#: ../rules/base.xml.in.h:856 msgid "bm" msgstr "" -#: ../rules/base.xml.in.h:856 +#: ../rules/base.xml.in.h:857 msgid "Bambara" msgstr "" -#: ../rules/base.xml.in.h:857 +#: ../rules/base.xml.in.h:858 msgid "French (Mali, alternative)" msgstr "" -#: ../rules/base.xml.in.h:858 +#: ../rules/base.xml.in.h:859 msgid "English (Mali, US Macintosh)" msgstr "" -#: ../rules/base.xml.in.h:859 +#: ../rules/base.xml.in.h:860 msgid "English (Mali, US international)" msgstr "" #. Keyboard indicator for Swahili layouts -#: ../rules/base.xml.in.h:861 +#: ../rules/base.xml.in.h:862 msgid "sw" msgstr "" -#: ../rules/base.xml.in.h:862 +#: ../rules/base.xml.in.h:863 msgid "Swahili (Tanzania)" msgstr "" -#: ../rules/base.xml.in.h:863 +#: ../rules/base.xml.in.h:864 msgid "Swahili (Kenya)" msgstr "" -#: ../rules/base.xml.in.h:864 +#: ../rules/base.xml.in.h:865 msgid "Kikuyu" msgstr "" #. Keyboard indicator for Tswana layouts -#: ../rules/base.xml.in.h:866 +#: ../rules/base.xml.in.h:867 msgid "tn" msgstr "" -#: ../rules/base.xml.in.h:867 +#: ../rules/base.xml.in.h:868 msgid "Tswana" msgstr "" #. Keyboard indicator for Filipino layouts -#: ../rules/base.xml.in.h:869 +#: ../rules/base.xml.in.h:870 msgid "ph" msgstr "" -#: ../rules/base.xml.in.h:870 +#: ../rules/base.xml.in.h:871 msgid "Filipino" msgstr "" -#: ../rules/base.xml.in.h:871 +#: ../rules/base.xml.in.h:872 msgid "Filipino (QWERTY Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:872 +#: ../rules/base.xml.in.h:873 msgid "Filipino (Capewell-Dvorak Latin)" msgstr "" -#: ../rules/base.xml.in.h:873 +#: ../rules/base.xml.in.h:874 msgid "Filipino (Capewell-Dvorak Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:874 +#: ../rules/base.xml.in.h:875 msgid "Filipino (Capewell-QWERF 2006 Latin)" msgstr "" -#: ../rules/base.xml.in.h:875 +#: ../rules/base.xml.in.h:876 msgid "Filipino (Capewell-QWERF 2006 Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:876 +#: ../rules/base.xml.in.h:877 msgid "Filipino (Colemak Latin)" msgstr "" -#: ../rules/base.xml.in.h:877 +#: ../rules/base.xml.in.h:878 msgid "Filipino (Colemak Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:878 +#: ../rules/base.xml.in.h:879 msgid "Filipino (Dvorak Latin)" msgstr "" -#: ../rules/base.xml.in.h:879 +#: ../rules/base.xml.in.h:880 msgid "Filipino (Dvorak Baybayin)" msgstr "" -#: ../rules/base.xml.in.h:880 +#: ../rules/base.xml.in.h:881 msgid "md" msgstr "" -#: ../rules/base.xml.in.h:881 +#: ../rules/base.xml.in.h:882 msgid "Moldavian" msgstr "" -#: ../rules/base.xml.in.h:882 +#: ../rules/base.xml.in.h:883 msgid "gag" msgstr "" -#: ../rules/base.xml.in.h:883 +#: ../rules/base.xml.in.h:884 msgid "Moldavian (Gagauz)" msgstr "" -#: ../rules/base.xml.in.h:884 +#: ../rules/base.xml.in.h:885 msgid "Switching to another layout" msgstr "" -#: ../rules/base.xml.in.h:885 +#: ../rules/base.xml.in.h:886 msgid "Right Alt (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:886 +#: ../rules/base.xml.in.h:887 msgid "Left Alt (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:887 +#: ../rules/base.xml.in.h:888 msgid "Left Win (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:888 +#: ../rules/base.xml.in.h:889 msgid "Right Win (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:889 +#: ../rules/base.xml.in.h:890 msgid "Any Win key (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:890 +#: ../rules/base.xml.in.h:891 msgid "" "Caps Lock (while pressed), Alt+Caps Lock does the original capslock action" msgstr "" -#: ../rules/base.xml.in.h:891 +#: ../rules/base.xml.in.h:892 msgid "Right Ctrl (while pressed)" msgstr "" -#: ../rules/base.xml.in.h:892 +#: ../rules/base.xml.in.h:893 msgid "Right Alt" msgstr "" -#: ../rules/base.xml.in.h:893 +#: ../rules/base.xml.in.h:894 msgid "Left Alt" msgstr "" -#: ../rules/base.xml.in.h:894 +#: ../rules/base.xml.in.h:895 msgid "Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:895 +#: ../rules/base.xml.in.h:896 msgid "Shift+Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:896 +#: ../rules/base.xml.in.h:897 msgid "Caps Lock (to first layout), Shift+Caps Lock (to last layout)" msgstr "" -#: ../rules/base.xml.in.h:897 +#: ../rules/base.xml.in.h:898 msgid "Left Win (to first layout), Right Win/Menu (to last layout)" msgstr "" -#: ../rules/base.xml.in.h:898 +#: ../rules/base.xml.in.h:899 msgid "Left Ctrl (to first layout), Right Ctrl (to last layout)" msgstr "" -#: ../rules/base.xml.in.h:899 +#: ../rules/base.xml.in.h:900 msgid "Alt+Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:900 +#: ../rules/base.xml.in.h:901 msgid "Both Shift keys together" msgstr "" -#: ../rules/base.xml.in.h:901 +#: ../rules/base.xml.in.h:902 msgid "Both Alt keys together" msgstr "" -#: ../rules/base.xml.in.h:902 +#: ../rules/base.xml.in.h:903 msgid "Both Ctrl keys together" msgstr "" -#: ../rules/base.xml.in.h:903 +#: ../rules/base.xml.in.h:904 msgid "Ctrl+Shift" msgstr "" -#: ../rules/base.xml.in.h:904 +#: ../rules/base.xml.in.h:905 msgid "Left Ctrl+Left Shift" msgstr "" -#: ../rules/base.xml.in.h:905 +#: ../rules/base.xml.in.h:906 msgid "Right Ctrl+Right Shift" msgstr "" -#: ../rules/base.xml.in.h:906 +#: ../rules/base.xml.in.h:907 msgid "Alt+Ctrl" msgstr "" -#: ../rules/base.xml.in.h:907 +#: ../rules/base.xml.in.h:908 msgid "Alt+Shift" msgstr "" -#: ../rules/base.xml.in.h:908 +#: ../rules/base.xml.in.h:909 msgid "Left Alt+Left Shift" msgstr "" -#: ../rules/base.xml.in.h:909 +#: ../rules/base.xml.in.h:910 msgid "Alt+Space" msgstr "" -#: ../rules/base.xml.in.h:910 +#: ../rules/base.xml.in.h:911 msgid "Menu" msgstr "" -#: ../rules/base.xml.in.h:911 +#: ../rules/base.xml.in.h:912 msgid "Left Win" msgstr "" -#: ../rules/base.xml.in.h:912 +#: ../rules/base.xml.in.h:913 msgid "Right Win" msgstr "" -#: ../rules/base.xml.in.h:913 +#: ../rules/base.xml.in.h:914 msgid "Left Shift" msgstr "" -#: ../rules/base.xml.in.h:914 +#: ../rules/base.xml.in.h:915 msgid "Right Shift" msgstr "" -#: ../rules/base.xml.in.h:915 +#: ../rules/base.xml.in.h:916 msgid "Left Ctrl" msgstr "" -#: ../rules/base.xml.in.h:916 +#: ../rules/base.xml.in.h:917 msgid "Right Ctrl" msgstr "" -#: ../rules/base.xml.in.h:917 +#: ../rules/base.xml.in.h:918 msgid "Scroll Lock" msgstr "" -#: ../rules/base.xml.in.h:918 +#: ../rules/base.xml.in.h:919 msgid "LeftCtrl+LeftWin (to first layout), RightCtrl+Menu (to second layout)" msgstr "" -#: ../rules/base.xml.in.h:919 +#: ../rules/base.xml.in.h:920 msgid "Key to choose 3rd level" msgstr "" -#: ../rules/base.xml.in.h:920 +#: ../rules/base.xml.in.h:921 msgid "Any Win key" msgstr "" -#: ../rules/base.xml.in.h:921 +#: ../rules/base.xml.in.h:922 msgid "Any Alt key" msgstr "" -#: ../rules/base.xml.in.h:922 +#: ../rules/base.xml.in.h:923 msgid "Right Alt, Shift+Right Alt key is Compose" msgstr "" -#: ../rules/base.xml.in.h:923 +#: ../rules/base.xml.in.h:924 msgid "Right Alt key never chooses 3rd level" msgstr "" -#: ../rules/base.xml.in.h:924 +#: ../rules/base.xml.in.h:925 msgid "Enter on keypad" msgstr "" -#: ../rules/base.xml.in.h:925 +#: ../rules/base.xml.in.h:926 msgid "Backslash" msgstr "" -#: ../rules/base.xml.in.h:926 +#: ../rules/base.xml.in.h:927 msgid "<Less/Greater>" msgstr "" -#: ../rules/base.xml.in.h:927 +#: ../rules/base.xml.in.h:928 msgid "" "Caps Lock chooses 3rd level, acts as onetime lock when pressed together with " "another 3rd-level-chooser" msgstr "" -#: ../rules/base.xml.in.h:928 +#: ../rules/base.xml.in.h:929 msgid "" "Backslash chooses 3rd level, acts as onetime lock when pressed together with " "another 3rd-level-chooser" msgstr "" -#: ../rules/base.xml.in.h:929 +#: ../rules/base.xml.in.h:930 msgid "" "<Less/Greater> chooses 3rd level, acts as onetime lock when pressed " "together with another 3rd-level-chooser" msgstr "" -#: ../rules/base.xml.in.h:930 +#: ../rules/base.xml.in.h:931 msgid "Ctrl key position" msgstr "" -#: ../rules/base.xml.in.h:931 +#: ../rules/base.xml.in.h:932 msgid "Caps Lock as Ctrl" msgstr "" -#: ../rules/base.xml.in.h:932 +#: ../rules/base.xml.in.h:933 msgid "Left Ctrl as Meta" msgstr "" -#: ../rules/base.xml.in.h:933 +#: ../rules/base.xml.in.h:934 msgid "Swap Ctrl and Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:934 +#: ../rules/base.xml.in.h:935 msgid "At left of 'A'" msgstr "" -#: ../rules/base.xml.in.h:935 +#: ../rules/base.xml.in.h:936 msgid "At bottom left" msgstr "" -#: ../rules/base.xml.in.h:936 +#: ../rules/base.xml.in.h:937 msgid "Right Ctrl as Right Alt" msgstr "" -#: ../rules/base.xml.in.h:937 +#: ../rules/base.xml.in.h:938 msgid "Menu as Right Ctrl" msgstr "" -#: ../rules/base.xml.in.h:938 +#: ../rules/base.xml.in.h:939 msgid "Right Alt as Right Ctrl" msgstr "" -#: ../rules/base.xml.in.h:939 +#: ../rules/base.xml.in.h:940 +msgid "Swap Left Alt key with Left Ctrl key" +msgstr "" + +#: ../rules/base.xml.in.h:941 +msgid "Swap Left Win key with Left Ctrl key" +msgstr "" + +#: ../rules/base.xml.in.h:942 +msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Alt" +msgstr "" + +#: ../rules/base.xml.in.h:943 msgid "Use keyboard LED to show alternative layout" msgstr "" -#: ../rules/base.xml.in.h:940 +#: ../rules/base.xml.in.h:944 msgid "Num Lock" msgstr "" -#: ../rules/base.xml.in.h:941 +#: ../rules/base.xml.in.h:945 msgid "Layout of numeric keypad" msgstr "" -#: ../rules/base.xml.in.h:942 +#: ../rules/base.xml.in.h:946 msgid "Legacy" msgstr "" -#: ../rules/base.xml.in.h:943 +#: ../rules/base.xml.in.h:947 msgid "Unicode additions (arrows and math operators)" msgstr "" -#: ../rules/base.xml.in.h:944 +#: ../rules/base.xml.in.h:948 msgid "" "Unicode additions (arrows and math operators; math operators on default " "level)" msgstr "" -#: ../rules/base.xml.in.h:945 +#: ../rules/base.xml.in.h:949 msgid "Legacy Wang 724" msgstr "" -#: ../rules/base.xml.in.h:946 +#: ../rules/base.xml.in.h:950 msgid "Wang 724 keypad with Unicode additions (arrows and math operators)" msgstr "" -#: ../rules/base.xml.in.h:947 +#: ../rules/base.xml.in.h:951 msgid "" "Wang 724 keypad with Unicode additions (arrows and math operators; math " "operators on default level)" msgstr "" -#: ../rules/base.xml.in.h:948 +#: ../rules/base.xml.in.h:952 msgid "Hexadecimal" msgstr "" -#: ../rules/base.xml.in.h:949 +#: ../rules/base.xml.in.h:953 msgid "ATM/phone-style" msgstr "" -#: ../rules/base.xml.in.h:950 +#: ../rules/base.xml.in.h:954 msgid "Numeric keypad delete key behaviour" msgstr "" -#: ../rules/base.xml.in.h:951 +#: ../rules/base.xml.in.h:955 msgid "Legacy key with dot" msgstr "" #. Actually, with KP_SEPARATOR, as the old keypad(comma) -#: ../rules/base.xml.in.h:953 +#: ../rules/base.xml.in.h:957 msgid "Legacy key with comma" msgstr "" -#: ../rules/base.xml.in.h:954 +#: ../rules/base.xml.in.h:958 msgid "Four-level key with dot" msgstr "" -#: ../rules/base.xml.in.h:955 +#: ../rules/base.xml.in.h:959 msgid "Four-level key with dot, Latin-9 only" msgstr "" -#: ../rules/base.xml.in.h:956 +#: ../rules/base.xml.in.h:960 msgid "Four-level key with comma" msgstr "" -#: ../rules/base.xml.in.h:957 +#: ../rules/base.xml.in.h:961 msgid "Four-level key with momayyez" msgstr "" #. This assumes the KP_ abstract symbols are actually useful for some apps #. The description needs to be rewritten -#: ../rules/base.xml.in.h:960 +#: ../rules/base.xml.in.h:964 msgid "Four-level key with abstract separators" msgstr "" -#: ../rules/base.xml.in.h:961 +#: ../rules/base.xml.in.h:965 msgid "Semicolon on third level" msgstr "" -#: ../rules/base.xml.in.h:962 +#: ../rules/base.xml.in.h:966 msgid "Caps Lock key behavior" msgstr "" -#: ../rules/base.xml.in.h:963 +#: ../rules/base.xml.in.h:967 msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:964 +#: ../rules/base.xml.in.h:968 msgid "Caps Lock uses internal capitalization; Shift doesn't affect Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:965 +#: ../rules/base.xml.in.h:969 msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:966 +#: ../rules/base.xml.in.h:970 msgid "Caps Lock acts as Shift with locking; Shift doesn't affect Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:967 +#: ../rules/base.xml.in.h:971 msgid "Caps Lock toggles normal capitalization of alphabetic characters" msgstr "" -#: ../rules/base.xml.in.h:968 +#: ../rules/base.xml.in.h:972 msgid "Make Caps Lock an additional Num Lock" msgstr "" -#: ../rules/base.xml.in.h:969 +#: ../rules/base.xml.in.h:973 msgid "Swap ESC and Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:970 +#: ../rules/base.xml.in.h:974 msgid "Make Caps Lock an additional ESC" msgstr "" -#: ../rules/base.xml.in.h:971 +#: ../rules/base.xml.in.h:975 msgid "Make Caps Lock an additional Backspace" msgstr "" -#: ../rules/base.xml.in.h:972 +#: ../rules/base.xml.in.h:976 msgid "Make Caps Lock an additional Super" msgstr "" -#: ../rules/base.xml.in.h:973 +#: ../rules/base.xml.in.h:977 msgid "Make Caps Lock an additional Hyper" msgstr "" -#: ../rules/base.xml.in.h:974 +#: ../rules/base.xml.in.h:978 msgid "Caps Lock toggles ShiftLock (affects all keys)" msgstr "" -#: ../rules/base.xml.in.h:975 +#: ../rules/base.xml.in.h:979 msgid "Caps Lock is disabled" msgstr "" -#: ../rules/base.xml.in.h:976 +#: ../rules/base.xml.in.h:980 msgid "Make Caps Lock an additional Ctrl" msgstr "" -#: ../rules/base.xml.in.h:977 +#: ../rules/base.xml.in.h:981 msgid "Alt/Win key behavior" msgstr "" -#: ../rules/base.xml.in.h:978 +#: ../rules/base.xml.in.h:982 msgid "Add the standard behavior to Menu key" msgstr "" -#: ../rules/base.xml.in.h:979 +#: ../rules/base.xml.in.h:983 msgid "Alt and Meta are on Alt keys" msgstr "" -#: ../rules/base.xml.in.h:980 +#: ../rules/base.xml.in.h:984 msgid "Alt is mapped to Win keys (and the usual Alt keys)" msgstr "" -#: ../rules/base.xml.in.h:981 +#: ../rules/base.xml.in.h:985 msgid "Ctrl is mapped to Win keys (and the usual Ctrl keys)" msgstr "" -#: ../rules/base.xml.in.h:982 +#: ../rules/base.xml.in.h:986 msgid "Ctrl is mapped to Alt keys, Alt is mapped to Win keys" msgstr "" -#: ../rules/base.xml.in.h:983 +#: ../rules/base.xml.in.h:987 msgid "Meta is mapped to Win keys" msgstr "" -#: ../rules/base.xml.in.h:984 +#: ../rules/base.xml.in.h:988 msgid "Meta is mapped to Left Win" msgstr "" -#: ../rules/base.xml.in.h:985 +#: ../rules/base.xml.in.h:989 msgid "Hyper is mapped to Win-keys" msgstr "" -#: ../rules/base.xml.in.h:986 +#: ../rules/base.xml.in.h:990 msgid "Alt is mapped to Right Win, Super to Menu" msgstr "" -#: ../rules/base.xml.in.h:987 +#: ../rules/base.xml.in.h:991 msgid "Alt is swapped with Win" msgstr "" -#: ../rules/base.xml.in.h:988 +#: ../rules/base.xml.in.h:992 msgid "Position of Compose key" msgstr "" -#: ../rules/base.xml.in.h:989 +#: ../rules/base.xml.in.h:993 msgid "3rd level of Left Win" msgstr "" -#: ../rules/base.xml.in.h:990 +#: ../rules/base.xml.in.h:994 msgid "3rd level of Right Win" msgstr "" -#: ../rules/base.xml.in.h:991 +#: ../rules/base.xml.in.h:995 msgid "3rd level of Menu" msgstr "" -#: ../rules/base.xml.in.h:992 +#: ../rules/base.xml.in.h:996 msgid "3rd level of Left Ctrl" msgstr "" -#: ../rules/base.xml.in.h:993 +#: ../rules/base.xml.in.h:997 msgid "3rd level of Right Ctrl" msgstr "" -#: ../rules/base.xml.in.h:994 +#: ../rules/base.xml.in.h:998 msgid "3rd level of Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:995 +#: ../rules/base.xml.in.h:999 msgid "3rd level of <Less/Greater>" msgstr "" -#: ../rules/base.xml.in.h:996 +#: ../rules/base.xml.in.h:1000 msgid "Pause" msgstr "" -#: ../rules/base.xml.in.h:997 +#: ../rules/base.xml.in.h:1001 msgid "PrtSc" msgstr "" -#: ../rules/base.xml.in.h:998 +#: ../rules/base.xml.in.h:1002 msgid "Miscellaneous compatibility options" msgstr "" -#: ../rules/base.xml.in.h:999 +#: ../rules/base.xml.in.h:1003 msgid "Default numeric keypad keys" msgstr "" -#: ../rules/base.xml.in.h:1000 +#: ../rules/base.xml.in.h:1004 msgid "Numeric keypad keys always enter digits (as in Mac OS)" msgstr "" -#: ../rules/base.xml.in.h:1001 +#: ../rules/base.xml.in.h:1005 msgid "Shift with numeric keypad keys works as in MS Windows" msgstr "" -#: ../rules/base.xml.in.h:1002 +#: ../rules/base.xml.in.h:1006 msgid "Shift does not cancel Num Lock, chooses 3rd level instead" msgstr "" -#: ../rules/base.xml.in.h:1003 +#: ../rules/base.xml.in.h:1007 msgid "Special keys (Ctrl+Alt+<key>) handled in a server" msgstr "" -#: ../rules/base.xml.in.h:1004 +#: ../rules/base.xml.in.h:1008 msgid "" "Apple Aluminium Keyboard: emulate PC keys (Print, Scroll Lock, Pause, Num " "Lock)" msgstr "" -#: ../rules/base.xml.in.h:1005 +#: ../rules/base.xml.in.h:1009 msgid "Shift cancels Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:1006 +#: ../rules/base.xml.in.h:1010 msgid "Enable extra typographic characters" msgstr "" -#: ../rules/base.xml.in.h:1007 +#: ../rules/base.xml.in.h:1011 msgid "Both Shift keys together toggle Caps Lock" msgstr "" -#: ../rules/base.xml.in.h:1008 +#: ../rules/base.xml.in.h:1012 msgid "Both Shift keys together activate Caps Lock, one Shift key deactivates" msgstr "" -#: ../rules/base.xml.in.h:1009 +#: ../rules/base.xml.in.h:1013 msgid "Both Shift keys together toggle ShiftLock" msgstr "" -#: ../rules/base.xml.in.h:1010 +#: ../rules/base.xml.in.h:1014 msgid "Shift + NumLock toggles PointerKeys" msgstr "" -#: ../rules/base.xml.in.h:1011 +#: ../rules/base.xml.in.h:1015 msgid "Allow breaking grabs with keyboard actions (warning: security risk)" msgstr "" -#: ../rules/base.xml.in.h:1012 +#: ../rules/base.xml.in.h:1016 +msgid "Allow grab and window tree logging" +msgstr "" + +#: ../rules/base.xml.in.h:1017 msgid "Adding currency signs to certain keys" msgstr "" -#: ../rules/base.xml.in.h:1013 +#: ../rules/base.xml.in.h:1018 msgid "Euro on E" msgstr "" -#: ../rules/base.xml.in.h:1014 +#: ../rules/base.xml.in.h:1019 msgid "Euro on 2" msgstr "" -#: ../rules/base.xml.in.h:1015 +#: ../rules/base.xml.in.h:1020 msgid "Euro on 4" msgstr "" -#: ../rules/base.xml.in.h:1016 +#: ../rules/base.xml.in.h:1021 msgid "Euro on 5" msgstr "" -#: ../rules/base.xml.in.h:1017 +#: ../rules/base.xml.in.h:1022 msgid "Rupee on 4" msgstr "" -#: ../rules/base.xml.in.h:1018 +#: ../rules/base.xml.in.h:1023 msgid "Key to choose 5th level" msgstr "" -#: ../rules/base.xml.in.h:1019 +#: ../rules/base.xml.in.h:1024 msgid "" "<Less/Greater> chooses 5th level, locks when pressed together with " "another 5th-level-chooser" msgstr "" -#: ../rules/base.xml.in.h:1020 +#: ../rules/base.xml.in.h:1025 msgid "" "Right Alt chooses 5th level, locks when pressed together with another 5th-" "level-chooser" msgstr "" -#: ../rules/base.xml.in.h:1021 +#: ../rules/base.xml.in.h:1026 msgid "" "Left Win chooses 5th level, locks when pressed together with another 5th-" "level-chooser" msgstr "" -#: ../rules/base.xml.in.h:1022 +#: ../rules/base.xml.in.h:1027 msgid "" "Right Win chooses 5th level, locks when pressed together with another 5th-" "level-chooser" msgstr "" -#: ../rules/base.xml.in.h:1023 +#: ../rules/base.xml.in.h:1028 msgid "Using space key to input non-breakable space character" msgstr "" -#: ../rules/base.xml.in.h:1024 +#: ../rules/base.xml.in.h:1029 msgid "Usual space at any level" msgstr "" -#: ../rules/base.xml.in.h:1025 +#: ../rules/base.xml.in.h:1030 msgid "Non-breakable space character at second level" msgstr "" -#: ../rules/base.xml.in.h:1026 +#: ../rules/base.xml.in.h:1031 msgid "Non-breakable space character at third level" msgstr "" -#: ../rules/base.xml.in.h:1027 +#: ../rules/base.xml.in.h:1032 msgid "Non-breakable space character at third level, nothing at fourth level" msgstr "" -#: ../rules/base.xml.in.h:1028 +#: ../rules/base.xml.in.h:1033 msgid "" "Non-breakable space character at third level, thin non-breakable space " "character at fourth level" msgstr "" -#: ../rules/base.xml.in.h:1029 +#: ../rules/base.xml.in.h:1034 msgid "Non-breakable space character at fourth level" msgstr "" -#: ../rules/base.xml.in.h:1030 +#: ../rules/base.xml.in.h:1035 msgid "" "Non-breakable space character at fourth level, thin non-breakable space " "character at sixth level" msgstr "" -#: ../rules/base.xml.in.h:1031 +#: ../rules/base.xml.in.h:1036 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:1032 +#: ../rules/base.xml.in.h:1037 msgid "Zero-width non-joiner character at second level" msgstr "" -#: ../rules/base.xml.in.h:1033 +#: ../rules/base.xml.in.h:1038 msgid "" "Zero-width non-joiner character at second level, zero-width joiner character " "at third level" msgstr "" -#: ../rules/base.xml.in.h:1034 +#: ../rules/base.xml.in.h:1039 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:1035 +#: ../rules/base.xml.in.h:1040 msgid "" "Zero-width non-joiner character at second level, non-breakable space " "character at third level" msgstr "" -#: ../rules/base.xml.in.h:1036 +#: ../rules/base.xml.in.h:1041 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:1037 +#: ../rules/base.xml.in.h:1042 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:1038 +#: ../rules/base.xml.in.h:1043 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:1039 +#: ../rules/base.xml.in.h:1044 msgid "" "Zero-width non-joiner character at third level, zero-width joiner at fourth " "level" msgstr "" -#: ../rules/base.xml.in.h:1040 +#: ../rules/base.xml.in.h:1045 msgid "Japanese keyboard options" msgstr "" -#: ../rules/base.xml.in.h:1041 +#: ../rules/base.xml.in.h:1046 msgid "Kana Lock key is locking" msgstr "" -#: ../rules/base.xml.in.h:1042 +#: ../rules/base.xml.in.h:1047 msgid "NICOLA-F style Backspace" msgstr "" -#: ../rules/base.xml.in.h:1043 +#: ../rules/base.xml.in.h:1048 msgid "Make Zenkaku Hankaku an additional ESC" msgstr "" -#: ../rules/base.xml.in.h:1044 +#: ../rules/base.xml.in.h:1049 msgid "Adding Esperanto supersigned letters" msgstr "" -#: ../rules/base.xml.in.h:1045 +#: ../rules/base.xml.in.h:1050 msgid "To the corresponding key in a Qwerty layout" msgstr "" -#: ../rules/base.xml.in.h:1046 +#: ../rules/base.xml.in.h:1051 msgid "To the corresponding key in a Dvorak layout" msgstr "" -#: ../rules/base.xml.in.h:1047 +#: ../rules/base.xml.in.h:1052 msgid "To the corresponding key in a Colemak layout" msgstr "" -#: ../rules/base.xml.in.h:1048 +#: ../rules/base.xml.in.h:1053 msgid "Maintain key compatibility with old Solaris keycodes" msgstr "" -#: ../rules/base.xml.in.h:1049 +#: ../rules/base.xml.in.h:1054 msgid "Sun Key compatibility" msgstr "" -#: ../rules/base.xml.in.h:1050 +#: ../rules/base.xml.in.h:1055 msgid "Key sequence to kill the X server" msgstr "" -#: ../rules/base.xml.in.h:1051 +#: ../rules/base.xml.in.h:1056 msgid "Ctrl + Alt + Backspace" msgstr "" @@ -4061,146 +4081,150 @@ msgstr "" msgid "English (US, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:42 -msgid "Polish (international with dead keys)" +#: ../rules/base.extras.xml.in.h:40 +msgid "English (Norman)" msgstr "" #: ../rules/base.extras.xml.in.h:43 -msgid "Polish (Colemak)" +msgid "Polish (international with dead keys)" msgstr "" #: ../rules/base.extras.xml.in.h:44 +msgid "Polish (Colemak)" +msgstr "" + +#: ../rules/base.extras.xml.in.h:45 msgid "Polish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:48 +#: ../rules/base.extras.xml.in.h:49 msgid "Crimean Tatar (Dobruja Q)" msgstr "" -#: ../rules/base.extras.xml.in.h:49 +#: ../rules/base.extras.xml.in.h:50 msgid "Romanian (ergonomic Touchtype)" msgstr "" -#: ../rules/base.extras.xml.in.h:50 +#: ../rules/base.extras.xml.in.h:51 msgid "Romanian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:53 +#: ../rules/base.extras.xml.in.h:54 msgid "Serbian (combining accents instead of dead keys)" msgstr "" -#: ../rules/base.extras.xml.in.h:56 +#: ../rules/base.extras.xml.in.h:57 msgid "Russian (with Ukrainian-Belorussian layout)" msgstr "" -#: ../rules/base.extras.xml.in.h:57 +#: ../rules/base.extras.xml.in.h:58 msgid "Russian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:60 +#: ../rules/base.extras.xml.in.h:61 msgid "Armenian (OLPC phonetic)" msgstr "" -#: ../rules/base.extras.xml.in.h:63 +#: ../rules/base.extras.xml.in.h:64 msgid "Hebrew (Biblical, SIL phonetic)" msgstr "" -#: ../rules/base.extras.xml.in.h:66 +#: ../rules/base.extras.xml.in.h:67 msgid "Arabic (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:69 +#: ../rules/base.extras.xml.in.h:70 msgid "Belgian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:72 +#: ../rules/base.extras.xml.in.h:73 msgid "Portuguese (Brazil, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:75 +#: ../rules/base.extras.xml.in.h:76 msgid "Czech (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:78 +#: ../rules/base.extras.xml.in.h:79 msgid "Danish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:81 +#: ../rules/base.extras.xml.in.h:82 msgid "Dutch (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:84 +#: ../rules/base.extras.xml.in.h:85 msgid "Estonian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:87 +#: ../rules/base.extras.xml.in.h:88 msgid "Finnish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:89 +#: ../rules/base.extras.xml.in.h:90 msgid "French (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:92 +#: ../rules/base.extras.xml.in.h:93 msgid "Greek (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:95 +#: ../rules/base.extras.xml.in.h:96 msgid "Italian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:98 +#: ../rules/base.extras.xml.in.h:99 msgid "Japanese (Sun Type 6)" msgstr "" -#: ../rules/base.extras.xml.in.h:99 +#: ../rules/base.extras.xml.in.h:100 msgid "Japanese (Sun Type 7 - pc compatible)" msgstr "" -#: ../rules/base.extras.xml.in.h:100 +#: ../rules/base.extras.xml.in.h:101 msgid "Japanese (Sun Type 7 - sun compatible)" msgstr "" -#: ../rules/base.extras.xml.in.h:103 +#: ../rules/base.extras.xml.in.h:104 msgid "Norwegian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:105 +#: ../rules/base.extras.xml.in.h:106 msgid "Portuguese (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:108 +#: ../rules/base.extras.xml.in.h:109 msgid "Slovak (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:111 +#: ../rules/base.extras.xml.in.h:112 msgid "Spanish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:114 +#: ../rules/base.extras.xml.in.h:115 msgid "Swedish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:116 +#: ../rules/base.extras.xml.in.h:117 msgid "German (Switzerland, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:117 +#: ../rules/base.extras.xml.in.h:118 msgid "French (Switzerland, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:120 +#: ../rules/base.extras.xml.in.h:121 msgid "Turkish (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:123 +#: ../rules/base.extras.xml.in.h:124 msgid "Ukrainian (Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:125 +#: ../rules/base.extras.xml.in.h:126 msgid "English (UK, Sun Type 6/7)" msgstr "" -#: ../rules/base.extras.xml.in.h:128 +#: ../rules/base.extras.xml.in.h:129 msgid "Korean (Sun Type 6/7)" msgstr "" diff --git a/xorg-server/xkeyboard-config/rules/base.extras.xml.in b/xorg-server/xkeyboard-config/rules/base.extras.xml.in index dd3251b6e..dd7339390 100644 --- a/xorg-server/xkeyboard-config/rules/base.extras.xml.in +++ b/xorg-server/xkeyboard-config/rules/base.extras.xml.in @@ -14,43 +14,43 @@ <variant> <configItem> <name>dyalog</name> - <shortDescription>dlg</shortDescription> - <description>APL keyboard symbols (Dyalog)</description> + <_shortDescription>dlg</_shortDescription> + <_description>APL keyboard symbols (Dyalog)</_description> </configItem> </variant> <variant> <configItem> <name>sax</name> - <shortDescription>sax</shortDescription> - <description>APL keyboard symbols (sax)</description> + <_shortDescription>sax</_shortDescription> + <_description>APL keyboard symbols (sax)</_description> </configItem> </variant> <variant> <configItem> <name>unified</name> - <shortDescription>ufd</shortDescription> - <description>APL keyboard symbols (unified)</description> + <_shortDescription>ufd</_shortDescription> + <_description>APL keyboard symbols (unified)</_description> </configItem> </variant> <variant> <configItem> <name>apl2</name> - <shortDescription>apl2</shortDescription> - <description>APL keyboard symbols (IBM APL2)</description> + <_shortDescription>apl2</_shortDescription> + <_description>APL keyboard symbols (IBM APL2)</_description> </configItem> </variant> <variant> <configItem> <name>aplplusII</name> - <shortDescription>aplII</shortDescription> - <description>APL keyboard symbols (Manugistics APL*PLUS II)</description> + <_shortDescription>aplII</_shortDescription> + <_description>APL keyboard symbols (Manugistics APL*PLUS II)</_description> </configItem> </variant> <variant> <configItem> <name>aplx</name> - <shortDescription>aplx</shortDescription> - <description>APL keyboard symbols (APLX unified)</description> + <_shortDescription>aplx</_shortDescription> + <_description>APL keyboard symbols (APLX unified)</_description> </configItem> </variant> </variantList> @@ -264,7 +264,7 @@ <variant> <configItem> <name>cz_sk_de</name> - <description>Czech Slovak and German (US)</description> + <_description>Czech Slovak and German (US)</_description> <languageList><iso639Id>eng</iso639Id> <iso639Id>cze</iso639Id> <iso639Id>slo</iso639Id> @@ -371,7 +371,7 @@ <variant> <configItem> <name>chu</name> - <description>Church Slavonic</description> + <_description>Church Slavonic</_description> <languageList><iso639Id>chu</iso639Id></languageList> </configItem> </variant> @@ -776,6 +776,33 @@ </variant> </variantList> </layout> + <layout> + <configItem> + <name>eu</name> + <!-- Keyboard indicator for European layouts --> + <_shortDescription>eu</_shortDescription> + <_description>EurKEY (US based layout with european letters)</_description> + <languageList> + <iso639Id>cat</iso639Id> + <iso639Id>dan</iso639Id> + <iso639Id>eng</iso639Id> + <iso639Id>est</iso639Id> + <iso639Id>fao</iso639Id> + <iso639Id>fin</iso639Id> + <iso639Id>ger</iso639Id> + <iso639Id>gre</iso639Id> + <iso639Id>gsw</iso639Id> + <iso639Id>ita</iso639Id> + <iso639Id>lav</iso639Id> + <iso639Id>lit</iso639Id> + <iso639Id>nld</iso639Id> + <iso639Id>nor</iso639Id> + <iso639Id>por</iso639Id> + <iso639Id>spa</iso639Id> + <iso639Id>swe</iso639Id> + </languageList> + </configItem> + </layout> </layoutList> <optionList/> </xkbConfigRegistry> diff --git a/xorg-server/xkeyboard-config/rules/base.xml.in b/xorg-server/xkeyboard-config/rules/base.xml.in index eb9586680..198b3a7be 100644 --- a/xorg-server/xkeyboard-config/rules/base.xml.in +++ b/xorg-server/xkeyboard-config/rules/base.xml.in @@ -1839,7 +1839,7 @@ <variant> <configItem> <name>eeyek</name> - <description>Manipuri (Eeyek)</description> + <_description>Manipuri (Eeyek)</_description> <languageList><iso639Id>mni</iso639Id></languageList> </configItem> </variant> @@ -1925,7 +1925,7 @@ <name>mal_enhanced</name> <!-- Keyboard indicator for Malayalam layouts --> <_shortDescription>ml</_shortDescription> - <_description>Malayalam (enhanced Inscript with Rupee Sign)</_description> + <_description>Malayalam (enhanced Inscript, with rupee sign)</_description> <languageList><iso639Id>mal</iso639Id></languageList> </configItem> </variant> @@ -2110,7 +2110,7 @@ <name>eng</name> <!-- Keyboard indicator for English layouts --> <_shortDescription>en</_shortDescription> - <_description>English (India, with RupeeSign)</_description> + <_description>English (India, with rupee sign)</_description> <languageList> <iso639Id>eng</iso639Id> </languageList> @@ -2132,13 +2132,13 @@ <variant> <configItem> <name>alternatequotes</name> - <_description>Bosnian (use guillemets for quotes)</_description> + <_description>Bosnian (with guillemets for quotes)</_description> </configItem> </variant> <variant> <configItem> <name>unicode</name> - <_description>Bosnian (use Bosnian digraphs)</_description> + <_description>Bosnian (with Bosnian digraphs)</_description> </configItem> </variant> <variant> @@ -2559,13 +2559,13 @@ <variant> <configItem> <name>alternatequotes</name> - <_description>Croatian (use guillemets for quotes)</_description> + <_description>Croatian (with guillemets for quotes)</_description> </configItem> </variant> <variant> <configItem> <name>unicode</name> - <_description>Croatian (use Croatian digraphs)</_description> + <_description>Croatian (with Croatian digraphs)</_description> </configItem> </variant> <variant> @@ -2644,6 +2644,12 @@ </variant> <variant> <configItem> + <name>winkeys</name> + <_description>Danish (Winkeys)</_description> + </configItem> + </variant> + <variant> + <configItem> <name>mac</name> <_description>Danish (Macintosh)</_description> </configItem> @@ -2749,7 +2755,7 @@ <variant> <configItem> <name>pes_keypad</name> - <_description>Persian (with Persian Keypad)</_description> + <_description>Persian (with Persian keypad)</_description> </configItem> </variant> <variant> @@ -2898,6 +2904,12 @@ </variant> <variant> <configItem> + <name>winkeys</name> + <_description>Finnish (Winkeys)</_description> + </configItem> + </variant> + <variant> + <configItem> <name>smi</name> <_description>Northern Saami (Finland)</_description> <languageList><iso639Id>sme</iso639Id></languageList> @@ -3279,6 +3291,15 @@ </variant> <variant> <configItem> + <name>tr</name> + <_description>Turkish (Germany)</_description> + <languageList> + <iso639Id>tr</iso639Id> + </languageList> + </configItem> + </variant> + <variant> + <configItem> <name>ru</name> <!-- Keyboard indicator for Russian layouts --> <_shortDescription>ru</_shortDescription> @@ -3547,6 +3568,12 @@ </variant> <variant> <configItem> + <name>winkeys</name> + <_description>Italian (Winkeys)</_description> + </configItem> + </variant> + <variant> + <configItem> <name>mac</name> <_description>Italian (Macintosh)</_description> </configItem> @@ -3984,6 +4011,12 @@ </variant> <variant> <configItem> + <name>winkeys</name> + <_description>Norwegian (Winkeys)</_description> + </configItem> + </variant> + <variant> + <configItem> <name>dvorak</name> <_description>Norwegian (Dvorak)</_description> </configItem> @@ -4079,7 +4112,7 @@ <variant> <configItem> <name>szl</name> - <description>Silesian</description> + <_description>Silesian</_description> <languageList><iso639Id>szl</iso639Id></languageList> </configItem> </variant> @@ -4443,7 +4476,7 @@ <variant> <configItem> <name>alternatequotes</name> - <_description>Slovenian (use guillemets for quotes)</_description> + <_description>Slovenian (with guillemets for quotes)</_description> </configItem> </variant> <variant> @@ -4504,6 +4537,12 @@ </variant> <variant> <configItem> + <name>winkeys</name> + <_description>Spanish (Winkeys)</_description> + </configItem> + </variant> + <variant> + <configItem> <name>deadtilde</name> <_description>Spanish (include dead tilde)</_description> </configItem> @@ -6343,7 +6382,7 @@ <option> <configItem> <name>altwin:hyper_win</name> - <_description>Hyper is mapped to Win-keys</_description> + <_description>Hyper is mapped to Win keys</_description> </configItem> </option> <option> diff --git a/xorg-server/xkeyboard-config/symbols/Makefile.am b/xorg-server/xkeyboard-config/symbols/Makefile.am index 509a549cd..77ec0ff0e 100644 --- a/xorg-server/xkeyboard-config/symbols/Makefile.am +++ b/xorg-server/xkeyboard-config/symbols/Makefile.am @@ -11,7 +11,7 @@ bt bw by \ ca cd ch \ cm cn cz \ de dk \ -ee es et epo \ +ee es et epo eu \ fi fo fr \ gb ge gh gn \ gr hr hu \ diff --git a/xorg-server/xkeyboard-config/symbols/af b/xorg-server/xkeyboard-config/symbols/af index b93019a95..67f07c862 100644 --- a/xorg-server/xkeyboard-config/symbols/af +++ b/xorg-server/xkeyboard-config/symbols/af @@ -26,7 +26,7 @@ xkb_symbols "basic" { key <AE09> { [ 0x10006f9, 0x1000029, 0x100200e ] }; key <AE10> { [ 0x10006f0, 0x1000028, 0x100200f ] }; key <AE11> { [ minus, Arabic_tatweel, 0x100005f ] }; - key <AE12> { [ plus, equal ] }; + key <AE12> { [ equal, plus ] }; key <AD01> { [ Arabic_dad, Arabic_sukun, 0x10000b0 ] }; key <AD02> { [ Arabic_sad, Arabic_dammatan ] }; @@ -97,7 +97,7 @@ xkb_symbols "ps" { key <AE09> { [ 0x10006f9, 0x1000029, 0x100200e ] }; key <AE10> { [ 0x10006f0, 0x1000028, 0x100200f ] }; key <AE11> { [ minus, Arabic_tatweel, 0x100005f ] }; - key <AE12> { [ plus, equal ] }; + key <AE12> { [ equal, plus ] }; key <AD01> { [ Arabic_dad, Arabic_sukun, 0x10000b0 ] }; key <AD02> { [ Arabic_sad, Arabic_dammatan, 0x1000653 ] }; @@ -168,7 +168,7 @@ xkb_symbols "uz" { key <AE09> { [ 0x10006f9, 0x1000029, 0x100200e ] }; key <AE10> { [ 0x10006f0, 0x1000028, 0x100200f ] }; key <AE11> { [ minus, Arabic_tatweel, 0x100005f ] }; - key <AE12> { [ plus, equal ] }; + key <AE12> { [ equal, plus ] }; key <AD01> { [ Arabic_dad, Arabic_sukun, 0x10000b0 ] }; key <AD02> { [ Arabic_sad, Arabic_dammatan, 0x1000653 ] }; @@ -229,7 +229,7 @@ xkb_symbols "olpc-ps" { key <AE09> { [ 0x10006F9, parenright, enfilledcircbullet ] }; // Arabic nine key <AE10> { [ 0x10006F0, parenleft, degree ] }; // Arabic zero key <AE11> { [ minus, 0x1000640, underscore ] }; // Arabic_tatweel - key <AE12> { [ plus, equal, division ] }; + key <AE12> { [ equal, plus, division ] }; key <AD01> { [ 0x1000636, 0x1000652, EuroSign ] }; // Arabic dad, Arabic sukun key <AD02> { [ 0x1000635, 0x100064C, 0x1000671 ] }; // Arabic sad, Arabic dammatan, Arabic alef walsa @@ -290,7 +290,7 @@ xkb_symbols "fa-olpc" { key <AE09> { [ 0x10006F9, parenright, 0x100200E ] }; // Arabic nine, left-to-right mark key <AE10> { [ 0x10006F0, parenleft, 0x100200F ] }; // Arabic zero, right-to-left mark key <AE11> { [ minus, 0x1000640, underscore ] }; // Arabic_tatweel - key <AE12> { [ plus, equal ] }; + key <AE12> { [ equal, plus ] }; key <AD01> { [ 0x1000636, 0x1000652, degree ] }; // Arabic dad, Arabic sukun key <AD02> { [ 0x1000635, 0x100064C ] }; // Arabic sad, Arabic dammatan @@ -351,7 +351,7 @@ xkb_symbols "uz-olpc" { key <AE09> { [ 0x10006F9, parenright, 0x100200E ] }; // Arabic nine, left-to-right mark key <AE10> { [ 0x10006F0, parenleft, 0x100200F ] }; // Arabic zero, right-to-left mark key <AE11> { [ minus, 0x1000640, underscore ] }; // Arabic_tatweel - key <AE12> { [ plus, equal ] }; + key <AE12> { [ equal, plus ] }; key <AD01> { [ 0x1000636, 0x1000652, degree ] }; // Arabic dad, Arabic sukun key <AD02> { [ 0x1000635, 0x100064C, 0x1000653 ] }; // Arabic sad, Arabic dammatan, Arabic maddah above diff --git a/xorg-server/xkeyboard-config/symbols/ba b/xorg-server/xkeyboard-config/symbols/ba index 0cc4988d4..63331b858 100644 --- a/xorg-server/xkeyboard-config/symbols/ba +++ b/xorg-server/xkeyboard-config/symbols/ba @@ -1,40 +1,34 @@ default partial alphanumeric_keys xkb_symbols "basic" { - name[Group1]="Bosnian"; - include "rs(latin)" + name[Group1]="Bosnian"; }; partial alphanumeric_keys xkb_symbols "us" { - name[Group1]= "Bosnian (US keyboard with Bosnian letters)"; - include "rs(latinyz)" + name[Group1]= "Bosnian (US keyboard with Bosnian letters)"; }; - partial alphanumeric_keys xkb_symbols "alternatequotes" { - name[Group1]= "Bosnian (use guillemets for quotes)"; - include "rs(latinalternatequotes)" + name[Group1]= "Bosnian (with guillemets for quotes)"; }; partial alphanumeric_keys xkb_symbols "unicode" { - name[Group1]= "Bosnian (use Bosnian digraphs)"; - include "rs(latinunicode)" + name[Group1]= "Bosnian (with Bosnian digraphs)"; }; partial alphanumeric_keys xkb_symbols "unicodeus" { - name[Group1]= "Bosnian (US keyboard with Bosnian digraphs)"; - include "rs(latinunicodeyz)" + name[Group1]= "Bosnian (US keyboard with Bosnian digraphs)"; }; diff --git a/xorg-server/xkeyboard-config/symbols/ca b/xorg-server/xkeyboard-config/symbols/ca index abfbbd9f7..2ba48b480 100644 --- a/xorg-server/xkeyboard-config/symbols/ca +++ b/xorg-server/xkeyboard-config/symbols/ca @@ -122,10 +122,10 @@ xkb_symbols "fr-dvorak" { partial xkb_symbols "fr-legacy" { - name[Group1] = "French (Canada, legacy)"; - include "ca(fr)" + name[Group1] = "French (Canada, legacy)"; + key <TLDE> { [ degree, degree, notsign ] }; key <AE01> { [ 1, exclam, onesuperior ] }; @@ -168,10 +168,10 @@ xkb_symbols "fr-legacy" { partial xkb_symbols "multi" { - name[Group1] = "Canadian Multilingual (first part)"; - include "ca(fr)" + name[Group1] = "Canadian Multilingual (first part)"; + key <TLDE> { [ slash, backslash, bar ] }; key <AE01> { [ 1, exclam ] }; key <AE02> { [ 2, at ] }; @@ -259,7 +259,6 @@ xkb_symbols "multi-2gr" { key <AB08> { [ Greek_horizbar, multiply ] }; key <AB09> { [ periodcentered, division ] }; key <AB10> { [ NoSymbol, dead_abovedot ] }; - }; // based on @@ -466,8 +465,8 @@ xkb_symbols "olpc" { partial alphanumeric_keys xkb_symbols "eng" { - name[Group1] = "English (Canada)"; include "us(basic)" + name[Group1] = "English (Canada)"; }; // EXTRAS: diff --git a/xorg-server/xkeyboard-config/symbols/cm b/xorg-server/xkeyboard-config/symbols/cm index 6404c97aa..6b7a51854 100644 --- a/xorg-server/xkeyboard-config/symbols/cm +++ b/xorg-server/xkeyboard-config/symbols/cm @@ -96,8 +96,8 @@ xkb_symbols "basic" { partial alphanumeric_keys xkb_symbols "french" { - name[Group1]="French (Cameroon)"; include "latin" + name[Group1]="French (Cameroon)"; key <AE01> { [ ampersand, 1, onesuperior, exclamdown ] }; key <AE02> { [ eacute, 2, asciitilde, oneeighth ] }; @@ -133,13 +133,11 @@ xkb_symbols "french" include "level3(ralt_switch)" }; - partial alphanumeric_keys xkb_symbols "azerty" { - name[Group1] = "Cameroon Multilingual (azerty)"; - include "level3(ralt_switch)" include "cm(basic)" + name[Group1] = "Cameroon Multilingual (azerty)"; key <AB01> { [ w, W, U1E85, U1E84 ] }; // SMALL LETTER W, CAPITAL LETTER W, SMALL LETTER W WITH DIAERESIS, CAPITAL LETTER W WITH DIAERESIS key <AB02> { [ x, X, U2039, U203A ] }; // SMALL LETTER X, CAPITAL LETTER X, SINGLE LEFT-POINTING ANGLE QUOTATION MARK, SINGLE RIGHT-POINTING ANGLE QUOTATION MARK key <AB03> { [ c, C, U0327, copyright ] }; // SMALL LETTER C, CAPITAL LETTER C, COMBINING CEDILLA, COPYRIGHT SIGN @@ -189,14 +187,14 @@ xkb_symbols "azerty" key <LSGT> { [ U003C, U003E, U00AB, U00BB ] }; // LESS THAN, GREATER THAN, LEFT GUILLEMET, RIGHT GUILLEMET key <TLDE> { [ U0024, U20AC, U00B2, U00B3 ] }; // DOLLAR, EURO, SUPERSCRIPT 2, SUPERSCRIPT 3 include "cm(exclamation_switch)" + include "level3(ralt_switch)" }; partial alphanumeric_keys xkb_symbols "qwerty" { - name[Group1] = "Cameroon Multilingual (qwerty)"; - include "level3(ralt_switch)" include "cm(basic)" + name[Group1] = "Cameroon Multilingual (qwerty)"; key <AB01> { [ z, Z, U2026, U2020 ] }; // SMALL LETTER Z, CAPITAL LETTER Z, ELLIPSIS, DAGGER key <AB02> { [ x, X ] }; // SMALL LETTER X, CAPITAL LETTER X key <AB03> { [ c, C, U0327, U00A9 ] }; // SMALL LETTER C, CAPITAL LETTER C, CEDILLA, COPYRIGHT @@ -242,15 +240,14 @@ xkb_symbols "qwerty" key <BKSL> { [ U005C, U007C ] }; // BACKSLASH, BAR key <TLDE> { [ U030D, U0303, U0060, U007E ] }; // COMBINING VERTICAL LINE ABOVE, COMBINING TILDE ABOVE, GRAVE ACCENT, TILDE include "cm(semicolon_switch)" + include "level3(ralt_switch)" }; - partial alphanumeric_keys xkb_symbols "dvorak" { - name[Group1] = "Cameroon Multilingual (Dvorak)"; - include "level3(ralt_switch)" include "us(dvorak)" + name[Group1] = "Cameroon Multilingual (Dvorak)"; key <AB01> { [ semicolon, colon ] }; // SEMICOLON, COLON key <AB02> { [ q, Q, U2014, U2013 ] }; // SMALL LETTER Q, CAPITAL LETTER Q, EM DASH, EN DASH key <AB03> { [ j, J, U0330, U0323 ] }; // SMALL LETTER J, CAPITAL LETTER J, COMBINING TILDE (NASAL) BELOW, COMBINING DOT BELOW @@ -299,6 +296,7 @@ xkb_symbols "dvorak" key <BKSL> { [ backslash, bar ] }; // BACKSLASH, BAR key <TLDE> { [ U030D, U0303, U0060, U007E ] }; // COMBINING VERTICAL LINE ABOVE, COMBINING TILDE ABOVE, GRAVE ACCENT, TILDE include "cm(semicolon_switch_dvorak)" + include "level3(ralt_switch)" }; // The following code creates the "Cameroon key" phenomenon. diff --git a/xorg-server/xkeyboard-config/symbols/de b/xorg-server/xkeyboard-config/symbols/de index a497d7f48..150c081c9 100644 --- a/xorg-server/xkeyboard-config/symbols/de +++ b/xorg-server/xkeyboard-config/symbols/de @@ -526,10 +526,8 @@ xkb_symbols "mac_nodeadkeys" { partial alphanumeric_keys xkb_symbols "dsb" { - name[Group1] = "Lower Sorbian"; include "latin(basic)" - include "level3(ralt_switch)" - include "kpdl(comma)" + name[Group1] = "Lower Sorbian"; key <AB01> { [ z, Z, zcaron, Zcaron ] }; key <AB02> { [ x, X, zacute, Zacute ] }; key <AB03> { [ c, C, cacute, Cacute ] }; @@ -544,15 +542,15 @@ xkb_symbols "dsb" key <AD04> { [ r, R, racute, Racute ] }; key <AD05> { [ t, T, U20B5, EuroSign ] }; key <AD09> { [ o, O, oacute, Oacute ] }; + include "kpdl(comma)" + include "level3(ralt_switch)" }; partial alphanumeric_keys xkb_symbols "dsb_qwertz" { - name[Group1] = "Lower Sorbian (qwertz)"; include "latin(basic)" - include "level3(ralt_switch)" - include "kpdl(comma)" + name[Group1] = "Lower Sorbian (qwertz)"; key <AB01> { [ y, Y ] }; key <AB02> { [ x, X ] }; key <AB03> { [ c, C, cacute, Cacute ] }; @@ -569,6 +567,8 @@ xkb_symbols "dsb_qwertz" key <AD06> { [ z, Z, zcaron, Zcaron ] }; key <AD07> { [ u, U, zacute, Zacute ] }; key <AD09> { [ o, O, oacute, Oacute ] }; + include "kpdl(comma)" + include "level3(ralt_switch)" }; partial alphanumeric_keys @@ -681,6 +681,24 @@ xkb_symbols "htcdream" { include "level3(alt_switch)" }; +partial alphanumeric_keys +xkb_symbols "tr" { + + // add turkish-specific letters to the basic German layout. + // Turkish symbols are accessible with combination of <AltGr> and + // 'i', 's', 'g', 'c'' (+<Shift> for capital letters). + + include "de(basic)" + + name[Group1]="Turkish (Germany)"; + + key <AD08> { [ i, I, U0131, U0130 ] }; + key <AC02> { [ s, S, U015F, U015E ] }; + key <AC05> { [ g, G, U011F, U011E ] }; + key <AB03> { [ c, C, U0E7, U0C7 ] }; + +}; + // EXTRAS: partial alphanumeric_keys diff --git a/xorg-server/xkeyboard-config/symbols/dk b/xorg-server/xkeyboard-config/symbols/dk index 838478bf8..509802753 100644 --- a/xorg-server/xkeyboard-config/symbols/dk +++ b/xorg-server/xkeyboard-config/symbols/dk @@ -42,6 +42,14 @@ xkb_symbols "nodeadkeys" { }; +partial alphanumeric_keys +xkb_symbols "winkeys" { + + include "dk(basic)" + name[Group1] = "Danish (Winkeys)"; + include "eurosign(5)" +}; + // Copied from macintosh_vndr/dk partial alphanumeric_keys xkb_symbols "mac" { diff --git a/xorg-server/xkeyboard-config/symbols/es b/xorg-server/xkeyboard-config/symbols/es index 9e963a23f..749a86d71 100644 --- a/xorg-server/xkeyboard-config/symbols/es +++ b/xorg-server/xkeyboard-config/symbols/es @@ -26,6 +26,14 @@ xkb_symbols "basic" { include "level3(ralt_switch)" }; +partial alphanumeric +xkb_symbols "winkeys" { + + include "es(basic)" + name[Group1]="Spanish (Winkeys)"; + include "eurosign(5)" +}; + partial alphanumeric_keys xkb_symbols "Sundeadkeys" { diff --git a/xorg-server/xkeyboard-config/symbols/eu b/xorg-server/xkeyboard-config/symbols/eu new file mode 100644 index 000000000..0a4d31a21 --- /dev/null +++ b/xorg-server/xkeyboard-config/symbols/eu @@ -0,0 +1,63 @@ +// Based on <http://eurkey.steffen.bruentjen.eu/> +// Copyright: Copyright 2012 Steffen Bruentjen (eurkey (at) steffen dot bruentjen dot de) +// License: GPLv3 <http://www.gnu.org/licenses/gpl-3.0.html> +// modified by Christoph Roeper <spam (at) roeper dot biz> (use firstName to mail) + +default partial alphanumeric_keys modifier_keys +xkb_symbols "basic" { + + include "us(basic)" + + name[Group1] = "EurKEY (US based layout with european letters)"; + + key <AB01> { [ z, Z, agrave, Agrave ] }; + key <AB02> { [ x, X, aacute, Aacute ] }; + key <AB03> { [ c, C, ccedilla, Ccedilla ] }; + key <AB04> { [ v, V, igrave, Igrave ] }; + key <AB05> { [ b, B, iacute, Iacute ] }; + key <AB06> { [ n, N, ntilde, Ntilde ] }; + key <AB07> { [ m, M, Multi_key, Multi_key ] }; + key <AB08> { [ comma, less, ograve, Ograve ] }; + key <AB09> { [ period, greater, oacute, Oacute ] }; + key <AB10> { [ slash, question, questiondown, 0x1002026 ] }; + key <AC01> { [ a, A, adiaeresis, Adiaeresis ] }; + key <AC02> { [ s, S, ssharp, section ] }; + key <AC03> { [ d, D, eth, Eth ] }; + key <AC04> { [ f, F, egrave, Egrave ] }; + key <AC05> { [ g, G, eacute, Eacute ] }; + key <AC06> { [ h, H, ugrave, Ugrave ] }; + key <AC07> { [ j, J, uacute, Uacute ] }; + key <AC08> { [ k, K, U0133, U0132 ] }; + key <AC09> { [ l, L, oslash, Oslash ] }; + key <AC10> { [ semicolon, colon, dead_diaeresis, periodcentered ] }; + key <AC11> { [ apostrophe, quotedbl, dead_acute, dagger] }; + key <AD01> { [ q, Q, ae, AE ] }; + key <AD02> { [ w, W, aring, Aring ] }; + key <AD03> { [ e, E, ediaeresis, Ediaeresis ] }; + key <AD04> { [ r, R, yacute, Yacute ] }; + key <AD05> { [ t, T, thorn, Thorn ] }; + key <AD06> { [ y, Y, ydiaeresis, Ydiaeresis ] }; + key <AD07> { [ u, U, udiaeresis, Udiaeresis ] }; + key <AD08> { [ i, I, idiaeresis, Idiaeresis ] }; + key <AD09> { [ o, O, odiaeresis, Odiaeresis ] }; + key <AD10> { [ p, P, oe, OE ] }; + key <AD11> { [ bracketleft, braceleft, guillemotleft, U2039 ] }; + key <AD12> { [ bracketright, braceright, guillemotright, U203A ] }; + key <AE01> { [ 1, exclam, exclamdown, onesuperior ] }; + key <AE02> { [ 2, at, ordfeminine, twosuperior ] }; + key <AE03> { [ 3, numbersign, masculine, threesuperior ] }; + key <AE04> { [ 4, dollar, sterling, yen ] }; + key <AE05> { [ 5, percent, EuroSign, cent ] }; + key <AE06> { [ 6, asciicircum, dead_circumflex, dead_caron ] }; + key <AE07> { [ 7, ampersand, dead_abovering, dead_macron ] }; + key <AE08> { [ 8, asterisk, doublelowquotemark, singlelowquotemark ] }; + key <AE09> { [ 9, parenleft, leftdoublequotemark, leftsinglequotemark ] }; + key <AE10> { [ 0, parenright, rightdoublequotemark, rightsinglequotemark ] }; + key <AE11> { [ minus, underscore, copyright, numerosign ] }; + key <AE12> { [ equal, plus, multiply, division ] }; + key <BKSL> { [ backslash, bar, notsign, brokenbar ] }; + key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] }; + key <KPDL> { [ KP_Delete, KP_Decimal, comma, comma ] }; + + include "level3(ralt_switch)" +}; diff --git a/xorg-server/xkeyboard-config/symbols/fi b/xorg-server/xkeyboard-config/symbols/fi index 4fdcc2a25..1818243dd 100644 --- a/xorg-server/xkeyboard-config/symbols/fi +++ b/xorg-server/xkeyboard-config/symbols/fi @@ -83,6 +83,14 @@ xkb_symbols "kotoistus" { }; partial alphanumeric_keys +xkb_symbols "winkeys" { + + include "fi(kotoistus)" + name[Group1]="Finnish (Winkeys)"; + include "eurosign(5)" +}; + +partial alphanumeric_keys xkb_symbols "classic" { include "fi(fi)" diff --git a/xorg-server/xkeyboard-config/symbols/fr b/xorg-server/xkeyboard-config/symbols/fr index 9c89db825..3898b1c57 100644 --- a/xorg-server/xkeyboard-config/symbols/fr +++ b/xorg-server/xkeyboard-config/symbols/fr @@ -36,8 +36,6 @@ xkb_symbols "basic" { key <AB09> { [ colon, slash, periodcentered, division ] }; key <AB10> { [ exclam, section, dead_belowdot, dead_abovedot ] }; - include "kpdl(comma)" - include "level3(ralt_switch)" }; diff --git a/xorg-server/xkeyboard-config/symbols/hr b/xorg-server/xkeyboard-config/symbols/hr index 1ec0c809a..61fc39221 100644 --- a/xorg-server/xkeyboard-config/symbols/hr +++ b/xorg-server/xkeyboard-config/symbols/hr @@ -1,9 +1,8 @@ default partial alphanumeric_keys xkb_symbols "basic" { - name[Group1]="Croatian"; - include "rs(latin)" + name[Group1]="Croatian"; // Redefine these keys to match XFree86 Croatian layout key <AE01> { [ 1, exclam, asciitilde, dead_tilde ] }; @@ -16,9 +15,8 @@ xkb_symbols "basic" { partial alphanumeric_keys xkb_symbols "us" { - name[Group1]= "Croatian (US keyboard with Croatian letters)"; - include "us" + name[Group1]= "Croatian (US keyboard with Croatian letters)"; key <AD01> { [ any, any, backslash ] }; key <AD02> { [ any, any, bar ] }; @@ -44,30 +42,25 @@ xkb_symbols "us" { 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)" + name[Group1]= "Croatian (with guillemets for quotes)"; }; partial alphanumeric_keys xkb_symbols "unicode" { - name[Group1]= "Croatian (use Croatian digraphs)"; - include "rs(latinunicode)" + name[Group1]= "Croatian (with Croatian digraphs)"; }; partial alphanumeric_keys xkb_symbols "unicodeus" { - name[Group1]= "Croatian (US keyboard with Croatian digraphs)"; - include "rs(latinunicodeyz)" + name[Group1]= "Croatian (US keyboard with Croatian digraphs)"; }; diff --git a/xorg-server/xkeyboard-config/symbols/in b/xorg-server/xkeyboard-config/symbols/in index f70e215e6..054671513 100644 --- a/xorg-server/xkeyboard-config/symbols/in +++ b/xorg-server/xkeyboard-config/symbols/in @@ -107,7 +107,7 @@ partial alphanumeric_keys xkb_symbols "bolnagri" { name[Group1] = "Hindi (Bolnagri)"; key.type="FOUR_LEVEL"; - //Top Alphanumeric row + // Roman digits key <TLDE> { [ U0902, U0901, apostrophe, asciitilde ] }; // apostrophe: anusvara, candrabindu key <AE01> { [ 1, exclam, U0967, exclam ] }; @@ -393,8 +393,6 @@ xkb_symbols "ben_baishakhi" { // modifier_map Shift { Shift_L }; // modifier_map Lock { Caps_Lock }; // modifier_map Control{ Control_L }; - - }; xkb_symbols "ben_inscript" { @@ -536,8 +534,6 @@ xkb_symbols "ben_gitanjali" { // modifier_map Shift { Shift_L }; // modifier_map Lock { Caps_Lock }; // modifier_map Control{ Control_L }; - - }; @@ -613,7 +609,6 @@ xkb_symbols "ben_bornona" { // modifier_map Control{ Control_L }; // third level with right-alt include "level3(ralt_switch)" - }; partial alphanumeric_keys @@ -842,7 +837,6 @@ xkb_symbols "mal" { include "rupeesign(4)" include "level3(ralt_switch)" - }; //Name : Lalitha @@ -854,7 +848,7 @@ partial alphanumeric_keys xkb_symbols "mal_lalitha" { name[Group1] = "Malayalam (Lalitha)"; key.type="FOUR_LEVEL"; - //Top Alphanumeric row + // Roman digits key <TLDE> { [ U0D4D, U0D02, apostrophe, asciitilde ] }; // apostrophe: virama(chandrakala),anusvara key <AE01> { [ 1, exclam, U0D67, exclam ] }; @@ -1237,7 +1231,6 @@ xkb_symbols "tam_TSCII" { key <AB07> { [ 0x10000ab, 0x10000ac ] }; // a, A key <AB08> { [ 0x10000fe, 0x10000ae ] }; // i, I -}; partial alphanumeric_keys xkb_symbols "tam_TAB" { @@ -1462,7 +1455,7 @@ partial alphanumeric_keys xkb_symbols "jhelum" { name[Group1] = "Punjabi (Gurmukhi Jhelum)"; key.type="FOUR_LEVEL"; - //Top Alphanumeric row + // Roman digits key <TLDE> { [ apostrophe, asciitilde, U0A02,U0A01 ] }; // apostrophe: anusvara, candrabindu key <AE01> { [ 1,exclam, U0A67, exclam ] }; @@ -1660,12 +1653,10 @@ xkb_symbols "hin-wx" { partial alphanumeric_keys xkb_symbols "eng" { - name[Group1]= "English (India, with RupeeSign)"; - include "us(basic)" + name[Group1]= "English (India, with rupee sign)"; include "rupeesign(4)" - include "level3(ralt_switch)" }; @@ -1681,7 +1672,7 @@ xkb_symbols "eng" { partial alphanumeric_keys xkb_symbols "mal_enhanced" { - name[Group1] = "Malayalam (enhanced Inscript with Rupee Sign)"; + name[Group1] = "Malayalam (enhanced Inscript, with rupee sign)"; //From grave to backslash (\) @@ -1744,11 +1735,8 @@ xkb_symbols "mal_enhanced" { key <AB09> { [ period , U0d7d ] }; //chillu l key <AB10> { [ U0d2f , question ] }; - // hope this includes the rupee sign at alt + 4 - include "rupeesign(4)" include "level3(ralt_switch)" - }; @@ -1780,13 +1768,12 @@ xkb_symbols "hin-kagapa" { name[Group1] = "Hindi (KaGaPa phonetic)"; key.type="FOUR_LEVEL"; - //Top Alphanumeric row // Roman digits key <TLDE> { [ apostrophe, asciitilde, U201C ] }; // U201C: left double quotation mark key <AE01> { [ 1, exclam, U0967 ] }; key <AE02> { [ 2, at, U0968, U20A8 ] }; // U20A8: generic rupee sign (Rs) key <AE03> { [ 3, numbersign, U0969 ] }; - key <AE04> { [ 4, dollar, U096A, U20B9 ] }; // U20B9: new Indian Rupee sign + key <AE04> { [ 4, dollar, U096A, U20B9 ] }; // U20B9: new Indian rupee sign key <AE05> { [ 5, percent, U096B ] }; key <AE06> { [ 6, asciicircum, U096C, U200C ] }; // ZWNJ key <AE07> { [ 7, ampersand, U096D, U200D ] }; // ZWJ @@ -1824,7 +1811,6 @@ xkb_symbols "hin-kagapa" { key <AC10> { [ semicolon, colon, U1CF2, U1CF3 ] }; // U1CF2/3: ardhavisarga/rotated ardhavisarga key <AC11> { [ apostrophe, quotedbl, U0951, U201D ] }; // U0951: Devanagari stress sign udatta // U201D: Right double quotation mark - //Z Row key <AB01> { [ U091E, U0919 ] }; // Z: nya, nga key <AB02> { [ U0937, U093C, U0934 ] }; // X: ssa, nukta below, lla-nukta @@ -1844,17 +1830,15 @@ xkb_symbols "hin-kagapa" { // Sanskrit uses Devanagari layout of Hindi partial alphanumeric_keys xkb_symbols "san-kagapa" { - name[Group1] = "Sanskrit (KaGaPa phonetic)"; include "in(hin-kagapa)" - + name[Group1] = "Sanskrit (KaGaPa phonetic)"; }; // Marathi uses Devanagari layout of Hindi partial alphanumeric_keys xkb_symbols "mar-kagapa" { - name[Group1] = "Marathi (KaGaPa phonetic)"; include "in(hin-kagapa)" - + name[Group1] = "Marathi (KaGaPa phonetic)"; }; @@ -1875,13 +1859,12 @@ xkb_symbols "kan-kagapa" { name[Group1] = "Kannada (KaGaPa phonetic)"; key.type="FOUR_LEVEL"; - //Top Alphanumeric row // Roman digits key <TLDE> { [ apostrophe, asciitilde, U201C ] }; // U201C: left double quotation mark key <AE01> { [ 1, exclam, U0CE7 ] }; key <AE02> { [ 2, at, U0CE8, U20A8 ] }; // U20A8: generic rupee sign (Rs) key <AE03> { [ 3, numbersign, U0CE9 ] }; - key <AE04> { [ 4, dollar, U0CEA, U20B9 ] }; // U20B9: new Indian Rupee sign + key <AE04> { [ 4, dollar, U0CEA, U20B9 ] }; // U20B9: new Indian rupee sign key <AE05> { [ 5, percent, U0CEB ] }; key <AE06> { [ 6, asciicircum, U0CEC, U200C ] }; // ZWNJ key <AE07> { [ 7, ampersand, U0CED, U200D ] }; // ZWJ @@ -1919,7 +1902,6 @@ xkb_symbols "kan-kagapa" { key <AC10> { [ semicolon, colon ] }; key <AC11> { [ apostrophe, quotedbl, U0951, U201D ] }; // U0951: Devanagari stress sign udatta // U201D: Right double quotation mark - //Z Row key <AB01> { [ U0C9E, U0C99 ] }; // Z: nya, nga key <AB02> { [ U0CB7, U0CBC, U0CDE ] }; // X: ssa, nukta below, LLLA @@ -1954,13 +1936,12 @@ xkb_symbols "tel-kagapa" { name[Group1] = "Telugu (KaGaPa phonetic)"; key.type="FOUR_LEVEL"; - //Top Alphanumeric row // Roman digits key <TLDE> { [ apostrophe, asciitilde, U201C ] }; // U201C: left double quotation mark key <AE01> { [ 1, exclam, U0C67 ] }; key <AE02> { [ 2, at, U0C68, U20A8 ] }; // U20A8: generic rupee sign (Rs) key <AE03> { [ 3, numbersign, U0C69 ] }; - key <AE04> { [ 4, dollar, U0C6A, U20B9 ] }; // U20B9: new Indian Rupee sign + key <AE04> { [ 4, dollar, U0C6A, U20B9 ] }; // U20B9: new Indian rupee sign key <AE05> { [ 5, percent, U0C6B ] }; key <AE06> { [ 6, asciicircum, U0C6C, U200C ] }; // ZWNJ key <AE07> { [ 7, ampersand, U0C6D, U200D ] }; // ZWJ @@ -1998,7 +1979,6 @@ xkb_symbols "tel-kagapa" { key <AC10> { [ semicolon, colon ] }; key <AC11> { [ apostrophe, quotedbl, U0951, U201D ] }; // U0951: Devanagari stress sign udatta // U201D: Right double quotation mark - //Z Row key <AB01> { [ U0C1E, U0C19 ] }; // Z: nya, nga key <AB02> { [ U0C37 ] }; // X: ssa @@ -2026,7 +2006,6 @@ xkb_symbols "eeyek" { name[Group1]= "Manipuri (Eeyek)"; - // Alphanumeric section key <TLDE> { [ grave, asciitilde ] }; key <AE01> { [ Uabf1, exclam ] }; key <AE02> { [ Uabf2, at ] }; @@ -2078,7 +2057,6 @@ xkb_symbols "eeyek" { key <AB10> { [ slash, question ] }; key <BKSL> { [ backslash, bar ] }; - // End alphanumeric section include "level3(ralt_switch)" }; diff --git a/xorg-server/xkeyboard-config/symbols/inet b/xorg-server/xkeyboard-config/symbols/inet index fe21f1ed7..f7ccc6f81 100644 --- a/xorg-server/xkeyboard-config/symbols/inet +++ b/xorg-server/xkeyboard-config/symbols/inet @@ -256,7 +256,7 @@ xkb_symbols "acer_c300" { key <I30> { [ XF86AudioRaiseVolume ] }; key <I5E> { [ XF86Launch2 ] }; key <I75> { [ Help ] }; - key <XFER> { [ XF86Launch1 ] }; + key <IR7C> { [ XF86Launch1 ] }; }; // Acer Ferrari 4000 Keyboard @@ -461,7 +461,7 @@ xkb_symbols "cherryblue" { key <I26> { [ XF86AudioMute ] }; key <I63> { [ XF86Standby ] }; key <PRSC> { [ XF86Terminal ] }; - key <XFER> { [ XF86Go ] }; + key <IR7C> { [ XF86Go ] }; }; // Cherry CyMotion Master XPress @@ -488,7 +488,7 @@ xkb_symbols "cherryblueb" { key <I71> { [ XF86Book ] }; key <I72> { [ XF86Book ] }; key <PRSC> { [ XF86Terminal ] }; - key <XFER> { [ XF86Go ] }; + key <IR7C> { [ XF86Go ] }; }; // Cherry Blue Line CyBo@rd (alternate option) @@ -505,7 +505,7 @@ xkb_symbols "cherrycyboard" { key <FK17> { [ XF86Search ] }; key <I02> { [ XF86HomePage ] }; key <K67> { [ XF86Terminal ] }; - key <XFER> { [ XF86AudioMedia ] }; + key <IR7C> { [ XF86AudioMedia ] }; }; // Cherry CyMotion Expert @@ -695,8 +695,8 @@ xkb_symbols "inspiron" { key <I04> { [ XF86AudioNext ] }; key <I21> { [ XF86Eject ] }; key <I56> { [ XF86Display ] }; - key <NFER> { [ XF86AudioPrev ] }; - key <XFER> { [ XF86AudioPlay, XF86AudioPause ] }; + key <IR7D> { [ XF86AudioPrev ] }; + key <IR7C> { [ XF86AudioPlay, XF86AudioPause ] }; }; // DELL USB Multimedia Keyboard (former 8135, generalized, superset of 8125) @@ -707,7 +707,7 @@ xkb_symbols "dellusbmm" { include "inet(media_nav_acpi_common)" key <I02> { [ XF86HomePage ] }; key <K67> { [ XF86MyComputer ] }; - key <XFER> { [ XF86AudioMedia ] }; + key <IR7C> { [ XF86AudioMedia ] }; }; @@ -727,7 +727,7 @@ xkb_symbols "diamond" { partial alphanumeric_keys xkb_symbols "ennyah_dkb1008" { include "inet(media_nav_acpi_common)" - key <XFER> { [ XF86AudioMedia ] }; + key <IR7C> { [ XF86AudioMedia ] }; }; @@ -1033,7 +1033,7 @@ xkb_symbols "logitech_set3" { key <I55> { [ XF86Save ] }; // F8 key <I56> { [ XF86Documents ] }; // F10 key <I69> { [ XF86Go ] }; - key <XFER> { [ XF86AudioMedia ] }; + key <IR7C> { [ XF86AudioMedia ] }; }; // Logitech Access Keyboard @@ -1170,7 +1170,7 @@ xkb_symbols "logidinovo" { key <I21> { [ XF86AudioRaiseVolume ] }; key <K66> { [ XF86AudioLowerVolume ] }; key <KPDC> { [ XF86AudioMute ] }; - key <XFER> { [ XF86AudioMedia ] }; + key <IR7C> { [ XF86AudioMedia ] }; }; partial alphanumeric_keys @@ -1179,7 +1179,7 @@ xkb_symbols "logidinovoedge" { key <I02> { [ XF86HomePage ] }; key <I6C> { [ XF86Mail ] }; key <FK17> { [ XF86Search ] }; - key <XFER> { [ XF86AudioMedia ] }; + key <IR7C> { [ XF86AudioMedia ] }; }; partial alphanumeric_keys @@ -1218,8 +1218,8 @@ xkb_symbols "logitech_g15" { key <K74> { [ XF86WWW ] }; key <K75> { [ XF86LaunchE ] }; key <II5D> { [ XF86Launch1 ] }; - key <NFER> { [ XF86Launch2 ] }; - key <XFER> { [ XF86Launch8 ] }; + key <IR7D> { [ XF86Launch2 ] }; + key <IR7C> { [ XF86Launch8 ] }; }; @@ -1364,7 +1364,7 @@ xkb_symbols "microsoftprose" { key <I63> { [ XF86Standby ] }; key <I68> { [ XF86AudioStop ] }; key <PRSC> { [ XF86MyComputer ] }; - key <XFER> { [ XF86AudioMedia ] }; + key <IR7C> { [ XF86AudioMedia ] }; }; // Microsoft Office Keyboard @@ -1511,7 +1511,7 @@ xkb_symbols "samsung4500" { key <I18> { [ XF86Eject ] }; key <I26> { [ Help ] }; key <I59> { [ XF86Explorer ] }; - key <NFER> { [ XF86Launch2 ] }; + key <IR7D> { [ XF86Launch2 ] }; }; // Samsung SDM 4510P @@ -1521,7 +1521,7 @@ xkb_symbols "samsung4510" { key <I02> { [ XF86Launch1 ] }; key <I04> { [ XF86Launch3 ] }; key <I18> { [ XF86Eject ] }; - key <NFER> { [ XF86Launch2 ] }; + key <IR7D> { [ XF86Launch2 ] }; }; @@ -1748,7 +1748,7 @@ xkb_symbols "cymotionlinux" { key <I78> { [ XF86Copy ] }; key <K65> { [ XF86Paste ] }; key <K75> { [ XF86ScrollUp ] }; - key <XFER> { [ XF86AudioMedia ] }; + key <IR7C> { [ XF86AudioMedia ] }; }; partial alphanumeric_keys diff --git a/xorg-server/xkeyboard-config/symbols/ir b/xorg-server/xkeyboard-config/symbols/ir index 983bf60d9..1be5e7a22 100644 --- a/xorg-server/xkeyboard-config/symbols/ir +++ b/xorg-server/xkeyboard-config/symbols/ir @@ -26,7 +26,7 @@ xkb_symbols "pes" { partial alphanumeric_keys xkb_symbols "pes_keypad" { - name[Group1]= "Persian (with Persian Keypad)"; + name[Group1]= "Persian (with Persian keypad)"; include "ir(pes_part_basic)" include "ir(pes_part_keypad)" diff --git a/xorg-server/xkeyboard-config/symbols/is b/xorg-server/xkeyboard-config/symbols/is index 34d6bed33..93af3f803 100644 --- a/xorg-server/xkeyboard-config/symbols/is +++ b/xorg-server/xkeyboard-config/symbols/is @@ -193,11 +193,12 @@ xkb_symbols "mac" { // Icelandic Dvorak partial alphanumeric_keys xkb_symbols "dvorak" { - name[Group1]= "Icelandic (Dvorak)"; include "us(dvorak)" include "eurosign(4)" + name[Group1]= "Icelandic (Dvorak)"; + key <AD11> { [ slash, question, U201e, U201c ] }; key <AC06> { [ d, D, eth, ETH ] }; key <AC10> { [ s, S, ae, AE ] }; diff --git a/xorg-server/xkeyboard-config/symbols/it b/xorg-server/xkeyboard-config/symbols/it index 8a66a306a..8dd4365de 100644 --- a/xorg-server/xkeyboard-config/symbols/it +++ b/xorg-server/xkeyboard-config/symbols/it @@ -33,8 +33,6 @@ xkb_symbols "basic" { key <LSGT> { [ less, greater,guillemotleft,guillemotright] }; - include "kpdl(comma)" - include "level3(ralt_switch)" }; @@ -63,6 +61,14 @@ xkb_symbols "nodeadkeys" { key <BKSL> { [ ugrave, section, grave, breve ] }; }; +partial alphanueric_keys +xkb_symbols "winkeys" { + + include "it(basic)" + name[Group1]="Italian (Winkeys)"; + include "eurosign(5)" +}; + // Copied from macintosh_vndr/it partial alphanumeric_keys xkb_symbols "mac" { diff --git a/xorg-server/xkeyboard-config/symbols/jp b/xorg-server/xkeyboard-config/symbols/jp index 52f574623..f0b2c4d75 100644 --- a/xorg-server/xkeyboard-config/symbols/jp +++ b/xorg-server/xkeyboard-config/symbols/jp @@ -243,8 +243,8 @@ xkb_symbols "nicola_f_bs" { // Copied from macintosh_vndr/jp partial alphanumeric_keys xkb_symbols "mac" { - name[Group1]= "Japanese (Macintosh)"; include "jp(kana)" + name[Group1]= "Japanese (Macintosh)"; replace key <CAPS> { [ Caps_Lock ] }; }; @@ -256,8 +256,8 @@ xkb_symbols "hztg_escape" { partial alphanumeric_keys xkb_symbols "dvorak" { - name[Group1]= "Japanese (Dvorak)"; include "jp(OADG109A)" + name[Group1]= "Japanese (Dvorak)"; key <AE11> { [ at, grave ] }; diff --git a/xorg-server/xkeyboard-config/symbols/ma b/xorg-server/xkeyboard-config/symbols/ma index 2d128837e..db7b5bb38 100644 --- a/xorg-server/xkeyboard-config/symbols/ma +++ b/xorg-server/xkeyboard-config/symbols/ma @@ -82,9 +82,9 @@ xkb_symbols "tifinagh" { partial alphanumeric_keys xkb_symbols "tifinagh-phonetic" { + include "ma(tifinagh)" name[Group1]="Berber (Morocco, Tifinagh phonetic)"; - include "ma(tifinagh)" key <LatA> { [ 0x1002d30 ] }; key <LatZ> { [ 0x1002d63, 0x1002d65 ] }; diff --git a/xorg-server/xkeyboard-config/symbols/nl b/xorg-server/xkeyboard-config/symbols/nl index 1dde405f8..76cb0183e 100644 --- a/xorg-server/xkeyboard-config/symbols/nl +++ b/xorg-server/xkeyboard-config/symbols/nl @@ -49,8 +49,6 @@ xkb_symbols "basic" { key <LSGT> { [bracketright, bracketleft, bar, brokenbar ] }; - include "kpdl(comma)" - include "level3(ralt_switch)" }; diff --git a/xorg-server/xkeyboard-config/symbols/no b/xorg-server/xkeyboard-config/symbols/no index 5609de06e..fe79d9ba4 100644 --- a/xorg-server/xkeyboard-config/symbols/no +++ b/xorg-server/xkeyboard-config/symbols/no @@ -52,6 +52,14 @@ xkb_symbols "nodeadkeys" { key <AB09> { [ period, colon, periodcentered, abovedot ] }; }; +partial alphanumeric_keys +xkb_symbols "winkeys" { + + include "no(basic)" + name[Group1]="Norwegian (Winkeys)"; + include "eurosign(5)" +}; + // Norwegian Dvorak partial alphanumeric_keys xkb_symbols "dvorak" { diff --git a/xorg-server/xkeyboard-config/symbols/rs b/xorg-server/xkeyboard-config/symbols/rs index 86b54632a..06025e17e 100644 --- a/xorg-server/xkeyboard-config/symbols/rs +++ b/xorg-server/xkeyboard-config/symbols/rs @@ -40,12 +40,10 @@ xkb_symbols "latin" { partial alphanumeric_keys xkb_symbols "yz" { - // Cyrillic_zhe and Cyrillic_ze swapped. - - name[Group1]= "Serbian (Cyrillic, Z and ZHE swapped)"; - include "rs(basic)" + name[Group1]= "Serbian (Cyrillic, ZE and ZHE swapped)"; + key <AD06> { [ Cyrillic_zhe, Cyrillic_ZHE, any,any ] }; // y key <AB01> { [ Cyrillic_ze, Cyrillic_ZE, any,any ] }; // z }; @@ -247,9 +245,10 @@ xkb_symbols "latinunicode" { // This mapping supports the Unicode characters 0x1c4-0x1cc (dz, lj, and nj // as single character). You get the title form with AltGr+Shift. + include "rs(latin)" + name[Group1]= "Serbian (Latin Unicode)"; - include "rs(latin)" include "rs(twoletter)" }; @@ -257,10 +256,10 @@ partial alphanumeric_keys xkb_symbols "latinyz" { // For those who insist on using "english-position" Z and Y. - name[Group1]= "Serbian (Latin qwerty)"; - include "rs(latin)" + name[Group1]= "Serbian (Latin qwerty)"; + key <AD06> { [ y, Y, any,any ] }; // y key <AB01> { [ z, Z, any,any ] }; // z }; @@ -269,10 +268,10 @@ partial alphanumeric_keys xkb_symbols "latinunicodeyz" { // Unicode, ZHE and Z swapped. - name[Group1]= "Serbian (Latin Unicode qwerty)"; - include "rs(latinunicode)" + name[Group1]= "Serbian (Latin Unicode qwerty)"; + key <AD06> { [ zcaron, Zcaron, any,any ] }; // y key <AB01> { [ z, Z, any,any ] }; // z }; @@ -280,10 +279,10 @@ xkb_symbols "latinunicodeyz" { xkb_symbols "alternatequotes" { // Another acceptable »pair of quotes« for Serbian - name[Group1]= "Serbian (Cyrillic with guillemets)"; - include "rs(basic)" + name[Group1]= "Serbian (Cyrillic with guillemets)"; + key <AC02> { [ any,any, guillemotright, NoSymbol ] }; // s key <AC03> { [ any,any, guillemotleft, NoSymbol ] }; // d }; @@ -291,10 +290,10 @@ xkb_symbols "alternatequotes" { xkb_symbols "latinalternatequotes" { // Another acceptable »pair of quotes« for Serbian - name[Group1]= "Serbian (Latin with guillemets)"; - include "rs(latin)" + name[Group1]= "Serbian (Latin with guillemets)"; + key <AC02> { [ any,any, guillemotright, NoSymbol ] }; // s key <AC03> { [ any,any, guillemotleft, NoSymbol ] }; // d }; @@ -306,10 +305,10 @@ xkb_symbols "rue" { // Ljubomir J. Papuga (Любомир Я. Папуґа) <papuga@zoho.com> // Mihajlo Hornjak <smeceiotpad@gmail.com> - name[Group1]= "Pannonian Rusyn"; - include "rs(basic)" + name[Group1]= "Pannonian Rusyn"; + key <TLDE> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; // ` key <AD01> { [ Cyrillic_ya, Cyrillic_YA ] }; // q @@ -330,10 +329,10 @@ xkb_symbols "combiningkeys" { // Raw combining characters instead of dead keys, // especially good for post-accenting texts. - name[Group1]= "Serbian (combining accents instead of dead keys)"; - include "rs(basic)" + name[Group1]= "Serbian (combining accents instead of dead keys)"; + key <AE03> { [ any,any, U0302, dead_circumflex ] }; // 3, U0302 = COMBINING CIRCUMFLEX ACCENT key <AE07> { [ any,any, U0300, NoSymbol ] }; // 7, U0300 = COMBINING GRAVE ACCENT key <AE08> { [ any,any, U030F, NoSymbol ] }; // 8, U030F = COMBINING DOUBLE GRAVE ACCENT diff --git a/xorg-server/xkeyboard-config/symbols/ru b/xorg-server/xkeyboard-config/symbols/ru index 043e011e6..782a3d75a 100644 --- a/xorg-server/xkeyboard-config/symbols/ru +++ b/xorg-server/xkeyboard-config/symbols/ru @@ -201,7 +201,7 @@ xkb_symbols "phonetic" { key <LatP> { [ Cyrillic_pe, Cyrillic_PE ] }; key <AD11> { [ Cyrillic_sha, Cyrillic_SHA ] }; - key <AE12> { [ Cyrillic_softsign, Cyrillic_softsign ] }; + key <AE12> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; key <AD12> { [ Cyrillic_shcha, Cyrillic_SHCHA ] }; key <BKSL> { [ Cyrillic_e, Cyrillic_E ] }; }; @@ -214,7 +214,7 @@ xkb_symbols "phonetic_winkeys" { key <LatX> { [ Cyrillic_ha, Cyrillic_HA ] }; key <LatH> { [ Cyrillic_che, Cyrillic_CHE ] }; - key <AE12> { [ Cyrillic_softsign, Cyrillic_softsign ] }; + key <AE12> { [ Cyrillic_softsign, Cyrillic_SOFTSIGN ] }; }; diff --git a/xorg-server/xkeyboard-config/symbols/se b/xorg-server/xkeyboard-config/symbols/se index 7c37d2a1d..320a1861d 100644 --- a/xorg-server/xkeyboard-config/symbols/se +++ b/xorg-server/xkeyboard-config/symbols/se @@ -48,10 +48,10 @@ xkb_symbols "nodeadkeys" { partial alphanumeric_keys xkb_symbols "dvorak" { - name[Group1]="Swedish (Dvorak)"; - include "se(basic)" + name[Group1]="Swedish (Dvorak)"; + key <AD01> { [ aring, Aring, backslash ] }; key <AD02> { [ adiaeresis, Adiaeresis, braceleft, bracketleft ] }; key <AD03> { [ odiaeresis, Odiaeresis, braceright, bracketright ] }; @@ -202,10 +202,10 @@ xkb_symbols "mac" { partial alphanumeric_keys xkb_symbols "svdvorak" { - name[Group1]="Swedish (Svdvorak)"; - include "se(basic)" + name[Group1]="Swedish (Svdvorak)"; + key <AD01> { [ aring, Aring, braceleft ] }; key <AD02> { [ comma, semicolon, bracketleft ] }; key <AD03> { [ period, colon, bracketright ] }; diff --git a/xorg-server/xkeyboard-config/symbols/si b/xorg-server/xkeyboard-config/symbols/si index cff5f5602..7e214fba8 100644 --- a/xorg-server/xkeyboard-config/symbols/si +++ b/xorg-server/xkeyboard-config/symbols/si @@ -1,30 +1,29 @@ default partial alphanumeric_keys xkb_symbols "basic" { - name[Group1]="Slovenian"; - include "rs(latin)" + name[Group1]="Slovenian"; + key <TLDE> { type[Group1]="TWO_LEVEL", [ cedilla, diaeresis ] }; }; partial alphanumeric_keys xkb_symbols "us" { - name[Group1]= "Slovenian (US keyboard with Slovenian letters)"; - include "rs(latinyz)" + name[Group1]= "Slovenian (US keyboard with Slovenian letters)"; + key <TLDE> { type[Group1]="TWO_LEVEL", [ cedilla, diaeresis ] }; }; - partial alphanumeric_keys xkb_symbols "alternatequotes" { - name[Group1]= "Slovenian (use guillemets for quotes)"; - include "rs(latinalternatequotes)" + name[Group1]= "Slovenian (with guillemets for quotes)"; + key <TLDE> { type[Group1]="TWO_LEVEL", [ cedilla, diaeresis ] }; }; diff --git a/xorg-server/xkeyboard-config/symbols/tm b/xorg-server/xkeyboard-config/symbols/tm index e861b35c3..6c71f48bf 100644 --- a/xorg-server/xkeyboard-config/symbols/tm +++ b/xorg-server/xkeyboard-config/symbols/tm @@ -3,9 +3,10 @@ // Default layout (based on Vista Turkmen layout) default partial xkb_symbols "basic" { - name[Group1]="Turkmen"; include "us" + name[Group1]="Turkmen"; + key <TLDE> { [ zcaron, Zcaron, grave, asciitilde ] }; key <AD01> { [ adiaeresis, Adiaeresis, q, Q ] }; @@ -25,9 +26,9 @@ xkb_symbols "basic" { // This layout provides turkmen letter via the AltGr key partial xkb_symbols "alt" { - name[Group1]="Turkmen (Alt-Q)"; include "us" + name[Group1]="Turkmen (Alt-Q)"; key <AD06> { [ y, Y, yacute, Yacute ] }; key <AD07> { [ u, U, udiaeresis, Udiaeresis ] }; @@ -41,5 +42,4 @@ xkb_symbols "alt" { key <AB06> { [ n, N, ncaron, Ncaron ] }; include "level3(ralt_switch)" - }; diff --git a/xorg-server/xkeyboard-config/symbols/tw b/xorg-server/xkeyboard-config/symbols/tw index 8ea31dda6..3a2287222 100644 --- a/xorg-server/xkeyboard-config/symbols/tw +++ b/xorg-server/xkeyboard-config/symbols/tw @@ -1,10 +1,10 @@ default partial alphanumeric_keys xkb_symbols "tw" { - name[Group1]= "Taiwanese"; - include "us(basic)" + name[Group1]= "Taiwanese"; + key <TLDE> { [ grave, asciitilde, dead_grave, dead_tilde ] }; key <AE01> { [ 1, exclam, U030D, exclamdown ] }; key <AE02> { [ 2, at, U0358, twosuperior ] }; @@ -49,10 +49,10 @@ xkb_symbols "tw" { partial alphanumeric_keys xkb_symbols "indigenous" { - name[Group1]= "Taiwanese (indigenous)"; - include "tw(tw)" + name[Group1]= "Taiwanese (indigenous)"; + key <AC11> { [ U02BC, quotedbl, apostrophe, dead_doubleacute ] }; include "level3(ralt_switch)" @@ -61,10 +61,10 @@ xkb_symbols "indigenous" { partial alphanumeric_keys xkb_symbols "saisiyat" { - name[Group1]= "Saisiyat (Taiwan)"; - include "tw(indigenous)" + name[Group1]= "Saisiyat (Taiwan)"; + key <AC10> { [ U02D0, colon, semicolon, dead_diaeresis ] }; include "level3(ralt_switch)" diff --git a/xorg-server/xkeyboard-config/symbols/ua b/xorg-server/xkeyboard-config/symbols/ua index 9aea09e05..81d696ec4 100644 --- a/xorg-server/xkeyboard-config/symbols/ua +++ b/xorg-server/xkeyboard-config/symbols/ua @@ -12,7 +12,7 @@ xkb_symbols "unicode" { name[Group1]= "Ukrainian"; key <TLDE> { [ U2019, apostrophe, U0301, asciitilde ] }; // Apostrophe and Stress symbol - key <AE02> { [ 1, exclam, onesuperior ] }; + key <AE01> { [ 1, exclam, onesuperior ] }; key <AE02> { [ 2, quotedbl, twosuperior ] }; key <AE03> { [ 3, numerosign, U00A7, U20B4 ] }; // Paragraph and Hryvnia sign key <AE04> { [ 4, semicolon, dollar, EuroSign ] }; diff --git a/xorg-server/xkeyboard-config/symbols/us b/xorg-server/xkeyboard-config/symbols/us index 4948a6345..d5a6c18e4 100644 --- a/xorg-server/xkeyboard-config/symbols/us +++ b/xorg-server/xkeyboard-config/symbols/us @@ -59,9 +59,8 @@ xkb_symbols "basic" { partial alphanumeric_keys xkb_symbols "euro" { - name[Group1]= "English (US, with euro on 5)"; - include "us(basic)" + name[Group1]= "English (US, with euro on 5)"; include "eurosign(5)" @@ -72,9 +71,8 @@ xkb_symbols "euro" { partial alphanumeric_keys xkb_symbols "intl" { - name[Group1]= "English (US, international with dead keys)"; - include "us(basic)" + name[Group1]= "English (US, international with dead keys)"; key <TLDE> { [dead_grave, dead_tilde, grave, asciitilde ] }; key <AE01> { [ 1, exclam, exclamdown, onesuperior ] }; @@ -163,9 +161,8 @@ xkb_symbols "intl" { partial alphanumeric_keys xkb_symbols "alt-intl" { - name[Group1]= "English (US, alternative international)"; - include "us" + name[Group1]= "English (US, alternative international)"; key <TLDE> { [ dead_grave, dead_tilde, grave, asciitilde ] }; key <AE05> { [ 5, percent, EuroSign ] }; @@ -257,9 +254,8 @@ xkb_symbols "dvorak" { partial alphanumeric_keys xkb_symbols "dvorak-intl" { - name[Group1]= "English (Dvorak, international with dead keys)"; - include "us(dvorak)" + name[Group1]= "English (Dvorak, international with dead keys)"; key <TLDE> { [dead_grave, dead_tilde, grave, asciitilde ] }; @@ -336,9 +332,8 @@ xkb_symbols "dvorak-intl" { partial alphanumeric_keys xkb_symbols "dvorak-alt-intl" { - name[Group1]= "English (Dvorak alternative international no dead keys)"; - include "us(dvorak)" + name[Group1]= "English (Dvorak alternative international no dead keys)"; key <AE04> { [ 4, dollar, EuroSign ] }; @@ -548,8 +543,8 @@ xkb_symbols "dvorak-classic" { // symbols that usually follows, accented characters are possible for I18N. partial alphanumeric_keys xkb_symbols "dvp" { - include "us(dvorak)" + include "us(dvorak)" name[Group1] = "English (programmer Dvorak)"; // Unmodified Shift AltGr Shift+AltGr @@ -619,9 +614,8 @@ xkb_symbols "dvp" { partial alphanumeric_keys xkb_symbols "rus" { - name[Group1]= "Russian (US, phonetic)"; - include "us(basic)" + name[Group1]= "Russian (US, phonetic)"; key.type[group1]="FOUR_LEVEL_ALPHABETIC"; @@ -732,6 +726,7 @@ xkb_symbols "mac" { partial alphanumeric_keys xkb_symbols "colemak" { + include "us" name[Group1]= "English (Colemak)"; @@ -812,9 +807,8 @@ xkb_symbols "colemak" { partial alphanumeric_keys xkb_symbols "altgr-intl" { - name[Group1]= "English (international AltGr dead keys)"; - include "us(intl)" + name[Group1]= "English (international AltGr dead keys)"; // five dead keys moved into level3: @@ -1175,9 +1169,8 @@ xkb_symbols "chr" { partial alphanumeric_keys xkb_symbols "hbs" { - name[Group1]= "Serbo-Croatian (US)"; - include "us" + name[Group1]= "Serbo-Croatian (US)"; key <TLDE> { [ grave, asciitilde ] }; key <AE06> { [ 6, dead_caron, asciicircum, asciicircum ] }; @@ -1247,9 +1240,8 @@ xkb_symbols "htcdream" { partial alphanumeric_keys xkb_symbols "workman" { - name[Group1]= "English (Workman)"; - include "us(basic)" + name[Group1]= "English (Workman)"; key <AD01> { [ q, Q ] }; key <AD02> { [ d, D ] }; @@ -1289,9 +1281,8 @@ xkb_symbols "workman" { partial alphanumeric_keys xkb_symbols "workman-intl" { - name[Group1]= "English (Workman, international with dead keys)"; - include "us(intl)" + name[Group1]= "English (Workman, international with dead keys)"; key <AD01> { [ q, Q, adiaeresis, Adiaeresis ] }; key <AD02> { [ d, D, eth, ETH ] }; @@ -1337,11 +1328,9 @@ xkb_symbols "workman-intl" { partial alphanumeric_keys xkb_symbols "norman" { - name[Group1]= "English (Norman)"; - include "us(basic)" + name[Group1]= "English (Norman)"; - // Alphanumeric section key <AD01> { [ q, Q ] }; key <AD02> { [ w, W ] }; key <AD03> { [ d, D ] }; @@ -1371,7 +1360,6 @@ xkb_symbols "norman" { key <AB05> { [ b, B ] }; key <AB06> { [ p, P ] }; key <AB07> { [ m, M ] }; - // End alphanumeric section key <CAPS> { [ BackSpace ] }; @@ -1383,6 +1371,7 @@ xkb_symbols "norman" { // Czech, Slovak and German charecters added as third level symbols to US keyboard layout. partial alphanumeric_keys xkb_symbols "cz_sk_de" { + include "us" name[Group1]="Czech Slovak and German (US)"; @@ -1518,7 +1507,6 @@ partial alphanumeric_keys xkb_symbols "ats" { include "us" - name[Group1]= "Atsina"; //Using Dead key to get COMBINING COMMA ABOVE for ejectives on @@ -1548,7 +1536,6 @@ partial alphanumeric_keys xkb_symbols "crd" { include "us" - name[Group1]= "Coeur d'Alene Salish"; key <AD02> { [ w, W, U02B7, U02B7 ] }; |