// このソースコードは blanco Frameworkによって自動生成されています。
using System;

namespace blanco.sample.stringconverter
{
    /// <summary>半角カタカナ→全角カタカナの文字列変換のサンプル。blancoStringConverterの実装には影響しません。</summary>
    public class SampleKatakanaHan2ZenStringConverter
    {
        /// <summary>文字列置換定義。</summary>
        public static readonly string[][] STRING_CONVERT_DEF = new string[][] {new string[] { "｡", "。" }/* No.2 説明:a1: 句読点。全角カタカナではない値に変換。 */, new string[] { "｢", "「" }/* No.3 説明:a2: 半角のカギカッコ。全角カタカナではない値に変換。 */, new string[] { "｣", "」" }/* No.4 説明:a3: 半角のカギカッコ。全角カタカナではない値に変換。 */, new string[] { "､", "、" }/* No.5 説明:a4: 句読点。全角カタカナではない値に変換。 */, new string[] { "･", "・" }/* No.6 説明:a5: 半角の中黒。全角カタカナではない値に変換。 */, new string[] { "ｳﾞ", "ヴ" }/* No.8 説明:濁音を先に定義します。 */, new string[] { "ｶﾞ", "ガ" }/* No.9 説明:濁音を先に定義します。 */, new string[] { "ｷﾞ", "ギ" }/* No.10 説明:濁音を先に定義します。 */, new string[] { "ｸﾞ", "グ" }/* No.11 説明:濁音を先に定義します。 */, new string[] { "ｹﾞ", "ゲ" }/* No.12 説明:濁音を先に定義します。 */, new string[] { "ｺﾞ", "ゴ" }/* No.13 説明:濁音を先に定義します。 */, new string[] { "ｻﾞ", "ザ" }/* No.14 説明:濁音を先に定義します。 */, new string[] { "ｼﾞ", "ジ" }/* No.15 説明:濁音を先に定義します。 */, new string[] { "ｽﾞ", "ズ" }/* No.16 説明:濁音を先に定義します。 */, new string[] { "ｾﾞ", "ゼ" }/* No.17 説明:濁音を先に定義します。 */, new string[] { "ｿﾞ", "ゾ" }/* No.18 説明:濁音を先に定義します。 */, new string[] { "ﾀﾞ", "ダ" }/* No.19 説明:濁音を先に定義します。 */, new string[] { "ﾁﾞ", "ヂ" }/* No.20 説明:濁音を先に定義します。 */, new string[] { "ﾂﾞ", "ヅ" }/* No.21 説明:濁音を先に定義します。 */, new string[] { "ﾃﾞ", "デ" }/* No.22 説明:濁音を先に定義します。 */, new string[] { "ﾄﾞ", "ド" }/* No.23 説明:濁音を先に定義します。 */, new string[] { "ﾊﾞ", "バ" }/* No.24 説明:濁音を先に定義します。 */, new string[] { "ﾋﾞ", "ビ" }/* No.25 説明:濁音を先に定義します。 */, new string[] { "ﾌﾞ", "ブ" }/* No.26 説明:濁音を先に定義します。 */, new string[] { "ﾍﾞ", "ベ" }/* No.27 説明:濁音を先に定義します。 */, new string[] { "ﾎﾞ", "ボ" }/* No.28 説明:濁音を先に定義します。 */, new string[] { "ﾊﾟ", "パ" }/* No.29 説明:濁音を先に定義します。 */, new string[] { "ﾋﾟ", "ピ" }/* No.30 説明:濁音を先に定義します。 */, new string[] { "ﾌﾟ", "プ" }/* No.31 説明:濁音を先に定義します。 */, new string[] { "ﾍﾟ", "ペ" }/* No.32 説明:濁音を先に定義します。 */, new string[] { "ﾎﾟ", "ポ" }/* No.33 説明:濁音を先に定義します。 */, new string[] { "ｧ", "ァ" }/* No.34 説明:a7: 小さいカタカナ。ァ。 */, new string[] { "ｨ", "ィ" }/* No.35 説明:a8: 小さいカタカナ */, new string[] { "ｩ", "ゥ" }/* No.36 説明:a9: 小さいカタカナ */, new string[] { "ｪ", "ェ" }/* No.37 説明:aa: 小さいカタカナ */, new string[] { "ｫ", "ォ" }/* No.38 説明:ab: 小さいカタカナ */, new string[] { "ｬ", "ャ" }/* No.39 説明:ac: 小さいカタカナ */, new string[] { "ｭ", "ュ" }/* No.40 説明:ad: 小さいカタカナ */, new string[] { "ｮ", "ョ" }/* No.41 説明:ae: 小さいカタカナ。ョ。 */, new string[] { "ｯ", "ッ" }/* No.42 説明:af: 小さいカタカナ。ッ。ョの次に定義しています。 */, new string[] { "ｰ", "ー" }/* No.43 説明:b0: 半角の伸ばす。全角カタカナではない、伸ばす「ー」に変換。 */, new string[] { "ｱ", "ア" }/* No.44 説明:b1: カタカナ。ア。 */, new string[] { "ｲ", "イ" }/* No.45 説明:b2: カタカナ */, new string[] { "ｳ", "ウ" }/* No.46 説明:b3: カタカナ */, new string[] { "ｴ", "エ" }/* No.47 説明:b4: カタカナ */, new string[] { "ｵ", "オ" }/* No.48 説明:b5: カタカナ */, new string[] { "ｶ", "カ" }/* No.49 説明:b6: カタカナ */, new string[] { "ｷ", "キ" }/* No.50 説明:b7: カタカナ */, new string[] { "ｸ", "ク" }/* No.51 説明:b8: カタカナ */, new string[] { "ｹ", "ケ" }/* No.52 説明:b9: カタカナ */, new string[] { "ｺ", "コ" }/* No.53 説明:ba: カタカナ */, new string[] { "ｻ", "サ" }/* No.54 説明:bb: カタカナ */, new string[] { "ｼ", "シ" }/* No.55 説明:bc: カタカナ */, new string[] { "ｽ", "ス" }/* No.56 説明:bd: カタカナ */, new string[] { "ｾ", "セ" }/* No.57 説明:be: カタカナ */, new string[] { "ｿ", "ソ" }/* No.58 説明:bf: カタカナ */, new string[] { "ﾀ", "タ" }/* No.59 説明:c0: カタカナ */, new string[] { "ﾁ", "チ" }/* No.60 説明:c1: カタカナ */, new string[] { "ﾂ", "ツ" }/* No.61 説明:c2: カタカナ */, new string[] { "ﾃ", "テ" }/* No.62 説明:c3: カタカナ */, new string[] { "ﾄ", "ト" }/* No.63 説明:c4: カタカナ */, new string[] { "ﾅ", "ナ" }/* No.64 説明:c5: カタカナ */, new string[] { "ﾆ", "ニ" }/* No.65 説明:c6: カタカナ */, new string[] { "ﾇ", "ヌ" }/* No.66 説明:c7: カタカナ */, new string[] { "ﾈ", "ネ" }/* No.67 説明:c8: カタカナ */, new string[] { "ﾉ", "ノ" }/* No.68 説明:c9: カタカナ */, new string[] { "ﾊ", "ハ" }/* No.69 説明:ca: カタカナ */, new string[] { "ﾋ", "ヒ" }/* No.70 説明:cb: カタカナ */, new string[] { "ﾌ", "フ" }/* No.71 説明:cc: カタカナ */, new string[] { "ﾍ", "ヘ" }/* No.72 説明:cd: カタカナ */, new string[] { "ﾎ", "ホ" }/* No.73 説明:ce: カタカナ */, new string[] { "ﾏ", "マ" }/* No.74 説明:cf: カタカナ */, new string[] { "ﾐ", "ミ" }/* No.75 説明:d0: カタカナ */, new string[] { "ﾑ", "ム" }/* No.76 説明:d1: カタカナ */, new string[] { "ﾒ", "メ" }/* No.77 説明:d2: カタカナ */, new string[] { "ﾓ", "モ" }/* No.78 説明:d3: カタカナ */, new string[] { "ﾔ", "ヤ" }/* No.79 説明:d4: カタカナ */, new string[] { "ﾕ", "ユ" }/* No.80 説明:d5: カタカナ */, new string[] { "ﾖ", "ヨ" }/* No.81 説明:d6: カタカナ */, new string[] { "ﾗ", "ラ" }/* No.82 説明:d7: カタカナ */, new string[] { "ﾘ", "リ" }/* No.83 説明:d8: カタカナ */, new string[] { "ﾙ", "ル" }/* No.84 説明:d9: カタカナ */, new string[] { "ﾚ", "レ" }/* No.85 説明:da: カタカナ */, new string[] { "ﾛ", "ロ" }/* No.86 説明:db: カタカナ */, new string[] { "ﾜ", "ワ" }/* No.87 説明:dc: カタカナ。ワ。 */, new string[] { "ｦ", "ヲ" }/* No.88 説明:a6: カタカナ。ヲ。MS932におけるコード順としては 小さいアより前に位置します。 */, new string[] { "ﾝ", "ン" }/* No.89 説明:dd: カタカナ。ン。 */, new string[] { "ﾞ", "゛" }/* No.90 説明:de: 濁音。全角カタカナではない値に変換。 */, new string[] { "ﾟ", "゜" }/* No.91 説明:df: 濁音。全角カタカナではない値に変換。 */ };

