#
# Copyright (C) 1995-2009 by The BRLTTY Developers.
#
#  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/>.

# BRLTTY Text Table - Swedish (1996 standard)

# This file contains the ISO-8859-1 compatible version of the Swedish 8-dot
# braille standard as it was defined by the Swedish Braille Authority
# (www.punktskriftsnamnden.se) on October 8, 1996. As of December 2005, this
# is the most current braille standard in Sweden.

space	\s	0	SPACE
punctuation	!	235	EXCLAMATION MARK
punctuation	"	56	QUOTATION MARK
punctuation	#	3456	NUMBER SIGN
punctuation	$	2358	DOLLAR SIGN
punctuation	%	4678	PERCENT SIGN
punctuation	&	3468	AMPERSAND
punctuation	'	5	APOSTROPHE
punctuation	(	236	LEFT PARENTHESIS
punctuation	)	356	RIGHT PARENTHESIS
punctuation	*	35	ASTERISK
punctuation	+	256	PLUS SIGN
punctuation	,	2	COMMA
punctuation	-	36	HYPHEN-MINUS
punctuation	.	3	FULL STOP
punctuation	/	34	SOLIDUS
include digits8Dots.uti
punctuation	:	25	COLON
punctuation	;	23	SEMICOLON
punctuation	<	358	LESS-THAN SIGN
punctuation	=	2356	EQUALS SIGN
punctuation	>	267	GREATER-THAN SIGN
punctuation	?	26	QUESTION MARK
punctuation	@	48	COMMERCIAL AT

include latinLetterDef8Dots.uti

