- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:コードプラグイン
#indent
#contents
////////////////////////////////////////////////////////////////
//** インラインコードの追加
//* 方針
//-- make_link L59 L285
////////////////////////////////////////////////////////////////
* 平コードの総行数が1つ不足する問題を修正 [#w14469c7]
// codehighlight L83
** 方針 [#v5647617]
- 謎な帳尻合わせがあるが、とりあえず削除。
-- 対症療法。そもそも、どっかで必要のために帳尻合わせしてるハズなので要調査。
** 改造 [#zf38b7b9]
-##plugin/code/codehighlight.php## の ##function highlight## の前半にて、
#code(diff){{{{
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 から開始するように仕様変更 [#a7894906]
** 方針 [#w2e07613]
- 行数は自然数で数える方が自然かと。
- 次の改造と合わせ、##_plugin_code_makeNumber## の呼出しが単純で規則的になる。
** 改造 [#fe784726]
- ##plugin/code/codehighlight.php## の #function _plugin_code_makeNumber## にて、
#code(diff){{{{
-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## の前半で、平コードの改造の直後にて、
#code(diff){{{{
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## の最後にて、
#code(diff){{{{
// 最後の余分な改行を削除
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## の最後にて、
#code(diff){{{{
// 最後の余分な改行を削除
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;コメント行の行末に現れる余計な改行の除去 [#pe86fcf0]
** 方針 [#z8437af7]
- diff をコードの変更を示す目的(汎用差分)で使用する場合、無変更行を位置のマーカーとして表示できると便利。
- この改造により、##_plugin_code_makeNumber## の3箇所の呼出しから引数の補正が無くなる。
//
- ##plugin/code/line.diff.php## にて、
#code(diff){{{{
...
$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## にて、
#code(diff){{{{
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);
}}}}
////////////////////////////////////////////////////////////////