Class: Jekyll::Tags::HighlightBlock
- Inherits:
-
Liquid::Block
- Object
- Liquid::Block
- Jekyll::Tags::HighlightBlock
- Includes:
- Liquid::StandardFilters
- Defined in:
- lib/jekyll/tags/highlight.rb
Constant Summary collapse
- 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:
-
name
-
name=value
-
/^([a-zA-Z0-9.+#-]+)((\s+\w+(=\w+)?)*)$/
Instance Method Summary collapse
- #add_code_tags(code, lang) ⇒ Object
-
#initialize(tag_name, markup, tokens) ⇒ HighlightBlock
constructor
A new instance of HighlightBlock.
- #render(context) ⇒ Object
- #render_codehighlighter(context, code) ⇒ Object
- #render_pygments(context, code) ⇒ Object
Constructor Details
#initialize(tag_name, markup, tokens) ⇒ HighlightBlock
Returns a new instance of HighlightBlock.
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/jekyll/tags/highlight.rb', line 14 def initialize(tag_name, markup, tokens) super if markup.strip =~ SYNTAX @lang = $1.downcase @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 |
Instance Method Details
#add_code_tags(code, lang) ⇒ Object
75 76 77 78 79 |
# File 'lib/jekyll/tags/highlight.rb', line 75 def (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) ⇒ Object
43 44 45 46 47 48 49 |
# File 'lib/jekyll/tags/highlight.rb', line 43 def render(context) if context.registers[:site].pygments render_pygments(context, super) else render_codehighlighter(context, super) end end |
#render_codehighlighter(context, code) ⇒ Object
66 67 68 69 70 71 72 73 |
# File 'lib/jekyll/tags/highlight.rb', line 66 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) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/jekyll/tags/highlight.rb', line 51 def render_pygments(context, code) require 'pygments' @options[:encoding] = 'utf-8' output = ( 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 |