# liblouis: UK Maths  Table for mathematics
#
#  Based on the Linux screenreader BRLTTY, copyright (C) 1999-2006 by
#  The BRLTTY Team
#
#  Copyright (C) 2004-2008 ViewPlus Technologies, Inc. www.viewplus.com
#  Copyright (C) 2004-2006 JJB Software, Inc. www.jjb-software.com
#
#  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 ukmaths_single_cell_defs.cti
include ukmaths_unicode_defs.cti
# grouping definitions are character-definition rules
grouping mrow \x0001\x0002 1e,2e
grouping mfrac \x0003\x0004 3e,4e
grouping brackets \x0005\x0006 126,345

# Braille indicators
numsign 3456
capsletter 6
begcapsword 6-6
endcapsword 6-3
emphclass italic
emphclass underline
emphclass bold
emphletter italic 4
emphletter bold 4

# litdigit opcodes must be in this table, not the single-cell table.
include litdigits6Dots.uti

# No letsign but endnum for letters a-j.
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

# Ordinary translation entries
always / 456-34
always = a-56-2356
always + a-56-235
always > a-135-a
always < a-246-a
always % 25-1234
always $ 256
always & 4-12346
always ~ 45-156
always ! 6-236
prepunc " 236
postpunc " 356
postpunc ' 3
always '' 36
always ''' 36-3
midnum , 3
postpunc , 6-2
always , 3
always # 35-2345 print number sign before number
always ( 126
always ) 345
noback pass2 [{mrow]@126/@345}mrow ?
noback pass2 @126[{mrow]/}mrow@345 ?
decpoint . 2
always ... 3-3-3
hyphen - 36
postpunc . 6-256
postpunc ; 6-23
postpunc : 6-25
postpunc ? 6-236
endnum % 4-356
midnum * 4-16
repeated \s 0
repeated \x00a0 a

# swap opcodes for replacement and testing.
swapcd dropped 0123456789 356,2,23,25,256,26,235,2356,236,35
swapdd upnum 245,1,12,14,145,15,124,1245,125,24 0,0,0,0,0,0,0,0,0,0
swapdd lownum 356,2,23,25,256,26,235,2356,236,35 0,0,0,0,0,0,0,0,0,0

# now we start doing the real work

# Correction rules
noback correct {mrow$ld1-20[}mrow] ?
noback correct "\eb"[{mrow]/}mrow"\ee" ?
noback context "\eb"[]$l"\ee" @56
noback context "\eb"[]","$l"\ee" @56
noback context []"@456-34"$d1-10}mfrac #1=1
# context []"@456-34"$d1-10}mfrac #1=1
noback context []"@346"$d1-10"@12456" #1=1
noback context []"@16"$d1-10"@12456" #1=1
# context []"@146"$d1-10 #1=1
noback context #1=1$d1-10 #1=0%dropped 

# exactdots opcodes for dot patterns in ukmaths.sem
exactdots @126
exactdots @345
exactdots @123456
exactdots @346
exactdots @16
exactdots @23456
exactdots @34
exactdots @456-34
exactdots @12456
exactdots @146

# Function names and abbreviations
word cos 1246-14
word grad 1246-1245
word cosh 1246-125-14
word sinh 1246-125-234
word tanh 1246-125-2345
word cosech 1246-125-126
word coth 1246-125-1256
word sech 1246-125-36
word log 1246-123
word sin 1246-234
word tan 1246-2345
word cosec 1246-126
word curl 1246-146
word div 1246-1456
word cot 1246-1256
word arccosh 1246-236-14
word arcsinh 1246-236-234
word arctanh 1246-236-2345
word arccosech 1246-236-126
word arccoth 1246-236-1256
word arcsech 1246-236-36
word sec 1246-36
word arccos 1246-4-14
word antilog 1246-4-123
word arcsin 1246-4-234
word arctan 1246-4-2345
word arccosec 1246-4-126
word arccot 1246-4-1256
word arcsec 1246-4-25
word colog 1246-45-123

# pass2 processing
noback pass2 [@3456]%lownum1-10 ?
noback pass2 [@456-34-3456]%lownum1-10 ?

# pass3 processing
noback pass3 @346%lownum1-10[@12456] ?
noback pass3 @16[%lownum1-10]@12456 *
noback pass3 {mfrac[@3456%upnum1-10%lownum1-10]}mfrac *
