defmodule JapaneseConv do
@moduledoc """
Documentation for `JapaneseConv`.
"""
@doc """
カナを全角
数字、アルファベットを半角に変換
## Examples
iex> JapaneseConv.standardConv("アイウエオ0Ab")
"""
def standardConv(str) do
charList = String.graphemes(str)
for (char <- charList) do
c = Map.get(standardCharSet(), char)
if is_nil(c) do char else c end
end
|> List.to_string()
end
@doc """
カナ、数字、アルファベットの全角を半角に変換
## Examples
iex> JapaneseConv.full2Half("アイウエオ0Ab")
"""
def full2Half(str) do
charList = String.graphemes(str)
for (char <- charList) do
c = charSet()[char]
if is_nil(c) do char else c end
end
|> List.to_string()
end
@doc """
数字の全角を半角に変換
## Examples
iex> JapaneseConv.full2Half("0123")
"""
def full2HalfNum(str) do
charList = String.graphemes(str)
for (char <- charList) do
c = numberSet()[char]
if is_nil(c) do char else c end
end
|> List.to_string()
end
@doc """
カナ、数字、アルファベットの半角角を全角に変換
## Examples
iex> JapaneseConv.full2Half("アイウエオ0Ab")
"""
def half2Full(str) do
charList = String.graphemes(str)
for (char <- charList) do
c = revCharSet()[char]
if is_nil(c) do char else c end
end
|> List.to_string()
end
defp standardCharSet() do
Map.new()
|> Map.merge(revKanaSet())
|> Map.merge(alphaSet())
|> Map.merge(numberSet())
end
defp charSet() do
Map.new()
|> Map.merge(kanaSet())
|> Map.merge(alphaSet())
|> Map.merge(numberSet())
end
defp kanaSet() do
%{"ァ" => "ァ",
"ア" => "ア",
"ィ" => "ィ",
"イ" => "イ",
"ゥ" => "ゥ",
"ウ" => "ウ",
"ェ" => "ェ",
"エ" => "エ",
"ォ" => "ォ",
"オ" => "オ",
"カ" => "カ",
"ガ" => "ガ",
"キ" => "キ",
"ギ" => "ギ",
"ク" => "ク",
"グ" => "グ",
"ケ" => "ケ",
"ゲ" => "ゲ",
"コ" => "コ",
"ゴ" => "ゴ",
"サ" => "サ",
"ザ" => "ザ",
"シ" => "シ",
"ジ" => "ジ",
"ス" => "ス",
"ズ" => "ズ",
"セ" => "セ",
"ゼ" => "ゼ",
"ソ" => "ソ",
"ゾ" => "ゾ",
"タ" => "タ",
"ダ" => "ダ",
"チ" => "チ",
"ヂ" => "ヂ",
"ッ" => "ッ",
"ツ" => "ツ",
"ヅ" => "ヅ",
"テ" => "テ",
"デ" => "デ",
"ト" => "ト",
"ド" => "ド",
"ナ" => "ナ",
"ニ" => "ニ",
"ヌ" => "ヌ",
"ネ" => "ネ",
"ノ" => "ノ",
"ハ" => "ハ",
"バ" => "バ",
"パ" => "パ",
"ヒ" => "ヒ",
"ビ" => "ビ",
"ピ" => "ピ",
"フ" => "フ",
"ブ" => "ブ",
"プ" => "プ",
"ヘ" => "ヘ",
"ベ" => "ベ",
"ペ" => "ペ",
"ホ" => "ホ",
"ボ" => "ボ",
"ポ" => "ポ",
"マ" => "マ",
"ミ" => "ミ",
"ム" => "ム",
"メ" => "メ",
"モ" => "モ",
"ャ" => "ャ",
"ヤ" => "ヤ",
"ュ" => "ュ",
"ユ" => "ユ",
"ョ" => "ョ",
"ヨ" => "ヨ",
"ラ" => "ラ",
"リ" => "リ",
"ル" => "ル",
"レ" => "レ",
"ロ" => "ロ",
"ワ" => "ワ",
"ヲ" => "ヲ",
"ン" => "ン",
"ー" => "ー"
}
end
defp alphaSet() do
%{"A" => "A",
"B" => "B",
"C" => "C",
"D" => "D",
"E" => "E",
"F" => "F",
"G" => "G",
"H" => "H",
"I" => "I",
"J" => "J",
"K" => "K",
"L" => "L",
"M" => "M",
"N" => "N",
"O" => "O",
"P" => "P",
"Q" => "Q",
"R" => "R",
"S" => "S",
"T" => "T",
"U" => "U",
"V" => "V",
"W" => "W",
"X" => "X",
"Y" => "Y",
"Z" => "Z",
"a" => "a",
"b" => "b",
"c" => "c",
"d" => "d",
"e" => "e",
"f" => "f",
"g" => "g",
"h" => "h",
"i" => "i",
"j" => "j",
"k" => "k",
"l" => "l",
"m" => "m",
"n" => "n",
"o" => "o",
"p" => "p",
"q" => "q",
"r" => "r",
"s" => "s",
"t" => "t",
"u" => "u",
"v" => "v",
"w" => "w",
"x" => "x",
"y" => "y",
"z" => "z",
"0" => "0",
"1" => "1",
"2" => "2",
"3" => "3",
"4" => "4",
"5" => "5",
"6" => "6",
"7" => "7",
"8" => "8",
"9" => "9"}
end
defp numberSet() do
%{"0" => "0",
"1" => "1",
"2" => "2",
"3" => "3",
"4" => "4",
"5" => "5",
"6" => "6",
"7" => "7",
"8" => "8",
"9" => "9"}
end
defp revCharSet() do
for {k, v} <- charSet() do
{v,k}
end
|> Enum.into(%{})
end
defp revKanaSet() do
for {k, v} <- kanaSet() do
{v,k}
end
|> Enum.into(%{})
end
end