class Qiita::Markdown::Filters::SyntaxHighlight::Highlighter

Public Class Methods

call(**args) click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 46
def self.call(**args)
  new(**args).call
end
new(default_language: nil, node: nil, specific_language: nil) click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 50
def initialize(default_language: nil, node: nil, specific_language: nil)
  @default_language = default_language
  @node = node
  @specific_language = specific_language
end

Public Instance Methods

call() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 56
def call
  outer = Nokogiri::HTML.fragment(%(<div class="code-frame" data-lang="#{language}">))
  frame = outer.at("div")
  frame.add_child(filename_node) if filename
  frame.add_child(highlighted_node)
  @node.replace(outer)
end

Private Instance Methods

code() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 66
def code
  @node.inner_text
end
filename() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 70
def filename
  @node["filename"]
end
filename_node() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 74
def filename_node
  %(<div class="code-lang"><span class="bold">#{filename}</span></div>)
end
has_inline_php?() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 78
def has_inline_php?
  specific_language == "php" && code !~ /^<\?php/
end
highlight(language) click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 82
def highlight(language)
  Rouge.highlight(code, language, DEFAULT_OPTION)
end
highlighted_node() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 86
def highlighted_node
  if specific_language && Rouge::Lexer.find(specific_language)
    begin
      highlight(specific_language).presence or raise
    rescue StandardError
      highlight(@default_language)
    end
  else
    highlight(@default_language)
  end
end
language() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 98
def language
  specific_language || @default_language
end
language_node() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 102
def language_node
  Nokogiri::HTML.fragment(%(<div class="code-frame" data-lang="#{language}"></div>))
end
specific_language() click to toggle source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 106
def specific_language
  @specific_language || @node["lang"]
end