// New style XKB layout for some widely used Hungarian keyboard layouts
//
// Based on old style 'xkb/symbols/hu"
//
// (C) 2002-2004 Soós Péter <sp@osb.hu>
// (C) 2010 Andras Timar <timar@fsf.hu>
//
// Permission is granted to anyone to use, distribute and modify
// this file in any way, provided that the above copyright notice
// is left intact and the author of the modification summarizes
// the changes in this header.
//
// This file is distributed without any expressed or implied warranty.
//
// Changes:
//  2004-04-17 - Moved to new style (only Unicode based layouts)
//             - Added consistent dead key support
//             - Fixed abovedot
//             - Added adiaeresis
//             - Added EuroSign and cent symbol
//  2010-04-23 - Added doublelowquotemark
//             - Added rightdoublequotemark
//             - Added endash
//  2010-05-13 - Added ellipsis


// Default layout
default partial
xkb_symbols "basic" {
    include "hu(102_qwertz_comma_dead)"
    name[Group1] = "Hungarian";
};

// Standard layout
partial
xkb_symbols "standard" {
    include "hu(102_qwertz_comma_dead)"
    name[Group1] = "Hungarian (standard)";
};

// Standard layout without dead key support
partial
xkb_symbols "nodeadkeys" {
    include "hu(102_qwertz_comma_nodead)"
    name[Group1] = "Hungarian (eliminate dead keys)";
};

// Qwerty layout
partial
xkb_symbols "qwerty" {
    include "hu(101_qwerty_comma_dead)"
    name[Group1] = "Hungarian (qwerty)";
};

// Main layouts

