Methods

Class/Module Index [+]

Quicksearch

Nanoc3::Filters::ColorizeSyntax

Constants

DEFAULT_COLORIZER

The default colorizer to use for a language if the colorizer for that language is not overridden.

KNOWN_COLORIZERS

Public Instance Methods

run(content, params={}) click to toggle source

Syntax-highlights code blocks in the given content. Code blocks should be enclosed in `pre` elements that contain a `code` element. The code element should have a class starting with `language-` and followed by the programming language, as specified by HTML5.

Options for individual colorizers will be taken from the {run} options’ value for the given colorizer. For example, if the filter is invoked with a `:coderay => coderay_options_hash` option, the `coderay_options_hash` hash will be passed to the CodeRay colorizer.

Currently, only the `:coderay` and `:pygmentize` colorizers are implemented. Additional colorizer implementations are welcome!

@example Content that will be highlighted

<pre><code class="language-ruby">
def foo
  "asdf"
end
</code></pre>

@example Invoking the filter with custom parameters

filter :colorize_syntax,
       :colorizers => { :ruby => :coderay },
       :coderay    => { :line_numbers => :list }

@param [String] content The content to filter

@option params [Hash] :colorizers (DEFAULT_COLORIZER) A hash containing

a mapping of programming languages (symbols, not strings) onto
colorizers (symbols).

@return [String] The filtered content

# File lib/nanoc3/filters/colorize_syntax.rb, line 43
def run(content, params={})
  require 'nokogiri'

  # Take colorizers from parameters
  @colorizers = Hash.new(DEFAULT_COLORIZER)
  (params[:colorizers] || {}).each_pair do |language, colorizer|
    @colorizers[language] = colorizer
  end

  # Colorize
  doc = Nokogiri::HTML.fragment(content)
  doc.css('pre > code[class*="language-"]').each do |element|
    # Get language
    match = element['class'].match(/(^| )language-([^ ]+)/)
    next if match.nil?
    language = match[2]

    # Highlight
    highlighted_code = highlight(element.inner_text, language, params)
    element.inner_html = highlighted_code
  end

  doc.to_s
end

[Validate]

Generated with the Darkfish Rdoc Generator 2.