Class: Rembrandt::Highlighter

Inherits:
Object
  • Object
show all
Defined in:
lib/rembrandt/highlighter.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(input_engine = nil) ⇒ Highlighter

Returns a new instance of Highlighter.



12
13
14
# File 'lib/rembrandt/highlighter.rb', line 12

def initialize(input_engine = nil)
  @engine = input_engine.new if input_engine
end

Instance Attribute Details

#storeObject



20
21
22
# File 'lib/rembrandt/highlighter.rb', line 20

def store
  @store ||= autoselect_store
end

Instance Method Details

#autoselect_engineObject



41
42
43
44
45
46
47
# File 'lib/rembrandt/highlighter.rb', line 41

def autoselect_engine
  begin
    engines.detect(&:available?).new
  rescue
    raise "Error: no highlight engine is available."
  end
end

#autoselect_storeObject



28
29
30
31
32
33
34
35
# File 'lib/rembrandt/highlighter.rb', line 28

def autoselect_store
  redis = Stores::Redis.new
  if redis.available?
    redis
  else
    Stores::File.new
  end
end

#default_languageObject



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

def default_language
  Config.default_language
end

#engineObject



16
17
18
# File 'lib/rembrandt/highlighter.rb', line 16

def engine
  @engine ||= autoselect_engine
end

#enginesObject



37
38
39
# File 'lib/rembrandt/highlighter.rb', line 37

def engines
  Config.engine_priority
end

#highlight(input, input_language = default_language) ⇒ Object



49
50
51
52
53
54
# File 'lib/rembrandt/highlighter.rb', line 49

def highlight(input, input_language = default_language)
  language = normalize_language(input_language)
  store.fetch(input, language) do
    engine.highlight(input, language)
  end
end

#highlight_file(filename, language = default_language) ⇒ Object



56
57
58
59
# File 'lib/rembrandt/highlighter.rb', line 56

def highlight_file(filename, language = default_language)
  data = File.read(filename)
  highlight(data, language)
end

#language_normalizerObject



65
66
67
# File 'lib/rembrandt/highlighter.rb', line 65

def language_normalizer
  @language_normalizer ||= LanguageNormalizer.new
end

#normalize_language(input) ⇒ Object



61
62
63
# File 'lib/rembrandt/highlighter.rb', line 61

def normalize_language(input)
  language_normalizer.process(input)
end