============================================================================================= -- ************Purpose : Golu Finder -- ************Definition : This procedure for finding the invalid character in devanagari unicode data -- ************Developed by : Technical Team, Election Commission of India, New Delhi. --============================================================================================== Imports System.Text.RegularExpressions Public Class Cleaner_HI Dim objApp As Application Public Function SimplifyHindi(ByVal strHinName As String, ByVal chrarr() As Char, ByVal chrArrMatras() As Char) Try objApp.DoEvents() strHinName = handel_Delimiters_HI(strHinName) strHinName = RemoveCharacters(chrarr, strHinName) objApp.DoEvents() strHinName = ReducingCharacterSet(strHinName) objApp.DoEvents() strHinName = MultipleToTwo(strHinName) objApp.DoEvents() strHinName = convertTwoIndVowelsToOne(strHinName) objApp.DoEvents() strHinName = strHinName.Replace(ChrW(2404), "") 'Replacements for correction ''****************************************************** strHinName = strHinName.Replace(ChrW(2310) & ChrW(2375), ChrW(2323)) strHinName = strHinName.Replace(ChrW(2366) & ChrW(2379), ChrW(2379)) strHinName = strHinName.Replace(ChrW(2379) & ChrW(2366), ChrW(2379)) strHinName = strHinName.Replace(ChrW(2366) & ChrW(2380), ChrW(2380)) strHinName = strHinName.Replace(ChrW(2380) & ChrW(2366), ChrW(2380)) strHinName = strHinName.Replace(ChrW(2373), "") strHinName = strHinName.Replace(ChrW(2366) & ChrW(2375), ChrW(2379)) strHinName = strHinName.Replace(ChrW(2375) & ChrW(2366), ChrW(2379)) strHinName = strHinName.Replace(ChrW(2366) & ChrW(2376), ChrW(2380)) strHinName = strHinName.Replace(ChrW(2376) & ChrW(2366), ChrW(2380)) strHinName = strHinName.Replace(ChrW(2323) & ChrW(2375), ChrW(2324)) ''******************************************************************** strHinName = Conversion(strHinName) objApp.DoEvents() strHinName = convertTwoMatrasToOne(strHinName) objApp.DoEvents() strHinName = processingDependantVowels(strHinName) objApp.DoEvents() strHinName = HandlingMatraInbetweenWord(strHinName) 'Repeating Multiple characters to two after simplification strHinName = MultipleToTwo(strHinName) strHinName = convertTwoIndVowelsToOne(strHinName) strHinName = processingDependantVowels(strHinName) If AscW(strHinName.Substring(0, 1)) = 2306 Or AscW(strHinName.Substring(0, 1)) = 2381 Then strHinName = strHinName.Remove(0, 1) If Trim(strHinName).Substring(0, 1).IndexOfAny(chrArrMatras) >= 0 Then strHinName = strHinName.Remove(0, 1) '****************** strHinName = HandlingMatraInbetweenWord(strHinName) ' code added by rohit to hander dependent Vowel strHinName = dependentVowelHandling(strHinName) '************* cod end ************************ If strHinName.Length = 1 And Not (AscW(strHinName.Substring(0, 1)) > 2308 And AscW(strHinName.Substring(0, 1)) < 2362) Then strHinName = "" End If Catch ex As Exception 'MsgBox(ex.Message) If Trim(strHinName) = "" Then Exit Try End If End Try Return strHinName End Function Public Function CleanOtherThanHindi(ByVal strName As String) strName = handel_Delimiters_HI(strName) Return strName End Function Public Function handel_Delimiters_HI(ByVal strDelimiters As String, Optional ByVal strReplceWith As String = " ") ' REPLACE UNABLE TO CORRECT CHAR WITH DESIRED STRING Dim RegexObj As Regex = New Regex("regularexpression") strDelimiters = RegexObj.Replace(strDelimiters, "[-.,{;@:/\|>0(){}]", strReplceWith) Return strDelimiters End Function Private Function ReducingHalant(ByVal strHName As String) strHName = strHName.Replace(ChrW(2325) & ChrW(2381) & ChrW(2326), ChrW(2326)) strHName = strHName.Replace(ChrW(2327) & ChrW(2381) & ChrW(2328), ChrW(2328)) strHName = strHName.Replace(ChrW(2330) & ChrW(2381) & ChrW(2331), ChrW(2331)) strHName = strHName.Replace(ChrW(2332) & ChrW(2381) & ChrW(2333), ChrW(2333)) strHName = strHName.Replace(ChrW(2335) & ChrW(2381) & ChrW(2336), ChrW(2336)) strHName = strHName.Replace(ChrW(2337) & ChrW(2381) & ChrW(2338), ChrW(2338)) strHName = strHName.Replace(ChrW(2340) & ChrW(2381) & ChrW(2341), ChrW(2341)) strHName = strHName.Replace(ChrW(2342) & ChrW(2381) & ChrW(2343), ChrW(2343)) strHName = strHName.Replace(ChrW(2346) & ChrW(2381) & ChrW(2347), ChrW(2347)) strHName = strHName.Replace(ChrW(2348) & ChrW(2381) & ChrW(2349), ChrW(2349)) Return strHName End Function Private Function RemoveCharacters(ByVal chrarr() As Char, ByVal strInName As String) Dim strname As String strname = strInName Dim chr As Char For Each chr In chrarr If strname.IndexOf(chr) >= 0 Then strname = strname.Replace(chr, "") End If Next For Each chr In strname.ToCharArray If (AscW(chr) < 2305 Or AscW(chr) > 2401) And AscW(chr) <> 32 Then strname = strname.Replace(chr, "") End If Next Return strname End Function Public Function MultipleToTwo(ByVal strTrname As String) Dim strname As String strname = strTrname Dim length As Integer = strname.Length - 1 Dim i, len1 As Integer For i = 0 To length - 2 If i > length - 2 Then Exit For If UCase(strname.Substring(i, 1)) = UCase(strname.Substring(i + 1, 1)) And (i + 1 < strname.Length - 1) Then If UCase(strname.Substring(i + 1, 1)) = UCase(strname.Substring(i + 2, 1)) Then strname = strname.Remove(i + 2, 1) i = i - 1 length = strname.Length End If End If Next MultipleToTwo = strname End Function Private Function ReducingHalfandOneChrToOne(ByVal strHName As String) Dim iarr As Integer Dim strComb As String For iarr = 0 To strHName.Length - 1 If iarr >= strHName.Length - 1 Then Exit For Select Case AscW(strHName.Substring(iarr, 1)) Case Is > 2324 If AscW(strHName.Substring(iarr, 1)) < 2362 Then Select Case AscW(strHName.Substring(iarr + 1, 1)) Case 2381 If iarr + 2 < strHName.Length Then If iarr + 3 < strHName.Length And AscW(strHName.Substring(iarr + 2, 1)) > 2324 And AscW(strHName.Substring(iarr + 2, 1)) < 2362 And (AscW(strHName.Substring(iarr + 2, 1)) = AscW(strHName.Substring(iarr, 1))) Then If AscW(strHName.Substring(iarr + 3, 1)) = 2381 Then strComb = strHName.Substring(iarr, 1) & strHName.Substring(iarr + 1, 1) & strHName.Substring(iarr + 2, 1) & strHName.Substring(iarr + 3, 1) strHName = strHName.Replace(strComb, strHName.Substring(iarr, 1)) Else strComb = strHName.Substring(iarr, 1) & strHName.Substring(iarr + 1, 1) & strHName.Substring(iarr + 2, 1) strHName = strHName.Replace(strComb, strHName.Substring(iarr, 1)) End If Else If AscW(strHName.Substring(iarr + 2, 1)) = AscW(strHName.Substring(iarr, 1)) Then strComb = strHName.Substring(iarr, 1) & strHName.Substring(iarr + 1, 1) & strHName.Substring(iarr + 2, 1) strHName = strHName.Replace(strComb, strHName.Substring(iarr, 1)) ElseIf iarr <> 0 Then If AscW(strHName.Substring(iarr, 1)) = AscW(strHName.Substring(iarr - 1, 1)) Then strComb = strHName.Substring(iarr - 1, 1) & strHName.Substring(iarr, 1) & strHName.Substring(iarr + 1, 1) strHName = strHName.Replace(strComb, strHName.Substring(iarr, 1)) End If End If End If End If Case Is > 2324 If AscW(strHName.Substring(iarr + 1, 1)) < 2362 Then If iarr + 2 < strHName.Length And AscW(strHName.Substring(iarr + 1, 1)) = AscW(strHName.Substring(iarr, 1)) Then If AscW(strHName.Substring(iarr + 2, 1)) = 2381 Then If iarr + 3 < strHName.Length Then If iarr + 4 < strHName.Length And AscW(strHName.Substring(iarr + 3, 1)) > 2324 And AscW(strHName.Substring(iarr + 3, 1)) < 2362 And (AscW(strHName.Substring(iarr + 3, 1)) = AscW(strHName.Substring(iarr, 1))) Then If AscW(strHName.Substring(iarr + 4, 1)) = 2381 Then strComb = strHName.Substring(iarr, 1) & strHName.Substring(iarr + 1, 1) & strHName.Substring(iarr + 2, 1) & strHName.Substring(iarr + 3, 1) & strHName.Substring(iarr + 4, 1) strHName = strHName.Replace(strComb, strHName.Substring(iarr, 1)) End If Else strComb = strHName.Substring(iarr, 1) & strHName.Substring(iarr + 1, 1) & strHName.Substring(iarr + 2, 1) strHName = strHName.Replace(strComb, strHName.Substring(iarr, 1)) End If Else strComb = strHName.Substring(iarr, 1) & strHName.Substring(iarr + 1, 1) & strHName.Substring(iarr + 2, 1) strHName = strHName.Replace(strComb, strHName.Substring(iarr, 1)) End If End If End If End If End Select End If End Select Next Return strHName End Function Private Function processingDependantVowels(ByVal strOrgName As String) If AscW(strOrgName.Substring(0, 1)) > 2365 And AscW(strOrgName.Substring(0, 1)) < 2382 And strOrgName.Length > 1 Then Select Case AscW(strOrgName.Substring(1, 1)) Case Is > 2365 If AscW(strOrgName.Substring(1, 1)) < 2381 Then If strOrgName.Length > 2 Then If AscW(strOrgName.Substring(2, 1)) > 2324 And AscW(strOrgName.Substring(2, 1)) < 2362 Then 'Followed by any devnagari consonant If strOrgName.Length > 3 Then If AscW(strOrgName.Substring(3, 1)) > 2365 And AscW(strOrgName.Substring(3, 1)) < 2382 Then 'Followed by matra strOrgName = strOrgName.Remove(0, 2) Else strOrgName = strOrgName.Replace(strOrgName.Substring(1, 1) & strOrgName.Substring(2, 1), strOrgName.Substring(2, 1) & strOrgName.Substring(1, 1)) strOrgName = strOrgName.Remove(0, 1) End If Else strOrgName = strOrgName.Replace(strOrgName.Substring(1, 1) & strOrgName.Substring(2, 1), strOrgName.Substring(2, 1) & strOrgName.Substring(1, 1)) strOrgName = strOrgName.Remove(0, 1) End If Else End If End If End If Case Is > 2324 If AscW(strOrgName.Substring(1, 1)) < 2362 Then 'Followed by any devnagari consonant If strOrgName.Length > 2 Then If AscW(strOrgName.Substring(2, 1)) > 2365 And AscW(strOrgName.Substring(2, 1)) < 2382 Then 'followed by matra strOrgName = strOrgName.Remove(0, 1) Else strOrgName = strOrgName.Replace(strOrgName.Substring(0, 1) & strOrgName.Substring(1, 1), strOrgName.Substring(1, 1) & strOrgName.Substring(0, 1)) 'strOrgName = strOrgName.Remove(0, 1) End If Else strOrgName = strOrgName.Replace(strOrgName.Substring(0, 1) & strOrgName.Substring(1, 1), strOrgName.Substring(1, 1) & strOrgName.Substring(0, 1)) 'strOrgName = strOrgName.Remove(0, 1) End If End If End Select End If Return strOrgName End Function Private Function convertTwoMatrasToOne(ByVal strDblname As String) Dim i As Integer For i = 2366 To 2381 strDblname = strDblname.Replace(ChrW(i) & ChrW(i), ChrW(i)) Next If AscW(strDblname.Substring(0, 1)) = 2306 And strDblname.Length > 2 Then If AscW(strDblname.Substring(1, 1)) > 2364 And AscW(strDblname.Substring(1, 1)) < 2381 Then If AscW(strDblname.Substring(2, 1)) > 2324 And AscW(strDblname.Substring(2, 1)) < 2364 Then strDblname = strDblname.Replace(strDblname.Substring(0, 3), strDblname.Substring(2, 1) & strDblname.Substring(1, 1) & strDblname.Substring(0, 1)) End If End If End If If AscW(strDblname.Substring(0, 1)) = 2306 Or AscW(strDblname.Substring(0, 1)) = 2381 Then strDblname = strDblname.Remove(0, 1) Return strDblname End Function Private Function convertTwoIndVowelsToOne(ByVal strDblname As String) Dim i As Integer For i = 2306 To 2324 strDblname = strDblname.Replace(ChrW(i) & ChrW(i), ChrW(i)) Next Return strDblname End Function Private Function ConvertingConsonantandHalanttoAnuswar(ByVal strMName As String) Dim chr As Char Dim iarr As Integer Dim strComb As String For iarr = 0 To strMName.Length - 1 If iarr >= strMName.Length - 1 Then Exit For chr = strMName.Substring(iarr, 1) Select Case AscW(chr) Case Is = 2329 And AscW(strMName.Substring(iarr + 1, 1)) = 2381 If iarr < strMName.Length - 2 Then Select Case AscW(strMName.Substring(iarr + 2, 1)) Case 2325, 2326, 2327, 2328 strMName = strMName.Replace(chr & strMName.Substring(iarr + 1, 1), ChrW(2306)) End Select End If Case Is = 2334 And AscW(strMName.Substring(iarr + 1, 1)) = 2381 If iarr < strMName.Length - 2 Then Select Case AscW(strMName.Substring(iarr + 2, 1)) Case 2330, 2331, 2332, 2333 strMName = strMName.Replace(chr & strMName.Substring(iarr + 1, 1), ChrW(2306)) End Select End If Case Is = 2339 And AscW(strMName.Substring(iarr + 1, 1)) = 2381 If iarr < strMName.Length - 2 Then Select Case AscW(strMName.Substring(iarr + 2, 1)) Case 2335, 2336, 2337, 2338 strMName = strMName.Replace(chr & strMName.Substring(iarr + 1, 1), ChrW(2306)) End Select End If Case Is = 2344 And AscW(strMName.Substring(iarr + 1, 1)) = 2381 If iarr < strMName.Length - 2 Then Select Case AscW(strMName.Substring(iarr + 2, 1)) Case 2340, 2341, 2342, 2343 strMName = strMName.Replace(chr & strMName.Substring(iarr + 1, 1), ChrW(2306)) End Select End If Case Is = 2350 And AscW(strMName.Substring(iarr + 1, 1)) = 2381 If iarr < strMName.Length - 2 Then Select Case AscW(strMName.Substring(iarr + 2, 1)) Case 2346, 2347, 2348, 2349 strMName = strMName.Replace(chr & strMName.Substring(iarr + 1, 1), ChrW(2306)) End Select End If End Select Next Return strMName End Function Private Function HandlingMatraInbetweenWord(ByVal strMName As String) Dim chr As Char Dim iarr As Integer Dim strComb As String Dim intLength As Integer intLength = strMName.Length For iarr = 0 To strMName.Length - 1 If iarr > intLength - 1 Then Exit For chr = strMName.Substring(iarr, 1) Select Case AscW(chr) Case Is > 2365 If AscW(chr) < 2381 Then Select Case iarr Case 0 If strMName.Length < 2 Then Exit Select If AscW(strMName.Substring(iarr + 1, 1)) > 2305 And AscW(strMName.Substring(iarr + 1, 1)) < 2325 Then strMName = strMName.Remove(iarr, 1) intLength = strMName.Length Else 'Exit Select End If Case strMName.Length - 1 If (AscW(strMName.Substring(iarr - 1, 1)) > 2365 And AscW(strMName.Substring(iarr - 1, 1)) < 2381) Or (AscW(strMName.Substring(iarr - 1, 1)) > 2309 And AscW(strMName.Substring(iarr - 1, 1)) < 2324) Or (AscW(strMName.Substring(iarr - 1, 1)) > 2304 And AscW(strMName.Substring(iarr - 1, 1)) < 2307) Then strMName = strMName.Remove(iarr, 1) intLength = strMName.Length End If Case Is > strMName.Length - 1 Exit For Case Else If (AscW(strMName.Substring(iarr - 1, 1)) > 2365 And AscW(strMName.Substring(iarr - 1, 1)) < 2381) Or AscW(strMName.Substring(iarr - 1, 1)) = 2306 Or (AscW(strMName.Substring(iarr - 1, 1)) > 2308 And AscW(strMName.Substring(iarr - 1, 1)) < 2325) Then If AscW(strMName.Substring(iarr + 1, 1)) > 2324 And AscW(strMName.Substring(iarr + 1, 1)) < 2362 Then If iarr + 2 < strMName.Length - 1 Then If (AscW(strMName.Substring(iarr + 2, 1)) > 2365 And AscW(strMName.Substring(iarr + 2, 1)) < 2381) Then strMName = strMName.Remove(iarr, 1) intLength = strMName.Length Else If AscW(strMName.Substring(iarr + 2, 1)) <> 2381 Then strComb = strMName.Substring(iarr, 1) & strMName.Substring(iarr + 1, 1) strMName = strMName.Replace(strComb, strMName.Substring(iarr + 1, 1) & strMName.Substring(iarr, 1)) intLength = strMName.Length Else strMName = strMName.Remove(iarr, 1) intLength = strMName.Length End If End If Else strComb = strMName.Substring(iarr, 1) & strMName.Substring(iarr + 1, 1) strMName = strMName.Replace(strComb, strMName.Substring(iarr + 1, 1) & strMName.Substring(iarr, 1)) intLength = strMName.Length End If ElseIf AscW(strMName.Substring(iarr + 1, 1)) > 2305 And AscW(strMName.Substring(iarr + 1, 1)) < 2325 Then strMName = strMName.Remove(iarr, 1) intLength = strMName.Length End If Else End If End Select End If If iarr < strMName.Length - 1 And iarr = 1 Then If AscW(strMName.Substring(iarr, 1)) = 2306 Or AscW(strMName.Substring(iarr, 1)) > 2365 And AscW(strMName.Substring(iarr, 1)) < 2381 Then If AscW(strMName.Substring(iarr - 1, 1)) > 2365 And AscW(strMName.Substring(iarr - 1, 1)) < 2381 Then strMName = strMName.Remove(iarr, 1) intLength = strMName.Length End If End If End If End Select Next Return strMName End Function Private Function Conversion(ByVal strCName As String) Dim strOrgName As String Dim strname As String Dim i As Integer Dim dr As DataRow Dim chr As Char Dim chrArr() As Char strname = strCName chrArr = strname.ToCharArray Dim iarr As Integer Dim strcomb As String For iarr = 0 To strname.Length - 1 If iarr > strname.Length - 1 Then Exit For chr = strname.Substring(iarr, 1) Select Case AscW(chr) Case 2352 'case for checking whether RAA and halant and AA are coming together Select Case iarr Case Is = strname.Length - 1 Case Is < strname.Length - 1 If AscW(strname.Substring(iarr + 1, 1)) = 2381 And iarr < strname.Length - 2 Then If AscW(strname.Substring(iarr + 2, 1)) = 2366 And iarr <> 0 And (AscW(strname.Substring(iarr + 2, 1)) > 2324 And AscW(strname.Substring(iarr + 2, 1)) < 2362) Then strname = strname.Replace(strname.Substring(iarr - 1, 1) & chr & strname.Substring(iarr + 1, 1) & strname.Substring(iarr + 2, 1), chr & strname.Substring(iarr + 1, 1) & strname.Substring(iarr - 1, 1) & strname.Substring(iarr + 2, 1)) 'strName = strCorname Else End If End If End Select Case 2371 Select Case iarr Case 0 If iarr + 1 < strname.Length Then If strname.Substring(iarr + 1, 1) = chr Then strname = strname.Remove(iarr, 2) Else strname = strname.Remove(iarr, 1) End If Else strname = strname.Remove(iarr, 1) End If Case Is < strname.Length - 1 If Not (AscW(strname.Substring(iarr - 1, 1)) > 2324 And AscW(strname.Substring(iarr - 1, 1)) < 2362) Then strname = strname.Remove(iarr, 1) End If End Select Case 2381 ' Checking if Halant is followed by AA then remove both other wise if it is followed by any Matra Select Case iarr Case 0 strname = strname.Remove(iarr, 1) Case Is = strname.Length - 1 strname = strname.Remove(iarr, 1) Case Is < strname.Length - 1 Select Case AscW(strname.Substring(iarr + 1, 1)) Case 2366 strname = strname.Remove(iarr, 2) 'strName = strCorname Case 2367, 2368, 2369, 2370, 2375, 2376, 2379, 2380, 2306 If iarr + 2 < strname.Length Then If AscW(strname.Substring(iarr + 2, 1)) = 2366 Then strname = strname.Remove(iarr, 1) strname = strname.Remove(iarr + 1, 1) 'strName = strCorname Else strname = strname.Remove(iarr, 1) 'strName = strCorname End If Else strname = strname.Remove(iarr, 1) 'strName = strCorname End If End Select If (AscW(strname.Substring(iarr - 1, 1)) > 2308 And AscW(strname.Substring(iarr - 1, 1)) < 2325) Or (AscW(strname.Substring(iarr - 1, 1)) > 2365 And AscW(strname.Substring(iarr - 1, 1)) < 2381) Then strname = strname.Remove(iarr, 1) End If End Select Case 2375 'If A ki matra is followed by A ki matra, O ki matra or AA ki matra then If iarr < strname.Length - 1 Then Select Case AscW(strname.Substring(iarr + 1, 1)) Case 2375 'convert to badi A ki matra strname = strname.Replace(chr & strname.Substring(iarr + 1, 1), ChrW(2376)) Case 2379 ' convert to bada OO ki matra strname = strname.Replace(chr & strname.Substring(iarr + 1, 1), ChrW(2380)) Case 2366 'convert to O ki matra strname = strname.Replace(chr & strname.Substring(iarr + 1, 1), ChrW(2379)) End Select End If Case 2309 'case for letter A of Devnagari If iarr < strname.Length - 1 Then Select Case AscW(strname.Substring(iarr + 1, 1)) Case 2379 'followed by chota O ki matra strname = strname.Replace(chr & strname.Substring(iarr + 1, 1), ChrW(2323)) Case 2380 'followed by AU vowel sign strname = strname.Replace(chr & strname.Substring(iarr + 1, 1), ChrW(2324)) Case 2366 'followed by AA vowel sign strname = strname.Replace(chr & strname.Substring(iarr + 1, 1), ChrW(2310)) End Select End If Case 2306 'case for bindi of Devnagari Case 2305 ' for chandrabindu Select Case iarr Case 0 strname = strname.Remove(iarr, 1) Case 1 If AscW(strname.Substring(iarr - 1, 1)) > 2365 And AscW(strname.Substring(iarr - 1, 1)) < 2381 Then strname = strname.Remove(iarr, 1) End If End Select End Select 'iarr = iarr + 1 Next Return strname End Function Private Function ReducingCharacterSet(ByVal strCname As String) Dim chr As Char Dim chrArr() As Char chrArr = strCname.ToCharArray For Each chr In chrArr Select Case AscW(chr) Case 2308 strCname = strCname.Replace(chr, ChrW(2309)) Case 2321, 2322 strCname = strCname.Replace(chr, ChrW(2323)) Case 2378 strCname = strCname.Replace(chr, ChrW(2379)) Case 2372 strCname = strCname.Replace(chr, ChrW(2371)) Case 2392 strCname = strCname.Replace(chr, ChrW(2325)) Case 2393 strCname = strCname.Replace(chr, ChrW(2326)) Case 2394 strCname = strCname.Replace(chr, ChrW(2327)) Case 2395 strCname = strCname.Replace(chr, ChrW(2332)) Case 2396 strCname = strCname.Replace(chr, ChrW(2337)) Case 2397 strCname = strCname.Replace(chr, ChrW(2338)) Case 2398 strCname = strCname.Replace(chr, ChrW(2347)) Case 2399 strCname = strCname.Replace(chr, ChrW(2351)) Case 2353 strCname = strCname.Replace(chr, ChrW(2352)) Case 2355, 2356 strCname = strCname.Replace(chr, ChrW(2354)) Case 2345 strCname = strCname.Replace(chr, ChrW(2344)) Case 2317, 2318 strCname = strCname.Replace(chr, ChrW(2319)) Case 2364 strCname = strCname.Replace(chr, "") Case 2365 strCname = strCname.Replace(chr, "") Case 2374 strCname = strCname.Replace(chr, ChrW(2375)) Case 2400, 2401 strCname = strCname.Replace(chr, ChrW(2315)) Case 2307 strCname = strCname.Replace(chr, "") End Select Next Return strCname End Function Function dependentVowelHandling(ByVal strName As String) Dim tmpName As String Dim i As Integer Dim charCodeCur As Integer Dim charCodeNext As Integer Dim charCur As Char Dim charNext As Char Try For i = 0 To Len(strName) If i + 1 < Len(strName) Then charCur = strName.Substring(i, 1) charNext = strName.Substring(i + 1, 1) If IsDependentVowel(charNext) Then If IsIndependentVowel(charCur) Then strName = strName.Remove(i + 1, 1) End If End If 'If (charCodeNext >= 2366 AndAlso charCodeNext <= 2388) OrElse (charCodeNext >= 2305 AndAlso charCodeNext <= 2307) Then ' If (charCodeCur >= 2308 AndAlso charCodeCur <= 2324) OrElse (charCodeCur >= 2305 AndAlso charCodeCur <= 2307) Then ' strName = strName.Remove(i + 1, 1) ' 'i = i + 1 ' End If 'End If End If Next Catch ex As Exception 'MsgBox(ex.Message) End Try Return strName End Function Private Function IsDependentVowel(ByVal chr As Char) As Boolean IsDependentVowel = False If AscW(chr) > 2365 And AscW(chr) < 2381 Then Return True End Function Private Function IsIndependentVowel(ByVal chr As Char) As Boolean IsIndependentVowel = False If AscW(chr) > 2308 And AscW(chr) < 2325 Then Return True End Function End Class