# liblouis: Finnish 8 dot braille table
#
# Based on the braille contraction modules in BRLTTY
#
# Copyright (C) 1995-2004 by The BRLTTY Team.
# Copyright (C) 2004 ViewPlus Technologies, Inc., www.viewplustech.com
# Copyright (C) 2004 Computers to Help People, Inc., www.chpi.org

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

# This file 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 this file; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
# liblouis  comes with ABSOLUTELY NO WARRANTY.

# Maintained by John J. Boyer, director@chpi.org, www.chpi.org

# Created by Code Factory S.L.

include text_nabcc.dis

letter \x0002 1278
letter \x0003 1478
letter \x0004 14578
letter \x0005 2678
letter \x0006 12478
letter \x0007 124578
letter \x0008 12578
letter \x0009 3578
letter \x000A 24578
letter \x000B 1378
letter \x000C 12378
letter \x000D 13478
letter \x000E 134578
letter \x000F 23678
letter \x0010 123478
letter \x0011 1234578
letter \x0012 123578
letter \x0013 23478
letter \x0014 234578
letter \x0015 35678
letter \x0016 123678
letter \x0017 245678
letter \x0018 134678
letter \x0019 1345678
letter \x001A 135678
letter \x001B 345678
letter \x001C 12345678
letter \x001D 4678
letter \x001E 4578
letter \x001F 67

letter \x0020 0

space \x00a0 0
#space \t 0-0
#space \s 0

# non Capital characters 
letter a 1
letter b 12
letter c 14
letter d 145
letter e 15
letter f 124
letter g 1245
letter h 125
letter i  24
letter j  245
letter k 13
letter l 123
letter m 134
letter n 1345
letter o 135
letter p 1234
letter q 12345
letter r 1235
letter s 234
letter t  2345
letter u 136
letter v 1236
letter w  2456
letter x 1346
letter y 13456
letter z 1356

# capital characters
letter A 17
letter B 127
letter C 147
letter D 1457
letter E 157
letter F 1247
letter G 12457
letter H 1257
letter I  247
letter J  2457
letter K 137
letter L 1237
letter M 1347
letter N 13457
letter O 1357
letter P 12347
letter Q 123457
letter R 12357
letter S 2347
letter T  23457
letter U 1367
letter V 12367
letter W  24567
letter X 13467
letter Y 134567
letter Z 13567

# the decimal digits
include digits8Dots.uti



# punctuations 
punctuation ! 256
punctuation " 56
letter \x0023 3456
letter $ 2346
punctuation % 1456
punctuation & 12346
punctuation ' 5

punctuation ( 236
punctuation ) 356 
punctuation * 35
punctuation + 235
punctuation , 2 
letter - 36  
punctuation . 3
letter /  34

punctuation :  25
punctuation ;  23
punctuation < 126
punctuation = 2356
punctuation > 156
punctuation ? 26
letter @ 4

punctuation [   12356
letter \x005C  146 # escape for \
punctuation ]   23456
letter ^  457
letter _  346
letter `  1234568

punctuation {  1246
punctuation |   456
punctuation }  12456
letter ~  45
letter \x007f  7 


#Hex Dots Dec Char Description
letter \X00C2 24578 # 194Â Latin capital letter a with circumflex
letter \X00CA  1267 # 202Ê Latin capital letter e with circumflex
letter \X00CE  1467 # 206Î Latin capital letter i with circumflex
letter \X00D4  14567 # 212Ô Latin capital letter o with circumflex
letter \X00DB  1567 # 219Û Latin capital letter u with circumflex
letter \X00E2 1678 # 226â Latin small letter a with circumflex
letter \X00EA  12678 # 234ê Latin small letter e with circumflex
letter \X00EE  14678 # 238î Latin small letter i with circumflex
letter \X00F4  145678 # 244ô Latin small letter o with circumflex
letter \X00FB  15678 # 251û Latin small letter u with circumflex

# The 5 letters with a grave accent `) use the [6-0] dot combinations:

