# liblouis: Hungarian Grade 1 table
#
#  Copyright (C) 2011-2017 Attila Hammer from IT Foundation for the Visually Impaired - Hungary. www.infoalap.hu
#
#  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/>.
#
#  Maintained by Attila Hammer  hammer.attila@infoalap.hu
#
# If you found bugs with hungarian grade1 table, report it with following address:
# Attila Hammer <hammer.attila@infoalap.hu
#If you have a Launchpad account, report table related requests with following bug tracker address: https://bugs.launchpad.net/belin
include hu-backtranslate-correction.dis
include hu-chardefs.cti
include hu-exceptionwords.cti
include braille-patterns.cti

#Braille indicators
numsign 3456
capsletter 46
begcapsword 46-46
emphclass italic
emphclass underline
emphclass bold
begemph italic 356
endemph italic  236
begemph bold 356
endemph bold 236
begemph underline 356
endemph underline 236
begcomp 456-346
endcomp 456-156
midnum : 3
midnum - 36-3456
hyphen - 36
decpoint , 2
midnum . 3-3456
endnum . 3
endnum – 36-36
#Following part implementing the new braille standard changes
#When some punctuation character have after end of numbers, need add a dot6 prefix before the punctuation character dots
endnum : 6-25
endnum ? 6-26
endnum ; 6-23
endnum ! 6-235
endnum " 6-236

always . 3
always ' 6-3
postpunc . 256
postpunc ; 23
word ; 23
midnum : 25
postpunc : 25
always : 25
always ! 235
endnum . 3
always • 6-35
# literary forms of the decimal digits
include litdigits6Dots.uti

#Special letter replacements
always cs 146	General need replacing cs letters with a combined dot combination
always ccs 146-146	General need replacing ccs letters with a combined dot combination
always csz 14-156
always cszs 146-345
always ccsz 14-14-156
always gy 1456	General need replacing gy letters with a combined dot combination
always ggy 1456-1456	General need replacing ggy letters with a combined dot combination
always ly 456
always lly 456-456	General need replacing ly letters with a combined dot combination
always ny 1246	General need replacing ny letters with a combined dot combination
always nny 1246-1246	General need replacing nny letters with a combined dot combination
always ty 1256	General need replacing ty letter pairs with a combined dot combination
always tty 1256-1256		General need replacing ty letter pairs with a combined dot combination combined dot combination
always sz 156	General need replacing sz letters with a combined dot combination
always ssz 156-156
always zsz 126-156
always zszs 345-345
always zs 345	General need replacing zs letters with a combined dot combination
always zzs 345-345	General need replacing zs letters with a combined dot combination

#Special punctuation simbols
prepunc " 236	Opening quotation simbol
postpunc " 356	Closing quotation simbol
prepunc « 236
postpunc » 356
prepunc » 236
postpunc « 356
always " 236	Need this rule to present one left quotation mark if the user firsttyping the " character
prepunc ( 2346	Opening left parenthese
postpunc ) 1356	Closing right parenthese
always ( 2346	Need this rule to the user always see 2346 dot combination if type first ( character a text
always ) 1356	Need this rule to the user always see 2346 dot combination if type first ) character a text
prepunc « 236
postpunc » 356
prepunc ‘ 236
postpunc ’ 356
prepunc ‚ 236
postpunc ‚ 356
prepunc “ 236
prepunc ” 236
postpunc ” 356
prepunc „ 236
postpunc „ 356
prepunc < 5-13
postpunc > 46-2

#Other exceptions With need marking different dot combination
always Q 12346
always Z 126
always # 123456
always $ 5-145
always % 3456-245-356
always ~ 5-2345
always < 5-13
always > 46-2
always / 5-2
always | 45
always { 5-2346
always } 5-1356
always [ 46-2346
always ] 46-1356
always \\ 16
always ^ 2346
always ` 4
always Æ 1
always lyú 456-346
always lysz 456-156
space \x000c 0
space \x001b 1b
space \e 1b
space \f 0
always ä 5-1
noback context $l$p["–"] @36-36
noback context $l["–"] @36-36
noback always \\_ 6 letter sign before Roman page numbers
noback pass2 @3456-356 @356-3456
undefined 26
