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 =
{
  :annotation => '35',
  :attribute_name => '33',
  :attribute_value => '31',
  :binary => '1;35',
  :char => {
    :self => '36', :delimiter => '1;34'
  },
  :class => '1;35',
  :class_variable => '36',
  :color => '32',
  :comment => '37',
  :complex => '1;34',
  :constant => ['1;34', '4'],
  :decoration => '35',
  :definition => '1;32',
  :directive => ['32', '4'],
  :doc => '46',
  :doctype => '1;30',
  :doc_string => ['31', '4'],
  :entity => '33',
  :error => ['1;33', '41'],
  :exception => '1;31',
  :float => '1;35',
  :function => '1;34',
  :global_variable => '42',
  :hex => '1;36',
  :include => '33',
  :integer => '1;34',
  :key => '35',
  :label => '1;15',
  :local_variable => '33',
  :octal => '1;35',
  :operator_name => '1;29',
  :predefined_constant => '1;36',
  :predefined_type => '1;30',
  :predefined => ['4', '1;34'],
  :preprocessor => '36',
  :pseudo_class => '1;34',
  :regexp => {
    :self => '31',
    :content => '31',
    :delimiter => '1;29',
    :modifier => '35',
    :function => '1;29'
  },
  :reserved => '1;31',
  :shell => {
    :self => '42',
    :content => '1;29',
    :delimiter => '37',
  },
  :string => {
    :self => '32',
    :modifier => '1;32',
    :escape => '1;36',
    :delimiter => '1;32',
  },
  :symbol => '1;32',
  :tag => '1;34',
  :type => '1;34',
  :value => '36',
  :variable => '1;34',
  
  :insert => '42',
  :delete => '41',
  :change => '44',
  :head => '45'
}

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



126
127
128
129
# File 'lib/coderay/encoders/terminal.rb', line 126

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

#end_group(kind) ⇒ Object



132
133
134
135
136
137
138
139
140
# File 'lib/coderay/encoders/terminal.rb', line 132

def end_group kind
  if @opened.empty?
    # nothing to close
  else
    @opened.pop
    @out << ansi_clear
    @out << open_token(@opened.last)
  end
end

#end_line(kind) ⇒ Object



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

def end_line kind
  if @opened.empty?
    # nothing to close
  else
    @opened.pop
    # whole lines to be highlighted,
    # eg. added/modified/deleted lines in a diff
    @out << "\t" * 100 + ansi_clear
    @out << open_token(@opened.last)
  end
end

#text_token(text, kind) ⇒ Object



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'lib/coderay/encoders/terminal.rb', line 106

def text_token text, kind
  if color = (@subcolors || TOKEN_COLORS)[kind]
    if Hash === color
      if color[:self]
        color = color[:self]
      else
        @out << text
        return
      end
    end
    
    @out << ansi_colorize(color)
    @out << text.gsub("\n", ansi_clear + "\n" + ansi_colorize(color))
    @out << ansi_clear
    @out << ansi_colorize(@subcolors[:self]) if @subcolors && @subcolors[:self]
  else
    @out << text
  end
end