#
# Copyright (C) 1995-2008 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 - 8-dot Icelandic
#
# originally written by: Samuel Thibault <samuel.thibault@ens-lyon.org>
# Updated and maintained by Birkir R. Gunnarsson birkir@midstod.is
# last updated February 16th, 2012
# Table now compliant with the official IceBraille specifications
# which can be found at http://www.midstod.is/Pages/239

space \s 0		SPACE
punctuation ! 2357		EXCLAMATION MARK
punctuation " 56		QUOTATION MARK
sign # 3456 number sign
sign $ 14578 dollar sign
sign % 46 per cent
sign & 123468 ampersand
punctuation ' 5		APOSTROPHE
punctuation ( 236		LEFT PARENTHESIS
punctuation ) 356		RIGHT PARENTHESIS
sign * 35 asterisk
math + 235 plus sign
punctuation , 2		COMMA
punctuation - 36		HYPHEN-MINUS
punctuation . 3		FULL STOP
math / 34 slash
include digits8Dots.uti
punctuation : 25 COLON
punctuation ; 23 SEMICOLON
math < 358 less than
math = 2356 equals
math > 267 greater than
punctuation ? 26 ? questionmark
sign @ 123456 at sign
punctuation [ 12356 left bracket
sign \\ 347 backslash
punctuation ] 23456 right bracket
sign ^ 346 caret/superscript symbol
sign _ 3678 hyphen/underline
punctuation { 123567 left brace
sign | 4568 vertical bar
punctuation } 234568 right brace

# misc. punctuation and math symbols, less frequently used
sign \x2026 6 elipsis
punctuation \x201E 2378 open quotation symbol, used in Icelandic quotes
sign ~ 457 tilde
math ` 4
math ° 256 degrees
sign ¨ 38 dieresis
sign \x2022 37 bullet
punctuation \x2014 367 em dash
punctuation \x2013 368 en dash, long dash
sign © 1478 copyright
sign \x2122 234578 trademark
sign ® 123578 registerred
sign \x20AC 1578 Euro symbol
sign \x00A3 123478 pound sign
sign \x00AB 2578 cents
sign \x00A5 1345678 yen
math \x00B1 123568 plus or minus
math \x00F7 2367 divided by
noback sign \x25CF 35	# 9679 black circle

# English alphabet, Icelandic uses all of these though c, w and z are not used in the Icelandic language
uppercase A 17		LATIN CAPITAL LETTER A
uppercase B 127		LATIN CAPITAL LETTER B
uppercase C 147		LATIN CAPITAL LETTER C
uppercase D 1457		LATIN CAPITAL LETTER D
uppercase E 157		LATIN CAPITAL LETTER E
uppercase F 1247		LATIN CAPITAL LETTER F
uppercase G 12457		LATIN CAPITAL LETTER G
uppercase H 1257		LATIN CAPITAL LETTER H
uppercase I 247		LATIN CAPITAL LETTER I
uppercase J 2457		LATIN CAPITAL LETTER J
uppercase K 137		LATIN CAPITAL LETTER K
uppercase L 1237		LATIN CAPITAL LETTER L
uppercase M 1347		LATIN CAPITAL LETTER M
uppercase N 13457		LATIN CAPITAL LETTER N
uppercase O 1357		LATIN CAPITAL LETTER O
uppercase P 12347		LATIN CAPITAL LETTER P
uppercase Q 123457		LATIN CAPITAL LETTER Q
uppercase R 12357		LATIN CAPITAL LETTER R
uppercase S 2347		LATIN CAPITAL LETTER S
uppercase T 23457		LATIN CAPITAL LETTER T
uppercase U 1367		LATIN CAPITAL LETTER U
uppercase V 12367		LATIN CAPITAL LETTER V
uppercase W 24567		LATIN CAPITAL LETTER W
uppercase X 13467		LATIN CAPITAL LETTER X
uppercase Y 134567		LATIN CAPITAL LETTER Y
uppercase Z 13567		LATIN CAPITAL LETTER Z
lowercase a 1		LATIN SMALL LETTER A
lowercase b 12		LATIN SMALL LETTER B
lowercase c 14		LATIN SMALL LETTER C
lowercase d 145		LATIN SMALL LETTER D
lowercase e 15		LATIN SMALL LETTER E
lowercase f 124		LATIN SMALL LETTER F
lowercase g 1245		LATIN SMALL LETTER G
lowercase h 125		LATIN SMALL LETTER H
lowercase i 24		LATIN SMALL LETTER I
lowercase j 245		LATIN SMALL LETTER J
lowercase k 13		LATIN SMALL LETTER K
lowercase l 123		LATIN SMALL LETTER L
lowercase m 134		LATIN SMALL LETTER M
lowercase n 1345		LATIN SMALL LETTER N
lowercase o 135		LATIN SMALL LETTER O
lowercase p 1234		LATIN SMALL LETTER P
lowercase q 12345		LATIN SMALL LETTER Q
lowercase r 1235		LATIN SMALL LETTER R
lowercase s 234		LATIN SMALL LETTER S
lowercase t 2345		LATIN SMALL LETTER T
lowercase u 136		LATIN SMALL LETTER U
lowercase v 1236		LATIN SMALL LETTER V
lowercase w 2456		LATIN SMALL LETTER W
lowercase x 1346		LATIN SMALL LETTER X
lowercase y 13456		LATIN SMALL LETTER Y
lowercase z 1356		LATIN SMALL LETTER Z
punctuation \x00a0 0		NO-BREAK SPACE

# letters specific to Icelandic (though part of the Windows 1252 set)
uppercase \x00c1 167		LATIN CAPITAL LETTER A WITH ACUTE
uppercase \x00c6 3457		LATIN CAPITAL LETTER AE
uppercase \x00c9 23467		LATIN CAPITAL LETTER E WITH ACUTE
uppercase \x00cd 1267		LATIN CAPITAL LETTER I WITH ACUTE
uppercase \x00d0 1567		LATIN CAPITAL LETTER ETH
uppercase \x00d3 14567		LATIN CAPITAL LETTER O WITH ACUTE
uppercase \x00d6 2467		LATIN CAPITAL LETTER O WITH DIAERESIS
uppercase \x00da 124567		LATIN CAPITAL LETTER U WITH ACUTE
uppercase \x00dd 123467		LATIN CAPITAL LETTER Y WITH ACUTE
uppercase \x00de 12467		LATIN CAPITAL LETTER THORN
lowercase \x00e1 16		LATIN SMALL LETTER A WITH ACUTE
lowercase \x00e6 345		LATIN SMALL LETTER AE
lowercase \x00e9 2346		LATIN SMALL LETTER E WITH ACUTE
lowercase \x00ed 126		LATIN SMALL LETTER I WITH ACUTE
lowercase \x00f0 156		LATIN SMALL LETTER ETH
lowercase \x00f3 1456		LATIN SMALL LETTER O WITH ACUTE
lowercase \x00f6 246		LATIN SMALL LETTER O WITH DIAERESIS
lowercase \x00fa 12456		LATIN SMALL LETTER U WITH ACUTE
lowercase \x00fd 12346		LATIN SMALL LETTER Y WITH ACUTE
lowercase \x00fe 1246		LATIN SMALL LETTER THORN
