Class: CodeRay::Encoders::Encoder
- Inherits:
-
Object
- Object
- CodeRay::Encoders::Encoder
- Extended by:
- Plugin
- Defined in:
- lib/coderay/encoders/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.
55 56 57 58 |
# File 'lib/coderay/encoders/encoder.rb', line 55 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.
43 44 45 |
# File 'lib/coderay/encoders/encoder.rb', line 43 def @options end |
#scanner ⇒ Object
The options you gave the Encoder at creating.
43 44 45 |
# File 'lib/coderay/encoders/encoder.rb', line 43 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.
24 25 26 27 28 29 30 |
# File 'lib/coderay/encoders/encoder.rb', line 24 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.
33 34 35 |
# File 'lib/coderay/encoders/encoder.rb', line 33 def file_extension self::FILE_EXTENSION end |
Instance Method Details
#<<(token) ⇒ Object
87 88 89 90 91 92 93 |
# File 'lib/coderay/encoders/encoder.rb', line 87 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
.
123 124 |
# File 'lib/coderay/encoders/encoder.rb', line 123 def begin_group kind end |
#begin_line(kind) ⇒ Object
Starts a new line token group with the given kind
.
131 132 |
# File 'lib/coderay/encoders/encoder.rb', line 131 def begin_line kind end |
#encode(code, lang, options = {}) ⇒ Object Also known as: highlight
Encode the given code
using the Scanner for lang
.
70 71 72 73 74 75 76 |
# File 'lib/coderay/encoders/encoder.rb', line 70 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.
61 62 63 64 65 66 67 |
# File 'lib/coderay/encoders/encoder.rb', line 61 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
.
127 128 |
# File 'lib/coderay/encoders/encoder.rb', line 127 def end_group kind end |
#end_line(kind) ⇒ Object
Ends a new line token group with the given kind
.
135 136 |
# File 'lib/coderay/encoders/encoder.rb', line 135 def end_line kind end |
#file_extension ⇒ Object
The default file extension for this encoder.
83 84 85 |
# File 'lib/coderay/encoders/encoder.rb', line 83 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.
118 119 120 |
# File 'lib/coderay/encoders/encoder.rb', line 118 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
.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 |
# File 'lib/coderay/encoders/encoder.rb', line 100 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 |