coderay 1.0.0 → 1.0.0.598.pre

Sign up to get free protection for your applications and to get access to all the features.
Files changed (79) hide show
  1. data/FOLDERS +49 -0
  2. data/Rakefile +6 -5
  3. data/bin/coderay +74 -190
  4. data/bin/coderay_stylesheet +4 -0
  5. data/{README_INDEX.rdoc → lib/README} +20 -10
  6. data/lib/coderay.rb +60 -62
  7. data/lib/coderay/duo.rb +55 -2
  8. data/lib/coderay/encoder.rb +39 -52
  9. data/lib/coderay/encoders/_map.rb +7 -11
  10. data/lib/coderay/encoders/comment_filter.rb +61 -0
  11. data/lib/coderay/encoders/count.rb +26 -11
  12. data/lib/coderay/encoders/debug.rb +60 -11
  13. data/lib/coderay/encoders/div.rb +8 -9
  14. data/lib/coderay/encoders/filter.rb +52 -12
  15. data/lib/coderay/encoders/html.rb +113 -106
  16. data/lib/coderay/encoders/html/css.rb +7 -2
  17. data/lib/coderay/encoders/html/numbering.rb +27 -24
  18. data/lib/coderay/encoders/html/output.rb +58 -15
  19. data/lib/coderay/encoders/json.rb +44 -37
  20. data/lib/coderay/encoders/lines_of_code.rb +56 -9
  21. data/lib/coderay/encoders/null.rb +13 -6
  22. data/lib/coderay/encoders/page.rb +8 -8
  23. data/lib/coderay/encoders/span.rb +9 -10
  24. data/lib/coderay/encoders/statistic.rb +114 -51
  25. data/lib/coderay/encoders/terminal.rb +10 -7
  26. data/lib/coderay/encoders/text.rb +36 -17
  27. data/lib/coderay/encoders/token_kind_filter.rb +58 -1
  28. data/lib/coderay/encoders/xml.rb +11 -13
  29. data/lib/coderay/encoders/yaml.rb +14 -16
  30. data/lib/coderay/for_redcloth.rb +1 -1
  31. data/lib/coderay/helpers/file_type.rb +240 -125
  32. data/lib/coderay/helpers/gzip_simple.rb +123 -0
  33. data/lib/coderay/helpers/plugin.rb +307 -241
  34. data/lib/coderay/helpers/word_list.rb +126 -65
  35. data/lib/coderay/scanner.rb +103 -153
  36. data/lib/coderay/scanners/_map.rb +16 -18
  37. data/lib/coderay/scanners/c.rb +13 -13
  38. data/lib/coderay/scanners/cpp.rb +6 -6
  39. data/lib/coderay/scanners/css.rb +48 -47
  40. data/lib/coderay/scanners/debug.rb +55 -9
  41. data/lib/coderay/scanners/delphi.rb +4 -4
  42. data/lib/coderay/scanners/diff.rb +25 -43
  43. data/lib/coderay/scanners/groovy.rb +2 -2
  44. data/lib/coderay/scanners/html.rb +30 -107
  45. data/lib/coderay/scanners/java.rb +5 -6
  46. data/lib/coderay/scanners/java/builtin_types.rb +0 -2
  47. data/lib/coderay/scanners/java_script.rb +6 -6
  48. data/lib/coderay/scanners/json.rb +6 -7
  49. data/lib/coderay/scanners/nitro_xhtml.rb +136 -0
  50. data/lib/coderay/scanners/php.rb +12 -13
  51. data/lib/coderay/scanners/plaintext.rb +26 -0
  52. data/lib/coderay/scanners/python.rb +4 -4
  53. data/lib/coderay/scanners/{erb.rb → rhtml.rb} +11 -19
  54. data/lib/coderay/scanners/ruby.rb +208 -219
  55. data/lib/coderay/scanners/ruby/patterns.rb +85 -18
  56. data/lib/coderay/scanners/scheme.rb +136 -0
  57. data/lib/coderay/scanners/sql.rb +22 -29
  58. data/lib/coderay/scanners/yaml.rb +10 -11
  59. data/lib/coderay/styles/_map.rb +2 -2
  60. data/lib/coderay/styles/alpha.rb +104 -102
  61. data/lib/coderay/styles/cycnus.rb +143 -0
  62. data/lib/coderay/styles/murphy.rb +123 -0
  63. data/lib/coderay/token_kinds.rb +86 -87
  64. data/lib/coderay/tokens.rb +169 -26
  65. data/test/functional/basic.rb +14 -200
  66. data/test/functional/examples.rb +14 -20
  67. data/test/functional/for_redcloth.rb +8 -15
  68. data/test/functional/load_plugin_scanner.rb +11 -0
  69. data/test/functional/suite.rb +6 -9
  70. data/test/functional/vhdl.rb +126 -0
  71. data/test/functional/word_list.rb +79 -0
  72. metadata +129 -107
  73. data/lib/coderay/helpers/gzip.rb +0 -41
  74. data/lib/coderay/scanners/clojure.rb +0 -217
  75. data/lib/coderay/scanners/haml.rb +0 -168
  76. data/lib/coderay/scanners/ruby/string_state.rb +0 -71
  77. data/lib/coderay/scanners/text.rb +0 -26
  78. data/lib/coderay/tokens_proxy.rb +0 -55
  79. data/lib/coderay/version.rb +0 -3
