Class: Tags::HighlightBlock
- Inherits:
-
Liquid::Block
- Object
- Liquid::Block
- Tags::HighlightBlock
- Includes:
- Liquid::StandardFilters
- Defined in:
- lib/blastwolf/pygments.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.
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 42 43 |
# File 'lib/blastwolf/pygments.rb', line 16 def initialize(tag_name, markup, tokens) super if markup.strip =~ SYNTAX @lang = $1 @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
77 78 79 80 81 |
# File 'lib/blastwolf/pygments.rb', line 77 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
45 46 47 48 49 50 51 |
# File 'lib/blastwolf/pygments.rb', line 45 def render(context) if true render_pygments(context, super) else render_codehighlighter(context, super) end end |
#render_codehighlighter(context, code) ⇒ Object
68 69 70 71 72 73 74 75 |
# File 'lib/blastwolf/pygments.rb', line 68 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
53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# File 'lib/blastwolf/pygments.rb', line 53 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 |