#
# Copyright (C) 1995-2009 by The BRLTTY Developers.
#
#  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/>.

# BRLTTY Text Table - Maltese
#
# Samuel Thibault <samuel.thibault@ens-lyon.org>
# 
# This table is based on the Unesco report on the progress of unification of
# braille writing « L'ÉCRITURE BRAILLE DANS LE MONDE », by Sir Clutha
# MACKENZIE: http://unesdoc.unesco.org/images/0013/001352/135251fo.pdf
# The document is dated 1954, so this table may be quite outdated.

# generated by ttbtest
space	\s	0	# SPACE
punctuation	!	235	# EXCLAMATION MARK
punctuation	"	2356	# QUOTATION MARK
punctuation	'	3	# APOSTROPHE
punctuation	(	236	# LEFT PARENTHESIS
punctuation	)	356	# RIGHT PARENTHESIS
punctuation	,	2	# COMMA
punctuation	-	36	# HYPHEN-MINUS
punctuation	.	256	# FULL STOP
include digits8Dots.uti
punctuation	:	25	# COLON
punctuation	;	23	# SEMICOLON
punctuation	?	236	# QUESTION MARK
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	134567	# 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
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	13456	# 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	\x00a0	0	# NO-BREAK SPACE
uppercase	\x010a	167	# LATIN CAPITAL LETTER C WITH DOT ABOVE
lowercase	\x010b	16	# LATIN SMALL LETTER C WITH DOT ABOVE
uppercase	\x0120	2457	# LATIN CAPITAL LETTER G WITH DOT ABOVE
lowercase	\x0121	245	# LATIN SMALL LETTER G WITH DOT ABOVE
uppercase	\x0126	1567	# LATIN CAPITAL LETTER H WITH STROKE
lowercase	\x0127	156	# LATIN SMALL LETTER H WITH STROKE
uppercase	\x017b	13567	# LATIN CAPITAL LETTER Z WITH DOT ABOVE
lowercase	\x017c	1356	# LATIN SMALL LETTER Z WITH DOT ABOVE
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
