# liblouis: Hebrew Table
# 
#  Copyright (C) 1995-2009 by The BRLTTY Developers.
#  Copyright (C) 2009 Samuel Thibault <samuel.thibault@ens-lyon.org>
#  Copyright (C) 2012 Mesar Hameed <mesar.hameed@gmail.com>
#  Copyright (C) 2014 Adi Kushnir <adikushnir@gmail.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/>.
#
# This table is based on the new unified Hebrew Braille code standard
# that was put together on January 2014 after a conference with all of
# the specialists in this field in Israel. It includes improved
# representation of Hebrew letters, special letters that are called
# Nikud, and punctuation symbols. The old Braille standard is not
# relevant any more.

# generated by ttbtest
space	\s	0	# SPACE
punctuation	!	2358	# EXCLAMATION MARK
punctuation	"	5	# QUOTATION MARK
punctuation	#	3456	# NUMBER SIGN
punctuation	$	1246	# DOLLAR SIGN
punctuation	%	1467	# PERCENT SIGN
punctuation	&	2346	# AMPERSAND
punctuation	'	3	# APOSTROPHE
punctuation	(	12356	# LEFT PARENTHESIS
punctuation	)	23456	# RIGHT PARENTHESIS
punctuation	*	16	# ASTERISK
punctuation	+	346	# PLUS SIGN
punctuation	,	6	# COMMA
punctuation	-	36	# HYPHEN-MINUS
punctuation	.	46	# FULL STOP
punctuation	/	34	# SOLIDUS
include loweredDigits6Dots.uti
punctuation	:	156	# COLON
punctuation	;	56	# SEMICOLON
punctuation	<	126	# LESS-THAN SIGN
punctuation	=	123456	# EQUALS SIGN
punctuation	>	345	# GREATER-THAN SIGN
punctuation	?	268	# QUESTION MARK
punctuation	@	47	# COMMERCIAL AT
uppercase	A	17	# LATIN CAPITAL LETTER A
uppercase	B	127	# LATIN CAPITAL LETTER B
uppercase	C	147	# LATIN CAPITAL LETTER C
uppercase	D	1457	# LATIN CAPITAL LETTER D
uppercase	E	157	# LATIN CAPITAL LETTER E
uppercase	F	1247	# LATIN CAPITAL LETTER F
uppercase	G	12457	# LATIN CAPITAL LETTER G
uppercase	H	1257	# LATIN CAPITAL LETTER H
uppercase	I	247	# LATIN CAPITAL LETTER I
uppercase	J	2457	# LATIN CAPITAL LETTER J
uppercase	K	137	# LATIN CAPITAL LETTER K
uppercase	L	1237	# LATIN CAPITAL LETTER L
uppercase	M	1347	# LATIN CAPITAL LETTER M
uppercase	N	13457	# LATIN CAPITAL LETTER N
uppercase	O	1357	# LATIN CAPITAL LETTER O
uppercase	P	12347	# LATIN CAPITAL LETTER P
uppercase	Q	123457	# LATIN CAPITAL LETTER Q
uppercase	R	12357	# LATIN CAPITAL LETTER R
uppercase	S	2347	# LATIN CAPITAL LETTER S
uppercase	T	23457	# LATIN CAPITAL LETTER T
uppercase	U	1367	# LATIN CAPITAL LETTER U
uppercase	V	12367	# LATIN CAPITAL LETTER V
uppercase	W	24567	# LATIN CAPITAL LETTER W
uppercase	X	13467	# LATIN CAPITAL LETTER X
uppercase	Y	134567	# LATIN CAPITAL LETTER Y
uppercase	Z	13567	# LATIN CAPITAL LETTER Z
punctuation	[	2467	# LEFT SQUARE BRACKET
punctuation	\\	12567	# REVERSE SOLIDUS
punctuation	]	124567	# RIGHT SQUARE BRACKET
punctuation	^	457	# CIRCUMFLEX ACCENT
punctuation	_	4567	# LOW LINE
punctuation	`	4	# GRAVE ACCENT
lowercase	a	1	# LATIN SMALL LETTER A
lowercase	b	12	# LATIN SMALL LETTER B
lowercase	c	14	# LATIN SMALL LETTER C
lowercase	d	145	# LATIN SMALL LETTER D
lowercase	e	15	# LATIN SMALL LETTER E
lowercase	f	124	# LATIN SMALL LETTER F
lowercase	g	1245	# LATIN SMALL LETTER G
lowercase	h	125	# LATIN SMALL LETTER H
lowercase	i	24	# LATIN SMALL LETTER I
lowercase	j	245	# LATIN SMALL LETTER J
lowercase	k	13	# LATIN SMALL LETTER K
lowercase	l	123	# LATIN SMALL LETTER L
lowercase	m	134	# LATIN SMALL LETTER M
lowercase	n	1345	# LATIN SMALL LETTER N
lowercase	o	135	# LATIN SMALL LETTER O
lowercase	p	1234	# LATIN SMALL LETTER P
lowercase	q	12345	# LATIN SMALL LETTER Q
lowercase	r	1235	# LATIN SMALL LETTER R
lowercase	s	234	# LATIN SMALL LETTER S
lowercase	t	2345	# LATIN SMALL LETTER T
lowercase	u	136	# LATIN SMALL LETTER U
lowercase	v	1236	# LATIN SMALL LETTER V
lowercase	w	2456	# LATIN SMALL LETTER W
lowercase	x	1346	# LATIN SMALL LETTER X
lowercase	y	13456	# LATIN SMALL LETTER Y
lowercase	z	1356	# LATIN SMALL LETTER Z
punctuation	{	236	# LEFT CURLY BRACKET
punctuation	|	1256	# VERTICAL LINE
punctuation	}	12456	# RIGHT CURLY BRACKET
punctuation	~	45	# TILDE
punctuation	\x00a0	0	# NO-BREAK SPACE
punctuation	\x05b1	26	# HEBREW POINT HATAF SEGOL
punctuation	\x05b2	25	# HEBREW POINT HATAF PATAH
punctuation	\x05b3	345	# HEBREW POINT HATAF QAMATS
punctuation	\x05b4	24	# HEBREW POINT HIRIQ
punctuation	\x05b5	34	# HEBREW POINT TSERE
punctuation	\x05b6	15	# HEBREW POINT SEGOL
punctuation	\x05b7	14	# HEBREW POINT PATAH
punctuation	\x05b8	126	# HEBREW POINT QAMATS
punctuation	\x05b9	135	# HEBREW POINT HOLAM
punctuation	\x05bb	136	# HEBREW POINT QUBUTS
letter	\x05d0	1	# HEBREW LETTER ALEF
letter	\x05d1	1236	# HEBREW LETTER BET
letter	\x05d2	1245	# HEBREW LETTER GIMEL
letter	\x05d3	145	# HEBREW LETTER DALET
letter	\x05d4	125	# HEBREW LETTER HE
letter	\x05d5	2456	# HEBREW LETTER VAV
letter	\x05d6	1356	# HEBREW LETTER ZAYIN
letter	\x05d7	1346	# HEBREW LETTER HET
letter	\x05d8	2345	# HEBREW LETTER TET
letter	\x05d9	245	# HEBREW LETTER YOD
letter	\x05da	168	# HEBREW LETTER FINAL KAF
letter	\x05db	16	# HEBREW LETTER KAF
letter	\x05dc	123	# HEBREW LETTER LAMED
letter	\x05dd	1348	# HEBREW LETTER FINAL MEM
letter	\x05de	134	# HEBREW LETTER MEM
letter	\x05df	13458	# HEBREW LETTER FINAL NUN
letter	\x05e0	1345	# HEBREW LETTER NUN
letter	\x05e1	234	# HEBREW LETTER SAMEKH
letter	\x05e2	1246	# HEBREW LETTER AYIN
letter	\x05e3	1248	# HEBREW LETTER FINAL PE
letter	\x05e4	1234	# HEBREW LETTER PE
letter	\x05e5	23468	# HEBREW LETTER FINAL TSADI
letter	\x05e6	2346	# HEBREW LETTER TSADI
letter	\x05e7	12345	# HEBREW LETTER QOF
letter	\x05e8	1235	# HEBREW LETTER RESH
letter	\x05e9	146	# HEBREW LETTER SHIN
letter	\x05ea	1456	# HEBREW LETTER TAV
space	\x2002	0	# EN SPACE
space	\x2003	0	# EM SPACE
space	\x2004	0	# THREE-PER-EM SPACE
space	\x2005	0	# FOUR-PER-EM SPACE
space	\x2006	0	# SIX-PER-EM SPACE
punctuation	\x2007	0	# FIGURE SPACE
space	\x2008	0	# PUNCTUATION SPACE
space	\x2009	0	# THIN SPACE
space	\x200a	0	# HAIR SPACE
punctuation	\x202f	0	# NARROW NO-BREAK SPACE
space	\x205f	0	# MEDIUM MATHEMATICAL SPACE
letter	\xfb1d	35	# HEBREW LETTER YOD WITH HIRIQ
letter	\xfb2a	146	# HEBREW LETTER SHIN WITH SHIN DOT
letter	\xfb2b	156	# HEBREW LETTER SHIN WITH SIN DOT
letter	\xfb31	12	# HEBREW LETTER BET WITH DAGESH
letter	\xfb35	346	# HEBREW LETTER VAV WITH DAGESH
letter	\xfb3a	13	# HEBREW LETTER FINAL KAF WITH DAGESH
letter	\xfb3b	13	# HEBREW LETTER KAF WITH DAGESH
letter	\xfb43	1234	# HEBREW LETTER FINAL PE WITH DAGESH
letter	\xfb44	1234	# HEBREW LETTER PE WITH DAGESH
letter	\xfb4a	1256	# HEBREW LETTER TAV WITH DAGESH
