Module: Dolt::View::SyntaxHighlight

Included in:
SmartBlobRenderer
Defined in:
lib/dolt/view/syntax_highlight.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.add_lexer_alias(extension, lexer) ⇒ Object



59
60
61
62
# File 'lib/dolt/view/syntax_highlight.rb', line 59

def self.add_lexer_alias(extension, lexer)
  @@lexer_aliases ||= {}
  @@lexer_aliases[extension] = lexer
end

.add_lexer_shebang(pattern, lexer) ⇒ Object



64
65
66
67
# File 'lib/dolt/view/syntax_highlight.rb', line 64

def self.add_lexer_shebang(pattern, lexer)
  @@lexer_shebangs ||= []
  @@lexer_shebangs << { :pattern => pattern, :lexer => lexer }
end

.lexer(suffix, code = nil) ⇒ Object



44
45
46
47
# File 'lib/dolt/view/syntax_highlight.rb', line 44

def self.lexer(suffix, code = nil)
  return @@lexer_aliases[suffix] if @@lexer_aliases[suffix]
  shebang_language(shebang(code)) || suffix
end

.shebang(code) ⇒ Object



49
50
51
52
# File 'lib/dolt/view/syntax_highlight.rb', line 49

def self.shebang(code)
  first_line = (code || "").split("\n")[0]
  first_line =~ /^#!/ ? first_line : nil
end

.shebang_language(shebang) ⇒ Object



54
55
56
57
# File 'lib/dolt/view/syntax_highlight.rb', line 54

def self.shebang_language(shebang)
  shebang = @@lexer_shebangs.find { |s| (shebang || "") =~ s[:pattern] }
  shebang && shebang[:lexer]
end

Instance Method Details

#format_blob(path, code, options = {}) ⇒ Object



36
37
38
# File 'lib/dolt/view/syntax_highlight.rb', line 36

def format_blob(path, code, options = {})
  highlight_multiline(path, code, options)
end

#highlight(path, code, opt = {}) ⇒ Object



23
24
25
26
27
28
# File 'lib/dolt/view/syntax_highlight.rb', line 23

def highlight(path, code, opt = {})
  options = { :lexer => lexer(path, code) }.merge(opt)
  Pygments.highlight(code, highlight_options(options))
rescue RubyPython::PythonError
  code
end

#highlight_multiline(path, code, options = {}) ⇒ Object



30
31
32
33
34
# File 'lib/dolt/view/syntax_highlight.rb', line 30

def highlight_multiline(path, code, options = {})
  return highlight(path, code, options) unless respond_to?(:multiline)
  lexer = lexer(path, code)
  multiline(highlight(path, code, options), :class_names => [lexer])
end

#lexer(path, code = nil) ⇒ Object



40
41
42
# File 'lib/dolt/view/syntax_highlight.rb', line 40

def lexer(path, code = nil)
  Dolt::View::SyntaxHighlight.lexer(path.split(".").pop, code)
end