Sha256: c34135d742d1cb68aff4f3c88b8562de1756f25b2b0a0362ff7f61ea232f2f25

Contents?: true

Size: 1.48 KB

Versions: 17

Compression:

Stored size: 1.48 KB

Contents

# frozen_string_literal: true
module Mustermann
  module Visualizer
    # @!visibility private
    module Highlighter
      # @!visibility private
      module Composite
        extend self

        # @!visibility private
        def highlight?(pattern)
          pattern.is_a? Mustermann::Composite
        end

        # @!visibility private
        def highlight(pattern, renderer)
          operator = " #{pattern.operator} "
          patterns = pattern.patterns.map { |p| highlight_nested(p, renderer) }.join(quote(renderer, operator))
          renderer.pre(:composite) + patterns + renderer.post(:composite)
        end

        # @!visibility private
        def highlight_nested(pattern, renderer)
          highlighter = Highlighter.highlighter_for(pattern)
          if highlighter.respond_to? :nested_highlight
            highlighter.nested_highlight(pattern, renderer)
          else
            type  = quote(renderer, pattern.class.name[/[^:]+$/].downcase + ":", :type)
            quote = quote(renderer, ?")
            type + quote + highlighter.highlight(pattern, renderer) + quote
          end
        end

        # @!visibility private
        def nested_highlight(pattern, renderer)
          quote(renderer, ?() + highlight(pattern, renderer) + quote(renderer, ?))
        end

        # @!visibility private
        def quote(renderer, string, type = :quote)
          renderer.pre(type) + renderer.escape(string, string) + renderer.post(type)
        end
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 2 rubygems

Version Path
mustermann-contrib-3.0.3 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-3.0.2 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-3.0.1 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-3.0.0 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-2.0.2 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-2.0.1 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-2.0.0 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.1.2 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.1.1 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.1.0 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.0.3 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.0.2 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.0.2.rc2 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.0.2.rc1 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-1.0.2.rc1 mustermann-contrib/lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.0.1 lib/mustermann/visualizer/highlighter/composite.rb
mustermann-contrib-1.0.0 lib/mustermann/visualizer/highlighter/composite.rb