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_text_blob(path, code, repo = nil, ref = nil, 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
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, = {}) highlight_multiline(path, code, ) 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 = {}) = { :lexer => lexer(path, code) }.merge(opt) Pygments.highlight(code, ()) 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, = {}) 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
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 |