Blame libfreerdp/locale/xkb_layout_ids.c

Packit 1fb8d4
/**
Packit 1fb8d4
 * FreeRDP: A Remote Desktop Protocol Implementation
Packit 1fb8d4
 * RDP Keyboard layout ID detection from common X11 xkb keyboard layout names
Packit 1fb8d4
 *
Packit 1fb8d4
 * Copyright 2009-2012 Marc-Andre Moreau <marcandre.moreau@gmail.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Licensed under the Apache License, Version 2.0 (the "License");
Packit 1fb8d4
 * you may not use this file except in compliance with the License.
Packit 1fb8d4
 * You may obtain a copy of the License at
Packit 1fb8d4
 *
Packit 1fb8d4
 *     http://www.apache.org/licenses/LICENSE-2.0
Packit 1fb8d4
 *
Packit 1fb8d4
 * Unless required by applicable law or agreed to in writing, software
Packit 1fb8d4
 * distributed under the License is distributed on an "AS IS" BASIS,
Packit 1fb8d4
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
Packit 1fb8d4
 * See the License for the specific language governing permissions and
Packit 1fb8d4
 * limitations under the License.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifdef HAVE_CONFIG_H
Packit 1fb8d4
#include "config.h"
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#include "xkb_layout_ids.h"
Packit 1fb8d4
Packit 1fb8d4
#include <string.h>
Packit 1fb8d4
Packit 1fb8d4
#include <winpr/crt.h>
Packit 1fb8d4
Packit 1fb8d4
#include <freerdp/locale/keyboard.h>
Packit 1fb8d4
Packit 1fb8d4
#include "liblocale.h"
Packit 1fb8d4
Packit 1fb8d4
struct _XKB_VARIANT
Packit 1fb8d4
{
Packit 1fb8d4
	const char* variant; /* XKB Keyboard layout variant */
Packit 1fb8d4
	UINT32 keyboardLayoutID; /* Keyboard Layout ID */
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _XKB_VARIANT XKB_VARIANT;
Packit 1fb8d4
Packit 1fb8d4
struct _XKB_LAYOUT
Packit 1fb8d4
{
Packit 1fb8d4
	const char* layout; /* XKB Keyboard layout */
Packit 1fb8d4
	UINT32 keyboardLayoutID; /* Keyboard Layout ID */
Packit 1fb8d4
	const XKB_VARIANT* variants;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct _XKB_LAYOUT XKB_LAYOUT;
Packit 1fb8d4
Packit 1fb8d4
/* Those have been generated automatically and are waiting to be filled by hand */
Packit 1fb8d4
Packit 1fb8d4
/* USA */
Packit 1fb8d4
static const XKB_VARIANT us_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "chr",		0 }, /* Cherokee */
Packit 1fb8d4
	{ "euro",		0 }, /* With EuroSign on 5 */
Packit 1fb8d4
	{ "intl",		KBD_UNITED_STATES_INTERNATIONAL }, /* International (with dead keys) */
Packit 1fb8d4
	{ "alt-intl",		KBD_UNITED_STATES_INTERNATIONAL }, /* Alternative international (former us_intl) */
Packit 1fb8d4
	{ "colemak",		0 }, /* Colemak */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "dvorak-intl",	KBD_UNITED_STATES_DVORAK }, /* Dvorak international */
Packit 1fb8d4
	{ "dvorak-l",		KBD_UNITED_STATES_DVORAK_FOR_LEFT_HAND }, /* Left handed Dvorak */
Packit 1fb8d4
	{ "dvorak-r",		KBD_UNITED_STATES_DVORAK_FOR_RIGHT_HAND }, /* Right handed Dvorak */
Packit 1fb8d4
	{ "dvorak-classic",	KBD_UNITED_STATES_DVORAK }, /* Classic Dvorak */
Packit 1fb8d4
	{ "dvp",		KBD_UNITED_STATES_DVORAK_PROGRAMMER }, /* Programmer Dvorak */
Packit 1fb8d4
	{ "rus",		0 }, /* Russian phonetic */
Packit 1fb8d4
	{ "mac",		KBD_US }, /* Macintosh */
Packit 1fb8d4
	{ "altgr-intl",		KBD_UNITED_STATES_INTERNATIONAL }, /* International (AltGr dead keys) */
Packit 1fb8d4
	{ "olpc2",		KBD_US }, /* Group toggle on multiply/divide key */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Afghanistan */
Packit 1fb8d4
static const XKB_VARIANT af_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "ps",			KBD_PASHTO }, /* Pashto */
Packit 1fb8d4
	{ "uz",			KBD_UZBEK_CYRILLIC }, /* Southern Uzbek */
Packit 1fb8d4
	{ "olpc-ps",		KBD_PASHTO }, /* OLPC Pashto */
Packit 1fb8d4
	{ "olpc-fa",		0 }, /* OLPC Dari */
Packit 1fb8d4
	{ "olpc-uz",		KBD_UZBEK_CYRILLIC }, /* OLPC Southern Uzbek */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Arabic */
Packit 1fb8d4
static const XKB_VARIANT ara_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "azerty",		KBD_ARABIC_102_AZERTY }, /* azerty */
Packit 1fb8d4
	{ "azerty_digits",	KBD_ARABIC_102_AZERTY }, /* azerty/digits */
Packit 1fb8d4
	{ "digits",		KBD_ARABIC_102_AZERTY }, /* digits */
Packit 1fb8d4
	{ "qwerty",		KBD_ARABIC_101 }, /* qwerty */
Packit 1fb8d4
	{ "qwerty_digits",	KBD_ARABIC_101 }, /* qwerty/digits */
Packit 1fb8d4
	{ "buckwalter",		KBD_US_ENGLISH_TABLE_FOR_IBM_ARABIC_238_L }, /* Buckwalter */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Armenia */
Packit 1fb8d4
static const XKB_VARIANT am_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "phonetic",		0 }, /* Phonetic */
Packit 1fb8d4
	{ "phonetic-alt",	0 }, /* Alternative Phonetic */
Packit 1fb8d4
	{ "eastern",		KBD_ARMENIAN_EASTERN }, /* Eastern */
Packit 1fb8d4
	{ "western",		KBD_ARMENIAN_WESTERN }, /* Western */
Packit 1fb8d4
	{ "eastern-alt",	KBD_ARMENIAN_EASTERN }, /* Alternative Eastern */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Azerbaijan */
Packit 1fb8d4
static const XKB_VARIANT az_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "cyrillic",		KBD_AZERI_CYRILLIC }, /* Cyrillic */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Belarus */
Packit 1fb8d4
static const XKB_VARIANT by_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "winkeys",		KBD_BELARUSIAN }, /* Winkeys */
Packit 1fb8d4
	{ "latin",		KBD_BELARUSIAN }, /* Latin */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Belgium */
Packit 1fb8d4
static const XKB_VARIANT be_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "oss",		KBD_BELGIAN_FRENCH }, /* Alternative */
Packit 1fb8d4
	{ "oss_latin9",		KBD_BELGIAN_FRENCH }, /* Alternative, latin-9 only */
