Encoder

The Encoder base class. Together with Scanner and Tokens, it forms the highlighting triad.

Encoder instances take a Tokens object and do something with it.

The most common Encoder is surely the HTML encoder (CodeRay::Encoders::HTML). It highlights the code in a colorful html page. If you want the highlighted code in a div or a span instead, use its subclasses Div and Span.

Methods
Constants
DEFAULT_OPTIONS = { }
  Subclasses are to store their default options in this constant.
Attributes
[RW] options The options you gave the Encoder at creating.
[RW] scanner The options you gave the Encoder at creating.
Public Class methods
const_missing(sym)

If FILE_EXTENSION isn’t defined, this method returns the downcase class name instead.

# File lib/coderay/encoder.rb, line 35
        def const_missing sym
          if sym == :FILE_EXTENSION
            (defined?(@plugin_id) && @plugin_id || name[/\w+$/].downcase).to_s
          else
            super
          end
        end
file_extension()

The default file extension for output file of this encoder class.

# File lib/coderay/encoder.rb, line 44
        def file_extension
          self::FILE_EXTENSION
        end
new(options = {})

Creates a new Encoder. options is saved and used for all encode operations, as long as you don’t overwrite it there by passing additional options.

Encoder objects provide three encode methods:

  • encode simply takes a code string and a lang
  • encode_tokens expects a tokens object instead

Each method has an optional options parameter. These are added to the options you passed at creation.

# File lib/coderay/encoder.rb, line 66
      def initialize options = {}
        @options = self.class::DEFAULT_OPTIONS.merge options
        @@CODERAY_TOKEN_INTERFACE_DEPRECATION_WARNING_GIVEN = false
      end
Public Instance methods
<<(token)
# File lib/coderay/encoder.rb, line 98
      def << token
        unless @@CODERAY_TOKEN_INTERFACE_DEPRECATION_WARNING_GIVEN
          warn 'Using old Tokens#<< interface.'
          @@CODERAY_TOKEN_INTERFACE_DEPRECATION_WARNING_GIVEN = true
        end
        self.token(*token)
      end
begin_group(kind)

Starts a token group with the given kind.

# File lib/coderay/encoder.rb, line 134
      def begin_group kind
      end
begin_line(kind)

Starts a new line token group with the given kind.

# File lib/coderay/encoder.rb, line 142
      def begin_line kind
      end
encode(code, lang, options = {})

Encode the given code using the Scanner for lang.

--- This method is also aliased as highlight ---
# File lib/coderay/encoder.rb, line 81
      def encode code, lang, options = {}
        options = @options.merge options
        @scanner = Scanners[lang].new code, CodeRay.get_scanner_options(options).update(:tokens => self)
        setup options
        @scanner.tokenize
        finish options
      end
encode_tokens(tokens, options = {})

Encode a Tokens object.

# File lib/coderay/encoder.rb, line 72
      def encode_tokens tokens, options = {}
        options = @options.merge options
        @scanner = tokens.scanner if tokens.respond_to? :scanner
        setup options
        compile tokens, options
        finish options
      end
end_group(kind)

Ends a token group with the given kind.

# File lib/coderay/encoder.rb, line 138
      def end_group kind
      end
end_line(kind)

Ends a new line token group with the given kind.

# File lib/coderay/encoder.rb, line 146
      def end_line kind
      end
file_extension()

The default file extension for this encoder.

# File lib/coderay/encoder.rb, line 94
      def file_extension
        self.class.file_extension
      end
highlight(code, lang, options = {})

Alias for encode

text_token(text, kind)

Called for each text token ([text, kind]), where text is a String.

# File lib/coderay/encoder.rb, line 129
      def text_token text, kind
        @out << text
      end
token(content, kind)

Called with content and kind of the currently scanned token. For simple scanners, it’s enougth to implement this method.

By default, it calls text_token, begin_group, end_group, begin_line, or end_line, depending on the content.

# File lib/coderay/encoder.rb, line 111
      def token content, kind
        case content
        when String
          text_token content, kind
        when :begin_group
          begin_group kind
        when :end_group
          end_group kind
        when :begin_line
          begin_line kind
        when :end_line
          end_line kind
        else
          raise ArgumentError, 'Unknown token content type: %p, kind = %p' % [content, kind]
        end
      end
tokens(tokens, options = {})

Alias for compile