coderay 0.7.1.147 → 0.7.2.165

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/bin/coderay +54 -56
  2. data/demo/suite.rb +54 -54
  3. data/lib/coderay.rb +187 -187
  4. data/lib/coderay/duo.rb +29 -29
  5. data/lib/coderay/encoder.rb +173 -173
  6. data/lib/coderay/encoders/_map.rb +8 -8
  7. data/lib/coderay/encoders/count.rb +21 -21
  8. data/lib/coderay/encoders/debug.rb +46 -46
  9. data/lib/coderay/encoders/div.rb +20 -20
  10. data/lib/coderay/encoders/html.rb +249 -245
  11. data/lib/coderay/encoders/html/classes.rb +73 -73
  12. data/lib/coderay/encoders/html/css.rb +65 -65
  13. data/lib/coderay/encoders/html/numerization.rb +122 -122
  14. data/lib/coderay/encoders/html/output.rb +195 -195
  15. data/lib/coderay/encoders/null.rb +26 -26
  16. data/lib/coderay/encoders/page.rb +21 -21
  17. data/lib/coderay/encoders/span.rb +20 -20
  18. data/lib/coderay/encoders/statistic.rb +81 -81
  19. data/lib/coderay/encoders/text.rb +33 -33
  20. data/lib/coderay/encoders/tokens.rb +44 -44
  21. data/lib/coderay/encoders/xml.rb +71 -71
  22. data/lib/coderay/encoders/yaml.rb +22 -22
  23. data/lib/coderay/helpers/filetype.rb +152 -153
  24. data/lib/coderay/helpers/gzip_simple.rb +67 -68
  25. data/lib/coderay/helpers/plugin.rb +297 -297
  26. data/lib/coderay/helpers/word_list.rb +46 -47
  27. data/lib/coderay/scanner.rb +238 -238
  28. data/lib/coderay/scanners/_map.rb +15 -14
  29. data/lib/coderay/scanners/c.rb +163 -155
  30. data/lib/coderay/scanners/delphi.rb +131 -129
  31. data/lib/coderay/scanners/html.rb +174 -167
  32. data/lib/coderay/scanners/nitro_xhtml.rb +130 -0
  33. data/lib/coderay/scanners/plaintext.rb +15 -15
  34. data/lib/coderay/scanners/rhtml.rb +73 -65
  35. data/lib/coderay/scanners/ruby.rb +404 -397
  36. data/lib/coderay/scanners/ruby/patterns.rb +216 -216
  37. data/lib/coderay/scanners/xml.rb +18 -18
  38. data/lib/coderay/style.rb +20 -20
  39. data/lib/coderay/styles/_map.rb +3 -3
  40. data/lib/coderay/styles/cycnus.rb +18 -18
  41. data/lib/coderay/styles/murphy.rb +18 -18
  42. data/lib/coderay/tokens.rb +322 -322
  43. metadata +86 -86
  44. data/lib/coderay/scanners/nitro_html.rb +0 -125
  45. data/lib/coderay/scanners/yaml.rb +0 -85
@@ -1,18 +1,18 @@
1
1
  #!/usr/bin/env ruby
2
2
  # CodeRay Executable
3
- #
3
+ #
4
4
  # Version: 0.1
5
5
  # Author: murphy
6
6
 
7
7
  def err msg
8
- $stderr.puts msg
8
+ $stderr.puts msg
9
9
  end
10
10
 
11
11
  begin
12
- require 'coderay'
12
+ require 'coderay'
13
13
 
14
- if ARGV.empty?
15
- puts <<-USAGE
14
+ if ARGV.empty?
15
+ puts <<-USAGE
16
16
  CodeRay #{CodeRay::Version} (http://rd.cYcnus.de/coderay)
17
17
  Usage:
18
18
  coderay -<lang> [-<format>] < file > output
@@ -20,60 +20,58 @@ Usage:
20
20
  Example:
21
21
  coderay -ruby -statistic < foo.rb
22
22
  coderay codegen.c # generates codegen.c.html
