= Rouge :url-rouge: http://rouge.jneen.net :url-rouge-gem: https://rubygems.org/gems/rouge :url-rouge-repo: https://github.com/rouge-ruby/rouge/tree/HEAD/lib/rouge/themes {url-rouge}[Rouge^] is an extendable code highlighter written in Ruby that supports a vast array of languages. == Install Rouge To use Rouge with Asciidoctor, you need the {url-rouge-gem}[rouge gem^]. You can use one of the following methods to install Rouge. Install using `gem` (all systems):: + $ gem install rouge Install using `apt-get` (Debian-based systems):: + $ sudo apt-get install ruby-rouge Install using `dnf` (Fedora-based systems):: + $ sudo dnf install rubygem-rouge Install using `pacman` (Arch Linux-based systems):: + $ sudo pacman -S ruby-rouge == Assign rouge to source-highlighter Once you've installed the gem, assign the `rouge` value to the `source-highlighter` attribute in the document header to activate it. [,asciidoc] ---- :source-highlighter: rouge ---- == Rouge attributes You can further customize the source block output with additional Rouge attributes. rouge-css:: Controls what method is used for applying CSS to the tokens. Can be `class` or `style`. Default: `class`. [.line-through]#rouge-linenums-mode# (not currently implemented, see https://github.com/asciidoctor/asciidoctor/issues/3641[#3641]):: Controls how line numbers are laid out. Can be `table` or `inline`. If line wrapping is enabled on preformatted blocks (i.e., `prewrap`), and you want to use line numbering on source blocks, you must set the value of this attribute to `inline` in order for the numbers to line up properly with their target lines. Default: `table`. rouge-style:: Controls the color theme used to for highlighting. You can find the list of themes in the {url-rouge-repo}[Rouge code repository^]. Typically, you set these attributes using the CLI or API (e.g., `-a source-highlighter=rouge -a rouge-style=colorful`) so you don't have to define them in each document. However, you can define them per document as shown in the following example. .Activating the Rouge syntax highlighter and applying a different style [source,asciidoc] .... :source-highlighter: rouge :rouge-style: monokai [,ruby] ---- puts "Hello, Rouge!" ---- .... You can enable line numbering using the linenums option on the block. .Customizing a source block with Rouge line numbers [source,asciidoc] .... :source-highlighter: rouge [%linenums,ruby] ---- ORDERED_LIST_KEYWORDS = { 'loweralpha' => 'a', 'lowerroman' => 'i', 'upperalpha' => 'A', 'upperroman' => 'I' #'lowergreek' => 'a' #'arabic' => '1' #'decimal' => '1' } ---- .... It's also possible to enable linenums for all source blocks by setting the `source-linenums-option` attribute on the document.