From 5ee15661dbc2da70927f588e310315233aff6eea Mon Sep 17 00:00:00 2001 From: murphy Date: Mon, 10 Apr 2006 03:06:50 +0000 Subject: Large update: Scanners for HTML, RHTML and Nitro-XHTML added. CSS style changes/enhancments (mainly the new background color for inline code, affects all Ruby code.) Demos and tests adjusted. Plugin: new PluginHost::default method. Scanner: - New setup method - ability to re-use a scanner - ability to keep the tokens - minor changes to token caching and string flattening Encoder: Error if token content is neither String nor Symbol. HTML encoder: - more warnings for unclosed tokens - output now UTF-8 Ruby Scanner: - bug: symbols before => now do not include =; {:foo=>bar} is valid Ruby code - try to close all open tokens - constants now all with specific namespace (for speed, I hope) Styles: new :entity/en class. Test suite now gives hinted HTML output. --- demo/demo_cache.out | 2 + demo/demo_cache.rb | 12 +++ demo/demo_css.out | 168 +++++++++++++++++++------------------- demo/demo_div.out | 24 +++--- demo/demo_highlight.out | 182 +++++++++++++++++++++-------------------- demo/demo_html.out | 150 +++++++++++++++++----------------- demo/demo_html2.out | 198 +++++++++++++++++++++++---------------------- demo/demo_html_list.out | 170 +++++++++++++++++++------------------- demo/demo_load_scanner.out | 2 +- demo/demo_more.out | 2 +- demo/demo_simple.out | 3 +- 11 files changed, 479 insertions(+), 434 deletions(-) create mode 100644 demo/demo_cache.out create mode 100644 demo/demo_cache.rb (limited to 'demo') diff --git a/demo/demo_cache.out b/demo/demo_cache.out new file mode 100644 index 0000000..4dee329 --- /dev/null +++ b/demo/demo_cache.out @@ -0,0 +1,2 @@ +test <test> +test <test> diff --git a/demo/demo_cache.rb b/demo/demo_cache.rb new file mode 100644 index 0000000..0c0b847 --- /dev/null +++ b/demo/demo_cache.rb @@ -0,0 +1,12 @@ +require 'coderay' + +html_encoder = CodeRay.encoder :html + +scanner = Hash.new do |h, lang| + h[lang] = CodeRay.scanner lang +end + +for lang in [:ruby, :html] + tokens = scanner[lang].tokenize 'test ' + puts html_encoder.encode_tokens(tokens) +end diff --git a/demo/demo_css.out b/demo/demo_css.out index 1429a8f..d1c6259 100644 --- a/demo/demo_css.out +++ b/demo/demo_css.out @@ -4,95 +4,101 @@ font-family: 'Courier New', 'Terminal', monospace; color: #100; } -.CodeRay pre { margin: 0px; } +.CodeRay pre { margin: 0px } div.CodeRay { } -span.CodeRay { white-space: pre; border: 0px; padding: 2px; } +span.CodeRay { white-space: pre; border: 0px; padding: 2px } -table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; } -table.CodeRay td { padding: 2px 4px; vertical-align: top; } +table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px } +table.CodeRay td { padding: 2px 4px; vertical-align: top } .CodeRay .line_numbers, .CodeRay .no { background-color: #def; color: gray; text-align: right; } -.CodeRay .line_numbers tt { font-weight: bold; } -.CodeRay .no { padding: 0px 4px; } -.CodeRay .code { width: 100%; } - -ol.CodeRay { font-size: 10pt; } -ol.CodeRay li { white-space: pre; } - -.CodeRay .code pre { overflow: auto; } - -.CodeRay .af { color:#00C; } -.CodeRay .an { color:#007; } -.CodeRay .av { color:#700; } -.CodeRay .aw { color:#C00; } -.CodeRay .bi { color:#509; font-weight:bold; } -.CodeRay .c { color:#888; } - -.CodeRay .ch { color:#04D; } -.CodeRay .ch .k { color:#04D; } -.CodeRay .ch .dl { color:#039; } - -.CodeRay .cl { color:#B06; font-weight:bold; } -.CodeRay .co { color:#036; font-weight:bold; } -.CodeRay .cr { color:#0A0; } -.CodeRay .cv { color:#369; } -.CodeRay .df { color:#099; font-weight:bold; } -.CodeRay .di { color:#088; font-weight:bold; } -.CodeRay .dl { color:black; } -.CodeRay .do { color:#970; } -.CodeRay .ds { color:#D42; font-weight:bold; } -.CodeRay .e { color:#666; font-weight:bold; } -.CodeRay .er { color:#F00; background-color:#FAA; } -.CodeRay .ex { color:#F00; font-weight:bold; } -.CodeRay .fl { color:#60E; font-weight:bold; } -.CodeRay .fu { color:#06B; font-weight:bold; } -.CodeRay .gv { color:#d70; font-weight:bold; } -.CodeRay .hx { color:#058; font-weight:bold; } -.CodeRay .i { color:#00D; font-weight:bold; } -.CodeRay .ic { color:#B44; font-weight:bold; } -.CodeRay .il { } -.CodeRay .in { color:#B2B; font-weight:bold; } -.CodeRay .iv { color:#33B; } -.CodeRay .la { color:#970; font-weight:bold; } -.CodeRay .lv { color:#963; } -.CodeRay .oc { color:#40E; font-weight:bold; } -.CodeRay .on { color:#000; font-weight:bold; } +.CodeRay .line_numbers tt { font-weight: bold } +.CodeRay .no { padding: 0px 4px } +.CodeRay .code { width: 100% } + +ol.CodeRay { font-size: 10pt } +ol.CodeRay li { white-space: pre } + +.CodeRay .code pre { overflow: auto } + +.CodeRay .af { color:#00C } +.CodeRay .an { color:#007 } +.CodeRay .av { color:#700 } +.CodeRay .aw { color:#C00 } +.CodeRay .bi { color:#509; font-weight:bold } +.CodeRay .c { color:#888 } + +.CodeRay .ch { color:#04D } +.CodeRay .ch .k { color:#04D } +.CodeRay .ch .dl { color:#039 } + +.CodeRay .cl { color:#B06; font-weight:bold } +.CodeRay .co { color:#036; font-weight:bold } +.CodeRay .cr { color:#0A0 } +.CodeRay .cv { color:#369 } +.CodeRay .df { color:#099; font-weight:bold } +.CodeRay .di { color:#088; font-weight:bold } +.CodeRay .dl { color:black } +.CodeRay .do { color:#970 } +.CodeRay .ds { color:#D42; font-weight:bold } +.CodeRay .e { color:#666; font-weight:bold } +.CodeRay .en { color:#800; font-weight:bold } +.CodeRay .er { color:#F00; background-color:#FAA } +.CodeRay .ex { color:#F00; font-weight:bold } +.CodeRay .fl { color:#60E; font-weight:bold } +.CodeRay .fu { color:#06B; font-weight:bold } +.CodeRay .gv { color:#d70; font-weight:bold } +.CodeRay .hx { color:#058; font-weight:bold } +.CodeRay .i { color:#00D; font-weight:bold } +.CodeRay .ic { color:#B44; font-weight:bold } + +.CodeRay .il { background: #eee } +.CodeRay .il .il { background: #ddd } +.CodeRay .il .il .il { background: #ccc } +.CodeRay .il .dl { font-weight: bold ! important; color: #888 ! important } + +.CodeRay .in { color:#B2B; font-weight:bold } +.CodeRay .iv { color:#33B } +.CodeRay .la { color:#970; font-weight:bold } +.CodeRay .lv { color:#963 } +.CodeRay .oc { color:#40E; font-weight:bold } +.CodeRay .on { color:#000; font-weight:bold } .CodeRay .op { } -.CodeRay .pc { color:#038; font-weight:bold; } -.CodeRay .pd { color:#369; font-weight:bold; } -.CodeRay .pp { color:#579; } -.CodeRay .pt { color:#339; font-weight:bold; } -.CodeRay .r { color:#080; font-weight:bold; } - -.CodeRay .rx { background-color:#fff0ff; } -.CodeRay .rx .k { color:#808; } -.CodeRay .rx .dl { color:#404; } -.CodeRay .rx .mod { color:#C2C; } -.CodeRay .rx .fu { color:#404; font-weight: bold; } - -.CodeRay .s { background-color:#fff0f0; } -.CodeRay .s .s { background-color:#ffe0e0; } -.CodeRay .s .s .s { background-color:#ffd0d0; } -.CodeRay .s .k { color:#D20; } -.CodeRay .s .dl { color:#710; } - -.CodeRay .sh { background-color:#f0fff0; } -.CodeRay .sh .k { color:#2B2; } -.CodeRay .sh .dl { color:#161; } - -.CodeRay .sy { color:#A60; } -.CodeRay .sy .k { color:#A60; } -.CodeRay .sy .dl { color:#630; } - -.CodeRay .ta { color:#070; } -.CodeRay .tf { color:#070; font-weight:bold; } -.CodeRay .ts { color:#D70; font-weight:bold; } -.CodeRay .ty { color:#339; font-weight:bold; } -.CodeRay .v { color:#036; } -.CodeRay .xt { color:#444; } +.CodeRay .pc { color:#038; font-weight:bold } +.CodeRay .pd { color:#369; font-weight:bold } +.CodeRay .pp { color:#579 } +.CodeRay .pt { color:#339; font-weight:bold } +.CodeRay .r { color:#080; font-weight:bold } + +.CodeRay .rx { background-color:#fff0ff } +.CodeRay .rx .k { color:#808 } +.CodeRay .rx .dl { color:#404 } +.CodeRay .rx .mod { color:#C2C } +.CodeRay .rx .fu { color:#404; font-weight: bold } + +.CodeRay .s { background-color:#fff0f0 } +.CodeRay .s .s { background-color:#ffe0e0 } +.CodeRay .s .s .s { background-color:#ffd0d0 } +.CodeRay .s .k { color:#D20 } +.CodeRay .s .dl { color:#710 } + +.CodeRay .sh { background-color:#f0fff0 } +.CodeRay .sh .k { color:#2B2 } +.CodeRay .sh .dl { color:#161 } + +.CodeRay .sy { color:#A60 } +.CodeRay .sy .k { color:#A60 } +.CodeRay .sy .dl { color:#630 } + +.CodeRay .ta { color:#070 } +.CodeRay .tf { color:#070; font-weight:bold } +.CodeRay .ts { color:#D70; font-weight:bold } +.CodeRay .ty { color:#339; font-weight:bold } +.CodeRay .v { color:#036 } +.CodeRay .xt { color:#444 } diff --git a/demo/demo_div.out b/demo/demo_div.out index 5ae922f..c85062e 100644 --- a/demo/demo_div.out +++ b/demo/demo_div.out @@ -1,17 +1,17 @@
-
for a in 0..255
+	
for a in 0..255
         a = a.chr
