#
# fontconfig/fc-lang/si.orth
#
# Copyright © 2002 Keith Packard
# 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.
#
# Sinhala/Sinhalese (si)
#
# The document SINHALA CHARACTER CODE FOR INFORMATION INTERCHANGE, PART 2:
# REQUIREMENTS AND METHODS OF TEST (SLS 1134:PART2:2007 UDC 003.035:003.336)
# describes three (3) levels of compliance for Unicode Sinhala fonts. The
# first level describes the minimum requirements for SLS certification. The
# third level includes the first and second level requirements and additional
# requirements.
#
# To get a copy of this document contact the Sri Lanka Standards Institution
# (http://www.slsi.lk/).
#
# The Unicode document: http://unicode.org/charts/PDF/U0D80.PDF
# describes the base for level 3 compliance.
#
# Level 1 compliance can be described as level 3 with the exclusion of:
# U+0D8F ILUYANNA (Independent Vowel)
# U+0D90 ILUUYANNA (Independent Vowel)
# U+0DDF GAYANUKITTA (Dependent Vowel)
# U+0DF3 DIGA GAYANUKITTA (Dependent Vowel)
# U+0DF4 KUNDDALIYA (Punctuation)
#
# Sinhala and SLS1134 experts can be contacted at:
# sinhala-technical at lists.sourceforge.net
# ltrl at ucsc.cmb.ac.lk
#
# Semi Consonants
0d82-0d83
# Independent Vowels
0d85-0d8d
# 0d8e IRUUYANNA (Level 1, but not in modern use)
# 0d8f ILUYANNA (Level 3)
# 0d90 ILUUYANNA (Level 3)
0d91-0d96
# Consonants
0d9a-0da5
#0da6 SANYAKA JAYANNA (Level 1, but not in modern use)
0da7-0db1
0db3-0dbb
0dbd
0dc0-0dc6
# Dependent Vowels
0dca
0dcf-0dd4
0dd6
0dd8-0dde
# 0ddf GAYANUKITTA (Level 3)
0df2
# 0df3 DIGA GAYANUKITTA (Level 3)
# Punctuation
# 0df4 KUNDDALIYA (Level 3)
