KENT-WEB サポートコーナー 過去ログ [ 0337 ]


記事No: 14927
投稿日: 2016/06/24(Fri) 09:18:35
タイトルWeb PatioにBBCodeを使いたい
ID情報: rick7634
投稿者: RICK#7634
URLhttp://bbs.dojin-rpg-cheat.com/bbs/patio.cgi

Web PatioでBB Codeを使いたいと思いスレを立てさせていただきました。

使いたいBBCodeは以下にあるもの全てです。
https://ja.wikipedia.org/wiki/BB%E3%82%B3%E3%83%BC%E3%83%89

Forum Patioを使えば使用可能なようですが
デザインがしっくり来ないのと原因不明のバグがあるため
こちらを選択することにしました。

どなたかよろしくお願いします。


記事No: 14928
投稿日: 2016/06/25(Sat) 23:54:20
タイトルRe: Web PatioにBBCodeを使いたい
ID情報: hirayama
投稿者: hirayama

手順としては、

sub bbtrans {
my $str = $_[0];
$str =~ s/\[b\](.*?)\[\/b\]/<span style="font-weight:bold">$1<\/span>/ig;
$str =~ s/\[i\](.*?)\[\/i\]/<span style="font-style:italic">$1<\/span>/ig;
以下使用したいBBコードの変換を列記


return $str;
}

のようなBBコード変換関数を追加し、

sub read_log 内の親記事、レス記事の
$com = &autolink($com) if ($cf{autolink});
をそれぞれコメントアウトして
$com = bbtrans($com);
を追加すればいいと思います。


記事No: 14937
投稿日: 2016/06/29(Wed) 03:21:29
タイトルRe^2: Web PatioにBBCodeを使いたい
ID情報: rick7634
投稿者: RICK
URLhttp://bbs.dojin-rpg-cheat.com/bbs/patio.cgi

>>hirayamaさん
>>てけてんさん
参考になる意見ありがとうございました。

結局のところhirayamaさんの例を参考に以下のようにいたしました。

【init.cgi】("1;"の直前に追加)

#-----------------------------------------------------------
# bbcode→html変換
#-----------------------------------------------------------
sub bbcode2html {
# BBCode を変換
my $str = $_[0];
$str =~ s/\[b\](.*?)\[\/b\]/<b>$1<\/b>/ig;
$str =~ s/\[i\](.*?)\[\/i\]/<i>$1<\/i>/ig;
$str =~ s/\[u\](.*?)\[\/u\]/<u>$1<\/u>/ig;
$str =~ s/\[d\](.*?)\[\/d\]/<s>$1<\/s>/ig;
$str =~ s/\[s\](.*?)\[\/s\]/<s>$1<\/s>/ig;
$str =~ s/\[color=([A-Z]+|#[0-9A-F]{6})\](.*?)\[\/color\]/<font color="\L$1\E">$2<\/font>/ig;
$str =~ s/\[size=([\+\-]?[1-7])\](.*?)\[\/size\]/<font size="$1">$2<\/font>/ig;
$str =~ s/\[hr(.*?)\]/<hr$1>/ig;
$str =~ s/\[url=((https?|ftp):\/\/[\w\!\#\$\%\&\'\(\)\*\+\,\-\.\/\:\;\=\?\@\~]*)\](.*?)\[\/url\]/\t<a href="$1" target="_blank" rel="nofollow">$3<\/a>/ig;
$str =~ s/<([1-3])>/"\$ex[$1]"/ieeg;
$str =~ s/\[list\](.*?)\[\/list\]/<ul>$1<\/ul>/ig;
$str =~ s/\[list=(1|A)\](.*?)\[\/list\]/<ol type="$1">$2<\/ol>/ig;
$str =~ s/\[\*\]/<li>/ig;
$str =~ s/\[quote\](.*?)\[\/quote\]/<blockquote>$1<\/blockquote>/ig;
$str =~ s/\[code\](.*?)\[\/code\]/<code>$1<\/code>/ig;
$str =~ tr/\0//d;
return $str;
}

【patio.cgi】(forum patioを参考に)

<置換前>

$com = &autolink($com) if ($cf{autolink});

<置換後>

if($com =~ /\[(.*?)\]/){
$com = bbcode2html($com) ;
} else{
$com = &autolink($com) ;
}

<補足>


[url]と自動リンクの件についてテストした所、
両方共うまくいきました。


記事No: 14929
投稿日: 2016/06/26(Sun) 08:14:06
タイトルRe: Web PatioにBBCodeを使いたい
ID情報: teketen
投稿者: てけてん

すでに、hirayamaさんが回答されていますが、折角なので。

WebPatio v5.11での改造です。

BBコードをタグ変換するのに、Parse::BBCodeモジュールを使用しています。
http://search.cpan.org/~tinita/Parse-BBCode-0.15/
よりダウンロードし、圧縮ファイル.tar.gzが解凍できるソフトで解凍して下さい。
解凍したら、フォルダの中に、libフォルダがあると思いますので、その中に格納されているParseフォルダ(中身の入ったまま)をpatioのlibディレクトリ(フォルダ)の中にアップロードして下さい。
.tar.gzの解凍方法については、自分で調べてください。

※※改造は、自己責任でお願いします。
また、正常に動作しない場合は、もとに戻してください。
以下の改造をしても動作しない場合でも、これ以上のサポートは行いません。
ご了承ください。
それでもよろしければ、改造してみて下さい。

-----------------------------------------------------------
■BBコードの仕様■

使用できるBBコードは、
b,i,u,img,url,email,size,color,list,*,quote,code,:-),:smile:
です。

・emailは、[email=example@example.com]リンクする文字[/email]が使用できます。

・:-)と:smile:は、[b]:-)[/b]のように、[b]と[/b]で挟む必要があります。
(Parse::BBCodeモジュールの仕様です)
但し、[b]こんにちは:-)〜[/b]のようにスマイル以外の文字を記述すると変換されません。
それ以外に記述された:-)と:smile:は、普通の文字として表示されます。

