Module: Dolt::View::SyntaxHighlight
- Included in:
- SmartBlobRenderer
- Defined in:
- lib/dolt/view/syntax_highlight.rb
Class Method Summary collapse
- .add_lexer_alias(extension, lexer) ⇒ Object
- .add_lexer_shebang(pattern, lexer) ⇒ Object
- .lexer(suffix, code = nil) ⇒ Object
- .shebang(code) ⇒ Object
- .shebang_language(shebang) ⇒ Object
Instance Method Summary collapse
- #format_blob(path, code, options = {}) ⇒ Object
- #highlight(path, code, opt = {}) ⇒ Object
- #highlight_multiline(path, code, options = {}) ⇒ Object
- #lexer(path, code = nil) ⇒ Object
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, = {}) highlight_multiline(path, code, ) 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 = {}) = { :lexer => lexer(path, code) }.merge(opt) Pygments.highlight(code, ()) 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, = {}) return highlight(path, code, ) unless respond_to?(:multiline) lexer = lexer(path, code) multiline(highlight(path, code, ), :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 |