' ' * kanaxs VB.NET 1.0.0 ' * Copyright (c) 2011, DOBON! ' * All rights reserved. ' * ' * New BSD License(修正BSDライセンス) ' * http://wiki.dobon.net/index.php?free%2FkanaxsVB.NET%2Flicense ' * ' * このクラスは、以下のライブラリを参考にして作成しました。 ' * kanaxs Kana.JS (kana-1.0.5.js) ' * Copyright (c) shogo4405 ' * http://code.google.com/p/kanaxs/ ' Imports System Imports Microsoft.VisualBasic Namespace VisualBasic.Japanese.Kanaxs ''' ''' ひらがなとカタカナ、半角と全角の文字変換を行うメソッドを提供します。 ''' Public NotInheritable Class Kana Private Sub New() End Sub ''' ''' 全角カタカナを全角ひらがなに変換します。 ''' ''' 変換する String。 ''' 変換された String。 Public Shared Function ToHiragana(ByVal str As String) As String If str Is Nothing OrElse str.Length = 0 Then Return str End If Dim cs As Char() = str.ToCharArray() Dim f As Integer = cs.Length Dim i As Integer For i = 0 To f - 1 Dim c As Char = cs(i) ' ァ(0x30A1) ~ ヶ(0x30F6) If "ァ"c <= c AndAlso c <= "ヶ"c Then cs(i) = ChrW(AscW(c) - &H60) End If Next Return New String(cs) End Function ''' ''' 全角ひらがなを全角カタカナに変換します。 ''' ''' 変換する String。 ''' 変換された String。 Public Shared Function ToKatakana(ByVal str As String) As String If str Is Nothing OrElse str.Length = 0 Then Return str End If Dim cs As Char() = str.ToCharArray() Dim f As Integer = cs.Length Dim i As Integer For i = 0 To f - 1 Dim c As Char = cs(i) ' ぁ(0x3041) ~ ゖ(0x3096) If "ぁ"c <= c AndAlso c <= "ゖ"c Then cs(i) = ChrW(AscW(c) + &H60) End If Next Return New String(cs) End Function ''' ''' 全角英数字および記号を半角に変換します。 ''' ''' 変換する String。 ''' 変換された String。 Public Shared Function ToHankaku(ByVal str As String) As String If str Is Nothing OrElse str.Length = 0 Then Return str End If Dim cs As Char() = str.ToCharArray() Dim f As Integer = cs.Length Dim i As Integer For i = 0 To f - 1 Dim c As Char = cs(i) ' !(0xFF01) ~ ~(0xFF5E) If "!"c <= c AndAlso c <= "~"c Then cs(i) = ChrW(AscW(c) - &HFEE0) ' 全角スペース(0x3000) -> 半角スペース(0x0020) ElseIf c = " "c Then cs(i) = " "c End If Next Return New String(cs) End Function ''' ''' 半角英数字および記号を全角に変換します。 ''' ''' 変換する String。 ''' 変換された String。 Public Shared Function ToZenkaku(ByVal str As String) As String If str Is Nothing OrElse str.Length = 0 Then Return str End If Dim cs As Char() = str.ToCharArray() Dim f As Integer = cs.Length Dim i As Integer For i = 0 To f - 1 Dim c As Char = cs(i) ' !(0x0021) ~ ~(0x007E) If "!"c <= c AndAlso c <= "~"c Then cs(i) = ChrW(AscW(c) + &HFEE0) ' 半角スペース(0x0020) -> 全角スペース(0x3000) ElseIf c = " "c Then cs(i) = " "c End If Next Return New String(cs) End Function ''' ''' 「は゛」を「ば」のように、濁点や半濁点を前の文字と合わせて1つの文字に変換します。 ''' ''' 変換する String。 ''' 変換された String。 Public Shared Function ToPadding(ByVal str As String) As String If str Is Nothing OrElse str.Length = 0 Then Return str End If Dim cs As Char() = New Char(str.Length - 1) {} Dim pos As Integer = str.Length - 1 Dim f As Integer = str.Length - 1 Dim i As Integer For i = f To 0 Step -1 Dim c As Char = str.Chars(i) ' ゛(0x309B) 濁点 If c = "゛"c AndAlso 0 < i Then Dim c2 As Char = str.Chars(i - 1) Dim mod2 As Integer = AscW(c2) Mod 2 Dim mod3 As Integer = AscW(c2) Mod 3 ' か(0x304B) ~ ぢ(0x3062) ' カ(0x30AB) ~ ヂ(0x30C2) ' つ(0x3064) ~ ど(0x3069) ' ツ(0x30C4) ~ ド(0x30C9) ' は(0x306F) ~ ぽ(0x307D) ' ハ(0x30CF) ~ ポ(0x30DD) If ("か"c <= c2 AndAlso c2 <= "ぢ"c AndAlso mod2 = 1) OrElse _ ("カ"c <= c2 AndAlso c2 <= "ヂ"c AndAlso mod2 = 1) OrElse _ ("つ"c <= c2 AndAlso c2 <= "ど"c AndAlso mod2 = 0) OrElse _ ("ツ"c <= c2 AndAlso c2 <= "ド"c AndAlso mod2 = 0) OrElse _ ("は"c <= c2 AndAlso c2 <= "ぽ"c AndAlso mod3 = 0) OrElse _ ("ハ"c <= c2 AndAlso c2 <= "ポ"c AndAlso mod3 = 0) Then cs(pos) = ChrW(AscW(c2) + 1) pos -= 1 i -= 1 Else cs(pos) = c pos -= 1 End If ' ゜(0x309C) 半濁点 ElseIf c = "゜"c AndAlso 0 < i Then Dim c2 As Char = str.Chars(i - 1) Dim mod3 As Integer = AscW(c2) Mod 3 ' は(0x306F) ~ ぽ(0x307D) ' ハ(0x30CF) ~ ポ(0x30DD) If ("は"c <= c2 AndAlso c2 <= "ぽ"c AndAlso mod3 = 0) OrElse _ ("ハ"c <= c2 AndAlso c2 <= "ポ"c AndAlso mod3 = 0) Then cs(pos) = ChrW(AscW(c2) + 2) pos -= 1 i -= 1 Else cs(pos) = c pos -= 1 End If Else cs(pos) = c pos -= 1 End If Next Return New String(cs, pos + 1, cs.Length - pos - 1) End Function ''' ''' 全角カタカナを半角カタカナに変換します。 ''' ''' 変換する String。 ''' 変換された String。 Public Shared Function ToHankakuKana(ByVal str As String) As String If str Is Nothing OrElse str.Length = 0 Then Return str End If Dim cs As Char() = New Char(str.Length * 2 - 1) {} Dim len As Integer = 0 Dim f As Integer = str.Length Dim i As Integer For i = 0 To f - 1 Dim c As Char = str.Chars(i) ' ァ(0x30A1) ~ ー(0x30FC) If "ァ"c <= c AndAlso c <= "ー"c Then Dim m As Char = ConvertToHankakuKanaChar(c) If m <> ControlChars.NullChar Then cs(len) = m len += 1 ' カ(0x30AB) ~ ド(0x30C9) ElseIf "カ"c <= c AndAlso c <= "ド"c Then cs(len) = ConvertToHankakuKanaChar(ChrW(AscW(c) - 1)) len += 1 cs(len) = "゙"c len += 1 ' ハ(0x30CF) ~ ポ(0x30DD) ElseIf "ハ"c <= c AndAlso c <= "ポ"c Then Dim mod3 As Integer = AscW(c) Mod 3 cs(len) = ConvertToHankakuKanaChar(ChrW(AscW(c) - mod3)) len += 1 If mod3 = 1 Then cs(len) = "゙"c Else cs(len) = "゚"c End If len += 1 Else cs(len) = c len += 1 End If Else cs(len) = c len += 1 End If Next Return New String(cs, 0, len) End Function ''' ''' 半角カタカナを全角カタカナに変換します。 ''' ''' 変換する String。 ''' 変換された String。 Public Shared Function ToZenkakuKana(ByVal str As String) As String If str Is Nothing OrElse str.Length = 0 Then Return str End If Dim cs As Char() = str.ToCharArray() Dim f As Integer = str.Length Dim i As Integer For i = 0 To f - 1 Dim c As Char = cs(i) ' ヲ(0xFF66) ~ ゚(0xFF9F) If "ヲ"c <= c AndAlso c <= "゚"c Then Dim m As Char = ConvertToZenkakuKanaChar(c) If m <> ControlChars.NullChar Then cs(i) = m End If End If Next Return New String(cs) End Function Private Shared Function ConvertToHankakuKanaChar(ByVal zenkakuChar As Char) As Char Select Case zenkakuChar Case "ァ"c Return "ァ"c Case "ィ"c Return "ィ"c Case "ゥ"c Return "ゥ"c Case "ェ"c Return "ェ"c Case "ォ"c Return "ォ"c Case "ー"c Return "ー"c Case "ア"c Return "ア"c Case "イ"c Return "イ"c Case "ウ"c Return "ウ"c Case "エ"c Return "エ"c Case "オ"c Return "オ"c Case "カ"c Return "カ"c Case "キ"c Return "キ"c Case "ク"c Return "ク"c Case "ケ"c Return "ケ"c Case "コ"c Return "コ"c Case "サ"c Return "サ"c Case "シ"c Return "シ"c Case "ス"c Return "ス"c Case "セ"c Return "セ"c Case "ソ"c Return "ソ"c Case "タ"c Return "タ"c Case "チ"c Return "チ"c Case "ツ"c Return "ツ"c Case "テ"c Return "テ"c Case "ト"c Return "ト"c Case "ナ"c Return "ナ"c Case "ニ"c Return "ニ"c Case "ヌ"c Return "ヌ"c Case "ネ"c Return "ネ"c Case "ノ"c Return "ノ"c Case "ハ"c Return "ハ"c Case "ヒ"c Return "ヒ"c Case "フ"c Return "フ"c Case "ヘ"c Return "ヘ"c Case "ホ"c Return "ホ"c Case "マ"c Return "マ"c Case "ミ"c Return "ミ"c Case "ム"c Return "ム"c Case "メ"c Return "メ"c Case "モ"c Return "モ"c Case "ヤ"c Return "ヤ"c Case "ユ"c Return "ユ"c Case "ヨ"c Return "ヨ"c Case "ラ"c Return "ラ"c Case "リ"c Return "リ"c Case "ル"c Return "ル"c Case "レ"c Return "レ"c Case "ロ"c Return "ロ"c Case "ワ"c Return "ワ"c Case "ヲ"c Return "ヲ"c Case "ン"c Return "ン"c Case "ッ"c Return "ッ"c 'ャュョ を追加 Case "ャ"c Return "ャ"c Case "ュ"c Return "ュ"c Case "ョ"c Return "ョ"c Case Else Return ControlChars.NullChar End Select End Function Private Shared Function ConvertToZenkakuKanaChar(ByVal hankakuChar As Char) As Char Select Case hankakuChar Case "ヲ"c Return "ヲ"c Case "ァ"c Return "ァ"c Case "ィ"c Return "ィ"c Case "ゥ"c Return "ゥ"c Case "ェ"c Return "ェ"c Case "ォ"c Return "ォ"c Case "ー"c Return "ー"c Case "ア"c Return "ア"c Case "イ"c Return "イ"c Case "ウ"c Return "ウ"c Case "エ"c Return "エ"c Case "オ"c Return "オ"c Case "カ"c Return "カ"c Case "キ"c Return "キ"c Case "ク"c Return "ク"c Case "ケ"c Return "ケ"c Case "コ"c Return "コ"c Case "サ"c Return "サ"c Case "シ"c Return "シ"c Case "ス"c Return "ス"c Case "セ"c Return "セ"c Case "ソ"c Return "ソ"c Case "タ"c Return "タ"c Case "チ"c Return "チ"c Case "ツ"c Return "ツ"c Case "テ"c Return "テ"c Case "ト"c Return "ト"c Case "ナ"c Return "ナ"c Case "ニ"c Return "ニ"c Case "ヌ"c Return "ヌ"c Case "ネ"c Return "ネ"c Case "ノ"c Return "ノ"c Case "ハ"c Return "ハ"c Case "ヒ"c Return "ヒ"c Case "フ"c Return "フ"c Case "ヘ"c Return "ヘ"c Case "ホ"c Return "ホ"c Case "マ"c Return "マ"c Case "ミ"c Return "ミ"c Case "ム"c Return "ム"c Case "メ"c Return "メ"c Case "モ"c Return "モ"c Case "ヤ"c Return "ヤ"c Case "ユ"c Return "ユ"c Case "ヨ"c Return "ヨ"c Case "ラ"c Return "ラ"c Case "リ"c Return "リ"c Case "ル"c Return "ル"c Case "レ"c Return "レ"c Case "ロ"c Return "ロ"c Case "ワ"c Return "ワ"c Case "ン"c Return "ン"c Case "゙"c Return "゛"c Case "゚"c Return "゜"c ' ャュョッ を追加 Case "ャ"c Return "ャ"c Case "ュ"c Return "ュ"c Case "ョ"c Return "ョ"c Case "ッ"c Return "ッ"c Case Else Return ControlChars.NullChar End Select End Function End Class End Namespace