まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2007-08-16 (木) 2007-08-22 (水) > 最新


2007-08-17 (金)

tDiary で SHJS (Syntax Highlighting in JavaScript) を使って構文ハイライトする

昨日 に引き続き、今度は tDiary のシンタックスハイライトに SHJS (Syntax Highlighting in JavaScript) を使ってみた。 このブログでは別のライブラリを使って構文ハイライトさせるつもりだが、 せっかくなので手順を載せておく。 なお、tDiary 2.1.3 以降の Wiki スタイルでないと動かないはず。

index.rb のあるディレクトリで SHJS のアーカイブを展開し、 shjs というディレクトリ名にリネーム。

$ unzip shjs-0.4.2.zip
$ mv shjs-0.4.2 shjs

hikidoc.rb の parse_pre メソッドを以下のように書き換えるかオーバーライドする。

class HikiDoc

  def parse_pre( text )
    ret = text
    ret.gsub!( /^#{MULTI_PRE_OPEN_RE}[ \t]*(\w*)$(.*?)^#{MULTI_PRE_CLOSE_RE}$/m ) do |str|
      begin
        raise if $1.empty?
        html = <<HTML
<pre class="sh_#{$1.downcase}">#{restore_pre( $2 )}</pre>
<script type="text/javascript" src="shjs/lang/sh_#{$1.downcase}.min.js"></script>
HTML
        store_block( html )
      rescue
        "\n" + store_block( "<pre>%s</pre>" % restore_pre( $2 ) ) + "\n\n"
      end
    end
    ret.gsub!( /(?:#{PRE_RE}.*\n?)+/ ) do |str|
      str.chomp!
      str.gsub!( PRE_RE, '' )
      "\n" + store_block( "<pre>\n%s\n</pre>" % restore_pre( str ) ) + "\n\n"
    end
    ret
  end

end

以下のコードを shjs.rb という名前で保存し、プラグインとして追加。 スタイルシートの部分は、好みに応じて shjs/css/sh_darkblus.css などに適当に書き換える。

add_header_proc do
	<<-HTML
	<link rel="stylesheet" type="text/css" href="shjs/sh_style.css" />
	<script type="text/javascript" src="shjs/sh_main.min.js"></script>
	<script type="text/javascript"><!--
	if (window.addEventListener) {
		window.addEventListener('load', sh_highlightDocument, false);
	} else if (window.attachEvent) {
		window.attachEvent('onload', sh_highlightDocument);
	} else {
		window.onload = sh_highlightDocument;
	}
	//--></script>
	HTML
end

ここまでやったら、あとは、

<<< ruby
……
ソースコード
……
>>>

のように書けばOK。

このエントリの続き: 2008-08-23 (土)
Tags: JavaScript tDiary | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のリンク元

編集