# liblouis: Character definitions for Icelandic 6-dot  tables
#
#  Copyright (C) 2010 INIB (Iceland National Institute for the Blind)
#
#  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 3 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/>.
#
#-------------------------------------------------------------------------------
#
#  Character definitions for Icelandic 6-dot tables
#
#  Version 2009-09-02
#  Birkir Gunnarsson birkir@midstod.is
#
#-------------------------------------------------------------------------------


# Icelandic characters, in Icelandic alphabetical order
uplow \x00C1\x00E1 16 # Áá, a acute
uplow \x00D0\x00F0 156 # Ðð, eth
uplow \x00C9\x00E9 2346 # Éé, e acute
uplow \x00CD\x00ED 126 # Íí, i acute 
uplow \x00D3\x00F3 1456 # Óó, o acute
uplow \x00DA\x00FA 12456 # Úú, u acute
uplow \x00DD\x00FD 12346 # Ýý, y acute
uplow \x00DE\x00FE 1246 # Þþ, thorn
uplow \x00C6\x00E6 345 # Ææ, ae
uplow \x00D6\x00F6 246 # Öö o umlaut

# ===== BASIC LATIN - 0000-007F ================================================

space         \x0009 0               #9     [CHARACTER TABULATION]
space         \x000A 0               #10    [LINE FEED (LF)]
space         \x000C 0               #12    [FORM FEED (FF)]
space         \x000D 0               #13    [CARRIAGE RETURN (CR)]

space         \x0020 0               #32    SPACE
punctuation   \x0021 236               #33    ! EXCLAMATION MARK
punctuation   \x0022 56               #34    " QUOTATION MARK
sign          \x0023 3456            #35    # NUMBER SIGN
sign          \x0024 45-124              #36    $ DOLLAR SIGN
sign          \x0025 46          #37    % PERCENT SIGN
sign          \x0026 346           #38    & AMPERSAND
punctuation   \x0027 5               #39    ' APOSTROPHE APOSTROPHE-QUOTE
punctuation   \x0028 236             #40    ( LEFT PARENTHESIS
punctuation   \x0029 356             #41    ) RIGHT PARENTHESIS
sign          \x002A 35              #42    * ASTERISK
math          \x002B 235             #43    + PLUS SIGN
punctuation   \x002C 2               #44    , COMMA
punctuation   \x002D 36              #45    - HYPHEN-MINUS
punctuation   \x002E 3               #46    . FULL STOP PERIOD
sign          \x002F 34             #47    / SOLIDUS SLASH

include litdigits6Dots.uti

punctuation   \x003A 25              #58    : COLON
punctuation   \x003B 23              #59    ; SEMICOLON
math          \x003C 5-246              #60    < LESS-THAN SIGN
math          \x003D 2356            #61    = EQUALS SIGN
math          \x003E 135-2              #62    > GREATER-THAN SIGN
punctuation   \x003F 26              #63    ? QUESTION MARK

include latinLetterDef6Dots.uti

sign          \x0060 4             #96    `  GRAVE ACCENT
punctuation   \x007B 6-12356           #123   {  LEFT CURLY BRACKET
sign          \x007C 456              #124   |  VERTICAL LINE
punctuation   \x007D 6-23456           #125   }  RIGHT CURLY BRACKET
sign          \x007E 45            #126   ~  TILDE
sign          \x007F 45-456             #127   [DELETE]
sign         \x2022 36 		Bullet
sign          \x0040 123456           #64    @  COMMERCIAL AT
punctuation   \x005B 12356          #91    [  LEFT SQUARE BRACKET
sign          \x005C 45-34            #92    \  REVERSE SOLIDUS
punctuation   \x005D 23456          #93    ]  RIGHT SQUARE BRACKET
sign          \x005F 45-36           #95    _  LOW LINE

# ===== LATIN-1 SUPPLEMENT: 0080-00FF ==========================================
sign          \x00A2 45-14            #162   ¢ CENT SIGN
sign          \x00A3 45-1234           #163   £ POUND SIGN
sign          \x00A4 45-1346               #164   ¤ CURRENCY SIGN
sign          \x00A5 45-13456         #165   ¥ YEN SIGN
sign          \x00A6 0-456-123-0     #166   ¦ BROKEN BAR
sign          \x00A7 45-346           #167   § SECTION SIGN
sign          \x00A9 236-14-356 #169   © COPYRIGHT SIGN
lowercase     \x00AA 4-1               #170   ª FEMININE ORDINAL INDICATOR
punctuation   \x00AB 45-236             #171   « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
sign          \x00AD 36               #173   ­ SOFT HYPHEN
sign          \x00AE 236-1235-356   #174 ® REGISTERED SIGN
sign          \x00B0 256           #176   ° DEGREE SIGN
math          \x00B1 235-36          #177   ± PLUS-MINUS SIGN
sign          \x00B5 45-134          #181   µ MICRO SIGN
lowercase     \x00BA 4-2             #186   º MASCULINE ORDINAL INDICATOR
punctuation   \x00BB 45-356             #187   » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
math          \x00D7 45-24             #215   × MULTIPLICATION SIGN
math          \x00F7 1256               #247   ÷ DIVISION SIGN

# ===== GENERAL PUNCTUATION: 2000-206F =========================================

punctuation   \x2013 36-36            #8211          EN DASH
punctuation   \x2014 6-36            #8212          EM DASH
punctuation   \x201D 23             #8221          RIGHT DOUBLE QUOTATION MARK
sign          \x2030 46-46      #8240    PER MILLE SIGN
sign          \x2031 46-46-46  #8241    PER TEN THOUSAND SIGN
sign          \x2032 4-35            #8242          PRIME
sign          \x2033 4-35-35         #8243          DOUBLE PRIME

# ===== CURRENCY SYMBOLS: 20A0-20CF ============================================

sign          \x20A0 45-15                           EURO-CURRENCY SIGN

# ===== ARROWS: 2190-21FF ======================================================

sign          \x2190 0-246-25-0           LEFTWARDS ARROW
sign          \x2192 0-25-135-0           RIGHTWARDS ARROW
sign          \x2194 0-246-25-135-0       LEFT RIGHT ARROW

# ===== MATHEMATICAL OPERATORS: 2200-22FF ======================================

math          \x2212 36              #8722   MINUS SIGN
math          \x2215 34              #8725   DIVISION SLASH
math          \x2217 35              #8727   ASTERISK OPERATOR
math          \x223C 45-25           #8764   TILDE OPERATOR
math          \x2245 45-25-25           #8773   APPROXIMATELY EQUAL TO
math          \x2259 26              #8793   ESTIMATES
math          \x2260 236-2356         #8800   NOT EQUAL TO
math          \x2261 2356-2356       #8801   IDENTICAL TO
math          \x2264 5-246-2356        #8804   LESS-THAN OR EQUAL TO
math          \x2265 135-2-2356        #8805   GREATER-THAN OR EQUAL TO
math          \x2266 246-2356        #8806   LESS-THAN OVER EQUAL TO
math          \x2267 135-2356        #8807   GREATER-THAN OVER EQUAL TO
math          \x22c5 3               #8901   DOT OPERATOR
math          \x22c6 3               #8902   STAR OPERATOR

# ===== Braille Indicators: ==================================================

numsign 3456  number sign
capsletter 6
begcapsword 6-6
endcapsword 6-6

emphclass italic
emphclass underline
emphclass bold

begemph italic 4-34
endemph italic 34-4

begemph bold 4-456
endemph bold 456-4