Packit 1fb8d4
	{ "oss_sundeadkeys",	KBD_BELGIAN_PERIOD }, /* Alternative, Sun dead keys */
Packit 1fb8d4
	{ "iso-alternate",	KBD_BELGIAN_COMMA }, /* ISO Alternate */
Packit 1fb8d4
	{ "nodeadkeys",		KBD_BELGIAN_COMMA }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "sundeadkeys",	KBD_BELGIAN_PERIOD }, /* Sun dead keys */
Packit 1fb8d4
	{ "wang",		KBD_BELGIAN_FRENCH }, /* Wang model 724 azerty */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Bangladesh */
Packit 1fb8d4
static const XKB_VARIANT bd_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "probhat",		KBD_BENGALI_INSCRIPT }, /* Probhat */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* India */
Packit 1fb8d4
static const XKB_VARIANT in_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "ben",		KBD_BENGALI }, /* Bengali */
Packit 1fb8d4
	{ "ben_probhat",	KBD_BENGALI_INSCRIPT }, /* Bengali Probhat */
Packit 1fb8d4
	{ "guj",		KBD_GUJARATI }, /* Gujarati */
Packit 1fb8d4
	{ "guru",		0 }, /* Gurmukhi */
Packit 1fb8d4
	{ "jhelum",		0 }, /* Gurmukhi Jhelum */
Packit 1fb8d4
	{ "kan",		KBD_KANNADA }, /* Kannada */
Packit 1fb8d4
	{ "mal",		KBD_MALAYALAM }, /* Malayalam */
Packit 1fb8d4
	{ "mal_lalitha",	KBD_MALAYALAM }, /* Malayalam Lalitha */
Packit 1fb8d4
	{ "ori",		0 }, /* Oriya */
Packit 1fb8d4
	{ "tam_unicode",	KBD_TAMIL }, /* Tamil Unicode */
Packit 1fb8d4
	{ "tam_TAB",		KBD_TAMIL }, /* Tamil TAB Typewriter */
Packit 1fb8d4
	{ "tam_TSCII",		KBD_TAMIL }, /* Tamil TSCII Typewriter */
Packit 1fb8d4
	{ "tam",		KBD_TAMIL }, /* Tamil */
Packit 1fb8d4
	{ "tel",		KBD_TELUGU }, /* Telugu */
Packit 1fb8d4
	{ "urd-phonetic",	KBD_URDU }, /* Urdu, Phonetic */
Packit 1fb8d4
	{ "urd-phonetic3",	KBD_URDU }, /* Urdu, Alternative phonetic */
Packit 1fb8d4
	{ "urd-winkeys",	KBD_URDU }, /* Urdu, Winkeys */
Packit 1fb8d4
	{ "bolnagri",		KBD_HINDI_TRADITIONAL }, /* Hindi Bolnagri */
Packit 1fb8d4
	{ "hin-wx",		KBD_HINDI_TRADITIONAL }, /* Hindi Wx */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Bosnia and Herzegovina */
Packit 1fb8d4
static const XKB_VARIANT ba_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "alternatequotes",	KBD_BOSNIAN }, /* Use guillemets for quotes */
Packit 1fb8d4
	{ "unicode",		KBD_BOSNIAN }, /* Use Bosnian digraphs */
Packit 1fb8d4
	{ "unicodeus",		KBD_BOSNIAN }, /* US keyboard with Bosnian digraphs */
Packit 1fb8d4
	{ "us",			KBD_BOSNIAN_CYRILLIC }, /* US keyboard with Bosnian letters */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Brazil */
Packit 1fb8d4
static const XKB_VARIANT br_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_PORTUGUESE_BRAZILIAN_ABNT2 }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "nativo",		KBD_PORTUGUESE_BRAZILIAN_ABNT2 }, /* Nativo */
Packit 1fb8d4
	{ "nativo-us",		KBD_PORTUGUESE_BRAZILIAN_ABNT2 }, /* Nativo for USA keyboards */
Packit 1fb8d4
	{ "nativo-epo",		KBD_PORTUGUESE_BRAZILIAN_ABNT2 }, /* Nativo for Esperanto */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Bulgaria */
Packit 1fb8d4
static const XKB_VARIANT bg_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "phonetic",		KBD_BULGARIAN_LATIN }, /* Traditional Phonetic */
Packit 1fb8d4
	{ "bas_phonetic",	KBD_BULGARIAN_LATIN }, /* Standard Phonetic */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Morocco */
Packit 1fb8d4
static const XKB_VARIANT ma_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "french",			KBD_FRENCH }, /* French */
Packit 1fb8d4
	{ "tifinagh",			0 }, /* Tifinagh */
Packit 1fb8d4
	{ "tifinagh-alt",		0 }, /* Tifinagh Alternative */
Packit 1fb8d4
	{ "tifinagh-alt-phonetic",	0 }, /* Tifinagh Alternative Phonetic */
Packit 1fb8d4
	{ "tifinagh-extended",		0 }, /* Tifinagh Extended */
Packit 1fb8d4
	{ "tifinagh-phonetic",		0 }, /* Tifinagh Phonetic */
Packit 1fb8d4
	{ "tifinagh-extended-phonetic",	0 }, /* Tifinagh Extended Phonetic */
Packit 1fb8d4
	{ "",				0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Canada */
Packit 1fb8d4
static const XKB_VARIANT ca_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "fr",				KBD_CANADIAN_FRENCH }, /* French Dvorak */
Packit 1fb8d4
	{ "fr-dvorak",		KBD_UNITED_STATES_DVORAK }, /* French Dvorak */
Packit 1fb8d4
	{ "fr-legacy",		KBD_CANADIAN_FRENCH_LEGACY }, /* French (legacy) */
Packit 1fb8d4
	{ "multix",		KBD_CANADIAN_MULTILINGUAL_STANDARD }, /* Multilingual */
Packit 1fb8d4
	{ "multi",		KBD_CANADIAN_MULTILINGUAL_STANDARD }, /* Multilingual, first part */
Packit 1fb8d4
	{ "multi-2gr",		KBD_CANADIAN_MULTILINGUAL_STANDARD }, /* Multilingual, second part */
Packit 1fb8d4
	{ "ike",		KBD_INUKTITUT_LATIN }, /* Inuktitut */
Packit 1fb8d4
	{ "shs",		0 }, /* Secwepemctsin */
Packit 1fb8d4
	{ "kut",		0 }, /* Ktunaxa */
Packit 1fb8d4
	{ "eng",		KBD_CANADIAN_ENGLISH }, /* English */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* China */
Packit 1fb8d4
static const XKB_VARIANT cn_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "tib",		0 }, /* Tibetan */
Packit 1fb8d4
	{ "tib_asciinum",	0 }, /* Tibetan (with ASCII numerals) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Croatia */
Packit 1fb8d4
static const XKB_VARIANT hr_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "alternatequotes",	KBD_CROATIAN }, /* Use guillemets for quotes */
Packit 1fb8d4
	{ "unicode",		KBD_CROATIAN }, /* Use Croatian digraphs */
