# liblouis: U.S. English 8 dot Computer braille table
#
#  Copyright (C) 2004-2008 ViewPlus Technologies, Inc. www.viewplus.com
#  Copyright (C) 2004-2006 JJB Software, Inc. www.jjb-software.com
#  Copyright (C) 2012 Mesar Hameed <mesar.hameed@gmail.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/>.

space \t 9 tab
space \s 0 blank
space \x00a0 a unbreakable space
sign \x000a 78 newline
space \x000d 0 carriage return
include loweredDigits6Dots.uti
include latinLetterDef8Dots.uti
punctuation , 6
punctuation ; 56
punctuation : 156
punctuation . 46
punctuation ! 2346
punctuation " 5
punctuation ' 3
punctuation ( 12356
punctuation ) 23456
punctuation - 36
sign _ 456
math < 126
math = 123456
math > 345
sign % 146
math + 346
math ~ 45
sign ` 4
sign & 12346
sign $ 1246
punctuation ? 1456
punctuation { 246
punctuation [ 2467
punctuation } 12456
punctuation ] 124567
sign ^ 457
sign @ 47
sign # 3456
sign \\ 12567
sign | 1256
math / 34
sign * 16
noback sign \x25CF 16 BLACK CIRCLE
