# liblouis: Norwegian Grade 0 Braille Table, uncontracted braille
#
#  Copyright (C) 2005 ViewPlus Technologies, Inc. www.viewplus.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 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
endcapsword 56                   # TODO

emphclass italic
emphclass underline
emphclass bold

begemph italic 23
begemph bold 6-3
begemph underline 456

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

# 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