Packit 1fb8d4
	{ "unicodeus",		KBD_CROATIAN }, /* US keyboard with Croatian digraphs */
Packit 1fb8d4
	{ "us",			KBD_CROATIAN }, /* US keyboard with Croatian letters */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Czechia */
Packit 1fb8d4
static const XKB_VARIANT cz_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "bksl",		KBD_CZECH_PROGRAMMERS }, /* With <\|> key */
Packit 1fb8d4
	{ "qwerty",		KBD_CZECH_QWERTY }, /* qwerty */
Packit 1fb8d4
	{ "qwerty_bksl",	KBD_CZECH_QWERTY }, /* qwerty, extended Backslash */
Packit 1fb8d4
	{ "ucw",		KBD_CZECH }, /* UCW layout (accented letters only) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Denmark */
Packit 1fb8d4
static const XKB_VARIANT dk_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_DANISH }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "mac",		KBD_DANISH }, /* Macintosh */
Packit 1fb8d4
	{ "mac_nodeadkeys",	KBD_DANISH }, /* Macintosh, eliminate dead keys */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Netherlands */
Packit 1fb8d4
static const XKB_VARIANT nl_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "sundeadkeys",	KBD_SWISS_FRENCH }, /* Sun dead keys */
Packit 1fb8d4
	{ "mac",		KBD_SWISS_FRENCH }, /* Macintosh */
Packit 1fb8d4
	{ "std",		KBD_SWISS_FRENCH }, /* Standard */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Estonia */
Packit 1fb8d4
static const XKB_VARIANT ee_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_US }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "us",			KBD_UNITED_STATES_INTERNATIONAL }, /* US keyboard with Estonian letters */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Iran */
Packit 1fb8d4
static const XKB_VARIANT ir_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "pro",		0 }, /* Pro */
Packit 1fb8d4
	{ "keypad",		0 }, /* Keypad */
Packit 1fb8d4
	{ "pro_keypad",		0 }, /* Pro Keypad */
Packit 1fb8d4
	{ "ku",			0 }, /* Kurdish, Latin Q */
Packit 1fb8d4
	{ "ku_f",		0 }, /* Kurdish, (F) */
Packit 1fb8d4
	{ "ku_alt",		0 }, /* Kurdish, Latin Alt-Q */
Packit 1fb8d4
	{ "ku_ara",		0 }, /* Kurdish, Arabic-Latin */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Iraq */
Packit 1fb8d4
static const XKB_VARIANT iq_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "ku",			0 }, /* Kurdish, Latin Q */
Packit 1fb8d4
	{ "ku_f",		0 }, /* Kurdish, (F) */
Packit 1fb8d4
	{ "ku_alt",		0 }, /* Kurdish, Latin Alt-Q */
Packit 1fb8d4
	{ "ku_ara",		0 }, /* Kurdish, Arabic-Latin */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Faroe Islands */
Packit 1fb8d4
static const XKB_VARIANT fo_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		0 }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Finland */
Packit 1fb8d4
static const XKB_VARIANT fi_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		0 }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "smi",		0 }, /* Northern Saami */
Packit 1fb8d4
	{ "classic",		0 }, /* Classic */
Packit 1fb8d4
	{ "mac",		0 }, /* Macintosh */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* France */
Packit 1fb8d4
static const XKB_VARIANT fr_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		0 }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "sundeadkeys",	0 }, /* Sun dead keys */
Packit 1fb8d4
	{ "oss",		0 }, /* Alternative */
Packit 1fb8d4
	{ "oss_latin9",		0 }, /* Alternative, latin-9 only */
Packit 1fb8d4
	{ "oss_nodeadkeys",	0 }, /* Alternative, eliminate dead keys */
Packit 1fb8d4
	{ "oss_sundeadkeys",	0 }, /* Alternative, Sun dead keys */
Packit 1fb8d4
	{ "latin9",		0 }, /* (Legacy) Alternative */
Packit 1fb8d4
	{ "latin9_nodeadkeys",	0 }, /* (Legacy) Alternative, eliminate dead keys */
Packit 1fb8d4
	{ "latin9_sundeadkeys",	0 }, /* (Legacy) Alternative, Sun dead keys */
Packit 1fb8d4
	{ "bepo",		KBD_FRENCH_BEPO }, /* Bepo, ergonomic, Dvorak way */
Packit 1fb8d4
	{ "bepo_latin9",	0 }, /* Bepo, ergonomic, Dvorak way, latin-9 only */
Packit 1fb8d4
	{ "dvorak",		0 }, /* Dvorak */
Packit 1fb8d4
	{ "mac",		0 }, /* Macintosh */
Packit 1fb8d4
	{ "bre",		0 }, /* Breton */
Packit 1fb8d4
	{ "oci",		0 }, /* Occitan */
Packit 1fb8d4
	{ "geo",		0 }, /* Georgian AZERTY Tskapo */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Ghana */
Packit 1fb8d4
static const XKB_VARIANT gh_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "generic",		0 }, /* Multilingual */
Packit 1fb8d4
	{ "akan",		0 }, /* Akan */
Packit 1fb8d4
	{ "ewe",		0 }, /* Ewe */
Packit 1fb8d4
	{ "fula",		0 }, /* Fula */
Packit 1fb8d4
	{ "ga",			0 }, /* Ga */
Packit 1fb8d4
	{ "hausa",		0 }, /* Hausa */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Georgia */
Packit 1fb8d4
static const XKB_VARIANT ge_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "ergonomic",		0 }, /* Ergonomic */
Packit 1fb8d4
	{ "mess",		0 }, /* MESS */
Packit 1fb8d4
	{ "ru",			0 }, /* Russian */
Packit 1fb8d4
	{ "os",			0 }, /* Ossetian */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Germany */
Packit 1fb8d4
static const XKB_VARIANT de_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "deadacute",		KBD_GERMAN }, /* Dead acute */
Packit 1fb8d4
	{ "deadgraveacute",	KBD_GERMAN }, /* Dead grave acute */
Packit 1fb8d4
	{ "nodeadkeys",		KBD_GERMAN }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "ro",			KBD_GERMAN }, /* Romanian keyboard with German letters */
Packit 1fb8d4
	{ "ro_nodeadkeys",	KBD_GERMAN }, /* Romanian keyboard with German letters, eliminate dead keys */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "sundeadkeys",	KBD_GERMAN }, /* Sun dead keys */
Packit 1fb8d4
	{ "neo",		KBD_GERMAN_NEO }, /* Neo 2 */
Packit 1fb8d4
	{ "mac",		KBD_GERMAN }, /* Macintosh */
Packit 1fb8d4
	{ "mac_nodeadkeys",	KBD_GERMAN }, /* Macintosh, eliminate dead keys */
Packit 1fb8d4
	{ "dsb",		KBD_GERMAN }, /* Lower Sorbian */
Packit 1fb8d4
	{ "dsb_qwertz",		KBD_GERMAN }, /* Lower Sorbian (qwertz) */