data/FOLDERS ADDED
@@ -0,0 +1,49 @@
1
+ = CodeRay - folder structure
2
+
3
+ == bench - Benchmarking system
4
+
5
+ All benchmarking stuff goes here.
6
+
7
+ Test inputs are stored in files named <code>example.<lang></code>.
8
+ Test outputs go to <code>bench/test.<encoder-default-file-extension></code>.
9
+
10
+ Run <code>bench/bench.rb</code> to get a usage description.
11
+
12
+ Run <code>rake bench</code> to perform an example benchmark.
13
+
14
+
15
+ == bin - Scripts
16
+
17
+ Executional files for CodeRay.
18
+
19
+ coderay:: The CodeRay executable.
20
+ coderay_stylesheet:: Prints the default stylesheet.
21
+
22
+ == demo - Demos and functional tests
23
+
24
+ Demonstrational scripts to show of CodeRay's features.
25
+
26
+ Run them as functional tests with <code>rake test:demos</code>.
27
+
28
+
29
+ == etc - Lots of stuff
30
+
31
+ Some addidtional files for CodeRay, mainly graphics and Vim scripts.
32
+
33
+
34
+ == lib - CodeRay library code
35
+
36
+ This is the base directory for the CodeRay library.
37
+
38
+
39
+ == rake_helpers - Rake helper libraries
40
+
41
+ Some files to enhance Rake, including the Autumnal Rdoc template and some scripts.
42
+
43
+
44
+ == test - Tests
45
+
46
+ In the subfolder scanners/ are the scanners tests.
47
+ Each language has its own subfolder and sub-suite.
48
+
49
+ Run with <code>rake test</code>.
data/Rakefile CHANGED
@@ -1,7 +1,9 @@
1
1
  $:.unshift File.dirname(__FILE__) unless $:.include? '.'
2
+ require 'rake/rdoctask'
2
3
 
3
4
  ROOT = '.'
4
5
  LIB_ROOT = File.join ROOT, 'lib'
6
+ EXTRA_RDOC_FILES = %w(lib/README FOLDERS)
5
7
 
6
8
  task :default => :test
7
9
 
@@ -14,21 +16,20 @@ if File.directory? 'rake_tasks'
14
16
 
15
17
  else
16
18
 
17
- # fallback tasks when rake_tasks folder is not present (eg. in the distribution package)
19
+ # fallback tasks when rake_tasks folder is not present
18
20
  desc 'Run CodeRay tests (basic)'
19
21
  task :test do
20
22
  ruby './test/functional/suite.rb'
21
23
  ruby './test/functional/for_redcloth.rb'
22
24
  end
23
25
 
24
- gem 'rdoc' if defined? gem
25
- require 'rdoc/task'
26
26
  desc 'Generate documentation for CodeRay'
27
27
  Rake::RDocTask.new :doc do |rd|
28
28
  rd.title = 'CodeRay Documentation'
29
- rd.main = 'README_INDEX.rdoc'
29
+ rd.main = 'lib/README'
30
30
  rd.rdoc_files.add Dir['lib']
31
- rd.rdoc_files.add rd.main
31
+ rd.rdoc_files.add 'lib/README'
32
+ rd.rdoc_files.add 'FOLDERS'
32
33
  rd.rdoc_dir = 'doc'
33
34
  end
34
35
 
data/bin/coderay CHANGED
@@ -1,215 +1,99 @@
1
1
  #!/usr/bin/env ruby
