Class: Khaleesi::Generator::HTML
- Inherits:
-
Redcarpet::Render::HTML
- Object
- Redcarpet::Render::HTML
- Khaleesi::Generator::HTML
- Defined in:
- lib/khaleesi/generator.rb
Overview
intercept the Redcarpet processing, do the syntax highlighter with Rouge or Pygments.
Instance Method Summary collapse
- #block_code(code, language) ⇒ Object
-
#header(title, level) ⇒ Object
intercept header generation, decide which need to output id by settings.
-
#header_anchor(text) ⇒ Object
This method origin from redcarpet-3.1.2/ext/redcarpet/html.c:268.
-
#initialize(opts = {}) ⇒ HTML
constructor
A new instance of HTML.
- #pygments_colorize(css_class, code, language) ⇒ Object
- #rouge_colorize(css_class, code, language) ⇒ Object
- #unique_id ⇒ Object
Constructor Details
#initialize(opts = {}) ⇒ HTML
Returns a new instance of HTML.
541 542 543 544 545 546 |
# 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 |
Instance Method Details
#block_code(code, language) ⇒ Object
465 466 467 468 469 470 |
# 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) ⇒ Object
intercept header generation, decide which need to output id by settings.
514 515 516 517 518 519 520 521 522 |
# 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) ⇒ Object
This method origin from redcarpet-3.1.2/ext/redcarpet/html.c:268.
525 526 527 528 529 530 531 532 533 534 535 |
# 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) ⇒ Object
472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 |
# 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) ⇒ Object
492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 |
# 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 ⇒ Object
537 538 539 |
# File 'lib/khaleesi/generator.rb', line 537 def unique_id "header-#{$toc_index = $toc_index + 1}" end |