23
- USAGE
24
- end
25
-
26
- first, second = ARGV
23
+ USAGE
24
+ end
27
25
 
28
- if first
29
- if first[/-(\w+)/] == first
30
- lang = $1.to_sym
31
- input = $stdin.read
32
- tokens = CodeRay.scan input, lang
33
- elsif first == '-'
34
- lang = $1.to_sym
35
- input = $stdin.read
36
- tokens = CodeRay.scan input, lang
37
- else
38
- file = first
39
- tokens = CodeRay.scan_file file
40
- output_filename, output_ext = file, /#{Regexp.escape(File.extname(file))}$/
41
- end
42
- else
43
- puts 'No lang/file given.'
44
- exit 1
45
- end
26
+ first, second = ARGV
46
27
 
47
- if second
48
- if second[/-(\w+)/] == second
49
- format = $1.to_sym
50
- else
51
- raise 'Invalid format (must be -xxx).'
52
- end
53
- else
54
- $stderr.puts 'No format given; setting to default (HTML Page)'
55
- format = :page
56
- end
28
+ if first
29
+ if first[/-(\w+)/] == first
30
+ lang = $1.to_sym
31
+ input = $stdin.read
32
+ tokens = CodeRay.scan input, lang
33
+ elsif first == '-'
34
+ lang = $1.to_sym
35
+ input = $stdin.read
36
+ tokens = CodeRay.scan input, lang
37
+ else
38
+ file = first
39
+ tokens = CodeRay.scan_file file
40
+ output_filename, output_ext = file, /#{Regexp.escape(File.extname(file))}$/
41
+ end
42
+ else
43
+ puts 'No lang/file given.'
44
+ exit 1
45
+ end
57
46
 
58
- output = tokens.encode format
59
- out = $stdout
60
- if output_filename
61
- output_filename += '.' + CodeRay::Encoders[format]::FILE_EXTENSION
62
- if File.exist? output_filename
63
- err 'File %s already exists.' % output_filename
64
- exit
65
- else
66
- out = File.open output_filename, 'w'
67
- end
68
- else
69
-
70
- end
71
- out.print output
47
+ if second
48
+ if second[/-(\w+)/] == second
49
+ format = $1.to_sym
50
+ else
51
+ raise 'Invalid format (must be -xxx).'
52
+ end
53
+ else
54
+ $stderr.puts 'No format given; setting to default (HTML Page)'
55
+ format = :page
56
+ end
57
+
58
+ output = tokens.encode format
59
+ out = $stdout
60
+ if output_filename
61
+ output_filename += '.' + CodeRay::Encoders[format]::FILE_EXTENSION
62
+ if File.exist? output_filename
63
+ err 'File %s already exists.' % output_filename
64
+ exit
65
+ else
66
+ out = File.open output_filename, 'w'
67
+ end
68
+ end
69
+ out.print output
72
70
 
73
71
  rescue => boom
74
- err "Error: #{boom.message}\n"
75
- err boom.backtrace
76
- err '-' * 50
77
- err ARGV.options
78
- exit 1
72
+ err "Error: #{boom.message}\n"
73
+ err boom.backtrace
74
+ err '-' * 50
75
+ err ARGV.options
76
+ exit 1
79
77
  end
@@ -7,46 +7,46 @@ require 'test/unit'
7
7
  include Test::Unit
8
8
 
9
9
  class CodeRaySuite < TestCase