2
- require 'coderay'
2
+ # CodeRay Executable
3
+ #
4
+ # Version: 0.2
5
+ # Author: murphy
3
6
 
4
- $options, args = ARGV.partition { |arg| arg[/^-[hv]$|--\w+/] }
5
- subcommand = args.first if /^\w/ === args.first
6
- subcommand = nil if subcommand && File.exist?(subcommand)
7
- args.delete subcommand
8
-
9
- def option? *options
10
- !($options & options).empty?
11
- end
12
-
13
- def tty?
14
- $stdout.tty? || option?('--tty')
7
+ def err msg
8
+ $stderr.puts msg
15
9
  end
16
10
 
17
- def version
18
- puts <<-USAGE
19
- CodeRay #{CodeRay::VERSION}
20
- USAGE
11
+ def read
12
+ if file = ARGV[2]
13
+ File.read file
14
+ else
15
+ $stdin.read
16
+ end
21
17
  end
22
18
 
23
- def help
24
- puts <<-HELP
25
- This is CodeRay #{CodeRay::VERSION}, a syntax highlighting tool for selected languages.
26
-
27
- usage:
28
- coderay [-language] [input] [-format] [output]
29
-
30
- defaults:
31
- language detect from input file name or shebang; fall back to plain text
32
- input STDIN
33
- format detect from output file name or use terminal; fall back to HTML
34
- output STDOUT
35
-
36
- common:
37
- coderay file.rb # highlight file to terminal
38
- coderay file.rb > file.html # highlight file to HTML page
39
- coderay file.rb -div > file.html # highlight file to HTML snippet
40
-
41
- configure output:
42
- coderay file.py output.json # output tokens as JSON
43
- coderay file.py -loc # count lines of code in Python file
44
-
45
- configure input:
46
- coderay -python file # specify the input language
47
- coderay -ruby # take input from STDIN
19
+ begin
20
+ require 'coderay'
48
21
 
49
- more:
50
- coderay stylesheet [style] # print CSS stylesheet
51
- HELP
52
- end
22
+ if ARGV.empty?
23
+ puts <<-USAGE
24
+ CodeRay #{CodeRay::VERSION} (http://coderay.rubychan.de)
53
25
 
54
- def commands
55
- puts <<-COMMANDS
56
- general:
57
- highlight code highlighting (default command, optional)
58
- stylesheet print the CSS stylesheet with the given name (aliases: style, css)
59
-
60
- about:
61
- list [of] list all available plugins (or just the scanners|encoders|styles|filetypes)
62
- commands print this list
63
- help show some help
64
- version print CodeRay version
65
- COMMANDS
66
- end
26
+ Usage:
27
+ coderay -<lang> [-<format>] < file > output
28
+ coderay file [-<format>]
67
29
 
68
- def print_list_of plugin_host
69
- plugins = plugin_host.all_plugins.map do |plugin|
70
- info = " #{plugin.plugin_id}: #{plugin.title}"
71
-
72
- aliases = (plugin.aliases - [:default]).map { |key| "-#{key}" }.sort_by { |key| key.size }
73
- if plugin.respond_to?(:file_extension) || !aliases.empty?
74
- additional_info = []
75
- additional_info << aliases.join(', ') unless aliases.empty?
76
- info << " (#{additional_info.join('; ')})"
77
- end
78
-
79
- info << ' <-- default' if plugin.aliases.include? :default
80
-
81
- info
30
+ Examples:
31
+ coderay -ruby -statistic < foo.rb
32
+ coderay -ruby < foo.rb # colorized output to terminal
33
+ coderay -ruby -page foo.rb # HTML page output to terminal
34
+ coderay -ruby -page foo.rb > foo.html # HTML page output to file
35
+ coderay codegen.c # generates codegen.c.html
36
+ USAGE
82
37
  end
83
- puts plugins.sort
84
- end
85
38
 
86
- if option? '-v', '--version'
87
- version
88
- end
39
+ first, second = ARGV
89
40
 
