# This table contains braille codes and rules for Marathi Grade 1 and includes English grade 1
#
# Copyright (C) 2014 National Institute for Visually Handicapped, 116, Rajpur Road, Dehradun, Uttrakhand, India
#
# 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 built and maintained under an activity of Braille Council of India
# Contributors: Dipendra Manocha, Sreeja, Dinesh Kaushal, Mesar Hameed
# Last updated on May 5, 2014
# To report any bugs or any suggestion, please write to d@saksham.org and sreeja.param@gmail.com

include devanagari.cti
include en-in-g1.ctb