-        begin
-                x = eval("?\\#{a}")
-                if x == a[0]
-                        next
-                else
-                        print "#{a}: #{x}"
-                end
-        rescue SyntaxError => boom
-                print "#{a}: error"
-        end
+        begin
+                x = eval("?\\#{a}")
+                if x == a[0]
+                        next
+                else
+                        print "#{a}: #{x}"
+                end
+        rescue SyntaxError => boom
+                print "#{a}: error"
+        end
         puts
-end
+end
 
diff --git a/demo/demo_highlight.out b/demo/demo_highlight.out index f7a686e..193faa7 100644 --- a/demo/demo_highlight.out +++ b/demo/demo_highlight.out @@ -10,98 +10,104 @@ font-family: 'Courier New', 'Terminal', monospace; color: #100; } -.CodeRay pre { margin: 0px; } +.CodeRay pre { margin: 0px } div.CodeRay { } -span.CodeRay { white-space: pre; border: 0px; padding: 2px; } +span.CodeRay { white-space: pre; border: 0px; padding: 2px } -table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px; } -table.CodeRay td { padding: 2px 4px; vertical-align: top; } +table.CodeRay { border-collapse: collapse; width: 100%; padding: 2px } +table.CodeRay td { padding: 2px 4px; vertical-align: top } .CodeRay .line_numbers, .CodeRay .no { background-color: #def; color: gray; text-align: right; } -.CodeRay .line_numbers tt { font-weight: bold; } -.CodeRay .no { padding: 0px 4px; } -.CodeRay .code { width: 100%; } - -ol.CodeRay { font-size: 10pt; } -ol.CodeRay li { white-space: pre; } - -.CodeRay .code pre { overflow: auto; } - -.CodeRay .af { color:#00C; } -.CodeRay .an { color:#007; } -.CodeRay .av { color:#700; } -.CodeRay .aw { color:#C00; } -.CodeRay .bi { color:#509; font-weight:bold; } -.CodeRay .c { color:#888; } - -.CodeRay .ch { color:#04D; } -.CodeRay .ch .k { color:#04D; } -.CodeRay .ch .dl { color:#039; } - -.CodeRay .cl { color:#B06; font-weight:bold; } -.CodeRay .co { color:#036; font-weight:bold; } -.CodeRay .cr { color:#0A0; } -.CodeRay .cv { color:#369; } -.CodeRay .df { color:#099; font-weight:bold; } -.CodeRay .di { color:#088; font-weight:bold; } -.CodeRay .dl { color:black; } -.CodeRay .do { color:#970; } -.CodeRay .ds { color:#D42; font-weight:bold; } -.CodeRay .e { color:#666; font-weight:bold; } -.CodeRay .er { color:#F00; background-color:#FAA; } -.CodeRay .ex { color:#F00; font-weight:bold; } -.CodeRay .fl { color:#60E; font-weight:bold; } -.CodeRay .fu { color:#06B; font-weight:bold; } -.CodeRay .gv { color:#d70; font-weight:bold; } -.CodeRay .hx { color:#058; font-weight:bold; } -.CodeRay .i { color:#00D; font-weight:bold; } -.CodeRay .ic { color:#B44; font-weight:bold; } -.CodeRay .il { } -.CodeRay .in { color:#B2B; font-weight:bold; } -.CodeRay .iv { color:#33B; } -.CodeRay .la { color:#970; font-weight:bold; } -.CodeRay .lv { color:#963; } -.CodeRay .oc { color:#40E; font-weight:bold; } -.CodeRay .on { color:#000; font-weight:bold; } +.CodeRay .line_numbers tt { font-weight: bold } +.CodeRay .no { padding: 0px 4px } +.CodeRay .code { width: 100% } + +ol.CodeRay { font-size: 10pt } +ol.CodeRay li { white-space: pre } + +.CodeRay .code pre { overflow: auto } + +.CodeRay .af { color:#00C } +.CodeRay .an { color:#007 } +.CodeRay .av { color:#700 } +.CodeRay .aw { color:#C00 } +.CodeRay .bi { color:#509; font-weight:bold } +.CodeRay .c { color:#888 } + +.CodeRay .ch { color:#04D } +.CodeRay .ch .k { color:#04D } +.CodeRay .ch .dl { color:#039 } + +.CodeRay .cl { color:#B06; font-weight:bold } +.CodeRay .co { color:#036; font-weight:bold } +.CodeRay .cr { color:#0A0 } +.CodeRay .cv { color:#369 } +.CodeRay .df { color:#099; font-weight:bold } +.CodeRay .di { color:#088; font-weight:bold } +.CodeRay .dl { color:black } +.CodeRay .do { color:#970 } +.CodeRay .ds { color:#D42; font-weight:bold } +.CodeRay .e { color:#666; font-weight:bold } +.CodeRay .en { color:#800; font-weight:bold } +.CodeRay .er { color:#F00; background-color:#FAA } +.CodeRay .ex { color:#F00; font-weight:bold } +.CodeRay .fl { color:#60E; font-weight:bold } +.CodeRay .fu { color:#06B; font-weight:bold } +.CodeRay .gv { color:#d70; font-weight:bold } +.CodeRay .hx { color:#058; font-weight:bold } +.CodeRay .i { color:#00D; font-weight:bold } +.CodeRay .ic { color:#B44; font-weight:bold } + +.CodeRay .il { background: #eee } +.CodeRay .il .il { background: #ddd } +.CodeRay .il .il .il { background: #ccc } +.CodeRay .il .dl { font-weight: bold ! important; color: #888 ! important } + +.CodeRay .in { color:#B2B; font-weight:bold } +.CodeRay .iv { color:#33B } +.CodeRay .la { color:#970; font-weight:bold } +.CodeRay .lv { color:#963 } +.CodeRay .oc { color:#40E; font-weight:bold } +.CodeRay .on { color:#000; font-weight:bold } .CodeRay .op { } -.CodeRay .pc { color:#038; font-weight:bold; } -.CodeRay .pd { color:#369; font-weight:bold; } -.CodeRay .pp { color:#579; } -.CodeRay .pt { color:#339; font-weight:bold; } -.CodeRay .r { color:#080; font-weight:bold; } - -.CodeRay .rx { background-color:#fff0ff; } -.CodeRay .rx .k { color:#808; } -.CodeRay .rx .dl { color:#404; } -.CodeRay .rx .mod { color:#C2C; } -.CodeRay .rx .fu { color:#404; font-weight: bold; } - -.CodeRay .s { background-color:#fff0f0; } -.CodeRay .s .s { background-color:#ffe0e0; } -.CodeRay .s .s .s { background-color:#ffd0d0; } -.CodeRay .s .k { color:#D20; } -.CodeRay .s .dl { color:#710; } - -.CodeRay .sh { background-color:#f0fff0; } -.CodeRay .sh .k { color:#2B2; } -.CodeRay .sh .dl { color:#161; } - -.CodeRay .sy { color:#A60; } -.CodeRay .sy .k { color:#A60; } -.CodeRay .sy .dl { color:#630; } - -.CodeRay .ta { color:#070; } -.CodeRay .tf { color:#070; font-weight:bold; } -.CodeRay .ts { color:#D70; font-weight:bold; } -.CodeRay .ty { color:#339; font-weight:bold; } -.CodeRay .v { color:#036; } -.CodeRay .xt { color:#444; } +.CodeRay .pc { color:#038; font-weight:bold } +.CodeRay .pd { color:#369; font-weight:bold } +.CodeRay .pp { color:#579 } +.CodeRay .pt { color:#339; font-weight:bold } +.CodeRay .r { color:#080; font-weight:bold } + +.CodeRay .rx { background-color:#fff0ff } +.CodeRay .rx .k { color:#808 } +.CodeRay .rx .dl { color:#404 } +.CodeRay .rx .mod { color:#C2C } +.CodeRay .rx .fu { color:#404; font-weight: bold } + +.CodeRay .s { background-color:#fff0f0 } +.CodeRay .s .s { background-color:#ffe0e0 } +.CodeRay .s .s .s { background-color:#ffd0d0 } +.CodeRay .s .k { color:#D20 } +.CodeRay .s .dl { color:#710 } + +.CodeRay .sh { background-color:#f0fff0 } +.CodeRay .sh .k { color:#2B2 } +.CodeRay .sh .dl { color:#161 } + +.CodeRay .sy { color:#A60 } +.CodeRay .sy .k { color:#A60 } +.CodeRay .sy .dl { color:#630 } + +.CodeRay .ta { color:#070 } +.CodeRay .tf { color:#070; font-weight:bold } +.CodeRay .ts { color:#D70; font-weight:bold } +.CodeRay .ty { color:#339; font-weight:bold } +.CodeRay .v { color:#036 } +.CodeRay .xt { color:#444 } @@ -122,19 +128,19 @@ ol.CodeRay li { white-space: pre; } 13 14 -
require 'coderay'
+	
require 'coderay'
 
