class RDoc::Markup::ToAnsi

frozen_string_literal: true

Outputs RDoc markup with vibrant ANSI color!

Public Class Methods

new(markup = nil) click to toggle source

Creates a new ToAnsi visitor that is ready to output vibrant ANSI color!

Calls superclass method RDoc::Markup::ToRdoc.new
# File lib/rdoc/markup/to_ansi.rb, line 10
def initialize markup = nil
  super

  @headings.clear
  @headings[1] = ["\e[1;32m", "\e[m"] # bold
  @headings[2] = ["\e[4;32m", "\e[m"] # underline
  @headings[3] = ["\e[32m",   "\e[m"] # just green
end

Public Instance Methods

accept_list_item_end(list_item) click to toggle source

Overrides indent width to ensure output lines up correctly.

# File lib/rdoc/markup/to_ansi.rb, line 31
def accept_list_item_end list_item
  width = case @list_type.last
          when :BULLET then
            2
          when :NOTE, :LABEL then
            if @prefix then
              @res << @prefix.strip
              @prefix = nil
            end

            @res << "\n" unless res.length == 1
            2
          else
            bullet = @list_index.last.to_s
            @list_index[-1] = @list_index.last.succ
            bullet.length + 2
          end

  @indent -= width
end
accept_list_item_start(list_item) click to toggle source

Adds coloring to note and label list items

# File lib/rdoc/markup/to_ansi.rb, line 55
def accept_list_item_start list_item
  bullet = case @list_type.last
           when :BULLET then
             '*'
           when :NOTE, :LABEL then
             labels = Array(list_item.label).map do |label|
               attributes(label).strip
             end.join "\n"

             labels << ":\n" unless labels.empty?

             labels
           else
             @list_index.last.to_s + '.'
           end

  case @list_type.last
  when :NOTE, :LABEL then
    @indent += 2
    @prefix = bullet + (' ' * @indent)
  else
    @prefix = (' ' * @indent) + bullet.ljust(bullet.length + 1)

    width = bullet.gsub(/\e\[[\d;]*m/, '').length + 1

    @indent += width
  end
end
init_tags() click to toggle source

Maps attributes to ANSI sequences

# File lib/rdoc/markup/to_ansi.rb, line 22
def init_tags
  add_tag :BOLD, "\e[1m", "\e[m"
  add_tag :TT,   "\e[7m", "\e[m"
  add_tag :EM,   "\e[4m", "\e[m"
end
start_accepting() click to toggle source

Starts accepting with a reset screen

Calls superclass method RDoc::Markup::ToRdoc#start_accepting
# File lib/rdoc/markup/to_ansi.rb, line 87
def start_accepting
  super

  @res = ["\e[0m"]
end