1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/sample/ripper/ruby2html.rb
k0kubun cc777d09f4 erb.rb: deprecate safe_level of ERB.new
Also, as it's in the middle of the list of 4 arguments, 3rd and 4th arguments
(trim_mode, eoutvar) are changed to keyword arguments.
Old ways to specify arguments are deprecated and warned now.

bin/erb: deprecate -S option.

We'll remove all of deprecated ones at Ruby 2.7+.

enc/make_encmake.rb: stopped using deprecated interface
ext/etc/mkconstants.rb: ditto
ext/socket/mkconstants.rb: ditto
sample/ripper/ruby2html.rb: ditto
spec/ruby/library/erb/defmethod/def_erb_method_spec.rb: ditto
spec/ruby/library/erb/new_spec.rb: ditto
test/erb/test_erb.rb: ditto
test/erb/test_erb_command.rb: ditto
tool/generic_erb.rb: ditto
tool/ruby_vm/helpers/dumper.rb: ditto
tool/transcode-tblgen.rb: ditto
lib/rdoc/erbio.rb: ditto
lib/rdoc/generator/darkfish.rb: ditto

[Feature #14256]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62529 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-22 13:28:25 +00:00

116 lines
2.4 KiB
Ruby

#!/usr/bin/env ruby
# $originalId: ruby2html.rb,v 1.2 2005/09/23 22:53:47 aamine Exp $
TEMPLATE_LINE = __LINE__ + 2
TEMPLATE = <<-EndTemplate
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<%= encoding %>">
<% if css %>
<link rel="stylesheet" type="text/css" href="<%= css %>">
<% end %>
<title><%= File.basename(f.path) %></title>
</head>
<body>
<pre>
<%
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
%>
</pre>
</body>
</html>
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] [<file>...]"
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)
if RUBY_VERSION >= '2.6'
erb = ERB.new(TEMPLATE, trim_mode: '>')
else
erb = ERB.new(TEMPLATE, nil, '>')
end
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[<span class="resword">#{CGI.escapeHTML(tok)}</span>]
end
def on_comment(tok, f)
f << %Q[<span class="comment">#{CGI.escapeHTML(tok.rstrip)}</span>\n]
end
def on_tstring_beg(tok, f)
f << %Q[<span class="string">#{CGI.escapeHTML(tok)}]
end
def on_tstring_end(tok, f)
f << %Q[#{CGI.escapeHTML(tok)}</span>]
end
end
if $0 == __FILE__
main
end