# liblouis: Hungarian Computer Braille table
#
#  Based on the Linux screenreader BRLTTY, copyright (C) 1999-2011 by the BRLTTY Team
#
#  Copyright (C) 2012 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 computer braille 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 boxes.ctb
include digits6DotsPlusDot6.uti
include latinLetterDef8Dots.uti
include spaces.ctb
#Uppercase and lowercase accented characters
uppercase	\x00c1	478	LATIN CAPITAL LETTER A WITH ACUTE
uppercase	\x00c4	4578	LATIN CAPITAL LETTER A WITH DIAERESIS
uppercase	\x00c9	1678	LATIN CAPITAL LETTER E WITH ACUTE
uppercase	\x00cd	3478	LATIN CAPITAL LETTER I WITH ACUTE
uppercase	\x00d3	24678	LATIN CAPITAL LETTER O WITH ACUTE
uppercase	\x00d6	1234578	LATIN CAPITAL LETTER O WITH DIAERESIS
uppercase	\x00da	34678	LATIN CAPITAL LETTER U WITH ACUTE
uppercase	\x00dc	1235678	LATIN CAPITAL LETTER U WITH DIAERESIS
uppercase	\x0150	1245678	LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
uppercase	\x0170	2345678	LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
lowercase	\x00e1	48	LATIN SMALL LETTER A WITH ACUTE
lowercase	\x00e4	458	LATIN SMALL LETTER A WITH DIAERESIS
lowercase	\x00e9	168	LATIN SMALL LETTER E WITH ACUTE
lowercase	\x00ed	348	LATIN SMALL LETTER I WITH ACUTE
lowercase	\x00f3	2468	LATIN SMALL LETTER O WITH ACUTE
lowercase	\x00f6	123458	LATIN SMALL LETTER O WITH DIAERESIS
lowercase	\x00fa	3468	LATIN SMALL LETTER U WITH ACUTE
lowercase	\x00fc	123568	LATIN SMALL LETTER U WITH DIAERESIS
lowercase	\x0151	124568	LATIN SMALL LETTER O WITH DOUBLE ACUTE
lowercase	\x0171	234568	LATIN SMALL LETTER U WITH DOUBLE ACUTE

#Punctuation simbols
punctuation	!	5	EXCLAMATION MARK
punctuation	"	4	QUOTATION MARK
punctuation	\x0023	3456	NUMBER SIGN
punctuation	$	46	DOLLAR SIGN
punctuation	%	123456	PERCENT SIGN
punctuation	&	12346	AMPERSAND
punctuation	'	6	APOSTROPHE
punctuation	(	236	LEFT PARENTHESIS
punctuation	)	356	RIGHT PARENTHESIS
punctuation	*	35	ASTERISK
punctuation	+	235	PLUS SIGN
punctuation	,	2	COMMA
punctuation	-	36	HYPHEN-MINUS
punctuation − 36	Added u+2212 simbol
punctuation	.	3	FULL STOP
punctuation	/	256	SOLIDUS
punctuation	:	25	COLON
punctuation	;	23	SEMICOLON
punctuation	<	56	LESS-THAN SIGN
punctuation	=	2356	EQUALS SIGN
punctuation	>	45	GREATER-THAN SIGN
punctuation	?	26	QUESTION MARK
punctuation	@	3457	COMMERCIAL AT
punctuation	[	123567	LEFT SQUARE BRACKET
punctuation	\\	347	REVERSE SOLIDUS
punctuation	]	234567	RIGHT SQUARE BRACKET
punctuation	^	23467	CIRCUMFLEX ACCENT
punctuation	_	4567	LOW LINE
punctuation	`	345	GRAVE ACCENT
punctuation	{	12356	LEFT CURLY BRACKET
punctuation	|	34	VERTICAL LINE
punctuation	}	23456	RIGHT CURLY BRACKET
punctuation	~	2346	TILDE
letter	\x007f	456	DELETE
punctuation	\x00a0	0	NO-BREAK SPACE
punctuation	\x2580	1245	UPPER HALF BLOCK
punctuation	\x2582	78	LOWER ONE QUARTER BLOCK
punctuation	\x2584	3678	LOWER HALF BLOCK
punctuation	\x2586	235678	LOWER THREE QUARTERS BLOCK
punctuation	\x2588	12345678	FULL BLOCK
punctuation § 357
punctuation – 36
punctuation … 3-3-3
sign € 457
sign • 6-35
space	\s	0	SPACE
include braille-patterns.cti
undefined 26
