Function Telex(ByVal Text$, Optional ByVal MarkAtLast As Boolean)
Dim l, u, k, m, i&, t$
t = Text
l = Array("00E0", "00E1", "00E2", "00E3", "00E8", "00E9", "00EA", "00EC", "00ED", "00F2", "00F3", "00F4", "00F5", "00F9", "00FA", "00FD", "0103", "0111", "0129", "0169", "01A1", "01B0", "1EA1", "1EA3", "1EA5", "1EA7", "1EA9", "1EAB", "1EAD", "1EAF", "1EB1", "1EB3", "1EB5", "1EB7", "1EB9", "1EBB", "1EBD", "1EBF", "1EC1", "1EC3", "1EC5", "1EC7", "1EC9", "1ECB", "1ECD", "1ECF", "1ED1", "1ED3", "1ED5", "1ED7", "1ED9", "1EDB", "1EDD", "1EDF", "1EE1", "1EE3", "1EE5", "1EE7", "1EE9", "1EEB", "1EED", "1EEF", "1EF1", "1EF3", "1EF5", "1EF7", "1EF9")
u = Array("00C0", "00C1", "00C2", "00C3", "00C8", "00C9", "00CA", "00CC", "00CD", "00D2", "00D3", "00D4", "00D5", "00D9", "00DA", "00DD", "0102", "0110", "0128", "0168", "01A0", "01AF", "1EA0", "1EA2", "1EA4", "1EA6", "1EA8", "1EAA", "1EAC", "1EAE", "1EB0", "1EB2", "1EB4", "1EB6", "1EB8", "1EBA", "1EBC", "1EBE", "1EC0", "1EC2", "1EC4", "1EC6", "1EC8", "1ECA", "1ECC", "1ECE", "1ED0", "1ED2", "1ED4", "1ED6", "1ED8", "1EDA", "1EDC", "1EDE", "1EE0", "1EE2", "1EE4", "1EE6", "1EE8", "1EEA", "1EEC", "1EEE", "1EF0", "1EF2", "1EF4", "1EF6", "1EF8")
k = Array("a", "a", "aa", "aw", "e", "a", "ee", "i", "i", "o", "o", "oo", "o", "u", "u", "y", "aw", "dd", "i", "u", "ow", "uw", "a", "a", "aa", "aa", "aa", "aa", "aa", "aw", "aw", "aw", "aw", "aw", "e", "e", "e", "ee", "ee", "ee", "ee", "ee", "i", "i", "o", "o", "oo", "oo", "oo", "oo", "oo", "ow", "ow", "oo", "oo", "oo", "u", "u", "uw", "uw", "uw", "uw", "uw", "y", "y", "y", "y")
m = Array("f", "s", "", "", "f", "s", "", "f", "s", "f", "s", "", "x", "f", "s", "s", "", "", "x", "x", "", "", "j", "r", "s", "f", "r", "x", "j", "s", "f", "r", "x", "j", "j", "r", "x", "s", "f", "r", "x", "j", "r", "j", "j", "r", "s", "f", "r", "x", "j", "s", "f", "r", "x", "j", "j", "r", "s", "f", "r", "x", "j", "f", "j", "r", "x")
If MarkAtLast Then
Dim r
Set r = VBA.CreateObject("VBScript.RegExp")
With r
.Global = 1
.IgnoreCase = 0
.MultiLine = 1
For i = 0 To UBound(l)
.Pattern = "[\u" & l(i) & "](\w*)"
t = r.Replace(t, k(i) & "$1" & m(i))
.Pattern = "[\u" & u(i) & "](\w*)"
t = r.Replace(t, UCase(Left(k(i), 1)) & Mid(k(i), 2) & "$1" & m(i))
Next i
End With
Set r = Nothing
Else
For i = 0 To UBound(l)
t = Replace(t, ChrW(CLng("&H" & l(i))), k(i) & m(i))
t = Replace(t, ChrW(CLng("&H" & u(i))), UCase(Left(k(i), 1)) & Mid(k(i), 2) & m(i))
Next i
End If
Telex = t
End Function