# liblouis braille Table - Esperanto
#
# Copyright (C) 1995-2008 by The BRLTTY Team.
# Copyright (C) 2011 Samuel Thibault <samuel.thibault@ens-lyon.org>
# Copyright (C) 2013 Aaron Cannon <cannona@fireantproductions.com>
#
#  This file is part of liblouis.
#
#  liblouis is free software: you can redistribute it and/or modify it
#  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.
#
#  liblouis is distributed in the hope that it will be useful, but
#  WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
#  Lesser General Public License for more details.
#
#  You should have received a copy of the GNU Lesser General Public
#  License along with liblouis. If not, see
#  <http://www.gnu.org/licenses/>.

# Based on the document from Mus�e national de l'Espéranto à Gray
# "Maison pour tous", 19 rue Victor Hugo 70100 GRAY
# esperanto-muzeo@wanadoo.fr
#
# Updated and corrected for LibLouis and 6-dot Braille by
# Aaron Cannon <cannona@fireantproductions.com>
# with kind assistance from the members of
# The International league of Blind Esperantists (LIBE)
# http://libe.narzan.com/
# July 7, 2012
# Further amendments based on World Braille Usage, 3rd Ed.
# October 13, 2013

include spaces.uti
punctuation \x00a0 0		NO-BREAK SPACE

include braille-patterns.cti

numsign 3456  number sign
capsletter 46
begcapsword 46-46
endcapsword 46-3
punctuation ! 235		EXCLAMATION MARK
punctuation ' 3		APOSTROPHE
punctuation ( 2356		LEFT PARENTHESIS
punctuation ) 2356		RIGHT PARENTHESIS
punctuation [  2356-2356
punctuation ] 2356-2356
punctuation , 2		COMMA
punctuation - 36		HYPHEN-MINUS
punctuation — 6-36
punctuation . 256		FULL STOP
punctuation : 25		COLON
punctuation ; 23		SEMICOLON
punctuation ? 26		QUESTION MARK
punctuation " 236
punctuation … 3-3-3
punctuation / 34
punctuation * 35
prepunc " 236
postpunc " 356
include digits6Dots.uti

# define w prior to the included definition so that it is overwridden.
uplow Ww 23456
include latinLetterDef6Dots.uti

uplow Ĉĉ 146		LATIN LETTER C WITH CIRCUMFLEX
uplow Ĝĝ 12456		LATIN LETTER G WITH CIRCUMFLEX
uplow Ĥĥ 1256		LATIN LETTER H WITH CIRCUMFLEX
uplow Ĵĵ 2456		LATIN LETTER J WITH CIRCUMFLEX
uplow Ŝŝ 2346		LATIN LETTER S WITH CIRCUMFLEX
uplow Ŭŭ 346		LATIN LETTER U WITH BREVE
