Module: Dispersion

Defined in:
lib/dispersion.rb,
lib/dispersion/tokens.rb,
lib/dispersion/version.rb,
lib/dispersion/annotator.rb

Defined Under Namespace

Modules: Tokens Classes: Annotator

Constant Summary collapse

THEME =
{
  Tokens::COMMENT => "\e[90m",
  Tokens::KEYWORD => "\e[31m",
  Tokens::CONSTANT => "\e[34m",
  Tokens::FUNCTION => "\e[33m",
  Tokens::PUNCTUATION => "\e[37m",
  Tokens::LOCAL_VARIABLE => "\e[32m",
  Tokens::INSTANCE_VARIABLE => "\e[35m",
  Tokens::OPERATOR => "\e[33m",
  Tokens::STRING => "\e[32m",
  Tokens::SYMBOL => "\e[36m",
  Tokens::INTEGER => "\e[33m",
  Tokens::FLOAT => "\e[33m",
}.freeze
VERSION =
"0.2.0"

Class Method Summary collapse

Class Method Details

.annotate(code) ⇒ Object



24
25
26
# File 'lib/dispersion.rb', line 24

def self.annotate(code)
  Annotator.call(code)
end

.ansi(code) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/dispersion.rb', line 28

def self.ansi(code)
  code.dup.tap do |buffer|
    offset = 0

    for start_offset, end_offset, token in annotate(code)
      start = THEME.fetch(token)

      buffer.bytesplice(start_offset + offset, 0, start)
      offset += start.bytesize

      buffer.bytesplice(end_offset + offset, 0, "\e[0m")
      offset += 4
    end
  end
end