#mao#1#Maori Uncontracted#
# liblouis: Maori Braille Table
#
# -----------
#-index-name: Maori
#-display-name: Maori braille
#
#+locale:mi
#+type:literary
#+contraction:no
#+grade:1
#
# 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 World Braille Usage 2013
# <http://liblouis.org/braille-specs/world-braille-usage-third-edition.pdf>.
#
# Copyright (C) 2014, Greg Kearney, gkearney@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/>.

#include text_nabcc.dis All display opcodes

include en-ueb-g1.ctb

# Maori specific

always	ng	1345-1245
always	wh	156
uplow	Āā	456-1
uplow	Ēē	456-15
uplow	Īī	456-24
uplow	Ōō	456-135
uplow	Ūū	456-136
