'MacroName:Latin2Tamil 'MacroDescription:Automatically untransliterate a field with Latin characters into Tamil characters 'Macro created by: Joel Hahn, Niles Public Library District 'Macro last modified: 30 March 2011, typo fixed 9 Oct 2016 Option Explicit Option Compare Binary Declare Function TransTamil(sField As String) As String 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 & TransTamil(sField) bool = CS.AddFieldLine(CS.CursorRow, sTranslit) CS.SendKeys "%ekl", -1 End Sub '################################################################################ Function TransTamil(sField As String) As String Dim i As Long Dim sCurVowel As Integer Dim sNewField As String sNewField = "" Dim sTransNumbers As String sTransNumbers = "N" i = 6 Do 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 sCurVowel = 2 sNewField = sNewField & Mid(sField, i, 1) ElseIf InStr("0123456789", Mid(sField, i, 1)) Then If sTransNumbers = "N" Then sCurVowel = 2 sNewField = sNewField & Mid(sField, i, 1) Else sCurVowel = 2 If Mid(sField, i, 1) = "0" Then sNewField = sNewField & "௦" ElseIf Mid(sField, i, 1) = "1" Then If Mid(sField, i+1, 2) Like "[0-9][0-9][0-9]" Then sNewField = sNewField & "௲" ElseIf Mid(sField, i+1, 2) Like "[0-9][0-9]" Then sNewField = sNewField & "௱" ElseIf Mid(sField, i+1, 2) Like "[0-9]" Then sNewField = sNewField & "௰" Else sNewField = sNewField & "௧" End If ElseIf Mid(sField, i, 1) = "2" Then sNewField = sNewField & "௨" ElseIf Mid(sField, i, 1) = "3" Then sNewField = sNewField & "௩" ElseIf Mid(sField, i, 1) = "4" Then sNewField = sNewField & "௪" ElseIf Mid(sField, i, 1) = "5" Then sNewField = sNewField & "௫" ElseIf Mid(sField, i, 1) = "6" Then sNewField = sNewField & "௬" ElseIf Mid(sField, i, 1) = "7" Then sNewField = sNewField & "௭" ElseIf Mid(sField, i, 1) = "8" Then sNewField = sNewField & "௮" ElseIf Mid(sField, i, 1) = "9" Then sNewField = sNewField & "௯" End If End If ElseIf UCase(Mid(sField, i, 1)) = "A" Then If i = 6 Or sCurVowel <> 0 Or Not (Right(sNewField, 2) Like "[0-9A-F];") Then If LCase(Mid(sField, i+1, 2)) = "i" & Chr(229) Then 'just do the A and go on to the next, separate vowel sNewField = sNewField & "அ" ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "ஐ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 2)) = "u" & Chr(229) Then 'just do the A and go on to the next, separate vowel sNewField = sNewField & "அ" ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "ஔ" i = i + 1 ElseIf Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ஆ" i = i + 1 Else sNewField = sNewField & "அ" End If Else If LCase(Mid(sField, i+1, 2)) = "i" & Chr(229) Then 'skip the a and go to the next, separate vowel ElseIf LCase(Mid(sField, i+1, 1)) = "i" Then sNewField = sNewField & "ை" i = i + 1 ElseIf LCase(Mid(sField, i+1, 2)) = "u" & Chr(229) Then 'skip the a and go to the next, separate vowel ElseIf LCase(Mid(sField, i+1, 1)) = "u" Then sNewField = sNewField & "ௌ" i = i + 1 ElseIf Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ா" i = i + 1 Else 'Implied, not written End If End If sCurVowel = 1 ElseIf UCase(Mid(sField, i, 1)) = "E" Then If i = 6 Or sCurVowel <> 0 Or Not (Right(sNewField, 2) Like "[0-9A-F];") Then If Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ஏ" i = i + 1 Else sNewField = sNewField & "எ" End If Else If Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ே" i = i + 1 Else sNewField = sNewField & "ெ" End If End If sCurVowel = 1 ElseIf UCase(Mid(sField, i, 1)) = "I" Then If i = 6 Or sCurVowel <> 0 Or Not (Right(sNewField, 2) Like "[0-9A-F];") Then If Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ஈ" i = i + 1 Else sNewField = sNewField & "இ" End If Else If Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ீ" i = i + 1 Else sNewField = sNewField & "ி" End If End If sCurVowel = 1 ElseIf UCase(Mid(sField, i, 1)) = "O" Then If i = 6 Or sCurVowel <> 0 Or Not (Right(sNewField, 2) Like "[0-9A-F];") Then If Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ஓ" i = i + 1 Else sNewField = sNewField & "ஒ" End If Else If Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ோ" i = i + 1 Else sNewField = sNewField & "ொ" End If End If sCurVowel = 1 ElseIf UCase(Mid(sField, i, 1)) = "U" Then If i = 6 Or sCurVowel <> 0 Or Not (Right(sNewField, 2) Like "[0-9A-F];") Then If Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ஊ" i = i + 1 Else sNewField = sNewField & "உ" End If Else If Mid(sField, i+1, 1) = Chr(229) Then sNewField = sNewField & "ூ" i = i + 1 Else sNewField = sNewField & "ு" End If End If sCurVowel = 1 ElseIf UCase(Mid(sField, i, 1)) = "K" Then sCurVowel = 0 If LCase(Mid(sField, i+1, 1)) = Chr(246) Then sNewField = sNewField & "ஃ" i = i + 1 Else sNewField = sNewField & "க" End If ElseIf UCase(Mid(sField, i, 1)) = "N" Then sCurVowel = 0 If LCase(Mid(sField, i+1, 1)) = Chr(231) Then sNewField = sNewField & "ங" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = Chr(228) Then sNewField = sNewField & "ஞ" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = Chr(242) Then sNewField = sNewField & "ண" i = i + 1 ElseIf LCase(Mid(sField, i+1, 1)) = Chr(246) Then sNewField = sNewField & "ன" i = i + 1 Else sNewField = sNewField & "ந" End If ElseIf UCase(Mid(sField, i, 1)) = "C" Then sCurVowel = 0 sNewField = sNewField & "ச" ElseIf UCase(Mid(sField, i, 1)) = "T" Then sCurVowel = 0 If Mid(sField, i+1, 1) = Chr(242) Then sNewField = sNewField & "ட" i = i + 1 Else sNewField = sNewField & "த" End If ElseIf UCase(Mid(sField, i, 1)) = "P" Then sCurVowel = 0 sNewField = sNewField & "ப" ElseIf UCase(Mid(sField, i, 1)) = "M" Then sCurVowel = 0 sNewField = sNewField & "ம" ElseIf UCase(Mid(sField, i, 1)) = "Y" Then sCurVowel = 0 sNewField = sNewField & "ய" ElseIf UCase(Mid(sField, i, 1)) = "R" Then sCurVowel = 0 If Mid(sField, i+1, 1) = Chr(246) Then sNewField = sNewField & "ற" i = i + 1 Else sNewField = sNewField & "ர" End If ElseIf UCase(Mid(sField, i, 1)) = "L" Then sCurVowel = 0 If Mid(sField, i+1, 1) = Chr(246) Then sNewField = sNewField & "ழ" i = i + 1 ElseIf Mid(sField, i+1, 1) = Chr(242) Then sNewField = sNewField & "ள" i = i + 1 Else sNewField = sNewField & "ல" End If ElseIf UCase(Mid(sField, i, 1)) = "V" Then sCurVowel = 0 sNewField = sNewField & "வ" ElseIf UCase(Mid(sField, i, 1)) = "J" Then sCurVowel = 0 sNewField = sNewField & "ஜ" ElseIf UCase(Mid(sField, i, 1)) = "S" Then sCurVowel = 0 If Mid(sField, i+1, 1) = Chr(226) Then If Mid(sField, i+2, 3) = "ri" & Chr(229) Then sNewField = sNewField & "ஸ்ரீ" i = i + 4 Else sNewField = sNewField & "ஶ" ' S-acute; note: character is not in ALA Unicode MS font i = i + 1 End If ElseIf Mid(sField, i+1, 1) = Chr(242) Then sNewField = sNewField & "ஷ" i = i + 1 Else sNewField = sNewField & "ஸ" End If ElseIf UCase(Mid(sField, i, 1)) = "H" Then sCurVowel = 0 sNewField = sNewField & "ஹ" Else sNewField = sNewField & "∎" End If i = i + 1 End If If sCurVowel = 0 And Not ( Right(sNewField, 1) Like "[0-9a-z ]" Or Mid(sField, i, 1) Like "[0-9AEIOUaeiou]" Or LCase(Mid(sField, i, 2)) = "r" & Chr(244) Or LCase(Mid(sField, i, 2)) = "l" & Chr(244) ) Then sNewField = sNewField & "்" End If Loop While i <= Len(sField) TransTamil = sNewField End Function