10
-
11
- def self.dir &block
12
- @dir ||= File.dirname(__FILE__)
13
- if block
14
- Dir.chdir @dir, &block
15
- end
16
- @dir
17
- end
18
-
19
- def dir &block
20
- self.class.dir(&block)
21
- end
22
-
23
- def test_ALL
24
- dir do
25
- for input in Dir["demo_*.rb"] - %w(demo_server.rb demo_stream.rb)
26
- puts "[ testing #{input}... ]"
27
- name = File.basename(input, ".rb")
28
- output = name + '.out'
29
- code = File.open(input, 'rb') { |f| break f.read }
30
-
31
- result = `ruby -wI../lib #{input}`
32
-
33
- if File.exist? output
34
- expected = File.read output
35
- ok = expected == result
36
- computed = output.sub('.out', '.computed')
37
- unless ok
38
- File.open(computed, 'w') { |f| f.write result }
39
- print `gvimdiff #{output} #{computed}` if $DEBUG
40
- end
41
- assert(ok, "Output error: #{computed} != #{output}") unless $DEBUG
42
- else
43
- File.open(output, 'w') do |f| f.write result end
44
- puts "New test: #{output}"
45
- end
46
-
47
- end
48
- end
49
- end
10
+
11
+ def self.dir &block
12
+ @dir ||= File.dirname(__FILE__)
13
+ if block
14
+ Dir.chdir @dir, &block
15
+ end
16
+ @dir
17
+ end
18
+
19
+ def dir &block
20
+ self.class.dir(&block)
21
+ end
22
+
23
+ def test_ALL
24
+ dir do
25
+ for input in Dir["demo_*.rb"] - %w(demo_server.rb demo_stream.rb)
26
+ puts "[ testing #{input}... ]"
27
+ name = File.basename(input, ".rb")
28
+ output = name + '.out'
29
+ code = File.open(input, 'rb') { |f| break f.read }
30
+
31
+ result = `ruby -wI../lib #{input}`
32
+
33
+ if File.exist? output
34
+ expected = File.read output
35
+ ok = expected == result
36
+ computed = output.sub('.out', '.computed')
37
+ unless ok
38
+ File.open(computed, 'w') { |f| f.write result }
39
+ print `gvimdiff #{output} #{computed}` if $DEBUG
40
+ end
41
+ assert(ok, "Output error: #{computed} != #{output}") unless $DEBUG
42
+ else
43
+ File.open(output, 'w') do |f| f.write result end
44
+ puts "New test: #{output}"
45
+ end
46
+
47
+ end
48
+ end
49
+ end
50
50
 
51
51
  end
52
52
 
@@ -55,28 +55,28 @@ $suite = TestSuite.new 'CodeRay Demos Test'
55
55
  $suite << CodeRaySuite.suite
56
56
 
57
57
  def load_suite name
58
- begin
59
- require name + '/suite.rb'
60
- rescue LoadError
61
- $stderr.puts <<-ERR
58
+ begin
59
+ require name + '/suite.rb'
60
+ rescue LoadError
61
+ $stderr.puts <<-ERR
62
62
 
63
63
  !! Folder #{File.split(__FILE__).first + '/' + name} not found
64
-
65
- ERR
66
- false
67
- end
64
+
65
+ ERR
66
+ false
67
+ end
68
68
  end
69
69
 
70
70
  if subsuite = ARGV.find { |a| break $1 if a[/^([^-].*)/] }
71
- load_suite(subsuite) or exit
71
+ load_suite(subsuite) or exit
72
72
  else
73
- Dir[mydir + '/*/'].each { |suite| load_suite suite }
73
+ Dir[mydir + '/*/'].each { |suite| load_suite suite }
74
74
  end
75
75
 
76
76
  if ARGV.include? '-f'
77
- require 'test/unit/ui/fox/testrunner'
78
- UI::Fox::TestRunner.run $suite
77
+ require 'test/unit/ui/fox/testrunner'
78
+ UI::Fox::TestRunner.run $suite
79
79
  else
80
- require 'test/unit/ui/console/testrunner'
81
- UI::Console::TestRunner.run $suite
80
+ require 'test/unit/ui/console/testrunner'
81
+ UI::Console::TestRunner.run $suite
82
82
  end
@@ -1,6 +1,6 @@
1
1
  # = CodeRay Library
2
2
  #
3
- # $Id: coderay.rb 141 2006-05-11 23:32:49Z murphy $
3
+ # $Id: coderay.rb 162 2006-07-11 06:03:43Z murphy $
4
4
  #
5
5
  # CodeRay is a Ruby library for syntax highlighting.
6
6
  #
@@ -67,24 +67,24 @@
67
67
  # * All methods take an optional hash as last parameter, +options+, that is send to
