diff --git a/ChangeLog b/ChangeLog index bfc99dd971..7caa04dd31 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Sat Sep 24 07:59:01 2005 Minero Aoki + + * sample/ripper/colorize.rb: removed (replaced by ruby2html.rb). + + * sample/ripper/ruby2html.rb: added. + Sat Sep 24 06:35:15 2005 Minero Aoki * ext/ripper: no longer generates .rb files. diff --git a/sample/ripper/colorize.rb b/sample/ripper/colorize.rb deleted file mode 100644 index 505e757013..0000000000 --- a/sample/ripper/colorize.rb +++ /dev/null @@ -1,30 +0,0 @@ -require 'ripper/filter' - -class ColorizeFilter < Ripper::Filter - def on_default(event, tok, f) - f << escape(tok) - end - - def on_comment(tok, f) - f << %Q[#{escape(tok)}] - end - - def on_tstring_content(tok, f) - f << %Q[#{escape(tok)}] - end - - ESC = { - '&' => '&', - '<' => '<', - '>' => '>' - } - - def escape(str) - tbl = ESC - str.gsub(/[&<>]/) {|ch| tbl[ch] } - end -end - -if $0 == __FILE__ - ColorizeFilter.new(ARGF).parse($stdout) -end diff --git a/sample/ripper/ruby2html.rb b/sample/ripper/ruby2html.rb new file mode 100644 index 0000000000..8f64f5a713 --- /dev/null +++ b/sample/ripper/ruby2html.rb @@ -0,0 +1,112 @@ +#!/usr/bin/env ruby +# $originalId: ruby2html.rb,v 1.2 2005/09/23 22:53:47 aamine Exp $ + +TEMPLATE_LINE = __LINE__ + 2 +TEMPLATE = <<-EndTemplate + + + + +<% if css %> + +<% end %> + <%= File.basename(f.path) %> + + +
+<%
+    if print_line_number
+      Ruby2HTML.compile(f).each_with_index do |line, idx|
+%><%= sprintf('%4d  %s', idx+1, line) %><%
+      end
+    else
+%><%= Ruby2HTML.compile(f) %><%
+    end
+%>
+
+ + +EndTemplate + +require 'ripper' +require 'stringio' +require 'cgi' +require 'erb' +require 'optparse' + +def main + encoding = 'us-ascii' + css = nil + print_line_number = false + parser = OptionParser.new + parser.banner = "Usage: #{File.basename($0)} [-l] [...]" + parser.on('--encoding=NAME', 'Character encoding [us-ascii].') {|name| + encoding = name + } + parser.on('--css=URL', 'Set a link to CSS.') {|url| + css = url + } + parser.on('-l', '--line-number', 'Show line number.') { + print_line_number = true + } + parser.on('--help', 'Prints this message and quit.') { + puts parser.help + exit 0 + } + begin + parser.parse! + rescue OptionParser::ParseError => err + $stderr.puts err + $stderr.puts parser.help + exit 1 + end + puts ruby2html(ARGF, encoding, css, print_line_number) +end + +class ERB + attr_accessor :lineno + + remove_method :result + def result(b) + eval(@src, b, (@filename || '(erb)'), (@lineno || 1)) + end +end + +def ruby2html(f, encoding, css, print_line_number) + erb = ERB.new(TEMPLATE, nil, '>') + erb.filename = __FILE__ + erb.lineno = TEMPLATE_LINE + erb.result(binding()) +end + +class Ruby2HTML < Ripper::Filter + def Ruby2HTML.compile(f) + buf = StringIO.new + Ruby2HTML.new(f).parse(buf) + buf.string + end + + def on_default(event, tok, f) + f << CGI.escapeHTML(tok) + end + + def on_kw(tok, f) + f << %Q[#{CGI.escapeHTML(tok)}] + end + + def on_comment(tok, f) + f << %Q[#{CGI.escapeHTML(tok.rstrip)}\n] + end + + def on_tstring_beg(tok, f) + f << %Q[#{CGI.escapeHTML(tok)}] + end + + def on_tstring_end(tok, f) + f << %Q[#{CGI.escapeHTML(tok)}] + end +end + +if $0 == __FILE__ + main +end