// $XdotOrg$
// Serbian XKB keyboard mapping (derived from "Danube" D.2)
//
// Danube D.2 from 2003-05-12 is available at http://srpski.org/dunav/
//
// Original authors:
//  Danilo Segan (Данило Шеган) <dsegan@gmx.net>
//  Chusslove Illich (Часлав Илић) <chaslav@sezampro.yu>
//
// Modified for inclusion in XFree86 by Danilo Segan <dsegan@gmx.net>
//  

default partial alphanumeric_keys
xkb_symbols "basic" {

  name[Group1]= "Serbian";

  include "pc/srp(level3)"
  include "pc/srp(common)"
  include "pc/srp(cyralpha)"
  include "level3(ralt_switch)"
};

partial alphanumeric_keys
xkb_symbols "yz" {
  // Cyrillic_zhe and Cyrillic_ze swapped.

  name[Group1]= "Serbian - Z and ZHE swapped";

  include "pc/srp(basic)"

  key <AD06> {   [ Cyrillic_zhe,        Cyrillic_ZHE,   any,any ]   }; // y
  key <AB01> {   [ Cyrillic_ze,         Cyrillic_ZE,    any,any ]   }; // z
};

partial alphanumeric_keys
xkb_symbols "common" {
  // "Common" keys: keys which are same for both latin and cyrillic keyboards

  key.type[Group1] = "FOUR_LEVEL";

  key <TLDE> {   [ quoteleft,           asciitilde,    any,any ]   }; //
  key <AE01> {   [ 1,                   exclam,        any,any ]   }; //
  key <AE02> {   [ 2,                   quotedbl,      any,any ]   }; //
  key <AE03> {   [ 3,                   numbersign,    any,any ]   }; //
  key <AE04> {   [ 4,                   dollar,        any,any ]   }; //
  key <AE05> {   [ 5,                   percent,       any,any ]   }; //
  key <AE06> {   [ 6,                   ampersand,     any,any ]   }; //
  key <AE07> {   [ 7,                   slash,         any,any ]   }; //
  key <AE08> {   [ 8,                   parenleft,     any,any ]   }; //
  key <AE09> {   [ 9,                   parenright,    any,any ]   }; //
  key <AE10> {   [ 0,                   equal,         any,any ]   }; //
  key <AE11> {   [ apostrophe,          question,      any,any ]   }; //
  key <AE12> {   [ plus,                asterisk,      any,any ]   }; //

  key <AB08> {   [ comma,               semicolon,     any,any ]   }; //
  key <AB09> {   [ period,              colon,         any,any ]   }; //
  key <AB10> {   [ minus,               underscore,    any,any ]   }; //

  include "keypad(comma)"
};

partial alphanumeric_keys
xkb_symbols "cyralpha" {

  key.type[Group1] = "FOUR_LEVEL_ALPHABETIC";

  key <AD01> {   [ Cyrillic_lje,        Cyrillic_LJE,   any,any ]   }; // q
  key <AD02> {   [ Cyrillic_nje,        Cyrillic_NJE,   any,any ]   }; // w
  key <AD03> {   [ Cyrillic_ie,         Cyrillic_IE,    any,any ]   }; // e
  key <AD04> {   [ Cyrillic_er,         Cyrillic_ER,    any,any ]   }; // r
  key <AD05> {   [ Cyrillic_te,         Cyrillic_TE,    any,any ]   }; // t
  key <AD06> {   [ Cyrillic_ze,         Cyrillic_ZE,    any,any ]   }; // y
  key <AD07> {   [ Cyrillic_u,          Cyrillic_U,     any,any ]   }; // u
  key <AD08> {   [ Cyrillic_i,          Cyrillic_I,     any,any ]   }; // i
  key <AD09> {   [ Cyrillic_o,          Cyrillic_O,     any,any ]   }; // o
  key <AD10> {   [ Cyrillic_pe,         Cyrillic_PE,    any,any ]   }; // p
  key <AD11> {   [ Cyrillic_sha,        Cyrillic_SHA,   any,any ]   }; // [ {
  key <AD12> {   [ Serbian_dje,         Serbian_DJE,    any,any ]   }; // ] }

  key <AC01> {   [ Cyrillic_a,          Cyrillic_A,     any,any ]   }; // a
  key <AC02> {   [ Cyrillic_es,         Cyrillic_ES,    any,any ]   }; // s
  key <AC03> {   [ Cyrillic_de,         Cyrillic_DE,    any,any ]   }; // d
  key <AC04> {   [ Cyrillic_ef,         Cyrillic_EF,    any,any ]   }; // f
  key <AC05> {   [ Cyrillic_ghe,        Cyrillic_GHE,   any,any ]   }; // g
  key <AC06> {   [ Cyrillic_ha,         Cyrillic_HA,    any,any ]   }; // h
  key <AC07> {   [ Cyrillic_je,         Cyrillic_JE,    any,any ]   }; // j
  key <AC08> {   [ Cyrillic_ka,         Cyrillic_KA,    any,any ]   }; // k
  key <AC09> {   [ Cyrillic_el,         Cyrillic_EL,    any,any ]   }; // l
  key <AC10> {   [ Cyrillic_che,        Cyrillic_CHE,   any,any ]   }; // ; :
  key <AC11> {   [ Serbian_tshe,        Serbian_TSHE,   any,any ]   }; // ' "
  key <BKSL> {   [ Cyrillic_zhe,        Cyrillic_ZHE,   any,any ]   }; // \ |

  key <AB01> {   [ Cyrillic_zhe,        Cyrillic_ZHE,   any,any ]   }; // z
  key <AB02> {   [ Cyrillic_dzhe,       Cyrillic_DZHE,  any,any ]   }; // x
  key <AB03> {   [ Cyrillic_tse,        Cyrillic_TSE,   any,any ]   }; // c
  key <AB04> {   [ Cyrillic_ve,         Cyrillic_VE,    any,any ]   }; // v
  key <AB05> {   [ Cyrillic_be,         Cyrillic_BE,    any,any ]   }; // b
  key <AB06> {   [ Cyrillic_en,         Cyrillic_EN,    any,any ]   }; // n
  key <AB07> {   [ Cyrillic_em,         Cyrillic_EM,    any,any ]   }; // m
};