Packit 1fb8d4
	{ "qwerty",		KBD_GERMAN_IBM }, /* qwerty */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Greece */
Packit 1fb8d4
static const XKB_VARIANT gr_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "simple",		KBD_GREEK_220 }, /* Simple */
Packit 1fb8d4
	{ "extended",		KBD_GREEK_319 }, /* Extended */
Packit 1fb8d4
	{ "nodeadkeys",		KBD_GREEK_319}, /* Eliminate dead keys */
Packit 1fb8d4
	{ "polytonic",		KBD_GREEK_POLYTONIC }, /* Polytonic */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Hungary */
Packit 1fb8d4
static const XKB_VARIANT hu_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "standard",				KBD_HUNGARIAN_101_KEY }, /* Standard */
Packit 1fb8d4
	{ "nodeadkeys",				KBD_HUNGARIAN_101_KEY }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "qwerty",				KBD_HUNGARIAN_101_KEY }, /* qwerty */
Packit 1fb8d4
	{ "101_qwertz_comma_dead",		KBD_HUNGARIAN_101_KEY }, /* 101/qwertz/comma/Dead keys */
Packit 1fb8d4
	{ "101_qwertz_comma_nodead",		KBD_HUNGARIAN_101_KEY }, /* 101/qwertz/comma/Eliminate dead keys */
Packit 1fb8d4
	{ "101_qwertz_dot_dead",		KBD_HUNGARIAN_101_KEY }, /* 101/qwertz/dot/Dead keys */
Packit 1fb8d4
	{ "101_qwertz_dot_nodead",		KBD_HUNGARIAN_101_KEY }, /* 101/qwertz/dot/Eliminate dead keys */
Packit 1fb8d4
	{ "101_qwerty_comma_dead",		KBD_HUNGARIAN_101_KEY }, /* 101/qwerty/comma/Dead keys */
Packit 1fb8d4
	{ "101_qwerty_comma_nodead",		KBD_HUNGARIAN_101_KEY }, /* 101/qwerty/comma/Eliminate dead keys */
Packit 1fb8d4
	{ "101_qwerty_dot_dead",		KBD_HUNGARIAN_101_KEY }, /* 101/qwerty/dot/Dead keys */
Packit 1fb8d4
	{ "101_qwerty_dot_nodead",		KBD_HUNGARIAN_101_KEY }, /* 101/qwerty/dot/Eliminate dead keys */
Packit 1fb8d4
	{ "102_qwertz_comma_dead",		KBD_HUNGARIAN_101_KEY }, /* 102/qwertz/comma/Dead keys */
Packit 1fb8d4
	{ "102_qwertz_comma_nodead",		KBD_HUNGARIAN_101_KEY }, /* 102/qwertz/comma/Eliminate dead keys */
Packit 1fb8d4
	{ "102_qwertz_dot_dead",		KBD_HUNGARIAN_101_KEY }, /* 102/qwertz/dot/Dead keys */
Packit 1fb8d4
	{ "102_qwertz_dot_nodead",		KBD_HUNGARIAN_101_KEY }, /* 102/qwertz/dot/Eliminate dead keys */
Packit 1fb8d4
	{ "102_qwerty_comma_dead",		KBD_HUNGARIAN_101_KEY }, /* 102/qwerty/comma/Dead keys */
Packit 1fb8d4
	{ "102_qwerty_comma_nodead",		KBD_HUNGARIAN_101_KEY }, /* 102/qwerty/comma/Eliminate dead keys */
Packit 1fb8d4
	{ "102_qwerty_dot_dead",		KBD_HUNGARIAN_101_KEY }, /* 102/qwerty/dot/Dead keys */
Packit 1fb8d4
	{ "102_qwerty_dot_nodead",		KBD_HUNGARIAN_101_KEY }, /* 102/qwerty/dot/Eliminate dead keys */
Packit 1fb8d4
	{ "",					0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Iceland */
Packit 1fb8d4
static const XKB_VARIANT is_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "Sundeadkeys",	KBD_ICELANDIC }, /* Sun dead keys */
Packit 1fb8d4
	{ "nodeadkeys",		KBD_ICELANDIC }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "mac",		KBD_ICELANDIC }, /* Macintosh */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Israel */
Packit 1fb8d4
static const XKB_VARIANT il_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "lyx",		KBD_HEBREW }, /* lyx */
Packit 1fb8d4
	{ "phonetic",		KBD_HEBREW }, /* Phonetic */
Packit 1fb8d4
	{ "biblical",		KBD_HEBREW }, /* Biblical Hebrew (Tiro) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Italy */
Packit 1fb8d4
static const XKB_VARIANT it_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_ITALIAN_142 }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "mac",		KBD_ITALIAN }, /* Macintosh */
Packit 1fb8d4
	{ "geo",		KBD_GEORGIAN }, /* Georgian */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Japan */
Packit 1fb8d4
static const XKB_VARIANT jp_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "kana",		KBD_JAPANESE_INPUT_SYSTEM_MS_IME2002 }, /* Kana */
Packit 1fb8d4
	{ "OADG109A",		KBD_JAPANESE_INPUT_SYSTEM_MS_IME2002 }, /* OADG 109A */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Kyrgyzstan */
Packit 1fb8d4
static const XKB_VARIANT kg_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "phonetic",		KBD_KYRGYZ_CYRILLIC }, /* Phonetic */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Kazakhstan */
Packit 1fb8d4
static const XKB_VARIANT kz_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "ruskaz",		KBD_KAZAKH }, /* Russian with Kazakh */
Packit 1fb8d4
	{ "kazrus",		KBD_KAZAKH }, /* Kazakh with Russian */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Latin America */
Packit 1fb8d4
static const XKB_VARIANT latam_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_LATIN_AMERICAN }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "deadtilde",		KBD_LATIN_AMERICAN }, /* Include dead tilde */
Packit 1fb8d4
	{ "sundeadkeys",	KBD_LATIN_AMERICAN }, /* Sun dead keys */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Lithuania */
Packit 1fb8d4
static const XKB_VARIANT lt_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "std",		KBD_LITHUANIAN }, /* Standard */
Packit 1fb8d4
	{ "us",			KBD_LITHUANIAN_IBM }, /* US keyboard with Lithuanian letters */
Packit 1fb8d4
	{ "ibm",		KBD_LITHUANIAN_IBM }, /* IBM (LST 1205-92) */
Packit 1fb8d4
	{ "lekp",		KBD_LITHUANIAN }, /* LEKP */
Packit 1fb8d4
	{ "lekpa",		KBD_LITHUANIAN }, /* LEKPa */
Packit 1fb8d4
	{ "balticplus",		KBD_LITHUANIAN }, /* Baltic+ */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Latvia */
Packit 1fb8d4
static const XKB_VARIANT lv_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "apostrophe",		KBD_LATVIAN }, /* Apostrophe (') variant */
Packit 1fb8d4
	{ "tilde",		KBD_LATVIAN }, /* Tilde (~) variant */