// 101_qwertz_comma_dead
// 101 key qwertz layout
// with decimal comma on keypad
// and with dead key support
partial
xkb_symbols "101_qwertz_comma_dead" {
    name[Group1] = "Hungarian (101/qwertz/comma/dead keys)";
    include "latin"
    include "hu(def_101)"
    include "hu(def_qwertz)"
    include "kpdl(comma)"
    include "hu(def_dead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 101_qwertz_comma_nodead
// 101 key qwertz layout
// with decimal comma on keypad
// and without dead key support
partial
xkb_symbols "101_qwertz_comma_nodead" {
    name[Group1] = "Hungarian (101/qwertz/comma/eliminate dead keys)";
    include "latin"
    include "hu(def_101)"
    include "hu(def_qwertz)"
    include "kpdl(comma)"
    include "hu(def_nodead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 101_qwertz_dot_dead
// 101 key qwertz layout
// with decimal dot on keypad
// and with dead key support
partial
xkb_symbols "101_qwertz_dot_dead" {
    name[Group1] = "Hungarian (101/qwertz/dot/dead keys)";
    include "latin"
    include "hu(def_101)"
    include "hu(def_qwertz)"
    include "hu(def_dot)"
    include "hu(def_dead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 101_qwertz_dot_nodead
// 101 key qwertz layout
// with decimal dot on keypad
// and without dead key support
partial
xkb_symbols "101_qwertz_dot_nodead" {
    name[Group1] = "Hungarian (101/qwertz/dot/eliminate dead keys)";
    include "latin"
    include "hu(def_101)"
    include "hu(def_qwertz)"
    include "hu(def_dot)"
    include "hu(def_nodead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 101_qwerty_comma_dead
// 101 key qwerty layout
// with decimal comma on keypad
// and with dead key support
partial
xkb_symbols "101_qwerty_comma_dead" {
    name[Group1] = "Hungarian (101/qwerty/comma/dead keys)";
    include "latin"
    include "hu(def_101)"
    include "hu(def_qwerty)"
    include "kpdl(comma)"
    include "hu(def_dead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 101_qwerty_comma_nodead
// 101 key qwerty layout
// with decimal comma on keypad
// and without dead key support
partial
xkb_symbols "101_qwerty_comma_nodead" {
    name[Group1] = "Hungarian (101/qwerty/comma/eliminate dead keys)";
    include "latin"
    include "hu(def_101)"
    include "hu(def_qwerty)"
    include "kpdl(comma)"
    include "hu(def_nodead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 101_qwerty_dot_dead
// 101 key qwerty layout
// with decimal dot on keypad
// and with dead key support
partial
xkb_symbols "101_qwerty_dot_dead" {
    name[Group1] = "Hungarian (101/qwerty/dot/dead keys)";
    include "latin"
    include "hu(def_101)"
    include "hu(def_qwerty)"
    include "hu(def_dot)"
    include "hu(def_dead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 101_qwerty_dot_nodead
// 101 key qwerty layout
// with decimal dot on keypad
// and without dead key support
partial
xkb_symbols "101_qwerty_dot_nodead" {
    name[Group1] = "Hungarian (101/qwerty/dot/eliminate dead keys)";
    include "latin"
    include "hu(def_101)"
    include "hu(def_qwerty)"
    include "hu(def_dot)"
    include "hu(def_nodead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 102_qwertz_comma_dead
// 102 key qwertz layout
// with decimal comma on keypad
// and with dead key support
partial
xkb_symbols "102_qwertz_comma_dead" {
    name[Group1] = "Hungarian (102/qwertz/comma/dead keys)";
    include "latin"
    include "hu(def_102)"
    include "hu(def_qwertz)"
    include "kpdl(comma)"
    include "hu(def_dead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 102_qwertz_comma_nodead
// 102 key qwertz layout
// with decimal comma on keypad
// and without dead key support
partial
xkb_symbols "102_qwertz_comma_nodead" {
    name[Group1] = "Hungarian (102/qwertz/comma/eliminate dead keys)";
    include "latin"
    include "hu(def_102)"
    include "hu(def_qwertz)"
    include "kpdl(comma)"
    include "hu(def_nodead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 102_qwertz_dot_dead
// 102 key qwertz layout
// with decimal dot on keypad
// and with dead key support
partial
xkb_symbols "102_qwertz_dot_dead" {
    name[Group1] = "Hungarian (102/qwertz/dot/dead keys)";
    include "latin"
    include "hu(def_102)"
    include "hu(def_qwertz)"
    include "hu(def_dot)"
    include "hu(def_dead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 102_qwertz_dot_nodead
// 102 key qwertz layout
// with decimal dot on keypad
// and without dead key support
partial
xkb_symbols "102_qwertz_dot_nodead" {
    name[Group1] = "Hungarian (102/qwertz/dot/eliminate dead keys)";
    include "latin"
    include "hu(def_102)"
    include "hu(def_qwertz)"
    include "hu(def_dot)"
    include "hu(def_nodead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 102_qwerty_comma_dead
// 102 key qwerty layout
// with decimal comma on keypad
// and with dead key support
partial
xkb_symbols "102_qwerty_comma_dead" {
    name[Group1] = "Hungarian (102/qwerty/comma/dead keys)";
    include "latin"
    include "hu(def_102)"
    include "hu(def_qwerty)"
    include "kpdl(comma)"
    include "hu(def_dead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 102_qwerty_comma_nodead
// 102 key qwerty layout
// with decimal comma on keypad
// and without dead key support
partial
xkb_symbols "102_qwerty_comma_nodead" {
    name[Group1] = "Hungarian (102/qwerty/comma/eliminate dead keys)";
    include "latin"
    include "hu(def_102)"
    include "hu(def_qwerty)"
    include "kpdl(comma)"
    include "hu(def_nodead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 102_qwerty_dot_dead
// 102 key qwerty layout
// with decimal dot on keypad
// and with dead key support
partial
xkb_symbols "102_qwerty_dot_dead" {
    name[Group1] = "Hungarian (102/qwerty/dot/dead keys)";
    include "latin"
    include "hu(def_102)"
    include "hu(def_qwerty)"
    include "hu(def_dot)"
    include "hu(def_dead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// 102_qwerty_dot_nodead
// 102 key qwerty layout
// with decimal dot on keypad
// and without dead key support
partial
xkb_symbols "102_qwerty_dot_nodead" {
    name[Group1] = "Hungarian (102/qwerty/dot/eliminate dead keys)";
    include "latin"
    include "hu(def_102)"
    include "hu(def_qwerty)"
    include "hu(def_dot)"
    include "hu(def_nodead)"
    include "hu(def_common)"
    include "level3(ralt_switch)"
};

// Partial layouts

// def_102:
// The standard Hungarian 102 key layout
hidden partial alphanumeric_keys
xkb_symbols "def_102" {
    key <TLDE>  { [            0,      section,           notsign                  ] };
    key <LSGT>  { [       iacute,       Iacute,              less,         greater ] };

};

// def_101:
// An alternative layout for 101 key keyboards
hidden partial alphanumeric_keys
xkb_symbols "def_101" {
    key <TLDE>  { [       iacute,       Iacute,                 0,         section ] };
    key <LSGT>  { [         less,      greater                                     ] };
};

// def_qwertz:
// The standard Hungaryan qwertz layout
hidden partial alphanumeric_keys
xkb_symbols "def_qwertz" {
    key <AD06>  { [            z,            Z,           endash                   ] };
    key <AB01>  { [            y,            Y,           greater                  ] };
};


// def_qwerty:
// The qwerty layout for people who familiar with the standard US layout
hidden partial alphanumeric_keys
xkb_symbols "def_qwerty" {
    key <AD06>  { [            y,            Y,           endash                   ] };
    key <AB01>  { [            z,            Z,           greater                  ] };
};

// def_dot: 	 
// The Hungarian standard is the comma on the keypad not decimal dot, 	 
// but programmers hate it 	 
hidden partial keypad_keys 	 
xkb_symbols "def_dot" { 	 
    key <KPDL>  { [    KP_Delete,   KP_Decimal                                     ] }; 	 
}; 	 
 

// def_dead:
// Dead keys support part
hidden partial alphanumeric_keys
xkb_symbols "def_dead" {
    key <AE01>  { [            1,   apostrophe,        asciitilde,      dead_tilde ] };
    key <AE02>  { [            2,     quotedbl,        dead_caron,           caron ] };
    key <AE03>  { [            3,         plus,       asciicircum, dead_circumflex ] };
    key <AE04>  { [            4,       exclam,        dead_breve,           breve ] };
    key <AE05>  { [            5,      percent,    dead_abovering,          degree ] };
    key <AE06>  { [            6,        slash,       dead_ogonek,          ogonek ] };
    key <AE07>  { [            7,        equal,             grave,      dead_grave ] };
    key <AE08>  { [            8,    parenleft,     dead_abovedot,        abovedot ] };
    key <AE09>  { [            9,   parenright,        dead_acute,           acute ] };
    key <AE10>  { [   odiaeresis,   Odiaeresis,  dead_doubleacute,     doubleacute ] };
    key <AE11>  { [   udiaeresis,   Udiaeresis,    dead_diaeresis,       diaeresis ] };
    key <AE12>  { [       oacute,       Oacute,      dead_cedilla,         cedilla ] };
};

// def_nodead:
// Without dead keys support
hidden partial alphanumeric_keys
xkb_symbols "def_nodead" {
    key <AE01>  { [            1,   apostrophe,        asciitilde                  ] };
    key <AE02>  { [            2,     quotedbl,             caron                  ] };
    key <AE03>  { [            3,         plus,       asciicircum                  ] };
    key <AE04>  { [            4,       exclam,             breve                  ] };
    key <AE05>  { [            5,      percent,            degree                  ] };
    key <AE06>  { [            6,        slash,            ogonek                  ] };
    key <AE07>  { [            7,        equal,             grave                  ] };
    key <AE08>  { [            8,    parenleft,          abovedot                  ] };
    key <AE09>  { [            9,   parenright,             acute                  ] };
    key <AE10>  { [   odiaeresis,   Odiaeresis,       doubleacute                  ] };
    key <AE11>  { [   udiaeresis,   Udiaeresis,         diaeresis                  ] };
    key <AE12>  { [       oacute,       Oacute,           cedilla                  ] };
};


// def_common:
// The common part of all Hungarian layout above
hidden partial alphanumeric_keys
xkb_symbols "def_common" {
    key <AD01>  { [            q,            Q,         backslash                  ] };
    key <AD02>  { [            w,            W,               bar                  ] };
    key <AD07>  { [            u,            U,          EuroSign                  ] };
    key <AD08>  { [            i,            I,            Iacute,          iacute ] };
    key <AD09>	{ [            o,            O,        doublelowquotemark          ] };
    key <AD10>	{ [            p,            P,        rightdoublequotemark        ] };
    key <AD11>  { [ odoubleacute, Odoubleacute,          division                  ] };
    key <AD12>  { [       uacute,       Uacute,          multiply                  ] };

    key <AC01>  { [            a,            A,        adiaeresis,      Adiaeresis ] };
    key <AC02>  { [            s,            S,           dstroke                  ] };
    key <AC03>  { [            d,            D,           Dstroke                  ] };
    key <AC04>  { [            f,            F,       bracketleft                  ] };
    key <AC05>  { [            g,            G,      bracketright                  ] };
    key <AC07>  { [            j,            J,            iacute,          Iacute ] };
    key <AC08>  { [            k,            K,           lstroke                  ] };
    key <AC09>  { [            l,            L,           Lstroke                  ] };
    key <AC10>  { [       eacute,       Eacute,            dollar,            cent ] };
    key <AC11>  { [       aacute,       Aacute,            ssharp                  ] };

    key <BKSL>  { [ udoubleacute, Udoubleacute,          currency                  ] };

    key <AB02>  { [            x,            X,        numbersign                  ] };
    key <AB03>  { [            c,            C,         ampersand                  ] };
    key <AB04>  { [            v,            V,                at                  ] };
    key <AB05>  { [            b,            B,         braceleft                  ] };
    key <AB06>  { [            n,            N,        braceright                  ] };
    key <AB07>  { [            m,            M,              less                  ] };
    key <AB08>  { [        comma,     question,         semicolon                  ] };
    key <AB09>  { [       period,        colon,           greater                  ] };
    key <AB10>  { [        minus,   underscore,          asterisk                  ] };

};