# 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.

#
# French keyboard layout, AZERTY style.
#

type OVERLAY

map key 16 A
map key 17 Z
map key 30 Q
map key 39 M
map key 44 W
map key 50 COMMA
map key 51 SEMICOLON
map key 86 PLUS

### ROW 1

key GRAVE {
    label:                              '\u00b2'
    base:                               '\u00b2'
}

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

key 2 {
    label:                              '2'
    base:                               '\u00e9'
    shift:                              '2'
    ralt:                               '~'
}

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

key 4 {
    label:                              '4'
    base:                               '\''
    shift:                              '4'
    ralt:                               '{'
}

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

key 6 {
    label:                              '6'
    base:                               '-'
    shift:                              '6'
    ralt:                               '|'
}

key 7 {
    label:                              '7'
    base:                               '\u00e8'
    shift:                              '7'
    ralt:                               '`'
}

key 8 {
    label:                              '8'
    base:                               '_'
    shift:                              '8'
    ralt:                               '\\'
}

key 9 {
    label:                              '9'
    base:                               '\u00e7'
    shift:                              '9'
    ralt:                               '^'
}

key 0 {
    label:                              '0'
    base:                               '\u00e0'
    shift:                              '0'
    ralt:                               '@'
}

key MINUS {
    label:                              ')'
    base:                               ')'
    shift:                              '\u00b0'
    ralt:                               ']'
}

key EQUALS {
    label:                              '='
    base:                               '='
    shift:                              '+'
    ralt:                               '}'
}

### ROW 2

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

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

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:                              '\u02c6'
    base:                               '\u0302'
    shift:                              '\u0308'
}

key RIGHT_BRACKET {
    label:                              '$'
    base:                               '$'
    shift:                              '\u00a3'
    ralt:                               '\u00a4'
}

### ROW 3

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

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 M {
    label:                              'M'
    base:                               'm'
    shift, capslock:                    'M'
}

key APOSTROPHE {
    label:                              '\u00f9'
    base:                               '\u00f9'
    shift:                              '%'
}

key BACKSLASH {
    label:                              '*'
    base:                               '*'
    shift:                              '\u00b5'
}

### ROW 4

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

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

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 COMMA {
    label:                              ','
    base:                               ','
    shift:                              '?'
}

key SEMICOLON {
    label:                              ';'
    base:                               ';'
    shift:                              '.'
}

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

key SLASH {
    label:                              '!'
    base:                               '!'
    shift:                              '\u00a7'
}