Packit 1fb8d4
	{ "fkey",		KBD_LATVIAN }, /* F-letter (F) variant */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Montenegro */
Packit 1fb8d4
static const XKB_VARIANT me_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "cyrillic",			0 }, /* Cyrillic */
Packit 1fb8d4
	{ "cyrillicyz",			0 }, /* Cyrillic, Z and ZHE swapped */
Packit 1fb8d4
	{ "latinunicode",		0 }, /* Latin unicode */
Packit 1fb8d4
	{ "latinyz",			0 }, /* Latin qwerty */
Packit 1fb8d4
	{ "latinunicodeyz",		0 }, /* Latin unicode qwerty */
Packit 1fb8d4
	{ "cyrillicalternatequotes",	0 }, /* Cyrillic with guillemets */
Packit 1fb8d4
	{ "latinalternatequotes",	0 }, /* Latin with guillemets */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Macedonia */
Packit 1fb8d4
static const XKB_VARIANT mk_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_FYRO_MACEDONIAN }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Malta */
Packit 1fb8d4
static const XKB_VARIANT mt_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "us",			KBD_MALTESE_48_KEY }, /* Maltese keyboard with US layout */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Norway */
Packit 1fb8d4
static const XKB_VARIANT no_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_NORWEGIAN }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "smi",		KBD_NORWEGIAN_WITH_SAMI }, /* Northern Saami */
Packit 1fb8d4
	{ "smi_nodeadkeys",	KBD_SAMI_EXTENDED_NORWAY }, /* Northern Saami, eliminate dead keys */
Packit 1fb8d4
	{ "mac",		KBD_NORWEGIAN }, /* Macintosh */
Packit 1fb8d4
	{ "mac_nodeadkeys",	KBD_SAMI_EXTENDED_NORWAY }, /* Macintosh, eliminate dead keys */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Poland */
Packit 1fb8d4
static const XKB_VARIANT pl_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "qwertz",		KBD_POLISH_214 }, /* qwertz */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "dvorak_quotes",	KBD_UNITED_STATES_DVORAK }, /* Dvorak, Polish quotes on quotemark key */
Packit 1fb8d4
	{ "dvorak_altquotes",	KBD_UNITED_STATES_DVORAK }, /* Dvorak, Polish quotes on key 1 */
Packit 1fb8d4
	{ "csb",		0 }, /* Kashubian */
Packit 1fb8d4
	{ "ru_phonetic_dvorak",	KBD_UNITED_STATES_DVORAK }, /* Russian phonetic Dvorak */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Portugal */
Packit 1fb8d4
static const XKB_VARIANT pt_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_PORTUGUESE }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "sundeadkeys",	KBD_PORTUGUESE }, /* Sun dead keys */
Packit 1fb8d4
	{ "mac",		KBD_PORTUGUESE }, /* Macintosh */
Packit 1fb8d4
	{ "mac_nodeadkeys",	KBD_PORTUGUESE }, /* Macintosh, eliminate dead keys */
Packit 1fb8d4
	{ "mac_sundeadkeys",	KBD_PORTUGUESE }, /* Macintosh, Sun dead keys */
Packit 1fb8d4
	{ "nativo",		KBD_PORTUGUESE }, /* Nativo */
Packit 1fb8d4
	{ "nativo-us",		KBD_PORTUGUESE }, /* Nativo for USA keyboards */
Packit 1fb8d4
	{ "nativo-epo",		KBD_PORTUGUESE }, /* Nativo for Esperanto */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Romania */
Packit 1fb8d4
static const XKB_VARIANT ro_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "cedilla",		KBD_ROMANIAN }, /* Cedilla */
Packit 1fb8d4
	{ "std",		KBD_ROMANIAN }, /* Standard */
Packit 1fb8d4
	{ "std_cedilla",	KBD_ROMANIAN }, /* Standard (Cedilla) */
Packit 1fb8d4
	{ "winkeys",		KBD_ROMANIAN }, /* Winkeys */
Packit 1fb8d4
	{ "crh_f",		KBD_TURKISH_F }, /* Crimean Tatar (Turkish F) */
Packit 1fb8d4
	{ "crh_alt",		KBD_TURKISH_Q }, /* Crimean Tatar (Turkish Alt-Q) */
Packit 1fb8d4
	{ "crh_dobruca1",	KBD_TATAR }, /* Crimean Tatar (Dobruca-1 Q) */
Packit 1fb8d4
	{ "crh_dobruca2",	KBD_TATAR }, /* Crimean Tatar (Dobruca-2 Q) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Russia */
Packit 1fb8d4
static const XKB_VARIANT ru_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "phonetic",		KBD_RUSSIAN }, /* Phonetic */
Packit 1fb8d4
	{ "phonetic_winkeys",	KBD_RUSSIAN }, /* Phonetic Winkeys */
Packit 1fb8d4
	{ "typewriter",		KBD_RUSSIAN_TYPEWRITER }, /* Typewriter */
Packit 1fb8d4
	{ "legacy",		KBD_RUSSIAN }, /* Legacy */
Packit 1fb8d4
	{ "tt",			KBD_TATAR }, /* Tatar */
Packit 1fb8d4
	{ "os_legacy",		0 }, /* Ossetian, legacy */
Packit 1fb8d4
	{ "os_winkeys",		0 }, /* Ossetian, Winkeys */
Packit 1fb8d4
	{ "cv",			0 }, /* Chuvash */
Packit 1fb8d4
	{ "cv_latin",		0 }, /* Chuvash Latin */
Packit 1fb8d4
	{ "udm",		0 }, /* Udmurt */
Packit 1fb8d4
	{ "kom",		0 }, /* Komi */
Packit 1fb8d4
	{ "sah",		0 }, /* Yakut */
Packit 1fb8d4
	{ "xal",		0 }, /* Kalmyk */
Packit 1fb8d4
	{ "dos",		0 }, /* DOS */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Serbia */
Packit 1fb8d4
static const XKB_VARIANT rs_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "yz",				KBD_SERBIAN_CYRILLIC }, /* Z and ZHE swapped */
Packit 1fb8d4
	{ "latin",			KBD_SERBIAN_LATIN }, /* Latin */
Packit 1fb8d4
	{ "latinunicode",		KBD_SERBIAN_LATIN }, /* Latin Unicode */
Packit 1fb8d4
	{ "latinyz",			KBD_SERBIAN_LATIN }, /* Latin qwerty */
Packit 1fb8d4
	{ "latinunicodeyz",		KBD_SERBIAN_LATIN }, /* Latin Unicode qwerty */
Packit 1fb8d4
	{ "alternatequotes",		KBD_SERBIAN_CYRILLIC }, /* With guillemets */
Packit 1fb8d4
	{ "latinalternatequotes",	KBD_SERBIAN_LATIN }, /* Latin with guillemets */
Packit 1fb8d4
	{ "",				0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Slovenia */
Packit 1fb8d4
static const XKB_VARIANT si_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "alternatequotes",	KBD_SLOVENIAN }, /* Use guillemets for quotes */
Packit 1fb8d4
	{ "us",			KBD_UNITED_STATES_INTERNATIONAL }, /* US keyboard with Slovenian letters */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Slovakia */
