class JekyllCommonMarkCustomRenderer
A customized version of CommonMarker::HtmlRenderer which:
-
outputs Kramdown-style header IDs.
-
performs syntax highlighting in code blocks.
Public Instance Methods
code_block(node)
click to toggle source
# File lib/jekyll-commonmark-ghpages.rb, line 27 def code_block(node) lang = if node.fence_info && !node.fence_info.empty? node.fence_info.split(/[\s,]/)[0] end content = node.string_content if lang && lexer = ::Rouge::Lexer.find_fancy(lang, content) block do out("<div class=\"language-#{lang} highlighter-rouge\">") out(::Rouge::Formatters::HTMLLegacy.new(css_class: 'highlight').format(lexer.lex(content))) out("</div>") end return end if option_enabled?(:GITHUB_PRE_LANG) out("<pre#{sourcepos(node)}") out(' lang="', lang, '"') if lang out('><code>') else out("<pre#{sourcepos(node)}><code") out(' class="language-', lang, '">') if lang out('>') end out(escape_html(content)) out('</code></pre>') end
header(node)
click to toggle source
# File lib/jekyll-commonmark-ghpages.rb, line 13 def header(node) block do old_stream = @stream @stream = StringIO.new(String.new.force_encoding("utf-8")) out(:children) content = @stream.string @stream = old_stream id = generate_id(content) out("<h", node.header_level, "#{sourcepos(node)} id=\"#{id}\">", content, "</h", node.header_level, ">") end end
Private Instance Methods
basic_generate_id(str)
click to toggle source
# File lib/jekyll-commonmark-ghpages.rb, line 70 def basic_generate_id(str) gen_id = str.gsub(/^[^a-zA-Z]+/, "") gen_id.tr!("^a-zA-Z0-9 -", "") gen_id.tr!(" ", "-") gen_id.downcase! gen_id end
generate_id(str)
click to toggle source
# File lib/jekyll-commonmark-ghpages.rb, line 58 def generate_id(str) gen_id = basic_generate_id(str) gen_id = "section" if gen_id.empty? @used_ids ||= {} if @used_ids.key?(gen_id) gen_id += "-" + (@used_ids[gen_id] += 1).to_s else @used_ids[gen_id] = 0 end gen_id end