From 3d8868dd0b9898d589ecdff5151ed5d47956f937 Mon Sep 17 00:00:00 2001 From: murphy Date: Sat, 1 Oct 2005 06:04:52 +0000 Subject: Demos updated, rewritten, enhanced, tested. Some code cleanups. Bugs fixed, scanner and encoder improved: count.rb: marked Streamable html_css.rb: style for inline numbers html.rb: changed options; :line_numbers_offset is now :line_number_start html_output.rb: offset for inline numbers fixed html.rb: token text no longer changed by gsub! while highlighting (this is even faster!) text.rb, plugin.rb: reindented ruby.rb: eleminated multiple assignments for speed tokens.rb: reindented, Tokens#to_s added, #<< returns self Plugin system: bugs fixed, error messages improved. --- demo/demo_global_vars.rb | 8 +++----- demo/demo_html2.rb | 11 +++++++++-- demo/demo_load_encoder.rb | 8 ++++++-- demo/demo_more.rb | 4 +--- demo/demo_scanner.rb | 34 +++++++++++++++++++++++++++++----- demo/demo_server.rb | 4 ++-- demo/demo_stream.rb | 27 ++++++++++++++++++++++----- demo/demo_stream2.rb | 2 +- 8 files changed, 73 insertions(+), 25 deletions(-) (limited to 'demo') diff --git a/demo/demo_global_vars.rb b/demo/demo_global_vars.rb index 2bacfe5..8066d67 100644 --- a/demo/demo_global_vars.rb +++ b/demo/demo_global_vars.rb @@ -5,11 +5,9 @@ text = $bla.test(...) CODE require 'coderay' -require 'erb' -include ERB::Util tokens = CodeRay.scan code, :ruby -tokens.each_text_token { |text, kind| text.replace h(text) } -tokens.each(:global_variable) { |text, kind| text.replace '%s' % text } +tokens.each_text_token { |text, kind| text.upcase! } +tokens.each(:global_variable) { |text, kind| text.replace '<--%s-->' % text } -puts tokens.text +print tokens diff --git a/demo/demo_html2.rb b/demo/demo_html2.rb index 0982ad8..7ce9d60 100644 --- a/demo/demo_html2.rb +++ b/demo/demo_html2.rb @@ -1,4 +1,11 @@ require 'coderay' -require 'coderay/encoders/html' -puts CodeRay["puts CodeRay['...', :ruby]", :ruby].div +# scan this file +tokens = CodeRay.scan(File.read($0) * 1, :ruby) + +# output it with two styles of line numbers +out = tokens.div(:line_numbers => :table) +out << '
' +out << tokens.div(:line_numbers => :inline, :line_number_start => 8) + +puts out.page diff --git a/demo/demo_load_encoder.rb b/demo/demo_load_encoder.rb index 3c85463..4861ee7 100644 --- a/demo/demo_load_encoder.rb +++ b/demo/demo_load_encoder.rb @@ -7,7 +7,11 @@ rescue end yaml_encoder = CodeRay::Encoders[:yaml] -puts 'Now it is loaded.' +print 'Now it is loaded: ' +p yaml_encoder +puts 'See?' -p yaml_encoder == CodeRay::Encoders::YAML #-> true +tokens_encoder = require_plugin 'CodeRay::Encoders/tokens' +print 'Require is also possible: ' +p tokens_encoder puts 'See?' diff --git a/demo/demo_more.rb b/demo/demo_more.rb index 7ebf5c3..5056842 100644 --- a/demo/demo_more.rb +++ b/demo/demo_more.rb @@ -1,13 +1,11 @@ -require 'rubygems' -$: << '..' require 'coderay' -require 'benchmark' c, ruby = DATA.read.split(/^---$/) DATA.rewind me = DATA.read[/.*^__END__$/m] $input = c + ruby + me +require 'benchmark' time = Benchmark.realtime do # here CodeRay comes to play diff --git a/demo/demo_scanner.rb b/demo/demo_scanner.rb index a250f91..6a0245e 100644 --- a/demo/demo_scanner.rb +++ b/demo/demo_scanner.rb @@ -1,12 +1,36 @@ require 'coderay' -c_scanner = CodeRay::Scanners[:c].new "if (*p == '{') nest++;" + +c_code = "if (*p == '{') nest++;" +puts 'C Code: ' + c_code +puts + +c_scanner = CodeRay::Scanners[:c].new c_code + +puts '> print only operators:' for text, kind in c_scanner print text if kind == :operator end puts +puts '-' * 30 +puts -ruby_scanner = CodeRay::Scanners[:ruby].new %q +ruby_code = %q!ruby_code(:can, BE, %r[q[ui]te #{ /comple/x },] => $-s, &?\xee)! +puts 'Ruby Code: ' + ruby_code +puts + +ruby_scanner = CodeRay::Scanners[:ruby].new ruby_code + +puts '> has a string?' +puts ruby_scanner. + any? { |text, kind| kind == :string } +puts + +puts '> number of regexps?' +puts ruby_scanner. + select { |token| token == [:open, :regexp] }.size +puts -puts ruby_scanner.any? { |text, kind| kind == :string and text == :open} -puts ruby_scanner.find { |text, kind| kind == :regexp } -puts ruby_scanner.map { |text, kind| text if kind != :space }.compact.join(' ') +puts '> has a string?' +puts ruby_scanner. + reject { |text, kind| not text.is_a? String }. + map { |text, kind| %("#{text}" (#{kind})) }.join(', ') diff --git a/demo/demo_server.rb b/demo/demo_server.rb index 44485f0..cc3db2b 100644 --- a/demo/demo_server.rb +++ b/demo/demo_server.rb @@ -74,9 +74,9 @@ class CodeRayServlet < WEBrick::HTTPServlet::AbstractServlet end end -# 0xCODE = 49374 +# this is taken by "qip_msgd" - I don't know that. module CodeRay - PORT = 0xC0DE + PORT = 0xC0DE / 20 end server = WEBrick::HTTPServer.new :Port => CodeRay::PORT diff --git a/demo/demo_stream.rb b/demo/demo_stream.rb index b1d8560..7ed8a22 100644 --- a/demo/demo_stream.rb +++ b/demo/demo_stream.rb @@ -1,8 +1,25 @@ -$: << '..' require 'coderay' -e = CodeRay.encoder(:html) -t = e.encode_stream('a LOT of :code', :ruby) +code = File.read($0) * 500 +puts "Size of code: %d KB" % [code.size / 1024] -puts t -p t.class +puts "Use your system's memory tracker to see how much RAM this takes." +print 'Press some key to continue...'; gets + +require 'benchmark' +e = CodeRay.encoder(:div) +for do_stream in [true, false] + puts "Scanning and encoding in %s mode, please wait..." % + [do_stream ? 'streaming' : 'normal'] + output = '' + time = Benchmark.realtime do + if do_stream + output = e.encode_stream(code, :ruby) + else + output = e.encode_tokens(t = CodeRay.scan(code, :ruby)) + end + end + puts 'Finished after %4.2f seconds.' % time + puts "Size of output: %d KB" % [output.size / 1024] + print 'Press some key to continue...'; gets +end diff --git a/demo/demo_stream2.rb b/demo/demo_stream2.rb index 8a6bec7..d43cc9a 100644 --- a/demo/demo_stream2.rb +++ b/demo/demo_stream2.rb @@ -4,5 +4,5 @@ token_stream = CodeRay::TokenStream.new do |kind, text| puts 'kind: %s, text size: %d.' % [kind, text.size] end -token_stream << [:regexp, '/\d+/'] +token_stream << [:regexp, '/\d+/'] << [:space, "\n"] #-> kind: rexpexp, text size: 5. -- cgit v1.2.1