partial alphanumeric_keys
xkb_symbols "latalpha" {

  key.type[Group1] = "FOUR_LEVEL_ALPHABETIC";

  key <AD01> {   [ q,                   Q,             any,any ]   }; //
  key <AD02> {   [ w,                   W,             any,any ]   }; //
  key <AD03> {   [ e,                   E,             any,any ]   }; //
  key <AD04> {   [ r,                   R,             any,any ]   }; //
  key <AD05> {   [ t,                   T,             any,any ]   }; //
  key <AD06> {   [ z,                   Z,             any,any ]   }; //
  key <AD07> {   [ u,                   U,             any,any ]   }; //
  key <AD08> {   [ i,                   I,             any,any ]   }; //
  key <AD09> {   [ o,                   O,             any,any ]   }; //
  key <AD10> {   [ p,                   P,             any,any ]   }; //
  key <AD11> {   [ scaron,              Scaron,        any,any ]   }; //
  key <AD12> {   [ dstroke,             Dstroke,       any,any ]   }; //

  key <AC01> {   [ a,                   A,             any,any ]   }; //
  key <AC02> {   [ s,                   S,             any,any ]   }; //
  key <AC03> {   [ d,                   D,             any,any ]   }; //
  key <AC04> {   [ f,                   F,             any,any ]   }; //
  key <AC05> {   [ g,                   G,             any,any ]   }; //
  key <AC06> {   [ h,                   H,             any,any ]   }; //
  key <AC07> {   [ j,                   J,             any,any ]   }; //
  key <AC08> {   [ k,                   K,             any,any ]   }; //
  key <AC09> {   [ l,                   L,             any,any ]   }; //
  key <AC10> {   [ ccaron,              Ccaron,        any,any ]   }; //
  key <AC11> {   [ cacute,              Cacute,        any,any ]   }; //
  key <BKSL> {   [ zcaron,              Zcaron,        any,any ]   }; //

  key <AB01> {   [ y,                   Y,             any,any ]   }; //
  key <AB02> {   [ x,                   X,             any,any ]   }; //
  key <AB03> {   [ c,                   C,             any,any ]   }; //
  key <AB04> {   [ v,                   V,             any,any ]   }; //
  key <AB05> {   [ b,                   B,             any,any ]   }; //
  key <AB06> {   [ n,                   N,             any,any ]   }; //
  key <AB07> {   [ m,                   M,             any,any ]   }; //
};

partial alphanumeric_keys
xkb_symbols "twoletter" {
  // These are letters which are written in latin transcription with two-characters.

  key <AD01> {   type[Group1] = "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC",
                 [ U1C9,                U1C8,         any,   U1C7 ]   }; // q
  key <AD02> {   type[Group1] = "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC",
                 [ U1CC,                U1CB,         any,   U1CA ]   }; // w
  key <AB02> {   type[Group1] = "SEPARATE_CAPS_AND_SHIFT_ALPHABETIC",
                 [ U1C6,                U1C5,         any,   U1C4 ]   }; // x

  // Also replace letter Y with Zcaron, since Y is of no use any longer
  key <AB01> {   [ zcaron,              Zcaron,        any,any ]   }; //
};

