class Khaleesi::Generator::HTML
intercept the Redcarpet processing, do the syntax highlighter with Rouge or Pygments.
Public Class Methods
new(opts={})
click to toggle source
Calls superclass method
# File lib/khaleesi/generator.rb, line 541 def initialize(opts={}) opts.store(:with_toc_data, true) # opts.store(:prettify, true) opts.store(:xhtml, true) super end
Public Instance Methods
block_code(code, language)
click to toggle source
# File lib/khaleesi/generator.rb, line 465 def block_code(code, language) language = 'text' if language.to_s.strip.empty? css_class = $css_class + ' ' + language return pygments_colorize(css_class, code, language) if $use_pygments rouge_colorize(css_class, code, language) end
header(title, level)
click to toggle source
intercept header generation, decide which need to output id by settings.
# File lib/khaleesi/generator.rb, line 514 def header(title, level) is_unique = $toc_selection.include?('unique') "\n<h%s%s>%s</h%s>\n" % [ level, if $toc_selection.include?(level.to_s) " id=\"#{is_unique ? unique_id : header_anchor(title)}\"" else '' end, title, level] end
header_anchor(text)
click to toggle source
This method origin from redcarpet-3.1.2/ext/redcarpet/html.c:268.
# File lib/khaleesi/generator.rb, line 525 def header_anchor(text) # We must unescape HTML entities because # Redcarpet escape them before. text = CGI.unescapeHTML(text) # delete markup entities. text = text.gsub(/<\/?[^>]*>/, '') Generator.format_as_legal_link(text) text.length < 3 ? unique_id : text end
pygments_colorize(css_class, code, language)
click to toggle source
# File lib/khaleesi/generator.rb, line 472 def pygments_colorize(css_class, code, language) opts = {:cssclass => css_class, :linenos => $line_numbers} begin colored_html = Pygments.highlight(code, :lexer => language, :options => opts) rescue MentosError colored_html = Pygments.highlight(code, :lexer => 'text', :options => opts) end return colored_html unless $line_numbers # we'll have the html structure consistent whatever line numbers present or not. colored_html.sub!(" class=\"#{css_class}table\"", '') colored_html.sub!('<div class="linenodiv">', '') colored_html.gsub!('</div>', '') colored_html.sub!(' class="code"', '') root_elements = "<div class=\"#{css_class}\">" colored_html.sub!(root_elements, '') colored_html.prepend(root_elements).concat('</div>') colored_html end
rouge_colorize(css_class, code, language)
click to toggle source
# File lib/khaleesi/generator.rb, line 492 def rouge_colorize(css_class, code, language) formatter = Rouge::Formatters::HTML.new(:css_class => css_class, :line_numbers => $line_numbers) lexer = Rouge::Lexer.find_fancy(language, code) || Rouge::Lexers::PlainText colored_html = formatter.format(lexer.lex(code)) if $line_numbers colored_html.sub!('class="gutter gl" style="text-align: right"', 'class="linenos"') colored_html.sub!(' style="border-spacing: 0"', '') colored_html.sub!(' class="lineno"', '') colored_html.sub!(' class="code"', '') colored_html.sub!('<tbody>', '') colored_html.sub!('</tbody>', '') else colored_html.sub!("<code class=\"#{css_class}\">", '') colored_html.sub!('</code>', '') colored_html.prepend("<div class=\"#{css_class}\">").concat('</div>') end colored_html end
unique_id()
click to toggle source
# File lib/khaleesi/generator.rb, line 537 def unique_id "header-#{$toc_index = $toc_index + 1}" end