# liblouis: Norwegian Grade 0 Braille Table, uncontracted braille
#
#  Copyright (C) 2004-2008 ViewPlus Technologies, Inc. www.viewplus.com
#  Copyright (C) 2004-2006 JJB Software, Inc. www.jjb-software.com
#  Copyright (C) 2009 Lars Bjørndal <lars@lamasti.net>
#  Copyright (C) 2015 NLB Norwegian library of talking books and braille, http://www.nlb.no/
#
#  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 June 9, 2005 by Leon Ungier <Leon.Ungier@ViewPlus.com> with
# help and guidance from Lars Bjørndal <lars@lamasti.net>
# Updated June 2009 by Lars Bjørndal <lars@lamasti.net>
# Updated April 2015 by Jostein Austvik Jacobsen <jostein@nlb.com> and Ammar Usama <ammar.usama@nlb.no>

include digits8Dots.uti
include latinLetterDef6Dots.uti

space \s 0                   # blank x0020
space \x001b 1b              # escape character for html back-translation # dec 27

# With liblouisxml, use the following three lines instead:
space \t 9                   # tab x0009
space \x000D 0               # \r
space \x000A 0               # \n
space \x00A0 a               # NO-BREAK SPACE <noBreak> 0020 NON-BREAKING SPACE # dec 160

# Unicode space characters
space \x2000 0               # En Quad
space \x2001 0               # Em Quad
space \x2002 0               # En Space
space \x2003 0               # Em Space
space \x2004 0               # Three-Per-Em Space
space \x2005 0               # Four-Per-Em Space
space \x2006 0               # Six-Per-Em Space
space \x2007 0               # Figure Space
space \x2008 0               # Punctuation Space
space \x2009 0               # Thin Space

punctuation ! 235            # exclamation mark x0021
punctuation " 256            # double quote x0022
punctuation ' 5              # apostrophe x0027
punctuation ( 236            # left parenthesis x0028
punctuation ) 356            # right parenthesis x0029
punctuation , 2              # coma x002C
punctuation - 36             # hyphen-minus x002D
punctuation . 3              # point x002E
punctuation : 25             # colon x003A
punctuation ; 23             # semicolon x003B
punctuation ? 26             # question mark x003F
punctuation [ 12356          # left square bracket x005B
punctuation ] 23456          # right square bracket x005D
punctuation { 6-12356        # left curly bracket x007B
punctuation } 6-23456        # right curly bracket x007D
punctuation « 256            # left-pointing double angle quotation mark x00AB
punctuation » 256            # right-pointing double angle quotation mark x00BB
punctuation \x2010 36        # 8208 hyphen
punctuation \x2011 36        # 8209 non-breaking hyphen
punctuation \x2013 36-36     # en dash
punctuation \x2014 36-36     # em dash
punctuation \x2018 5         # 8216 smart single left quotation mark
punctuation \x2019 5         # 8217 smart single right quotation mark
punctuation \x201C 256       # 8220 smart opening double quote
punctuation \x201D 256       # 8221 smart closing double quote
punctuation \x201E 256       # 8222 smart double low quotation mark
punctuation \x201F 256       # 8223 smart double high reverse quotation mark
punctuation \x2026 3-3-3     # 8230 smart ellipsis