Packit 1fb8d4
static const XKB_VARIANT sk_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "bksl",		KBD_SLOVAK }, /* Extended Backslash */
Packit 1fb8d4
	{ "qwerty",		KBD_SLOVAK_QWERTY }, /* qwerty */
Packit 1fb8d4
	{ "qwerty_bksl",	KBD_SLOVAK_QWERTY }, /* qwerty, extended Backslash */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Spain */
Packit 1fb8d4
static const XKB_VARIANT es_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_SPANISH_VARIATION }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "deadtilde",		KBD_SPANISH_VARIATION }, /* Include dead tilde */
Packit 1fb8d4
	{ "sundeadkeys",	KBD_SPANISH }, /* Sun dead keys */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "ast",		KBD_SPANISH_VARIATION }, /* Asturian variant with bottom-dot H and bottom-dot L */
Packit 1fb8d4
	{ "cat",		KBD_SPANISH_VARIATION }, /* Catalan variant with middle-dot L */
Packit 1fb8d4
	{ "mac",		KBD_SPANISH }, /* Macintosh */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Sweden */
Packit 1fb8d4
static const XKB_VARIANT se_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "nodeadkeys",		KBD_SWEDISH }, /* Eliminate dead keys */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "rus",		KBD_RUSSIAN }, /* Russian phonetic */
Packit 1fb8d4
	{ "rus_nodeadkeys",	KBD_RUSSIAN }, /* Russian phonetic, eliminate dead keys */
Packit 1fb8d4
	{ "smi",		KBD_SWEDISH_WITH_SAMI }, /* Northern Saami */
Packit 1fb8d4
	{ "mac",		KBD_SWEDISH }, /* Macintosh */
Packit 1fb8d4
	{ "svdvorak",		KBD_UNITED_STATES_DVORAK }, /* Svdvorak */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Switzerland */
Packit 1fb8d4
static const XKB_VARIANT ch_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "de_nodeadkeys",	KBD_SWISS_GERMAN }, /* German, eliminate dead keys */
Packit 1fb8d4
	{ "de_sundeadkeys",	KBD_SWISS_GERMAN }, /* German, Sun dead keys */
Packit 1fb8d4
	{ "fr",			KBD_SWISS_FRENCH }, /* French */
Packit 1fb8d4
	{ "fr_nodeadkeys",	KBD_SWISS_FRENCH }, /* French, eliminate dead keys */
Packit 1fb8d4
	{ "fr_sundeadkeys",	KBD_SWISS_FRENCH }, /* French, Sun dead keys */
Packit 1fb8d4
	{ "fr_mac",		KBD_SWISS_FRENCH }, /* French (Macintosh) */
Packit 1fb8d4
	{ "de_mac",		KBD_SWISS_GERMAN }, /* German (Macintosh) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Syria */
Packit 1fb8d4
static const XKB_VARIANT sy_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "syc",		KBD_SYRIAC }, /* Syriac */
Packit 1fb8d4
	{ "syc_phonetic",	KBD_SYRIAC_PHONETIC }, /* Syriac phonetic */
Packit 1fb8d4
	{ "ku",			0 }, /* Kurdish, Latin Q */
Packit 1fb8d4
	{ "ku_f",		0 }, /* Kurdish, (F) */
Packit 1fb8d4
	{ "ku_alt",		0 }, /* Kurdish, Latin Alt-Q */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Tajikistan */
Packit 1fb8d4
static const XKB_VARIANT tj_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "legacy",		0 }, /* Legacy */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Sri Lanka */
Packit 1fb8d4
static const XKB_VARIANT lk_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "tam_unicode",	KBD_TAMIL }, /* Tamil Unicode */
Packit 1fb8d4
	{ "tam_TAB",		KBD_TAMIL }, /* Tamil TAB Typewriter */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Thailand */
Packit 1fb8d4
static const XKB_VARIANT th_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "tis",		KBD_THAI_KEDMANEE_NON_SHIFTLOCK }, /* TIS-820.2538 */
Packit 1fb8d4
	{ "pat",		KBD_THAI_PATTACHOTE }, /* Pattachote */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Turkey */
Packit 1fb8d4
static const XKB_VARIANT tr_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "f",			KBD_TURKISH_F }, /* (F) */
Packit 1fb8d4
	{ "alt",		KBD_TURKISH_Q }, /* Alt-Q */
Packit 1fb8d4
	{ "sundeadkeys",	KBD_TURKISH_F }, /* Sun dead keys */
Packit 1fb8d4
	{ "ku",			0 }, /* Kurdish, Latin Q */
Packit 1fb8d4
	{ "ku_f",		0 }, /* Kurdish, (F) */
Packit 1fb8d4
	{ "ku_alt",		0 }, /* Kurdish, Latin Alt-Q */
Packit 1fb8d4
	{ "intl",		KBD_TURKISH_F }, /* International (with dead keys) */
Packit 1fb8d4
	{ "crh",		KBD_TATAR }, /* Crimean Tatar (Turkish Q) */
Packit 1fb8d4
	{ "crh_f",		KBD_TURKISH_F }, /* Crimean Tatar (Turkish F) */
Packit 1fb8d4
	{ "crh_alt",		KBD_TURKISH_Q }, /* Crimean Tatar (Turkish Alt-Q) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Ukraine */
Packit 1fb8d4
static const XKB_VARIANT ua_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "phonetic",		KBD_UKRAINIAN }, /* Phonetic */
Packit 1fb8d4
	{ "typewriter",		KBD_UKRAINIAN }, /* Typewriter */
Packit 1fb8d4
	{ "winkeys",		KBD_UKRAINIAN }, /* Winkeys */
Packit 1fb8d4
	{ "legacy",		KBD_UKRAINIAN }, /* Legacy */
Packit 1fb8d4
	{ "rstu",		KBD_UKRAINIAN }, /* Standard RSTU */
Packit 1fb8d4
	{ "rstu_ru",		KBD_UKRAINIAN }, /* Standard RSTU on Russian layout */
Packit 1fb8d4
	{ "homophonic",		KBD_UKRAINIAN }, /* Homophonic */
Packit 1fb8d4
	{ "crh",		KBD_TATAR }, /* Crimean Tatar (Turkish Q) */
Packit 1fb8d4
	{ "crh_f",		KBD_TURKISH_F }, /* Crimean Tatar (Turkish F) */
Packit 1fb8d4
	{ "crh_alt",		KBD_TURKISH_Q }, /* Crimean Tatar (Turkish Alt-Q) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* United Kingdom */
Packit 1fb8d4
static const XKB_VARIANT gb_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "extd",		KBD_UNITED_KINGDOM_EXTENDED }, /* Extended - Winkeys */
Packit 1fb8d4
	{ "intl",		KBD_UNITED_KINGDOM_EXTENDED }, /* International (with dead keys) */
