'MacroName:CvtDiacritics
'MacroDescription:Convert precomposed Latin characters to base character + diacritic
'Macro written by: Joel Hahn, Niles Public Library District
'Macro last modified: 1 May 2017

'* CS.GetFieldLineUnicode has a bug; it often does not correctly convert non-MARC Unicode 
'  characters to HTML entities, most commonly when there are no MARC Unicode characters in
'  a field.
'* CS.GetFieldUnicode appears to omit this bug, but cannot easily be used to grab the
'  field where the cursor is, and doesn't convert Latin-1 characters in the range 127-255
'  to HTML entities, thus causing SetField to treat them as MARC diacritics & special
'  characters; it also converts subfield delimiters to HTML entities or not depending on
'  the content of the rest of the field

Option Explicit

Declare Function GetAscChars(sChars, sRecType) As String
Declare Function GetUniChars(sHtmlEntity) As String
Declare Sub InitializeUniArr(sRecType)
Declare Sub InitializeUniArr2(sRecType)
Declare Sub CannotConvertToMARC()

Dim UniArr(-5000 to 20000)

Sub Main
   Dim bool, i as Integer
   Dim Add2i As integer
   Dim sFieldData, sFieldDataCheck, CurTag, CurTagCheck, PrevTagCheck, sRecType As String
   Dim place1, place2, oldplace1, TagCount, nRecType As Integer

   Dim CS As Object
   Set CS = CreateObject("Connex.Client")
   
   ' check for whether working with authority (strict MARC8) or bib (full Unicode) record
   nRecType = CS.ItemType
   sRecType = ""
   Select Case CS.ItemType
     Case 3, 4, 18,  14, 20 'authority record (strict MARC8)
       sRecType = "A"
     Case 0, 1, 17, 2, 19  'bibliographic record (full Unicode)
       sRecType = "B"
     Case Else
       MsgBox "Not viewing a bibliographic or authority record. Exiting..."
       Exit Sub
   End Select

   'numErrors = CS.Validate(sErrorList)
   'MsgBox sErrorList
     
   If CS.CursorRow > 0 Then
      i = CS.CursorRow
      TagCount = 1
      PrevTagCheck = ""
      bool = CS.GetFieldLineUnicode(CS.CursorRow, sFieldDataCheck)
      CurTag = Left(sFieldDataCheck, 3)
      If Not CurTag Like "[0-9][0-9][0-9]" Then
         MsgBox "Macro cannot operate on a field with non-numeric characters in the tag. Exiting..."
         Exit Sub
      End If
      Do 
         bool = CS.GetFieldLineUnicode(i, sFieldDataCheck)
         CurTagCheck = Left(sFieldDataCheck , 3)
         If CurTagCheck = PrevTagCheck Then
            TagCount = TagCount + 1
         ElseIf CurTagCheck <> PrevTagCheck And i < CS.CursorRow Then
            Exit Do
         End If
         
         PrevTagCheck = CurTagCheck
         i = i - 1
      Loop While i >= 1
   End If

   'bool = CS.GetFieldLineUnicode(CS.CursorRow, sFieldData)
   bool = CS.GetFieldUnicode(CurTag, TagCount, sFieldData)
   Dim CurCol, FieldLen, UniCheck
   Dim CurColAdd as Integer
   CurCol = CS.CursorColumn
   bool = CS.InsertText("&#x0414;")
   bool = CS.GetFieldUnicode(CurTag, TagCount, sFieldData)
   i = 1
   CurColAdd = 0
   Do
      UniCheck =  Mid(sFieldData, i + CurColAdd, 8)
      If UniCheck Like "[&][#]x[0-9A-F][0-9A-F][0-9A-F][0-9A-F];" Then
        CurColAdd = CurColAdd + 7
      End If
      i = i + 1
   Loop While i<CurCol
   sFieldData = Left(sFieldData, CurCol + CurColAdd - 1) & Mid(sFieldData, CurCol + CurColAdd + 8)
   i = 1
   Do While i <=Len(sFieldData)
      Select Case Asc(Mid(sFieldData, i, 1))
'      Case 0 to 31
'         'CS.GetFieldLineUnicode did not convert the Unicode characters to HTML entities
'         MsgBox "The macro was unable to read the Unicode characters in this line.  Please add one or more curly double quote characters and then restart the macro to fix the problem.  Exiting..."
'         Exit Sub
'      Case 32 to 126
'         'Do nothing; same in ASCII & ANSEL
'      Case 136, 137, 141, 142, 159 '(Hex 88, 89, 8D, 8E, 9F)
'         'Do nothing; ASCII non-character values that are also used by ANSEL
'      Case 129, 130, 131, 159 'In theory, 128 to 159
'         'Do nothing; ASCII non-character values that are also used because CS.GetFieldLineUnicode auto-converts some ASCII characters to ANSEL
'      'Case 128 to 159
'         'MsgBox Mid(sFieldData, i, 1) & ":" & Asc(Mid(sFieldData, i, 1))
      Case 10, 13 '(CR, LF)
         sFieldData = Left(sFieldData, i-1) & Mid(sFieldData, i+1)
      Case 161 to 174, 176 to 189, 192 to 200, 224 to 251, 254
         'Convert ASCII to ANSEL; ASCII character values that are also used by ANSEL
         Add2i = Len(sFieldData) 'Add2i = Len(GetAscChars(Mid(sFieldData, i, 1), sRecType)) - 1
         sFieldData = Left(sFieldData, i-1) & GetAscChars(Mid(sFieldData, i, 1), sRecType) & Mid(sFieldData, i+1)
         Add2i = Len(sFieldData) - Add2i
         If Add2i >= 0 Then i = i + Add2i
      Case 160, 175, 190, 191, 201 to 223, 252, 253, 255
         'Convert ASCII to ANSEL; ASCII values that are not also used by ANSEL
         Add2i = Len(sFieldData) 'Add2i = Len(GetAscChars(Mid(sFieldData, i, 1), sRecType)) - 1
         sFieldData = Left(sFieldData, i-1) & GetAscChars(Mid(sFieldData, i, 1), sRecType) & Mid(sFieldData, i+1)
         Add2i = Len(sFieldData) - Add2i
         If Add2i >= 0 Then i = i + Add2i
'      Case Else
'         'MsgBox Mid(sFieldData, i, 1) & ":" & Asc(Mid(sFieldData, i, 1))
      End Select
     i = i + 1
   Loop
   'MsgBox sFieldData

   place1 = 0 : place2 = 1 : oldplace1 = 1
   'If InStr(sFieldData, "&#x") Then
      Call InitializeUniArr(sRecType)
      Call InitializeUniArr2(sRecType)
   'End If
   Do While InStr(oldplace1, sFieldData, "&#x")
      place1 = InStr(oldplace1, sFieldData, "&#x")
      If place1 = 0 Then Exit Do
      place2 = InStr(place1, sFieldData, ";")
      If place2 > place1 Then
         sFieldData = Left(sFieldData, place1 - 1) & GetUniChars(Mid(sFieldData, place1, (place2 - place1) + 1)) & Mid(sFieldData, place2 + 1)
      Else
         Exit Do
      End If
      oldplace1 = place1 + 1
   Loop
   'MsgBox sFieldData
   
   bool = CS.SetFieldLine(CS.CursorRow, sFieldData)
   CS.CursorColumn = CurCol

End Sub

