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_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

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

Constructor Details

- (ToAnsi) initialize

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
  super

  @headings.clear
  @headings[1] = ["\e[1;32m", "\e[m"]
  @headings[2] = ["\e[4;32m", "\e[m"]
  @headings[3] = ["\e[32m",   "\e[m"]
end

Instance Method Details

- (Object) accept_list_item_end(list_item)

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

- (Object) accept_list_item_start(list_item)

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

- (Object) init_tags

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

- (Object) start_accepting

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