﻿#--------------------------------------------------------------------
# Copyright (c) 1999-2004, International Business Machines
# Corporation and others. All Rights Reserved.
#--------------------------------------------------------------------

# Thai-Latin
# This set of rules follows ISO 11940
#	see http://homepage.mac.com/sirbinks/pdf/Thai.r2.pdf
# except that that does not mention an implicit vowel, so we use ọ
#
# The transcription is fairly ugly, so we ought to also do the UNGEGN version
#	see: http://www.eki.ee/wgrs/rom1_th.pdf
# and probably make that the main variant.

# Note: this is an internal file. The NFD/NFC is handled externally, in the index
# The insertion of spaces between words, the reversal of the vowels
# and the conversion of space to semicolon are done *outside* of these rules.
# So as far as these rules are concerned, the vowels are in logical order!

# insert implicit vowel (and remove it going the other way)
# COMMENTED out: the implicit vowel positions cannot be predicted algorithmically
#$consonant = [ก-ฮ];
#$vowel = [ะ-ฺเ-ไ็];

#{ ( $consonant ) } [^$vowel ] > | $1  ;
# > ọ ;
# < ọ ;

$notAbove = [^\p{ccc=0}\p{ccc=above}] ;
$notBelow = [^\p{ccc=0}\p{ccc=below}] ;

# Consonants
# Warning: the 'h's need to be handled carefully!
# What we really want to say is the following, but we can't
# $notHAccent = !($notAbove*   ̄ | $notBelow*   ̣) ;

# Since the only accents we care about that could cause problems are free-standing accents below, we use instead:
$freeStandingBelow = [\u0325  ];
$hAccent =  [   ̄     ̣];
$notHAccent0 = [^$freeStandingBelow$hAccent];
$notHAccent1 = $freeStandingBelow [^$hAccent];

ห > h̄ ; # THAI CHARACTER HO HIP
 ห | $1 < h ($notAbove*)    ̄; # backward case, account for reordering
ฮ <> ḥ ; # THAI CHARACTER HO NOKHUK

ข <> k̄h ; # THAI CHARACTER KHO KHAI
ฃ <> ḳ̄h ; # THAI CHARACTER KHO KHUAT
ฅ <> kʹh ; # THAI CHARACTER KHO KHON  
ฆ <> ḳh ; # THAI CHARACTER KHO RAKHANG
ค < kh } $notHAccent1 ; # THAI CHARACTER KHO KHWAI  
ค <> kh } $notHAccent0 ; # THAI CHARACTER KHO KHWAI  
ก <> k ; # THAI CHARACTER KO KAI

ภ <> p̣h ; # THAI CHARACTER PHO SAMPHAO
ผ <> p̄h ; # THAI CHARACTER PHO PHUNG
พ < ph } $notHAccent1 ; # THAI CHARACTER PHO PHAN
พ <> ph } $notHAccent0 ; # THAI CHARACTER PHO PHAN
ป <> p ; # THAI CHARACTER PO PLA

ฉ <> c̄h ; # THAI CHARACTER CHO CHING
ฌ <> c̣h ; # THAI CHARACTER CHO CHOE
ช < ch } $notHAccent1 ; # THAI CHARACTER CHO CHANG
ช <> ch } $notHAccent0 ; # THAI CHARACTER CHO CHANG
จ <> c ; # THAI CHARACTER CHO CHAN

ฐ <> ṭ̄h ; # THAI CHARACTER THO THAN
ฑ <> ṯh ; # THAI CHARACTER THO NANGMONTHO
ฒ <> tʹh ; # THAI CHARACTER THO PHUTHAO
ถ <> t̄h ; # THAI CHARACTER THO THUNG
ธ <> ṭh ; # THAI CHARACTER THO THONG
ท < th } $notHAccent1 ; # THAI CHARACTER THO THAHAN
ท <> th } $notHAccent0 ; # THAI CHARACTER THO THAHAN
#Note: TO PATAK deviates from ISO since t-dotunder + h would be ambigous. So it uses vertical tick.
ฏ <> t̩ ; # THAI CHARACTER TO PATAK
ต <> t ; # THAI CHARACTER TO TAO

# since there is no singleton g (generated), don't worry about that.
ง <> ng ; # THAI CHARACTER NGO NGU
ณ <> ṇ ; # THAI CHARACTER NO NEN
น <> n ; # THAI CHARACTER NO NU

ญ <> ỵ  ; # THAI CHARACTER YO YING
ฎ <> ḍ ; # THAI CHARACTER DO CHADA
ด <> d ; # THAI CHARACTER DO DEK

บ <> b ; # THAI CHARACTER BO BAIMAI
ฝ <> f̄ ; # THAI CHARACTER FO FA
 ฝ | $1 < f ($notAbove*)    ̄; # backward case, account for reordering