90
- if option? '-h', '--help'
91
- help
92
- end
93
-
94
- case subcommand
95
- when 'highlight', nil
96
- if ARGV.empty?
97
- version
98
- help
99
- else
100
- signature = args.map { |arg| arg[/^-/] ? '-' : 'f' }.join
101
- names = args.map { |arg| arg.sub(/^-/, '') }
102
- case signature
103
- when /^$/
104
- exit
105
- when /^ff?$/
106
- input_file, output_file, = *names
107
- when /^f-f?$/
108
- input_file, output_format, output_file, = *names
109
- when /^-ff?$/
110
- input_lang, input_file, output_file, = *names
111
- when /^-f-f?$/
112
- input_lang, input_file, output_format, output_file, = *names
113
- when /^--?f?$/
114
- input_lang, output_format, output_file, = *names
41
+ if first
42
+ if first[/-(\w+)/] == first
43
+ lang = $1
44
+ input = read
45
+ tokens = :scan
46
+ elsif first == '-'
47
+ lang = $1
48
+ input = read
49
+ tokens = :scan
115
50
  else
116
- $stdout = $stderr
117
- help
118
- puts
119
- puts "Unknown parameter order: #{args.join ' '}, expected: [-language] [input] [-format] [output]"
120
- exit 1
121
- end
122
-
123
- if input_file
124
- input_lang ||= CodeRay::FileType.fetch input_file, :text, true
51
+ file = first
52
+ tokens = CodeRay.scan_file file
53
+ output_filename, output_ext = file, /#{Regexp.escape(File.extname(file))}$/
125
54
  end
126
-
127
- if output_file
128
- output_format ||= CodeRay::FileType[output_file]
55
+ else
56
+ puts 'No lang/file given.'
57
+ exit 1
58
+ end
59
+
60
+ if second
61
+ if second[/-(\w+)/] == second
62
+ format = $1
129
63
  else
130
- output_format ||= :terminal
64
+ raise 'invalid format (must be -xxx)'
131
65
  end
132
-
133
- output_format = :page if output_format.to_s == 'html'
134
-
135
- if input_file
136
- input = File.read input_file
66
+ else
67
+ if $stdout.tty?
68
+ format = :term
137
69
  else
138
- input = $stdin.read
139
- end
140
-
141
- begin
142
- file =
143
- if output_file
144
- File.open output_file, 'w'
145
- else
146
- $stdout.sync = true
147
- $stdout
148
- end
149
- CodeRay.encode(input, input_lang, output_format, :out => file)
150
- file.puts
151
- rescue CodeRay::PluginHost::PluginNotFound => boom
152
- $stdout = $stderr
153
- if boom.message[/CodeRay::(\w+)s could not load plugin :?(.*?): /]
154
- puts "I don't know the #$1 \"#$2\"."
155
- else
156
- puts boom.message
157
- end
158
- # puts "I don't know this plugin: #{boom.message[/Could not load plugin (.*?): /, 1]}."
159
- rescue CodeRay::Scanners::Scanner::ScanError # FIXME: rescue Errno::EPIPE
160
- # this is sometimes raised by pagers; ignore [TODO: wtf?]
161
- ensure
162
- file.close if output_file
70
+ $stderr.puts 'No format given; setting to default (HTML Page).'
71
+ format = :page
163
72
  end
164
73
  end
165
- when 'li', 'list'
166
- arg = args.first && args.first.downcase
167
- if [nil, 's', 'sc', 'scanner', 'scanners'].include? arg
168
- puts 'input languages (Scanners):'
169
- print_list_of CodeRay::Scanners
170
- end
171
-
172
- if [nil, 'e', 'en', 'enc', 'encoder', 'encoders'].include? arg
173
- puts 'output formats (Encoders):'
174
- print_list_of CodeRay::Encoders
175
- end
176
74
 
177
- if [nil, 'st', 'style', 'styles'].include? arg
178
- puts 'CSS themes for HTML output (Styles):'
179
- print_list_of CodeRay::Styles
75
+ if tokens == :scan
76
+ output = CodeRay::Duo[lang => format].highlight input
77
+ else
78
+ output = tokens.encode format
180
79
  end
181
-
182
- if [nil, 'f', 'ft', 'file', 'filetype', 'filetypes'].include? arg
183
- puts 'recognized file types:'
184
-
185
- filetypes = Hash.new { |h, k| h[k] = [] }
186
- CodeRay::FileType::TypeFromExt.inject filetypes do |types, (ext, type)|
187
- types[type.to_s] << ".#{ext}"
188
- types
189
- end
190
- CodeRay::FileType::TypeFromName.inject filetypes do |types, (name, type)|
191
- types[type.to_s] << name
192
- types
193
- end
194
-
195
- filetypes.sort.each do |type, exts|
196
- puts " #{type}: #{exts.sort_by { |ext| ext.size }.join(', ')}"
80
+ out = $stdout
81
+ if output_filename
82
+ output_filename += '.' + CodeRay::Encoders[format]::FILE_EXTENSION.to_s
83
+ if File.exist? output_filename
84
+ err 'File %s already exists.' % output_filename
85
+ exit
86
+ else
87
+ out = File.open output_filename, 'w'
88
+ puts "Writing to #{output_filename}..."
197
89
  end