Packit 1fb8d4
	{ "dvorak",		KBD_UNITED_STATES_DVORAK }, /* Dvorak */
Packit 1fb8d4
	{ "dvorakukp",		KBD_UNITED_STATES_DVORAK }, /* Dvorak (UK Punctuation) */
Packit 1fb8d4
	{ "mac",		KBD_UNITED_KINGDOM }, /* Macintosh */
Packit 1fb8d4
	{ "colemak",		0 }, /* Colemak */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Uzbekistan */
Packit 1fb8d4
static const XKB_VARIANT uz_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "latin",		0 }, /* Latin */
Packit 1fb8d4
	{ "crh",		KBD_TATAR }, /* Crimean Tatar (Turkish Q) */
Packit 1fb8d4
	{ "crh_f",		KBD_TURKISH_F }, /* Crimean Tatar (Turkish F) */
Packit 1fb8d4
	{ "crh_alt",		KBD_TURKISH_Q }, /* Crimean Tatar (Turkish Alt-Q) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Korea, Republic of */
Packit 1fb8d4
static const XKB_VARIANT kr_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "kr104",		KBD_KOREAN_INPUT_SYSTEM_IME_2000 }, /* 101/104 key Compatible */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Ireland */
Packit 1fb8d4
static const XKB_VARIANT ie_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "CloGaelach",		KBD_GAELIC }, /* CloGaelach */
Packit 1fb8d4
	{ "UnicodeExpert",	KBD_GAELIC }, /* UnicodeExpert */
Packit 1fb8d4
	{ "ogam",		KBD_GAELIC }, /* Ogham */
Packit 1fb8d4
	{ "ogam_is434",		KBD_GAELIC }, /* Ogham IS434 */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Pakistan */
Packit 1fb8d4
static const XKB_VARIANT pk_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "urd-crulp",		0 }, /* CRULP */
Packit 1fb8d4
	{ "urd-nla",		0 }, /* NLA */
Packit 1fb8d4
	{ "ara",		KBD_ARABIC_101 }, /* Arabic */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Esperanto */
Packit 1fb8d4
static const XKB_VARIANT epo_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "legacy",		0 }, /* displaced semicolon and quote (obsolete) */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Nigeria */
Packit 1fb8d4
static const XKB_VARIANT ng_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "igbo",		0 }, /* Igbo */
Packit 1fb8d4
	{ "yoruba",		0 }, /* Yoruba */
Packit 1fb8d4
	{ "hausa",		0 }, /* Hausa */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Braille */
Packit 1fb8d4
static const XKB_VARIANT brai_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "left_hand",		0 }, /* Left hand */
Packit 1fb8d4
	{ "right_hand",		0 }, /* Right hand */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/* Turkmenistan */