        /// <summary>文字列変換定義に従い、文字列を変換します。</summary>
        /// <param name="argCheck">変換対象の文字列。</param>
        /// <returns>文字列変換定義にしたがって変換された文字列。変換定義にひとつも合致しない場合には元の文字列が戻ります。</returns>
        public string Convert(string argCheck)
        {
            if (argCheck == null) {
                throw new ArgumentException("メソッド[Convert]のパラメータ[argCheck]にnullが与えられました。しかし、このパラメータにnullを与えることはできません。");
            }

            string wrkString = "";
            for (int index = 0; index < argCheck.Length; ) {
                string look = argCheck.Substring(index);
                bool isFound = false;
                for (int indexDef = 0; indexDef < STRING_CONVERT_DEF.Length; indexDef++) {
                    string wrkStrComp = look;
                    if (look.Length > STRING_CONVERT_DEF[indexDef][0].Length) {
                        wrkStrComp = wrkStrComp.Substring(0, STRING_CONVERT_DEF[indexDef][0].Length);
                    }
                    if (STRING_CONVERT_DEF[indexDef][0].Equals(wrkStrComp)) {
                        wrkString += STRING_CONVERT_DEF[indexDef][1];
                        index += STRING_CONVERT_DEF[indexDef][0].Length;
                        isFound = true;
                        break;
                    }
                }
                if (!isFound) {
                    wrkString += argCheck.Substring(index, 1);
                    index = index + 1;
                }
            }

            return wrkString;
        }
    }
}