sign # 3456                  # number sign x0023
sign $ 256                   # dollar sign x0024
sign £ 123                   # pound sign
sign % 46-356                # percent sign x0025
sign ‰ 46-356-356            # per mille sign
sign & 346                   # ampersand z0026
sign * 35                    # asterisk x002A
sign @ 4                     # commercial at x0040
sign \\ 156                  # reverse solidus x005C
sign ^ 46                    # circumflex accent x005E (math power)
sign _ 456                   # low line x005F
sign ` 45                    # grave accent x0060
sign \x00AF 45               # macron
sign \x0304 45               # combining macron
sign | 123456                # vertical line x007C
sign ~ 1456                  # tilde x007E
sign \x0080 15-136-1235-135  # Euro sign x0080
sign ¢ 4-14                  # cent sign x00A2
sign £ 45-123                # pound sign x00A3
sign ¤ 236-134-356           # currency sign x00A4
sign ¥ 45-13456              # yen sign x00A5
sign § 346                   # section sign x00A7
sign © 236-14-356            # copyright x00A9
sign ® 236-1235-356          # Registered trademark
sign ™ 236-2345-356          # Trademark
sign ° 5-356                 # degree sign x00B0
sign ² 4-6-126               # superscript 2 sign x00B2
sign ³ 4-6-146               # superscript 3 sign x00B3
sign \x00B4 4                # acute sign dec-180
sign ¹ 1-27                  # superscript 1 sign x00B9
sign \x20AC 26               # Euro sign x0080
sign ■ 123456                # Filled square
sign □ 123456                # Empty square
sign ● 2356                  # Filled circle
sign ○ 2356                  # Empty circle
sign • 2356                  # Bullet
sign ß 35-234                # Latin Small Letter Sharp S

uplow Αα 1                   # alpha
uplow Ββ 12                  # beta
uplow Γγ 1245                # gamma
uplow Δδ 145                 # delta
uplow Εε 15                  # epsilon
uplow Ζζ 1356                # zeta
uplow Ηη 5                   # eta
uplow Θθ 4                   # theta
uplow Ιι 24                  # iota
uplow Κκ 13                  # kappa
uplow Λλ 123                 # lambda
uplow Μμ 134                 # my
uplow Νν 1345                # ny
uplow Ξξ 1346                # ksi
uplow Οο 135                 # omikron
uplow Ππ 1234                # pi
uplow Ρρ 1235                # rho
uplow Σς 234                 # sigma
uplow Ττ 2345                # tau
uplow Υυ 136                 # ypsilon
uplow Φφ 124                 # fi
uplow Χχ 12346               # khi
uplow Ψψ 13456               # psi
uplow Ωω 2456                # omega

uplow \x00C8\x00E8 2346      # e with grave è x00C8 / 00E8
uplow \x00C9\x00E9 123456    # e with acute é x00C9 / 00E9
uplow \x00CA\x00EA 126       # e with circumflex x00CA / 00EA
uplow \x010C\x010D 146       # c with caron x00CE / 00EE
uplow \x00CF\x00EF 34        # i with diaeresis x00CF / 00EF
uplow \x00D4\x00F4 46-135    # o with circumflex ô x00D4 / 00F4
uplow \x00CD\x00ED 126       # i with acute x00CD / 00ED
uplow \x00C6\x00E6 345       # æ x00C6 / 00E6
uplow \x00C1\x00E1 16        # a with acute x00C1 / 00E1
uplow Øø 246                 # o with stroke
uplow \X00DA\x00FA 12456     # u with acute x00DA / 00FA
uplow \x00DC\x00FC 1256      # u with diaeresis x00FC
uplow \x00DD\x00FD 12346     # y with acute x00FD
uplow Åå 16                  # A with ring above x00C5 / 00E5
uplow \x00C0\x00E0 12356     # a with grave x00C0 / 00E0
uplow \x00C2\x00E2 46-1      # a with circumflex x00C2 / 00E2
uplow Ää 345                 # A with diaeresis x00C4 / 00E4
uplow \x00C7\x00E7 12346     # c with cedilla ç x00C7 / 00E7
uplow \x00D5\x00F5 1456-135  # o with tilde x00D5 / 00F5
uplow Öö 246                 # O with diaeresis x00D6 / 00F6
uplow \x00D2\x00F2 346       # O with grave ò
uplow \x017D\x017E 2346      # z with caron
uplow \x01EA\x01EB 23456     # o with ogonek
uplow Đđ 1456                # d with stroke
uplow Ðð 156                 # Eth
uplow Ŋŋ 1246                # Eng
uplow Þþ 35-2345                # Thorn
uplow Üü 1245                # u with diaeresis
uplow Ŧŧ 1256                # t with stroke

math + 235                   # plus x002B
math / 34 solidus            # x002F
math < 246-3                 # less-than sign x003C
math = 2356                  # equal sign x003D
math > 135-2                 # greater-than sign x003E
math ¼ 6-16-34-1456          # vulgar fraction one quarter x00BC
math ½ 6-16-34-126           # vulgar fraction one half x00BD
math ¾ 6-126-34-1456         # vulgar fraction 3 quarters x00BE
math × 3                     # multiplication sign x00D7
math ÷ 25                    # division sign x00F7
math \x2013 36               # 8211 en dash (smart minus sign)
math √ 146                   # root sign

lowercase \x00F3 1456      # DEC 243 ó
lowercase \x00F4 4-135       # DEC 244 ô

undefined 26                 #sign used for undefined characters

# no space within mixed numbers like 1 1/2
# the swapcd rule is for compensating that the litdigit rule is not matched anymore
swapcd aslitdigit 1234567890 1,12,14,145,15,124,1245,125,24,245 # as defined in litdigits6Dots.uti
noback context [%aslitdigit$s.]$d."/"$d %aslitdigit

# Diacritic characters

include no-no-latinLetterDef6Dots_diacritics.uti
