A Ruby wrapper for the Python pygments syntax highlighter.
pygments.rb works by talking over a simple pipe to a long-lived Python child process. This library replaces github/albino, as well as a version of pygments.rb that used an embedded Python interpreter.
Each Ruby process that runs has its own 'personal Python'; for example, 4 Unicorn workers will have one Python process each. If a Python process dies, a new one will be spawned on the next pygments.rb request.
- Python 2.5+
require 'pygments'
Pygments.highlight(File.read(__FILE__), :lexer => 'ruby')
Encoding and other lexer/formatter options can be passed in via an options hash:
Pygments.highlight('code', :options => {:encoding => 'utf-8'})
pygments.rb defaults to using an HTML formatter.
To use a formatter other than html
, specify it explicitly
like so:
Pygments.highlight('code', :formatter => 'bbcode')
Pygments.highlight('code', :formatter => 'terminal')
To generate CSS for HTML formatted code, use the #css
method:
Pygments.css
Pygments.css('.highlight')
Other Pygments high-level API methods are also available. These methods return arrays detailing all the available lexers, formatters, and styles.
Pygments.lexers
Pygments.formatters
Pygments.styles
To use a custom pygments installation, specify the path to
Pygments#start
:
Pygments.start("/path/to/pygments")
$ ruby bench.rb 50
Benchmarking....
Size: 698 bytes
Iterations: 50
user system total real
pygments popen 0.010000 0.010000 0.020000 ( 0.460370)
pygments popen (process already started) 0.010000 0.000000 0.010000 ( 0.272975)
pygments popen (process already started 2) 0.000000 0.000000 0.000000 ( 0.273589)
$ ruby bench.rb 10
Benchmarking....
Size: 15523 bytes
Iterations: 10
user system total real
pygments popen 0.000000 0.000000 0.000000 ( 0.819419)
pygments popen (process already started) 0.010000 0.000000 0.010000 ( 0.676515)
pygments popen (process already started 2) 0.000000 0.010000 0.010000 ( 0.674189)