class Nanoc::Filters::ColorizeSyntax::Colorizers::RougeColorizer

Public Instance Methods

postprocess(_language, element) click to toggle source
# File lib/nanoc/filters/colorize_syntax/colorizers.rb, line 141
def postprocess(_language, element)
  # Removes the double wrapping.
  #
  # Before:
  #
  #   <pre><code class="language-ruby"><pre class="highlight"><code>
  #
  # After:
  #
  #   <pre><code class="language-ruby highlight">

  return if element.name != 'pre'

  code1 = element.xpath('code').first
  return if code1.nil?

  div = code1.xpath('div').first

  # For Rouge 2.x and 1.x, respectively
  pre = (div || code1).xpath('pre').first
  return if pre.nil?

  code2 = pre.xpath('code').first
  return if code2.nil?

  code1.inner_html = code2.inner_html
  code1['class'] = [code1['class'], pre['class']].compact.join(' ')
end
process(code, language, params = {}) click to toggle source
# File lib/nanoc/filters/colorize_syntax/colorizers.rb, line 120
def process(code, language, params = {})
  require 'rouge'

  if params.fetch(:legacy, false)
    formatter_options = {
      css_class: params.fetch(:css_class, 'highlight'),
      inline_theme: params.fetch(:inline_theme, nil),
      line_numbers: params.fetch(:line_numbers, false),
      start_line: params.fetch(:start_line, 1),
      wrap: params.fetch(:wrap, false),
    }
    formatter_cls = Rouge::Formatters::HTMLLegacy
    formatter = formatter_cls.new(formatter_options)
  else
    formatter = params.fetch(:formatter, Rouge::Formatters::HTML.new)
  end

  lexer = Rouge::Lexer.find_fancy(language, code) || Rouge::Lexers::PlainText
  formatter.format(lexer.lex(code))
end