Class: RDoc::Markup::ToAnsi

Inherits:
ToRdoc show all
Defined in:
lib/rdoc/markup/to_ansi.rb

Overview

Outputs RDoc markup with vibrant ANSI color!

Instance Attribute Summary

Attributes inherited from ToRdoc

#indent, #list_index, #list_type, #list_width, #prefix, #res, #width

Instance Method Summary collapse

Methods inherited from ToRdoc

#accept_blank_line, #accept_heading, #accept_indented_paragraph, #accept_list_end, #accept_list_start, #accept_paragraph, #accept_raw, #accept_rule, #accept_verbatim, #attributes, #end_accepting, #handle_special_SUPPRESSED_CROSSREF, #use_prefix, #wrap

Methods inherited from Formatter

#accept_document, #add_tag, #annotate, #convert, #convert_flow, #convert_special, #convert_string, #in_tt?, #off_tags, #on_tags, #tt?

Constructor Details

#initialize(markup = nil) ⇒ ToAnsi

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



11
12
13
14
15
16
17
18
# File 'lib/rdoc/markup/to_ansi.rb', line 11

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) ⇒ Object

Overrides indent width to ensure output lines up correctly.



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/rdoc/markup/to_ansi.rb', line 32

def accept_list_item_end list_item
  width = case @list_type.last
          when :BULLET then
            2
          when :NOTE, :LABEL then
            @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) ⇒ Object

Adds coloring to note and label list items



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/rdoc/markup/to_ansi.rb', line 51

def accept_list_item_start list_item
  bullet = case @list_type.last
           when :BULLET then
             '*'
           when :NOTE, :LABEL then
             attributes(list_item.label) + ":\n"
           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_tagsObject

Maps attributes to ANSI sequences



23
24
25
26
27
# File 'lib/rdoc/markup/to_ansi.rb', line 23

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_acceptingObject

Starts accepting with a reset screen



77
78
79
80
81
# File 'lib/rdoc/markup/to_ansi.rb', line 77

def start_accepting
  super

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