-puts CodeRay.highlight('puts "Hello, World!"', :ruby)
+puts CodeRay.highlight('puts "Hello, World!"', :ruby)
 
-output = CodeRay.highlight_file($0, :line_numbers => :table)
-puts <<HTML
+output = CodeRay.highlight_file($0, :line_numbers => :table)
+puts <<HTML
 <html>
 <head>
-#{output.stylesheet true}
+#{output.stylesheet true}
 <body>
-#{output}
+#{output}
 </body>
-</html>
+</html>
 HTML
 
diff --git a/demo/demo_html.out b/demo/demo_html.out index c0efc3c..0014d49 100644 --- a/demo/demo_html.out +++ b/demo/demo_html.out @@ -2,7 +2,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + CodeRay HTML Encoder Example diff --git a/demo/demo_html2.out b/demo/demo_html2.out index 7bcf11f..326be92 100644 --- a/demo/demo_html2.out +++ b/demo/demo_html2.out @@ -2,7 +2,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + CodeRay HTML Encoder Example @@ -121,29 +127,29 @@ ol.CodeRay li { white-space: pre; }
10 11
-
require 'coderay'
+	
require 'coderay'
 
-# scan this file
-tokens = CodeRay.scan(File.read($0) * 1, :ruby)
+# 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 << '<hr />'
-out << tokens.div(:line_numbers => :inline, :line_number_start => 8)
+# output it with two styles of line numbers
+out = tokens.div(:line_numbers => :table)
+out << '<hr />'
+out << tokens.div(:line_numbers => :inline, :line_number_start => 8)
 
 puts out.page
 

