# Copyright (C) 2012 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#
# Icelandic keyboard layout.
#

type OVERLAY

map key 12 EQUALS
map key 13 MINUS
map key 86 PLUS

### ROW 1

key GRAVE {
    label:                              '\u02da'
    base:                               '\u030a'
    shift:                              '\u0308'
}

key 1 {
    label:                              '1'
    base:                               '1'
    shift:                              '!'
}

key 2 {
    label:                              '2'
    base:                               '2'
    shift:                              '"'
}

key 3 {
    label:                              '3'
    base:                               '3'
    shift:                              '#'
}

key 4 {
    label:                              '4'
    base:                               '4'
    shift:                              '$'
}

key 5 {
    label:                              '5'
    base:                               '5'
    shift:                              '%'
    ralt:                               '\u20ac'
}

key 6 {
    label:                              '6'
    base:                               '6'
    shift:                              '&'
}

key 7 {
    label:                              '7'
    base:                               '7'
    shift:                              '/'
    ralt:                               '{'
}

key 8 {
    label:                              '8'
    base:                               '8'
    shift:                              '('
    ralt:                               '['
}

key 9 {
    label:                              '9'
    base:                               '9'
    shift:                              ')'
    ralt:                               ']'
}

key 0 {
    label:                              '0'
    base:                               '0'
    shift:                              '='
    ralt:                               '}'
}

key EQUALS {
    label:                              '\u00d6'
    base:                               '\u00f6'
    shift, capslock:                    '\u00d6'
    ralt:                               '\\'
}

key MINUS {
    label:                              '-'
    base:                               '-'
    shift:                              '_'
}

### ROW 2

key Q {
    label:                              'Q'
    base:                               'q'
    shift, capslock:                    'Q'
    ralt:                               '@'
}

key W {
    label:                              'W'
    base:                               'w'
    shift, capslock:                    'W'
}

key E {
    label:                              'E'
    base:                               'e'
    shift, capslock:                    'E'
    ralt:                               '\u20ac'
}

key R {
    label:                              'R'
    base:                               'r'
    shift, capslock:                    'R'
}

key T {
    label:                              'T'
    base:                               't'
    shift, capslock:                    'T'
}

key Y {
    label:                              'Y'
    base:                               'y'
    shift, capslock:                    'Y'
}

key U {
    label:                              'U'
    base:                               'u'
    shift, capslock:                    'U'
}

key I {
    label:                              'I'
    base:                               'i'
    shift, capslock:                    'I'
}

key O {
    label:                              'O'
    base:                               'o'
    shift, capslock:                    'O'
}

key P {
    label:                              'P'
    base:                               'p'
    shift, capslock:                    'P'
}

key LEFT_BRACKET {
    label:                              '\u0110'
    base:                               '\u0111'
    shift, capslock:                    '\u0110'
}

key RIGHT_BRACKET {
    label:                              '\''
    base:                               '\''
    shift:                              '?'
    ralt:                               '~'
}

### ROW 3

key A {
    label:                              'A'
    base:                               'a'
    shift, capslock:                    'A'
}

key S {
    label:                              'S'
    base:                               's'
    shift, capslock:                    'S'
}

key D {
    label:                              'D'
    base:                               'd'
    shift, capslock:                    'D'
}

key F {
    label:                              'F'
    base:                               'f'
    shift, capslock:                    'F'
}

key G {
    label:                              'G'
    base:                               'g'
    shift, capslock:                    'G'
}

key H {
    label:                              'H'
    base:                               'h'
    shift, capslock:                    'H'
}

key J {
    label:                              'J'
    base:                               'j'
    shift, capslock:                    'J'
}

key K {
    label:                              'K'
    base:                               'k'
    shift, capslock:                    'K'
}

key L {
    label:                              'L'
    base:                               'l'
    shift, capslock:                    'L'
}

key SEMICOLON {
    label:                              '\u00c6'
    base:                               '\u00e6'
    shift, capslock:                    '\u00c6'
}

key APOSTROPHE {
    label:                              '\u00b4'
    base:                               '\u0301'
    shift:                              '\''
    ralt:                               '^'
}

key BACKSLASH {
    label:                              '+'
    base:                               '+'
    shift:                              '*'
    ralt:                               '`'
}

### ROW 4

key PLUS {
    label:                              '<'
    base:                               '<'
    shift:                              '>'
    ralt:                               '|'
}

key Z {
    label:                              'Z'
    base:                               'z'
    shift, capslock:                    'Z'
}

key X {
    label:                              'X'
    base:                               'x'
    shift, capslock:                    'X'
}

key C {
    label:                              'C'
    base:                               'c'
    shift, capslock:                    'C'
}

key V {
    label:                              'V'
    base:                               'v'
    shift, capslock:                    'V'
}

key B {
    label:                              'B'
    base:                               'b'
    shift, capslock:                    'B'
}

key N {
    label:                              'N'
    base:                               'n'
    shift, capslock:                    'N'
}

key M {
    label:                              'M'
    base:                               'm'
    shift, capslock:                    'M'
    ralt:                               '\u00b5'
}

key COMMA {
    label:                              ','
    base:                               ','
    shift:                              ';'
}

key PERIOD {
    label:                              '.'
    base:                               '.'
    shift:                              ':'
}

key SLASH {
    label:                              '\u00de'
    base:                               '\u00fe'
    shift, capslock:                    '\u00de'
}
