= {project-name} Ted Nyman <ted@ted.io>; Aman Gupta <aman@tmm1.net>; Marat Radchenko <marat@slonopotamus.org> :project-name: pygments.rb :slug: pygments/{project-name} :uri-project: https://github.com/{slug} :uri-ci: {uri-project}/actions?query=branch%3Amaster :uri-gem: https://rubygems.org/gems/{project-name} :uri-pygments: https://pygments.org/ image:https://img.shields.io/gem/v/{project-name}.svg[Latest Release,link={uri-gem}] image:{uri-project}/workflows/CI/badge.svg?branch=master[Build Status,link={uri-ci}] == Introduction {project-name} is a Ruby wrapper for {uri-pygments}[Pygments] syntax highlighter. {project-name} works by talking over a simple pipe to a long-lived Python child process. This library replaces https://github.com/github/albino[github/albino], as well as an older version of {project-name} 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. == System Requirements - Python >= 3.8 - Ruby >= 2.6 == Installation Add this line to your application's Gemfile: [source,ruby] ---- gem 'pygments.rb' ---- And then execute: [source,shell script] ---- $ bundle install ---- Or install pygments.rb gem yourself as: [source,shell script] ---- $ gem install pygments.rb ---- == Usage Require pygments.rb module: [source,ruby] ---- require 'pygments' ---- Highlight a file: [source,ruby] ---- Pygments.highlight(File.read(__FILE__), lexer: 'ruby') ---- Optionally, pass encoding and other lexer/formatter options via an `:options` hash: [source,ruby] ---- Pygments.highlight('code', options: {encoding: 'utf-8'}) ---- pygments.rb uses HTML formatter by default. To use a different formatter, specify it via `:formatter` parameter: [source,ruby] ---- Pygments.highlight('code', formatter: 'bbcode') Pygments.highlight('code', formatter: 'terminal') ---- To generate CSS for HTML formatted code, use the `Pygments.css` method: [source,ruby] ---- Pygments.css Pygments.css('.highlight') ---- To use a specific pygments style, pass the `:style` option to the `Pygments.css` method: [source,ruby] ---- Pygments.css(style: 'monokai') ---- Other Pygments high-level API methods are also available. These methods return arrays detailing all the available lexers, formatters, and styles: [source,ruby] ---- Pygments.lexers Pygments.formatters Pygments.styles ---- To use a custom pygments installation, specify the path to `Pygments.start`: [source,ruby] ---- Pygments.start("/path/to/pygments") ---- If you'd like logging, set the environmental variable `MENTOS_LOG` to a file path for your logfile. You can apply a timeout to pygments.rb calls by specifying number of seconds in `MENTOS_TIMEOUT` environmental variable or by passing the `:timeout` argument (takes precedence over `MENTOS_TIMEOUT`): [source,ruby] ---- Pygments.highlight('code', timeout: 4) ---- == Benchmarks ---- $ 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) ---- == Development After checking out the repo, run `bundle install` to install dependencies. Then, run `bundle exec rake test` to run the tests. == Copyright Copyright (C) Ted Nyman, Aman Gupta, Marat Radchenko, 2012-2021. Free use of this software is granted under the terms of the MIT License. For the full text of the license, see the link:LICENSE[] file.