<?php
/*
 * このソースコードは blanco Frameworkによって自動生成されています。
 */
/*. DOC <@package blanco.sample.stringconverter;>.*/

/*. require_module 'mbstring'; .*/;
/*. require_module 'standard'; .*/;

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

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

        if ($argCheck === null) {
            throw new Exception('メソッド[convert]のパラメータ[argCheck]にnullが与えられました。しかし、このパラメータにnullを与えることはできません。');
        }

        $wrkString = '';
        $arraySize = mb_strlen($argCheck);
        for ($index = 0; $index < $arraySize; ) {
            $look = mb_substr($argCheck, $index);
            $isFound = false;
            for ($indexDef = 0; $indexDef < count($this->STRING_CONVERT_DEF); $indexDef++) {
                $wrkStrComp = $look;
                if (mb_strlen($look) > mb_strlen($this->STRING_CONVERT_DEF[$indexDef][0])) {
                    $wrkStrComp = mb_substr($wrkStrComp, 0, mb_strlen($this->STRING_CONVERT_DEF[$indexDef][0]));
                }
                if ($wrkStrComp === $this->STRING_CONVERT_DEF[$indexDef][0]) {
                    $wrkString = $wrkString . $this->STRING_CONVERT_DEF[$indexDef][1];
                    $index += mb_strlen($this->STRING_CONVERT_DEF[$indexDef][0]);
                    $isFound = true;
                    break;
                }
            }
            if (!$isFound) {
                $wrkString = $wrkString . mb_substr($argCheck, $index, 1);
                $index = $index + 1;
            }
        }

        return $wrkString;
    }
}
?>
