class Qiita::Markdown::Filters::SyntaxHighlight::Highlighter
Public Class Methods
Source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 46 def self.call(**args) new(**args).call end
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
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
Source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 66 def code @node.inner_text end
Source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 70 def filename @node["filename"] end
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
Source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 78 def has_inline_php? specific_language == "php" && code !~ /^<\?php/ end
Source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 82 def highlight(language) Rouge.highlight(code, language, DEFAULT_OPTION) end
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
Source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 98 def language specific_language || @default_language end
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
Source
# File lib/qiita/markdown/filters/syntax_highlight.rb, line 106 def specific_language @specific_language || @node["lang"] end