# $Id: JugemEmoji.pm 120 2007-10-19 15:45:31Z mayuki $
package Plagger::Plugin::Filter::JugemEmoji;
use utf8;
use strict;
use base qw( Plagger::Plugin );

sub init {
    my $self = shift;
    $self->SUPER::init(@_);
}

sub register {
    my($self, $context) = @_;

    $context->register_hook(
        $self,
        'update.entry.fixup' => \&filter
    );
}

sub filter {
    my($self, $context, $args) = @_;

    my $e = $args->{entry};

    return unless $e->permalink =~ m#^https?://[^.]+\.jugem\.(cc|jp)/#;
    $e->body($self->replace($e->body, $&));
}

my %EMOJI_SET = (
  '嬉しい' => 'a01',
  '楽しい' => 'a02',
  '悲しい' => 'a03',
  '怒り' => 'a04',
  'びっくり' => 'a05',
  'ショック' => 'a06',
  'ときめき' => 'a07',
  '冷や汗' => 'a08',
  'しょんぼり' => 'a09',
  '男' => 'a10',
  '女' => 'a11',
  '拍手' => 'a12',
  'グッド' => 'a13',
  'バッド' => 'a14',
  '聞き耳を立てる' => 'a15',
  '見る' => 'a16',
  '抱擁' => 'a17',
  'おてんき' => 'weather_01',
  'くもり' => 'weather_02',
  'あめ' => 'weather_03',
  'ゆき' => 'weather_04',
  '濃霧' => 'j_001',
  '小雨' => 'j_002',
  '晴れ' => 'b01',
  '曇り' => 'b02',
  '雨' => 'b03',
  '雪' => 'b04',
  '雷' => 'b05',
  '強風' => 'b06',
  '霧' => 'b07',
  '月' => 'b08',
  '電車' => 'c01',
  '飛行機' => 'c02',
  '車' => 'c03',
  '自転車' => 'c04',
  '船' => 'c05',
  'バス' => 'c06',
  '学校' => 'd01',
  '家' => 'd02',
  'ビル' => 'd03',
  '病院' => 'd04',
  '犬' => 'e01',
  '猫' => 'e02',
  '鳥' => 'e03',
  '魚' => 'e04',
  '馬' => 'e05',
  '豚' => 'e06',
  'かたつむり' => 'j_135',
  'ペンギン' => 'pengin',
  '赤ちゃん' => 'e07',
  '子供' => 'e08',
  'おばけ' => 'e09',
  '映画' => 'f01',
  '食事' => 'f02',
  '美容室' => 'f03',
  '読書' => 'f04',
  '温泉' => 'f05',
  'カラオケ' => 'f06',
  'サッカー' => 'g01',
  'サーフィン' => 'g02',
  'スキー' => 'g03',
  'ジョギング' => 'g04',
  '水泳' => 'g05',
  'テニス' => 'g06',
  'ゴルフ' => 'g07',
  '野球' => 'g08',
  '携帯' => 'h01',
  'ビール' => 'h02',
  '熱燗' => 'h03',
  'ホットコーヒー' => 'h04',
  'ソフトクリーム' => 'h05',
  'ラーメン' => 'h06',
  'おでん' => 'h07',
  'パン' => 'h08',
  'ハンバーガー' => 'h09',
  '靴' => 'h10',
  'ペン' => 'h11',
  'メール' => 'h12',
  'PC' => 'h13',
  'テレビ' => 'h14',
  '花' => 'h15',
  '植物' => 'h16',
  'お金' => 'h17',
  '財布' => 'j_104',
  '工具' => 'h18',
  'カチンコ' => 'j_096',
  'ふくろ' => 'j_097',
  'いす' => 'j_099',
  'Ｔシャツ' => 'j_103',
  'ジーンズ' => 'j_106',
  'スノボ' => 'j_107',
  'チャペル' => 'j_108',
  'ドア' => 'j_109',
  'レンチ' => 'j_110',
  '鉛筆２' => 'j_111',
  'ハサミ' => 'j_030',
  '指輪' => 'j_113',
  'リボン' => 'j_041',
  '足' => 'j_046',
  '眼鏡' => 'j_047',
  '砂時計' => 'j_114',
  '腕時計' => 'j_116',
  '王冠' => 'h19',
  '王冠２' => 'j_112',
  'おにぎり' => 'h20',
  '時計' => 'h21',
  'ケーキ' => 'h22',
  'プレゼント' => 'h23',
  'ゲーム' => 'h24',
  'CD' => 'h25',
  'カメラ' => 'h26',
  '銃' => 'h27',
  '桜' => 'h28',
  '！' => 'i01',
  '？' => 'i02',
  '！？' => 'i03',
  'ムード' => 'j_088',
  '！！' => 'j_091',
  'るんるん' => 'j_081',
  'かわいい' => 'j_082',
  'キスマーク' => 'j_083',
  '口紅' => 'j_105',
  'ぴかぴか' => 'j_084',
  'ラブ' => 'i04',
  '失恋' => 'i05',
  '揺れるハート' => 'j_078',
  'ハート大小' => 'j_079',
  'マル秘' => 'i07',
  '祝' => 'i08',
  'ｚｚｚ' => 'i09',
  '眠たい' => 'j_090',
  '怒りマーク' => 'i10',
  'むかっ' => 'j_085',
  'パンチ' => 'j_086',
  '爆弾' => 'j_087',
  '汗' => 'i11',
  'どんっ' => 'j_092',
  'あせあせ' => 'j_093',
  'ギザギザ' => 'j_094',
  'くるりん' => 'j_095',
  'スペード' => 'i12',
  'クローバー' => 'i13',
  'ハート' => 'i14',
  'ダイヤ' => 'i15',
  'ハートのエース' => 'card_01',
  'ダイヤのエース' => 'card_02',
  'スペードのエース' => 'card_03',
  'クローバーのエース' => 'card_04',
  'ノーノー' => 'face_01',
  'ニコニコ' => 'face_02',
  'たらーっ' => 'face_03',
  'モゴモゴ' => 'face_04',
  'ぶー' => 'face_05',
  'てれちゃう' => 'face_06',
  'ラブラブ' => 'face_07',
  'ポロリ' => 'face_08',
  'モグモグ' => 'face_09',
  'イヒヒ' => 'face_10',
  'ラッキー' => 'face_11',
  'ふぅ〜ん' => 'face_12',
  'ムニョムニョ' => 'face_13',
  'ポッ' => 'face_14',
  'わーい' => 'wai',
  'ちっ' => 'chi',
  'がく〜' => 'gaku',
  'ひやひや' => 'hiyaase',
  'あっかんべー' => 'akkanbe',
  'ウィンク' => 'wink',
  '猫2' => 'neco',
  '泣き顔' => 'nakigao',
  '唖然' => 'skull_01',
  '撃沈' => 'skull_02',
  '困惑' => 'skull_03',
  '人影' => 'j_098',
  'YES!' => 'comme_yes',
  'NO!' => 'comme_no',
  'ワッ！' => 'comme_h',
  'おや？' => 'comme_q',
  'ロリポップ！' => 'comme_loli',
  'NEW!' => 'new',
  'TEL' => 'tel',
  'FAX' => 'fax',
  'URL' => 'url',
  'MAIL' => 'mail_03',
  'グー' => 'hand_01',
  'パー' => 'hand_02',
  'チョキ' => 'hand_03',
  'イケテル' => 'hand_04',
  'きのこオレンジ' => 'kinoko_01',
  'きのこレッド' => 'kinoko_02',
  'きのこグリーン' => 'kinoko_03',
  'きのこブルー' => 'kinoko_04',
  'チューリップ' => 'j_132',
  'もみじ' => 'j_134',
  'パソコン' => 'pc',
  'ケータイ' => 'mobile',
  'ポケットベル' => 'j_016',
  '電話' => 'j_042',
  'fax to' => 'j_055',
  'mac' => 'mac',
  'win' => 'win',
  'テレビジョン' => 'tv',
  'カレンダー' => 'calendar',
  'メモ' => 'j_043',
  '壁掛時計' => 'time',
  '本' => 'book',
  'メールピンク' => 'mail_01',
  'メールブルー' => 'mail_02',
  '便箋' => 'memo',
  '鉛筆' => 'pencil',
  'おはな' => 'flower',
  'よつばのクローバー' => 'clover',
  '赤い旗' => 'flag_01',
  '青い旗' => 'flag_02',
  'GO!' => 'go',
  'STOP!' => 'stop',
  'フガー' => 'smoke_01',
  'プシュー' => 'smoke_02',
  'セブン' => 'cv_01',
  'ホットステーション' => 'cv_02',
  'ファミマ' => 'cv_03',
  '郵便局' => 'postman',
  '赤りんご' => 'apple_01',
  '青りんご' => 'apple_02',
  'さくらんぼ' => 'cherry',
  'バナナ' => 'j_133',
  'ラテ' => 'cafe',
  'ひらめき' => 'light',
  'ベースボール' => 'ball_01',
  'サッカーボール' => 'ball_02',
  'バスケットボール' => 'ball_03',
  '地球' => 'earth',
  'パクッ' => 'chara_01',
  'ニョロ' => 'chara_02',
  'ピピピ' => 'chara_03',
  'トイレ' => 'j_027',
  'ディナー' => 'dinner',
  'バー' => 'j_028',
  'ワイングラス' => 'j_136',
  '湯のみ' => 'j_115',
  'ハイヒール' => 'j_029',
  'カバン' => 'j_040',
  '遊園地' => 'j_032',
  '音楽' => 'j_033',
  'アート' => 'j_034',
  '演劇' => 'j_035',
  'イベント' => 'j_036',
  'チケット' => 'j_037',
  'スポーツ' => 'j_015',
  'モータースポーツ' => 'm_sports',
  '波' => 'j_130',
  '富士山' => 'j_131',
  'ツリー' => 'tree',
  'リース' => 'wreathe',
  'ブーツ' => 'boots',
  '星' => 'star',
  'ケーキ２' => 'cake',
  '結晶' => 'yuki',
  '日の出' => 'hinode',
  '鏡もち' => 'mochi',
  'かどまつ' => 'kadomatsu',
  'お年玉' => 'otoshidama',
  '凧' => 'taco',
  '牡羊座' => 'j_003',
  '牡牛座' => 'j_004',
  '双子座' => 'j_005',
  '蟹座' => 'j_006',
  '獅子座' => 'j_007',
  '乙女座' => 'j_008',
  '天秤座' => 'j_009',
  '蠍座' => 'j_010',
  '射手座' => 'j_011',
  '山羊座' => 'j_012',
  '水瓶座' => 'j_013',
  '魚座' => 'j_014',
  '自動車' => 'car',
  '路線バス' => 'bus',
  '信号' => 'j_026',
  'でんしゃ' => 'train',
  'おうち' => 'home',
  '地下鉄' => 'j_017',
  '新幹線' => 'j_018',
  '車（ＲＶ）' => 'j_019',
  '銀行' => 'j_020',
  'ＡＴＭ' => 'j_021',
  'ホテル' => 'j_022',
  'コンビニ' => 'j_023',
  'ガソリンスタンド' => 'j_024',
  '駐車場' => 'j_025',
  'soon' => 'j_100',
  'on' => 'j_101',
  'end' => 'j_102',
  'next' => 'arrow_r',
  'back' => 'arrow_l',
  'up' => 'arrow_u',
  'down' => 'arrow_d',
  '右斜め下' => 'j_044',
  '左斜め上' => 'j_045',
  '左斜め下' => 'j_054',
  '右斜め上' => 'j_031',
  '矢印左右' => 'j_128',
  '矢印上下' => 'j_129',
  '上向き' => 'j_080',
  '下向き' => 'j_089',
  '新月' => 'j_049',
  'やや欠け月' => 'j_050',
  '半月' => 'j_051',
  '三日月' => 'j_052',
  '満月' => 'j_053',
  '有料' => 'j_056',
  '無料' => 'j_057',
  'OK' => 'i06',
  'ＯＫ' => 'j_077',
  'NG' => 'j_117',
  'ID' => 'j_058',
  '次項有' => 'j_060',
  'クリア' => 'j_061',
  'ＮＥＷ' => 'j_063',
  '旗' => 'j_064',
  'フリーダイヤル' => 'j_065',
  'シャープダイヤル' => 'j_066',
  '1' => 'j_067',
  '2' => 'j_068',
  '3' => 'j_069',
  '4' => 'j_070',
  '5' => 'j_071',
  '6' => 'j_072',
  '7' => 'j_073',
  '8' => 'j_074',
  '9' => 'j_075',
  'ゼロ' => 'j_076',
  '禁止' => 'j_124',
  '空室' => 'j_125',
  '合格' => 'j_126',
  '満室' => 'j_127',
  '危険' => 'j_123',
  '車椅子' => 'j_048',
  '喫煙' => 'j_038',
  '禁煙' => 'j_039',
  '虫眼鏡' => 'j_062',
  'パスワード' => 'j_059',
  'クリップ' => 'j_118',
  'コピーライト' => 'j_119',
  'トレードマーク' => 'j_120',
  'リサイクル' => 'j_121',
  'レジスタードトレードマーク' => 'j_122',
);

sub replace {
    my ($self, $text, $base) = @_;

    $text =~ s#\[:(.*?):\]#"<img src=\"$base/emoji/$EMOJI_SET{$1}.gif\" alt=\"$1\" />" || $1#eg;

    $text;
}

1;
__END__

=head1 NAME

Plagger::Plugin::Filter::JugemEmoji - Expand Jugem emoji notations to HTML img elements

=head1 SYNOPSIS

- module: Filter::JugemEmoji

=head1 DESCRIPTION

Expand Jugem emoji notations to HTML img elements.

=head1 AUTHOR

Mayuki Sawatari

=head1 SEE ALSO

L<Plagger>

=cut
