今は使ってない。現在使っているものはこちらを参照。


WordPressだとプラグインをインストールして簡単に導入できる。

いろいろなプラグインがあるが最もダウンロードされているのはSyntaxHighlighter Evolvedだ。つい先日(2010-11-12)アップデートされ、SyntaxHighlighter v3.0.83に対応した。

対応するプログラミング言語一覧はここ

SyntaxHighlighter Evolvedに新しいプログラミング言語を追加する

デフォルトで対応していないものも、brushファイルを追加することで対応させることができる。

SyntaxHighlighter Evolvedで新しいプログラミング言語を追加する方法は作者のWebサイトに書いてある。

そこを参考にして、MathemathecaとLispのbrushを追加してみる。

  1. Under My HatからshBrushMathematica.jsを、All About the CodeからshBrushLisp.jsをDLする。

  2. こんな感じのファイル(my-syntaxhighlighter.php)を作る。

[php title=”my-syntaxhighlighter.php” gutter=”true” highlight=”10″]

<?php

/*

Plugin Name: SyntaxHighlighter Evolved: My Brush

Description: Adds support for the Foobar language to the SyntaxHighlighter Evolved plugin.

Author: Your Name Here

Version: 1.0.0

Author URI: http://yourblog.com/

*/

$myBrushes=array(‘Mathematica’,‘Lisp’);

$mybrushes=array_map(‘strtolower’, $myBrushes);

$size = sizeof($myBrushes);

// SyntaxHighlighter Evolved doesn’t do anything until early in the “init” hook, so best to wait until after that

add_action( ‘init’, ‘syntaxhighlighter_mybrush_regscript’ );

// Tell SyntaxHighlighter Evolved about this new language/brush

add_filter( ‘syntaxhighlighter_brushes’, ‘syntaxhighlighter_mybrush_addlang’ );

// Register the brush file with WordPress

function syntaxhighlighter_mybrush_regscript() {

global $myBrushes, $mybrushes, $size;

for($i = 0; $i < $size; $i++){

wp_register_script( ‘syntaxhighlighter-brush-’ . $mybrushes[$i], plugins_url( ‘shBrush’ . $myBrushes[$i] . ‘.js’, FILE ), array(‘syntaxhighlighter-core’), ‘1.2.3’ );

}

}

// Filter SyntaxHighlighter Evolved’s language array

function syntaxhighlighter_mybrush_addlang( $brushes ) {

global $mybrushes, $size;

for($i = 0; $i < $size; $i++){

$brushes[$mybrushes[$i]] = $mybrushes[$i];

}

return $brushes;

}

?>[/php]

10行目を適宜変えれば、他のbrushにも適用できる。小文字、大文字はshBush<language>.jsの<language>と同じように書く。

  1. wp-content/plugins/にmy-syntaxhighlighterというフォルダを追加してそこにmy-syntaxhighlighter.php、shBrushMathematica.js、shBrushLisp.jsをULする。

  2. WPのプラグインの画面でSyntaxHighlighter Evolved: My Brushを有効化にする。

5.囲むときは全部小文字。たとえばMathematicaの場合は[mathematica]~[/mathematica]でソースコードを囲めばおk。

以下はshBruchMathematica.jpを作った人のWebページにあったサンプルプログラム。

[mathematica](* STEP 1 _)

(_ The amount of time remaining is timeRem *)

timeRem = 10;

path = {p};

(* STEP 2 _)

(_ While there is still time left _)

While[timeRem > 0,

(_ Assume for this iteration that m is the midpoint of the mirror the photons path intersects with _)

m = Round[p + 23 v];

(_ Find the smallest positive root. If s != [Infinity] then s is equal to the time it takes for the photon to reach the intersection point with the mirror, otherwise the photon does not intersect the mirror _)

s = Min[Cases[t /. Solve[(p + t v – m).(p + t v – m) == 19, t], _?Positive]];

(_ If the time it takes to reach the next intersection is less than the time remaining then that means there is an intersection _)

If[s < timeRem,

(_ p is now set to be the point at which it intersects with the mirror and v is determined by our transformation matrix H _)

p += s v;

v = H[p – m].v,

(_ Else there was no intersection, so there are two things that may have happened: (1) The photon stops in mid-flight at timeRem = 10. In this case we let s = timeRem and thus p has reached its final destination, or (2) the photon has sufficient time, but the mirror we chose initially as determined by m was not correct. In this case we let s be 23 since we will choose the next mirror in the photon’s path _)

s = Min[timeRem, 23];

p += s v

];

(_ STEP 3 _)

(_ Reduce timeRem by s _)

timeRem -= s;

(_ Append p to path *)

path = Append[path, p];

];

Print[“The final position of our photon = “, Last[path]];

Print[“Distance from p to the origin = “, answer = Norm[p]];

Print[“Number of digits Mathematica claims to have correct = “, Precision[answer]]

[/mathematica]

スタイルシートを変更する

デフォルトだと、paddingがきつきつなので変更した。変更箇所はwidth, padding, border-radius。

[css title=”shCore.css”]

.syntaxhighlighter {

/width: 100% !important;/

width: 97% !important;

margin: 1em 0 1em 0 !important;

position: relative !important;

overflow: auto !important;

overflow-y: hidden !important;

font-size: 1em !important;

padding: 10px;

-moz-border-radius: 5px !important;

-webkit-border-radius: 5px !important;

}

[/css]

RDarkのスタイルシートも変更。

[css title=”shThemeRDark.css”]

.syntaxhighlighter table caption {

color: #b9bdb6 !important;

border-bottom: 1px dotted #B9B9B9 !important;

margin-bottom: 3px !important;

}

[/css]

右上の「SyntaxHighlighterについて」を「?」にする

いつのバージョンからか、右上の「?」が「SyntaxHighlighterについて」に変わってしまった。このおかげで、常に横スクロールバーが付くようになってしまったので「?」に戻す。

HTMLソースを分析してみると、JSの中に

SyntaxHighlighter.config.strings.help = 'SyntaxHighlighterについて';

という一文が見つかった。そこでwp-content/plugins/syntaxhighlighterのディレクトリ内でfind grepしてみた。

$ find . | xargs grep &#8211;color strings.help
  
./syntaxhighlighter.php: echo " SyntaxHighlighter.config.strings.help = '" . $this->js\_escape\_singlequotes( __( '?', 'syntaxhighlighter' ) ) . "';\n";
  
./syntaxhighlighter.php: echo " SyntaxHighlighter.config.strings.help = '" . $this->js\_escape\_singlequotes( __( '?', 'syntaxhighlighter' ) ) . "';\n";

syntaxhighlighter.phpの上記の部分を

// echo " SyntaxHighlighter.config.strings.help = '" . $this->js\_escape\_singlequotes( __( '?', 'syntaxhighlighter' ) ) . "';\n";
  
echo " SyntaxHighlighter.config.strings.help = '" . "?" . "';\n";

に変更した。

ちなみに__()は言語ごとに、文字列を場合分けするための関数らしい(参照)。