Module: CodeRay
- Defined in:
- lib/coderay.rb,
lib/coderay/duo.rb,
lib/coderay/style.rb,
lib/coderay/tokens.rb,
lib/coderay/encoder.rb,
lib/coderay/scanner.rb,
lib/coderay/scanners/c.rb,
lib/coderay/styles/_map.rb,
lib/coderay/encoders/div.rb,
lib/coderay/encoders/xml.rb,
lib/coderay/for_redcloth.rb,
lib/coderay/scanners/cpp.rb,
lib/coderay/scanners/sql.rb,
lib/coderay/scanners/xml.rb,
lib/coderay/encoders/_map.rb,
lib/coderay/encoders/html.rb,
lib/coderay/encoders/json.rb,
lib/coderay/encoders/null.rb,
lib/coderay/encoders/page.rb,
lib/coderay/encoders/span.rb,
lib/coderay/encoders/term.rb,
lib/coderay/encoders/text.rb,
lib/coderay/encoders/yaml.rb,
lib/coderay/scanners/_map.rb,
lib/coderay/scanners/diff.rb,
lib/coderay/scanners/html.rb,
lib/coderay/scanners/java.rb,
lib/coderay/scanners/json.rb,
lib/coderay/scanners/ruby.rb,
lib/coderay/scanners/yaml.rb,
lib/coderay/styles/cycnus.rb,
lib/coderay/styles/murphy.rb,
lib/coderay/token_classes.rb,
lib/coderay/encoders/count.rb,
lib/coderay/encoders/debug.rb,
lib/coderay/helpers/plugin.rb,
lib/coderay/scanners/debug.rb,
lib/coderay/scanners/rhtml.rb,
lib/coderay/encoders/filter.rb,
lib/coderay/scanners/delphi.rb,
lib/coderay/scanners/groovy.rb,
lib/coderay/scanners/python.rb,
lib/coderay/scanners/scheme.rb,
lib/coderay/encoders/html/css.rb,
lib/coderay/helpers/file_type.rb,
lib/coderay/helpers/word_list.rb,
lib/coderay/encoders/statistic.rb,
lib/coderay/scanners/plaintext.rb,
lib/coderay/encoders/html/output.rb,
lib/coderay/scanners/java_script.rb,
lib/coderay/scanners/nitro_xhtml.rb,
lib/coderay/encoders/lines_of_code.rb,
lib/coderay/scanners/ruby/patterns.rb,
lib/coderay/encoders/comment_filter.rb,
lib/coderay/encoders/html/numerization.rb,
lib/coderay/encoders/token_class_filter.rb,
lib/coderay/scanners/java/builtin_types.rb
Overview
encoders/term.rb By Rob Aldred (http://robaldred.co.uk) Based on idea by Nathan Weizenbaum (http://nex-3.com) MIT License (http://www.opensource.org/licenses/mit-license.php)
A CodeRay encoder that outputs code highlighted for a color terminal. Check out http://robaldred.co.uk
Defined Under Namespace
Modules: Encoders, FileType, ForRedCloth, Plugin, PluginHost, Scanners, Streamable, Styles Classes: CaseIgnoringWordList, Duo, NotStreamableError, TokenStream, Tokens, WordList
Constant Summary collapse
- VERSION =
Version: Major.Minor.Teeny Major: 0 for pre-stable, 1 for stable Minor: feature milestone Teeny: development state, 0 for pre-release Revision: Subversion Revision number (generated on rake gem:make)
'0.9.1'
Class Method Summary collapse
-
.encode(code, lang, format, options = {}) ⇒ Object
Encode a string.
-
.encode_file(filename, format, options = {}) ⇒ Object
Encodes
filename(a path to a code file) with the Scanner forlang. -
.encode_stream(code, lang, format, options = {}) ⇒ Object
Encode a string in Streaming mode.
-
.encode_tokens(tokens, format, options = {}) ⇒ Object
Encode pre-scanned Tokens.
-
.encoder(format, options = {}) ⇒ Object
Finds the Encoder class for
formatand creates an instance, passingoptionsto it. -
.get_scanner_options(options) ⇒ Object
Extract the options for the scanner from the
optionshash. -
.highlight(code, lang, options = { :css => :class }, format = :div) ⇒ Object
Highlight a string into a HTML
.- .highlight_file(filename, options = { :css => :class }, format = :div) ⇒ Object
Highlight a file into a HTML
.- .require_plugin(path) ⇒ Object
Convenience method for plugin loading.
- .scan(code, lang, options = {}, &block) ⇒ Object
Scans the given
code(a String) with the Scanner forlang.- .scan_file(filename, lang = :auto, options = {}, &block) ⇒ Object
Scans
filename(a path to a code file) with the Scanner forlang.- .scan_stream(code, lang, options = {}, &block) ⇒ Object
Scan the
code(a string) with the scanner forlang.- .scanner(lang, options = {}) ⇒ Object
Finds the Scanner class for
langand creates an instance, passingoptionsto it.Class Method Details
.encode(code, lang, format, options = {}) ⇒ Object
Encode a string.
This scans
codewith the the Scanner forlangand then encodes it with the Encoder forformat.optionswill be passed to the Encoder.See CodeRay::Encoder.encode
207 208 209
# File 'lib/coderay.rb', line 207 def encode code, lang, format, = {} encoder(format, ).encode code, lang, end
.encode_file(filename, format, options = {}) ⇒ Object
Encodes
filename(a path to a code file) with the Scanner forlang.See CodeRay.scan_file. Notice that the second argument is the output
format, not the input language.Example: require 'coderay' page = CodeRay.encode_file 'some_c_code.c', :html
242 243 244 245
# File 'lib/coderay.rb', line 242 def encode_file filename, format, = {} tokens = scan_file filename, :auto, () encode_tokens tokens, format, end
.encode_stream(code, lang, format, options = {}) ⇒ Object
Encode a string in Streaming mode.
This starts scanning
codewith the the Scanner forlangwhile encodes the output with the Encoder forformat.optionswill be passed to the Encoder.See CodeRay::Encoder.encode_stream
196 197 198
# File 'lib/coderay.rb', line 196 def encode_stream code, lang, format, = {} encoder(format, ).encode_stream code, lang, end
.encode_tokens(tokens, format, options = {}) ⇒ Object
Encode pre-scanned Tokens. Use this together with CodeRay.scan:
require 'coderay'
Highlight a short Ruby code example in a HTML span
tokens = CodeRay.scan '1 + 2', :ruby puts CodeRay.encode_tokens(tokens, :span)
230 231 232
# File 'lib/coderay.rb', line 230 def encode_tokens tokens, format, = {} encoder(format, ).encode_tokens tokens, end
.encoder(format, options = {}) ⇒ Object
Finds the Encoder class for
formatand creates an instance, passingoptionsto it.Example: require 'coderay'
stats = CodeRay.encoder(:statistic) stats.encode("puts 17 + 4\n", :ruby)
puts '%d out of %d tokens have the kind :integer.' % [ stats.type_stats[:integer].count, stats.real_token_count ] #-> 2 out of 4 tokens have the kind :integer.
271 272 273
# File 'lib/coderay.rb', line 271 def encoder format, = {} Encoders[format].new end
.get_scanner_options(options) ⇒ Object
Extract the options for the scanner from the
optionshash.Returns an empty Hash if :scanner_options is not set.
This is used if a method like CodeRay.encode has to provide options for Encoder and scanner.
289 290 291
# File 'lib/coderay.rb', line 289 def .fetch :scanner_options, {} end
.highlight(code, lang, options = { :css => :class }, format = :div) ⇒ Object
Highlight a string into a HTML
.CSS styles use classes, so you have to include a stylesheet in your output.
See encode.
217 218 219
# File 'lib/coderay.rb', line 217 def highlight code, lang, = { :css => :class }, format = :div encode code, lang, format, end
.highlight_file(filename, options = { :css => :class }, format = :div) ⇒ Object
Highlight a file into a HTML
.CSS styles use classes, so you have to include a stylesheet in your output.
See encode.
253 254 255
# File 'lib/coderay.rb', line 253 def highlight_file filename, = { :css => :class }, format = :div encode_file filename, format, end
.require_plugin(path) ⇒ Object
Convenience method for plugin loading. The syntax used is:
CodeRay.require_plugin '
/ ' Returns the loaded plugin.
341 342 343 344 345 346 347
# File 'lib/coderay/helpers/plugin.rb', line 341 def self.require_plugin path host_id, plugin_id = path.split '/', 2 host = PluginHost.host_by_id(host_id) raise PluginHost::HostNotFound, "No host for #{host_id.inspect} found." unless host host.load plugin_id end
.scan(code, lang, options = {}, &block) ⇒ Object
Scans the given
code(a String) with the Scanner forlang.This is a simple way to use CodeRay. Example: require 'coderay' page = CodeRay.scan("puts 'Hello, world!'", :ruby).html
See also demo/demo_simple.
154 155 156 157
# File 'lib/coderay.rb', line 154 def scan code, lang, = {}, &block scanner = Scanners[lang].new code, , &block scanner.tokenize end
.scan_file(filename, lang = :auto, options = {}, &block) ⇒ Object
Scans
filename(a path to a code file) with the Scanner forlang.If
langis :auto or omitted, the CodeRay::FileType module is used to determine it. If it cannot find out what type it is, it uses CodeRay::Scanners::Plaintext.Calls CodeRay.scan.
Example: require 'coderay' page = CodeRay.scan_file('some_c_code.c').html
170 171 172 173 174 175 176 177
# File 'lib/coderay.rb', line 170 def scan_file filename, lang = :auto, = {}, &block file = IO.read filename if lang == :auto require 'coderay/helpers/file_type' lang = FileType.fetch filename, :plaintext, true end scan file, lang, = {}, &block end
.scan_stream(code, lang, options = {}, &block) ⇒ Object
Scan the
code(a string) with the scanner forlang.Calls scan.
See CodeRay.scan.
184 185 186 187
# File 'lib/coderay.rb', line 184 def scan_stream code, lang, = {}, &block [:stream] = true scan code, lang, , &block end
.scanner(lang, options = {}) ⇒ Object
Finds the Scanner class for
langand creates an instance, passingoptionsto it.See Scanner.new.
279 280 281
# File 'lib/coderay.rb', line 279 def scanner lang, = {} Scanners[lang].new '', end
- .highlight_file(filename, options = { :css => :class }, format = :div) ⇒ Object