ここの情報は古いです。ご理解頂いた上でお取り扱いください。

Changeset 3759


Ignore:
Timestamp:
Aug 23, 2007, 3:13:08 PM (12 years ago)
Author:
maruyama
Message:

merged prj_emoji

Location:
OpenPNE/trunk/webapp
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • OpenPNE/trunk/webapp/lib/OpenPNE/Smarty.php

    r3757 r3759  
    2727    function ext_display($resource_name, $cache_id = null, $compile_id = null)
    2828    {
     29        $this->register_outputfilter('smarty_outputfilter_convert_emoji');
    2930        // とりあえず携帯用にSJISのみ対応
    3031        if ($this->output_charset == 'SJIS') {
     
    101102function smarty_outputfilter_unescape_emoji($tpl_output, &$smarty)
    102103{
    103     return emoji_unescape($tpl_output, true);
     104    $tpl_output = emoji_unescape($tpl_output, true);
     105    $tpl_output = emoji_unescape($tpl_output, false);
     106    return $tpl_output;
    104107}
    105108
     
    119122}
    120123
     124function smarty_outputfilter_convert_emoji($tpl_output, &$smarty)
     125{
     126    return emoji_convert($tpl_output, true);
     127}
     128
    121129?>
  • OpenPNE/trunk/webapp/lib/util/emoji.php

    r1856 r3759  
    55 */
    66
     7require_once(OPENPNE_WEBAPP_DIR .'/lib/OpenPNE/KtaiEmoji.php');
    78function emoji_escape($str, $remove = false)
    89{
     
    1112        $emoji = '';
    1213        $c1 = ord($str[$i]);
    13         if ($c1 == 0xF8 || $c1 == 0xF9) {
     14        if ($GLOBALS['__Framework']['carrier'] == 's') {
     15                if ($c1 == 0xF7 || $c1 == 0xF9 || $c1 == 0xFB) {
     16                $bin = substr($str, $i, 2);
     17                $emoji = emoji_escape_sb($bin);
     18            }
     19        } elseif ($c1 == 0xF8 || $c1 == 0xF9) {
    1420            $bin = substr($str, $i, 2);
    1521            $emoji = emoji_escape_i($bin);
     
    3945    if (preg_match('/'.$iemoji.'/', $bin)) {
    4046        $unicode = mb_convert_encoding($bin, 'UCS2', 'SJIS-win');
    41         return sprintf('&#x%02X%02X;', ord($unicode[0]), ord($unicode[1]));
     47        $emoji_code = OpenPNE_KtaiEmoji::getInstance();
     48        $code = $emoji_code->get_emoji_code4emoji(sprintf('&#x%02X%02X;', ord($unicode[0]), ord($unicode[1])), 'i');
     49        return '%%'.$code.'%%';
    4250    } else {
    4351        return '';
     
    7987        return '';
    8088    }
    81     return sprintf('&#x%04X;', $unicode);
     89    $emoji_code = OpenPNE_KtaiEmoji::getInstance();
     90    $code = $emoji_code->get_emoji_code4emoji(sprintf('&#x%04X;', $unicode), 'e');
     91    return '%%'.$code.'%%';
     92}
     93
     94function emoji_escape_sb($bin)
     95{
     96    $sjis1 = ord($bin[0]);
     97    $sjis2 = ord($bin[1]);
     98    $web1 = $web2 = 0;
     99    switch ($sjis1) {
     100        case 0xF9:
     101            if ($sjis2 >= 0x41 && $sjis2 <= 0x7E) {
     102                $web1 = ord('G');
     103                $web2 = $sjis2 - 0x20;
     104            } elseif($sjis2 >= 0x80 && $sjis2 <= 0x9B) {
     105                $web1 = ord('G');
     106                $web2 = $sjis2 - 0x21;
     107            } elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xED) {
     108                $web1 = ord('O');
     109                $web2 = $sjis2 - 0x80;
     110            }
     111            break;
     112        case 0xF7:
     113            if ($sjis2 >= 0x41 && $sjis2 <= 0x7E) {
     114                $web1 = ord('E');
     115                $web2 = $sjis2 - 0x20;
     116            } elseif ($sjis2 >= 0x80 && $sjis2 <= 0x9B) {
     117                $web1 = ord('E');
     118                $web2 = $sjis2 - 0x21;
     119            } elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xF3) {
     120                $web1 = ord('F');
     121                $web2 = $sjis2 - 0x80;
     122            }
     123            break;
     124        case 0xFB:
     125            if ($sjis2 >= 0x41 && $sjis2 <= 0x7E) {
     126                $web1 = ord('P');
     127                $web2 = $sjis2 - 0x20;
     128            } elseif ($sjis2 >= 0x80 && $sjis2 <= 0x8D) {
     129                $web1 = ord('P');
     130                $web2 = $sjis2 - 0x21;
     131            } elseif ($sjis2 >= 0xA1 && $sjis2 <= 0xD7) {
     132                $web1 = ord('Q');
     133                $web2 = $sjis2 - 0x80;
     134            }
     135            break;
     136        default:
     137        return '';
     138    }
     139    $emoji_code = OpenPNE_KtaiEmoji::getInstance();
     140    $code = $emoji_code->get_emoji_code4emoji(pack('c5', 0x1b, 0x24, $web1, $web2, 0x0f), 's');
     141    return '%%'.$code.'%%';
    82142}
    83143
     
    142202}
    143203
     204function emoji_convert($str)
     205{
     206    $moji_pattern = '/%%([a-z][0-9]+)%%/i';
     207    return preg_replace_callback($moji_pattern, '_emoji_convert', $str);
     208}
     209
     210function _emoji_convert($matches)
     211{
     212    $o_code = $matches[1];
     213   
     214    switch ($GLOBALS['__Framework']['carrier']) {
     215        case 'i':
     216        $carrior = 'i';
     217        break;
     218        case 's':
     219        $carrior = 's';
     220        break;
     221        case 'e':
     222        $carrior = 'e';
     223        break;
     224        default:
     225        return '〓';
     226    }
     227   
     228    $emoji_code = OpenPNE_KtaiEmoji::getInstance();
     229    $c_emoji = $emoji_code->convert_emoji($o_code, $carrior);
     230    if ($c_emoji) {
     231        return $c_emoji;
     232    } else {
     233        return '〓';
     234    }
     235}
     236
    144237?>
  • OpenPNE/trunk/webapp/modules/ktai/init.inc

    r2190 r3759  
    1919if (CHECK_KTAI_UA && !isKtaiUserAgent()) {
    2020    openpne_redirect('pc');
     21}
     22
     23$agent = new OpenPNE_KtaiUA();
     24if ($agent->is_docomo()) {
     25    $GLOBALS['__Framework']['carrier'] = 'i';
     26} elseif ($agent->is_au()) {
     27    $GLOBALS['__Framework']['carrier'] = 'e';
     28} elseif ($agent->is_vodafone()) {
     29    $GLOBALS['__Framework']['carrier'] = 's';
    2130}
    2231
Note: See TracChangeset for help on using the changeset viewer.