Function GetAscChars(sChar, sRecType) As String
   Dim nRetVal As Integer
   'nRetVal = 6 is Yes
   'nRetVal = 7 is No
   Dim sReplaceText As String
   Dim nLocalAsc As Integer
   nLocalAsc = Asc(Left(sChar, 1))
   
   Select Case nLocalAsc
   Case 160
      GetAscChars = " "
   Case 161
      GetAscChars = Chr(201) 'This is OCLC-MARC; MARC21 is Chr(198)
   Case 162
      'should be "[cents]", but CS.GetField[Line]Unicode auto-converts Unicode capital O with a slash (D8) to the MARC-8 value (A2)
      If sRecType = "A" Then sReplaceText = "[cents]" Else sReplaceText = "&#x00A2;"
      nRetval = MsgBox("Should this text include a cents sign " & Chr(162) & " (click Yes) or a capital O with a slash " & Chr(216) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = sReplaceText Else GetAscChars = Chr(162)
   Case 163
      GetAscChars = Chr(185)
   Case 164
      'should be Chr(252), but CS.GetFieldLineUnicode auto-converts Unicode capital Thorn (DE) to the MARC-8 value (A4)
      nRetval = MsgBox("Should this text include a fill character " & Chr(164) & " (click Yes) or a capital thorn " & Chr(222) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = Chr(252) Else GetAscChars = Chr(164)
   Case 165
      'should be "[yen]", but CS.GetFieldLineUnicode auto-converts Unicode AE-ligature (C6) to the MARC-8 value (A5)
      If sRecType = "A" Then sReplaceText = "[yen]" Else sReplaceText = "&#x00A5;"
      nRetval = MsgBox("Should this text include a Yen sign " & Chr(165) & " (click Yes) or a capital AE-ligature " & Chr(198) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = sReplaceText Else GetAscChars = Chr(165)
   Case 166
      GetAscChars = "|"
   Case 167
      If sRecType = "A" Then sReplaceText = "[section]" Else sReplaceText = "&#x00A7;"
      GetAscChars = sReplaceText
   Case 168
      GetAscChars = Chr(232)
   Case 169
      GetAscChars = Chr(202) 'or "c"; This is for OCLC-MARC; MARC21 is Chr(195)
   Case 170
      'should be "a.", but CS.GetFieldLineUnicode auto-converts Unicode phonograph copyright (AE) to the MARC-8 value (AA)
      nRetval = MsgBox("Should this text include a feminine ordinal " & Chr(170) & " (click Yes) or a phonograph copyright " & Chr(174) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = "a." Else GetAscChars = Chr(170)
   Case 171
      'should be Chr(232) or Chr(34), but CS.GetFieldLineUnicode auto-converts Unicode plus/minus (B1) to the MARC-8 value (AB)
      nRetval = MsgBox("Should this text include a spacing umlaut/diaresis " & Chr(171) & " (click Yes) or a plus/minus sign " & Chr(177) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = Chr(34) Else GetAscChars = Chr(171)
   Case 172
      If sRecType = "A" Then sReplaceText = "[not]" Else sReplaceText = "&#x00AC;"
      GetAscChars = sReplaceText
   Case 173
      GetAscChars = "-" 'probably should be ""; this character is supposed to only be used to mark where a word should break for linewraps
   Case 174
      GetAscChars = Chr(170)
   Case 175
      GetAscChars = Chr(229)
   Case 176
      GetAscChars = Chr(158) 'This is for OCLC-MARC; MARC21 is Chr(192)
   Case 177
      GetAscChars = Chr(171)
   Case 178
      'should be Chr(130), but CS.GetFieldLineUnicode auto-converts Unicode lowercase o with slash (F8) to the MARC-8 value (B2)
      nRetval = MsgBox("Should this text include a superscript 2 " & Chr(178) & " (click Yes) or a lowercase o with a slash " & Chr(248) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = Chr(130) Else GetAscChars = Chr(178)
   Case 179
      GetAscChars = Chr(131)
   Case 180
      'should be "'", but CS.GetFieldLineUnicode auto-converts Unicode lowercase thorn (FE) to the MARC-8 value (B4)
      nRetval = MsgBox("Should this text include an acute accent " & Chr(180) & " (click Yes) or a lowercase thorn " & Chr(254) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = "'" Else GetAscChars = Chr(180)
   Case 181
      'should be "[micro]", but CS.GetFieldLineUnicode auto-converts Unicode ae-ligature (E6) to the MARC-8 value (B5)
      If sRecType = "A" Then sReplaceText = "[micro]" Else sReplaceText = "&#x00B5;"
      nRetval = MsgBox("Should this text include a micro sign/lowercase mu " & Chr(181) & " (click Yes) or a lowercase ae-ligature " & Chr(230) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = sReplaceText Else GetAscChars = Chr(181)
   Case 182
      If sRecType = "A" Then sReplaceText = "[pilcrow]" Else sReplaceText = "&#x00B6;"
      GetAscChars = sReplaceText
   Case 183
      GetAscChars = Chr(168)
   Case 184
      GetAscChars = Chr(240)
   Case 185
      'should be Chr(129), but CS.GetField[Line]Unicode auto-converts Unicode British pound sign (A3) to the MARC-8 value (B9)
      nRetval = MsgBox("Should this text include a superscript 1 " & Chr(185) & " (click Yes) or a British pound sign " & Chr(163) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = Chr(129) Else GetAscChars = Chr(185)
   Case 186
      'should be "o.", but CS.GetFieldLineUnicode auto-converts Unicode lowercase eth (F0) to the MARC-8 value (BA)
      nRetval = MsgBox("Should this text include a masculine ordinal " & Chr(186) & " (click Yes) or a lowercase eth " & Chr(240) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = "o." Else GetAscChars = Chr(186)
   Case 187
      GetAscChars = Chr(34)
   Case 188
      GetAscChars = "1/4"
   Case 189
      GetAscChars = "1/2"
   Case 190
      GetAscChars = "3/4"
   Case 191
      GetAscChars = Chr(200)  'This is OCLC-MARC; MARC21 is Chr(197)
   Case 192 To 195
      GetAscChars = "A" & Chr(225 + (nLocalAsc - 192))
   Case 196
      GetAscChars = "A" & Chr(232)
   Case 197
      GetAscChars = "A" & Chr(234)
   Case 200
      'should be "E" & Chr(225), but CS.GetFieldLineUnicode auto-converts Unicode inverted question mark (BF) to the MARC-8 value (C8)
      nRetval = MsgBox("Should this text include a capital E-grave " & Chr(200) & " (click Yes) or an inverted question mark " & Chr(191) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = "E" & Chr(225) Else GetAscChars = Chr(200)
   Case 201
      'should be "E" & Chr(226), but CS.GetFieldLineUnicode auto-converts Unicode inverted exclamation point (A1) to the MARC-8 value (C9)
      nRetval = MsgBox("Should this text include a capital E-acute " & Chr(201) & " (click Yes) or an inverted exclamation point " & Chr(161) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = "E" & Chr(226) Else GetAscChars = Chr(201)
   Case 202
      'should be "E" & Chr(227), but CS.GetFieldLineUnicode auto-converts Unicode Copyright symbol (A9) to the MARC-8 value (CA)
      nRetval = MsgBox("Should this text include a capital E-circumflex " & Chr(202) & " (click Yes) or a Copyright symbol " & Chr(169) & " (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = "E" & Chr(227) Else GetAscChars = Chr(202)
   Case 203
      GetAscChars = "E" & Chr(232)
   Case 204 to 206
      GetAscChars = "I" & Chr(225 + (nLocalAsc - 204))
   Case 207
      GetAscChars = "I" & Chr(232)
   Case 208
      GetAscChars = Chr(163)
   Case 209
      GetAscChars = "N" & Chr(228)
   Case 210 to 213
      GetAscChars = "O" & Chr(225 + (nLocalAsc - 210))
   Case 214
      GetAscChars = "O" & Chr(232)
   Case 215
      GetAscChars = "x"
   Case 216
      GetAscChars = Chr(162)
   Case 217 to 219
      GetAscChars =  "U" & Chr(225 + (nLocalAsc - 217))
   Case 220
      GetAscChars = "U" & Chr(232)
   Case 221
      GetAscChars = "Y" & Chr(226)
   Case 222
      GetAscChars = Chr(164)
   Case 223
      'should be Chr(159), but CS.GetFieldLineUnicode doesn't convert delimiters to HTML entities if there are no Unicode characters with values higher than 255
      nRetval = MsgBox("Should this text include an ess-tzet " & Chr(223) & " (click Yes) or a delimiter symbol (click No)?", 4)
      If nRetVal = 6 Then GetAscChars = Chr(159) Else GetAscChars = Chr(223)
      'This is OCLC-MARC; MARC21 is Chr(199)
   Case 224 to 227
      GetAscChars = "a" & Chr(225 + (nLocalAsc - 224))
   Case 228
      GetAscChars = "a" & Chr(232)
   Case 229
      GetAscChars = "a" & Chr(234)
   Case 230
      GetAscChars = Chr(181)
   Case 231
      GetAscChars = "c" & Chr(240)
   Case 232 to 234
      GetAscChars = "e" & Chr(225 + (nLocalAsc - 232))
   Case 235
      GetAscChars = "e" & Chr(232)
   Case 236 to 238
      GetAscChars = "i" & Chr(225 + (nLocalAsc - 236))
   Case 239
      GetAscChars = "i" & Chr(232)
   Case 240
      GetAscChars = Chr(186)
   Case 241
      GetAscChars = "n" & Chr(228)
   Case 242 to 245
      GetAscChars = "o" & Chr(225 + (nLocalAsc - 242))
   Case 246
      GetAscChars = "o" & Chr(232)
   Case 247
      If sRecType = "A" Then sReplaceText = "[divided by]" Else sReplaceText = "&#x00F7;"
      GetAscChars = sReplaceText
   Case 248
      GetAscChars = Chr(178)
   Case 249 to 251
      GetAscChars = "u" & Chr(225 + (nLocalAsc - 249))
   Case 252
      GetAscChars = "u" & Chr(232)
   Case 253
      GetAscChars = "y" & Chr(226)
   Case 254
      GetAscChars = Chr(180)
   Case 255
      GetAscChars = "y" & Chr(232)
   Case Else
      GetAscChars = Left(sChar, 1)
   End Select
End Function

Sub InitializeUniArr(sRecType)
   UniArr(&H0100) = "A" & Chr(229)
   UniArr(&H0101) = "a" & Chr(229)
   UniArr(&H0102) = "A" & Chr(230)
   UniArr(&H0103) = "a" & Chr(230)
   UniArr(&H0104) = "A" & Chr(241)
   UniArr(&H0105) = "a" & Chr(241)
   UniArr(&H0106) = "C" & Chr(226)
   UniArr(&H0107) = "c" & Chr(226)
   UniArr(&H0108) = "C" & Chr(227)
   UniArr(&H0109) = "c" & Chr(227)
   UniArr(&H010A) = "C" & Chr(231)
   UniArr(&H010B) = "c" & Chr(231)
   UniArr(&H010C) = "C" & Chr(233)
   UniArr(&H010D) = "c" & Chr(233)
   UniArr(&H010E) = "D" & Chr(233)
   UniArr(&H010F) = "d" & Chr(233)
   UniArr(&H0110) = Chr(163)
   UniArr(&H0111) = Chr(179)
   UniArr(&H0112) = "E" & Chr(229)
   UniArr(&H0113) = "e" & Chr(229)
   UniArr(&H0114) = "E" & Chr(230)
   UniArr(&H0115) = "e" & Chr(230)
   UniArr(&H0116) = "E" & Chr(231)
   UniArr(&H0117) = "e" & Chr(231)
   UniArr(&H0118) = "E" & Chr(241)
   UniArr(&H0119) = "e" & Chr(241)
   UniArr(&H011A) = "E" & Chr(233)
   UniArr(&H011B) = "e" & Chr(233)
   UniArr(&H011C) = "G" & Chr(227)
   UniArr(&H011D) = "g" & Chr(227)
   UniArr(&H011E) = "G" & Chr(230)
   UniArr(&H011F) = "g" & Chr(230)
   UniArr(&H0120) = "G" & Chr(231)
   UniArr(&H0121) = "g" & Chr(231)
   UniArr(&H0122) = "G" & Chr(240)
   UniArr(&H0123) = "g" & Chr(240)
   UniArr(&H0124) = "H" & Chr(227)
   UniArr(&H0125) = "h" & Chr(227)
   If sRecType = "A" Then UniArr(&H0126) = "H" & Chr(252) 'H with stroke
   If sRecType = "A" Then UniArr(&H0127) = "h" & Chr(252) 'h with stroke
   UniArr(&H0128) = "I" & Chr(228)
   UniArr(&H0129) = "i" & Chr(228)
   UniArr(&H012A) = "I" & Chr(229)
   UniArr(&H012B) = "i" & Chr(229)
   UniArr(&H012C) = "I" & Chr(230)
   UniArr(&H012D) = "i" & Chr(230)
   UniArr(&H012E) = "I" & Chr(241)
   UniArr(&H012F) = "i" & Chr(241)
   UniArr(&H0130) = "I" & Chr(231)
   UniArr(&H0131) = Chr(184)
   UniArr(&H0132) = "I" & "J"
   UniArr(&H0133) = "i" & "j"
   UniArr(&H0134) = "J" & Chr(227)
   UniArr(&H0135) = "j" & Chr(227)
   UniArr(&H0136) = "K" & Chr(240)
   UniArr(&H0137) = "k" & Chr(240)
   UniArr(&H0138) = "k"
   UniArr(&H0139) = "L" & Chr(226)
   UniArr(&H013A) = "l" & Chr(226)
   UniArr(&H013B) = "L" & Chr(240)
   UniArr(&H013C) = "l" & Chr(240)
   UniArr(&H013D) = "L" & Chr(233)
   UniArr(&H013E) = "l" & Chr(233)
   UniArr(&H013F) = "L" & Chr(168)
   UniArr(&H0140) = "l" & Chr(168)
   UniArr(&H0141) = Chr(161)
   UniArr(&H0142) = Chr(177)
   UniArr(&H0143) = "N" & Chr(226)
   UniArr(&H0144) = "n" & Chr(226)
   UniArr(&H0145) = "N" & Chr(240)
   UniArr(&H0146) = "n" & Chr(240)
   UniArr(&H0147) = "N" & Chr(233)
   UniArr(&H0148) = "n" & Chr(233)
   UniArr(&H0149) = "'" & "n"
   UniArr(&H014C) = "O" & Chr(229)
   UniArr(&H014D) = "o" & Chr(229)
   UniArr(&H014E) = "O" & Chr(230)
   UniArr(&H014F) = "o" & Chr(230)
   UniArr(&H0150) = "O" & Chr(238)
   UniArr(&H0151) = "o" & Chr(238)
   UniArr(&H0152) = Chr(166)
   UniArr(&H0153) = Chr(182)
   UniArr(&H0154) = "R" & Chr(226)
   UniArr(&H0155) = "r" & Chr(226)
   UniArr(&H0156) = "R" & Chr(240)
   UniArr(&H0157) = "r" & Chr(240)
   UniArr(&H0158) = "R" & Chr(233)
   UniArr(&H0159) = "r" & Chr(233)
   UniArr(&H015A) = "S" & Chr(226)
   UniArr(&H015B) = "s" & Chr(226)
   UniArr(&H015C) = "S" & Chr(227)
   UniArr(&H015D) = "s" & Chr(227)
   UniArr(&H015E) = "S" & Chr(240)
   UniArr(&H015F) = "s" & Chr(240)
   UniArr(&H0160) = "S" & Chr(233)
   UniArr(&H0161) = "s" & Chr(233)
   UniArr(&H0162) = "T" & Chr(240)
   UniArr(&H0163) = "t" & Chr(240)
   UniArr(&H0164) = "T" & Chr(233)
   UniArr(&H0165) = "t" & Chr(233)
   If sRecType = "A" Then UniArr(&H0166) = "T" & Chr(252) 'T with stroke
   If sRecType = "A" Then UniArr(&H0167) = "t" & Chr(252) 't with stroke
   UniArr(&H0168) = "U" & Chr(228)
   UniArr(&H0169) = "u" & Chr(228)
   UniArr(&H016A) = "U" & Chr(229)
   UniArr(&H016B) = "u" & Chr(229)
   UniArr(&H016C) = "U" & Chr(230)
   UniArr(&H016D) = "u" & Chr(230)
   UniArr(&H016E) = "U" & Chr(234)
   UniArr(&H016F) = "u" & Chr(234)
   UniArr(&H0170) = "U" & Chr(238)
   UniArr(&H0171) = "u" & Chr(238)
   UniArr(&H0172) = "U" & Chr(241)
   UniArr(&H0173) = "u" & Chr(241)
   UniArr(&H0174) = "W" & Chr(227)
   UniArr(&H0175) = "w" & Chr(227)
   UniArr(&H0176) = "Y" & Chr(227)
   UniArr(&H0177) = "y" & Chr(227)
   UniArr(&H0178) = "Y" & Chr(232)
   UniArr(&H0179) = "Z" & Chr(226)
   UniArr(&H017A) = "z" & Chr(226)
   UniArr(&H017B) = "Z" & Chr(231)
   UniArr(&H017C) = "z" & Chr(231)
   UniArr(&H017D) = "Z" & Chr(233)
   UniArr(&H017E) = "z" & Chr(233)
   UniArr(&H017F) = "s"
   If sRecType = "A" Then
      UniArr(&H0180) = "b" & Chr(252) 'b with stroke
      UniArr(&H0181) = "B" & Chr(252) 'B with hook
      UniArr(&H0182) = "B" & Chr(252) 'B with top bar
      UniArr(&H0183) = "b" & Chr(252) 'b with top bar
      UniArr(&H0187) = "C" & Chr(252) 'C with hook
      UniArr(&H0188) = "c" & Chr(252) 'c with hook
   End If
   UniArr(&H0189) = Chr(163)
   If sRecType = "A" Then
      UniArr(&H018A) = "D" & Chr(252) 'D with hook
      UniArr(&H018B) = "D" & Chr(252) 'D with top bar
      UniArr(&H018C) = "d" & Chr(252) 'd with top bar
      UniArr(&H0191) = "F" & Chr(252) 'F with hook
      UniArr(&H0192) = "f" & Chr(252) 'f with hook
      UniArr(&H0193) = "G" & Chr(252) 'G with hook
      UniArr(&H0197) = "I" & Chr(252) 'I with stroke
      UniArr(&H0198) = "K" & Chr(252) 'K with hook
      UniArr(&H0199) = "k" & Chr(252) 'K with hook
      UniArr(&H019A) = "l" & Chr(252) 'l with bar
   End If
   UniArr(&H019D) = "N" & Chr(247)
   UniArr(&H01A0) = Chr(172)
   UniArr(&H01A1) = Chr(188)
   If sRecType = "A" Then UniArr(&H01A4) = "P" & Chr(252) 'P with hook
   If sRecType = "A" Then UniArr(&H01A5) = "p" & Chr(252) 'p with hook
   UniArr(&H01AB) = "t" & Chr(247)
   If sRecType = "A" Then UniArr(&H01AC) = "T" & Chr(252) 'T with hook
   If sRecType = "A" Then UniArr(&H01AD) = "t" & Chr(252) 't with hook
   UniArr(&H01AE) = "T" & Chr(241)
   UniArr(&H01AF) = Chr(173)
   UniArr(&H01B0) = Chr(189)
   If sRecType = "A" Then
      UniArr(&H01B2) = "V" & Chr(252) 'V with hook
      UniArr(&H01B3) = "Y" & Chr(252) 'Y with hook
      UniArr(&H01B4) = "y" & Chr(252) 'y with hook
      UniArr(&H01B5) = "Z" & Chr(252) 'Z with stroke
      UniArr(&H01B6) = "z" & Chr(252) 'z wtih stroke
      UniArr(&H01BB) = "2" & Chr(252) '2 with stroke
   End If
   UniArr(&H01C0) = "|"
   UniArr(&H01C2) = Chr(223)
   UniArr(&H01C3) = "!"
   UniArr(&H01C4) = "DZ" & Chr(233)
   UniArr(&H01C5) = "Dz" & Chr(233)
   UniArr(&H01C6) = "dz" & Chr(233)
   UniArr(&H01C7) = "L" & "J"
   UniArr(&H01C8) = "L" & "j"
   UniArr(&H01C9) = "l" & "j"
   UniArr(&H01CA) = "N" & "J"
   UniArr(&H01CB) = "N" & "j"
   UniArr(&H01CC) = "n" & "j"
   UniArr(&H01CD) = "A" & Chr(233)
   UniArr(&H01CE) = "a" & Chr(233)
   UniArr(&H01CF) = "I" & Chr(233)
   UniArr(&H01D0) = "i" & Chr(233)
   UniArr(&H01D1) = "O" & Chr(233)
   UniArr(&H01D2) = "o" & Chr(233)
   UniArr(&H01D3) = "U" & Chr(233)
   UniArr(&H01D4) = "u" & Chr(233)
   UniArr(&H01D5) = "U" & Chr(232) & Chr(229)
   UniArr(&H01D6) = "u" & Chr(232) & Chr(229)
   UniArr(&H01D7) = "U" & Chr(232) & Chr(226)
   UniArr(&H01D8) = "u" & Chr(232) & Chr(226)
   UniArr(&H01D9) = "U" & Chr(232) & Chr(233)
   UniArr(&H01DA) = "u" & Chr(232) & Chr(233)
   UniArr(&H01DB) = "U" & Chr(232) & Chr(225)
   UniArr(&H01DC) = "u" & Chr(232) & Chr(225)
   UniArr(&H01DE) = "A" & Chr(232) & Chr(229)
   UniArr(&H01DF) = "a" & Chr(232) & Chr(229)
   UniArr(&H01E0) = "A" & Chr(231) & Chr(229)
   UniArr(&H01E1) = "a" & Chr(231) & Chr(229)
   UniArr(&H01E2) = Chr(165) & Chr(229)
   UniArr(&H01E3) = Chr(181) & Chr(229)
   If sRecType = "A" Then UniArr(&H01E4) = "G" & Chr(252) 'G with stroke
   If sRecType = "A" Then UniArr(&H01E5) = "g" & Chr(252) 'g with stroke
   UniArr(&H01E6) = "G" & Chr(233)
   UniArr(&H01E7) = "g" & Chr(233)
   UniArr(&H01E8) = "K" & Chr(233)
   UniArr(&H01E9) = "k" & Chr(233)
   UniArr(&H01EA) = "O" & Chr(241)
   UniArr(&H01EB) = "o" & Chr(241)
   UniArr(&H01EC) = "O" & Chr(241) & Chr(229)
   UniArr(&H01ED) = "o" & Chr(241) & Chr(229)
   UniArr(&H01F0) = "j" & Chr(233)
   UniArr(&H01F1) = "D" & "Z"
   UniArr(&H01F2) = "D" & "z"
   UniArr(&H01F3) = "d" & "z"
   UniArr(&H01F4) = "G" & Chr(226)
   UniArr(&H01F5) = "g" & Chr(226)
   UniArr(&H01F8) = "N" & Chr(225)
   UniArr(&H01F9) = "n" & Chr(225)
   UniArr(&H01FA) = "A" & Chr(234) & Chr(226)
   UniArr(&H01FB) = "a" & Chr(234) & Chr(226)
   UniArr(&H01FC) = Chr(165) & Chr(226)
   UniArr(&H01FD) = Chr(181) & Chr(226)
   UniArr(&H01FE) = Chr(162) & Chr(226)
   UniArr(&H01FF) = Chr(178) & Chr(226)
   If sRecType = "A" Then
      UniArr(&H0200) = "A" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0201) = "a" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0202) = "A" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0203) = "a" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0204) = "E" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0205) = "e" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0206) = "E" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0207) = "e" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0208) = "I" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0209) = "i" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H020A) = "I" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H020B) = "i" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H020C) = "O" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H020D) = "o" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H020E) = "O" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H020F) = "o" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0210) = "R" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0211) = "r" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0212) = "R" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0213) = "r" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0214) = "U" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0215) = "u" & Chr(252) 'Double grave (&#x030F;)
      UniArr(&H0216) = "U" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0217) = "u" & Chr(252) 'Inverted breve (&#x0311;)
      UniArr(&H0218) = "S" & Chr(252) 'Comma below (&#x0326;)
      UniArr(&H0219) = "s" & Chr(252) 'Comma below (&#x0326;)
      UniArr(&H021A) = "T" & Chr(252) 'Comma below (&#x0326;)
      UniArr(&H021B) = "t" & Chr(252) 'Comma below (&#x0326;)
   Else
      UniArr(&H0200) = "A" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0201) = "a" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0202) = "A" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0203) = "a" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0204) = "E" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0205) = "e" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0206) = "E" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0207) = "e" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0208) = "I" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0209) = "i" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H020A) = "I" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H020B) = "i" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H020C) = "O" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H020D) = "o" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H020E) = "O" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H020F) = "o" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0210) = "R" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0211) = "r" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0212) = "R" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0213) = "r" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0214) = "U" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0215) = "u" & "&#x030F;" 'Double grave (&#x030F;)
      UniArr(&H0216) = "U" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0217) = "u" & "&#x0311;" 'Inverted breve (&#x0311;)
      UniArr(&H0218) = "S" & "&#x0326;" 'Comma below (&#x0326;)
      UniArr(&H0219) = "s" & "&#x0326;" 'Comma below (&#x0326;)
      UniArr(&H021A) = "T" & "&#x0326;" 'Comma below (&#x0326;)
      UniArr(&H021B) = "t" & "&#x0326;" 'Comma below (&#x0326;)
   End If
   UniArr(&H021E) = "H" & Chr(233)
   UniArr(&H021F) = "h" & Chr(233)
   If sRecType = "A" Then UniArr(&H0224) = "Z" & Chr(252) 'Z with hook
   If sRecType = "A" Then UniArr(&H0225) = "z" & Chr(252) 'z with hook
   UniArr(&H0226) = "A" & Chr(231)
   UniArr(&H0227) = "a" & Chr(231)
   UniArr(&H0228) = "E" & Chr(240)
   UniArr(&H0229) = "e" & Chr(240)
   UniArr(&H022A) = "O" & Chr(232) & Chr(229)
   UniArr(&H022B) = "o" & Chr(232) & Chr(229)
   UniArr(&H022C) = "O" & Chr(228) & Chr(229)
   UniArr(&H022D) = "o" & Chr(228) & Chr(229)
   UniArr(&H022E) = "O" & Chr(231)
   UniArr(&H022F) = "o" & Chr(231)
   UniArr(&H0230) = "O" & Chr(231) & Chr(229)
   UniArr(&H0231) = "o" & Chr(231) & Chr(229)
   UniArr(&H0232) = "Y" & Chr(229)
   UniArr(&H0233) = "y" & Chr(229)
   If sRecType = "A" Then
      UniArr(&H023A) = "A" & Chr(252) 'A with stroke
      UniArr(&H023B) = "C" & Chr(252) 'C with stroke
      UniArr(&H023C) = "c" & Chr(252) 'c with stroke
      UniArr(&H023D) = "L" & Chr(252) 'L with bar
      UniArr(&H023E) = "T" & Chr(252) 'T with diagonal stroke
      UniArr(&H023F) = "s" & Chr(252) 's with swash tail
      UniArr(&H0240) = "z" & Chr(252) 'z with swash tail
      UniArr(&H0243) = "B" & Chr(252) 'B with stroke
      UniArr(&H0246) = "E" & Chr(252) 'E with stroke
      UniArr(&H0247) = "e" & Chr(252) 'e with stroke
      UniArr(&H0248) = "J" & Chr(252) 'J with stroke
      UniArr(&H0249) = "j" & Chr(252) 'j with stroke
      UniArr(&H024C) = "R" & Chr(252) 'R with stroke
   End If
   UniArr(&H02BC) = Chr(174)
   UniArr(&H02BB) = Chr(176)
   UniArr(&H0360) = Chr(250) 'This is just the left half
   UniArr(&H0361) = Chr(235) 'This is just the left half
   UniArr(&H1D01) = Chr(181)
   UniArr(&H1E00) = "A" & Chr(244)
   UniArr(&H1E01) = "a" & Chr(244)
   UniArr(&H1E02) = "B" & Chr(231)
   UniArr(&H1E03) = "b" & Chr(231)
   UniArr(&H1E04) = "B" & Chr(242)
   UniArr(&H1E05) = "b" & Chr(242)
   If sRecType = "A" Then UniArr(&H1E06) = "B" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E07) = "b" & Chr(252) 'Macron below (&#x0331;)
   UniArr(&H1E08) = "C" & Chr(240) & Chr(226)
   UniArr(&H1E09) = "c" & Chr(240) & Chr(226)
   UniArr(&H1E0A) = "D" & Chr(231)
   UniArr(&H1E0B) = "d" & Chr(231)
   UniArr(&H1E0C) = "D" & Chr(242)
   UniArr(&H1E0D) = "d" & Chr(242)
   If sRecType = "A" Then UniArr(&H1E0E) = "D" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E0F) = "d" & Chr(252) 'Macron below (&#x0331;)
   UniArr(&H1E10) = "D" & Chr(240)
   UniArr(&H1E11) = "d" & Chr(240)
   If sRecType = "A" Then UniArr(&H1E12) = "D" & Chr(252) 'Circumflex below (&#x032D;)
   If sRecType = "A" Then UniArr(&H1E13) = "d" & Chr(252) 'Circumflex below (&#x032D;)
   UniArr(&H1E14) = "E" & Chr(229) & Chr(225)
   UniArr(&H1E15) = "e" & Chr(229) & Chr(225)
   UniArr(&H1E16) = "E" & Chr(229) & Chr(226)
   UniArr(&H1E17) = "e" & Chr(229) & Chr(226)
   If sRecType = "A" Then UniArr(&H1E18) = "E" & Chr(252) 'Circumflex below (&#x032D;)
   If sRecType = "A" Then UniArr(&H1E19) = "e" & Chr(252) 'Circumflex below (&#x032D;)
   If sRecType = "A" Then UniArr(&H1E1A) = "E" & Chr(252) 'Tilde below (&#x0330;)
   If sRecType = "A" Then UniArr(&H1E1B) = "e" & Chr(252) 'Tilde below (&#x0330;)
   UniArr(&H1E1C) = "E" & Chr(240) & Chr(230)
   UniArr(&H1E1D) = "e" & Chr(240) & Chr(230)
   UniArr(&H1E1E) = "F" & Chr(231)
   UniArr(&H1E1F) = "f" & Chr(231)
   UniArr(&H1E20) = "G" & Chr(229)
   UniArr(&H1E21) = "g" & Chr(229)
   UniArr(&H1E22) = "H" & Chr(231)
   UniArr(&H1E23) = "h" & Chr(231)
   UniArr(&H1E24) = "H" & Chr(242)
   UniArr(&H1E25) = "h" & Chr(242)
   UniArr(&H1E26) = "H" & Chr(232)
   UniArr(&H1E27) = "h" & Chr(232)
   UniArr(&H1E28) = "H" & Chr(240)
   UniArr(&H1E29) = "h" & Chr(240)
   If sRecType = "A" Then UniArr(&H1E2A) = "H" & Chr(252) 'Breve below (&#x032E;)
   If sRecType = "A" Then UniArr(&H1E2B) = "h" & Chr(252) 'Breve below (&#x032E;)
   If sRecType = "A" Then UniArr(&H1E2C) = "I" & Chr(252) 'Tilde below (&#x0330;)
   If sRecType = "A" Then UniArr(&H1E2D) = "i" & Chr(252) 'Tilde below (&#x0330;)
   UniArr(&H1E2E) = "I" & Chr(232) & Chr(226)
   UniArr(&H1E2F) = "i" & Chr(232) & Chr(226)
   UniArr(&H1E30) = "K" & Chr(226)
   UniArr(&H1E31) = "k" & Chr(226)
   UniArr(&H1E32) = "K" & Chr(242)
   UniArr(&H1E33) = "k" & Chr(242)
   If sRecType = "A" Then UniArr(&H1E34) = "K" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E35) = "k" & Chr(252) 'Macron below (&#x0331;)
   UniArr(&H1E36) = "L" & Chr(242)
   UniArr(&H1E37) = "l" & Chr(242)
   UniArr(&H1E38) = "L" & Chr(242) & Chr(229)
   UniArr(&H1E39) = "L" & Chr(242) & Chr(229)
   If sRecType = "A" Then UniArr(&H1E3A) = "L" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E3B) = "l" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E3C) = "L" & Chr(252) 'Circumflex below (&#x032D;)
   If sRecType = "A" Then UniArr(&H1E3D) = "l" & Chr(252) 'Circumflex below (&#x032D;)
   UniArr(&H1E3E) = "M" & Chr(226)
   UniArr(&H1E3F) = "m" & Chr(226)
   UniArr(&H1E40) = "M" & Chr(231)
   UniArr(&H1E41) = "m" & Chr(231)
   UniArr(&H1E42) = "M" & Chr(242)
   UniArr(&H1E43) = "m" & Chr(242)
   UniArr(&H1E44) = "N" & Chr(231)
   UniArr(&H1E45) = "n" & Chr(231)
   UniArr(&H1E46) = "N" & Chr(242)
   UniArr(&H1E47) = "n" & Chr(242)
   If sRecType = "A" Then UniArr(&H1E48) = "N" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E49) = "n" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E4A) = "N" & Chr(252) 'Circumflex below (&#x032D;)
   If sRecType = "A" Then UniArr(&H1E4B) = "n" & Chr(252) 'Circumflex below (&#x032D;)
   UniArr(&H1E4C) = "O" & Chr(228) & Chr(226)
   UniArr(&H1E4D) = "o" & Chr(228) & Chr(226)
   UniArr(&H1E4E) = "O" & Chr(228) & Chr(232)
   UniArr(&H1E4F) = "o" & Chr(228) & Chr(232)
   UniArr(&H1E50) = "O" & Chr(229) & Chr(225)
   UniArr(&H1E51) = "o" & Chr(229) & Chr(225)
   UniArr(&H1E52) = "O" & Chr(229) & Chr(226)
   UniArr(&H1E53) = "o" & Chr(229) & Chr(226)
   UniArr(&H1E54) = "P" & Chr(226)
   UniArr(&H1E55) = "p" & Chr(226)
   UniArr(&H1E56) = "P" & Chr(231)
   UniArr(&H1E57) = "p" & Chr(231)
   UniArr(&H1E58) = "R" & Chr(231)
   UniArr(&H1E59) = "r" & Chr(231)
   UniArr(&H1E5A) = "R" & Chr(242)
   UniArr(&H1E5B) = "r" & Chr(242)
   UniArr(&H1E5C) = "R" & Chr(242) & Chr(229)
   UniArr(&H1E5D) = "r" & Chr(242) & Chr(229)
   If sRecType = "A" Then UniArr(&H1E5E) = "R" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E5F) = "r" & Chr(252) 'Macron below (&#x0331;)
   UniArr(&H1E60) = "S" & Chr(231)
   UniArr(&H1E61) = "s" & Chr(231)
   UniArr(&H1E62) = "S" & Chr(242)
   UniArr(&H1E63) = "s" & Chr(242)
   UniArr(&H1E64) = "S" & Chr(226) & Chr(231)
   UniArr(&H1E65) = "s" & Chr(226) & Chr(231)
   UniArr(&H1E66) = "S" & Chr(233) & Chr(231)
   UniArr(&H1E67) = "s" & Chr(233) & Chr(231)
   UniArr(&H1E68) = "S" & Chr(242) & Chr(231)
   UniArr(&H1E69) = "s" & Chr(242) & Chr(231)
   UniArr(&H1E6A) = "T" & Chr(231)
   UniArr(&H1E6B) = "t" & Chr(231)
   UniArr(&H1E6C) = "T" & Chr(242)
   UniArr(&H1E6D) = "t" & Chr(242)
   If sRecType = "A" Then UniArr(&H1E6E) = "T" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E6F) = "t" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E70) = "T" & Chr(252) 'Circumflex below (&#x032D;)
   If sRecType = "A" Then UniArr(&H1E71) = "t" & Chr(252) 'Circumflex below (&#x032D;)
   UniArr(&H1E72) = "U" & Chr(243)
   UniArr(&H1E73) = "u" & Chr(243)
   If sRecType = "A" Then UniArr(&H1E74) = "U" & Chr(252) 'Tilde below (&#x0330;)
   If sRecType = "A" Then UniArr(&H1E75) = "u" & Chr(252) 'Tilde below (&#x0330;)
   If sRecType = "A" Then UniArr(&H1E76) = "U" & Chr(252) 'Circumflex below (&#x032D;)
   If sRecType = "A" Then UniArr(&H1E77) = "u" & Chr(252) 'Circumflex below (&#x032D;)
   UniArr(&H1E78) = "U" & Chr(228) & Chr(226)
   UniArr(&H1E79) = "u" & Chr(228) & Chr(226)
   UniArr(&H1E7A) = "U" & Chr(229) & Chr(232)
   UniArr(&H1E7B) = "u" & Chr(229) & Chr(232)
   UniArr(&H1E7C) = "V" & Chr(228)
   UniArr(&H1E7D) = "v" & Chr(228)
   UniArr(&H1E7E) = "V" & Chr(242)
   UniArr(&H1E7F) = "v" & Chr(242)
   UniArr(&H1E80) = "W" & Chr(225)
   UniArr(&H1E81) = "w" & Chr(225)
   UniArr(&H1E82) = "W" & Chr(226)
   UniArr(&H1E83) = "w" & Chr(226)
   UniArr(&H1E84) = "W" & Chr(232)
   UniArr(&H1E85) = "w" & Chr(232)
   UniArr(&H1E86) = "W" & Chr(231)
   UniArr(&H1E87) = "w" & Chr(231)
   UniArr(&H1E88) = "W" & Chr(242)
   UniArr(&H1E89) = "w" & Chr(242)
   UniArr(&H1E8A) = "X" & Chr(231)
   UniArr(&H1E8B) = "x" & Chr(231)
   UniArr(&H1E8C) = "X" & Chr(232)
   UniArr(&H1E8D) = "x" & Chr(232)
   UniArr(&H1E8E) = "Y" & Chr(231)
   UniArr(&H1E8F) = "y" & Chr(231)
   UniArr(&H1E90) = "Z" & Chr(227)
   UniArr(&H1E91) = "z" & Chr(227)
   UniArr(&H1E92) = "Z" & Chr(242)
   UniArr(&H1E93) = "z" & Chr(242)
   If sRecType = "A" Then UniArr(&H1E94) = "Z" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E95) = "z" & Chr(252) 'Macron below (&#x0331;)
   If sRecType = "A" Then UniArr(&H1E96) = "h" & Chr(252) 'Macron below (&#x0331;)
   UniArr(&H1E97) = "t" & Chr(232)
   UniArr(&H1E98) = "w" & Chr(234)
   UniArr(&H1E99) = "y" & Chr(234)
   If sRecType = "A" Then UniArr(&H1E9A) = "a" & Chr(252) 'Right half ring (&#x02BE;)
   UniArr(&H1EA0) = "A" & Chr(242)
   UniArr(&H1EA1) = "a" & Chr(242)
   If sRecType = "A" Then UniArr(&H1EA2) = "A" & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EA3) = "a" & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EA4) = "A" & Chr(227) & Chr(226)
   UniArr(&H1EA5) = "a" & Chr(227) & Chr(226)
   UniArr(&H1EA6) = "A" & Chr(227) & Chr(225)
   UniArr(&H1EA7) = "a" & Chr(227) & Chr(225)
   If sRecType = "A" Then UniArr(&H1EA8) = "A" & Chr(227) & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EA9) = "a" & Chr(227) & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EAA) = "A" & Chr(227) & Chr(228)
   UniArr(&H1EAB) = "a" & Chr(227) & Chr(228)
   UniArr(&H1EAC) = "A" & Chr(242) & Chr(227)
   UniArr(&H1EAD) = "a" & Chr(242) & Chr(227)
   UniArr(&H1EAE) = "A" & Chr(230) & Chr(226)
   UniArr(&H1EAF) = "a" & Chr(230) & Chr(226)
   UniArr(&H1EB0) = "A" & Chr(230) & Chr(225)
   UniArr(&H1EB1) = "a" & Chr(230) & Chr(225)
   If sRecType = "A" Then UniArr(&H1EB2) = "A" & Chr(230) & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EB3) = "a" & Chr(230) & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EB4) = "A" & Chr(230) & Chr(228)
   UniArr(&H1EB5) = "a" & Chr(230) & Chr(228)
   UniArr(&H1EB6) = "A" & Chr(242) & Chr(230)
   UniArr(&H1EB7) = "a" & Chr(242) & Chr(230)
   UniArr(&H1EB8) = "E" & Chr(242)
   UniArr(&H1EB9) = "e" & Chr(242)
   If sRecType = "A" Then UniArr(&H1EBA) = "E" & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EBB) = "e" & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EBC) = "E" & Chr(228)
   UniArr(&H1EBD) = "e" & Chr(228)
   UniArr(&H1EBE) = "E" & Chr(227) & Chr(226)
   UniArr(&H1EBF) = "e" & Chr(227) & Chr(226)
   UniArr(&H1EC0) = "E" & Chr(227) & Chr(225)
   UniArr(&H1EC1) = "e" & Chr(227) & Chr(225)
   If sRecType = "A" Then UniArr(&H1EC2) = "E" & Chr(227) & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EC3) = "e" & Chr(227) & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EC4) = "E" & Chr(227) & Chr(228)
   UniArr(&H1EC5) = "e" & Chr(227) & Chr(228)
   UniArr(&H1EC6) = "E" & Chr(242) & Chr(227)
   UniArr(&H1EC7) = "e" & Chr(242) & Chr(227)
   If sRecType = "A" Then UniArr(&H1EC8) = "I" & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EC9) = "i" & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1ECA) = "I" & Chr(242)
   UniArr(&H1ECB) = "i" & Chr(242)
   UniArr(&H1ECC) = "O" & Chr(242)
   UniArr(&H1ECD) = "o" & Chr(242)
   If sRecType = "A" Then UniArr(&H1ECE) = "O" & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1ECF) = "o" & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1ED0) = "O" & Chr(227) & Chr(226)
   UniArr(&H1ED1) = "o" & Chr(227) & Chr(226)
   UniArr(&H1ED2) = "O" & Chr(227) & Chr(225)
   UniArr(&H1ED3) = "o" & Chr(227) & Chr(225)
   If sRecType = "A" Then UniArr(&H1ED4) = "O" & Chr(227) & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1ED5) = "o" & Chr(227) & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1ED6) = "O" & Chr(227) & Chr(228)
   UniArr(&H1ED7) = "o" & Chr(227) & Chr(228)
   UniArr(&H1ED8) = "O" & Chr(242) & Chr(227)
   UniArr(&H1ED9) = "o" & Chr(242) & Chr(227)
   UniArr(&H1EDA) = Chr(172) & Chr(226)
   UniArr(&H1EDB) = Chr(188) & Chr(226)
   UniArr(&H1EDC) = Chr(172) & Chr(225)
   UniArr(&H1EDD) = Chr(188) & Chr(225)
   If sRecType = "A" Then UniArr(&H1EDE) = Chr(172) & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EDF) = Chr(188) & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EE0) = Chr(172) & Chr(228)
   UniArr(&H1EE1) = Chr(188) & Chr(228)
   UniArr(&H1EE2) = Chr(172) & Chr(242)
   UniArr(&H1EE3) = Chr(188) & Chr(242)
   UniArr(&H1EE4) = "U" & Chr(242)
   UniArr(&H1EE5) = "u" & Chr(242)
   If sRecType = "A" Then UniArr(&H1EE6) = "U" & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EE7) = "u" & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EE8) = Chr(173) & Chr(226)
   UniArr(&H1EE9) = Chr(189) & Chr(226)
   UniArr(&H1EEA) = Chr(173) & Chr(225)
   UniArr(&H1EEB) = Chr(189) & Chr(225)
   If sRecType = "A" Then UniArr(&H1EEC) = Chr(173) & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EED) = Chr(189) & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EEE) = Chr(173) & Chr(228)
   UniArr(&H1EEF) = Chr(189) & Chr(228)
   UniArr(&H1EF0) = Chr(173) & Chr(242)
   UniArr(&H1EF1) = Chr(189) & Chr(242)
   UniArr(&H1EF2) = "Y" & Chr(225)
   UniArr(&H1EF3) = "y" & Chr(225)
   UniArr(&H1EF4) = "Y" & Chr(242)
   UniArr(&H1EF5) = "y" & Chr(242)
   If sRecType = "A" Then UniArr(&H1EF6) = "Y" & Chr(252) 'Hook above (&#x0309;)
   If sRecType = "A" Then UniArr(&H1EF7) = "y" & Chr(252) 'Hook above (&#x0309;)
   UniArr(&H1EF8) = "Y" & Chr(228)
   UniArr(&H1EF9) = "y" & Chr(228)