ม <> m ; # THAI CHARACTER MO MA
ย <> y ; # THAI CHARACTER YO YAK
ร <> r ; # THAI CHARACTER RO RUA
ฤ <> v ; # THAI CHARACTER RU
ฦ <> ł ; # THAI CHARACTER LU
ว <> w ; # THAI CHARACTER WO WAEN

ศ <> ṣ̄ ; # THAI CHARACTER SO SALA***
 ศ | $1 < s    ̣ ($notAbove*)    ̄; # backward case, account for reordering
ษ <> s̄ʹ ; # THAI CHARACTER SO RUSI
ส > s̄ ; # THAI CHARACTER SO SUA***
 ส | $1 < s ($notAbove*)    ̄; # backward case, account for reordering

ฬ <> ḷ ; # THAI CHARACTER LO CHULA
ล <> l ; # THAI CHARACTER LO LING
ฟ <> f ; # THAI CHARACTER FO FAN

อ <> x ; # THAI CHARACTER O ANG
ซ <> s ; # THAI CHARACTER SO SO

# vowels

 ั <> ạ ; # THAI CHARACTER MAI HAN-AKAT

า > ā ; # THAI CHARACTER SARA AA
 า | $1 < a ($notAbove*)    ̄; # backward case, account for reordering

# We deviate from ISO for SARA AM for disambiguation
ำ > a  ̉; # THAI CHARACTER SARA AM
 ำ | $1 < a ($notAbove*)  ̉ ; # backward case, account for reordering

ะ <> a ; # THAI CHARACTER SARA A
 ี <> ī ; # THAI CHARACTER SARA II
  ี | $1 < i ($notAbove*)    ̄  ; # backward case, account for reordering

 ื <> ụ̄ ; # THAI CHARACTER SARA UEE
  ื | $1 < u   ̣ ($notAbove*)    ̄  ; # backward case, account for reordering

 ึ <> ụ ; # THAI CHARACTER SARA UE
 ู <> ū ; # THAI CHARACTER SARA UU
 ู | $1 < u  ($notAbove*)    ̄  ; # backward case, account for reordering

 ุ <> u ; # THAI CHARACTER SARA U

ฯ <> ‡ ; # THAI CHARACTER PAIYANNOI

# ฿ <> XXX ; # THAI CURRENCY SYMBOL BAHT

เ <> e ; # THAI CHARACTER SARA E
แ <> æ ; # THAI CHARACTER SARA AE
โ <> o ; # THAI CHARACTER SARA O
ใ <> ı ; # THAI CHARACTER SARA AI MAIMUAN
ไ <> ị ; # THAI CHARACTER SARA AI MAIMALAI
ๅ <> ɨ ; # THAI CHARACTER LAKKHANGYAO
 ็ <> ̆ ; # THAI CHARACTER MAITAIKHU
 ่ <> ̀ ; # THAI CHARACTER MAI EK
 ้ <> ̂ ; # THAI CHARACTER MAI THO
 ๊ <> ́ ; # THAI CHARACTER MAI TRI
 ๋ <> ̌ ; # THAI CHARACTER MAI CHATTAWA
 ์ <> ̒ ; # THAI CHARACTER THANTHAKHAT
 ๎ <> '~' ; # THAI CHARACTER YAMAKKAN

# We deviate from ISO for disambiguation
 ํ <>  ̊ ; # THAI CHARACTER NIKHAHIT

๏ <> § ; # THAI CHARACTER FONGMAN

๐ <> 0 ; # THAI DIGIT ZERO
๑ <> 1 ; # THAI DIGIT ONE
๒ <> 2 ; # THAI DIGIT TWO
๓ <> 3 ; # THAI DIGIT THREE
๔ <> 4 ; # THAI DIGIT FOUR
๕ <> 5 ; # THAI DIGIT FIVE
๖ <> 6 ; # THAI DIGIT SIX
๗ <> 7 ; # THAI DIGIT SEVEN
๘ <> 8 ; # THAI DIGIT EIGHT
๙ <> 9 ; # THAI DIGIT NINE

๚ <> '||' ; # THAI CHARACTER ANGKHANKHU

๛ <> » ; # THAI CHARACTER KHOMUT
ๆ <> « ; # THAI CHARACTER MAIYAMOK

# moved down to make shorter first
#Note: PHINTHU deviates from ISO since underring causes canonical problems. So it uses spacing tick below.
 ฺ <> ˌ ; # THAI CHARACTER PHINTHU
 ิ <> i ; # THAI CHARACTER SARA I

# fallbacks

| k < g ;
| k < h ;
| c < j ;
| k < q ;
| s < z ;

:: (lower);