partial alphanumeric_keys
xkb_symbols "level3" {
  key <TLDE> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // ` ~
  key <AE01> {   [ any,any,     dead_tilde,          NoSymbol ]   }; // 1 !
  key <AE02> {   [ any,any,     dead_caron,          NoSymbol ]   }; // 2 @
  key <AE03> {   [ any,any,     dead_circumflex,     NoSymbol ]   }; // 3 #
  key <AE04> {   [ any,any,     dead_breve,          NoSymbol ]   }; // 4 $
  key <AE05> {   [ any,any,     dead_abovering,      NoSymbol ]   }; // 5 %
  key <AE06> {   [ any,any,     dead_ogonek,         NoSymbol ]   }; // 6 ^
  key <AE07> {   [ any,any,     dead_grave,          NoSymbol ]   }; // 7 &
  key <AE08> {   [ any,any,     dead_abovedot,       NoSymbol ]   }; // 8 *
  key <AE09> {   [ any,any,     dead_acute,          NoSymbol ]   }; // 9 (
  key <AE10> {   [ any,any,     dead_doubleacute,    NoSymbol ]   }; // 0 )
  key <AE11> {   [ any,any,     dead_diaeresis,      NoSymbol ]   }; // - _
  key <AE12> {   [ any,any,     dead_cedilla,        NoSymbol ]   }; // = +

  key <AD01> {   [ any,any,     backslash,           NoSymbol ]   }; // q
  key <AD02> {   [ any,any,     bar,                 NoSymbol ]   }; // w
  key <AD03> {   [ any,any,     EuroSign,            NoSymbol ]   }; // e
  key <AD04> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // r
  key <AD05> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // t
  key <AD06> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // y
  key <AD07> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // u
  key <AD08> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // i
  key <AD09> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // o
  key <AD10> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // p
  key <AD11> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // [
  key <AD12> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // ]

  key <AC01> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // a
  key <AC02> {   [ any,any,     doublelowquotemark,  NoSymbol ]   }; // s
  key <AC03> {   [ any,any,     leftdoublequotemark, NoSymbol ]   }; // d
  key <AC04> {   [ any,any,     bracketleft,         NoSymbol ]   }; // f
  key <AC05> {   [ any,any,     bracketright,        NoSymbol ]   }; // g
  key <AC06> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // h
  key <AC07> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // j
  key <AC08> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // k
  key <AC09> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // l
  key <AC10> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // ;
  key <AC11> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // '
  key <BKSL> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // \

  key <AB01> {   [ any,any,     leftsinglequotemark, NoSymbol ]   }; // z
  key <AB02> {   [ any,any,     rightsinglequotemark,NoSymbol ]   }; // x
  key <AB03> {   [ any,any,     NoSymbol,            NoSymbol ]   }; // c
  key <AB04> {   [ any,any,     at,                  NoSymbol ]   }; // v
  key <AB05> {   [ any,any,     braceleft,           NoSymbol ]   }; // b
  key <AB06> {   [ any,any,     braceright,          NoSymbol ]   }; // n
  key <AB07> {   [ any,any,     asciicircum,         NoSymbol ]   }; // m
  key <AB08> {   [ any,any,     less,                NoSymbol ]   }; // , <
  key <AB09> {   [ any,any,     greater,             NoSymbol ]   }; // . >
  key <AB10> {   [ any,any,     emdash,              endash   ]   }; // / ?

};

partial alphanumeric_keys
xkb_symbols "latin" {

  name[Group1]= "Serbian - Latin";

  include "pc/srp(level3)"
  include "pc/srp(common)"
  include "pc/srp(latalpha)"
  include "level3(ralt_switch)"
};

partial alphanumeric_keys
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.

  name[Group1]= "Serbian - Latin Unicode";

  include "pc/srp(latin)"
  include "pc/srp(twoletter)"
};

partial alphanumeric_keys
xkb_symbols "latinyz" {
  // For those who insist on using "english-position" Z and Y.

  name[Group1]= "Serbian - Latin qwerty";

  include "pc/srp(latin)"

  key <AD06> {   [ y,                   Y,             any,any ]   }; // y
  key <AB01> {   [ z,                   Z,             any,any ]   }; // z
};

partial alphanumeric_keys
xkb_symbols "latinunicodeyz" {
  // Unicode, ZHE and Z swapped.

  name[Group1]= "Serbian - Latin Unicode qwerty";

  include "pc/srp(latinunicode)"

  key <AD06> {   [ zcaron,              Zcaron,        any,any ]   }; // y
  key <AB01> {   [ z,                   Z,             any,any ]   }; // z
};

xkb_symbols "alternatequotes" {
  // Another acceptable »pair of quotes« for Serbian 

  name[Group1]= "Serbian - With guillemots";

  include "pc/srp(basic)"

  key <AC02> {   [ any,any,     guillemotright, NoSymbol ]   }; // s
  key <AC03> {   [ any,any,     guillemotleft,  NoSymbol ]   }; // d
};

xkb_symbols "latinalternatequotes" {
  // Another acceptable »pair of quotes« for Serbian 

  name[Group1]= "Serbian - Latin with guillemots";

  include "pc/srp(latin)"

  key <AC02> {   [ any,any,     guillemotright, NoSymbol ]   }; // s
  key <AC03> {   [ any,any,     guillemotleft,  NoSymbol ]   }; // d
};
