A Duo is a convenient way to use CodeRay. You just create a Duo, giving it a lang (language of the input code) and a format (desired output format), and call #highlight with the code.
Duo makes it easy to re-use both scanner and encoder for a repetitive task. It also provides a very easy interface syntax:
require 'coderay' CodeRay::Duo[:python, :div].highlight 'import this'
Until you want to do uncommon things with CodeRay, I recommend to use this method, since it takes care of everything.
To allow calls like Duo[:ruby, :html].highlight.
Create a new Duo, holding a lang and a format to highlight code.
simple:
CodeRay::Duo[:ruby, :html].highlight 'bla 42'
with options:
CodeRay::Duo[:ruby, :html, :hint => :debug].highlight '????::??'
alternative syntax without options:
CodeRay::Duo[:ruby => :statistic].encode 'class << self; end'
alternative syntax with options:
CodeRay::Duo[{ :ruby => :statistic }, :do => :something].encode 'abc'
The options are forwarded to scanner and encoder (see CodeRay.get_scanner_options).
# File lib/coderay/duo.rb, line 37 def initialize lang = nil, format = nil, options = {} if format.nil? && lang.is_a?(Hash) && lang.size == 1 @lang = lang.keys.first @format = lang[@lang] else @lang = lang @format = format end @options = options end
Allows to use Duo like a proc object:
CodeRay::Duo[:python => :yaml].call(code)
or, in Ruby 1.9 and later:
CodeRay::Duo[:python => :yaml].(code)
Tokenize and highlight the code using scanner
and
encoder
.
# File lib/coderay/duo.rb, line 64 def encode code, options = {} options = @options.merge options encoder.encode(code, @lang, options) end
The encoder of the duo. Only created once.
# File lib/coderay/duo.rb, line 59 def encoder @encoder ||= CodeRay.encoder @format, @options end
The scanner of the duo. Only created once.
# File lib/coderay/duo.rb, line 54 def scanner @scanner ||= CodeRay.scanner @lang, CodeRay.get_scanner_options(@options) end