Class: CodeRay::Encoders::Terminal

Inherits:
Encoder
  • Object
show all
Defined in:
lib/coderay/encoders/terminal.rb

Overview

Outputs code highlighted for a color terminal.

Note: This encoder is in beta. It currently doesn’t use the Styles.

Alias: term

Authors & License

By Rob Aldred (robaldred.co.uk)

Based on idea by Nathan Weizenbaum (nex-3.com)

MIT License (www.opensource.org/licenses/mit-license.php)

Constant Summary collapse

TOKEN_COLORS =
{
  :debug => "\e[1;37;44m",
  
  :annotation => "\e[34m",
  :attribute_name => "\e[35m",
  :attribute_value => "\e[31m",
  :binary => {
    :self => "\e[31m",
    :char => "\e[1;31m",
    :delimiter => "\e[1;31m",
  },
  :char => {
    :self => "\e[35m",
    :delimiter => "\e[1;35m"
  },
  :class => "\e[1;35;4m",
  :class_variable => "\e[36m",
  :color => "\e[32m",
  :comment => {
    :self => "\e[1;30m",
    :char => "\e[37m",
    :delimiter => "\e[37m",
  },
  :constant => "\e[1;34;4m",
  :decorator => "\e[35m",
  :definition => "\e[1;33m",
  :directive => "\e[33m",
  :docstring => "\e[31m",
  :doctype => "\e[1;34m",
  :done => "\e[1;30;2m",
  :entity => "\e[31m",
  :error => "\e[1;37;41m",
  :exception => "\e[1;31m",
  :float => "\e[1;35m",
  :function => "\e[1;34m",
  :global_variable => "\e[1;32m",
  :hex => "\e[1;36m",
  :id => "\e[1;34m",
  :include => "\e[31m",
  :integer => "\e[1;34m",
  :imaginary => "\e[1;34m",
  :important => "\e[1;31m",
  :key => {
    :self => "\e[35m",
    :char => "\e[1;35m",
    :delimiter => "\e[1;35m",
  },
  :keyword => "\e[32m",
  :label => "\e[1;33m",
  :local_variable => "\e[33m",
  :namespace => "\e[1;35m",
  :octal => "\e[1;34m",
  :predefined => "\e[36m",
  :predefined_constant => "\e[1;36m",
  :predefined_type => "\e[1;32m",
  :preprocessor => "\e[1;36m",
  :pseudo_class => "\e[1;34m",
  :regexp => {
    :self => "\e[35m",
    :delimiter => "\e[1;35m",
    :modifier => "\e[35m",
    :char => "\e[1;35m",
  },
  :reserved => "\e[32m",
  :shell => {
    :self => "\e[33m",
    :char => "\e[1;33m",
    :delimiter => "\e[1;33m",
    :escape => "\e[1;33m",
  },
  :string => {
    :self => "\e[31m",
    :modifier => "\e[1;31m",
    :char => "\e[1;35m",
    :delimiter => "\e[1;31m",
    :escape => "\e[1;31m",
  },
  :symbol => {
    :self => "\e[33m",
    :delimiter => "\e[1;33m",
  },
  :tag => "\e[32m",
  :type => "\e[1;34m",
  :value => "\e[36m",
  :variable => "\e[34m",
  
  :insert => {
    :self => "\e[42m",
    :insert => "\e[1;32;42m",
    :eyecatcher => "\e[102m",
  },
  :delete => {
    :self => "\e[41m",
    :delete => "\e[1;31;41m",
    :eyecatcher => "\e[101m",
  },
  :change => {
    :self => "\e[44m",
    :change => "\e[37;44m",
  },
  :head => {
    :self => "\e[45m",
    :filename => "\e[37;45m"
  },
}

Constants inherited from Encoder

Encoder::DEFAULT_OPTIONS

Instance Attribute Summary

Attributes inherited from Encoder

#options, #scanner

Attributes included from Plugin

#plugin_id

Instance Method Summary collapse

Methods inherited from Encoder

#<<, const_missing, #encode, #encode_tokens, file_extension, #file_extension, #initialize, #token

Methods included from Plugin

#aliases, #plugin_host, #register_for, #title

Constructor Details

This class inherits a constructor from CodeRay::Encoders::Encoder

Instance Method Details

#begin_group(kind) ⇒ Object Also known as: begin_line



156
157
158
159
# File 'lib/coderay/encoders/terminal.rb', line 156

def begin_group kind
  @opened << kind
  @out << open_token(kind)
end

#end_group(kind) ⇒ Object



162
163
164
165
166
167
168
169
170
# File 'lib/coderay/encoders/terminal.rb', line 162

def end_group kind
  if @opened.pop
    @color_scopes.pop
    @out << "\e[0m"
    if outer_color = @color_scopes.last[:self]
      @out << outer_color
    end
  end
end

#end_line(kind) ⇒ Object



172
173
174
175
# File 'lib/coderay/encoders/terminal.rb', line 172

def end_line kind
  @out << (@line_filler ||= "\t" * 100)
  end_group kind
end

#text_token(text, kind) ⇒ Object



141
142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'lib/coderay/encoders/terminal.rb', line 141

def text_token text, kind
  if color = @color_scopes.last[kind]
    color = color[:self] if color.is_a? Hash
    
    @out << color
    @out << (text.index("\n") ? text.gsub("\n", "\e[0m\n" + color) : text)
    @out << "\e[0m"
    if outer_color = @color_scopes.last[:self]
      @out << outer_color
    end
  else
    @out << text
  end
end