top

TOP  RSS  Login

Hiki - コードをハイライトさせる

Hiki >

手順

Syntax を使う。最終更新が三年前とちょいと古いけれど動くには動く。

syntax*.tar.gz をダウンロードして、展開。hiki のルートディレクトリ下に例えば extlib なんてディレクトリを作っておいて、そこへ lib/syntax 以下をコピーする。

hiki.cgi で $:.unshift(ライブラリの検索パスを追加)をしている場所に $:.unshift("#{org_path.untaint}/extlib") を追加。syntax.rb の load の中で require "syntax/lang/#{syntax}" している箇所を、require "syntax/lang/#{syntax.untaint}" に変更。

その後 syntax/lang/ 以下に言語別に処理を行うスクリプトを作る。Ruby にはそれ用の ruby.rb があるので、それ参考にして改変するといいかも知れない。

hikidoc.rb を改変。block_parser メソッドに ret = parse_superpre( ret ) を追加して、以下のコードを HikiDoc クラス中へ書き込む。superpre ははてな記法から借用。

  require "syntax/convertors/html"
  SUPER_PRE_RE = /^<<|(\w+)|$(.*?)^||>>$/m
  
  def parse_superpre( text )
    ret = text
    begin
      ret.gsub!( SUPER_PRE_RE ) { |str|
        st, cn = $1, $2.unescapeHTML
        if st =~ /^\w+$/
          cv = Syntax::Convertors::HTML.for_syntax(st)
          "\n" + store_block(
            %Q!<div class="syntax syntax_#{st}">%s</div>! % cv.convert(cn)
          ) + "\n\n"
        end 
      }
    rescue
    end 
    ret
  end

こうすると、hikiで <<|ruby|||>> に挟まれたテキストを以下のようにハイライト表示することができる。

def hoge
  21
end

p hoge

リンク

Last modified:2008/12/07 03:51:38

0.076806