# liblouis: U.S. English 6 dot computer braille table
#
#-name: U.S. English Computer Braille Code (CBC)
#-index-name: English, U.S., computer, 6-dot
#-display-name: English 6-dot computer braille as used in the U.S.
#
#+locale: en-US
#+type: computer
#+dots: 6
#+system: ebae
#
# Computer Braille Code reference:
# http://liblouis.org/braille-specs/english/#computer-braille-code-cbc
#
#-copyright: 2019, Timothy Wynn
#-license: LGPLv2.1
#
#  Copyright (C) 2019 Timothy Wynn <tmthywynn8@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/>.
#
# Notes:
# * Print characters, braille dots, and meanings are defined according
#   to the "COMPUTER BRAILLE CODE SYMBOLS: ASCII ORDER" and the
#   "Additional Computer Braille Code Symbols" tables (pp. 53-62) of the
#   Computer Braille Code (CBC; 2000) manual.
# * Character-Definition Opcodes were copied from en-us-comp8.ctb.
#   Irrelevant and/or predefined Character-Definition Opcodes were
#   disregarded as needed (e.g. letter and number Character-Definition
#   Opcodes as defined by latinLetterDef6Dots.uti and litdigits6Dots.uti).
# * Major portions of the CBC manual have been disregarded due to
#   transcriber-specific decisions (i.e. unable to be automated).
# * Rationale of decisions made were interpreted from the following
#   section(s) of the CBC manual:
#   4.2 Shift Indicator
#   4.3 Caps Lock Indicator
#   8.1 Isolated Lower-Cell Signs
#   10.1 Emphasis Indicators
#   16.1 Termination Indicator#
#
# TODO:
# * Compbrl opcode and its comp6 subset (used in EBAE tables):
#   11.1 Computer Braille Code Indicators
# * Nemeth (used in EBAE tables):
#   12.0 Nemeth Code Indicators
# * Superscript and subscript numbers (is it possible?:
#   15.0 Half-Line Shifts

# Character Definitions:
include spaces.uti

# Alphanumeric characters:
include latinLetterDef6Dots.uti
include loweredDigits6Dots.uti

# Single-cell symbols:
punctuation ! 2346 exclamation point
punctuation " 5 quotation marks, double quotes
sign # 3456 number sign, pound sign (weight)
sign $ 1246 dollar sign
sign % 146 percent sign
sign & 12346 ampersand
punctuation ' 3 apostrophe, single quote
punctuation ( 12356 left parenthesis
punctuation ) 23456 right parenthesis
sign * 16 asterisk, multiplication sign
math + 346 plus sign
punctuation , 6 comma
math - 36 hyphen, minus sign
punctuation . 46 period, decimal point
math / 34 slash, division sign
punctuation : 156 colon
punctuation ; 56 semicolon
math < 126 less than
math = 123456 equals
math > 345 greater than
punctuation ? 1456 question mark
sign @ 4 at
punctuation [ 246 left bracket
sign \\ 1256 backslash
punctuation ] 12456 right bracket
sign ^ 45 up arrow/caret

# Braille symbols with the 456 prefix:
sign _ 456-456 underscore
sign _ 456 unused except as prefix for forward and back-translation
sign ` 456-4 grave accent
punctuation { 456-246 left brace
sign | 456-1256 vertical bar
punctuation } 456-12456 right brace
math ~ 456-45 tilde

# Braille Indicators:
capsletter 456 shift indicator
begcapsword 456-345 caps lock indicator
endcapsword 456-126 caps release indicator
capsmodechars 0123456789!"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~ # if letters are separated by numbers, punctuation, etc.

# Emphasis Indicators:
emphclass italic
begemph italic 456-16 begin emphasis
endemph italic 456-34 end emphasis
emphclass underline
begemph underline 456-16 begin emphasis
endemph underline 456-34 end emphasis
emphclass bold
begemph bold 456-16 begin emphasis
endemph bold 456-34 end emphasis

# Isolated Lower-Cell Signs:
# Single-digit number:
lowword 0 456-356 0
lowword 1 456-2 1
lowword 2 456-23 2
lowword 3 456-25 3
lowword 4 456-256 4
lowword 5 456-26 5
lowword 6 456-235 6
lowword 7 456-2356 7
lowword 8 456-236 8
lowword 9 456-35 9
# Quotation mark, apostrophe, comma, hyphen/minus sign, and semicolon:
lowword " 456-5 quotation marks, double quotes
lowword ' 456-3 apostrophe, single quote
lowword , 456-6 comma
lowword - 456-36 hyphen, minus sign
lowword ; 456-56 semicolon
