Class: CodeRay::Duo

Inherits:
Object
  • Object
show all
Defined in:
lib/coderay/duo.rb

Overview

Duo

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 Duo#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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(lang = nil, format = nil, options = {}) ⇒ Duo

Create a new Duo, holding a lang and a format to highlight code.

simple:

CodeRay::Duo[:ruby, :page].highlight 'bla 42'

streaming:

CodeRay::Duo[:ruby, :page].highlight 'bar 23', :stream => true

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).



40
41
42
43
44
45
46
47
48
49
# File 'lib/coderay/duo.rb', line 40

def initialize lang = nil, format = nil, options = {}
  if format == nil and lang.is_a? Hash and lang.size == 1
    @lang = lang.keys.first
    @format = lang[@lang]
  else
    @lang = lang
    @format = format
  end
  @options = options
end

Instance Attribute Details

#formatObject

Returns the value of attribute format.



19
20
21
# File 'lib/coderay/duo.rb', line 19

def format
  @format
end

#langObject

Returns the value of attribute lang.



19
20
21
# File 'lib/coderay/duo.rb', line 19

def lang
  @lang
end

#optionsObject

Returns the value of attribute options.



19
20
21
# File 'lib/coderay/duo.rb', line 19

def options
  @options
end

Instance Method Details

#encode(code, options = { :stream => false }) ⇒ Object Also known as: highlight

Tokenize and highlight the code using scanner and encoder.

If the :stream option is set, the Duo will go into streaming mode, saving memory for the cost of time.



70
71
72
73
74
75
76
77
78
79
# File 'lib/coderay/duo.rb', line 70

def encode code, options = { :stream => false }
  stream = options.delete :stream
  options = @options.merge options
  if stream
    encoder.encode_stream(code, @lang, options)
  else
    scanner.code = code
    encoder.encode_tokens(scanner.tokenize, options)
  end
end

#encoderObject

The encoder of the duo. Only created once.



62
63
64
# File 'lib/coderay/duo.rb', line 62

def encoder
  @encoder ||= CodeRay.encoder @format, @options
end

#scannerObject

The scanner of the duo. Only created once.



57
58
59
# File 'lib/coderay/duo.rb', line 57

def scanner
  @scanner ||= CodeRay.scanner @lang, CodeRay.get_scanner_options(@options)
end