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

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

/**
 * 全角ひらがな→全角カタカナの文字列変換のサンプル。blancoStringConverterの実装には影響しません。
 */
class SampleZenHiragana2KatakanaStringConverter {
    /**
     * 文字列置換定義。
     */
    public /*.array[int][int]string.*/ $STRING_CONVERT_DEF = array(array('う゛', 'ヴ')/* No.1 説明:濁音を先に定義します。 */, array('ぁ', 'ァ')/* No.2 */, array('あ', 'ア')/* No.3 */, array('ぃ', 'ィ')/* No.4 */, array('い', 'イ')/* No.5 */, array('ぅ', 'ゥ')/* No.6 */, array('う', 'ウ')/* No.7 */, 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 */, array('ぢ', 'ヂ')/* No.35 */, array('っ', 'ッ')/* No.36 */, array('つ', 'ツ')/* No.37 */, array('づ', 'ヅ')/* No.38 */, array('て', 'テ')/* No.39 */, array('で', 'デ')/* No.40 */, array('と', 'ト')/* No.41 */, array('ど', 'ド')/* No.42 */, array('な', 'ナ')/* No.43 */, array('に', 'ニ')/* No.44 */, array('ぬ', 'ヌ')/* No.45 */, array('ね', 'ネ')/* No.46 */, array('の', 'ノ')/* No.47 */, array('は', 'ハ')/* No.48 */, array('ば', 'バ')/* No.49 */, array('ぱ', 'パ')/* No.50 */, array('ひ', 'ヒ')/* No.51 */, array('び', 'ビ')/* No.52 */, array('ぴ', 'ピ')/* No.53 */, array('ふ', 'フ')/* No.54 */, array('ぶ', 'ブ')/* No.55 */, array('ぷ', 'プ')/* No.56 */, array('へ', 'ヘ')/* No.57 */, array('べ', 'ベ')/* No.58 */, array('ぺ', 'ペ')/* No.59 */, array('ほ', 'ホ')/* No.60 */, array('ぼ', 'ボ')/* No.61 */, array('ぽ', 'ポ')/* No.62 */, array('ま', 'マ')/* No.63 */, array('み', 'ミ')/* No.64 */, array('む', 'ム')/* No.65 */, array('め', 'メ')/* No.66 */, array('も', 'モ')/* No.67 */, array('ゃ', 'ャ')/* No.68 */, array('や', 'ヤ')/* No.69 */, array('ゅ', 'ュ')/* No.70 */, array('ゆ', 'ユ')/* No.71 */, array('ょ', 'ョ')/* No.72 */, array('よ', 'ヨ')/* No.73 */, array('ら', 'ラ')/* No.74 */, array('り', 'リ')/* No.75 */, array('る', 'ル')/* No.76 */, array('れ', 'レ')/* No.77 */, array('ろ', 'ロ')/* No.78 */, array('ゎ', 'ヮ')/* No.79 */, array('わ', 'ワ')/* No.80 */, array('ゐ', 'ヰ')/* No.81 */, array('ゑ', 'ヱ')/* No.82 */, array('を', 'ヲ')/* No.83 */, array('ん', 'ン')/* No.84 */ );

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