#! /usr/local/bin/perl # 特殊変換 # 今のところファミコン色変換とか サ1 とかの変換 # # 単純変換データ # # q[アx] => q[■], とか書くと逆変換の時に「■」が「アx」に置換されるので注意。 # 不可逆な変換等は下方のchange_to_xxx/change_from_xxxの中に直接書くこと。 # # ======ここから============================================================ my %xxx_data = ( # ファミコン $00 - $0f q[ア0] => q[], q[ア1] => q[], q[ア2] => q[], q[ア3] => q[], q[ア4] => q[], q[ア5] => q[], q[ア6] => q[], q[ア7] => q[], q[ア8] => q[], q[ア9] => q[], q[アa] => q[], q[アb] => q[], q[アc] => q[], q[アd] => q[], q[アe] => q[], q[アf] => q[], # ファミコン $10 - $1f q[イ0] => q[], q[イ1] => q[], q[イ2] => q[], q[イ3] => q[], q[イ4] => q[], q[イ5] => q[], q[イ6] => q[], q[イ7] => q[], q[イ8] => q[], q[イ9] => q[], q[イa] => q[], q[イb] => q[], q[イc] => q[], q[イd] => q[], q[イe] => q[], q[イf] => q[], # ファミコン $20 - $2f q[ウ0] => q[], q[ウ1] => q[], q[ウ2] => q[], q[ウ3] => q[], q[ウ4] => q[], q[ウ5] => q[], q[ウ6] => q[], q[ウ7] => q[], q[ウ8] => q[], q[ウ9] => q[], q[ウa] => q[], q[ウb] => q[], q[ウc] => q[], q[ウd] => q[], q[ウe] => q[], q[ウf] => q[], # ファミコン $30 - $3f q[エ0] => q[], q[エ1] => q[], q[エ2] => q[], q[エ3] => q[], q[エ4] => q[], q[エ5] => q[], q[エ6] => q[], q[エ7] => q[], q[エ8] => q[], q[エ9] => q[], q[エa] => q[], q[エb] => q[], q[エc] => q[], q[エd] => q[], q[エe] => q[], q[エf] => q[], # 旧・色変換 ■ q[シ0] => q[], q[シ1] => q[], q[シ2] => q[], q[シ3] => q[], q[シ4] => q[], q[シ5] => q[], q[シ6] => q[], q[シ7] => q[], q[シ8] => q[], q[シ9] => q[], q[シw] => q[], # 旧・色変換 ■ q[シ0] => q[], q[シ1] => q[], q[シ2] => q[], q[シ3] => q[], q[シ4] => q[], q[シ5] => q[], q[シ6] => q[], q[シ7] => q[], q[シ8] => q[], q[シ9] => q[], q[シw] => q[], # q[シx] => q[], q[シa] => q[], q[シb] => q[], q[シc] => q[], q[シd] => q[], q[シe] => q[], q[シf] => q[], q[シg] => q[], q[シh] => q[], q[シi] => q[], q[シj] => q[], q[シk] => q[], # 旧・色変換 ● q[マ0] => q[], q[マ1] => q[], q[マ2] => q[], q[マ3] => q[], q[マ4] => q[], q[マ5] => q[], q[マ6] => q[], q[マ7] => q[], q[マ8] => q[], q[マ9] => q[], q[マw] => q[], # q[マx] => q[], q[マa] => q[], q[マb] => q[], q[マc] => q[], q[マd] => q[], q[マe] => q[], q[マf] => q[], q[マg] => q[], q[マh] => q[], q[マi] => q[], q[マj] => q[], q[マk] => q[], # 旧・色変換 ▲ q[サ0] => q[], q[サ1] => q[], q[サ2] => q[], q[サ3] => q[], q[サ4] => q[], q[サ5] => q[], q[サ6] => q[], q[サ7] => q[], q[サ8] => q[], q[サ9] => q[], q[サw] => q[], # q[サx] => q[], q[サa] => q[], q[サb] => q[], q[サc] => q[], q[サd] => q[], q[サe] => q[], q[サf] => q[], q[サg] => q[], q[サh] => q[], q[サi] => q[], q[サj] => q[], q[サk] => q[], # 旧・色変換 ▼ q[ワ0] => q[], q[ワ1] => q[], q[ワ2] => q[], q[ワ3] => q[], q[ワ4] => q[], q[ワ5] => q[], q[ワ6] => q[], q[ワ7] => q[], q[ワ8] => q[], q[ワ9] => q[], q[ワw] => q[], # q[ワx] => q[], q[ワa] => q[], q[ワb] => q[], q[ワc] => q[], q[ワd] => q[], q[ワe] => q[], q[ワf] => q[], q[ワg] => q[], q[ワh] => q[], q[ワi] => q[], q[ワj] => q[], q[ワk] => q[], # 旧・色変換 ◆ q[ヒ0] => q[], q[ヒ1] => q[], q[ヒ2] => q[], q[ヒ3] => q[], q[ヒ4] => q[], q[ヒ5] => q[], q[ヒ6] => q[], q[ヒ7] => q[], q[ヒ8] => q[], q[ヒ9] => q[], q[ヒw] => q[], q[ヒb] => q[], # q[ヒx] => q[], q[ヒa] => q[], q[ヒb] => q[], q[ヒc] => q[], q[ヒd] => q[], q[ヒe] => q[], q[ヒf] => q[], q[ヒg] => q[], q[ヒh] => q[], q[ヒi] => q[], q[ヒj] => q[], q[ヒk] => q[], # 旧・色変換 ★ q[ホ0] => q[], q[ホ1] => q[], q[ホ2] => q[], q[ホ3] => q[], q[ホ4] => q[], q[ホ5] => q[], q[ホ6] => q[], q[ホ7] => q[], q[ホ8] => q[], q[ホ9] => q[], q[ホw] => q[], q[ホb] => q[], # q[ホx] => q[], q[ホa] => q[], q[ホb] => q[], q[ホc] => q[], q[ホd] => q[], q[ホe] => q[], q[ホf] => q[], q[ホg] => q[], q[ホh] => q[], q[ホi] => q[], q[ホj] => q[], q[ホk] => q[], # 旧・色変換 旦 q[チ0] => q[], q[チ1] => q[], q[チ2] => q[], q[チ3] => q[], q[チ4] => q[], q[チ5] => q[], q[チ6] => q[], q[チ7] => q[], q[チ8] => q[], q[チ9] => q[], q[チw] => q[], q[チb] => q[], # q[チx] => q[], q[チa] => q[], q[チb] => q[], q[チc] => q[], q[チd] => q[], q[チe] => q[], q[チf] => q[], q[チg] => q[], q[チh] => q[], q[チi] => q[], q[チj] => q[], q[チk] => q[], # 初期・お茶変換 q[ォa!] => q[旦~], q[ォb!] => q[旦~], q[ォc!] => q[旦~], q[ォd!] => q[旦~], q[ォe!] => q[旦~], q[ォf!] => q[旦~], q[ォg!] => q[旦~], #まーきー q[ゥ0] => q[], q[ゥ1] => q[], q[ゥ2] => q[], q[ゥ3] => q[], q[ゥ4] => q[], q[ゥ5] => q[], q[ゥ6] => q[], q[ゥ7] => q[], q[ゥ7] =>q[], q[ゥ7] =>q[], #wikipedia # 特定文字列 q[おんぷたん] => q[おんぷたん], q[うさだ] => q[うさだ], q[ぷちこ] => q[ぷちこ], q[でじこ] => q[でじこ], q[ぴよこ] => q[ぴよこ], q[しまこ!] => q[しまこ!], # team-A q[あやちゅう] => q[あやちゅう], q[アリス] => q[アリス], q[iRC] => q[iRC], q[ユアニート] => q[ユアニート], q[擁護派] => q[擁護派], q[おちょくり派] => q[おちょくり派], q[SH七瀬] => q[SH七瀬], q[SH七瀬] => q[SH七瀬], q[マソ\ちゅう] => q[マソ\ちゅう], q[マソ\] => q[マソ\], q[マソ] => q[マソ], q[長文先生] => q[長文先生], q[funya] => q[funya], q[広報室長] => q[広報室長], # q[室長] => q[室長], q[チーム] => q[チーム], q[TEAM] => q[TEAM], q[team] => q[team], q[(#゚皿゚)] => q[(#゚皿゚)], q[ネコニ〜ト] => q[ネコニ〜ト], q[ユアニ〜ト] => q[ユアニ〜ト], #管理人(50音順) q[AGStar] => q[AGStar], q[クワ] => q[クワ], q[qwerty] => q[qwerty], q[シ罕シ毎] => q[シ罕シ毎], q[下衆ナッツ] => q[下衆ナッツ], q[下衆ナッシ] => q[下衆ナッシ], q[下衆ナッシ] => q[下衆ナッシ], q[疑古猫] => q[疑古猫], q[ギコ猫] => q[ギコ猫], q[ギコ猫] => q[ギコ猫], # q[猫] => q[], q[ナッシ] => q[ナッシ], q[ナッシ] => q[ナッシ], q[下衆] => q[下衆], q[下衆ナッツ] => q[下衆ナッツ], q[しば] => q[しば], q[酋長] => q[酋長], q[ds] => q[ds], q[生入] => q[生入], q[生ち] => q[生ち], q[生デブ] => q[生デブ], q[生デブ] => q[生デブ], q[まな] => q[まな], q[腹黒] => q[腹黒], q[ブラックポンポン] => q[ブラックポンポン], q[ブラックポンポン] => q[ブラックポンポン], q[ひなた] => q[ひなた], q[妖精] => q[妖精], #掲示板 q[II] => q[II], q[みらい] => q[みらい], q[あやしい] => q[あやしい], q[クリ島] => q[クリ島], q[クリスマス島] => q[クリスマス島], q[リミ] => q[リミ], q[リミクス] => q[リミクス], q[リバース] => q[リバース], q[リバス] => q[リバス], q[本店] => q[本店], q[退避] => q[退避], q[暫定] => q[暫定], q[暫退] => q[暫退], q[暫暫] => q[暫暫], q[暫定退避] => q[暫定退避], #mixi q[mixi] => q[mixi], q[マイミク] => q[マイミク], q[マイミク] => q[マイミク], #other q[中島らも] => q[中島らも], q[暫定君] => q[暫定君], ##N.G.WORD # q[URL=] => q[URL=], # q[\[url=] => q[\[url=], # q[viagra] => q[viagra], # q[phentermine] => q[phentermine], # q[nutzworld] => q[nutzworld], # q[ppfoi] => q[ppfoi], # q[sky-hart] => q[sky-hart], # q[blog\.x07\.jp] => q[blog\.x07\.jp], # q[cute-lala] => q[cute-lala], # q[ocxgf] => q[ocxgf], # q[vip-blog] => q[vip-blog], # q[ocxgf] => q[ocxgf], q[casino\.ru] => q[casino\.ru], # q[web] => q[web], # q[\/url] => q[\/url], q[/URL=] => q[/URL=], q[viagra] => q[viagra], q[phentermine] => q[phentermine], q[road!] => q[road!], q[nutzworld] => q[nutzworld], q[ppfoi] => q[ppfoi], q[sky-hart] => q[sky-hart], q[blog\.x07\.jp] => q[blog\.x07\.jp], q[cute-lala] => q[cute-lala], q[ocxgf] => q[ocxgf], q[vip-blog] => q[vip-blog], q[ocxgf] => q[ocxgf], # q[coolest!] => q[coolest!], q[\[url=] => q[\[url=], # q[casino] => q[casino], # q[\.ru] => q[\.ru], ); # ======ここまで============================================================ # 処理用のパターン my %xxx_back = map { $xxx_data{$_}, $_ } keys(%xxx_data); my $xxx_data_pattern = "(?:" . join("|", map { quotemeta($_) } keys(%xxx_data)) . ")"; my $xxx_back_pattern = "(?:" . join("|", map { quotemeta($_) } keys(%xxx_back)) . ")"; # 特殊な変換を行う(色付けとか) sub change_to_xxx { my($message) = @_; #フォント対策 キーワードリンク(20071209) #if (($message =~ /\[\[([^']+?)\]\]/) || ($message =~ /\(\(([^']+?)\)\)/ )){ #$utf8mes = &utf8Enc($1); #} #if ($message =~ /\{([^']+?)\}\}/){ #$euc8mes = &eucEnc($1); #} #重くなるけど暫定でこんな感じ 20071211 Thanks 夕暮れ #$message =~ s#\[\[([^']+?)\]\]#$1<\/FONT><\/A>#g; while ($message =~ /\[\[([^']+?)\]\]/g){ my $utm = &utf8Enc($1); $message =~ s#\[\[([^']+?)\]\]#$1<\/FONT><\/A>#; } #$message =~ s#\[\[([^']+?)\]\]#$1<\/FONT><\/A>#g; while ($message =~ /\{\{([^']+?)\}\}/g){ my $eum = &eucEnc($1); $message =~ s#\{\{([^']+?)\}\}#$1#; } #$message =~ s#\(\(([^']+?)\)\)#$1#g; while ($message =~ /\(\(([^']+?)\)\)/g){ my $utm = &utf8Enc($1); $message =~ s#\(\(([^']+?)\)\)#$1#; } # %xxx_dataの分を変換 (SJIS,タグ対応済み) $message =~ s/\G((?:[^\x81-\x9f\xe0-\xfc<]|[\x81-\x9f\xe0-\xfc].|<[^>]*?>)*?)($xxx_data_pattern)/$1$xxx_data{$2}/xgo; # その他の変換を行う場合はこの辺に記述する #$message =~ s#マ##g; $message =~s/ネコニ\Qー\Eト/ネコニ〜ト<\/BLINK><\/FONT>/g; $message =~s/ユアニ\Qー\Eト/ユアニ〜ト<\/BLINK><\/FONT>/g; $message =~s/\Q深海\E/シ罕シ毎<\/BLINK><\/FONT>/g; return $message; } # 特殊な変換を戻す(色付けとか) sub change_from_xxx { my($message) = @_; # %xxx_dataの分を戻す $message =~ s/($xxx_back_pattern)/$xxx_back{$1}/go; # その他の変換を戻す場合はこの辺に記述する $message =~s/\Q深海\E<\/BLINK><\/FONT>/\深海\E/g; #フォント対策 キーワードリンク(20071209) $message =~s#([^']+?)#\[\[$3\]\]#g; $message =~s#([^']+?)#\{\{$3\}\}#g; $message =~s#([^']+?)#\(\($3\)\)#g; #独自タグは不要だった #while ($message =~ /([^']+?)<\/A>/g){ #my $utm = &utf8Dec($1); #$message =~s#([^']+?)#\[\[$utm\]\]#g; # } return $message; } # html関連の正規表現 my $re_xtag_name = qr#[a-zA-Z0-9\.\_\:\-]+#; # 画像の拡張子の正規表現 my $re_image_suffix = qr#jpg|jpeg|png|gif#i; # タグの中にあると危なそうなものの正規表現 my $re_dangerous = qr#mailto:|script|file:|strange\.kurumi\.ne\.jp|env|xmp|hainuwele|bbss.cgi|click#i; # タグ許可ルーチン sub tag_change { my($message, $nazomode) = @_; if($nazomode) { # なぞモード # URL自動リンクの調整その1 my $autolink = ($message =~ s#([^<]*)#\0$1\0#go); # "と&を戻す $message =~ s#((?:\G|>)[^<]*?)"#$1"#go; $message =~ s#((?:\G|>)[^<]*?)&#$1&#go; # タグっぽいものをタグに戻す $message =~ s#<(/?$re_xtag_name(?:\s+(?:$re_xtag_name\s*(?:=\s*(?:"[^"]*"|[^\s]*?)[\s\0]*)?)*)?/?)>#&xtag_filter($1, 1)#ego; # URL自動リンクの調整その2と画像展開 if($autolink) { my $inline_img = ($message =~ s#((?:\G|>)[^<]*?)\0([^\0]*?$re_image_suffix)\0#$1#go); $message =~ s#((?:\G|>)[^<]*?)\0([^\0]*?)\0#$1$2#go; $message =~ tr/\0//d; if($inline_img) { $message =~ s##$1#go; } } } else { # 通常モード # (未実装) } return $message; } ##URLエンコード #UTF-8にエンコード(夕暮れ管理人) sub utf8Enc { my ( $Mes ) = @_ ; use Jcode; Jcode::convert(\$Mes, 'utf8' , 'sjis'); $Mes =~ tr/ /+/; $Mes =~ s/(\W)/'%'.unpack("H2", $1)/ego; return $Mes; } ##はてな用 sub eucEnc { my ( $Mes ) = @_ ; use Jcode; Jcode::convert(\$Mes, 'euc' , 'sjis'); $Mes =~ tr/ /+/; $Mes =~ s/(\W)/'%'.unpack("H2", $1)/ego; return $Mes; } ##URLデコード sub utf8Dec { my ( $Mes ) = @_ ; $Mes=~tr/+/ /; $Mes=~s/%([a-fA-F0-9]{2})/pack("C",hex($1))/eg; use Jcode; Jcode::convert(\$Mes, 'sjis' , 'utf8'); } sub eucDec { my ( $Mes ) = @_ ; $Mes=~tr/+/ /; $Mes=~s/%([a-fA-F0-9]{2})/pack("C",hex($1))/eg; use Jcode; Jcode::convert(\$Mes, 'sjis' , 'euc'); } sub URLe{my $URLencode=shift; $URLencode=~s/([^0-9A-Za-z_ ])/'%'.unpack('H2',$1)/ge; $URLencode=~s/\s/+/g; return \$URLencode;} sub URLd{ my $URLdecode=shift; return \$URLdecode;} # タグ用フィルタ sub xtag_filter { my($data, $nazomode) = @_; return "<" . $data . ">" if $data =~ m#(?:$re_dangerous)#; return "<" . $data . ">"; } 1; __END__