オリジナルは開始行番号に+/-を許容しないが、これを+1/-1とした場合に、前回の最終行番号+1/-1からの開始とする仕様にしてみる。同様に+/-nの場合最終業番号+/-nからの開始としておく。現在パッチ作成中。今の所作業中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
############################################################
#
# <p>ソースコードを整形出力するプラグインです。</p>
# <pre>
# {{code コード種別,タブ桁数,開始行番号,WIDTHxHEIGHT]
# ソースコード
# }}
# </pre>
# <p>
# 開始行番号をブランク、もしくは "0" にすれば行番号は表示されません。
# </p>
#
############################################################
package plugin::code::Code;
use strict;
#===========================================================
# コンストラクタ
#===========================================================
sub new {
my $class = shift;
my $self = {};
return bless $self,$class;
} |
グローバル変数宣言と、mod_perl時のためにinitializeフックでの初期化が必要。
use vars qw($maxline $place);
#===========================================================
# フックメソッド(initialize用)
#===========================================================
sub hook {
$maxline = 1;
$place = 1;
} |
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
#===========================================================
# ブロックプラグイン
#===========================================================
sub block {
my $self = shift;
my $wiki = shift;
my $source = shift;
my $type = shift;
my $tab = shift;
my $line = shift;
my $size = shift;
my ($width,$height) = ("","");
if ( $size ne "" && $size ne " " && $size =~ /^([0-9]+%?)?x?([0-9]+%?)?$/ ) {
$width = "width:$1;" if ( $1 ne "" );
$height = "height:$2;" if ( $2 ne "" );
}
my $html = "";
my $formatter = "plugin::code::Format::".$type;
$type =~ /\W/ and $@ = "対応していないコード種別です。\"".&Util::escapeHTML($type)."\"" or eval ("use ".$formatter);
# エラーが発生した場合クリーンアップ処理
if ( $@ ) {
my $error = $@;
$html = "<p>".&Util::escapeHTML($formatter)
."の作成に失敗しました。発生したエラーは以下のとおりです。<pre>$error</pre>";
} else {
my $cf = $formatter->new($self);
$html .= "\n<div class=\"code\" style=\"$width$height\">\n<table><tr>\n";
$source = $cf->format($wiki, $source);
# タブの桁数
my $tabspace = "";
for (my $i=0; $i<$tab; $i++) { $tabspace .= " "; };
|
以下から行番号関係の処理。
62 63 64
|
# 行番号表示
if ($line eq 'false') {$line='0';}
elsif ($line eq 'true' || $line =~ /^ *$/ ) {$line='1';} |
65
|
if ($line !~ /[^ 0-9]/ && $line !~ /^ *0$/){ |
65
|
if ($line !~ /[^-+ 0-9]/ && $line !~ /^ *0$/){ |
- +/-があれば保存してある最終行を元に開始行を計算
if ($line =~ /[+-]/){
if ($line < 0 or $line =~ /\+/ and $line == 0){
$line++;
}
$line = $pre_maxline+$line;
$line = " "x($place - length $line) . $line;
} |
66
|
my $maxline = split(/\n/,$source) + $line-1; |
66
|
$maxline = split(/\n/,$source) + $line-1; |
67 68 69 70 71 72 73
|
$html .= "<td class=\"line\"><pre>";
for(my $i=$line;$i<=$maxline;$i++){
$html .= "$i<br>";
}
$html .= "</pre></td>\n";
}
|
以上、行番号処理
74 75 76 77 78 79 80 81 82 83 84
|
# ソース表示
$source =~ s/\t/$tabspace/g;
$html .= "<td class=\"source\"><pre>$source</pre></td>\n";
$html .= "</tr></table>\n</div>\n";
}
return $html;
}
1; |
最終更新時間:2005年10月16日 15時11分08秒