# Slovak Braille Table
#
#  Copyright (C) 2004-2008 ViewPlus Technologies, Inc. www.viewplus.com
#  Copyright (C) 2009 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/>.

# Created by Mike Sivill #<mike.sivill@viewplus.com>

#**** Display Codes
 include text_nabcc.dis

#**** Character Definitions
space \s 0 blank
space \t 9 tab
space \x000a 0 newline
space \x000c 0
space \x000d 0 carriage return
space \x001b 1b escape character for html back-translation
space \x00A0 a NO-BREAK SPACE <noBreak> 0020 NON-BREAKING SPACE 
include loweredDigits6Dots.uti

include latinLetterDef8Dots.uti

punctuation ( 12356
punctuation } 12456
punctuation ] 124567
punctuation ? 1456
punctuation : 156
punctuation ) 23456
punctuation ! 2346
punctuation { 246
punctuation [ 2467
punctuation ' 3
punctuation - 36
punctuation . 46
punctuation " 5
punctuation ; 56
punctuation , 6
sign & 12346
sign $ 1246
sign | 1256
sign \\ 12567
sign % 146
sign * 16
sign # 3456
punctuation ` 4
sign _ 456
sign ^ 457
sign @ 47
math = 123456
math < 126
math / 34
math > 345
math + 346
math ~ 45


# Miscellaneous
math \x00B1 346-36 PLUS-MINUS SIGN PLUS-OR-MINUS SIGN 
math \x00B7 16 MIDDLE DOT 
math \x00BC 1456-2-34-256-3456 VULGAR FRACTION ONE QUARTER No 0031 2044 
math \x00BD 1456-2-34-23-3456 VULGAR FRACTION ONE HALF No 0031 2044 0032 
math \x00BE 1456-25-34-23-3456 VULGAR FRACTION THREE QUARTERS No 0033 
math \x00D7 4-16 MULTIPLICATION SIGN 
math \x00F7 46-34 DIVISION SIGN 
punctuation \x0092 3
punctuation \x0097 36-36
punctuation \x00A1 235 INVERTED EXCLAMATION MARK 
punctuation \x00ad 36
punctuation \x00BF 236 INVERTED QUESTION MARK 
punctuation \x2011 36
punctuation \x2013 36-36
punctuation \x2014 36-36
punctuation \x2018 6-236
punctuation \x2019 3
punctuation \x2019 356-3
punctuation \x201c 236
punctuation \x201d 356
punctuation \x2026 3
sign \x2122 45-2345 trademark sign
sign \x00A2 4-14 CENT SIGN 
sign \x00A3 3456 POUND SIGN 
sign \x00A4 1246 CURRENCY SIGN 
sign \x00A7 4-234 SECTION SIGN 
sign \x00A9 45-14 COPYRIGHT SIGN 
sign \x00AE 45-1235 REGISTERED SIGN REGISTERED TRADE MARK SIGN 
sign \x00B0 56-145-1245 DEGREE SIGN 
sign \x00B4 b4 ACUTE ACCENT 0020 0301 SPACING ACUTE 
sign \x00B5 46-134 MICRO SIGN 03BC 039C 039C
sign \x00A5 4-13456 YEN SIGN 
punctuation \x00A6 456-1256 BROKEN BAR BROKEN VERTICAL BAR 
# sign \x00A8 DIAERESIS 0020 0308 SPACING DIAERESIS 
# sign \x00AA FEMININE ORDINAL INDICATOR 0061 
# punctuation \x00AB LEFT-POINTING DOUBLE ANGLE QUOTATION MARK LEFT 
# sign \x00AC NOT SIGN 
# sign \x00AF MACRON 0020 0304 SPACING MACRON 
# math \x00B2 SUPERSCRIPT TWO 0032 2 2 SUPERSCRIPT DIGIT TWO 
# math \x00B3 SUPERSCRIPT THREE 0033 3 3 SUPERSCRIPT DIGIT THREE 
sign \x00B6 1234-345 PILCROW SIGN PARAGRAPH SIGN 
# sign \x00B8 CEDILLA 0020 0327 SPACING CEDILLA 
# math \x00B9 SUPERSCRIPT ONE 0031 1 1 SUPERSCRIPT DIGIT ONE 
sign \x00BA 145-1245 MASCULINE ORDINAL INDICATOR 006F 
# punctuation \x00BB RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK Pf Y 

punctuation \x2010 36			# 8208  hyphen
punctuation	\x201F 356		# 8223	smart double high reverse quotation mark
punctuation	\x201E 236		# 8222	smart double low quotation mark

noback sign \X25CF 16		# 9679 black circle

# Numbers
include litdigits6Dots.uti

# Alphabet
uplow \x00C1\x00E1 16
uplow \x010C\x010D 146 c with caron
uplow \x010E\x010F 1456 D with caron
uplow \x00C9\x00E9 345
uplow \x00C4\x00E4 4 a with daeresis
uplow \x00CD\x00ED 34 I with acute
uplow \x013B\x013C 46 l with cedilla
uplow \x013D\x013E 456 l with caron
uplow \X0139\X013A 46 l with acute
uplow \x0147\x0148 1246 n with caron
uplow \x00D3\x00f3 246 O with acute
uplow \X00D4\x00F4 23456 o with circumflex
 uplow \x0154\x0155 12356 r with acute
uplow \x0160\x0161 156 s with caron
uplow \x0164\x0165 1256 t with caron
uplow \X00DA\X00FA 346 U WITH ACUTE
uplow  \x00DD\x00FD 12346 Y WITH ACUTE
include latinLetterDef6Dots.uti
uplow \x017d\x017E 2346 z with caron

#**** Braille Indicators
numsign 3456
capsletter 6
begcapsword 6-6

# Punctuation
punctuation ! 235
punctuation " 2356
punctuation ' 3
punctuation ( 236
punctuation ) 356
midnum * 35
math + 235
punctuation , 2
punctuation - 36
punctuation . 256
punctuation / 25
punctuation : 25
punctuation * 0-3
punctuation ; 23
math < 126
math > 345
math = 2356
punctuation ? 26
punctuation [ 6-236
punctuation  ] 6-356
always \\ 3456-1256
punctuation { 5-236
punctuation } 5-356
always _ 456
always | 3456-123
always ~ 56-26
always # 56-3456
always $ 3456-1246
always & 3456-12346
always @ 3456-12456
always % 3456-1234

