The result of a scan operation is a TokensProxy, but should act like Tokens.

This proxy makes it possible to use the classic CodeRay.scan.encode API while still providing the benefits of direct streaming.

Methods
Attributes
[RW] block
[RW] input
[RW] lang
[RW] options
Public Class methods
new(input, lang, options = {})

Create a new TokensProxy with the arguments of CodeRay.scan.

# File lib/coderay/tokens_proxy.rb, line 12
    def initialize input, lang, options = {}, block = nil
      @input   = input
      @lang    = lang
      @options = options
      @block   = block
    end
Public Instance methods
each(*args, &blk)

Overwrite Struct#each.

# File lib/coderay/tokens_proxy.rb, line 48
    def each *args, &blk
      tokens.each(*args, &blk)
      self
    end
encode(encoder, options = {})

Call CodeRay.encode if encoder is a Symbol; otherwise, convert the receiver to tokens and call encoder.encode_tokens.

# File lib/coderay/tokens_proxy.rb, line 21
    def encode encoder, options = {}
      if encoder.respond_to? :to_sym
        CodeRay.encode(input, lang, encoder, options)
      else
        encoder.encode_tokens tokens, options
      end
    end
method_missing(method, *args, &blk)

Tries to call encode; delegates to tokens otherwise.

# File lib/coderay/tokens_proxy.rb, line 31
    def method_missing method, *args, &blk
      encode method.to_sym, *args
    rescue PluginHost::PluginNotFound
      tokens.send(method, *args, &blk)
    end
scanner()

A (cached) scanner instance to use for the scan task.

# File lib/coderay/tokens_proxy.rb, line 43
    def scanner
      @scanner ||= CodeRay.scanner(lang, options, &block)
    end
tokens()

The (cached) result of the tokenized input; a Tokens instance.

# File lib/coderay/tokens_proxy.rb, line 38
    def tokens
      @tokens ||= scanner.tokenize(input)
    end