class Tags::HighlightBlock

Constants

SYNTAX

The regular expression syntax checker. Start with the language specifier. Follow that by zero or more space separated options that take one of two forms:

  1. name

  2. name=value

Public Class Methods

new(tag_name, markup, tokens) click to toggle source
Calls superclass method
# File lib/blastwolf/pygments.rb, line 16
    def initialize(tag_name, markup, tokens)
      super
      if markup.strip =~ SYNTAX
        @lang = $1
        @options = {}
        if defined?($2) && $2 != ''
          $2.split.each do |opt|
            key, value = opt.split('=')
            if value.nil?
              if key == 'linenos'
                value = 'inline'
              else
                value = true
              end
            end
            @options[key] = value
          end
        end
      else
        raise SyntaxError.new <<-eos
Syntax Error in tag 'highlight' while parsing the following markup:

#{markup}

Valid syntax: highlight <lang> [linenos]
eos
      end
    end

Public Instance Methods

add_code_tags(code, lang) click to toggle source
# File lib/blastwolf/pygments.rb, line 77
def add_code_tags(code, lang)
  # Add nested <code> tags to code blocks
  code = code.sub(/<pre>/,'<pre><code class="' + lang + '">')
  code = code.sub(/<\/pre>/,"</code></pre>")
end
render(context) click to toggle source
Calls superclass method
# File lib/blastwolf/pygments.rb, line 45
def render(context)
  if true
    render_pygments(context, super)
  else
    render_codehighlighter(context, super)
  end
end
render_codehighlighter(context, code) click to toggle source
# File lib/blastwolf/pygments.rb, line 68
    def render_codehighlighter(context, code)
      #The div is required because RDiscount blows ass
      <<-HTML
<div>
  <pre><code class='#{@lang}'>#{h(code).strip}</code></pre>
</div>
      HTML
    end
render_pygments(context, code) click to toggle source
# File lib/blastwolf/pygments.rb, line 53
def render_pygments(context, code)
  require 'pygments'

  @options[:encoding] = 'utf-8'

  output = add_code_tags(
    Pygments.highlight(code, :lexer => @lang, :options => @options),
    @lang
  )

  output = context["pygments_prefix"] + output if context["pygments_prefix"]
  output = output + context["pygments_suffix"] if context["pygments_suffix"]
  output
end