summaryrefslogtreecommitdiff
path: root/sample/ripper/colorize.rb
blob: 505e757013bc84e1fff60c0fbcf1f7e7b44264ab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
require 'ripper/filter'

class ColorizeFilter < Ripper::Filter
  def on_default(event, tok, f)
    f << escape(tok)
  end

  def on_comment(tok, f)
    f << %Q[<span class="comment">#{escape(tok)}</span>]
  end

  def on_tstring_content(tok, f)
    f << %Q[<span class="string">#{escape(tok)}</span>]
  end

  ESC = {
    '&' => '&amp;',
    '<' => '&lt;',
    '>' => '&gt;'
  }

  def escape(str)
    tbl = ESC
    str.gsub(/[&<>]/) {|ch| tbl[ch] }
  end
end

if $0 == __FILE__
  ColorizeFilter.new(ARGF).parse($stdout)
end