68
68
  # the Encoder / Scanner.
69
69
  # * Input and language are always sorted in this order: +code+, +lang+.
70
- # (This is in alphabetical order, if you need a mnemonic ;)
70
+ # (This is in alphabetical order, if you need a mnemonic ;)
71
71
  #
72
72
  # You should be able to highlight everything you want just using these methods;
73
73
  # so there is no need to dive into CodeRay's deep class hierarchy.
74
74
  #
75
75
  # The examples in the demo directory demonstrate common cases using this interface.
76
- #
76
+ #
77
77
  # = Basic Access Ways
78
78
  #
79
79
  # Read this to get a general view what CodeRay provides.
80
80
  #
81
81
  # == Scanning
82
- #
83
- # Scanning means analysing an input string, splitting it up into Tokens.
84
- # Each Token knows about what type it is: string, comment, class name, etc.
82
+ #
83
+ # Scanning means analysing an input string, splitting it up into Tokens.
84
+ # Each Token knows about what type it is: string, comment, class name, etc.
85
85
  #
86
- # Each +lang+ (language) has its own Scanner; for example, <tt>:ruby</tt> code is
87
- # handled by CodeRay::Scanners::Ruby.
86
+ # Each +lang+ (language) has its own Scanner; for example, <tt>:ruby</tt> code is
87
+ # handled by CodeRay::Scanners::Ruby.
88
88
  #
89
89
  # CodeRay.scan:: Scan a string in a given language into Tokens.
90
90
  # This is the most common method to use.
@@ -108,212 +108,212 @@
108
108
  #
109
109
  # Streaming saves RAM by running Scanner and Encoder in some sort of
110
110
  # pipe mode; see TokenStream.
111
- #
111
+ #
112
112
  # CodeRay.scan_stream:: Scan in stream mode.
113
- #
114
- # == All-in-One Encoding
113
+ #
114
+ # == All-in-One Encoding
115
115
  #
116
116
  # CodeRay.encode:: Highlight a string with a given input and output format.
117
117
  #
118
118
  # == Instanciating
119
- #
120
- # You can use an Encoder instance to highlight multiple inputs. This way, the setup
121
- # for this Encoder must only be done once.
122
- #
119
+ #
120
+ # You can use an Encoder instance to highlight multiple inputs. This way, the setup
121
+ # for this Encoder must only be done once.
122
+ #
123
123
  # CodeRay.encoder:: Create an Encoder instance with format and options.
124
124
  #
125
125
  # There is no CodeRay.scanner method because Scanners are bound to an input string
126
126
  # on creation; you can't re-use them with another string.
127
127
  #
128
- # The scanning methods provide more flexibility; we recommend to use these.
128
+ # The scanning methods provide more flexibility; we recommend to use these.
129
129
  module CodeRay
130
-
131
- # Version: Major.Minor.Teeny[.Revision]
132
- # Major: 0 for pre-release
133
- # Minor: odd for beta, even for stable
134
- # Teeny: development state
135
- # Revision: Subversion Revision number (generated on rake)
136
- Version = '0.7.1'
137
-
138
- require 'coderay/tokens'
139
- require 'coderay/scanner'
140
- require 'coderay/encoder'
141
- require 'coderay/duo'
142
- require 'coderay/style'
143
130
 
