diff --git a/lib/gitlab/highlight.rb b/lib/gitlab/highlight.rb index 57b7fc139f87ca4e835da1d9e73a061785a96611..a9e429a29f4ae7a580e66d16cf1634c03637835e 100644 --- a/lib/gitlab/highlight.rb +++ b/lib/gitlab/highlight.rb @@ -17,26 +17,30 @@ module Gitlab @formatter = Rouge::Formatters::HTMLGitlab.new @repository = repository @blob_name = blob_name - @lexer = custom_language || begin - Rouge::Lexer.guess(filename: blob_name, source: blob_content).new - rescue Rouge::Lexer::AmbiguousGuess => e - e.alternatives.sort_by(&:tag).first - end + @blob_content = blob_content end def highlight(text, continue: true, plain: false) - lexer = @lexer - if plain - lexer = Rouge::Lexers::PlainText + hl_lexer = Rouge::Lexers::PlainText continue = false + else + hl_lexer = self.lexer end - @formatter.format(lexer.lex(text, continue: continue)).html_safe + @formatter.format(hl_lexer.lex(text, continue: continue)).html_safe rescue @formatter.format(Rouge::Lexers::PlainText.lex(text)).html_safe end + def lexer + @lexer ||= custom_language || begin + Rouge::Lexer.guess(filename: blob_name, source: blob_content).new + rescue Rouge::Lexer::AmbiguousGuess => e + e.alternatives.sort_by(&:tag).first + end + end + private def custom_language