#
# fontconfig/fc-lang/za.orth
#
# Copyright © 2009 Roozbeh Pournader
#
# Permission to use, copy, modify, distribute, and sell this software and its
# documentation for any purpose is hereby granted without fee, provided that
# the above copyright notice appear in all copies and that both that
# copyright notice and this permission notice appear in supporting
# documentation, and that the name of the author(s) not be used in
# advertising or publicity pertaining to distribution of the software without
# specific, written prior permission.  The author(s) make(s) no
# representations about the suitability of this software for any purpose.  It
# is provided "as is" without express or implied warranty.
#
# THE AUTHOR(S) DISCLAIM(S) ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
#
# Zhuang/Chuang (za)
#
# Sources:
# * http://www.omniglot.com/writing/zhuang.htm
# * http://www006.upp.so-net.ne.jp/FFS/zhuangyu_ch01.htm
# * http://en.wikipedia.org/wiki/Zhuang_language
#
# There is an older orthography with several uncommon letters that was
# reformed in 1986. In the 1986 orthography, just basic Latin letters are
# used.
#
# Some letters are not used. Apostrophe is used, but usage is comparable to
# usage in English.
#
0041-005A
0061-007A
