'MacroName:Latin2Thai 'MacroDescription:Automatically untransliterate a field with Latin characters into Thai characters 'Macro created by: Joel Hahn, Niles Public Library District 'Macro last modified: 6 March 2012 Option Explicit Option Compare Binary Declare Function TransThai(sField As String) As String Declare Function NextIsVowel (sField, j) As String Declare Function TransThaiVowel(sField, sTempTrans, k) As Integer Sub Main Dim sField As String Dim bool As Integer Dim sTranslit As String Dim i As Integer Dim CharacterSet As Integer Dim sLang As String Dim CS As Object On Error Resume Next Set CS = GetObject(,"Connex.Client") On Error GoTo 0 If CS Is Nothing Then Set CS = CreateObject("Connex.Client") End If ' Select Case CS.ItemType ' Case -1, 5 To 13, 15 To 16, 21 To 25 ' MsgBox "Not viewing a MARC record. Exiting..." ' Exit Sub ' End Select bool = CS.GetFieldLine(CS.CursorRow, sField) If InStr(sField, "Data contains non-latin script") Then MsgBox "The selected field already contains vernacular data. Exiting..." Exit Sub ElseIf sField = Chr(252) & Chr(252) & Chr(252) & " " Or Trim(Mid(sField, 6)) = "" Then MsgBox "The selected field contains no data. Exiting..." Exit Sub End If For i = 1 to 5 If Asc(Mid(sField, i, 1)) = 252 Then sTranslit = sTranslit & "∎" Else sTranslit = sTranslit & Mid(sField, i, 1) End If Next sTranslit = sTranslit & TransThai(sField) bool = CS.AddFieldLine(CS.CursorRow, sTranslit) CS.SendKeys "%ekl", -1 End Sub '################################################################################ Function TransThai(sField As String) As String Dim i As Long Dim sNewField As String sNewField = "" Dim sInitialMedialFinal As String Dim sTempTrans As String Dim nSkipChar As Integer Dim ConvertNumbers As String ConvertNumbers = "N" '"Y" i = 6 Do sInitialMedialFinal = "" sTempTrans = "" nSkipChar = 0 If i = 6 Then sInitialMedialFinal = "I" ElseIf i = Len(sField) Then sInitialMedialFinal = "F" ElseIf i > 6 And i < Len(sField) Then If InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, i-1, 1)) Then sInitialMedialFinal = "I" ElseIf InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, i+1, 1)) Then sInitialMedialFinal = "F" Else sInitialMedialFinal = "M" End If End If If Mid(sField, i, 1) = Chr(223) Then sNewField = sNewField & "ǂ" & Mid(sField, i+1, 1) & " " i = i + 2 Else If InStr("!@#$%^&*()[]{};:,/?\=+-'" & Chr(34), Mid(sField, i, 1)) Then sNewField = sNewField & Mid(sField, i, 1) ElseIf Mid(sField, i, 1) = "." Then If Mid(sField, i+1, 2) = ".." Then sNewField = sNewField & "ฯ" Else sNewField = sNewField & Mid(sField, i, 1) End If ElseIf Mid(sField, i, 1) = " " Then If Mid(sField, i+1, 1) = "/" Or Mid(sField, i+1, 1) = "=" Or Mid(sField, i+1, 1) = ":" Or Mid(sField, i+1, 1) = ";" Or Mid(sField, i+1, 1) = "(" Or Mid(sField, i+1, 1) = "[" Or Mid(sField, i+1, 1) = Chr(223) Then sNewField = sNewField & " " ElseIf Mid(sField, i+1, 3) = "-- " Then snewField = sNewField & " -- " i = i + 3 Else 'Do not use spaces in the vernacular except before delimiters and before ISBD punctuation '(Spaces after delimiters should be auto-inserted by Cnx when the record is validated/saved) End If ElseIf UCase(Mid(sField, i, 1)) = "0" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๐" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "1" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๑" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "2" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๒" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "3" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๓" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "4" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๔" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "5" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๕" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "6" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๖" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "7" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๗" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "8" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๘" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "9" Then If ConvertNumbers = "Y" Then sNewField = sNewField & "๙" Else sNewField = sNewField & Mid(sField, i, 1) ElseIf UCase(Mid(sField, i, 1)) = "K" Then If sInitialMedialFinal = "F" Then sNewField = sNewField & "ก" Else If UCase(Mid(sField, i+1, 1)) = "H" Then If sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 4)) = "wa" & Chr(229) & "m" Then 'khwa-macron-m sNewField = sNewField & "ค" & "ว" & "า" & "ม" i = i + 5 ElseIf sInitialMedialFinal = "I" And (LCase(Mid(sField, i+2, 3)) = "o" & Chr(229) & Chr(248) Or LCase(Mid(sField, i+2, 3)) = "o" & Chr(248) & Chr(229)) Then 'kho-macron-ogonek sNewField = sNewField & "ข" & "้" & "อ" i = i + 4 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 2)) = "a" & Chr(229) Then 'kha-macron sNewField = sNewField & "ข" & "้" & "า" i = i + 3 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 2)) = "i" & Chr(229) Then 'khi-macron sNewField = sNewField & "ข" & "ี" & "้" i = i + 3 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 6)) = "r" & Chr(189) & Chr(229) & "ang" Then 'khru-hook-macron-ang sNewField = sNewField & "เครื่อง" i = i + 7 Else sTempTrans = "ข" If NextIsVowel(sField, i+1) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i+1) End If sNewField = sNewField & sTempTrans i = i + 1 + nSkipChar End If ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 3)) = "a" & Chr(229) & "n" Then 'ka-macron-n snewField = sNewField & "ก" & "า" & "ร" i = i + 3 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 4)) = "asat" Then 'kasat sNewField = sNewField & "กษัตริย์" i = i + 4 Else sTempTrans = "ก" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If End If ElseIf UCase(Mid(sField, i, 1)) = "N" Then If UCase(Mid(sField, i+1, 1)) = "G" Then sTempTrans = "ง" If NextIsVowel(sField, i+1) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i+1) End If sNewField = sNewField & sTempTrans i = i + 1 + nSkipChar ElseIf sInitialMedialFinal = "I" And (LCase(Mid(sField, i+1, 5)) = "o" & Chr(229) & Chr(248) & "ng" Or LCase(Mid(sField, i+1, 5)) = "o" & Chr(248) & Chr(229) & "ng") Then 'no-macron-ogonek-ng sNewField = sNewField & "น้อง" Mid(sField, i+5, 1) = " " i = i + 5 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 2)) = "ak" Then 'nak sNewField = sNewField & "นัก" i = i + 2 Else If LCase(Mid(sField, i-3, 3)) = "o" & Chr(229) & Chr(248) Or LCase(Mid(sField, i-3, 3)) = "o" & Chr(248) & Chr(229) Then sTempTrans = "ร" 'If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans i = i + nSkipChar Else sTempTrans = "น" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If End If ElseIf UCase(Mid(sField, i, 1)) = "C" Then If sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 5)) = "ha" & Chr(229) & "ng" Then 'cha-macron-ng sNewField = sNewField & "ช่าง" i = i + 5 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 4)) = Chr(233) & "hai" Then 'c-hacek-hai sNewField = sNewField & "ใจ" i = i + 4 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 8)) = "ha" & Chr(229) & " cha" & Chr(229) Then 'cha-macron cha-macron sNewField = sNewField & "ช้าๆ" i = i + 8 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 4)) = "hu" & Chr(229) & "a" Then 'chu-macron-a sNewField = sNewField & "ชั่ว" i = i + 4 ElseIf LCase(Mid(sField, i+1, 2)) = Chr(233) & "h" Then sTempTrans = "จ" If NextIsVowel(sField, i+2) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i+2) End If sNewField = sNewField & sTempTrans i = i + 2 + nSkipChar ElseIf UCase(Mid(sField, i+1, 1)) = "H" Then sTempTrans = "ช" If NextIsVowel(sField, i+1) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i+1) End If sNewField = sNewField & sTempTrans i = i + 1 + nSkipChar Else sTempTrans = "∎" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "S" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 9)) = "e" & Chr(229) & "tthakit" Then 'se-macron-tthakit sNewField = sNewField & "เศรษฐกิจ" i = i + 9 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 6)) = "ombu" & Chr(229) & "n" Then 'sombu-macron-n sNewField = sNewField & "สมบูรณ์" i = i + 6 Else sTempTrans = "ส" 'or "ศ" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "Y" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 9)) = "utthasa" & Chr(229) & "t" Then 'yutthasa-macron-t sNewField = sNewField & "ยุทธศาสตร์" i = i + 9 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 8)) = "uttitham" Then 'yuttitham sNewField = sNewField & "ยุติธรรม" i = i + 8 Else sTempTrans = "ย" 'or "ญ" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "D" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 5)) = "u" & Chr(229) & "ang" Then 'du-macron-ang sNewField = sNewField & "ดวง" i = i + 5 Else sTempTrans = "ด" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "T" Then If sInitialMedialFinal = "F" Then sTempTrans = "ด" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 2)) = "on" Then 'ton sNewField = sNewField & "ต้น" i = i + 2 ElseIf sInitialMedialFinal = "I" And (LCase(Mid(sField, i+1, 6)) = "ho" & Chr(229) & Chr(248) & "ng" Or LCase(Mid(sField, i+1, 6)) = "ho" & Chr(248) & Chr(229) & "ng") Then 'tho-macron-ogonek-ng sNewField = sNewField & "ท้อง" i = i + 6 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 10)) = "a" & Chr(229) & "ng ta" & Chr(229) & "ng" Then 'ta-macron-ng ta-macron-ng sNewField = sNewField & "ต่างๆ" i = i + 10 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 4)) = "a" & Chr(229) & "ng" Then 'ta-macron-ng sNewField = sNewField & "ต่าง" i = i + 4 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 4)) = "hu" & Chr(229) & "a" Then 'thu-macron-a sNewField = sNewField & "ทั่ว" i = i + 4 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 4)) = "hang" Then 'thang sNewField = sNewField & "ทั้ง" i = i + 4 Else If UCase(Mid(sField, i+1, 1)) = "H" Then sTempTrans = "ท" If NextIsVowel(sField, i+1) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i+1) End If sNewField = sNewField & sTempTrans i = i + 1 + nSkipChar Else sTempTrans = "ต" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If End If ElseIf UCase(Mid(sField, i, 1)) = "B" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 6)) = "ukkhon" Then 'bukkhon sNewField = sNewField & "บุคคล" i = i + 6 Else sTempTrans = "บ" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "P" Then If sInitialMedialFinal = "F" Then sTempTrans = "บ" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar Else If UCase(Mid(sField, i+1, 1)) = "H" Then sTempTrans = "พ" If LCase(Mid(sField, i+2, 2)) = "ra" Then 'Phra If LCase(Mid(sField, i+4, 6)) = " khru" & Chr(229) Then 'Phra Khru-macron sNewField = sNewField & sTempTrans & "ระครู" i = i + 9 ElseIf LCase(Mid(sField, i+4, 10)) = " " & Chr(176) & "a" & Chr(229) & "c" & Chr(233) & "ha" & Chr(229) & "n" Then 'Phra 'A-macron-c-hacek-ha-macron-n sNewField = sNewField & sTempTrans & "ระอาจารย์" i = i + 13 Else sNewField = sNewField & sTempTrans & "ระ" i = i + 3 End If ElseIf sInitialMedialFinal = "I" And (LCase(Mid(sField, i+2, 3)) = "o" & Chr(229) & Chr(248) Or LCase(Mid(sField, i+2, 3)) = "o" & Chr(248) & Chr(229)) Then 'pho-macron-ogonek sNewField = sNewField & sTempTrans & "่อ" i = i + 4 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 3)) = "u" & Chr(229) & "t" Then 'phu-macron-t sNewField = sNewField & sTempTrans & "ูด" ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 2)) = "u" & Chr(229) Then 'phu-macron snewField = sNewField & "ผู้" i = i + 3 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 3)) = Chr(181) & Chr(229) & "n" Then 'phae-ligature-macron-n sNewField = sNewField & "แผน" i = i + 4 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 8)) = "r" & Chr(189) & "ttikam" Then 'phru-hook-ttikam sNewField = sNewField & "พฤติกรรม" i = i + 9 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 8)) = "a" & Chr(229) & "nro" & Chr(229) & "ng" Then 'pha-macron-nro-macron-ng sNewField = sNewField & "ภารโรง" i = i + 9 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+2, 10)) = "onlam" & Chr(189) & Chr(229) & "ang" Then 'phonlamu-hook-macron-ang sNewField = sNewField & "พลเมือง" i = i + 11 Else If NextIsVowel(sField, i+1) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i+1) End If sNewField = sNewField & sTempTrans i = i + 1 + nSkipChar End If Else If sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 10)) = "atibatka" & Chr(229) & "n" Then 'patibatka-macron-n sNewField = sNewField & "ปฏิบัติการ" i = i + 10 Else sTempTrans = "ป" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If End If End If ElseIf UCase(Mid(sField, i, 1)) = "F" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar Else sTempTrans = "ฟ" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "M" Then sTempTrans = "ม" If sInitialMedialFinal = "I" And Mid(sField, i+1, 2) = Chr(181) & Chr(229) Then 'mae-ligature-macron sNewField = sNewField & "แ" & sTempTrans & "่" i = i + 2 ElseIf sInitialMedialFinal = "I" And (LCase(Mid(sField, i+1, 3)) = "o" & Chr(229) & Chr(248) Or LCase(Mid(sField, i+1, 3)) = "o" & Chr(248) & Chr(229)) Then 'mo-macron-ogonek sNewField = sNewField & "หมอ" i = i + 3 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 16)) = "aha" & Chr(229) & "witthaya" & Chr(229) & "lai" Then 'maha-macron-witthaya-macron-lai sNewField = sNewField & "มหาวิทยาลัย" i = i + 16 Else If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "R" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 6)) = "eo reo" Then 'reo reo sNewField = sNewField & "เร็วๆ" i = i + 6 Else sTempTrans = "ร" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "L" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 3)) = "u" & Chr(229) & "k" Then 'lu-macron-k sNewField = sNewField & "ลูก" i = i + 3 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 5)) = "u" & Chr(229) & "ang" Then 'lu-macron-ang sNewField = sNewField & "หลวง" i = i + 5 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 3)) = "a" & Chr(229) & "i" Then 'la-macron-i sNewField = sNewField & "หลาย" i = i + 3 Else sTempTrans = "ล" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "W" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 2)) = "ai" Then 'wai sNewField = sNewField & "วัย" i = i + 2 ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 11)) = "atthanatham" Then 'watthanatham sNewField = sNewField & "วัฒนธรรม" i = i + 11 Else sTempTrans = "ว" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf UCase(Mid(sField, i, 1)) = "H" Then If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar Else sTempTrans = "ห" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If ElseIf Mid(sField, i, 1) = Chr(176) Then 'Ayn If sInitialMedialFinal = "F" Then sTempTrans = "∎" 'If NextIsVowel(sField, i) = "Y" Then ' nSkipChar = TransThaiVowel(sField, sTempTrans, i) 'End If sNewField = sNewField & sTempTrans 'i = i + nSkipChar ElseIf sInitialMedialFinal = "I" And LCase(Mid(sField, i+1, 7)) = "ongka" & Chr(229) & "n" Then ''ongka-macron-n sNewField = sNewField & "องค์การ" i = i + 7 Else sTempTrans = "อ" If NextIsVowel(sField, i) = "Y" Then nSkipChar = TransThaiVowel(sField, sTempTrans, i) End If sNewField = sNewField & sTempTrans i = i + nSkipChar End If 'Initial vowels ElseIf sInitialMedialFinal = "I" And NextIsVowel(sField, i-1) = "Y" Then sTempTrans = "อ" nSkipChar = TransThaiVowel(sField, sTempTrans, i-1) sNewField = sNewField & sTempTrans i = i + nSkipChar - 1 'End If Else sNewField = sNewField & "∎" End If i = i + 1 End If Loop While i <= Len(sField) TransThai = sNewField End Function Function NextIsVowel (sField, j) If j < Len(sField) Then If InStr("AEIOU", UCase(Mid(sField, j+1, 1) ) ) Then NextIsVowel = "Y" ElseIf Mid(sField, j+1, 1) = Chr(181) Or Mid(sField, j+1, 1) = Chr(165) Then 'AE-ligature NextIsVowel = "Y" ElseIf Mid(sField, j+1, 1) = Chr(182) or Mid(sField, j+1, 1) = Chr(166) Then 'OE-ligature NextIsVowel = "Y" ElseIf Mid(sField, j+1, 1) = Chr(189) or Mid(sField, j+1, 1) = Chr(173) Then 'U-hook NextIsVowel = "Y" ElseIf LCase(Mid(sField, j+1, 2)) = "r" & Chr(189) or LCase(Mid(sField, j+1, 2)) = "ri" or LCase(Mid(sField, j+1, 2)) = "r" & Chr(182) Then 'ru-hook, ri, roe NextIsVowel = "Y" ElseIf LCase(Mid(sField, j+1, 2)) = "l" & Chr(189) or LCase(Mid(sField, j+1, 2)) = "l" & Chr(173) Then 'lu-hook NextIsVowel = "Y" Else NextIsVowel = "N" End If End If End Function Function TransThaiVowel(sField, sTempTrans, k) Dim nSkip As Integer 'sTempTrans = "test" TransThaiVowel = 0 nSkip = 0 Dim sTest, sTest2, sTest3 sTest = Mid(sField, k+1, 1) sTest2 = Mid(sField, k+2, 2) sTest3 = Mid(sField, k+1, 5) If UCase(Mid(sField, k+1, 1)) = "A" Then If UCase(Mid(sField, k+2, 1)) = "M" Then sTempTrans = sTempTrans & "ำ" nSkip = 2 ElseIf UCase(Mid(sField, k+2, 1)) = "N" And (InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, k+3, 1)) Or k + 2 = Len(sField)) Then 'an, final sTempTrans = sTempTrans & "ร" & "ร" ElseIf LCase(Mid(sField, k+2, 2)) = Chr(229) & "i" Then 'A-macron-I sTempTrans = sTempTrans & "า" & "ย" nSkip = 3 ElseIf LCase(Mid(sField, k+2, 2)) = Chr(229) & "o" Then 'A-macron-O sTempTrans = sTempTrans & "า" & "ว" nSkip = 3 ElseIf Mid(sField, k+2, 1) = Chr(229) Then 'A-macron sTempTrans = sTempTrans & "า" nSkip = 2 ElseIf UCase(Mid(sField, k+2, 1)) = "I" Then If InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, k+3, 1)) Or k + 2 = Len(sField) Then 'Final form sTempTrans = "ไ" & sTempTrans & "ย" Else sTempTrans = "ไ" & sTempTrans End If nSkip = 2 ElseIf UCase(Mid(sField, k+2, 1)) = "O" Then sTempTrans = "เ" & sTempTrans & "า" nSkip = 2 Else 'inherent vowel; do not add a character nSkip = 1 End If ElseIf Mid(sField, k+1, 1) = Chr(181) Or Mid(sField, k+1, 1) = Chr(165) Then 'AE-ligature If Mid(sField, k+2, 1) = Chr(229) Then 'AE-ligature-macron If LCase(Mid(sField, k+3, 1)) = "o" Then 'ae-macron-o sTempTrans = "แ" & sTempTrans & "ว" nSkip = 3 Else sTempTrans = "แ" & sTempTrans nSkip = 2 End If Else If InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, k+2, 1)) Or k + 1 = Len(sField) Then 'Final form sTempTrans = "แ" & sTempTrans & "ะ" nSkip = 1 Else sTempTrans = "แ" & sTempTrans & "็" 'Initial/medial form nSkip = 1 End If End If ElseIf UCase(Mid(sField, k+1, 1)) = "E" Then If Mid(sField, k+2, 1) = Chr(229) Then If LCase(Mid(sField, k+3, 1)) = "o" Then 'e-macron-o sTempTrans = "เ" & sTempTrans & "ว" nSkip = 3 Else sTempTrans = "เ" & sTempTrans nSkip = 2 End If ElseIf LCase(Mid(sField, k+2, 1)) = "o" Then sTempTrans = "เ" & sTempTrans & "็" & "ว" nSkip = 2 Else If InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, k+2, 1)) Or k + 1 = Len(sField) Then 'Final form sTempTrans = "เ" & sTempTrans & "ะ" nSkip = 1 Else sTempTrans = "เ" & sTempTrans & "็" 'Initial/medial form nSkip = 1 End If End If ElseIf UCase(Mid(sField, k+1, 1)) = "I" Then If Mid(sField, k+2, 1) = Chr(229) Then If LCase(Mid(sField, k+3, 1)) = "a" Then sTempTrans = "เ" & sTempTrans & "ิ" & "ย" nSkip = 3 ElseIf LCase(Mid(sField, k+3, 2)) = "eo" Then sTempTrans = "เ" & sTempTrans & "ี" & "ย" & "ว" nSkip = 4 Else sTempTrans = sTempTrans & "ี" nSkip = 2 End If ElseIf LCase(Mid(sField, k+2, 1)) = "a" Then sTempTrans = "เ" & sTempTrans & "ิ" & "ย" & "ะ" nSkip = 2 ElseIf LCase(Mid(sField, k+2, 1)) = "u" Then sTempTrans = sTempTrans & "ิ" & "ว" nSkip = 2 Else sTempTrans = sTempTrans & "ิ" nSkip = 1 End If ElseIf UCase(Mid(sField, k+1, 1)) = "O" Then If Mid(sField, k+2, 1) = Chr(229) Then 'o-macron If Mid(sField, k+3, 1) = Chr(248) And LCase(Mid(sField, k+4)) = "n" And (InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, k+5, 1)) Or k + 4 = Len(sField)) Then 'o-macron-ogonek-n, final sTempTrans = sTemptrans & "ร" nSkip = 4 ElseIf Mid(sField, k+3, 1) = Chr(248) Then 'o-macron-ogonek If LCase(Mid(sField, k+4, 1)) = "i" Then sTempTrans = sTempTrans & "อ" & "ย" nSkip = 4 Else sTempTrans = sTempTrans & "อ" nSkip = 3 End if ElseIf LCase(Mid(sField, k+3, 1)) = "i" Then sTempTrans = "โ" & sTempTrans & "ย" nSkip = 3 Else sTempTrans = "โ" & sTempTrans nSkip = 2 End If ElseIf Mid(sField, k+2, 1) = Chr(248) Then 'o-ogonek If Mid(sField, k+3, 1) = Chr(229) Then 'o-ogonek-macron If LCase(Mid(sField, k+4, 1)) = "i" Then sTempTrans = sTempTrans & "อ" & "ย" nSkip = 4 Else sTempTrans = sTempTrans & "อ" nSkip = 3 End if Else sTempTrans = "เ" & sTempTrans & "า" & "ะ" nSkip = 2 End If Else 'inherent vowel; do not add a character 'sTempTrans = "โ" & sTempTrans & "ะ" nSkip = 1 End If ElseIf Mid(sField, k+1, 1) = Chr(182) Or Mid(sField, k+1, 1) = Chr(166) Then 'OE-ligature If Mid(sField, k+2, 1) = Chr(229) Then If LCase(Mid(sField, k+3, 1)) = "i" Then sTempTrans = "เ" & sTempTrans & "ย" nSkip = 3 Else If InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, k+3, 1)) Or k + 2 = Len(sField) Then 'Final form sTempTrans = "เ" & sTempTrans & "อ" nSkip = 2 Else sTempTrans = "เ" & sTempTrans & "ิ" nSkip = 2 End If End If Else sTempTrans = "เ" & sTempTrans & "อ" & "ะ" nSkip = 2 End If ElseIf UCase(Mid(sField, k+1, 1)) = "U" Then If Mid(sField, k+2, 1) = Chr(229) Then If LCase(Mid(sField, k+3, 2)) = "ai" Then sTempTrans = sTempTrans & "ว" & "ย" nSkip = 4 ElseIf LCase(Mid(sField, k+3, 1)) = "a" Then sTempTrans = sTempTrans & "ั" & "ว" nSkip = 3 Else sTempTrans = sTempTrans & "ู" nSkip = 2 End If ElseIf LCase(Mid(sField, k+2, 1)) = "a" Then If InStr(" !@#$%^&*()[]{};:.,/?\=+-'" & Chr(34), Mid(sField, k+3, 1)) Or k + 2 = Len(sField) Then 'Final form sTempTrans = sTempTrans & "ั" & "ว" & "ะ" nSkip = 2 Else sTempTrans = sTempTrans & "ว" nSkip = 2 End If ElseIf LCase(Mid(sField, k+2, 1)) = "i" Then sTempTrans = sTempTrans & "ุ" & "ย" nSkip = 2 Else sTempTrans = sTempTrans & "ุ" nSkip = 1 End If ElseIf Mid(sField, k+1, 1) = Chr(189) Or Mid(sField, k+1, 1) = Chr(173) Then 'U-hook If Mid(sField, k+2, 1) = Chr(229) Then 'u-hook-macron If LCase(Mid(sField, k+3, 2)) = "ai" Then 'u-hook-macron-ai sTempTrans = "เ" & sTempTrans & "ื" & "อ" & "ย" nSkip = 4 ElseIf LCase(Mid(sField, k+3, 1)) = "a" Then 'u-hook-macron-a sTempTrans = "เ" & sTempTrans & "ื" & "อ" nSkip = 3 Else sTempTrans = sTempTrans & "ื" nSkip = 2 End If Else If LCase(Mid(sField, k+2, 1)) = "a" Then 'u-hook-a sTempTrans = "เ" & sTempTrans & "ื" & "อ" & "ะ" nSkip = 2 Else sTempTrans = sTempTrans & "ึ" nSkip = 1 End If End If ElseIf UCase(Mid(sField, k+1, 1)) = "L" Then If Mid(sField, k+2, 1) = Chr(189) or Mid(sField, k+2, 1) = Chr(173) Then 'Lu-hook If Mid(sField, k+3, 1) = Chr(229) Then sTempTrans = sTempTrans & "ฦ" & "ๅ" nSkip = 3 Else sTempTrans = sTempTrans & "ฦ" nSkip = 2 End If Else 'not a L-combo vowel nSkip = 0 End If ElseIf UCase(Mid(sField, k+1, 1)) = "R" Then If Mid(sField, k+2, 1) = Chr(189) or Mid(sField, k+2, 1) = Chr(173) Then 'Ru-hook If Mid(sField, k+3, 1) = Chr(229) Then 'Ru-hook-macron sTempTrans = sTempTrans & "ฤ" & "ๅ" nSkip = 3 Else sTempTrans = sTempTrans & "ฤ" nSkip = 2 End If ElseIf (Mid(sField, k+2, 1) = Chr(182) Or Mid(sField, k+2, 1) = Chr(166)) And Mid(sField, k+3, 1) = Chr(229) Then 'OE-ligature-macron sTempTrans = sTempTrans & "ฤ" nSkip = 3 ElseIf LCase(Mid(sField, k+2, 1)) = "i" Then 'ri sTempTrans = sTempTrans & "ฤ" nSkip = 2 Else 'not a R-combo vowel nSkip = 0 End If Else nSkip = 0 End If TransThaiVowel = nSkip End Function