平コードの総行数が1つ不足する問題を修正
方針 - 謎な帳尻合わせがあるが、とりあえず削除。
- 対症療法。そもそも、どっかで必要のために帳尻合わせしてるハズなので要調査。
改造 - plugin/code/codehighlight.php の function highlight の前半にて、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
| | if (file_exists(PLUGIN_DIR.'code/keyword.'.$lang.'.php')) {
// 言語定義ファイルが有る言語
……
} else if (file_exists(PLUGIN_DIR.'code/line.'.$lang.'.php')) {
// 行指向解析設定ファイルが有る言語
……
} else {
// PHP と 未定義言語
$option['outline'] = false;
$option['comment'] = false;
- // 最後の余分な改行を削除
- if ($src[strlen($src)-2] == ' ')
- $src = substr($src, 0, -2);
- else
- $src= substr($src, 0, -1);
if ($option['number']) {
// 行数を得る
$num_of_line = substr_count($src, "\n");
if($src[strlen($src)-1]=="\n")
$src=substr($src,0,-1);
$data = array('number' => '');
$data['number'] = _plugin_code_makeNumber($num_of_line-1);
}
……
|
行番号がデフォルトで 1 から開始するように仕様変更
方針 - 行数は自然数で数える方が自然かと。
- 次の改造と合わせ、_plugin_code_makeNumber の呼出しが単純で規則的になる。
改造 - plugin/code/codehighlight.php の #function _plugin_code_makeNumber## にて、
1
2
3
4
5
6
7
8
9
| | -function _plugin_code_makeNumber($end, $begin=0)
+function _plugin_code_makeNumber($end, $begin=1){
$number='';
$str_len=max(3,strlen(''.$end));
for($i=$begin; $i<=$end; ++$i) {
$number.= sprintf('%'.$str_len.'d',($i))."\n";
}
return $number;
}
|
- 同ファイル、function highlight の前半で、平コードの改造の直後にて、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| | if (file_exists(PLUGIN_DIR.'code/keyword.'.$lang.'.php')) {
// 言語定義ファイルが有る言語
……
} else if (file_exists(PLUGIN_DIR.'code/line.'.$lang.'.php')) {
// 行指向解析設定ファイルが有る言語
……
} else {
// PHP と 未定義言語
$option['outline'] = false;
$option['comment'] = false;
if ($option['number']) {
// 行数を得る
$num_of_line = substr_count($src, "\n");
if($src[strlen($src)-1]=="\n")
$src=substr($src,0,-1);
$data = array('number' => '');
- $data['number'] = _plugin_code_makeNumber($num_of_line-1);
+ $data['number'] = _plugin_code_makeNumber($num_of_line);
}
……
|
- 同ファイル、function lineToHTML の最後にて、
1
2
3
4
5
6
7
8
9
10
| | // 最後の余分な改行を削除
if ($html[strlen($html)-2] == ' ')
$html = substr($html, 0, -2);
else
$html = substr($html, 0, -1);
$html = array( 'src' => $html, 'number' => '', 'outline' => '', 'commentnum' => $commentnum,);
- if($mknumber) $html['number'] = _plugin_code_makeNumber($num_of_line-2); // 最後に改行を削除したため -2
+ if($mknumber) $html['number'] = _plugin_code_makeNumber($num_of_line-1); // 最後に改行を削除したため -1
return $html;
|
- 同ファイル、function srcToHTML の最後にて、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| | // 最後の余分な改行を削除
if ($html[strlen($html)-2] == ' ')
$html = substr($html, 0, -2);
else
$html = substr($html, 0, -1);
$html = array( 'src' => $html, 'number' => '', 'outline' => '',
'blocknum' => $blockno, 'commentnum' => $commentno, );
if($mkoutline)
return $this->makeOutline($html,$line-1,$nest,$mknumber,$outline,$blockno,$id_number);
- if($mknumber) $html['number'] = _plugin_code_makeNumber($line-1);
+ if($mknumber) $html['number'] = _plugin_code_makeNumber($line);
return $html;
|
diff モードで空白開始行を表示するように変更&bt;コメント行の行末に現れる余計な改行の除去
方針 - diff をコードの変更を示す目的(汎用差分)で使用する場合、無変更行を位置のマーカーとして表示できると便利。
- この改造により、_plugin_code_makeNumber の3箇所の呼出しから引数の補正が無くなる。
- plugin/code/line.diff.php にて、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
| | ...
$switchHash['\\']= PLUGIN_CODE_IDENTIFIRE_CHAR; // control
$switchHash['@'] = PLUGIN_CODE_IDENTIFIRE_CHAR; // control
+ $switchHash[' '] = PLUGIN_CODE_IDENTIFIRE_CHAR; // nochange
...
// コメント定義
- $switchHash['#'] = PLUGIN_CODE_COMMENT; // コメントは # から改行まで
+ $switchHash['#'] = PLUGIN_CODE_COMMENT_CHAR; // コメントは # から改行まで
$code_css = Array(
'changed', //
'added', //
'removed', //
'system', //
+ 'nochange',//
);
$code_keyword = Array(
...
'*' => 4,
'\\' => 4,
'@' => 4,
'---' => 4,
'+++' => 4,
+
+ ' ' => 5,
);
|
- plugin/code/codehighlight.php の #function lineToHTML## にて、
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
| | function lineToHTML(& $string, & $lang, $id_number, & $option) {
...
while($line !== false) {
...
switch ($switchHash[$line[0]]) {
case PLUGIN_CODE_CHAR_COMMENT:
case PLUGIN_CODE_HEAD_COMMENT:
case PLUGIN_CODE_COMMENT_CHAR:
// 行頭の1文字でコメントと判断できるもの
...
- $line = htmlspecialchars(substr($line,0,-1), ENT_QUOTES);
+ $line = htmlspecialchars($line, ENT_QUOTES);
...
$html .= '<span class="'.PLUGIN_CODE_HEADER.'comment" id="'.PLUGIN_CODE_HEADER.$id_number.'_cmt_'.$commentnum.'">'
- .$line.'</span>'."\n";
+ .$line.'</span>';
...
case PLUGIN_CODE_HEADW_COMMENT:
case PLUGIN_CODE_COMMENT_WORD:
// 2文字以上のパターンから始まるコメント
if (strncmp($line, $commentpattern, strlen($commentpattern)) == 0) {
...
- $line = htmlspecialchars(substr($line,0,-1), ENT_QUOTES);
+ $line = htmlspecialchars($line, ENT_QUOTES);
...
if ($option['link'])
$html .= '<span class="'.PLUGIN_CODE_HEADER.'comment" id="'.PLUGIN_CODE_HEADER.$id_number.'_cmt_'.$commentnum.'">'
- .$line.'</span>'."\n";
+ .$line.'</span>';
...
- if($mknumber) $html['number'] = _plugin_code_makeNumber($num_of_line-1); // 最後に空行は削除するため -1
+ if($mknumber) $html['number'] = _plugin_code_makeNumber($num_of_line);
|
|