End Sub

Sub InitializeUniArr2(sRecType)
   UniArr(&H2000) = " "
   UniArr(&H2001) = " "
   UniArr(&H2002) = " "
   UniArr(&H2003) = " "
   UniArr(&H2004) = " "
   UniArr(&H2005) = " "
   UniArr(&H2006) = " "
   UniArr(&H2007) = " "
   UniArr(&H2008) = " "
   UniArr(&H2009) = " "
   UniArr(&H200A) = " "
   UniArr(&H200B) = " "
   UniArr(&H200C) = " "
   UniArr(&H200D) = " "
   UniArr(&H2010) = "-"
   UniArr(&H2011) = "-"
   UniArr(&H2012) = "-"
   UniArr(&H2013) = "-"
   UniArr(&H2014) = "--"
   UniArr(&H2015) = "--"
   UniArr(&H2016) = "||"
   UniArr(&H2017) = " " & Chr(245)
   UniArr(&H2018) = "'"
   UniArr(&H2019) = "'"
   UniArr(&H201A) = ","
   UniArr(&H201B) = "'"
   UniArr(&H201C) = Chr(34)
   UniArr(&H201D) = Chr(34)
   UniArr(&H201E) = Chr(34)
   UniArr(&H201F) = Chr(34)
   UniArr(&H2022) = Chr(168)
   UniArr(&H2024) = "."
   UniArr(&H2025) = ".."
   UniArr(&H2026) = "..."
   UniArr(&H2027) = Chr(168)
   UniArr(&H2032) = Chr(167)
   UniArr(&H2033) = Chr(183)
   UniArr(&H2034) = Chr(167) & Chr(167) & Chr(167)
   UniArr(&H2039) = "'"
   UniArr(&H203A) = "'"
   UniArr(&H203C) = "!!"
   If sRecType = "A" Then UniArr(&H203D) = "!?"
   UniArr(&H2047) = "??"
   UniArr(&H2048) = "?!"
   UniArr(&H2049) = "!?"
   UniArr(&H2053) = "~"
   UniArr(&H2057) = Chr(167) & Chr(167) & Chr(167) & Chr(167)
   UniArr(&H205F) = " "
   UniArr(&H2060) = " "
   UniArr(&H2070) = Chr(128)
   UniArr(&H2074) = Chr(132)
   UniArr(&H2075) = Chr(133)
   UniArr(&H2076) = Chr(134)
   UniArr(&H2077) = Chr(135)
   UniArr(&H2078) = Chr(136)
   UniArr(&H2079) = Chr(137)
   UniArr(&H207A) = Chr(140)
   UniArr(&H207B) = Chr(141)
   UniArr(&H207D) = Chr(138)
   UniArr(&H207E) = Chr(139)
   UniArr(&H2080) = Chr(144)
   UniArr(&H2081) = Chr(145)
   UniArr(&H2082) = Chr(146)
   UniArr(&H2083) = Chr(147)
   UniArr(&H2084) = Chr(148)
   UniArr(&H2085) = Chr(149)
   UniArr(&H2086) = Chr(150)
   UniArr(&H2087) = Chr(151)
   UniArr(&H2088) = Chr(152)
   UniArr(&H2089) = Chr(153)
   UniArr(&H208A) = Chr(157)
   UniArr(&H208B) = Chr(156)
   UniArr(&H208D) = Chr(154)
   UniArr(&H208E) = Chr(155)
   UniArr(&H20AC) = Chr(160) 'This is OCLC-MARC; MARC21 is Chr(200)
   UniArr(&H2109) = Chr(158) & "F"
   UniArr(&H2113) = Chr(190) 'This is OCLC-MARC; MARC21 is Chr(193)
   UniArr(&H2117) = Chr(203) 'This is OCLC-MARC; MARC21 is Chr(194)
   If sRecType = "A" Then UniArr(&H211E) = "Rx"
   If sRecType = "A" Then UniArr(&H2120) = "SM"
   If sRecType = "A" Then UniArr(&H2122) = "TM"
   UniArr(&H212A) = "K"
   UniArr(&H2150) = "1/7"
   UniArr(&H2151) = "1/9"
   UniArr(&H2152) = "1/10"
   UniArr(&H2153) = "1/3"
   UniArr(&H2154) = "2/3"
   UniArr(&H2155) = "1/5"
   UniArr(&H2156) = "2/5"
   UniArr(&H2157) = "3/5"
   UniArr(&H2158) = "4/5"
   UniArr(&H2159) = "1/6"
   UniArr(&H215A) = "5/6"
   UniArr(&H215B) = "1/8"
   UniArr(&H215C) = "3/8"
   UniArr(&H215D) = "5/8"
   UniArr(&H215E) = "7/1"
   UniArr(&H215F) = "1/"
   UniArr(&H2160) = "I"
   UniArr(&H2161) = "II"
   UniArr(&H2162) = "III"
   UniArr(&H2163) = "IV"
   UniArr(&H2164) = "V"
   UniArr(&H2165) = "VI"
   UniArr(&H2166) = "VII"
   UniArr(&H2167) = "VIII"
   UniArr(&H2168) = "IX"
   UniArr(&H2169) = "X"
   UniArr(&H216A) = "XI"
   UniArr(&H216B) = "XII"
   UniArr(&H216C) = "L"
   UniArr(&H216D) = "C"
   UniArr(&H216E) = "D"
   UniArr(&H216F) = "M"
   UniArr(&H2160) = "i"
   UniArr(&H2161) = "ii"
   UniArr(&H2162) = "iii"
   UniArr(&H2163) = "iv"
   UniArr(&H2164) = "v"
   UniArr(&H2165) = "vi"
   UniArr(&H2166) = "vii"
   UniArr(&H2167) = "viii"
   UniArr(&H2168) = "ix"
   UniArr(&H2169) = "x"
   UniArr(&H216A) = "xi"
   UniArr(&H216B) = "xii"
   UniArr(&H216C) = "l"
   UniArr(&H216D) = "c"
   UniArr(&H216E) = "d"
   UniArr(&H216F) = "m"
   UniArr(&H2189) = "0/3"
   UniArr(&H266D) = Chr(169) 'This is OCLC-MARC; MARC21 is Chr(196)
   UniArr(&H266F) = Chr(204) 'This is OCLC-MARC; MARC21 is Chr(197)
