投稿者: Tomotoshi Sugishita
2008年10月17日 11:50
BlogEngine.NETには、CodeFormatterExtension という標準のエクステンションがあり、これを利用することで、ブログエントリー内にプログラミングコードを入力することができます。
入力方法はいたって簡単で、コードとして評価してほしい部分を [code:xxx] と [/code] で囲みます。
(xxx 内は言語名です。)
たとえば、C#なら、xxxをc#と記述すると
string hoge = "C#コードのサンプル";
MessageBox.Show(hoge);
のように表示されます。
xxx 内はその他に、vb、js、html、xml、tsql、msh の指定が可能です。
tsql あたりを標準サポートしているあたりがなかなかにくい感じですねw
DECLARE @hoge NVARCHAR(10)
SET @hoge = 'T-SQLのサンプル'
SELECT @hoge
GO
なんてね。
VBに関しては標準のままだと、HTMLエンコーディングがされたまま出力されてしまいますので、/App_Code/Extension/CodeFormatter/CodeFormatter.cs の122行目を以下のように修正すると
return HttpContext.Current.Server.HtmlDecode(vbf.FormatCode(text));
以下のように正しく表示されるようです。
Dim hoge As String = "VBコードのサンプル"
MessageBox.Show(hoge)
ロジックとしては、正規表現にて[/code]を見つけて、それより手前にある[code:xxx]との間の部分をコードとして取扱い、キーワードを色分けしているだけのようですので、VB9 の XML リテラルを含んだコードをきちんとハイライトしようとしてVBのコードブロック内にXMLのコードブロックを入れ子にしても、正しく評価されません。
多分、終了タグではなく開始タグの検索を開始として、終了タグまでの間のコードブロック内での評価の際に自身のメソッドを再帰呼び出しするような形にすれば可能かなぁ・・・。なんて。
でも、入れ子にされたコードブロックを評価する必要性って、これ以外には無いのでいらないのかも。