//--------------------------------------------------------------------------- // TOZENKAKU : 半角記号、英数字、ひらがな、カタカナを全角に変換する。 // [Usage] : // call TOZENKAKU $$in_str, ##jpn_flag; // $$out_str = $$return; // // $$in_str : 変換する文字列 // ##jpn_str : = 0 なら全角カタカナ、= 1 なら全角ひらがなへ変換 // $$out_str : 変換後の文字列 // TOZENKAKU: if( !#STR_TABLE_DEFINED ){ // 文字のテーブルを定義 // グローバル変数にして繰り返し呼び出される場合の // オーバーヘッドをなくす // 注:半角カタカタは全て文字コードで表現しています。 // control code の offset $Hankaku = " "; ##a = 0x20; while( ##a < 0xE2 ){ $Hankaku = $Hankaku + char(##a); ##a = ##a + 1; } // 半角濁音・撥音のテーブル $Hankaku_Daku = ""; ##a = 0xB6; while( ##a < 0xC5 ){ $Hankaku_Daku = $Hankaku_Daku + char(##a) + char(0xDE); ##a = ##a + 1; } $$daku = ""; $$hatsu = ""; ##a = 0xCA; while( ##a < 0xCF ){ $$daku = $$daku + char(##a) + char(0xDE); $$hatsu = $$hatsu + char(##a) + char(0xDF); ##a = ##a + 1; } $Hankaku_Daku = $Hankaku_Daku+$$daku+$$hatsu+char(0xB3)+char(0xDE); // 全角文字のテーブル $Zenkaku = "                                " + " !”#$%&’()*+,−./0123456789:;<=>?" + "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_" + "‘abcdefghijklmnopqrstuvwxyz{|}〜 " + "                                " + " 。「」、・ヲァィゥェォャュョッーアイウエオカキクケコサシスセソ" + "タチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワン゛゜" + " 。「」、・をぁぃぅぇぉゃゅょっーあいうえおかきくけこさしすせそ" + "たちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわん゛゜" + "ヵヶ"; $Zenkaku_Daku_Kata = "ガギグゲゴザジズゼゾダヂヅデドバビブベボパピプペポヴ"; $Zenkaku_Daku_Hira = "がぎぐげござじずぜぞだぢづでどばびぶべぼぱぴぷぺぽ"; // 文字テーブル定義の読み込みフラグ #STR_TABLE_DEFINED = 1; } $$r = ""; ##l = strlen( $$1 ); ##a = 0; while( ##a < ##l ){ $$a = midstr( $$1, ##a, 1 ); ##s = ascii( $$a ); if( ##s > 0xFF ){ // 全角文字だった場合の処理 $$a = midstr( $$1, ##a, 2 ); ##a = ##a + 2; } else { if( ##s >= 0x20 && ##s <= 0xA5 ){ // 半角カタカナ以外の処理 $$a = midstr( $Zenkaku, 2*##s, 2 ); } else if( ##s == 0xB3 || (##s >= 0xB6 && ##s <= 0xC4) || (##s >= 0xCA && ##s <= 0xCE) ){ // 濁点の付く可能性があるものの場合の処理 $$n = midstr( $$1, ##a + 1, 1 ); ##c = ascii($$n); if( (##c != 0xDE) && (##c != 0xDF) ){ // 次の文字が濁(撥)音でなければそのまま全角に変換 $$a = midstr( $Zenkaku, 2*##s + 0x80*##2, 2 ); } else { // 次の文字が濁(撥)点だった場合の処理 if( ##s==0xB3 && (##2 || ##c != 0xDE) ){ // カタカナの「ヴ」はあるが、 // ひらがなにはないことを考慮 $$a = midstr("ウう",##2*2,2)+midstr($Zenkaku,##c*2,2); } else { // その他の文字には濁(撥)音文字がある ##d = strstr( $Hankaku_Daku, $$a + $$n ); if( ##2 ) $$a = midstr( $Zenkaku_Daku_Hira, ##d, 2 ); else $$a = midstr( $Zenkaku_Daku_Kata, ##d, 2 ); } ##a = ##a + 1; // 濁(撥)点の分のインクリメント } } else { // 濁点の付かない半角カタカナの場合の処理 $$a = midstr( $Zenkaku, 2*##s + 0x80*##2, 2 ); } ##a = ##a + 1; } $$r = $$r + $$a; } return $$r; //---------------------------------------------------------------------------