# Slovene braille translation 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/>.

# by Mike Sivill <Mike.Sivill@viewplus.com>

include text_nabcc.dis Alldisplay opcodes


# ----------- define all chars --------------------------------------

space \t 0
space \x000A 0
space \x000D 0
space \s 0 blank					# 32
replace \x0007
punctuation ! 235				# 33
punctuation " 2356						# 34
sign # 3456								# 35
sign $ 46								# 36
sign % 123456								# 37
sign & 12346							# 38
punctuation ' 3						# 39 apostrophe
punctuation ( 126				# 40
punctuation ) 345				# 41
sign * 35									# 42
math + 4-235								# 43
punctuation , 2						# 44
punctuation - 36					# 45
punctuation . 256					# 46
math / 4-1456									# 47
include loweredDigits6Dots.uti
punctuation : 25					# 58
punctuation ; 23					# 59
math < 246-3								# 60
math = 4-2356
math > 135-5								# 62
punctuation ? 26				# 63
sign @ 6-4									# 64

include latinLetterDef6Dots.uti

punctuation [ 4-12346				# 91
sign \\ 4-1234							# 92
punctuation ] 4-13456			# 93
sign ^ 6-45								# 94 circumflex accent
sign _ 456								# 95 underscore
sign ` 4-4									# 96 grave accent
# a - z										# 97 - 122
punctuation { 4-246					# 123
sign | 1256								# 124
punctuation } 4-135				# 125
math ~ 4-45									# 126

space \X00A0 0						# 160 no-break space
sign \x00A2 4-14					# 162 ¢ cents sign
sign \x00A3 4-123					# 163 £ pounds sign
sign \x20A4 4-123  # lira sign
sign \x00A5 4-13456				#	165 ¥ yen sign
sign § 4-234-3                                          # 167 
begnum § 234-3						# 167
always § 4-234-3                                          # 167 
sign \x2022 36-36-0 # bullet
sign \x00A9 45-14 # 169        © copyright sign
sign \x00AE 45-1235    # Registered
sign \x2665 2356-125-15-345-2345-2356 # heart symbol
sign \x21FD 246-25-25 # LEFTWARDS OPEN-HEADED ARROW 
sign \x21FE 25-25-135 # RIGHTWARDS OPEN-HEADED ARROW 
sign \x21FF 246-25-25-135 # LEFT RIGHT OPEN-HEADED ARROW 
always \x21FD 246-25-25 # LEFTWARDS OPEN-HEADED ARROW 
always \x21FE 25-25-135 # RIGHTWARDS OPEN-HEADED ARROW 
always \x21FF 246-25-25-135 # LEFT RIGHT OPEN-HEADED ARROW 
sign \x00BA 145-1245 MASCULINE ORDINAL INDICATOR 006F 
punctuation \x00Ad 36			# 173	  soft hyphen
sign \x00B0 56-145-1245 degrees
sign \x00B4 4
always \x00B4 4 # acute accent sign
sign \x00B5 2-134 # micro sign, (mu)
sign \x00B6 4-1234-345		#	182	  ¶ pilcrow sign
math \x00D7 4-16				# 215		× multiplication sign
midnum \x00D7 4-16

math \x00F7 46-34                              # 247           ÷ division sign
midnum \x00F7 46-34
punctuation \x2010 36			# 8208  hyphen
punctuation \x2011 23478	# 8209  non-breaking hyphen

punctuation \x2013 36-36		# 8211	en dash
punctuation \x2014 36-36		# em dash
punctuation	\x2018 6-236			# 8216	smart single left quotation mark
punctuation	\x2019 356-3			# 8217	smart single right quotation mark

punctuation	\x201C 236		# 8220	smart opening double quote
punctuation	\x201D 356		# 8221	smart closing double quote
punctuation	\x201E 236		# 8222	smart double low quotation mark
punctuation	\x201F 356		# 8223	smart double high reverse quotation mark

punctuation \x2026 3-3-3	# 8230 smart ellipsis
sign \x20AC 4-15					# 8364 Euro sign anywhere else
noback sign \X25CF 35		# 9679 black circle

# --------------------------- end definitions ---------------------------------

include countries.cti


# Braille indicators
numsign 3456  number sign, just a dots operand
capsletter 46

# the decimal digits
include litdigits6Dots.uti

# special accented chars 
uplow \x0160\x0161 156
uplow \x010C\x010D 16
uplow \x0106\x0107 146
uplow \x017D\x017E 2346
uplow \x00D0\x00F0 1456


# accented letters

uplow \x00C0\x00E0 1				# a with grave
uplow \x00C1\x00E1 1				# a with acute
uplow \x00C2\x00E2 1				# a with circumflex
uplow \x00C3\x00E3 1				# a with tilde
uplow \x00C4\x00E4 1				# a with dieresis
uplow \x00C5\x00E5 1				# a with ring above
uplow \x00C6\x00E6 1				# letter ae
uplow \x00C7\x00E7 14				# c with cedilla
uplow \x00C8\x00E8 15				# e with grave
uplow \x00C9\x00E9 15				# e with acute
uplow \x00CA\x00EA 15				# e with circumflex
uplow \x00CB\x00EB 15				# e with dieresis
uplow \x00CC\x00EC 24				# i with grave above
uplow \x00CD\x00ED 24				# i with acute above
uplow \x00CE\x00EE 24				# i with circumflex
uplow \x00CF\x00EF 24				# i with dieresis
uplow \x00D0\x00F0 15				# letter eth
uplow \x00D1\x00F1 1345			# n with tilde
uplow \x00D2\x00F2 135			# o with grave above
uplow \x00D3\x00F3 135			# o with acute above
uplow \x00D4\x00F4 135			# o with circumflex
uplow \x00D5\x00F5 135			# o with tilde
uplow \x00D6\x00F6 135			# o with dieresis
# \x00D7	× multiplication sign	----------------------
uplow \x00D8\x00F8 135			# o with stroke
uplow \x00D9\x00F9 136			# u with grave above
uplow \x00DA\x00FA 136			# u with acute above
uplow \x00DB\x00FB 136			# u with circumflex above
uplow \x00DC\x00FC 136				# u with dieeresis
uplow \x00DD\x00FD 13456		# y with acute above
uplow \x00DE\x00FE 4-1456                 # letter thorn
letter \x00DF 2346		# small sharp s
uplow \x0174\x0175 4-2456 w with circumflex
uplow \x0176\x0177 4-13456 # y with circumflex
uplow \x0178\x00ff 4-13456 # y with diaeresis
uplow \x1ef2\x1ef3 4-13456 # y with grave
largesign \x00C0 4-1      [C0] upper a grave
largesign \x00E0   4-1      [E0] lower a grave
largesign \x00C1 4-1      [C1] upper a acute
largesign \x00E1   4-1      [E1] lower a acute
largesign \x00C2 4-1      [C2] upper a circumflex
largesign \x00E2   4-1      [E2] lower a circumflex
largesign \x00C3 4-1      [C3] upper a tilde
largesign \x00E3   4-1      [E3] lower a tilde
largesign \x00C4 4-1      [C4] upper a dieresis
largesign \x00E4   4-1      [E4] lower a dieresis

largesign \x00C5 4-1      [C5] upper a ring
largesign \x00E5   4-1      [E5] lower a ring

largesign \x00C6 1-15     [C6] upper ae
largesign \x00E6   1-15			[E6] lower ae

largesign \x00C7 4-14     [C7] upper c cedilla
largesign \x00E7   4-14     [E7] lower c cedilla

largesign \x00C8 4-15     [C8] upper e grave
largesign \x00E8   4-15     [E8] lower e grave

largesign \x00C9 4-15     [C9] upper e acute
largesign \x00E9   4-15     [E9] lower e acute

largesign \x00CA 4-15     [CA] upper e circumflex
largesign \x00EA   4-15     [EA] lower e circumflex

largesign \x00CB 4-15     [CB] upper e dieresis
largesign \x00EB   4-15     [EB] lower e dieresis

largesign \x00CC 4-24     [CC] upper i grave
largesign \x00EC   4-24     [EC] lower i grave

largesign \x00CD 4-24     [CD] upper i acute
largesign \x00ED   4-24     [ED] lower i acute

largesign \x00CE 4-24     [CE] upper i circumflex
largesign \x00EE   4-24     [EE] lower i circumflex

largesign \x00CF 4-24     [CF] upper i dieresis
largesign \x00EF   4-24     [EF] lower i dieresis

largesign \x00D0 4-15     [D0] upper eth
largesign \x00F0   4-15     [F0] lower eth

largesign \x00D1 4-1345   [D1] upper n tilde
largesign \x00F1   4-1345   [F1] lower n tilde

largesign \x00D2 4-135    [D2] upper o grave
largesign \x00F2   4-135    [F2] lower o grave

largesign \x00D3 4-135    [D3] upper o acute
largesign \x00F3   4-135    [F3] lower o acute

largesign \x00D4 4-135    [D4] upper o circumflex
largesign \x00F4   4-135    [F4] lower o circumflex

largesign \x00D5 4-135    [D5] upper o tilde
largesign \x00F5   4-135    [F5] lower o tilde

largesign \x00D6 4-135    [D6] upper o dieresis
largesign \x00F6   4-135			[F6] lower o dieresis

largesign \x00D8 4-135    [D8] upper o slash
largesign \x00f8   4-135    [F8] lower o slash

largesign \x00D9 4-136    [D9] upper u grave
largesign \x00F9   4-136    [F9] lower u grave

largesign \x00DA 4-136    [DA] upper u acute
largesign \x00FA   4-136    [FA] lower u acute

largesign \x00DB 4-136    [DB] upper u circumflex
largesign \x00FB   4-136    [FB] lower u circumflex

largesign \x00DC 4-136    [DC] upper u dieresis
largesign \x00FC   4-136    [FC] lower u dieresis

largesign \x00DD 4-13456  [DD] upper y acute
largesign \x00FD   4-13456  [FD] lower y acute

largesign \x00DE 4-2345   [DE] upper t horn
largesign \x00FE   4-2345   [FE] lower t horn

largesign \x00DF 234-234 (DF) lower ss

largesign \x0174 4-2456 lower w circumflex
largesign \x0175 4-2456 upper w circumflex

letter \x0176 4-13456 upper y circumflex
letter \x0177 4-13456 lower y circumflex

largesign \x0178 4-13456 upper y with dieresis
largesign \x00FF 4-13456 lower y with dieresis

largesign \x1EF2 4-13456 upper y with grave
largesign \x1EF3 4-13456 lower y with grave

# punctuation
prepunc ( 236
postpunc ) 356
begword ` 6-236
prepunc " 2356
postpunc " 2356
prepunc ' 6-236
postpunc ' 356-3
sign # 456-1456  #  Pound, number sign, hash
always # 456-1456
sign \x20AC 4-15       # euro sign atend  of number
midnum , 2
postpunc , 2
decpoint . 256
midnum - 36
hyphen - 36
#capsnocont
postpunc . 256
postpunc ; 23
midnum : 25
postpunc : 25
postpunc ! 235
midnum / 34
always / 34
always < 5-13
always > 46-2
punctuation ? 26
sign % 123456
endnum % 123456
midnum ^ 45
always ^ 45
always ~ 456-45
always & 12346
midnum * 35
midnum + 235
always * 35-35
midword \x2019 3	# stupid smart apostrophe
always [ 156
always ] 146
always { 56-236
always } 56-356
prepunc ` 6-236
always @ 4-1-2345
always \\ 456-16
always | 456-1256
repeated \s 0
repeated \t 0
always \s-\s 36-36
always ... 3-3-3
always .\s.\s. 3-3-3 . . .
begnum $ 46
always $ 4-256
endword (s) 2356-234-2356

# Vulgar Fractions
sign \x00BD 3456-1-34-12 # one half
sign \x00BC 3456-1-34-145 # one fourth
sign \x00BE 3456-14-34-145 # three fourths
sign \x2153  3456-1-34-14 # one third
sign \x2154  3456-12-34-14 # two thirds
sign \x215B 3456-1-34-125 # one eighth
sign \x215C 3456-14-34-125 # three eighths
sign \x215D 3456-15-34-125 # five eighths
sign \x215E  3456-1245-34-125 # seven eighths

sign \x00B1 346-36 # plus or minus
sign \x00B2 45-23
sign \x00B3 45-25
postpunc \x00B2 45-23-456
sign \x00B3 45-25-456
always \x00B2 45-23
always \x00B2 45-25
always \x00BA 56-145-1245
sign \x2122 45-2345   # trade mark symbol

