Sha256: 6b516275f3d2ce1206985873f64888cc72d5674841a78cbb440ba68daf852b38

Contents?: true

Size: 1.54 KB

Versions: 3

Compression:

Stored size: 1.54 KB

Contents

# -*- encoding: utf-8 -*-

module Webgen::Tag

  # Provides syntax highlighting via the +coderay+ library.
  class Coderay

    include Webgen::Tag::Base
    include Webgen::WebsiteAccess

    # Highlight the body of the block.
    def call(tag, body, context)
      require 'coderay'

      options = {}
      if param('tag.coderay.css').to_s == 'other'
        options[:css] = :class
      elsif param('tag.coderay.css').to_s == 'class'
        options[:css] = :class
        default_css_style_node = context.dest_node.resolve('/stylesheets/coderay-default.css')
        ((context.persistent[:cp_head] ||= {})[:css_file] ||= []) << context.dest_node.route_to(default_css_style_node)
        context.dest_node.node_info[:used_meta_info_nodes] << default_css_style_node.alcn
      else
        options[:css] = :style
      end
      options.merge!(:wrap => param('tag.coderay.wrap').to_sym,
                     :line_numbers => (param('tag.coderay.line_numbers') ? :inline : nil),
                     :line_number_start => param('tag.coderay.line_number_start'),
                     :tab_width => param('tag.coderay.tab_width'),
                     :bold_every => param('tag.coderay.bold_every'))

      if param('tag.coderay.process_body')
        body = website.blackboard.invoke(:content_processor, 'tags').call(context.clone(:content => body)).content
      end
      CodeRay.scan(body, param('tag.coderay.lang').to_sym).html(options)
    rescue LoadError
      raise Webgen::LoadError.new('coderay', self.class.name, context.dest_node.alcn, 'coderay')
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
webgen-0.5.11 lib/webgen/tag/coderay.rb
webgen-0.5.10 lib/webgen/tag/coderay.rb
webgen-0.5.9 lib/webgen/tag/coderay.rb