ruby なアプリケーションからコードを highlighting したい時に今までは pygments を spawn する pygments.rb というのを使っていたのだけど、 rouge という pure ruby で同じ html を生成する gem があるということを知ったので tDiary 用の highlighting を置き換えてみた
https://github.com/tdiary/tdiary-style-gfm/pull/13
code が fenced code block, lang が syntax highlighting の対象言語の場合は以下のような感じで html に変換できる。
formatter = Rouge::Formatters::HTML.new(css_class: 'highlight')
lexer = Rouge::Lexers.const_get(lang.capitalize.to_sym).new
formatter.format(lexer.lex(code))
css は pygments.rb のそれと同じなので特に変えることは無くそのまま。スタイル側で hook を呼べたら勝手に追加するようにするかもしれない。
ちょっと遅れてぶらっと参加。淡々と Ruby や tDiary の pull request をマージしたり、リリースしたりしていた。最近、tDiary やるぞ!という気持ちが結構復活してきているので色々やろう。いらんコードバンバン消してまずはダイエットだなあ。