From 5734ee1b76d2547e0fa49beba729be88b8b393c5 Mon Sep 17 00:00:00 2001 From: Marian Posaceanu Date: Sun, 14 Jul 2013 19:02:26 +0300 Subject: [PATCH 1/4] added support for Rouge syntax highlighting --- lib/peek/rblineprof/controller_helpers.rb | 22 ++++-------- .../highlighters/pygments_highlighter.rb | 9 +++++ .../highlighters/rouge_highlighter.rb | 17 ++++++++++ lib/peek/rblineprof/syntax_highlighter.rb | 34 +++++++++++++++++++ 4 files changed, 67 insertions(+), 15 deletions(-) create mode 100644 lib/peek/rblineprof/highlighters/pygments_highlighter.rb create mode 100644 lib/peek/rblineprof/highlighters/rouge_highlighter.rb create mode 100644 lib/peek/rblineprof/syntax_highlighter.rb diff --git a/lib/peek/rblineprof/controller_helpers.rb b/lib/peek/rblineprof/controller_helpers.rb index d6b1e05..05f3f0c 100644 --- a/lib/peek/rblineprof/controller_helpers.rb +++ b/lib/peek/rblineprof/controller_helpers.rb @@ -1,8 +1,4 @@ -begin - require 'pygments.rb' -rescue LoadError - # Doesn't have pygments.rb installed -end +require 'peek/rblineprof/syntax_highlighter' module Peek module Rblineprof @@ -15,13 +11,9 @@ module ControllerHelpers protected - def pygmentize? - defined?(Pygments) - end - - def pygmentize(file_name, code, lexer = nil) - if pygmentize? && lexer.present? - Pygments.highlight(code, :lexer => lexer_for_filename(file_name)) + def pygmentize(file_name, code, lexer = false) + if lexer + SyntaxHighlighter.pygmentize(code, lexer_for_filename(file_name)) else code end @@ -33,8 +25,8 @@ def rblineprof_enabled? def lexer_for_filename(file_name) case file_name - when /\.rb$/ then 'ruby' - when /\.erb$/ then 'erb' + when /\.rb$/ then :ruby + when /\.erb$/ then :erb end end @@ -120,7 +112,7 @@ def inject_rblineprof end end output << "
#{times.join("\n")}
" - output << "
#{pygmentize(file_name, code.join, 'ruby')}
" + output << "
#{pygmentize(file_name, code.join, true)}
" output << "" # .data then .peek-rblineprof-file end diff --git a/lib/peek/rblineprof/highlighters/pygments_highlighter.rb b/lib/peek/rblineprof/highlighters/pygments_highlighter.rb new file mode 100644 index 0000000..7de4a9e --- /dev/null +++ b/lib/peek/rblineprof/highlighters/pygments_highlighter.rb @@ -0,0 +1,9 @@ +module Peek + module Rblineprof + class PygmentsHighlighter + def self.process(code, lexer) + Pygments.highlight(code, :lexer => lexer) + end + end + end +end diff --git a/lib/peek/rblineprof/highlighters/rouge_highlighter.rb b/lib/peek/rblineprof/highlighters/rouge_highlighter.rb new file mode 100644 index 0000000..c6dfb6f --- /dev/null +++ b/lib/peek/rblineprof/highlighters/rouge_highlighter.rb @@ -0,0 +1,17 @@ +module Peek + module Rblineprof + class RougeHighlighter + def self.process(code, lexer) + lexers = { + :ruby => Rouge::Lexers::Ruby, + :erb => Rouge::Lexers::ERB + } + + formatter = Rouge::Formatters::HTML.new(:line_numbers => true) + lexer = lexers[lexer.to_sym].new + + formatter.format(lexer.lex(code)) + end + end + end +end diff --git a/lib/peek/rblineprof/syntax_highlighter.rb b/lib/peek/rblineprof/syntax_highlighter.rb new file mode 100644 index 0000000..3c17ef0 --- /dev/null +++ b/lib/peek/rblineprof/syntax_highlighter.rb @@ -0,0 +1,34 @@ +require 'peek/rblineprof/highlighters/pygments_highlighter.rb' +require 'peek/rblineprof/highlighters/rouge_highlighter.rb' + +module Peek + module Rblineprof + class SyntaxHighlighter + def self.pygmentize(code, lexer) + return code unless highlighter + + highlighter.process(code, lexer) + end + + private + + def self.highlighter + @highlighter ||= -> { + begin + require 'pygments.rb' + return PygmentsHighlither + rescue LoadError + # Doesn't have pygments.rb installed + end + + begin + require 'rouge' + return RougeHighlighter + rescue LoadError + # Doesn't have rouge installed + end + }.call + end + end + end +end From 8f626fae232bb14c8badbd662025640174a7d1c5 Mon Sep 17 00:00:00 2001 From: Marian Posaceanu Date: Sun, 11 Aug 2013 13:36:18 +0300 Subject: [PATCH 2/4] Better method naming and more stable logic : - changed pygmentize to highlight - returs code in RougeHighlither if no lexer is found --- .gitignore | 1 + lib/peek/rblineprof/controller_helpers.rb | 6 +++--- .../rblineprof/highlighters/rouge_highlighter.rb | 14 ++++++++++---- lib/peek/rblineprof/syntax_highlighter.rb | 2 +- 4 files changed, 15 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index d87d4be..d9ee225 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,6 @@ *.gem *.rbc +*.swp .bundle .config .yardoc diff --git a/lib/peek/rblineprof/controller_helpers.rb b/lib/peek/rblineprof/controller_helpers.rb index 05f3f0c..d20e53a 100644 --- a/lib/peek/rblineprof/controller_helpers.rb +++ b/lib/peek/rblineprof/controller_helpers.rb @@ -11,9 +11,9 @@ module ControllerHelpers protected - def pygmentize(file_name, code, lexer = false) + def highlight(file_name, code, lexer = false) if lexer - SyntaxHighlighter.pygmentize(code, lexer_for_filename(file_name)) + SyntaxHighlighter.highlight(code, lexer_for_filename(file_name)) else code end @@ -112,7 +112,7 @@ def inject_rblineprof end end output << "
#{times.join("\n")}
" - output << "
#{pygmentize(file_name, code.join, true)}
" + output << "
#{highlight(file_name, code.join, true)}
" output << "" # .data then .peek-rblineprof-file end diff --git a/lib/peek/rblineprof/highlighters/rouge_highlighter.rb b/lib/peek/rblineprof/highlighters/rouge_highlighter.rb index c6dfb6f..624ba80 100644 --- a/lib/peek/rblineprof/highlighters/rouge_highlighter.rb +++ b/lib/peek/rblineprof/highlighters/rouge_highlighter.rb @@ -2,15 +2,21 @@ module Peek module Rblineprof class RougeHighlighter def self.process(code, lexer) + lexer = find_lexer(lexer) + + return code if lexer == :no_lexer + + formatter = Rouge::Formatters::HTML.new(:line_numbers => true) + formatter.format(lexer.new.lex(code)) + end + + def find_lexer(lexer) lexers = { :ruby => Rouge::Lexers::Ruby, :erb => Rouge::Lexers::ERB } - formatter = Rouge::Formatters::HTML.new(:line_numbers => true) - lexer = lexers[lexer.to_sym].new - - formatter.format(lexer.lex(code)) + lexers.fetch(lexers.to_sym, :no_lexer) end end end diff --git a/lib/peek/rblineprof/syntax_highlighter.rb b/lib/peek/rblineprof/syntax_highlighter.rb index 3c17ef0..76ffff6 100644 --- a/lib/peek/rblineprof/syntax_highlighter.rb +++ b/lib/peek/rblineprof/syntax_highlighter.rb @@ -4,7 +4,7 @@ module Peek module Rblineprof class SyntaxHighlighter - def self.pygmentize(code, lexer) + def self.highlight(code, lexer) return code unless highlighter highlighter.process(code, lexer) From a16f30678bac1d3c06b2f6579cc82c8a989b96c8 Mon Sep 17 00:00:00 2001 From: Marian Posaceanu Date: Sun, 11 Aug 2013 14:15:58 +0300 Subject: [PATCH 3/4] Extracted require blocks from SyntaxHighlighter class - similar to the code in the comment - enclosed logic into same namespace (no long lines of code) - small typo in RougeHighlighter --- .../highlighters/rouge_highlighter.rb | 8 ++--- lib/peek/rblineprof/syntax_highlighter.rb | 36 ++++++++++--------- 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/lib/peek/rblineprof/highlighters/rouge_highlighter.rb b/lib/peek/rblineprof/highlighters/rouge_highlighter.rb index 624ba80..15f5cd9 100644 --- a/lib/peek/rblineprof/highlighters/rouge_highlighter.rb +++ b/lib/peek/rblineprof/highlighters/rouge_highlighter.rb @@ -10,13 +10,13 @@ def self.process(code, lexer) formatter.format(lexer.new.lex(code)) end - def find_lexer(lexer) + def self.find_lexer(lexer) lexers = { - :ruby => Rouge::Lexers::Ruby, - :erb => Rouge::Lexers::ERB + ruby: Rouge::Lexers::Ruby, + erb: Rouge::Lexers::ERB } - lexers.fetch(lexers.to_sym, :no_lexer) + lexers.fetch(lexer.to_sym, :no_lexer) end end end diff --git a/lib/peek/rblineprof/syntax_highlighter.rb b/lib/peek/rblineprof/syntax_highlighter.rb index 76ffff6..690c381 100644 --- a/lib/peek/rblineprof/syntax_highlighter.rb +++ b/lib/peek/rblineprof/syntax_highlighter.rb @@ -4,30 +4,34 @@ module Peek module Rblineprof class SyntaxHighlighter + class_attribute :highlighter + def self.highlight(code, lexer) return code unless highlighter highlighter.process(code, lexer) end + end + end +end - private +module Peek + module Rblineprof + begin + require 'pygments.rb' + + SyntaxHighlighter.highlighter = PygmentsHighlighter + rescue LoadError + # Doesn't have pygments.rb installed + end - def self.highlighter - @highlighter ||= -> { - begin - require 'pygments.rb' - return PygmentsHighlither - rescue LoadError - # Doesn't have pygments.rb installed - end + if SyntaxHighlighter.highlighter.nil? + begin + require 'rouge' - begin - require 'rouge' - return RougeHighlighter - rescue LoadError - # Doesn't have rouge installed - end - }.call + SyntaxHighlighter.highlighter = RougeHighlighter + rescue LoadError + # Doesn't have rouge installed end end end From 44f614d2a718e1f563b47c402c9299feb03dfbd1 Mon Sep 17 00:00:00 2001 From: Marian Posaceanu Date: Thu, 22 Jun 2017 11:48:28 +0300 Subject: [PATCH 4/4] Removed unnecessary extension from require --- lib/peek/rblineprof/syntax_highlighter.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/peek/rblineprof/syntax_highlighter.rb b/lib/peek/rblineprof/syntax_highlighter.rb index 690c381..fa0518d 100644 --- a/lib/peek/rblineprof/syntax_highlighter.rb +++ b/lib/peek/rblineprof/syntax_highlighter.rb @@ -1,5 +1,5 @@ -require 'peek/rblineprof/highlighters/pygments_highlighter.rb' -require 'peek/rblineprof/highlighters/rouge_highlighter.rb' +require 'peek/rblineprof/highlighters/pygments_highlighter' +require 'peek/rblineprof/highlighters/rouge_highlighter' module Peek module Rblineprof