131
+ # Version: Major.Minor.Teeny[.Revision]
132
+ # Major: 0 for pre-release
133
+ # Minor: odd for beta, even for stable
134
+ # Teeny: development state
135
+ # Revision: Subversion Revision number (generated on rake)
136
+ Version = '0.7.2'
137
+
138
+ require 'coderay/tokens'
139
+ require 'coderay/scanner'
140
+ require 'coderay/encoder'
141
+ require 'coderay/duo'
142
+ require 'coderay/style'
143
+
144
+
145
+ class << self
146
+
147
+ # Scans the given +code+ (a String) with the Scanner for +lang+.
148
+ #
149
+ # This is a simple way to use CodeRay. Example:
150
+ # require 'coderay'
151
+ # page = CodeRay.scan("puts 'Hello, world!'", :ruby).html
152
+ #
153
+ # See also demo/demo_simple.
154
+ def scan code, lang, options = {}, &block
155
+ scanner = Scanners[lang].new code, options, &block
156
+ scanner.tokenize
157
+ end
158
+
159
+ # Scans +filename+ (a path to a code file) with the Scanner for +lang+.
160
+ #
161
+ # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to
162
+ # determine it. If it cannot find out what type it is, it uses
163
+ # CodeRay::Scanners::Plaintext.
164
+ #
165
+ # Calls CodeRay.scan.
166
+ #
167
+ # Example:
168
+ # require 'coderay'
169
+ # page = CodeRay.scan_file('some_c_code.c').html
170
+ def scan_file filename, lang = :auto, options = {}, &block
171
+ file = IO.read filename
172
+ if lang == :auto
173
+ require 'coderay/helpers/filetype'
174
+ lang = FileType.fetch filename, :plaintext, true
175
+ end
176
+ scan file, lang, options = {}, &block
177
+ end
178
+
179
+ # Scan the +code+ (a string) with the scanner for +lang+.
180
+ #
181
+ # Calls scan.
182
+ #
183
+ # See CodeRay.scan.
184
+ def scan_stream code, lang, options = {}, &block
185
+ options[:stream] = true
186
+ scan code, lang, options, &block
187
+ end
188
+
189
+ # Encode a string in Streaming mode.
190
+ #
191
+ # This starts scanning +code+ with the the Scanner for +lang+
192
+ # while encodes the output with the Encoder for +format+.
193
+ # +options+ will be passed to the Encoder.
194
+ #
195
+ # See CodeRay::Encoder.encode_stream
196
+ def encode_stream code, lang, format, options = {}
197
+ encoder(format, options).encode_stream code, lang, options
198
+ end
144
199
 
145
- class << self
200
+ # Encode a string.
201
+ #
202
+ # This scans +code+ with the the Scanner for +lang+ and then
203
+ # encodes it with the Encoder for +format+.
204
+ # +options+ will be passed to the Encoder.
205
+ #
206
+ # See CodeRay::Encoder.encode
207
+ def encode code, lang, format, options = {}
208
+ encoder(format, options).encode code, lang, options
209
+ end
146
210
 
147
- # Scans the given +code+ (a String) with the Scanner for +lang+.
148
- #
149
- # This is a simple way to use CodeRay. Example:
150
- # require 'coderay'
151
- # page = CodeRay.scan("puts 'Hello, world!'", :ruby).html
152
- #
153
- # See also demo/demo_simple.
154
- def scan code, lang, options = {}, &block
155
- scanner = Scanners[lang].new code, options, &block
156
- scanner.tokenize
157
- end
211
+ # Highlight a string into a HTML <div>.
212
+ #
213
+ # CSS styles use classes, so you have to include a stylesheet
214
+ # in your output.
215
+ #
216
+ # See encode.
217
+ def highlight code, lang, options = { :css => :class }, format = :div
218
+ encode code, lang, format, options
219
+ end
158
220
 
159
- # Scans +filename+ (a path to a code file) with the Scanner for +lang+.
160
- #
161
- # If +lang+ is :auto or omitted, the CodeRay::FileType module is used to
162
- # determine it. If it cannot find out what type it is, it uses
163
- # CodeRay::Scanners::Plaintext.
164
- #
165
- # Calls CodeRay.scan.
166
- #
167
- # Example:
168
- # require 'coderay'
169
- # page = CodeRay.scan_file('some_c_code.c').html
170
- def scan_file filename, lang = :auto, options = {}, &block
171
- file = IO.read filename
172
- if lang == :auto
173
- require 'coderay/helpers/filetype'
174
- lang = FileType.fetch filename, :plaintext, true
175
- end
176
- scan file, lang, options = {}, &block
177
- end
221
+ # Encode pre-scanned Tokens.
222
+ # Use this together with CodeRay.scan:
223
+ #
224
+ # require 'coderay'
225
+ #
226
+ # # Highlight a short Ruby code example in a HTML span
227
+ # tokens = CodeRay.scan '1 + 2', :ruby
228
+ # puts CodeRay.encode_tokens(tokens, :span)
229
+ #
230
+ def encode_tokens tokens, format, options = {}
231
+ encoder(format, options).encode_tokens tokens, options
232
+ end
178
233
 
