Object
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.
Subclasses are to store their default options in this constant.
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
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
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
# 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
Starts a token group with the given kind.
# File lib/coderay/encoder.rb, line 134 def begin_group kind end
Starts a new line token group with the given kind.
# File lib/coderay/encoder.rb, line 142 def begin_line kind end
Encode the given code using the Scanner for lang.
# 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 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
Ends a token group with the given kind.
# File lib/coderay/encoder.rb, line 138 def end_group kind end
Ends a new line token group with the given kind.
# File lib/coderay/encoder.rb, line 146 def end_line kind end
The default file extension for this encoder.
# File lib/coderay/encoder.rb, line 94 def file_extension self.class.file_extension end
You can use highlight instead of encode, if that seems more clear to you.
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
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
Do the encoding.
The already created tokens object must be used; it must be a Tokens object.
# File lib/coderay/encoder.rb, line 179 def compile tokens, options = {} content = nil for item in tokens if item.is_a? Array raise ArgumentError, 'Two-element array tokens are no longer supported.' end if content token content, item content = nil else content = item end end raise 'odd number list for Tokens' if content end
Called with merged options after encoding starts. The return value is the result of encoding, typically @out.
# File lib/coderay/encoder.rb, line 171 def finish options @out end
# File lib/coderay/encoder.rb, line 159 def get_output options options[:out] || '' end
Generated with the Darkfish Rdoc Generator 2.