diff --git a/lib/html/pipeline/syntax_highlight_filter.rb b/lib/html/pipeline/syntax_highlight_filter.rb index 6660faff..7157202d 100644 --- a/lib/html/pipeline/syntax_highlight_filter.rb +++ b/lib/html/pipeline/syntax_highlight_filter.rb @@ -11,14 +11,19 @@ class Pipeline class SyntaxHighlightFilter < Filter def call doc.search('pre').each do |node| - next unless lang = node['lang'] + default = context[:highlight] && context[:highlight].to_s + next unless lang = node['lang'] || default next unless lexer = Pygments::Lexer[lang] text = node.inner_text html = highlight_with_timeout_handling(lexer, text) next if html.nil? - node.replace(html) + node = node.replace(html).first + klass = node["class"] + klass = [klass, "highlight-#{lang}"].compact.join " " + + node["class"] = klass end doc end @@ -30,4 +35,4 @@ def highlight_with_timeout_handling(lexer, text) end end end -end \ No newline at end of file +end diff --git a/test/html/pipeline/syntax_highlight_filter_test.rb b/test/html/pipeline/syntax_highlight_filter_test.rb new file mode 100644 index 00000000..2dea999f --- /dev/null +++ b/test/html/pipeline/syntax_highlight_filter_test.rb @@ -0,0 +1,22 @@ +require "test_helper" + +SyntaxHighlightFilter = HTML::Pipeline::SyntaxHighlightFilter + +class HTML::Pipeline::SyntaxHighlightFilterTest < Test::Unit::TestCase + def test_highlight_default + filter = SyntaxHighlightFilter.new \ + "
hello
", :highlight => "coffeescript" + + doc = filter.call + assert !doc.css(".highlight-coffeescript").empty? + end + + def test_highlight_default_will_not_override + filter = SyntaxHighlightFilter.new \ + "
hello
", :highlight => "coffeescript" + + doc = filter.call + assert doc.css(".highlight-coffeescript").empty? + assert !doc.css(".highlight-c").empty? + end +end