#Hex Dots Dec Char Description
letter \X00C0  235678 # 192À Latin capital letter a with grave
letter \X00C8  3578 # 200È Latin capital letter e with grave
letter \X00CC  57 # 204Ì Latin capital letter i with grave
letter \X00D2 578 # 210Ò Latin capital letter o with grave
letter \X00D9 35678 # 217Ù Latin capital letter u with grave
letter \X00E0  123568 # 224à Latin small letter a with grave
letter \X00E8  23468 # 232è Latin small letter e with grave
letter \X00EC  348 # 236ì Latin small letter i with grave
letter \X00F2 3468 # 242ò Latin small letter o with grave
letter \X00F9 234568 # 249ù Latin small letter u with grave

# The6 letters with an acute accent ') use the [a-f] dot combinations with
# dots 3 and 6 added:

#Hex Dots Dec Char Description
letter \X00C1 28 # 193Á Latin capital letter a with acute
letter \X00C9 1234567 # 201É Latin capital letter e with acute
letter \X00CD 258 # 205Í Latin capital letter i with acute
letter \X00D3 267 # 211Ó Latin capital letter o with acute
letter \X00DA 268 # 218Ú Latin capital letter u with acute
letter \X00DD 3568 # 221Ý Latin capital letter y with acute
letter \X00E1 168 # 225á Latin small letter a with acute
letter \X00E9 123456 # 233é Latin small letter e with acute
letter \X00ED 2478 # 237í Latin small letter i with acute
letter \X00F3 13578 # 243ó Latin small letter o with acute
letter \X00FA 13678 # 250ú Latin small letter u with acute
letter \X00FD 24568 # 253ý Latin small letter y with acute

# The 6 letters with a dieresis accent ") use the [f-j] dot combinations with
# dots 3 and 6 added, and the number sign because it fits the sequence
# reasonably well):

#Hex Dots Dec Char Description
letter \X00C4 3457 # 196Ä Latin capital letter a with diaeresis
letter \X00CB 2358 # 203Ë Latin capital letter e with diaeresis
letter \X00CF 23568 # 207Ï Latin capital letter i with diaeresis
letter \X00D6  2467 # 214Ö Latin capital letter o with diaeresis
letter \X00DC  12567 # 220Ü Latin capital letter u with diaeresis
letter \X00E4 345 # 228ä Latin small letter a with diaeresis
letter \X00EB 12468 # 235ë Latin small letter e with diaeresis
letter \X00EF 124568 # 239ï Latin small letter i with diaeresis
letter \X00F6  246 # 246ö Latin small letter o with diaeresis
letter \X00FC  1256 # 252ü Latin small letter u with diaeresis
letter \X00FF 134568 # 255ÿ Latin small letter y with diaeresis

# There is no uppercase y-dieresis in the  Latin 1 character set. The German
# lowercase double-s, which also doesn't have an uppercase counterpart in the
#  Latin 1 character set, uses its representation:

#Hex Dots Dec Char Description
letter \X00DF 34568 # 223ß Latin small letter sharp s

# The remaining accented letters are:

#Hex Dots Dec Char Description
letter \X00C3 3467 # 195Ã Latin capital letter a with tilde
letter \X00D1 2567 # 209Ñ Latin capital letter n with tilde
letter \X00D5  267 # 213Õ Latin capital letter o with tilde
letter \X00C5 167 # 197Å Latin capital letter a with ring above
letter \X00C7 1578 # 199Ç Latin capital letter c with cedilla
letter \X00D8 1567 # 216Ø Latin capital letter o with stroke
letter \X00C6 47 # 198Æ Latin capital letter ae
letter \X00D0 3567 # 208Ð Latin capital letter eth
letter \X00DE 2357 # 222Þ Latin capital letter thorn
letter \X00E3 13678 # 227ã Latin small letter a with tilde
letter \X00F1 13458 # 241ñ Latin small letter n with tilde
letter \X00F5  1358 # 245õ Latin small letter o with tilde
letter \X00E5 16 # 229å Latin small letter a with ring above
letter \X00E7 1234678 # 231ç Latin small letter c with cedilla
letter \X00F8 24678 # 248ø Latin small letter o with stroke
letter \X00E6 34578 # 230æ Latin small letter ae
letter \X00F0 23458 # 240ð Latin small letter eth
letter \X00FE 12348 # 254þ Latin small letter thorn
sign \X25CF 35