End Sub

Sub CannotConvertToMARC()
   'Included for reference; the macro currently does nothing with this list
   Dim UniNonMarcArr(0 to 32757)
   UniNonMarcArr(&H014A) = Chr(252) 'Capital letter Eng
   UniNonMarcArr(&H014B) = Chr(252) 'Lowercase letter eng
   UniNonMarcArr(&H0184) = Chr(252) 'Capital Tone Six
   UniNonMarcArr(&H0185) = Chr(252) 'Lowercase tone six
   UniNonMarcArr(&H0186) = Chr(252) 'Capital Open O
   UniNonMarcArr(&H018D) = Chr(252) 'Lowercase turned delta
   UniNonMarcArr(&H018E) = Chr(252) 'Capital Reversed E
   UniNonMarcArr(&H018F) = Chr(252) 'Capital Schwa
   UniNonMarcArr(&H0190) = Chr(252) 'Capital Open E
   UniNonMarcArr(&H0194) = Chr(252) 'Capital Gamma
   UniNonMarcArr(&H0195) = Chr(252) 'Lowercase hv
   UniNonMarcArr(&H0196) = Chr(252) 'Capital iota
   UniNonMarcArr(&H019B) = Chr(252) 'Lowercase lambda with stroke
   UniNonMarcArr(&H019C) = Chr(252) 'Capital Turned M
   UniNonMarcArr(&H019E) = Chr(252) 'Lowercase n with long right leg
   UniNonMarcArr(&H019F) = Chr(252) 'Capital O with middle tilde
   UniNonMarcArr(&H01A2) = Chr(252) 'Capital Oi
   UniNonMarcArr(&H01A3) = Chr(252) 'Lowercase oi
   UniNonMarcArr(&H01A6) = Chr(252) 'Letter Yr
   UniNonMarcArr(&H01A7) = Chr(252) 'Capital Letter Tone Two
   UniNonMarcArr(&H01A8) = Chr(252) 'Lowercase letter tone two
   UniNonMarcArr(&H01A9) = Chr(252) 'Letter Esh
   UniNonMarcArr(&H01AA) = Chr(252) 'Reversed esh loop
   UniNonMarcArr(&H01B1) = Chr(252) 'Capital Upsilon
   UniNonMarcArr(&H01B7) = Chr(252) 'Capital Ezh
   UniNonMarcArr(&H01B8) = Chr(252) 'Capital Ezh Reversed
   UniNonMarcArr(&H01B9) = Chr(252) 'Lowercase ezh reversed
   UniNonMarcArr(&H01BA) = Chr(252) 'Lowercase ezh with tail
   UniNonMarcArr(&H01BC) = Chr(252) 'Capital Letter Tone Five
   UniNonMarcArr(&H01BD) = Chr(252) 'Lowercase letter tone five
   UniNonMarcArr(&H01BE) = Chr(252) 'Inverted glottal stop with stroke
   UniNonMarcArr(&H01BF) = Chr(252) 'Letter Wynn
   UniNonMarcArr(&H01C1) = Chr(252) 'Lateral click
   UniNonMarcArr(&H01DD) = Chr(252) 'Lowercase schwa
   UniNonMarcArr(&H01EE) = Chr(252)
   UniNonMarcArr(&H01EF) = Chr(252)
   UniNonMarcArr(&H01F6) = Chr(252) 'Capital Letter Hwair
   UniNonMarcArr(&H01F7) = Chr(252) 'Capital Letter Wynn
   UniNonMarcArr(&H021C) = Chr(252) 'Capital Yogh
   UniNonMarcArr(&H021D) = Chr(252) 'Lowercase yogh
   UniNonMarcArr(&H0220) = Chr(252) 'Capital N with long right leg
   UniNonMarcArr(&H0221) = Chr(252) 'd with curl
   UniNonMarcArr(&H0222) = Chr(252) 'Capital Ou
   UniNonMarcArr(&H0223) = Chr(252) 'Lowercase ou
   UniNonMarcArr(&H0234) = Chr(252) 'l with curl
   UniNonMarcArr(&H0235) = Chr(252) 'n with curl
   UniNonMarcArr(&H0236) = Chr(252) 't with curl
   UniNonMarcArr(&H0237) = Chr(252) 'dotless j
   UniNonMarcArr(&H0238) = Chr(252) 'lowercase db digraph
   UniNonMarcArr(&H0239) = Chr(252) 'lowercase qp digraph
   UniNonMarcArr(&H0241) = Chr(252) 'Capital glottal stop
   UniNonMarcArr(&H0242) = Chr(252) 'Lowercase glottal stop
   UniNonMarcArr(&H0244) = Chr(252) 'U bar
   UniNonMarcArr(&H0245) = Chr(252) 'Turned V
   UniNonMarcArr(&H024A) = Chr(252) 'Q with hook tail
   UniNonMarcArr(&H024B) = Chr(252) 'q with hook tail
   UniNonMarcArr(&H024D) = Chr(252)
   UniNonMarcArr(&H024E) = Chr(252)
   UniNonMarcArr(&H024F) = Chr(252)
   UniNonMarcArr(&H0250) = Chr(252)
   UniNonMarcArr(&H0251) = Chr(252)
   UniNonMarcArr(&H0252) = Chr(252)
   UniNonMarcArr(&H0253) = Chr(252)
   UniNonMarcArr(&H0254) = Chr(252)
   UniNonMarcArr(&H0255) = Chr(252)
   UniNonMarcArr(&H0256) = Chr(252)
   UniNonMarcArr(&H0257) = Chr(252)
   UniNonMarcArr(&H0258) = Chr(252)
   UniNonMarcArr(&H0259) = Chr(252)
   UniNonMarcArr(&H025A) = Chr(252)
   UniNonMarcArr(&H025B) = Chr(252)
   UniNonMarcArr(&H025C) = Chr(252)
   UniNonMarcArr(&H025D) = Chr(252)
   UniNonMarcArr(&H025E) = Chr(252)
   UniNonMarcArr(&H025F) = Chr(252)
   UniNonMarcArr(&H0260) = Chr(252)
   UniNonMarcArr(&H0261) = Chr(252)
   UniNonMarcArr(&H0262) = Chr(252)
   UniNonMarcArr(&H0263) = Chr(252)
   UniNonMarcArr(&H0264) = Chr(252)
   UniNonMarcArr(&H0265) = Chr(252)
   UniNonMarcArr(&H0266) = Chr(252)
   UniNonMarcArr(&H0267) = Chr(252)
   UniNonMarcArr(&H0268) = Chr(252)
   UniNonMarcArr(&H0269) = Chr(252)
   UniNonMarcArr(&H026A) = Chr(252)
   UniNonMarcArr(&H026B) = Chr(252)
   UniNonMarcArr(&H026C) = Chr(252)
   UniNonMarcArr(&H026D) = Chr(252)
   UniNonMarcArr(&H026E) = Chr(252)
   UniNonMarcArr(&H026F) = Chr(252)
   UniNonMarcArr(&H0270) = Chr(252)
   UniNonMarcArr(&H0271) = Chr(252)
   UniNonMarcArr(&H0272) = Chr(252)
   UniNonMarcArr(&H0273) = Chr(252)
   UniNonMarcArr(&H0274) = Chr(252)
   UniNonMarcArr(&H0275) = Chr(252)
   UniNonMarcArr(&H0276) = Chr(252)
   UniNonMarcArr(&H0277) = Chr(252)
   UniNonMarcArr(&H0278) = Chr(252)
   UniNonMarcArr(&H0279) = Chr(252)
   UniNonMarcArr(&H027A) = Chr(252)
   UniNonMarcArr(&H027B) = Chr(252)
   UniNonMarcArr(&H027C) = Chr(252)
   UniNonMarcArr(&H027D) = Chr(252)
   UniNonMarcArr(&H027E) = Chr(252)
   UniNonMarcArr(&H027F) = Chr(252)
   UniNonMarcArr(&H0280) = Chr(252)
   UniNonMarcArr(&H0281) = Chr(252)
   UniNonMarcArr(&H0282) = Chr(252)
   UniNonMarcArr(&H0283) = Chr(252)
   UniNonMarcArr(&H0284) = Chr(252)
   UniNonMarcArr(&H0285) = Chr(252)
   UniNonMarcArr(&H0286) = Chr(252)
   UniNonMarcArr(&H0287) = Chr(252)
   UniNonMarcArr(&H0288) = Chr(252)
   UniNonMarcArr(&H0289) = Chr(252)
   UniNonMarcArr(&H028A) = Chr(252)
   UniNonMarcArr(&H028B) = Chr(252)
   UniNonMarcArr(&H028C) = Chr(252)
   UniNonMarcArr(&H028D) = Chr(252)
   UniNonMarcArr(&H028E) = Chr(252)
   UniNonMarcArr(&H028F) = Chr(252)
   UniNonMarcArr(&H0290) = Chr(252)
   UniNonMarcArr(&H0291) = Chr(252)
   UniNonMarcArr(&H0292) = Chr(252)
   UniNonMarcArr(&H0293) = Chr(252)
   UniNonMarcArr(&H0294) = Chr(252)
   UniNonMarcArr(&H0295) = Chr(252)
   UniNonMarcArr(&H0296) = Chr(252)
   UniNonMarcArr(&H0297) = Chr(252)
   UniNonMarcArr(&H0298) = Chr(252)
   UniNonMarcArr(&H0299) = Chr(252)
   UniNonMarcArr(&H029A) = Chr(252)
   UniNonMarcArr(&H029B) = Chr(252)
   UniNonMarcArr(&H029C) = Chr(252)
   UniNonMarcArr(&H029D) = Chr(252)
   UniNonMarcArr(&H029E) = Chr(252)
   UniNonMarcArr(&H029F) = Chr(252)
   UniNonMarcArr(&H02A0) = Chr(252)
   UniNonMarcArr(&H02A1) = Chr(252)
   UniNonMarcArr(&H02A2) = Chr(252)
   UniNonMarcArr(&H02A3) = Chr(252)
   UniNonMarcArr(&H02A4) = Chr(252)
   UniNonMarcArr(&H02A5) = Chr(252)
   UniNonMarcArr(&H02A6) = Chr(252)
   UniNonMarcArr(&H02A7) = Chr(252)
   UniNonMarcArr(&H02A8) = Chr(252)
   UniNonMarcArr(&H02A9) = Chr(252)
   UniNonMarcArr(&H02AA) = Chr(252)
   UniNonMarcArr(&H02AB) = Chr(252)
   UniNonMarcArr(&H02AC) = Chr(252)
   UniNonMarcArr(&H02AD) = Chr(252)
   UniNonMarcArr(&H02AE) = Chr(252)
   UniNonMarcArr(&H02AF) = Chr(252)
   UniNonMarcArr(&H1D00) = Chr(252)
   UniNonMarcArr(&H1D02) = Chr(252)
   UniNonMarcArr(&H1D03) = Chr(252)
   UniNonMarcArr(&H1D04) = Chr(252)
   UniNonMarcArr(&H1D05) = Chr(252)
   UniNonMarcArr(&H1D06) = Chr(252)
   UniNonMarcArr(&H1D07) = Chr(252)
   UniNonMarcArr(&H1D08) = Chr(252)
   UniNonMarcArr(&H1D09) = Chr(252)
   UniNonMarcArr(&H1D0A) = Chr(252)
   UniNonMarcArr(&H1D0B) = Chr(252)
   UniNonMarcArr(&H1D0C) = Chr(252)
   UniNonMarcArr(&H1D0D) = Chr(252)
   UniNonMarcArr(&H1D0E) = Chr(252)
   UniNonMarcArr(&H1D0F) = Chr(252)
   UniNonMarcArr(&H1D10) = Chr(252)
   UniNonMarcArr(&H1D11) = Chr(252)
   UniNonMarcArr(&H1D12) = Chr(252)
   UniNonMarcArr(&H1D13) = Chr(252)
   UniNonMarcArr(&H1D14) = Chr(252)
   UniNonMarcArr(&H1D15) = Chr(252)
   UniNonMarcArr(&H1D16) = Chr(252)
   UniNonMarcArr(&H1D17) = Chr(252)
   UniNonMarcArr(&H1D18) = Chr(252)
   UniNonMarcArr(&H1D19) = Chr(252)
   UniNonMarcArr(&H1D1A) = Chr(252)
   UniNonMarcArr(&H1D1B) = Chr(252)
   UniNonMarcArr(&H1D1C) = Chr(252)
   UniNonMarcArr(&H1D1D) = Chr(252)
   UniNonMarcArr(&H1D1E) = Chr(252)
   UniNonMarcArr(&H1D1F) = Chr(252)
   UniNonMarcArr(&H1D20) = Chr(252)
   UniNonMarcArr(&H1D21) = Chr(252)
   UniNonMarcArr(&H1D22) = Chr(252)
   UniNonMarcArr(&H1D23) = Chr(252)
   UniNonMarcArr(&H1D24) = Chr(252)
   UniNonMarcArr(&H1D25) = Chr(252)
   UniNonMarcArr(&H1D6B) = Chr(252)
   UniNonMarcArr(&H1D6C) = Chr(252)
   UniNonMarcArr(&H1D6D) = Chr(252)
   UniNonMarcArr(&H1D6E) = Chr(252)
   UniNonMarcArr(&H1D6F) = Chr(252)
   UniNonMarcArr(&H1D70) = Chr(252)
   UniNonMarcArr(&H1D71) = Chr(252)
   UniNonMarcArr(&H1D72) = Chr(252)
   UniNonMarcArr(&H1D73) = Chr(252)
   UniNonMarcArr(&H1D74) = Chr(252)
   UniNonMarcArr(&H1D75) = Chr(252)
   UniNonMarcArr(&H1D76) = Chr(252)
   UniNonMarcArr(&H1D77) = Chr(252)
   UniNonMarcArr(&H1D79) = Chr(252)
   UniNonMarcArr(&H1D7A) = Chr(252)
   UniNonMarcArr(&H1D7B) = Chr(252)
   UniNonMarcArr(&H1D7C) = Chr(252)
   UniNonMarcArr(&H1D7D) = Chr(252)
   UniNonMarcArr(&H1D7E) = Chr(252)
   UniNonMarcArr(&H1D7F) = Chr(252)
   UniNonMarcArr(&H1D80) = Chr(252)
   UniNonMarcArr(&H1D81) = Chr(252)
   UniNonMarcArr(&H1D82) = Chr(252)
   UniNonMarcArr(&H1D83) = Chr(252)
   UniNonMarcArr(&H1D84) = Chr(252)
   UniNonMarcArr(&H1D85) = Chr(252)
   UniNonMarcArr(&H1D86) = Chr(252)
   UniNonMarcArr(&H1D87) = Chr(252)
   UniNonMarcArr(&H1D88) = Chr(252)
   UniNonMarcArr(&H1D89) = Chr(252)
   UniNonMarcArr(&H1D8A) = Chr(252)
   UniNonMarcArr(&H1D8B) = Chr(252)
   UniNonMarcArr(&H1D8C) = Chr(252)
   UniNonMarcArr(&H1D8D) = Chr(252)
   UniNonMarcArr(&H1D8E) = Chr(252)
   UniNonMarcArr(&H1D8F) = Chr(252)
   UniNonMarcArr(&H1D90) = Chr(252)
   UniNonMarcArr(&H1D91) = Chr(252)
   UniNonMarcArr(&H1D92) = Chr(252)
   UniNonMarcArr(&H1D93) = Chr(252)
   UniNonMarcArr(&H1D94) = Chr(252)
   UniNonMarcArr(&H1D95) = Chr(252)
   UniNonMarcArr(&H1D96) = Chr(252)
   UniNonMarcArr(&H1D97) = Chr(252)
   UniNonMarcArr(&H1D98) = Chr(252)
   UniNonMarcArr(&H1D99) = Chr(252)
   UniNonMarcArr(&H1D9A) = Chr(252)
   UniNonMarcArr(&H1E9B) = Chr(252)
   UniNonMarcArr(&H1E9C) = Chr(252)
   UniNonMarcArr(&H1E9D) = Chr(252)
   UniNonMarcArr(&H1E9E) = Chr(252)
   UniNonMarcArr(&H1E9F) = Chr(252)
   UniNonMarcArr(&H1EFA) = Chr(252)
   UniNonMarcArr(&H1EFB) = Chr(252)
   UniNonMarcArr(&H1EFC) = Chr(252)
   UniNonMarcArr(&H1EFD) = Chr(252)
   UniNonMarcArr(&H1EFE) = Chr(252)
   UniNonMarcArr(&H1EFF) = Chr(252)
   UniNonMarcArr(&H207C) = Chr(252)
   UniNonMarcArr(&H208C) = Chr(252)
   UniNonMarcArr(&H2C60) = Chr(252)
   UniNonMarcArr(&H2C61) = Chr(252)
   UniNonMarcArr(&H2C62) = Chr(252)
   UniNonMarcArr(&H2C63) = Chr(252)
   UniNonMarcArr(&H2C64) = Chr(252)
   UniNonMarcArr(&H2C65) = Chr(252)
   UniNonMarcArr(&H2C66) = Chr(252)
   UniNonMarcArr(&H2C67) = Chr(252)
   UniNonMarcArr(&H2C68) = Chr(252)
   UniNonMarcArr(&H2C69) = Chr(252)
   UniNonMarcArr(&H2C6A) = Chr(252)
   UniNonMarcArr(&H2C6B) = Chr(252)
   UniNonMarcArr(&H2C6C) = Chr(252)
   UniNonMarcArr(&H2C6D) = Chr(252)
   UniNonMarcArr(&H2C6E) = Chr(252)
   UniNonMarcArr(&H2C6F) = Chr(252)
   UniNonMarcArr(&H2C71) = Chr(252)
   UniNonMarcArr(&H2C72) = Chr(252)
   UniNonMarcArr(&H2C73) = Chr(252)
   UniNonMarcArr(&H2C74) = Chr(252)
   UniNonMarcArr(&H2C75) = Chr(252)
   UniNonMarcArr(&H2C76) = Chr(252)
   UniNonMarcArr(&H2C77) = Chr(252)
   UniNonMarcArr(&H2C78) = Chr(252)
   UniNonMarcArr(&H2C79) = Chr(252)
   UniNonMarcArr(&H2C7A) = Chr(252)
   UniNonMarcArr(&H2C7B) = Chr(252)
   UniNonMarcArr(&H2C7C) = Chr(252)
End Sub

Function GetUniChars(sHtmlEntity) As String
   Dim Hextext As String
   Dim HexVal As Long
   Hextext = Mid(sHtmlEntity, 4)
   Hextext = Left(HexText, Len(sHtmlEntity) - 1)
   HexVal = Val("&H" & Hextext & "&")
   GetUniChars = sHtmlEntity
   Dim nRetVal

   'If sHtmlEntity = "&#x01C2;" Then GetUniChars = Chr(223)
   'If HexVal = &H01C2 Then msgBox UniArr(HexVal)
   If UniArr(HexVal) <> "" Then GetUniChars = UniArr(HexVal) Else GetUniChars = sHtmlEntity
   If HexVal = &H200E Or HexVal = &H200F Then
      nRetval = MsgBox("Left-to-Right or Right-to-Left marker found. Keep (click Yes) or Remove (click No)?", 4)
      If nRetVal = 6 Then GetUniChars = sHtmlEntity Else GetUniChars = ""
   End If 
End Function