123456789_123456789_123456789_123456789_123456789_

Class: RDoc::Markup::ToAnsi

Relationships & Source Files
Super Chains via Extension / Inclusion / Inheritance
Class Chain:
self, ToRdoc, Formatter
Instance Chain:
self, ToRdoc, Formatter
Inherits: RDoc::Markup::ToRdoc
Defined in: lib/rdoc/markup/to_ansi.rb

Overview

Outputs RDoc markup with vibrant ANSI color!

Class Method Summary

ToRdoc - Inherited

.new

Creates a new formatter that will output (mostly) RDoc markup.

Formatter - Inherited

.gen_relative_url

Converts a target url to one that is relative to a given path.

.new

Creates a new Formatter.

Instance Attribute Summary

ToRdoc - Inherited

#indent

Current indent amount for output in characters.

#list_index

Stack of current list indexes for alphabetic and numeric lists.

#list_type

Stack of list types.

#list_width

Stack of list widths for indentation.

#prefix

Prefix for the next list item.

#res

Output accumulator.

#width

Output width in characters.

Formatter - Inherited

#in_tt?

Are we currently inside tt tags?

Instance Method Summary

ToRdoc - Inherited

#accept_blank_line

Adds blank_line to the output.

#accept_block_quote

Adds paragraph to the output.

#accept_heading

Adds heading to the output.

#accept_indented_paragraph

Adds paragraph to the output.

#accept_list_end

Finishes consumption of list

#accept_list_item_end

Finishes consumption of list_item

#accept_list_item_start

Prepares the visitor for consuming list_item

#accept_list_start

Prepares the visitor for consuming list

#accept_paragraph

Adds paragraph to the output.

#accept_raw

Adds raw to the output.

#accept_rule

Adds rule to the output.

#accept_table

Adds table to the output.

#accept_verbatim

Outputs verbatim indented 2 columns.

#attributes

Applies attribute-specific markup to text using RDoc::AttributeManager

#end_accepting

Returns the generated output.

#handle_regexp_HARD_BREAK

Adds a newline to the output.

#handle_regexp_SUPPRESSED_CROSSREF

Removes preceding \ from the suppressed crossref target

#init_tags

Maps attributes to HTML sequences.

#start_accepting

Prepares the visitor for text generation.

#use_prefix

Adds the stored #prefix to the output and clears it.

#wrap

Wraps text to #width

Formatter - Inherited

#accept_document

Adds document to the output.

#add_regexp_handling_RDOCLINK

Adds a regexp handling for links of the form rdoc-…:

#add_regexp_handling_TIDYLINK

Adds a regexp handling for links of the form <text> and <word>.

#add_tag

Add a new set of tags for an attribute.

#annotate

Allows tag to be decorated with additional information.

#convert

Marks up content

#convert_flow

Converts flow items flow

#convert_regexp_handling

Converts added regexp handlings.

#convert_string

Converts a string to be fancier if desired.

#ignore

Use ignore in your subclass to ignore the content of a node.

#off_tags

Turns off tags for item on res

#on_tags

Turns on tags for item on res

#parse_url

Extracts and a scheme, url and an anchor id from url and returns them.

#tt?

Is tag a tt tag?

Constructor Details

.new(markup = nil) ⇒ ToAnsi

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

[ GitHub ]

  
# 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

Instance Method Details

#accept_list_item_end(list_item)

Overrides indent width to ensure output lines up correctly.

[ GitHub ]

  
# 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)

Adds coloring to note and label list items

[ GitHub ]

  
# 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

Maps attributes to ANSI sequences

[ GitHub ]

  
# 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

Starts accepting with a reset screen

[ GitHub ]

  
# File 'lib/rdoc/markup/to_ansi.rb', line 87

def start_accepting
  super

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