179
- # Scan the +code+ (a string) with the scanner for +lang+.
180
- #
181
- # Calls scan.
182
- #
183
- # See CodeRay.scan.
184
- def scan_stream code, lang, options = {}, &block
185
- options[:stream] = true
186
- scan code, lang, options, &block
187
- end
234
+ # Encodes +filename+ (a path to a code file) with the Scanner for +lang+.
235
+ #
236
+ # See CodeRay.scan_file.
237
+ # Notice that the second argument is the output +format+, not the input language.
238
+ #
239
+ # Example:
240
+ # require 'coderay'
241
+ # page = CodeRay.encode_file 'some_c_code.c', :html
242
+ def encode_file filename, format, options = {}
243
+ tokens = scan_file filename, :auto, get_scanner_options(options)
244
+ encode_tokens tokens, format, options
245
+ end
188
246
 
189
- # Encode a string in Streaming mode.
190
- #
191
- # This starts scanning +code+ with the the Scanner for +lang+
192
- # while encodes the output with the Encoder for +format+.
193
- # +options+ will be passed to the Encoder.
194
- #
195
- # See CodeRay::Encoder.encode_stream
196
- def encode_stream code, lang, format, options = {}
197
- encoder(format, options).encode_stream code, lang, options
198
- end
247
+ # Highlight a file into a HTML <div>.
248
+ #
249
+ # CSS styles use classes, so you have to include a stylesheet
250
+ # in your output.
251
+ #
252
+ # See encode.
253
+ def highlight_file filename, options = { :css => :class }, format = :div
254
+ encode_file filename, format, options
255
+ end
199
256
 
200
- # Encode a string.
201
- #
202
- # This scans +code+ with the the Scanner for +lang+ and then
203
- # encodes it with the Encoder for +format+.
204
- # +options+ will be passed to the Encoder.
205
- #
206
- # See CodeRay::Encoder.encode
207
- def encode code, lang, format, options = {}
208
- encoder(format, options).encode code, lang, options
209
- end
210
-
211
- # Highlight a string into a HTML <div>.
212
- #
213
- # CSS styles use classes, so you have to include a stylesheet
214
- # in your output.
215
- #
216
- # See encode.
217
- def highlight code, lang, options = { :css => :class }, format = :div
218
- encode code, lang, format, options
219
- end
220
-
221
- # Encode pre-scanned Tokens.
222
- # Use this together with CodeRay.scan:
223
- #
224
- # require 'coderay'
225
- #
226
- # # Highlight a short Ruby code example in a HTML span
227
- # tokens = CodeRay.scan '1 + 2', :ruby
228
- # puts CodeRay.encode_tokens(tokens, :span)
229
- #
230
- def encode_tokens tokens, format, options = {}
231
- encoder(format, options).encode_tokens tokens, options
232
- end
257
+ # Finds the Encoder class for +format+ and creates an instance, passing
258
+ # +options+ to it.
259
+ #
260
+ # Example:
261
+ # require 'coderay'
262
+ #
263
+ # stats = CodeRay.encoder(:statistic)
264
+ # stats.encode("puts 17 + 4\n", :ruby)
265
+ #
266
+ # puts '%d out of %d tokens have the kind :integer.' % [
267
+ # stats.type_stats[:integer].count,
268
+ # stats.real_token_count
269
+ # ]
270
+ # #-> 2 out of 4 tokens have the kind :integer.
271
+ def encoder format, options = {}
272
+ Encoders[format].new options
273
+ end
233
274
 