punctuation	[	123568	LEFT SQUARE BRACKET
punctuation	\\	168	REVERSE SOLIDUS
punctuation	]	234568	RIGHT SQUARE BRACKET
punctuation	^	578	CIRCUMFLEX ACCENT
punctuation	_	6	LOW LINE
punctuation	`	46	GRAVE ACCENT
punctuation	{	23678	LEFT CURLY BRACKET
punctuation	|	4568	VERTICAL LINE
punctuation	}	35678	RIGHT CURLY BRACKET
punctuation	~	268	TILDE
punctuation	\x00a0	0	NO-BREAK SPACE
punctuation	\x00a1	367	INVERTED EXCLAMATION MARK
punctuation	\x00a2	23468	CENT SIGN
punctuation	\x00a3	1238	POUND SIGN
punctuation	\x00a4	2478	CURRENCY SIGN
punctuation	\x00a5	24678	YEN SIGN
punctuation	\x00a6	12678	BROKEN BAR
punctuation	\x00a7	346	SECTION SIGN
punctuation	\x00a8	3678	DIAERESIS
punctuation	\x00a9	14568	COPYRIGHT SIGN
letter	\x00aa	2345678	FEMININE ORDINAL INDICATOR
punctuation	\x00ab	2378	LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
punctuation	\x00ac	13458	NOT SIGN
punctuation	\x00ad	23568	SOFT HYPHEN
punctuation	\x00ae	12468	REGISTERED SIGN
punctuation	\x00af	1578	MACRON
punctuation	\x00b0	15678	DEGREE SIGN
punctuation	\x00b1	123468	PLUS-MINUS SIGN
punctuation	\x00b2	37	SUPERSCRIPT TWO
punctuation	\x00b3	2567	SUPERSCRIPT THREE
punctuation	\x00b4	258	ACUTE ACCENT
lowercase	\x00b5	13478	MICRO SIGN
punctuation	\x00b6	1267	PILCROW SIGN
punctuation	\x00b7	8	MIDDLE DOT
punctuation	\x00b8	12568	CEDILLA
punctuation	\x00b9	1468	SUPERSCRIPT ONE
letter	\x00ba	1358	MASCULINE ORDINAL INDICATOR
punctuation	\x00bb	5678	RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
punctuation	\x00bc	12358	VULGAR FRACTION ONE QUARTER
punctuation	\x00bd	1368	VULGAR FRACTION ONE HALF
punctuation	\x00be	3578	VULGAR FRACTION THREE QUARTERS
punctuation	\x00bf	38	INVERTED QUESTION MARK
uppercase	\x00c0	1467	LATIN CAPITAL LETTER A WITH GRAVE
uppercase	\x00c1	135678	LATIN CAPITAL LETTER A WITH ACUTE
uppercase	\x00c2	24578	LATIN CAPITAL LETTER A WITH CIRCUMFLEX
uppercase	\x00c3	13578	LATIN CAPITAL LETTER A WITH TILDE
uppercase	\x00c4	3457	LATIN CAPITAL LETTER A WITH DIAERESIS
uppercase	\x00c5	167	LATIN CAPITAL LETTER A WITH RING ABOVE
uppercase	\x00c6	34578	LATIN CAPITAL LETTER AE
uppercase	\x00c7	123467	LATIN CAPITAL LETTER C WITH CEDILLA
uppercase	\x00c8	12378	LATIN CAPITAL LETTER E WITH GRAVE
uppercase	\x00c9	1234567	LATIN CAPITAL LETTER E WITH ACUTE
uppercase	\x00ca	68	LATIN CAPITAL LETTER E WITH CIRCUMFLEX
uppercase	\x00cb	27	LATIN CAPITAL LETTER E WITH DIAERESIS
uppercase	\x00cc	457	LATIN CAPITAL LETTER I WITH GRAVE
uppercase	\x00cd	1348	LATIN CAPITAL LETTER I WITH ACUTE
uppercase	\x00ce	458	LATIN CAPITAL LETTER I WITH CIRCUMFLEX
uppercase	\x00cf	67	LATIN CAPITAL LETTER I WITH DIAERESIS
uppercase	\x00d0	23467	LATIN CAPITAL LETTER ETH
uppercase	\x00d1	124567	LATIN CAPITAL LETTER N WITH TILDE
uppercase	\x00d2	123478	LATIN CAPITAL LETTER O WITH GRAVE
uppercase	\x00d3	178	LATIN CAPITAL LETTER O WITH ACUTE
uppercase	\x00d4	124578	LATIN CAPITAL LETTER O WITH CIRCUMFLEX
uppercase	\x00d5	23478	LATIN CAPITAL LETTER O WITH TILDE
uppercase	\x00d6	2467	LATIN CAPITAL LETTER O WITH DIAERESIS
punctuation	\x00d7	13468	MULTIPLICATION SIGN
uppercase	\x00d8	1567	LATIN CAPITAL LETTER O WITH STROKE
uppercase	\x00d9	14578	LATIN CAPITAL LETTER U WITH GRAVE
uppercase	\x00da	12578	LATIN CAPITAL LETTER U WITH ACUTE
uppercase	\x00db	245678	LATIN CAPITAL LETTER U WITH CIRCUMFLEX
uppercase	\x00dc	12567	LATIN CAPITAL LETTER U WITH DIAERESIS
uppercase	\x00dd	12478	LATIN CAPITAL LETTER Y WITH ACUTE
uppercase	\x00de	1234678	LATIN CAPITAL LETTER THORN
lowercase	\x00df	1278	LATIN SMALL LETTER SHARP S
lowercase	\x00e0	12356	LATIN SMALL LETTER A WITH GRAVE
lowercase	\x00e1	1235678	LATIN SMALL LETTER A WITH ACUTE
lowercase	\x00e2	1678	LATIN SMALL LETTER A WITH CIRCUMFLEX
lowercase	\x00e3	13678	LATIN SMALL LETTER A WITH TILDE
lowercase	\x00e4	345	LATIN SMALL LETTER A WITH DIAERESIS
lowercase	\x00e5	16	LATIN SMALL LETTER A WITH RING ABOVE
lowercase	\x00e6	3458	LATIN SMALL LETTER AE
lowercase	\x00e7	12346	LATIN SMALL LETTER C WITH CEDILLA
lowercase	\x00e8	2346	LATIN SMALL LETTER E WITH GRAVE
lowercase	\x00e9	123456	LATIN SMALL LETTER E WITH ACUTE
lowercase	\x00ea	126	LATIN SMALL LETTER E WITH CIRCUMFLEX
lowercase	\x00eb	1246	LATIN SMALL LETTER E WITH DIAERESIS
lowercase	\x00ec	3478	LATIN SMALL LETTER I WITH GRAVE
lowercase	\x00ed	348	LATIN SMALL LETTER I WITH ACUTE
lowercase	\x00ee	146	LATIN SMALL LETTER I WITH CIRCUMFLEX
lowercase	\x00ef	12456	LATIN SMALL LETTER I WITH DIAERESIS
lowercase	\x00f0	568	LATIN SMALL LETTER ETH
lowercase	\x00f1	124568	LATIN SMALL LETTER N WITH TILDE
lowercase	\x00f2	34678	LATIN SMALL LETTER O WITH GRAVE
lowercase	\x00f3	3467	LATIN SMALL LETTER O WITH ACUTE
lowercase	\x00f4	1456	LATIN SMALL LETTER O WITH CIRCUMFLEX
lowercase	\x00f5	2348	LATIN SMALL LETTER O WITH TILDE
lowercase	\x00f6	246	LATIN SMALL LETTER O WITH DIAERESIS
punctuation	\x00f7	2568	DIVISION SIGN
lowercase	\x00f8	4578	LATIN SMALL LETTER O WITH STROKE
lowercase	\x00f9	23456	LATIN SMALL LETTER U WITH GRAVE
lowercase	\x00fa	25678	LATIN SMALL LETTER U WITH ACUTE
lowercase	\x00fb	156	LATIN SMALL LETTER U WITH CIRCUMFLEX
lowercase	\x00fc	1256	LATIN SMALL LETTER U WITH DIAERESIS
lowercase	\x00fd	34568	LATIN SMALL LETTER Y WITH ACUTE
lowercase	\x00fe	234578	LATIN SMALL LETTER THORN
lowercase	\x00ff	1268	LATIN SMALL LETTER Y WITH DIAERESIS
