Thai
Root Zone Label Generation Rules, 2nd Edition
Summary
| Version | 2 — Root Zone LGR |
|---|---|
| Date | |
| Tag |
und-Thai (Thai)
|
| Unicode | 6.3.0 |
| Scope | DNS root zone |
| Source file | lgr-2-thai-script-26jul17-en.xml (17.5kb) |
Description
Label Generation Rules for the Thai Script
Overview
This file contains Label Generation Rules (LGR) for the Thai script as would be appropriate for the Root zone. For more details on this LGR see "Proposal for a Thai Script Root Zone LGR [Proposal]". The format of this file follows [RFC 7940].
Repertoire
In addition to the 68 code points according to Section 5 “Repertoire” in [Proposal], three sequences have been defined. The sequence U+0E4D U+0E32 was defined to replace the disallowed U+0E33 (THAI CHARACTER SARA AM) and to facilitate implementation of WLE rule follows-consonant-tone as a context rule. The other two sequences were defined to restrict U+0E45 (THAI CHARACTER LAKKHANGYAO) from appearing in any context other than these sequences. Accordingly, while U+0E45 is not listed by itself it brings the total of distinct code points to 69.
The repertoire only includes code points used by languages that are actively written in the Thai script. The repertoire is based on [MSR-2], which is a subset of Unicode 6.3 [Unicode 6.3].
Read the rest of the description Show less
Each code point or range is tagged with the script or scripts that the code point is used with, and one or more references documenting sufficient justification for inclusion in the repertoire, see "References" below.
Variants
According to Section 6 "Variants", in "[Proposal]", this LGR defines no variants.
Character Classes
The Thai Script is an abugida in which consonant–vowel sequences are written as a unit: each unit is based on a consonant letter, and vowel, tone mark or diacritic notation are secondary. It is written with the combining marks stacked above or below the base consonant, like diacritics in European languages. However, although the concepts are quite similar, the implementations are significantly different.
There are 44 characters that are classified as consonants, code points from this subset have been given the tag "cons".
The 18 vowel symbols pronounced after a consonant are non-sequential: they can be located before (lv) , after (fv), above (av) or below (bv) the consonant, or in a combination of these positions, code points from this subset have been given the tag "fv1","fv2","fv3","av","bv","lv". There are three code point sequences defined that include vowels. (Code point sequences do not carry tag values; instead, for code point sequences the subset values are identified in comments).
There are 5 phonemic tones: mid, low, falling, high, and rising. These 5 tones are represented by 4 tone marks plus the absence of a mark. Code points from this subset have been given the tag "tone"
There are 3 diacritic symbols that have been included here and given the tag "ad". They differ in their frequency and purpose of usage. See also the discussion in section 5.4 in [Proposal].
- U+0E47 (MAITAIKHU) and U+0E4C (THANTHAKHAT) are commonly used for words in everyday communication
- U+0E4D (NIKHAHIT) is included because of its use to decompose U+0E33 (SARA AM, ําา) which is in common use. However, NIKHAHIT may also be used by itself.
The Thai GP decided to exclude a fourth above diacritic, U+0E4E (YAMAKKAN), from the LGR repertoire because it is rarely used in Modern Thai or even in older Pali manuscripts; it is more common to replace it with U+0E3A (PHINTHU). Moreover, excluding U+0E4E (YAMAKKAN) also eliminates the chance of confusion between U+0E4E (YAMAKKAN) and U+0E4C (THANTHAKHAT). Both look similar, are always placed at the same position in the word cell, and they are normally displayed in a small size.
Whole Label Evaluation (WLE) and Context Rules
Default Whole Label Evaluation Rules
The LGR includes the set of required default WLE rules and actions applicable to the Root Zone and defined in [MSR-2]. They are marked with ⍟.
Thai specific Rules
The rules provided in this LGR as described in Section 7 of [Proposal] reasonably restrict labels so that they conform to Thai syllable structure. These constraints are exclusively presented as context rules.
The rules are:
- A leading-vowel must precede a consonant - See Section 7.2 in [Proposal]
- A below-vowel must follow a consonant - See Section 7.3 in [Proposal]
- An above-vowel must follow a consonant - See Section 7.3 in [Proposal]
- A below diacritic must follow a consonant - See Section 7.3 in [Proposal]
- An above-diacritic MAITAIKHU must follow a consonant - See Section 7.3 in [Proposal]
- A vowel MAIHAN AKAT must be in between a consonant and either tone or consonant - See Section 7.4 in [Proposal]
- A vowel SARA A can follow a consonant, a tone or a vowel SARA AA - See Section 7.5 in [Proposal]
- A vowel SARA AA, or an above diacritic NIKHAHIT followed by a vowel SARA AA can follow a consonant or a tone - See Sections 7.6 and 7.9 in [Proposal]
- A tone-mark, THANTHAKHAT, NIKHAHIT can only follow a consonant, above-vowel or below-vowel - See section 7.7 and 7.8 in [Proposal]
Methodology and Contributors
For methodology and contributors, see Sections 4 and 8 of [Proposal].
References
Reference [0] refers to the Unicode Standard version in which corresponding code points were initially encoded. Reference [100] corresponds to a source given in [Proposal] for justifying the inclusion of for the corresponding code points. Single code point or ranges may have multiple source reference values.
In addition the following references are cited in this document:
- [MSR-2]
- Integration Panel, "Maximal Starting Repertoire — MSR-2 Overview and Rationale", 14 April 2015 https://www.icann.org/en/system/files/files/msr-2-overview-14apr15-en.pdf
- [Proposal]
- Proposal for a Thai Script Root Zone LGR, 25 May 2017, https://www.icann.org/en/system/files/files/proposal-thai-lgr-25may17-en.pdf
- [RFC 7940]
- Davies, K. and A. Freytag, "Representing Label Generation Rulesets Using XML", RFC 7940, August 2016, http://www.rfc-editor.org/info/rfc7940.
- [Unicode 6.3]
- The Unicode Consortium. The Unicode Standard, Version 6.3.0, (Mountain View, CA: The Unicode Consortium, 2013. ISBN 978-1-936213-08-5) http://www.unicode.org/versions/Unicode6.3.0/
For more details for references [100] and up and [0] and up refer to the Table of References below.
Repertoire
| Glyph | Code point | Tags and context | Variants |
|---|---|---|---|
| ก | U+0E01 THAI CHARACTER KO KAI 0 100 101 Thai |
|
|
| ข | U+0E02 THAI CHARACTER KHO KHAI 0 100 101 Thai |
|
|
| ฃ | U+0E03 THAI CHARACTER KHO KHUAT 0 100 101 Thai |
|
|
| ค | U+0E04 THAI CHARACTER KHO KHWAI 0 100 101 Thai |
|
|
| ฅ | U+0E05 THAI CHARACTER KHO KHON 0 100 101 Thai |
|
|
| ฆ | U+0E06 THAI CHARACTER KHO RAKHANG 0 100 101 Thai |
|
|
| ง | U+0E07 THAI CHARACTER NGO NGU 0 100 101 Thai |
|
|
| จ | U+0E08 THAI CHARACTER CHO CHAN 0 100 101 Thai |
|
|
| ฉ | U+0E09 THAI CHARACTER CHO CHING 0 100 101 Thai |
|
|
| ช | U+0E0A THAI CHARACTER CHO CHANG 0 100 101 Thai |
|
|
| ซ | U+0E0B THAI CHARACTER SO SO 0 100 101 Thai |
|
|
| ฌ | U+0E0C THAI CHARACTER CHO CHOE 0 100 101 Thai |
|
|
| ญ | U+0E0D THAI CHARACTER YO YING 0 100 101 Thai |
|
|
| ฎ | U+0E0E THAI CHARACTER DO CHADA 0 100 101 Thai |
|
|
| ฏ | U+0E0F THAI CHARACTER TO PATAK 0 100 101 Thai |
|
|
| ฐ | U+0E10 THAI CHARACTER THO THAN 0 100 101 Thai |
|
|
| ฑ | U+0E11 THAI CHARACTER THO NANGMONTHO 0 100 101 Thai |
|
|
| ฒ | U+0E12 THAI CHARACTER THO PHUTHAO 0 100 101 Thai |
|
|
| ณ | U+0E13 THAI CHARACTER NO NEN 0 100 101 Thai |
|
|
| ด | U+0E14 THAI CHARACTER DO DEK 0 100 101 Thai |
|
|
| ต | U+0E15 THAI CHARACTER TO TAO 0 100 101 Thai |
|
|
| ถ | U+0E16 THAI CHARACTER THO THUNG 0 100 101 Thai |
|
|
| ท | U+0E17 THAI CHARACTER THO THAHAN 0 100 101 Thai |
|
|
| ธ | U+0E18 THAI CHARACTER THO THONG 0 100 101 Thai |
|
|
| น | U+0E19 THAI CHARACTER NO NU 0 100 101 Thai |
|
|
| บ | U+0E1A THAI CHARACTER BO BAIMAI 0 100 101 Thai |
|
|
| ป | U+0E1B THAI CHARACTER PO PLA 0 100 101 Thai |
|
|
| ผ | U+0E1C THAI CHARACTER PHO PHUNG 0 100 101 Thai |
|
|
| ฝ | U+0E1D THAI CHARACTER FO FA 0 100 101 Thai |
|
|
| พ | U+0E1E THAI CHARACTER PHO PHAN 0 100 101 Thai |
|
|
| ฟ | U+0E1F THAI CHARACTER FO FAN 0 100 101 Thai |
|
|
| ภ | U+0E20 THAI CHARACTER PHO SAMPHAO 0 100 101 Thai |
|
|
| ม | U+0E21 THAI CHARACTER MO MA 0 100 101 Thai |
|
|
| ย | U+0E22 THAI CHARACTER YO YAK 0 100 101 Thai |
|
|
| ร | U+0E23 THAI CHARACTER RO RUA 0 100 101 Thai |
|
|
| ฤ | U+0E24 THAI CHARACTER RU 0 100 101 Thai |
|
|
| ฤๅ | U+0E24U+0E45 sequence of 2 THAI CHARACTER RU + THAI CHARACTER LAKKHANGYAO 0 100 101 fv2, Thai | ||
| ล | U+0E25 THAI CHARACTER LO LING 0 100 101 Thai |
|
|
| ฦ | U+0E26 THAI CHARACTER LU 0 100 101 Thai |
|
|
| ฦๅ | U+0E26U+0E45 sequence of 2 THAI CHARACTER LU + THAI CHARACTER LAKKHANGYAO 0 100 101 fv2, Thai | ||
| ว | U+0E27 THAI CHARACTER WO WAEN 0 100 101 Thai |
|
|
| ศ | U+0E28 THAI CHARACTER SO SALA 0 100 101 Thai |
|
|
| ษ | U+0E29 THAI CHARACTER SO RUSI 0 100 101 Thai |
|
|
| ส | U+0E2A THAI CHARACTER SO SUA 0 100 101 Thai |
|
|
| ห | U+0E2B THAI CHARACTER HO HIP 0 100 101 Thai |
|
|
| ฬ | U+0E2C THAI CHARACTER LO CHULA 0 100 101 Thai |
|
|
| อ | U+0E2D THAI CHARACTER O ANG 0 100 101 Thai |
|
|
| ฮ | U+0E2E THAI CHARACTER HO NOKHUK 0 100 101 Thai |
|
|
| ะ | U+0E30 THAI CHARACTER SARA A 0 100 101 Thai |
|
|
| ั | U+0E31 THAI CHARACTER MAI HAN-AKAT 0 100 101 Thai |
|
|
| า | U+0E32 THAI CHARACTER SARA AA 0 100 101 Thai |
|
|
| ิ | U+0E34 THAI CHARACTER SARA I 0 100 101 Thai |
|
|
| ี | U+0E35 THAI CHARACTER SARA II 0 100 101 Thai |
|
|
| ึ | U+0E36 THAI CHARACTER SARA UE 0 100 101 Thai |
|
|
| ื | U+0E37 THAI CHARACTER SARA UEE 0 100 101 Thai |
|
|
| ุ | U+0E38 THAI CHARACTER SARA U 0 100 101 Thai |
|
|
| ู | U+0E39 THAI CHARACTER SARA UU 0 100 101 Thai |
|
|
| ฺ | U+0E3A THAI CHARACTER PHINTHU 0 100 101 phinthu, Thai |
|
|
| เ | U+0E40 THAI CHARACTER SARA E 0 100 101 Thai |
|
|
| แ | U+0E41 THAI CHARACTER SARA AE 0 100 101 Thai |
|
|
| โ | U+0E42 THAI CHARACTER SARA O 0 100 101 Thai |
|
|
| ใ | U+0E43 THAI CHARACTER SARA AI MAIMUAN 0 100 101 Thai |
|
|
| ไ | U+0E44 THAI CHARACTER SARA AI MAIMALAI 0 100 101 Thai |
|
|
| ็ | U+0E47 THAI CHARACTER MAITAIKHU 0 100 101 maitaikhu, Thai |
|
|
| ่ | U+0E48 THAI CHARACTER MAI EK 0 100 101 Thai |
|
|
| ้ | U+0E49 THAI CHARACTER MAI THO 0 100 101 Thai |
|
|
| ๊ | U+0E4A THAI CHARACTER MAI TRI 0 100 101 Thai |
|
|
| ๋ | U+0E4B THAI CHARACTER MAI CHATTAWA 0 100 101 Thai |
|
|
| ์ | U+0E4C THAI CHARACTER THANTHAKHAT 0 100 101 thanthakhat, Thai |
|
|
| ํ | U+0E4D THAI CHARACTER NIKHAHIT 0 100 101 nikhahit, Thai |
|
|
| ํา | U+0E4DU+0E32 sequence of 2 THAI CHARACTER NIKHAHIT + THAI CHARACTER SARA AA 0 100 101 sara am sequence, Thai |
|
Character classes
Named sets of code points that the rules below refer to.
| Name | Definition |
|---|---|
above-vowel |
{tag av}
Any above vowel
|
below-vowel |
{tag bv}
Any below vowel
|
consonant |
{tag cons}
Any Consonant
|
sara-aa |
{tag sara-aa}
SARA AA
|
tone |
{tag tone}
Any tone mark
|
c-av-bv |
({consonant} ∪ {above-vowel} ∪ {below-vowel})
Any consonant, vowel-above or vowel-below
|
ct |
({consonant} ∪ {tone})
Any consonant or tone
|
ctaa |
({consonant} ∪ {tone} ∪ {sara-aa})
Any consonant, tone or sara-aa
|
Rules
Conditions evaluated against a whole label, or against the context around a
single code point. The notation borrows from regular expressions:
^ and $ anchor to the start and end of a label,
. matches any code point, (?= ) and
(?<= ) look ahead and behind, and * and
+ repeat. Two symbols are specific to rulesets:
◆ is the code point being tested, and
⟨name⟩ refers to another rule.
leading-combining-mark MSR default
Default WLE rule from MSR-2 matching labels with leading combining marks
^ ({gc:Mn} ∪ {gc:Mc})
Structure
-
^start -
({gc:Mn} ∪ {gc:Mc})union-
{gc:Mn}class -
{gc:Mc}class
-
Referenced by 1 definition
- action 1 (invalid)
precedes-consonant
WLE 7.2: check if current cp is preceding a consonant
◆ (?= {consonant} )
Structure
-
◆anchor -
(?= {consonant} )look-ahead-
{consonant}class
-
Referenced by 5 definitions
- context of U+0E40
- context of U+0E41
- context of U+0E42
- context of U+0E43
- context of U+0E44
follows-consonant
WLE 7.3: check if current cp is following a consonant
(?<= {consonant} ) ◆
Structure
-
(?<= {consonant} )look-behind-
{consonant}class
-
-
◆anchor
Referenced by 8 definitions
- context of U+0E34
- context of U+0E35
- context of U+0E36
- context of U+0E37
- context of U+0E38
- context of U+0E39
- context of U+0E3A
- context of U+0E47
between-consonant-and-ct
WLE 7.4: check if current cp is in between a consonant and either tone or consonant
(?<= {consonant} ) ◆ (?= {ct} )
Structure
-
(?<= {consonant} )look-behind-
{consonant}class
-
-
◆anchor -
(?= {ct} )look-ahead-
{ct}class
-
Referenced by 1 definition
- context of U+0E31
follow-consonant-tone-sara-aa
WLE 7.5: U+0E30 (THAI CHARACTER SARA A, ะ) can follow a consonant, a tone or U+0E32 (THAI CHARACTER SARA AA, า)
(?<= {ctaa} ) ◆
Structure
-
(?<= {ctaa} )look-behind-
{ctaa}class
-
-
◆anchor
Referenced by 1 definition
- context of U+0E30
follows-consonant-tone
WLE 7.6, 7.9: check if current cp is following a consonant or a tone
(?<= {ct} ) ◆
Structure
-
(?<= {ct} )look-behind-
{ct}class
-
-
◆anchor
Referenced by 2 definitions
- context of U+0E32
- context of U+0E4D U+0E32
follows-consonant-av-bv
WLE 7.7, 7.8 : A tone-mark, THANTHAKHAT, NIKAHIT can only follow a consonant, above-vowel or below-vowel
(?<= {c-av-bv} ) ◆
Structure
-
(?<= {c-av-bv} )look-behind-
{c-av-bv}class
-
-
◆anchor
Referenced by 6 definitions
- context of U+0E48
- context of U+0E49
- context of U+0E4A
- context of U+0E4B
- context of U+0E4C
- context of U+0E4D
Actions
Actions are evaluated in the order shown. The first action whose conditions match determines the disposition of the label.
| # | Disposition | Conditions |
|---|---|---|
| 1 |
invalid
|
label matches leading-combining-mark labels with leading combining marks are invalid MSR default |
| 2 |
invalid
|
any variant is out-of-repertoire-var any variant label with a code point out of repertoire is invalid MSR default |
| 3 |
blocked
|
any variant is blocked any variant label containing blocked variants is blocked MSR default |
| 4 |
allocatable
|
all variants are allocatable variant labels with all variants allocatable are allocatable MSR default |
| 5 |
valid
|
any label default catch all (default action) MSR default |