234
- # Encodes +filename+ (a path to a code file) with the Scanner for +lang+.
235
- #
236
- # See CodeRay.scan_file.
237
- # Notice that the second argument is the output +format+, not the input language.
238
- #
239
- # Example:
240
- # require 'coderay'
241
- # page = CodeRay.encode_file 'some_c_code.c', :html
242
- def encode_file filename, format, options = {}
243
- tokens = scan_file filename, :auto, get_scanner_options(options)
244
- encode_tokens tokens, format, options
245
- end
275
+ # Finds the Scanner class for +lang+ and creates an instance, passing
276
+ # +options+ to it.
277
+ #
278
+ # See Scanner.new.
279
+ def scanner lang, options = {}
280
+ Scanners[lang].new '', options
281
+ end
246
282
 
247
- # Highlight a file into a HTML <div>.
248
- #
249
- # CSS styles use classes, so you have to include a stylesheet
250
- # in your output.
251
- #
252
- # See encode.
253
- def highlight_file filename, options = { :css => :class }, format = :div
254
- encode_file filename, format, options
255
- end
256
-
257
- # Finds the Encoder class for +format+ and creates an instance, passing
258
- # +options+ to it.
259
- #
260
- # Example:
261
- # require 'coderay'
262
- #
263
- # stats = CodeRay.encoder(:statistic)
264
- # stats.encode("puts 17 + 4\n", :ruby)
265
- #
266
- # puts '%d out of %d tokens have the kind :integer.' % [
267
- # stats.type_stats[:integer].count,
268
- # stats.real_token_count
269
- # ]
270
- # #-> 2 out of 4 tokens have the kind :integer.
271
- def encoder format, options = {}
272
- Encoders[format].new options
273
- end
283
+ # Extract the options for the scanner from the +options+ hash.
284
+ #
285
+ # Returns an empty Hash if <tt>:scanner_options</tt> is not set.
286
+ #
287
+ # This is used if a method like CodeRay.encode has to provide options
288
+ # for Encoder _and_ scanner.
289
+ def get_scanner_options options
290
+ options.fetch :scanner_options, {}
291
+ end
274
292
 
275
- # Finds the Scanner class for +lang+ and creates an instance, passing
276
- # +options+ to it.
277
- #
278
- # See Scanner.new.
279
- def scanner lang, options = {}
280
- Scanners[lang].new '', options
281
- end
293
+ end
282
294
 
283
- # Extract the options for the scanner from the +options+ hash.
284
- #
285
- # Returns an empty Hash if <tt>:scanner_options</tt> is not set.
286
- #
287
- # This is used if a method like CodeRay.encode has to provide options
288
- # for Encoder _and_ scanner.
289
- def get_scanner_options options
290
- options.fetch :scanner_options, {}
291
- end
295
+ # This Exception is raised when you try to stream with something that is not
296
+ # capable of streaming.
297
+ class NotStreamableError < Exception
298
+ def initialize obj
299
+ @obj = obj
300
+ end
292
301
 
293
- end
302
+ def to_s
303
+ '%s is not Streamable!' % @obj.class
304
+ end
305
+ end
294
306
 
295
- # This Exception is raised when you try to stream with something that is not
296
- # capable of streaming.
297
- class NotStreamableError < Exception
298
- def initialize obj
299
- @obj = obj
300
- end
307
+ # A dummy module that is included by subclasses of CodeRay::Scanner an CodeRay::Encoder
308
+ # to show that they are able to handle streams.
309
+ module Streamable
310
+ end
301
311
 
302
- def to_s
303
- '%s is not Streamable!' % @obj.class
304
- end
305
- end
306
-
307
- # A dummy module that is included by subclasses of CodeRay::Scanner an CodeRay::Encoder
308
- # to show that they are able to handle streams.
309
- module Streamable
310
- end
311
-
312
312
  end
313
313
 
314
314
  # Run a test script.
315
315
  if $0 == __FILE__
316
- $stderr.print 'Press key to print demo.'; gets
317
- code = File.read($0)[/module CodeRay.*/m]
318
- print CodeRay.scan(code, :ruby).html
316
+ $stderr.print 'Press key to print demo.'; gets
317
+ code = File.read($0)[/module CodeRay.*/m]
318
+ print CodeRay.scan(code, :ruby).html
319
319
  end