#  Copyright (C) 2010 Leon Ungier <Leon.Ungier@ViewPlus.com>, 
#  Copyright (C) 2010 Samuel Thibault <samuel.thibault@ens-lyon.org>
#
#  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 John J. Boyer, director@chpi.org, www.chpi.org
#
# This table is built and maintained by Leon Ungier <Leon.Ungier@ViewPlus.com>
# with help and guidance from Mohammed R. Ramadan <mramadan@nattiq.com>
#
# Converted to liblouis table by Samuel Thibault <samuel.thibault@ens-lyon.org>

# generated by ttbtest
letter	\x0b82	56	TAMIL SIGN ANUSVARA
letter	\x0b83	6	TAMIL SIGN VISARGA
letter	\x0b85	1	TAMIL LETTER A
letter	\x0b86	345	TAMIL LETTER AA
letter	\x0b87	24	TAMIL LETTER I
letter	\x0b88	35	TAMIL LETTER II
letter	\x0b89	136	TAMIL LETTER U
letter	\x0b8a	1256	TAMIL LETTER UU
letter	\x0b8e	347	TAMIL LETTER E
letter	\x0b8f	15	TAMIL LETTER EE
letter	\x0b90	34	TAMIL LETTER AI
letter	\x0b92	2467	TAMIL LETTER O
letter	\x0b93	135	TAMIL LETTER OO
letter	\x0b94	246	TAMIL LETTER AU
letter	\x0b95	13	TAMIL LETTER KA
letter	\x0b99	346	TAMIL LETTER NGA
letter	\x0b9a	14	TAMIL LETTER CA
letter	\x0b9c	245	TAMIL LETTER JA
letter	\x0b9e	25	TAMIL LETTER NYA
letter	\x0b9f	23456	TAMIL LETTER TTA
letter	\x0ba3	3456	TAMIL LETTER NNA
letter	\x0ba4	2345	TAMIL LETTER TA
letter	\x0ba8	1345	TAMIL LETTER NA
letter	\x0ba9	56	TAMIL LETTER NNNA
letter	\x0baa	1234	TAMIL LETTER PA
letter	\x0bae	134	TAMIL LETTER MA
letter	\x0baf	13456	TAMIL LETTER YA
letter	\x0bb0	1235	TAMIL LETTER RA
letter	\x0bb1	12357	TAMIL LETTER RRA
letter	\x0bb2	123	TAMIL LETTER LA
letter	\x0bb3	1237	TAMIL LETTER LLA
letter	\x0bb4	12378	TAMIL LETTER LLLA
letter	\x0bb5	1236	TAMIL LETTER VA
letter	\x0bb6	146	TAMIL LETTER SHA
letter	\x0bb7	12346	TAMIL LETTER SSA
letter	\x0bb8	234	TAMIL LETTER SA
letter	\x0bb9	125	TAMIL LETTER HA
letter	\x0bbe	345	TAMIL VOWEL SIGN AA
letter	\x0bbf	24	TAMIL VOWEL SIGN I
letter	\x0bc0	35	TAMIL VOWEL SIGN II
letter	\x0bc1	136	TAMIL VOWEL SIGN U
letter	\x0bc2	1256	TAMIL VOWEL SIGN UU
letter	\x0bc6	347	TAMIL VOWEL SIGN E
letter	\x0bc7	15	TAMIL VOWEL SIGN EE
letter	\x0bc8	34	TAMIL VOWEL SIGN AI
letter	\x0bca	2467	TAMIL VOWEL SIGN O
letter	\x0bcb	135	TAMIL VOWEL SIGN OO
letter	\x0bcc	246	TAMIL VOWEL SIGN AU
letter	\x0bcd	4	TAMIL SIGN VIRAMA
letter	\x0be6	245	TAMIL DIGIT ZERO
letter	\x0be7	1	TAMIL DIGIT ONE
letter	\x0be8	12	TAMIL DIGIT TWO
letter	\x0be9	14	TAMIL DIGIT THREE
letter	\x0bea	145	TAMIL DIGIT FOUR
letter	\x0beb	15	TAMIL DIGIT FIVE
letter	\x0bec	124	TAMIL DIGIT SIX
letter	\x0bed	1245	TAMIL DIGIT SEVEN
letter	\x0bee	125	TAMIL DIGIT EIGHT
letter	\x0bef	24	TAMIL DIGIT NINE
