'MacroName:Latin2Cherokee 'MacroDescription:Automatically untransliterate a field with Latin characters into Cherokee characters 'Macro created by: Joel Hahn 'Macro last modified: 6 September 2021 'Note: It is not possible to tell the difference between s-a and sa, s-e and se, etc., nah-na and na-hna, sv-i and s-v-i, and so forth ' Therefore, the results of this macro always need to be compared closely against the original Option Explicit Option Compare Binary Declare Function TransCherokee(sField As String) As String Sub Main Dim sField As String Dim bool As Integer Dim sTranslit As String Dim i 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 & TransCherokee(sField) bool = CS.AddFieldLine(CS.CursorRow, sTranslit) CS.SendKeys "%ekl", -1 End Sub '################################################################################ Function TransCherokee(sField As String) As String Dim i As Long Dim sNewField As String sNewField = "" i = 6 Do If Mid(sField, i, 1) = Chr(223) Then sNewField = sNewField & "ǂ" & Mid(sField, i+1, 1) i = i + 2 Else dim b : b = Mid(sField, i, 1) dim c : if i < Len(sField) Then c = Mid(sField, i, 2) If InStr(" !@#$%^&*()[]{};:.,/?\=+-" & Chr(34), Mid(sField, i, 1)) Then sNewField = sNewField & Mid(sField, i, 1) ElseIf InStr("0123456789", Mid(sField, i, 1)) Then sNewField = sNewField & Mid(sField, i, 1) ElseIf LCase(Mid(sField, i, 1)) = "a" Then sNewField = sNewField & "Ꭰ" ElseIf LCase(Mid(sField, i, 1)) = "e" Then sNewField = sNewField & "Ꭱ" ElseIf LCase(Mid(sField, i, 1)) = "i" Then sNewField = sNewField & "Ꭲ" ElseIf LCase(Mid(sField, i, 1)) = "o" Then sNewField = sNewField & "Ꭳ" ElseIf LCase(Mid(sField, i, 1)) = "u" Then sNewField = sNewField & "Ꭴ" ElseIf LCase(Mid(sField, i, 1)) = "v" Then sNewField = sNewField & "Ꭵ" ElseIf LCase(Mid(sField, i, 1)) = "g" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꭶ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꭸ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꭹ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ꭺ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ꭻ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ꭼ" i = i + 1 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "k" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꭷ" i = i + 1 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "h" Then If LCase(Mid(sField, i+1, 2)) = "na" Then sNewField = sNewField & "Ꮏ" i = i + 2 ElseIf LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꭽ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꭾ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꭿ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ꮀ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ꮁ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ꮂ" i = i + 1 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "l" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꮃ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꮄ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꮅ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ꮆ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ꮇ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ꮈ" i = i + 1 Else sNewField = sNewField & "∎" i = i + 1 End If ElseIf LCase(Mid(sField, i, 1)) = "m" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꮉ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꮊ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꮋ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ꮌ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ꮍ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ᏽ" i = i + 1 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "n" Then If LCase(Mid(sField, i+1, 2)) = "ah" Then sNewField = sNewField & "Ꮐ" i = i + 2 ElseIf LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꮎ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꮑ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꮒ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ꮓ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ꮔ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ꮕ" i = i + 1 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 2)) = "qu" Then If LCase(Mid(sField, i+2, 1)) = "a" Then sNewField = sNewField & "Ꮖ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "e" Then sNewField = sNewField & "Ꮗ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "i" Then sNewField = sNewField & "Ꮘ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "o" Then sNewField = sNewField & "Ꮙ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "u" Then sNewField = sNewField & "Ꮚ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "v" Then sNewField = sNewField & "Ꮛ" i = i + 2 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "s" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꮜ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꮞ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꮟ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ꮠ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ꮡ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ꮢ" i = i + 1 Else sNewField = sNewField & "Ꮝ" End If ElseIf LCase(Mid(sField, i, 2)) = "dl" Then If LCase(Mid(sField, i+2, 1)) = "a" Then sNewField = sNewField & "Ꮬ" i = i + 2 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "d" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꮣ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꮥ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꮧ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ꮩ" 'character appears upside down in some fonts i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ꮪ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ꮫ" i = i + 1 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 2)) = "tl" Then If LCase(Mid(sField, i+2, 1)) = "a" Then sNewField = sNewField & "Ꮭ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "e" Then sNewField = sNewField & "Ꮮ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "i" Then sNewField = sNewField & "Ꮯ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "o" Then sNewField = sNewField & "Ꮰ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "u" Then sNewField = sNewField & "Ꮱ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "v" Then sNewField = sNewField & "Ꮲ" i = i + 2 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 2)) = "ts" Then If LCase(Mid(sField, i+2, 1)) = "a" Then sNewField = sNewField & "Ꮳ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "e" Then sNewField = sNewField & "Ꮴ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "i" Then sNewField = sNewField & "Ꮵ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "o" Then sNewField = sNewField & "Ꮶ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "u" Then sNewField = sNewField & "Ꮷ" i = i + 2 ElseIf LCase(Mid(sField, i+2, 1)) = "v" Then sNewField = sNewField & "Ꮸ" i = i + 2 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "t" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꮤ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꮦ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꮨ" i = i + 1 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "w" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꮹ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ꮺ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ꮻ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ꮼ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ꮽ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ꮾ" i = i + 1 Else sNewField = sNewField & "∎" End If ElseIf LCase(Mid(sField, i, 1)) = "y" Then If LCase(Mid(sField, i+1, 1)) = "a" Then sNewField = sNewField & "Ꮿ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "e" Then sNewField = sNewField & "Ᏸ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "Ᏹ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "o" Then sNewField = sNewField & "Ᏺ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "Ᏻ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = "v" Then sNewField = sNewField & "Ᏼ" i = i + 1 Else sNewField = sNewField & "∎" End If Else sNewField = sNewField & "∎" End If i = i + 1 End If Loop While i <= Len(sField) TransCherokee = sNewField End Function '################################################################################