rails マークダウン とシンタックスハイライトの導入仕方
解説
gem 'redcarpet' gem 'coderay'
をインストール
redcarpetはマークダウン 形式の文字列をhtmlに変換する
coderayはシンタックスハイライトで表示するためのものです
ヘルパーを作成する
module ApplicationHelper require "redcarpet" require "coderay" class HTMLwithCoderay < Redcarpet::Render::HTML def block_code(code, language) case language.to_s when 'rb' lang = 'ruby' when 'yml' lang = 'yaml' when 'css' lang = 'css' when 'html' lang = 'html' when '' lang = 'md' else lang = language end CodeRay.scan(code, lang).div end end def markdown(text) html_render = HTMLwithCoderay.new(filter_html: true, hard_wrap: true) options = { autolink: true, space_after_headers: true, no_intra_emphasis: true, fenced_code_blocks: true, tables: true, hard_wrap: true, xhtml: true, lax_html_blocks: true, strikethrough: true } markdown = Redcarpet::Markdown.new(html_render, options) markdown.render(text) end end
block_code
はブロックコードの指定してコードをハイライトにする。
またコード指定の略称を設定できる。
例えばrb
はruby
として略す事ができます。
CodeRay.scan
でハイライトにする。
lang
がnil
だとエラーになるので何もないときはマークダウン の指定にしてます。
markdown
メソッドはマークダウン で書かれて文字列をhtmlに変換する。
HTMLwithCoderay.new
はマークダウン が指定する構文分析のオプションを指定する。
Redcarpet::Markdown.new
はhtmlレンダーの仕方を設定できます。
render
メソッドでマークダウン で書かれて文字列をhtmlに変換します。
余談
block_codeがどの処理あたりで呼ばれてるのかよくわかってない。ブロックというのだからhtmlをrenderするときに勝手に呼ばれてるような感じだと思うのだけれども確証が得られない。英語力が問われる。