-
 8 require 'coderay'
+	
 8 require 'coderay'
  9 
-10 # scan this file
-11 tokens = CodeRay.scan(File.read($0) * 1, :ruby)
+10 # scan this file
+11 tokens = CodeRay.scan(File.read($0) * 1, :ruby)
 12 
-13 # output it with two styles of line numbers
-14 out = tokens.div(:line_numbers => :table)
-15 out << '<hr />'
-16 out << tokens.div(:line_numbers => :inline, :line_number_start => 8)
+13 # output it with two styles of line numbers
+14 out = tokens.div(:line_numbers => :table)
+15 out << '<hr />'
+16 out << tokens.div(:line_numbers => :inline, :line_number_start => 8)
 17 
 18 puts out.page
 
diff --git a/demo/demo_html_list.out b/demo/demo_html_list.out index e9c99b2..81a687d 100644 --- a/demo/demo_html_list.out +++ b/demo/demo_html_list.out @@ -2,7 +2,7 @@ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> - + CodeRay HTML Encoder Example diff --git a/demo/demo_load_scanner.out b/demo/demo_load_scanner.out index 67ecac3..ea374f9 100644 --- a/demo/demo_load_scanner.out +++ b/demo/demo_load_scanner.out @@ -5,4 +5,4 @@ Require is also possible: CodeRay::Scanners::C See? Now load some mapped scanners: cpp and plain. Require all Scanners: -[[:c, CodeRay::Scanners::C], [:cpp, :c], [:delphi, CodeRay::Scanners::Delphi], [:irb, :ruby], [:pascal, :delphi], [:plain, CodeRay::Scanners::Plaintext], [:plaintext, CodeRay::Scanners::Plaintext], [:ruby, CodeRay::Scanners::Ruby]] +[[nil, :plain], [:c, CodeRay::Scanners::C], [:cpp, :c], [:delphi, CodeRay::Scanners::Delphi], [:html, CodeRay::Scanners::HTML], [:irb, :ruby], [:nitro_html, CodeRay::Scanners::NitroHTML], [:pascal, :delphi], [:plain, CodeRay::Scanners::Plaintext], [:plaintext, CodeRay::Scanners::Plaintext], [:rhtml, CodeRay::Scanners::RHTML], [:ruby, CodeRay::Scanners::Ruby], [:xhtml, :nitro_html], [:xml, :html]] diff --git a/demo/demo_more.out b/demo/demo_more.out index f945854..d960ae7 100644 --- a/demo/demo_more.out +++ b/demo/demo_more.out @@ -1,2 +1,2 @@ -Input: 4983B, Output: 22382B +Input: 4983B, Output: 22528B Take a look with your browser. diff --git a/demo/demo_simple.out b/demo/demo_simple.out index 5e349d5..4e41e3d 100644 --- a/demo/demo_simple.out +++ b/demo/demo_simple.out @@ -1 +1,2 @@ -puts 'Hello, world!' +puts 'Hello, world!' + -- cgit v1.2.1