###############################################################################
# BRLTTY - A background process providing access to the console screen (when in
#          text mode) for a blind person using a refreshable braille display.
#
# Copyright (C) 1995-2023 by The BRLTTY Developers.
#
# BRLTTY comes with ABSOLUTELY NO WARRANTY.
#
# This is free software, placed under the terms of the
# GNU Lesser General Public License, as published by the Free Software
# Foundation; either version 2.1 of the License, or (at your option) any
# later version. Please see the file LICENSE-LGPL for details.
#
# Web Page: http://brltty.app/
#
# This software is maintained by Dave Mielke <dave@mielke.cc>.
###############################################################################

# BRLTTY Text Table - Estonian
#
# Samuel Thibault <samuel.thibault@ens-lyon.org>
# 
# This table is based on the Unesco report on the progress of unification of
# braille writing « L'ÉCRITURE BRAILLE DANS LE MONDE », by Sir Clutha
# MACKENZIE: http://unesdoc.unesco.org/images/0013/001352/135251fo.pdf
# The document is dated 1954, so this table may be quite outdated.

# the standard representations for the letters of the Latin alphabet
include ltr-latin.tti

# lowercase accented letters
char \xE4	(  345   )  # ⠜ ä [LATIN SMALL LETTER A WITH DIAERESIS]
char \xF5	( 234 6  )  # ⠮ õ [LATIN SMALL LETTER O WITH TILDE]
char \xF6	( 2 4 6  )  # ⠪ ö [LATIN SMALL LETTER O WITH DIAERESIS]
char \xFC	(12  56  )  # ⠳ ü [LATIN SMALL LETTER U WITH DIAERESIS]

# uppercase accented letters
char \xC4	(  345 7 )  # ⡜ Ä [LATIN CAPITAL LETTER A WITH DIAERESIS]
char \xD5	( 234 67 )  # ⡮ Õ [LATIN CAPITAL LETTER O WITH TILDE]
char \xD6	( 2 4 67 )  # ⡪ Ö [LATIN CAPITAL LETTER O WITH DIAERESIS]
char \xDC	(12  567 )  # ⡳ Ü [LATIN CAPITAL LETTER U WITH DIAERESIS]

# the numbers 0-9 are represented by the letters j,a-i with dot 8 added
include num-dot8.tti

include punc-basic.tti

include common.tti
