# liblouis: Norwegian literary braille, 6-dot, uncontracted
#
#-name: Norsk litterær punktskrift, 6-punkt, fullskrift
#-display-name: Norwegian 6-dot uncontracted braille
#
#+locale:no
#+type:literary
#+direction:both
#+contraction:no
#+dots:6
#+grade:0
#
#  Copyright (C) 2005 ViewPlus Technologies, Inc. www.viewplus.com
#  Copyright (C) 2009-2019 Lars Bjørndal <lars@lamasti.net>
#  Copyright (C) 2015-2018 NLB Norwegian library of talking books and braille, http://www.nlb.no/
#
#-copyright: 2005, ViewPlus Technologies, Inc. www.viewplus.com
#-copyright: 2009-2019, Lars Bjørndal
#-copyright: 2015-2018, Norwegian library of talking books and braille (NLB), http://www.nlb.no/
#-license: LGPLv2.1
#
# 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>
#
#-author-name: Leon Ungier
#-author-email: Leon.Ungier@ViewPlus.com
#-author-url: www.viewplus.com
#
#-author-name: Lars Bjørndal
#-author-email: lars@lamasti.net
#-author-url: https://github.com/larsbjorndal
#
#-author-name: Jostein Austvik Jacobsen
#-author-email: jostein@nlb.no
#-author-url: https://github.com/josteinaj
#
#-author-name: Ammar Usama
#-author-email: ammar.usama@nlb.no
#-author-url: https://github.com/usama49
#
# Official norwegian braille specifications are collected here:
# http://liblouis.org/braille-specs/norwegian
# This specific table is based on the document "Håndbok i litterær punktskrift".
#
#  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/>.
#

include no-no.dis
include no-no-chardefs6.uti
include litdigits6Dots.uti
include braille-patterns.cti # unicode braille

#lowword \x2013 36-36         # make double when surrounded by white spaces
#lowword - 36-36              # make double when hyphen surrounded by white spaces

numsign 3456
capsletter 6                    # single capital letter indicator
begcapsword 6-6                  # a block of consecutive capital letters indicator
noback endcapsword 56                   # TODO

emphclass italic
emphclass underline
emphclass bold

begemph italic 23
begemph bold 6-3
begemph underline 456

noback endemph italic 56
endemph bold 6-3
endemph underline 456

midnum , 2
midnum . 3
midnum + 235
midnum - 36-36-3456
midnum / 34-3456
midnum : 25
midnum = 2356

endnum # 56-3456
always # 3456
endnum a 56-1
endnum b 56-12
endnum c 56-14
endnum d 56-145
endnum e 56-15
endnum f 56-124
endnum g 56-1245
endnum h 56-125
endnum i 56-24
endnum j 56-245

repeated ... 3-3-3           # points de suite
repeated --- 36-36-36
repeated ___ 456-456-456

# always \s--\s 36-36        # tiret
noback always ;\s; 0

begcomp 126
endcomp 345

# We have to redefine the letter æ here to prevent back translation of it to result in a space
uplow \x00C6\x00E6 345       # æ x00C6 / 00E6
# URLs
compbrl ://
compbrl www.
compbrl .com
compbrl .edu
compbrl .gov
compbrl .mil
compbrl .net
compbrl .org
compbrl .no
compbrl .nu
compbrl .se
compbrl .dk
compbrl .fi
compbrl .ini
compbrl .doc
compbrl .docx
compbrl .xml
compbrl .xsl
compbrl .htm
compbrl .html
compbrl .tex
compbrl .txt
compbrl .gif
compbrl .jpg
compbrl .png
compbrl .wav
compbrl .mp3
compbrl .m3u
compbrl .tar
compbrl .gz
compbrl .bz2
compbrl .zip

# Fix input where less than / greater than already are surrounding the
# URL / email address.
noback pass2 @126-246-3 @126
noback pass2 @135-2-345 @345

# subscript
# ---------

emphclass sub
emphletter sub 16
begemph sub 16-236
endemph sub 356

digit ₀ 245a
digit ₁ 1a
digit ₂ 12a
digit ₃ 14a
digit ₄ 145a
digit ₅ 15a
digit ₆ 124a
digit ₇ 1245a
digit ₈ 125a
digit ₉ 24a

# ₊ ₋ ₌ ₍ ₎ ₐ ₑ ₒ ₓ ₔ ⱼ ᵢ ᵣ ᵤ ᵥ ᵦ ᵧ ᵨ ᵩ ᵪ

class sub ₀₁₂₃₄₅₆₇₈₉

noback pass2 %sub%sub. @16-236*
noback pass2 %sub @16*
noback pass3 %sub%sub. *@356

# fix order of sub sign and number sign
noback pass3 @3456-16-236 @16-236-3456
noback pass3 @3456-16 @16-3456

noback pass4 @245a  @245  # ₀
noback pass4 @1a    @1    # ₁
noback pass4 @12a   @12   # ₂
noback pass4 @14a   @14   # ₃
noback pass4 @145a  @145  # ₄
noback pass4 @15a   @15   # ₅
noback pass4 @124a  @124  # ₆
noback pass4 @1245a @1245 # ₇
noback pass4 @125a  @125  # ₈
noback pass4 @24a   @24   # ₉

# superscript
# -----------

emphclass super
emphletter super 46
begemph super 46-236
endemph super 346

digit ⁰ 245b
digit ¹ 1b
digit ² 12b
digit ³ 14b
digit ⁴ 145b
digit ⁵ 15b
digit ⁶ 124b
digit ⁷ 1245b
digit ⁸ 125b
digit ⁹ 24b

# ⁱ ⁺ ⁻ ⁼ ⁽ ⁾ ⁿ ª º ⱽ ᴮ ᴯ ᴰ ᴱ ᴲ ᴳ ᴴ ᴵ ᴶ ᴷ ᴸ ᴹ ᴺ ᴻ ᴼ ᴽ ᴾ ᴿ ᵀ ᵁ ᵂ ᵃ ᵄ ᵅ ᵆ ᵇ ᵈ ᵉ ᵊ ᵋ ᵌ ᵍ ᵏ ᵐ ᵑ ᵒ ᵓ ᵖ ᵗ ᵘ ᵚ ᵛ ᵝ ᵞ ᵟ ᵠ ᵡ

class super ⁰¹²³⁴⁵⁶⁷⁸⁹

noback pass2 %super%super. @46-236*
noback pass2 %super @46*
noback pass3 %super%super. *@356

# fix order of super sign and number sign
noback pass3 @3456-46-236 @46-236-3456
noback pass3 @3456-46 @46-3456

noback pass4 @245b  @245  # ⁰
noback pass4 @1b    @1    # ¹
noback pass4 @12b   @12   # ²
noback pass4 @14b   @14   # ³
noback pass4 @145b  @145  # ⁴
noback pass4 @15b   @15   # ⁵
noback pass4 @124b  @124  # ⁶
noback pass4 @1245b @1245 # ⁷
noback pass4 @125b  @125  # ⁸
noback pass4 @24b   @24   # ⁹

# 9.6 Percent/promille
noback context [$s]"%" ?
noback context [$s]"‰" ?
noback context "%"[")"] @6-356
noback context "‰"[")"] @6-356

# 11.3 Pound sign
noback joinnum \x00A3 123
