# 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>.

locale Sweden

include se-se.dis

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

space \t 0 tab						#  9
space \x000A 0
space \x000D 0
space \s 0 blank					# 32

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

include digits6Dots.uti

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

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
space \X00A0 0			no-break space				x00A0
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

