Class: CodeRay::Encoders::Encoder
- Inherits:
-
Object
- Object
- CodeRay::Encoders::Encoder
- Extended by:
- Plugin
- Defined in:
- lib/coderay/encoder.rb
Overview
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.
Direct Known Subclasses
Count, Debug, Filter, HTML, JSON, Null, Statistic, Terminal, Text, XML, YAML
Constant Summary collapse
- DEFAULT_OPTIONS =
Subclasses are to store their default options in this constant.
{ }
Instance Attribute Summary collapse
-
#options ⇒ Object
The options you gave the Encoder at creating.
-
#scanner ⇒ Object
The options you gave the Encoder at creating.
Attributes included from Plugin
Class Method Summary collapse
-
.const_missing(sym) ⇒ Object
If FILE_EXTENSION isn’t defined, this method returns the downcase class name instead.
-
.file_extension ⇒ Object
The default file extension for output file of this encoder class.
Instance Method Summary collapse
- #<<(token) ⇒ Object
-
#begin_group(kind) ⇒ Object
Starts a token group with the given
kind
. -
#begin_line(kind) ⇒ Object
Starts a new line token group with the given
kind
. -
#encode(code, lang, options = {}) ⇒ Object
(also: #highlight)
Encode the given
code
using the Scanner forlang
. -
#encode_tokens(tokens, options = {}) ⇒ Object
Encode a Tokens object.
-
#end_group(kind) ⇒ Object
Ends a token group with the given
kind
. -
#end_line(kind) ⇒ Object
Ends a new line token group with the given
kind
. -
#file_extension ⇒ Object
The default file extension for this encoder.
-
#initialize(options = {}) ⇒ Encoder
constructor
Creates a new Encoder.
-
#text_token(text, kind) ⇒ Object
Called for each text token ([text, kind]), where text is a String.
-
#token(content, kind) ⇒ Object
Called with
content
andkind
of the currently scanned token.
Methods included from Plugin
aliases, plugin_host, register_for, title
Constructor Details
#initialize(options = {}) ⇒ Encoder
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 alang
-
encode_tokens expects a
tokens
object instead
Each method has an optional options
parameter. These are added to the options you passed at creation.
66 67 68 69 |
# File 'lib/coderay/encoder.rb', line 66 def initialize = {} @options = self.class::DEFAULT_OPTIONS.merge @@CODERAY_TOKEN_INTERFACE_DEPRECATION_WARNING_GIVEN = false end |
Instance Attribute Details
#options ⇒ Object
The options you gave the Encoder at creating.
54 55 56 |
# File 'lib/coderay/encoder.rb', line 54 def @options end |
#scanner ⇒ Object
The options you gave the Encoder at creating.
54 55 56 |
# File 'lib/coderay/encoder.rb', line 54 def scanner @scanner end |
Class Method Details
.const_missing(sym) ⇒ Object
If FILE_EXTENSION isn’t defined, this method returns the downcase class name instead.
35 36 37 38 39 40 41 |
# 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 ⇒ Object
The default file extension for output file of this encoder class.
44 45 46 |
# File 'lib/coderay/encoder.rb', line 44 def file_extension self::FILE_EXTENSION end |
Instance Method Details
#<<(token) ⇒ Object
98 99 100 101 102 103 104 |
# 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) ⇒ Object
Starts a token group with the given kind
.
134 135 |
# File 'lib/coderay/encoder.rb', line 134 def begin_group kind end |
#begin_line(kind) ⇒ Object
Starts a new line token group with the given kind
.
142 143 |
# File 'lib/coderay/encoder.rb', line 142 def begin_line kind end |
#encode(code, lang, options = {}) ⇒ Object Also known as: highlight
Encode the given code
using the Scanner for lang
.
81 82 83 84 85 86 87 |
# File 'lib/coderay/encoder.rb', line 81 def encode code, lang, = {} = @options.merge @scanner = Scanners[lang].new code, CodeRay.().update(:tokens => self) setup @scanner.tokenize finish end |
#encode_tokens(tokens, options = {}) ⇒ Object
Encode a Tokens object.
72 73 74 75 76 77 78 |
# File 'lib/coderay/encoder.rb', line 72 def encode_tokens tokens, = {} = @options.merge @scanner = tokens.scanner if tokens.respond_to? :scanner setup compile tokens, finish end |
#end_group(kind) ⇒ Object
Ends a token group with the given kind
.
138 139 |
# File 'lib/coderay/encoder.rb', line 138 def end_group kind end |
#end_line(kind) ⇒ Object
Ends a new line token group with the given kind
.
146 147 |
# File 'lib/coderay/encoder.rb', line 146 def end_line kind end |
#file_extension ⇒ Object
The default file extension for this encoder.
94 95 96 |
# File 'lib/coderay/encoder.rb', line 94 def file_extension self.class.file_extension end |
#text_token(text, kind) ⇒ Object
Called for each text token ([text, kind]), where text is a String.
129 130 131 |
# File 'lib/coderay/encoder.rb', line 129 def text_token text, kind @out << text end |
#token(content, kind) ⇒ Object
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
.
111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
# 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 |