module Kramdown::Converter::SyntaxHighlighter::Coderay

Uses Coderay to highlight code blocks and code spans.

Constants

AVAILABLE

Highlighting via coderay is available if this constant is true.

Public Class Methods

call(converter, text, lang, type, call_opts) click to toggle source
   # File lib/kramdown/converter/syntax_highlighter/coderay.rb
23 def self.call(converter, text, lang, type, call_opts)
24   return nil unless converter.options[:enable_coderay]
25 
26   if type == :span && lang
27     ::CodeRay.scan(text, lang.to_sym).html(options(converter, :span)).chomp
28   elsif type == :block && (lang || options(converter, :default_lang))
29     lang ||= call_opts[:default_lang] = options(converter, :default_lang)
30     ::CodeRay.scan(text, lang.to_s.gsub(/-/, '_').to_sym).html(options(converter, :block)).chomp << "\n"
31   else
32     nil
33   end
34 rescue
35   converter.warning("There was an error using CodeRay: #{$!.message}")
36   nil
37 end
options(converter, type) click to toggle source
   # File lib/kramdown/converter/syntax_highlighter/coderay.rb
39 def self.options(converter, type)
40   prepare_options(converter)
41   converter.data[:syntax_highlighter_coderay][type]
42 end
prepare_options(converter) click to toggle source
   # File lib/kramdown/converter/syntax_highlighter/coderay.rb
44 def self.prepare_options(converter)
45   return if converter.data.key?(:syntax_highlighter_coderay)
46 
47   cache = converter.data[:syntax_highlighter_coderay] = {}
48 
49   opts = converter.options[:syntax_highlighter_opts].dup
50   span_opts = (opts.delete(:span) || {}).dup
51   block_opts = (opts.delete(:block) || {}).dup
52   [span_opts, block_opts].each do |hash|
53     hash.keys.each do |k|
54       hash[k.kind_of?(String) ? Kramdown::Options.str_to_sym(k) : k] = hash.delete(k)
55     end
56   end
57 
58   cache[:default_lang] = converter.options[:coderay_default_lang] || opts.delete(:default_lang)
59   cache[:span] = {
60     :css => converter.options[:coderay_css]
61   }.update(opts).update(span_opts).update(:wrap => :span)
62   cache[:block] = {
63     :wrap => converter.options[:coderay_wrap],
64     :line_numbers => converter.options[:coderay_line_numbers],
65     :line_number_start => converter.options[:coderay_line_number_start],
66     :tab_width => converter.options[:coderay_tab_width],
67     :bold_every => converter.options[:coderay_bold_every],
68     :css => converter.options[:coderay_css]
69   }.update(opts).update(block_opts)
70 
71   [:css, :wrap, :line_numbers].each do |key|
72     [:block, :span].each do |type|
73       cache[type][key] = cache[type][key].to_sym if cache[type][key].kind_of?(String)
74     end
75   end
76 end