# liblouis: Swedish Grade 1 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/>.

# Created by Leon Ungier <Leon.Ungier@ViewPlus.com>.

include se-se.dis

space \x00a0 a
include spaces.uti

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

punctuation ! 235			exclamation mark		x0021
punctuation " 56			double quote				x0022
sign # 45-3456				number sign					x0023
sign $ 4-234					dollar							x0024
sign % 46-356					percent							x0025
sign & 5-346					ampersand						x0026
punctuation ' 5				apostrophe					x0027
punctuation ( 236			left parenthesis		x0028
punctuation ) 356			right parenthesis		x0029
sign * 35							asterisk						x002A
math + 256						plus								x002B
punctuation , 2				coma								x002C
punctuation - 36			hyphen-minus				x002D
punctuation . 3				point								x002E
math / 34							solidus							x002F

punctuation : 25			colon								x003A
punctuation ; 23			semicolon						x003B
math < 246-3					less-than sign			x003C
math = 2356						equal sign					x003D
math > 135-2					greater-than sign		x003E
punctuation ? 26			question mark				x003F
sign @ 45-12356				commercial at				x0040

include latinLetterDef6Dots.uti
include digits6Dots.uti # must come after letters
include litdigits6Dots.uti # Must come after letters


punctuation [ 12356	left square bracket		x005B
sign \\ 45-34				reverse solidus				x005C
punctuation ] 23456	right square bracket	x005D
sign ^ 4						circumflex accent			x005E
sign _ 6						low line							x005F
sign ` 46						grave accent					x0060

# a - z								# 97 - 122					x0061-x007A

punctuation { 6-236	left curly bracket		x007B
sign | 456					vertical line					x007C
punctuation } 6-356	right curly bracket		x007D
math ~ 45-2					tilde									x007E
sign ¢ 4-14					cent sign							x00A2
sign £ 45-123				pound sign						x00A3
sign ¤ 45-15				currency sign					x00A4
sign ¥ 45-13456			yen										x00A5
sign § 346					paragraph							x00A7

sign © 6-14-135-1234-13456-1235-24-1245-125-2345		copyright		x00A9
punctuation « 45-2356	left pointing double angle								x00AB

sign ° 4-356					degree sign									x00B0
sign ² 4-6-126				superscript 2								x00B2
sign ³ 4-6-146				superscript 3								x00B3
sign ¹ 4-6-16					superscript 1								x00B9
punctuation » 2356-12	right pointing double angle	x00BB
math ¼ 6-16-34-1456		vulgar fraction 1 quarter		x00BC
math ½ 6-16-34-126		vulgar fraction one half		x00BD
math ¾ 6-126-34-1456	vulgar fraction 3 quarters	x00BE

uplow \x00C0\x00E0 12356			A with grave				x00C0
uplow Ää 345							a with diaeresis		x00C4
uplow Åå 16										A with ring above		x00C5
uplow \x00C8\x00E8	2346			E with grave above	x00C8
uplow Éé 123456								E with acute above	x00C9

uplow Öö 246																			x00D6
math × 1346						multiplication sign					x00D7

uplow Üü 1256-1256						U with diaeresis		x00DC

math ÷ 34							division sign								x00F7

punctuation	\x2010 46		 # 8208			hyphen
punctuation	\x2011 46		 # 8209			non-breaking hyphen
punctuation	\x2013 36		 # 8211			smart minus sign
punctuation	\x2018 5		 # 8216			smart single left quotation mark
punctuation	\x2019 5		 # 8217			smart single right quotation mark

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

punctuation \x2026 3-3-3 # 8230			smart ellipsis

sign \x20AC 15-136-1235-135					Euro sign
noback sign \x25CF 35	# 9679 black circle

# -----------------------

capsletter 6
begcapsword 6-6			# uncomment if you don't want capitalization

sign \x00B7 3456			# so the line below compile
numsign 3456
midnum , 2
midnum . 3
midnum + 256
midnum - 36
midnum / 34
midnum : 25

endnum # 56-3456

repeated ... 3-3-3		ellipsis
repeated --- 36-36-36
repeated ___ 6-6-6

always \s--\s 36-36	tiret