198
90
  end
199
- when 'stylesheet', 'style', 'css'
200
- puts CodeRay::Encoders[:html]::CSS.new(args.first).stylesheet
201
- when 'commands'
202
- commands
203
- when 'help'
204
- help
205
- else
206
- $stdout = $stderr
207
- help
208
- puts
209
- if subcommand[/\A\w+\z/]
210
- puts "Unknown command: #{subcommand}"
211
- else
212
- puts "File not found: #{subcommand}"
213
- end
91
+ out.puts output
92
+
93
+ rescue => boom
94
+ err "Error: #{boom.message}\n"
95
+ err boom.backtrace
96
+ err '-' * 50
97
+ err ARGV
214
98
  exit 1
215
99
  end
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'coderay'
3
+
4
+ puts CodeRay::Encoders[:html]::CSS.new.stylesheet
@@ -1,45 +1,57 @@
1
1
  = CodeRay
2
2
 
3
- Tired of blue'n'gray? Try the original version of this documentation on
4
- coderay.rubychan.de[http://coderay.rubychan.de/doc/] :-)
3
+ [- Tired of blue'n'gray? Try the original version of this documentation on
4
+ coderay.rubychan.de[http://coderay.rubychan.de/doc/] (use Ctrl+Click to open it in its own frame.) -]
5
5
 
6
6
  == About
7
-
8
7
  CodeRay is a Ruby library for syntax highlighting.
9
8
 
10
- You put your code in, and you get it back colored; Keywords, strings,
11
- floats, comments - all in different colors. And with line numbers.
9
+ Syntax highlighting means: You put your code in, and you get it back colored;
10
+ Keywords, strings, floats, comments - all in different colors.
11
+ And with line numbers.
12
12
 
13
13
  *Syntax* *Highlighting*...
14
14
  * makes code easier to read and maintain
15
15
  * lets you detect syntax errors faster
16
16
  * helps you to understand the syntax of a language
17
17
  * looks nice
18
- * is what everybody wants to have on their website
18
+ * is what everybody should have on their website
19
19
  * solves all your problems and makes the girls run after you
20
20
 
21
+ Version: 0.9.2
22
+ Author:: murphy (Kornelius Kalnbach)
23
+ Contact:: murphy rubychan de
24
+ Website:: coderay.rubychan.de[http://coderay.rubychan.de]
25
+ License:: GNU LGPL; see LICENSE file in the main directory.
21
26
 
22
27
  == Installation
23
28
 
29
+ You need RubyGems[http://rubyforge.org/frs/?group_id=126].
30
+
24
31
  % gem install coderay
25
32
 
26
33
 
27
34
  === Dependencies
28
35
 
29
- CodeRay needs Ruby 1.8.7+ or 1.9.2+. It also runs on Rubinius and JRuby.
36
+ CodeRay needs Ruby 1.8.6 or later. It also runs with Ruby 1.9.1+ and JRuby 1.1+.
30
37
 
31
38
 
32
39
  == Example Usage
40
+ (Forgive me, but this is not highlighted.)
33
41
 
34
42
  require 'coderay'
35
43
 
36
- html = CodeRay.scan("puts 'Hello, world!'", :ruby).div(:line_numbers => :table)
44
+ tokens = CodeRay.scan "puts 'Hello, world!'", :ruby
45
+ page = tokens.html :line_numbers => :inline, :wrap => :page
46
+ puts page
37
47
 
38
48
 
39
49
  == Documentation
40
50
 
41
51
  See CodeRay.
42
52
 
53
+ Please report errors in this documentation to <murphy rubychan de>.
54
+
43
55
 
44
56
  == Credits
45
57
 
@@ -111,8 +123,6 @@ Where would we be without all those people?
111
123
  less useless
112
124
  * Term::ANSIColor[http://term-ansicolor.rubyforge.org/]
113
125
  * PLEAC[http://pleac.sourceforge.net/] code examples
114
- * Github
115
- * Travis CI (http://travis-ci.org/rubychan/github)
116
126
 
117
127
  === Free
118
128