compass/doc-src/lib/data_sources/syntax_highter.rb
2010-11-15 14:41:45 -08:00

38 lines
915 B
Ruby

require 'nokogiri'
require 'coderay'
class SyntaxHighlighterFilter < Nanoc3::Filter
identifier :highlight
def highlight(code, type)
hl_map = Hash.new(:coderay)
hl_map[:sass] = :pygmentize
send(hl_map[type], code, type)
end
def pygmentize(code, type)
# -O linenos=table
IO.popen("pygmentize -l #{type} -f html -O encoding=utf-8", "r+") do |io|
io.write(code)
io.close_write
return io.read
end
end
def coderay(code, type)
# :line_numbers => :table,
type = :css if type == :scss
CodeRay.scan(code, type).div(:css => :class)
end
def run(content, params={})
doc = Nokogiri::HTML.fragment(content)
[:css, :sass, :scss].each do |format|
doc.css("pre.source-code.#{format}, code.#{format}").each do |el|
el.set_attribute("class", "brush: #{format} "+el.attribute("class").value)
end
end
doc.to_s
end
end