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



61
62
63
64
# File 'lib/dolt/view/syntax_highlight.rb', line 61

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

.add_lexer_shebang(pattern, lexer) ⇒ Object



66
67
68
69
# File 'lib/dolt/view/syntax_highlight.rb', line 66

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

.lexer(suffix, code = nil) ⇒ Object



46
47
48
49
# File 'lib/dolt/view/syntax_highlight.rb', line 46

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

.shebang(code) ⇒ Object



51
52
53
54
# File 'lib/dolt/view/syntax_highlight.rb', line 51

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

.shebang_language(shebang) ⇒ Object



56
57
58
59
# File 'lib/dolt/view/syntax_highlight.rb', line 56

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

Instance Method Details

#format_text_blob(path, code, repo = nil, ref = nil, options = {}) ⇒ Object



38
39
40
# File 'lib/dolt/view/syntax_highlight.rb', line 38

def format_text_blob(path, code, repo = nil, ref = nil, options = {})
  highlight_multiline(path, code, options)
end

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



23
24
25
26
27
28
29
30
# 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 MentosError => e
  # "MentosError" is what Pyments.rb raises when an unknown lexer is
  # attempted used
  respond_to?(:entityfy) ? entityfy(code) : code
end

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



32
33
34
35
36
# File 'lib/dolt/view/syntax_highlight.rb', line 32

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



42
43
44
# File 'lib/dolt/view/syntax_highlight.rb', line 42

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