Class: Nanoc3::Filters::ColorizeSyntax
- Inherits:
-
Nanoc3::Filter
- Object
- Context
- Nanoc3::Filter
- Nanoc3::Filters::ColorizeSyntax
- Defined in:
- lib/nanoc3/filters/colorize_syntax.rb
Constant Summary
- DEFAULT_COLORIZER =
The default colorizer to use for a language if the colorizer for that language is not overridden.
:coderay- KNOWN_COLORIZERS =
[ :coderay, :dummy, :pygmentize ]
Constants inherited from Nanoc3::Filter
Instance Attribute Summary
Attributes inherited from Nanoc3::Filter
Instance Method Summary (collapse)
-
- (String) run(content, params = {})
Syntax-highlights code blocks in the given content.
Methods inherited from Nanoc3::Filter
#filename, from_binary?, #initialize, #output_filename, to_binary?, type
Methods included from PluginRegistry::PluginMethods
#identifier, #identifiers, #named, #register
Methods inherited from Context
Constructor Details
This class inherits a constructor from Nanoc3::Filter
Instance Method Details
- (String) run(content, params = {})
Syntax-highlights code blocks in the given content. Code blocks should
be enclosed in pre elements that contain a code element. The code
element should have a class starting with language- and followed by
the programming language, as specified by HTML5.
Options for individual colorizers will be taken from the #run
options’ value for the given colorizer. For example, if the filter is
invoked with a :coderay => coderay_options_hash option, the
coderay_options_hash hash will be passed to the CodeRay colorizer.
Currently, only the :coderay and :pygmentize colorizers are
implemented. Additional colorizer implementations are welcome!
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/nanoc3/filters/colorize_syntax.rb', line 49 def run(content, params={}) require 'nokogiri' # Take colorizers from parameters @colorizers = Hash.new(DEFAULT_COLORIZER) (params[:colorizers] || {}).each_pair do |language, colorizer| @colorizers[language] = colorizer end # Colorize doc = Nokogiri::HTML.fragment(content) doc.css('pre > code[class*="language-"]').each do |element| # Get language match = element['class'].match(/(^| )language-([^ ]+)/) next if match.nil? language = match[2] # Highlight highlighted_code = highlight(element.inner_text, language, params) element.inner_html = highlighted_code end doc.to_html(:encoding => 'UTF-8') end |