class HTML::Pipeline::NicoLinkFilter
Constants
- DEFAULT_PATTERNS
- IGNORE_PARENTS
Public Class Methods
new(doc, context = nil, result = nil)
click to toggle source
Calls superclass method
# File lib/html/pipeline/nico_link/filter.rb, line 9 def initialize(doc, context = nil, result = nil) super @context = context || {} end
Public Instance Methods
apply_filter(content)
click to toggle source
# File lib/html/pipeline/nico_link/filter.rb, line 27 def apply_filter(content) content = content.dup content.gsub!(merged_pattern) do |text| index = Regexp.last_match.captures.index { |n| n } pattern_set = patterns[index] value = pattern_set[:convert] ? pattern_set[:convert].call(text) : text url = pattern_set[:link].gsub('%s', value) "<a href=\"#{ERB::Util.html_escape(url)}\">#{ERB::Util.html_escape(text)}</a>" end content end
call()
click to toggle source
# File lib/html/pipeline/nico_link/filter.rb, line 14 def call doc.xpath('.//text()').each do |node| next if has_ancestor?(node, IGNORE_PARENTS) content = node.to_html html = apply_filter(content) next if html == content node.replace(html) end doc end
merged_pattern()
click to toggle source
# File lib/html/pipeline/nico_link/filter.rb, line 49 def merged_pattern @merged_pattern ||= /\b(?:(#{patterns.map { |n| n[:pattern] }.join(')|(')}))\b/ end
patterns()
click to toggle source
# File lib/html/pipeline/nico_link/filter.rb, line 39 def patterns @patterns ||= (@context[:nico_link] || DEFAULT_PATTERNS).map do |pattern_set| { pattern: pattern_set[:pattern], link: pattern_set[:link], convert: pattern_set[:convert] } end end