###############################################################################
# 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 - Gaelic
#
# 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 \xE1	(1234 6  )  # ⠯ á [LATIN SMALL LETTER A WITH ACUTE]
char \xE9	(123456  )  # ⠿ é [LATIN SMALL LETTER E WITH ACUTE]
char \xED	(123 56  )  # ⠷ í [LATIN SMALL LETTER I WITH ACUTE]
char \xF3	( 234 6  )  # ⠮ ó [LATIN SMALL LETTER O WITH ACUTE]
char \xFA	( 23456  )  # ⠾ ú [LATIN SMALL LETTER U WITH ACUTE]
char \u1E03	(12   6  )  # ⠣ ḃ [LATIN SMALL LETTER B WITH DOT ABOVE]
char \u010B	(1  4 6  )  # ⠩ ċ [LATIN SMALL LETTER C WITH DOT ABOVE]
char \u1E0B	(1  456  )  # ⠹ ḋ [LATIN SMALL LETTER D WITH DOT ABOVE]
char \u1E1F	(1   56  )  # ⠱ ḟ [LATIN SMALL LETTER F WITH DOT ABOVE]
char \u0121	(12 4 6  )  # ⠫ ġ [LATIN SMALL LETTER G WITH DOT ABOVE]
char \u1E41	(12 456  )  # ⠻ ṁ [LATIN SMALL LETTER M WITH DOT ABOVE]
char \u1E57	(12  56  )  # ⠳ ṗ [LATIN SMALL LETTER P WITH DOT ABOVE]
char \u1E61	( 2 4 6  )  # ⠪ ṡ [LATIN SMALL LETTER S WITH DOT ABOVE]
char \u1E6B	( 2 456  )  # ⠺ ṫ [LATIN SMALL LETTER T WITH DOT ABOVE]

# uppercase accented letters
char \xC1	(1234 67 )  # ⡯ Á [LATIN CAPITAL LETTER A WITH ACUTE]
char \xC9	(1234567 )  # ⡿ É [LATIN CAPITAL LETTER E WITH ACUTE]
char \xCD	(123 567 )  # ⡷ Í [LATIN CAPITAL LETTER I WITH ACUTE]
char \xD3	( 234 67 )  # ⡮ Ó [LATIN CAPITAL LETTER O WITH ACUTE]
char \xDA	( 234567 )  # ⡾ Ú [LATIN CAPITAL LETTER U WITH ACUTE]
char \u1E02	(12   67 )  # ⡣ Ḃ [LATIN CAPITAL LETTER B WITH DOT ABOVE]
char \u010A	(1  4 67 )  # ⡩ Ċ [LATIN CAPITAL LETTER C WITH DOT ABOVE]
char \u1E0A	(1  4567 )  # ⡹ Ḋ [LATIN CAPITAL LETTER D WITH DOT ABOVE]
char \u1E1E	(1   567 )  # ⡱ Ḟ [LATIN CAPITAL LETTER F WITH DOT ABOVE]
char \u0120	(12 4 67 )  # ⡫ Ġ [LATIN CAPITAL LETTER G WITH DOT ABOVE]
char \u1E40	(12 4567 )  # ⡻ Ṁ [LATIN CAPITAL LETTER M WITH DOT ABOVE]
char \u1E56	(12  567 )  # ⡳ Ṗ [LATIN CAPITAL LETTER P WITH DOT ABOVE]
char \u1E60	( 2 4 67 )  # ⡪ Ṡ [LATIN CAPITAL LETTER S WITH DOT ABOVE]
char \u1E6A	( 2 4567 )  # ⡺ Ṫ [LATIN CAPITAL LETTER T WITH DOT ABOVE]

# 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
