# liblouis: Hungarian Computer Braille table
#
# -----------
#-index-name: Hungarian, computer
#-display-name: Hungarian computer braille
#
#+locale:hu
#+type:computer
#+dots:8
#
# TODO: Please correct the metadata above. It is not meant to be
# accurate nor complete. It hasn't been verified by the table
# author yet. It is merely an attempt by the liblouis maintainers
# to get some sensible initial values in place.
#
# TODO: Please add a reference to official documentation about
# the implemented braille code. Preferably submit the documents
# to https://github.com/liblouis/braille-specs.
# -----------
#
#  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.uti
#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
nofor pass2 @67 @6-35
noback pass2 @67 @6-35
space	\s	0	SPACE
include braille-patterns.cti

undefined 26
