No Such Blog or Diary
NP_SyntaxHighlighter を試す
http://wakka.xiffy.nl/syntaxhighlighter より入手.
PEAR の Text_Highlighter を使っているらしい.とりあえず pre タグでソースを書いてしまうので div でなく pre にクラスを書いて動くように修正.このプラグイン無しでも普通に表示できるようにHTMLエスケープされた文字列を食うように変更.ついでに,<?php と ?> で囲まれてない php もハイライトするうにあほな修正を入れてみた.
function parseString(&$content) { $chk = ' class="highlight'; if (strpos($content['body'],$chk) > 0 || strpos($content['more'],$chk) > 0) { if ($this->_setupPEAR()) { $supportedRules = $this->getOption('highlight_rules'); $supported_highlighter = explode(',',$supportedRules); if (is_array($supported_highlighter)) { foreach ($supported_highlighter AS $key=>$syntax) { $supported_highlighter[$key] = trim(strtolower($syntax)); } } else { // fallback with default settings $supported_highlighter = $this->supported_highlighter; } $this->counter = 1; $highlight_str = ''; $content_part = array('body','more'); foreach ($content_part as $key) { // now check for all allowed syntax highlighter foreach ($supported_highlighter AS $syntax) { $pattern = "/<pre class=\"highlight_".$syntax."\">(.*?)<\/pre>/esi"; $replacement = "\$this->highlight_code('\\1','".$syntax."')"; $content[$key] = preg_replace($pattern,$replacement,$content[$key]); } } // end content_part } else { doError('Check your settings - can not include PEAR::Text_Highlighter'); } // some cleanup code ini_restore('include_path'); unset($this->hl); } } function highlight_code($string, $mode) { // remove possible br tags from nucleus automatic linebreak convertion $string = preg_replace('/<br \/>[\n|\r| ]/', '', $string); $string = stripslashes($string); $string = str_replace ( array ( '&' , '"', ''' , '<' , '>', ''' ), array ( '&', '"', "'", '<', '>', '?' ), $string ); $normflag=false; $va = strpos($string, "<?"); if(strcmp($mode, 'php')==0 && ($va==FALSE || $va > 5)) { $normflag = true; $string = "<?php ".$string."?>"; } // check is there a cached object if (!isset($this->hl[$mode])) { // create new highlighter object $options = array('tag' => $this->tag_mode,'numbers'=>$this->line_numbers); $this->hl[$mode] = & Text_Highlighter::factory($mode,$options); } // retrieve highlighted string $highlight_str = $this->hl[$mode]->highlight($string); // if higlight_mode == save add a dummy id to exclude from further parsing $checkid = ''; if ($this->rendermode == 'save') { $checkid = 'id="np_hl_'.$this->counter.'" '; } // enclose with div container //$highlight_str = '<div '.$checkid.'class="highlight_'.$mode.'">'.$highlight_str.'</div>'; $highlight_str = $highlight_str; $this->counter++; if($normflag){ $highlight_str = str_replace("<span class=\"hl-inlinetags\">?></span>", "", $highlight_str); $highlight_str = preg_replace("/(<span class=\"hl-inlinetags\">)?<\\?php *\n(<\\/span>)?/", "", $highlight_str); } return $highlight_str; }
追記:
Text_highlighter を新しくしたら <?php の後の空白とかの扱いが変わったらしい.なので最後のほうをちょっと書き換え.
$highlight_str = preg_replace("/(<span class=\"hl-inlinetags\">)?<\\?php *(<\\/span>)?(<.*?>) *\n/", "\\3", $highlight_str);
- Comments: 0
- TrackBack (Close): -
Nucleus の改行をちょっと頭よくする
編集画面での改行位置に自動で改行(<br />)を入れるようにしているのだけど Nucleus は <pre> タグの内部にまで改行を入れてくれる.結果として二重の改行となってしまいひじゃうに見栄えが悪い.
ということで,ソースをいじって <pre> タグの内部に改行入れないようにしてみた.nucleus/libs/globalfunctions.php にある addBreaks というのが編集後の保存時に改行を挿入している関数らしい.
function addBreaks($var) { return nl2br($var); }
php のnl2br という関数を使って一律に改行の挿入を行っているので,これを pre タグの内部と外部で挙動が変わるように変更.
function addBreaks($var) { $i=0; $v2=""; $n=mb_strlen($var); while($i<$n){ $p=mb_strpos($var,"<pre",$i); if($p==FALSE){ $v2.=nl2br(mb_substr($var, $i)); break; } $v2.=nl2br(mb_substr($var, $i,$p-$i)); $i=$p; $p=mb_strpos($var,"</pre>",$i); if($p==FALSE){ $v2.=mb_substr($var, $i); break; } $v2.=mb_substr($var, $i,$p-$i); $i=$p; } return $v2; }
もっときれいに書けるだろうけど必要十分なので汚さはむし.
- Comments: 0
- TrackBack (Close): -
easy regex @sed
- 2007-03-14 (Wed)
- プログラミング ( sed/wake/awk )
あなごるの新しい問題を毎度のごとく sed でがんばる.埋め込むと簡単なので埋め込まない方針で,括弧のネストがないと仮定して317bytes.ひとまずこれ以上縮めるのは面倒なので投げてしまう.
- Comments: 0
- TrackBack (Close): -
サウンドカードも付けたし
P5B DELUXE のサウンドチップにはPC上の音を録音するための wave mixer がついてない.Line out と Line in を物理的につなげてしまえば録音できるのだがそれも少々いやなので… Sound Blaster 5.1 という Sound Blaster の中で一番安いやつを買ってきた.2000円弱.そこらの掲示板ではダメなカードとして書かれているが出力部の性能なんかどうでもよい.というか,音の違いなんぞ圧縮かけてる時点で無用の長物.
- Comments: 0
- TrackBack (Close): -
電源を新調
風邪でダウン気味ではあるが電源がないと何もできないので電源を買いに.とりあえずまた T-ZONE で 剛力PLUG-in 450W を購入.ケーブルが着脱式かつメッシュ結束なのでケース内がだいぶすっきりした.ただ,前の電源に比べるとPFCがついてないのでブレーカーの心配がちょっと大きく.
さて,余った部品でもう一台作れそうなのでどうしましょ.ケースがないのでケースを買ってくるかむき出しか.どこかに安くていいケースがないかなぁ
- Comments: 0
- TrackBack (Close): -
PCの強化
今の構成にしてから3年以上たったので,自宅のメインPCを強化してみる.秋葉原へ行って一回りし,面倒になってT-ZONEで13万円ほどまとめ買い.IDEのHDDがひとつくっつかなくなったのでHDDも安いのを購入.
新しい構成:
- CPU: Core 2 Duo E6600
- MEM: UMAX DDR2 800 2G DUAL (1GBx2)
- M/B: ASUS P5B Deluxe
- VGA: Leadtek WinFast PX7900GS TDH 256M
- HDD: Seagate Barracuda 7200.10 320G SATAII
過去の構成:
- CPU: Pentium 4 2.6C (Northwood)
- MEM: DDR 400 1.5G DUAL
- M/B: ASUS P4P800
- VGA: Leadtek WinFast A350XT TDH 128M
てきとうに選んだのにまた ASUS + Leadtek になってしまったらしい.別にオーバークロックするわけでもないのでM/Bも別の安いのでいい気もするが… とりあえず組みあがったけど電源がおかしくなってきたので電源も買いに行かなくては.
- Comments: 0
- TrackBack (Close): -