/*
 * このソースコードは blanco Frameworkにより自動生成されました。
 */

/**
 * デフォルトコンストラクタ
 * @fileoverview このソースコードは blanco Frameworkにより自動生成されました。
 * @class 半角カタカナ→全角カタカナの文字列変換のサンプル。blancoStringConverterの実装には影響しません。
 * @constructor
 */
function SampleKatakanaHan2ZenStringConverter() {
    /* パラメータの数、型チェックを行います。 */
    if (arguments.length !== 0) {
        throw new Error("[ArgumentException]: SampleKatakanaHan2ZenStringConverter.SampleKatakanaHan2ZenStringConverter のパラメータは[0]個である必要があります。しかし実際には[" + arguments.length +  "]個のパラメータを伴って呼び出されました。");
    }

}

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

/**
 * 文字列変換定義に従い、文字列を変換します。
 * @addon
 * @param {string} argCheck 変換対象の文字列。
 * @return 文字列変換定義にしたがって変換された文字列。変換定義にひとつも合致しない場合には元の文字列が戻ります。
 * @type string
 */
SampleKatakanaHan2ZenStringConverter.prototype.convert = function(/* string */ argCheck) {
    /* パラメータの数、型チェックを行います。 */
    if (arguments.length !== 1) {
        throw new Error("[ArgumentException]: SampleKatakanaHan2ZenStringConverter.convert のパラメータは[1]個である必要があります。しかし実際には[" + arguments.length +  "]個のパラメータを伴って呼び出されました。");
    }
    if (typeof(argCheck) != "string") {
        throw new Error("[ArgumentException]: SampleKatakanaHan2ZenStringConverter.convert の1番目のパラメータは[string]型でなくてはなりません。しかし実際には[" + typeof(argCheck) + "]型が与えられました。");
    }

    var wrkString = "";
    for (var index = 0; index < argCheck.length; ) {
        var look = argCheck.substring(index);
        var isFound = false;
        for (var indexDef = 0; indexDef < SampleKatakanaHan2ZenStringConverter.STRING_CONVERT_DEF.length; indexDef++) {
            var wrkStrComp = look;
            if (look.length > SampleKatakanaHan2ZenStringConverter.STRING_CONVERT_DEF[indexDef][0].length) {
                wrkStrComp = wrkStrComp.substring(0, SampleKatakanaHan2ZenStringConverter.STRING_CONVERT_DEF[indexDef][0].length);
            }
            if (wrkStrComp === SampleKatakanaHan2ZenStringConverter.STRING_CONVERT_DEF[indexDef][0]) {
                wrkString += SampleKatakanaHan2ZenStringConverter.STRING_CONVERT_DEF[indexDef][1];
                index += SampleKatakanaHan2ZenStringConverter.STRING_CONVERT_DEF[indexDef][0].length;
                isFound = true;
                break;
            }
        }
        if (!isFound) {
            wrkString += argCheck.charAt(index);
            index = index + 1;
        }
    }

    return wrkString;
};
/* クラス[SampleKatakanaHan2ZenStringConverter]宣言の終了。 */
