エントリー内にコードを入力する - CodeFormatterExtension -

投稿者: 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のコードブロックを入れ子にしても、正しく評価されません。

多分、終了タグではなく開始タグの検索を開始として、終了タグまでの間のコードブロック内での評価の際に自身のメソッドを再帰呼び出しするような形にすれば可能かなぁ・・・。なんて。
でも、入れ子にされたコードブロックを評価する必要性って、これ以外には無いのでいらないのかも。

タグ:

BlogEngine.NET

コメント

2008/10/18 12:10:06 #

本当はラインナンバーとかも付けられるんですが、あまりにもしょぼい実装でHTMLタグを意識しないと(したとしても)まともに表示されないので、紹介しません(笑)。というかこれでは使えない。

Tomotoshi Sugishita

2008/10/18 17:03:29 #

java scriptでちょいと思いですけど、syntaxhighlighterを使ってます。

Tadahito Higuchi

2008/10/21 1:55:23 #

まぁそれも考えたんですけどね。
面倒なので純正のままで…w
コードあんまり書かないしww

Tomotoshi

コメントを書く




biuquote
  • コメント
  • プレビュー
Loading



杉下 朋年

Tomotoshi Sugishita
Tomotoshi Sugishita
< D&UNITE 株式会社 >

Microsoft MVP
Microsoft MVP for Development Platforms
- ASP.NET/IIS Jul.2009 - Jun.2012
Microsoft MVP for Development Tools
- Visual Basic Jul. 2004 - Jun. 2009

 

カレンダー

<<  2月 2012  >>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

投稿一覧をカレンダーで表示