// based on a keyboard map from an 'xkb/symbols/de' file
//
// $XKeyboardConfig: xkbdesc/symbols/de,v 1.15 2006/10/08 22:43:01 svu Exp $
// $XFree86: xc/programs/xkbcomp/symbols/de,v 1.6 2003/09/08 13:12:51 pascal Exp $

default
xkb_symbols "basic" {

    include "latin(type4)"

    name[Group1]="Germany";

    key <AE02>	{ [         2,   quotedbl,  twosuperior,    oneeighth ]	};
    key <AE03>	{ [         3,    section, threesuperior,    sterling ]	};
    key <AE04>	{ [         4,     dollar,   onequarter,     currency ]	};
    key <AE11>	{ [    ssharp,   question,    backslash, questiondown ]	};
    key <AE12>	{ [dead_acute, dead_grave, dead_cedilla,  dead_ogonek ]	};

    key <AD03>	{ [         e,          E,     EuroSign,     EuroSign ]	};
    key <AD06>	{ [         z,          Z,    leftarrow,          yen ]	};
    key <AD11>	{ [udiaeresis, Udiaeresis, dead_diaeresis, dead_abovering ] };
    key <AD12>	{ [      plus,   asterisk,   dead_tilde,  dead_macron ]	};

    key <AC10>	{ [odiaeresis, Odiaeresis, dead_doubleacute, dead_doubleacute ] };
    key <AC11>	{ [adiaeresis, Adiaeresis, dead_circumflex, dead_caron]	};
    key <TLDE>	{ [dead_circumflex, degree,     notsign,      notsign ]	};

    key <BKSL>	{ [numbersign, apostrophe,   dead_grave,   dead_breve ]	};
    key <AB01>	{ [         y,          Y, guillemotleft,        less ]	};

    include "keypad(comma)"

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "nodeadkeys" {

    // modify the basic German layout to not have any dead keys

    include "de(basic)"
    name[Group1]="Germany - Eliminate dead keys";

    key <TLDE>	{ [asciicircum,    degree,      notsign,      notsign ]	};
    key <AE12>	{ [     acute,      grave,      cedilla,      cedilla ]	};
    key <AD11>	{ [udiaeresis, Udiaeresis,    diaeresis,    diaeresis ]	};
    key <AD12>	{ [      plus,   asterisk,   asciitilde,       macron ]	};
    key <AC10>	{ [odiaeresis, Odiaeresis,  doubleacute,  doubleacute ]	};
    key <AC11>	{ [adiaeresis, Adiaeresis,  asciicircum,  asciicircum ]	};
    key <BKSL>	{ [numbersign, apostrophe,        grave,        grave ]	};
    key <AB10>	{ [     minus, underscore, dead_belowdot,    abovedot ]	};
};

partial alphanumeric_keys
xkb_symbols "deadgraveacute" {
    // modify the basic German layout to have only acute and grave
    // as dead keys (tilde and circumflex are needed as spacing characters
    // in many programming languages)

    include "de(basic)"
    name[Group1]="Germany - Dead grave acute";

    key <TLDE>	{ [asciicircum,    degree,      notsign,      notsign ]	};
    key <AD12>	{ [      plus,   asterisk,   asciitilde,  dead_macron ]	};
    key <BKSL>	{ [numbersign, apostrophe,        grave,        grave ]	};
};

partial alphanumeric_keys
xkb_symbols "deadacute" {
    // modify the basic German layout to have only acute as
    // dead keys (ASCII grave, tilde and circumflex are needed as
    // spacing characters in many programming languages and text formatters)

    include "de(deadgraveacute)"

    name[Group1]="Germany - Dead acute";

    key <AE12>	{ [dead_acute,      grave, dead_cedilla,  dead_ogonek ]	};
    key <BKSL>	{ [numbersign, apostrophe,   dead_grave,   dead_grave ]	};
};

partial alphanumeric_keys
xkb_symbols "ro" {
    // add romanian-specific letters to the basic German layout.
    // Romanian symbols are accessible with combination of <AltGr> and
    // 'a', 's', 't', 'i', 'ä (&auml)' (+<Shift> for capital letters).
    // To view romanian-specific symbols, add "export LC_CTYPE=ro_RO"
    // or "export LC_CTYPE=de_DE.utf8" to your .profile.

    include "de(basic)"

    name[Group1]="Germany - Romanian keyboard with German letters";

    key <AD05> { [         t,    T,           tcedilla,     Tcedilla    ] };
    key <AD08> { [         i,    I,        icircumflex,  Icircumflex    ] };
    key <AC01> { [         a,    A,        acircumflex,  Acircumflex    ] };
    key <AC02> { [         s,    S,           scedilla,     Scedilla    ] };
    key <AC11> { [ adiaeresis,   Adiaeresis,    abreve,       Abreve    ] };
};

partial alphanumeric_keys
xkb_symbols "ro_nodeadkeys" {
    // add romanian-specific letters to the German nodeadkeys layout.
    // Read the comment for de_ro !

    include "de(nodeadkeys)"
    name[Group1]="Germany - Romanian keyboard with German letters, eliminate dead keys";

    key <AD05> { [         t,    T,           tcedilla,     Tcedilla    ] };
    key <AD08> { [         i,    I,        icircumflex,  Icircumflex    ] };
    key <AC01> { [         a,    A,        acircumflex,  Acircumflex    ] };
    key <AC02> { [         s,    S,           scedilla,     Scedilla    ] };
    key <AC11> { [ adiaeresis,   Adiaeresis, abreve,       Abreve       ] };
};

// German Dvorak keymap by Thorsten Staerk (www.staerk.de/thorsten)
// Have acute and grave as dead keys, tilde and circumflex alive as they are needed
// in many programming languages.
// to use this keymap, use a 105-key-keyboard and the command setxkbmap -model pc105 -layout dvorak -variant de
// source: http://www-lehre.informatik.uni-osnabrueck.de/~rfreund/dvorak.php
partial alphanumeric_keys
xkb_symbols "dvorak" {
    include "us(dvorak)"

    name[Group1]="Germany - Dvorak";

    key <TLDE> { [ asciicircum, degree ] };

    key <AE01> { [ 1, exclam, onesuperior ] };
    key <AE02> { [ 2, quotedbl, twosuperior ] };
    key <AE03> { [ 3, section, threesuperior ] };
    key <AE04> { [ 4, dollar, bar ] };
    key <AE05> { [ 5, percent, bar ] };
    key <AE06> { [ 6, ampersand, brokenbar ] };
    key <AE07> { [ 7, slash, braceleft ] };
    key <AE08> { [ 8, parenleft, bracketleft ] };
    key <AE09> { [ 9, parenright, bracketright ] };
    key <AE10> { [ 0, equal, braceright ] };
    key <AE11> { [ plus, asterisk, asciitilde ] };
    key <AE12> { [ less, greater, dead_grave ] };

    key <AD01> { [ udiaeresis, Udiaeresis, at ] };
    key <AD02> { [ comma, semicolon, dead_diaeresis ] };
    key <AD03> { [ period, colon ] };
    key <AD08> { [ c, C, copyright, Cacute ] };
    key <AD09> { [ t, T, trademark ] };
    key <AD10> { [ z, Z, zabovedot, Zabovedot ] };
    key <AD11> { [ question, ssharp ] };
    key <AD12> { [ slash, backslash, dead_acute ] };

    key <AC01> { [ a, A, at, aogonek ] };
    key <AC02> { [ o, O, oacute, Oacute ] };
    key <AC03> { [ e, E, EuroSign, eogonek ] };
    key <AC04> { [ i, I ] };
    key <AC05> { [ u, U ] };
    key <AC06> { [ h, H ] };
    key <AC07> { [ d, D ] };
    key <AC08> { [ r, R, registered ] };
    key <AC09> { [ n, N, nacute, Nacute ] };
    key <AC10> { [ s, S, sacute, Sacute] };
    key <AC11> { [ l, L, lstroke, Lstroke ] };

    key <AB01> { [ odiaeresis, Odiaeresis ] };
    key <AB02> { [ q, Q, at ] };
    key <AB07> { [ m, M, mu ] };
    key <AB10> { [ numbersign, apostrophe ] };

    key <BKSL> { [ minus, underscore, hyphen, diaeresis] };

    key <LSGT> { [ adiaeresis, Adiaeresis, bar ] };

    include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "Sundeadkeys" {

    // For naming consistency

    include "de(basic)"

};

partial alphanumeric_keys
xkb_symbols "sundeadkeys" {

    // For naming consistency

    include "de(Sundeadkeys)"

    name[Group1]="Germany - Sun dead keys";
};


// German NEO Style
// adopted 2004 by Hanno Behrens <Hanno.Behrens@gmx.de>
// inspired by Dvorak/de-ergo  http://www.goebel-consult.de/de-ergo/
// Authors:
//   lucky (at) zankt (dot) net
//   Benjamin (dot) Kellermann (at) gmx (dot) de
// Other Questions:
//   neo_layout (at) yahoogroups (dot) de


partial modifier_keys alphanumeric_keys
xkb_symbols "neo" {

    name[Group1]= "German Neostyle (v2.0)";

    key.type[group1]="EIGHT_LEVEL_SEMIALPHABETIC";

    // Zahlenreihe
// eigentlich sollte die folgende Zeile rein, aber auf älteren Systemen ist der dead_stroke noch nicht definiert!
//    key <TLDE> { [ dead_circumflex, dead_caron, dead_breve, dead_stroke ] };
    key <TLDE> { [ dead_circumflex, dead_caron, dead_breve ] };

    key <AE01> { [ 1,    degree,         1,    onequarter,    oneeighth           ] };
    key <AE02> { [ 2,    paragraph,      2,       onehalf                         ] };
    key <AE03> { [ 3,    section,        3, threequarters, threeeighths           ] };
    key <AE04> { [ 4,    guillemotright, U203A,           4,        Prior, Prior    ] };
    key <AE05> { [ 5,    guillemotleft,  U2039,           5,  fiveeighths, implies  ] };
    key <AE06> { [ 6,    dollar,         sterling, currency,            6, ifonlyif ] };

    key <AE07> { [ 7,  EuroSign,             cent,      yen, seveneighths, notsign ] };
    key <AE08> { [ 8,   doublelowquotemark,   singlelowquotemark, 8,        slash, U2203 ] };
    key <AE09> { [ 9,  leftdoublequotemark,  leftsinglequotemark, 9,     asterisk, U2200 ] };
    key <AE10> { [ 0, rightdoublequotemark, rightsinglequotemark, 0,        minus, logicalor ] };
    key <AE11> { [ minus,           endash,               emdash, minus,    minus, logicaland ] };
    key <AE12> { [ dead_acute,  dead_grave,          dead_cedilla,   dead_ogonek, dead_abovedot, dead_abovering ] };


    // obere Reihe
    key <AD01> { [ x, X,           at,     Greek_xi,         x, Greek_XI ] };
    key <AD02> { [ v, V,   underscore,            v, BackSpace, U039B    ] };
    key <AD03> { [ l, L,  bracketleft, Greek_lambda,        Up, Up       ] };
    key <AD04> { [ c, C, bracketright,    Greek_chi,       Tab, Tab      ] };
    key <AD05> { [ w, W,  asciicircum,            w,    Insert           ] };

    key <AD06> { [ k, K,    exclam, Greek_kappa, exclamdown,   copyright ] };
    key <AD07> { [ h, H,      less,   Greek_psi,          7,   Greek_PSI ] };
    key <AD08> { [ g, G,   greater, Greek_gamma,          8, Greek_GAMMA ] };
    key <AD09> { [ f, F,     equal,   Greek_phi,          9,   Greek_PHI ] };
    key <AD10> { [ q, Q, ampersand,           q,       plus,       partialderivative ] };
    key <AD11> { [ ssharp, U1E9E, U133,   U132,      schwa,       SCHWA ] };
    key <AD12> { [ dead_tilde, dead_macron, dead_diaeresis, dead_doubleacute, dead_belowdot, dead_belowdot ] };


    // mittlere Reihe
    key <AC01> { [ u, U,  backslash,     backslash,  Home,   Home ] };
    key <AC02> { [ i, I,      slash,    Greek_iota,  Left,   Left ] };
    key <AC03> { [ a, A,  braceleft,   Greek_alpha,  Down,   Down ] };
    key <AC04> { [ e, E, braceright, Greek_epsilon, Right,  Right ] };
    key <AC05> { [ o, O,   asterisk,   Greek_omega,   End,    End ] };

    key <AC06> { [ s, S,   question,   Greek_sigma, questiondown, Greek_SIGMA ] };
    key <AC07> { [ n, N,  parenleft,      Greek_nu,            4,  numerosign ] };
    key <AC08> { [ r, R, parenright,     Greek_rho,            5,  registered ] };
    key <AC09> { [ t, T,      minus,     Greek_tau,            6,   trademark ] };
    key <AC10> { [ d, D,      colon,   Greek_delta,        comma, Greek_DELTA ] };
    key <AC11> { [ y, Y,          y, Greek_upsilon,        thorn,       THORN ] };


    // untere Reihe
    key <AB01> { [ odiaeresis, Odiaeresis, numbersign, odiaeresis, Escape              ] };
    key <AB02> { [ udiaeresis, Udiaeresis,     dollar, udiaeresis, Delete,       Delete ] };
    key <AB03> { [ adiaeresis, Adiaeresis,        bar,  Greek_eta,   Next,        Next ] };
    key <AB04> { [          p,          P, asciitilde,   Greek_pi, Return,    Greek_PI ] };
    key <AB05> { [          z,          Z,      grave, Greek_zeta,      z, Greek_OMEGA ] };

    key <AB06> { [      b,           B,       plus,  Greek_beta, infinity,        enfilledcircbullet ] };
    key <AB07> { [      m,           M,    percent,          mu,         1,    integral ] };
    key <AB08> { [  comma,  apostrophe, apostrophe,        U3D1,         2,     radical ] };
    key <AB09> { [ period,    ellipsis,   quotedbl, Greek_theta,         3, Greek_THETA ] };
    key <AB10> { [      j,           J,  semicolon,           j,    period,       nabla ] };

    key <SPCE> { [ space, space, space, nobreakspace, 0, U202F ] };


    // Keypad

//    key <NMLK> { [    Num_Lock, Pointer_EnableKeys ] };

    key.type[Group1]="FOUR_LEVEL_MIXED_KEYPAD" ;

    key <KPDV> { [   KP_Divide,   KP_Divide, division, U2215 ] };
    key <KPMU> { [ KP_Multiply, KP_Multiply, multiply, U22C5 ] };
    key <KPSU> { [ KP_Subtract, KP_Subtract,    U2212        ] };

    key  <KP7> { [  KP_Home,      KP_7,      KP_7, U226A ] };
    key  <KP8> { [    KP_Up,      KP_8,   uparrow, U2229 ] };
    key  <KP9> { [ KP_Prior,      KP_9,      KP_9, U226B ] };
    key <KPAD> { [   KP_Add,    KP_Add, plusminus, U2213 ] };

    key  <KP4> { [  KP_Left, KP_4,  leftarrow, U2282 ] };
    key  <KP5> { [ KP_Begin, KP_5,     dagger, U220A ] };
    key  <KP6> { [ KP_Right, KP_6, rightarrow, U2283 ] };

    key  <KP1> { [  KP_End,      KP_1,      KP_1, U2264 ] };
    key  <KP2> { [ KP_Down,      KP_2, downarrow, U222A ] };
    key  <KP3> { [ KP_Next,      KP_3,      KP_3, U2265 ] };
    key <KPEN> { [ KP_Enter, KP_Enter,  notequal, U2248 ] };
    key <KPEQ> { [ KP_Equal ] };

    key  <KP0> { [ KP_Insert,       KP_0, percent, U2030 ] };
    key <KPDL> { [ KP_Delete, KP_Decimal,  period, comma ] };


    // die neuen Mods
    key <CAPS> {
			type[Group1]="EIGHT_LEVEL",
		  [ ISO_Level3_Shift, ISO_Level3_Shift, Caps_Lock, Caps_Lock, Caps_Lock, Caps_Lock ]
		};

		key <BKSL> { [ ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Shift, ISO_Level3_Shift ] };


		key <LSGT> { [ 0xfe11,0xfe11,0xfe11,0xfe11 ] };

		key <RALT> { 
			type[Group1]="EIGHT_LEVEL", 
			symbols[Group1] = [ 0xfe11, 0xfe11, 0xfe11, 0xfe11, KP_Decimal, 0xfe11 ] };

		modifier_map Mod3 { 0xfe11 };

};


// Copied from macintosh_vndr/de
// olh@suse.de   very close to MacOS map

partial alphanumeric_keys 
xkb_symbols "mac" {

    include "de"
    name[Group1]= "Germany - Macintosh";

    // Alphanumeric section
    key <AE01>	{ [         1,     exclam,   exclamdown,           at ]	};
    key <AE05>	{ [         5,    percent,  bracketleft       ]	};
    key <AE06>	{ [         6,  ampersand, bracketright       ]	};
    key <AE07>	{ [         7,      slash,          bar,    backslash ]	};
    key <AE08>	{ [         8,  parenleft,    braceleft,   asciitilde ]	};
    key <AE09>	{ [         9, parenright,   braceright       ]	};
    key <AD01>	{ [         q,          Q, guillemotleft, guillemotright ]	};
    key <AD04>	{ [         r,          R,   registered       ]	};
    key <AD07>	{ [         u,          U,    diaeresis,       Aacute ]	};
    key <AD08>	{ [         i,          I,        slash,  Ucircumflex ]	};
    key <AD11>	{ [ udiaeresis, Udiaeresis, periodcentered,    degree ]	};
    key <AD12>	{ [      plus,   asterisk,   asciitilde       ]	}; 
    key <AC01>	{ [         a,          A,        aring,        Aring ]	};
    key <AC05>	{ [         g,          G,    copyright       ]	};
    key <AC06>	{ [         h,          H,  ordfeminine       ]	};
    key <AC09>	{ [         l,          L,           at       ]	};
    key <AC10>	{ [ odiaeresis, Odiaeresis,  dead_acute       ]	};
    key <AB06>	{ [         n,          N,   asciitilde       ]	};

};

partial alphanumeric_keys 
xkb_symbols "mac_nodeadkeys" {
    // modify the standard German mac layout to not have any dead keys
    include "de(mac)"
    name[Group1]= "Germany - Macintosh, eliminate dead keys";
    key <AE04>	{ [         4,     dollar,   onequarter,     currency ]	};

    key <TLDE>	{ [ asciicircum,    degree,     notsign       ]	};
    key <AE12>	{ [      acute,      grave,     cedilla       ]	};
    key <AD11>	{ [ udiaeresis, Udiaeresis,   diaeresis       ]	};
    key <AD12>	{ [       plus,   asterisk,  asciitilde,       macron ]	};
    key <AC10>	{ [ odiaeresis, Odiaeresis,       acute       ]	};
    key <AC11>	{ [ adiaeresis, Adiaeresis, asciicircum       ]	};

    key <BKSL>	{ [ numbersign, apostrophe,       grave       ]	};
};