例:
BBコードでは、

 「こんにちは〜[b]:smile:[/b] お元気ですか:-)」

タグに変換されると

 「こんにちは〜<b><img src="アイコンのurl" alt=":smile:"></b> お元気ですか:-)」

になります。
他は、
https://ja.wikipedia.org/wiki/BB%E3%82%B3%E3%83%BC%E3%83%89
の記述と同じです。

・改造による仕様として、BBコードを記述したコメントでは、init.cgiの設定で

# URLの自動リンク (0=no 1=yes)
$cf{autolink} = 1;

にしていても、URLを記述しても自動リンクになりません([url][/url]を使用した時に面倒になるので、他のBBコードを記述しても無効にしました)。
リンクをさせたい場合は、[url][/url]を使用して下さい。
BBコードの記述のないコメントは、自動リンクになります(もちろん、0を指定している場合は、自動リンクにはなりません)。
この仕様が嫌な場合は、ご自分で改造して下さい。
私は、これ以上の対応はしません。

・ログファイルには、BBコードのまま保存されます。
観覧時に、タグに変換されます。

-----------------------------------------------------------
■patioの改造■

patioのinit.cgiをテキストエディタで開いてください。
一番最後の行に、

1;

がありますので、その前の行に

#-----------------------------------------------------------
# bbcode→html変換 改造の為に追加 ■■
#-----------------------------------------------------------
sub bb2html {
my $com = shift;
require Parse::BBCode;
my $p = Parse::BBCode->new({
tags => {
Parse::BBCode::HTML->defaults,
},
escapes => {
Parse::BBCode::HTML->default_escapes,
},
smileys => {
base_url => "$cf{iconurl}/",
icons => { qw/ :-) sml_sml.gif :smile: sml_big.gif / },
format => '<img src="%s" alt="%s">',
},
});

my $com = $p->render($com);
undef $p;
$com =~ s/&lt;br&gt;|&amp;lt;br&amp;gt;/<br>/ig;
return($com,1);
}

を挿入します。
この記述の中に、BBコードのスマイル( :-) と :smile: )を記述した時に変換されるアイコンの指定が

icons => { qw/ :-) sml_sml.gif :smile: sml_big.gif / },

この部分となります。
:-)をsml_sml.gifに、:smile:をsml_big.gifに指定しているので、別のアイコンにしたい場合は、sml_sml.gifとsml_big.gifを好きなアイコンに変更して下さい。
アイコン名のみ記述し、アイコンはinit.cgiの設定で

# アイコンディレクトリ【URLパス】
$cf{iconurl} = './icon';

で指定したディレクトリに入れてください。

次に、patio.cgiをテキストエディタで開いてください。

#-----------------------------------------------------------
# 記事閲覧
#-----------------------------------------------------------

という部分を探してください。
その記述の中に

$com = &autolink($com) if ($cf{autolink});

という部分が、親記事とレス記事の部分にありますので(レス記事は273行目付近と親記事は218行目付近、この2か所)、

my $al = 0; # 改造による追加 ■■
($com,$al) = bb2html($com) if($com =~ /\[(.*?)\]/); # 改造による追加 ■■
$com = &autolink($com) if ($cf{autolink} and $al == 0); # 改造による修正 ■■

に変更して下さい。
以上です。


[検索ページ] [掲示板]