Packit 1fb8d4
static const XKB_VARIANT tm_variants[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "alt",		KBD_TURKISH_Q }, /* Alt-Q */
Packit 1fb8d4
	{ "",			0 },
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
static const XKB_LAYOUT xkbLayouts[] =
Packit 1fb8d4
{
Packit 1fb8d4
	{ "us",		 KBD_US, us_variants }, /* USA */
Packit 1fb8d4
	{ "ad",		 0, NULL }, /* Andorra */
Packit 1fb8d4
	{ "af",		 KBD_FARSI, af_variants }, /* Afghanistan */
Packit 1fb8d4
	{ "ara",	 KBD_ARABIC_101, ara_variants }, /* Arabic */
Packit 1fb8d4
	{ "al",		 0, NULL }, /* Albania */
Packit 1fb8d4
	{ "am",		 KBD_ARMENIAN_EASTERN, am_variants }, /* Armenia */
Packit 1fb8d4
	{ "az",		 KBD_AZERI_CYRILLIC, az_variants }, /* Azerbaijan */
Packit 1fb8d4
	{ "by",		 KBD_BELARUSIAN, by_variants }, /* Belarus */
Packit 1fb8d4
	{ "be",		 KBD_BELGIAN_FRENCH, be_variants }, /* Belgium */
Packit 1fb8d4
	{ "bd",		 KBD_BENGALI, bd_variants }, /* Bangladesh */
Packit 1fb8d4
	{ "in",		 KBD_HINDI_TRADITIONAL, in_variants }, /* India */
Packit 1fb8d4
	{ "ba",		 KBD_CROATIAN, ba_variants }, /* Bosnia and Herzegovina */
Packit 1fb8d4
	{ "br",		 KBD_PORTUGUESE_BRAZILIAN_ABNT, br_variants }, /* Brazil */
Packit 1fb8d4
	{ "bg",		 KBD_BULGARIAN_LATIN, bg_variants }, /* Bulgaria */
Packit 1fb8d4
	{ "ma",		 KBD_FRENCH, ma_variants }, /* Morocco */
Packit 1fb8d4
	{ "mm",		 0, NULL }, /* Myanmar */
Packit 1fb8d4
	{ "ca",		 KBD_US, ca_variants }, /* Canada */
Packit 1fb8d4
	{ "cd",		 0, NULL }, /* Congo, Democratic Republic of the */
Packit 1fb8d4
	{ "cn",		 KBD_CHINESE_TRADITIONAL_PHONETIC, cn_variants }, /* China */
Packit 1fb8d4
	{ "hr",		 KBD_CROATIAN, hr_variants }, /* Croatia */
Packit 1fb8d4
	{ "cz",		 KBD_CZECH, cz_variants }, /* Czechia */
Packit 1fb8d4
	{ "dk",		 KBD_DANISH, dk_variants }, /* Denmark */
Packit 1fb8d4
	{ "nl",		 KBD_DUTCH, nl_variants }, /* Netherlands */
Packit 1fb8d4
	{ "bt",		 0, NULL }, /* Bhutan */
Packit 1fb8d4
	{ "ee",		 KBD_ESTONIAN, ee_variants }, /* Estonia */
Packit 1fb8d4
	{ "ir",		 0, ir_variants }, /* Iran */
Packit 1fb8d4
	{ "iq",		 0, iq_variants }, /* Iraq */
Packit 1fb8d4
	{ "fo",		 0, fo_variants }, /* Faroe Islands */
Packit 1fb8d4
	{ "fi",		 KBD_FINNISH, fi_variants }, /* Finland */
Packit 1fb8d4
	{ "fr",		 KBD_FRENCH, fr_variants }, /* France */
Packit 1fb8d4
	{ "gh",		 0, gh_variants }, /* Ghana */
Packit 1fb8d4
	{ "gn",		 0, NULL }, /* Guinea */
Packit 1fb8d4
	{ "ge",		 KBD_GEORGIAN, ge_variants }, /* Georgia */
Packit 1fb8d4
	{ "de",		 KBD_GERMAN, de_variants }, /* Germany */
Packit 1fb8d4
	{ "gr",		 KBD_GREEK, gr_variants }, /* Greece */
Packit 1fb8d4
	{ "hu",		 KBD_HUNGARIAN, hu_variants }, /* Hungary */
Packit 1fb8d4
	{ "is",		 KBD_ICELANDIC, is_variants }, /* Iceland */
Packit 1fb8d4
	{ "il",		 KBD_HEBREW, il_variants }, /* Israel */
Packit 1fb8d4
	{ "it",		 KBD_ITALIAN, it_variants }, /* Italy */
Packit 1fb8d4
	{ "jp",		 KBD_JAPANESE_INPUT_SYSTEM_MS_IME2002, jp_variants }, /* Japan */
Packit 1fb8d4
	{ "kg",		 0, kg_variants }, /* Kyrgyzstan */
Packit 1fb8d4
	{ "kh",		 0, NULL }, /* Cambodia */
Packit 1fb8d4
	{ "kz",		 KBD_KAZAKH, kz_variants }, /* Kazakhstan */
Packit 1fb8d4
	{ "la",		 0, NULL }, /* Laos */
Packit 1fb8d4
	{ "latam",	 KBD_LATIN_AMERICAN, latam_variants }, /* Latin America */
Packit 1fb8d4
	{ "lt",		 KBD_LITHUANIAN, lt_variants }, /* Lithuania */
Packit 1fb8d4
	{ "lv",		 KBD_LATVIAN, lv_variants }, /* Latvia */
Packit 1fb8d4
	{ "mao",	 KBD_MAORI, NULL }, /* Maori */
Packit 1fb8d4
	{ "me",		 KBD_SERBIAN_LATIN, me_variants }, /* Montenegro */
Packit 1fb8d4
	{ "mk",		 KBD_FYRO_MACEDONIAN, mk_variants }, /* Macedonia */
Packit 1fb8d4
	{ "mt",		 KBD_MALTESE_48_KEY, mt_variants }, /* Malta */
Packit 1fb8d4
	{ "mn",		 KBD_MONGOLIAN_CYRILLIC, NULL }, /* Mongolia */
Packit 1fb8d4
	{ "no",		 KBD_NORWEGIAN, no_variants }, /* Norway */
Packit 1fb8d4
	{ "pl",		 KBD_POLISH_214, pl_variants }, /* Poland */
Packit 1fb8d4
	{ "pt",		 KBD_PORTUGUESE, pt_variants }, /* Portugal */
Packit 1fb8d4
	{ "ro",		 KBD_ROMANIAN, ro_variants }, /* Romania */
Packit 1fb8d4
	{ "ru",		 KBD_RUSSIAN, ru_variants }, /* Russia */
Packit 1fb8d4
	{ "rs",		 KBD_SERBIAN_LATIN, rs_variants }, /* Serbia */
Packit 1fb8d4
	{ "si",		 KBD_SLOVENIAN, si_variants }, /* Slovenia */
Packit 1fb8d4
	{ "sk",		 KBD_SLOVAK, sk_variants }, /* Slovakia */
Packit 1fb8d4
	{ "es",		 KBD_SPANISH, es_variants }, /* Spain */
Packit 1fb8d4
	{ "se",		 KBD_SWEDISH, se_variants }, /* Sweden */
Packit 1fb8d4
	{ "ch",		 KBD_SWISS_FRENCH, ch_variants }, /* Switzerland */
Packit 1fb8d4
	{ "sy",		 KBD_SYRIAC, sy_variants }, /* Syria */
Packit 1fb8d4
	{ "tj",		 0, tj_variants }, /* Tajikistan */
Packit 1fb8d4
	{ "lk",		 0, lk_variants }, /* Sri Lanka */
Packit 1fb8d4
	{ "th",		 KBD_THAI_KEDMANEE, th_variants }, /* Thailand */
Packit 1fb8d4
	{ "tr",		 KBD_TURKISH_Q, tr_variants }, /* Turkey */
Packit 1fb8d4
	{ "ua",		 KBD_UKRAINIAN, ua_variants }, /* Ukraine */
Packit 1fb8d4
	{ "gb",		 KBD_UNITED_KINGDOM, gb_variants }, /* United Kingdom */
Packit 1fb8d4
	{ "uz",		 KBD_UZBEK_CYRILLIC, uz_variants }, /* Uzbekistan */
Packit 1fb8d4
	{ "vn",		 KBD_VIETNAMESE, NULL }, /* Vietnam */
Packit 1fb8d4
	{ "kr",		 KBD_KOREAN_INPUT_SYSTEM_IME_2000, kr_variants }, /* Korea, Republic of */
Packit 1fb8d4
	{ "ie",		 KBD_UNITED_KINGDOM, ie_variants }, /* Ireland */
Packit 1fb8d4
	{ "pk",		 0, pk_variants }, /* Pakistan */
Packit 1fb8d4
	{ "mv",		 0, NULL }, /* Maldives */
Packit 1fb8d4
	{ "za",		 KBD_US, NULL }, /* South Africa */
Packit 1fb8d4
	{ "epo",	 0, epo_variants }, /* Esperanto */
Packit 1fb8d4
	{ "np",		 KBD_NEPALI, NULL }, /* Nepal */
Packit 1fb8d4
	{ "ng",		 0, ng_variants }, /* Nigeria */
Packit 1fb8d4
	{ "et",		 0, NULL }, /* Ethiopia */
Packit 1fb8d4
	{ "sn",		 0, NULL }, /* Senegal */
Packit 1fb8d4
	{ "brai",	 0, brai_variants }, /* Braille */
Packit 1fb8d4
	{ "tm",		 KBD_TURKISH_Q, tm_variants }, /* Turkmenistan */
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
UINT32 find_keyboard_layout_in_xorg_rules(char* layout, char* variant)
Packit 1fb8d4
{
Packit 1fb8d4
	int i, j;
Packit 1fb8d4
Packit 1fb8d4
	if ((layout == NULL) || (variant == NULL))
Packit 1fb8d4
		return 0;
Packit 1fb8d4
Packit 1fb8d4
	DEBUG_KBD("xkbLayout: %s\txkbVariant: %s", layout, variant);
Packit 1fb8d4
Packit 1fb8d4
	for (i = 0; i < ARRAYSIZE(xkbLayouts); i++)
Packit 1fb8d4
	{
Packit 1fb8d4
		if (strcmp(xkbLayouts[i].layout, layout) == 0)
Packit 1fb8d4
		{
Packit 1fb8d4
			const XKB_VARIANT *variants = xkbLayouts[i].variants;
Packit 1fb8d4
			if (variants)
Packit 1fb8d4
			{
Packit 1fb8d4
				for (j = 0; variants[j].variant != NULL && strlen(variants[j].variant) > 0; j++)
Packit 1fb8d4
				{
Packit 1fb8d4
					if (strcmp(variants[j].variant, variant) == 0)
Packit 1fb8d4
						return variants[j].keyboardLayoutID;
Packit 1fb8d4
				}
Packit 1fb8d4
			}
Packit 1fb8d4
Packit 1fb8d4
			return xkbLayouts[i].keyboardLayoutID;
Packit 1fb8d4
		}
Packit 1fb8d4
	}
Packit 1fb8d4
Packit 1fb8d4
	return 0;
Packit 1fb8d4
}