class Mustermann::Visualizer::Highlighter::AST
Provides highlighting for AST
based patterns @!visibility private
Constants
- Index
- Indexer
Public Class Methods
highlight(pattern, renderer)
click to toggle source
@!visibility private
# File lib/mustermann/visualizer/highlighter/ast.rb, line 59 def self.highlight(pattern, renderer) new(pattern, renderer).highlight end
highlight?(pattern)
click to toggle source
@!visibility private
# File lib/mustermann/visualizer/highlighter/ast.rb, line 54 def self.highlight?(pattern) pattern.respond_to? :to_ast end
new(pattern, renderer)
click to toggle source
@!visibility private
# File lib/mustermann/visualizer/highlighter/ast.rb, line 64 def initialize(pattern, renderer) @ast = pattern.to_ast @string = pattern.to_s @renderer = renderer end
Public Instance Methods
highlight()
click to toggle source
@!visibility private
# File lib/mustermann/visualizer/highlighter/ast.rb, line 71 def highlight index = Indexer.translate(@ast, @string) inject_literals(index) render(index) end
inject_literals(index)
click to toggle source
@!visibility private
# File lib/mustermann/visualizer/highlighter/ast.rb, line 85 def inject_literals(index) start, old_payload, index.payload = index.start, index.payload, [] old_payload.each do |element| index.payload << literal(start, element.start) if start < element.start index.payload << element inject_literals(element) start = element.stop end index.payload << literal(start, index.stop) if start < index.stop end
literal(start, stop)
click to toggle source
@!visibility private
# File lib/mustermann/visualizer/highlighter/ast.rb, line 97 def literal(start, stop) Index.new(:literal, start, stop, []) end
render(index)
click to toggle source
@!visibility private
# File lib/mustermann/visualizer/highlighter/ast.rb, line 78 def render(index) return @renderer.escape(@string[index.start..index.stop-1]) if index.type == :literal payload = index.payload.map { |i| render(i) }.join "#{ @renderer.pre(index.type) }#{ payload }#{ @renderer.post(index.type) }" end