2015-12-16 00:07:31 -05:00
|
|
|
# frozen_string_literal: false
|
2010-04-01 03:45:16 -04:00
|
|
|
##
|
|
|
|
# Outputs RDoc markup with vibrant ANSI color!
|
|
|
|
|
|
|
|
class RDoc::Markup::ToAnsi < RDoc::Markup::ToRdoc
|
|
|
|
|
2010-12-19 22:22:49 -05:00
|
|
|
##
|
|
|
|
# Creates a new ToAnsi visitor that is ready to output vibrant ANSI color!
|
|
|
|
|
2011-06-16 00:59:24 -04:00
|
|
|
def initialize markup = nil
|
2010-04-01 03:45:16 -04:00
|
|
|
super
|
|
|
|
|
|
|
|
@headings.clear
|
2011-06-27 22:28:25 -04:00
|
|
|
@headings[1] = ["\e[1;32m", "\e[m"] # bold
|
|
|
|
@headings[2] = ["\e[4;32m", "\e[m"] # underline
|
|
|
|
@headings[3] = ["\e[32m", "\e[m"] # just green
|
2010-04-01 03:45:16 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Maps attributes to ANSI sequences
|
|
|
|
|
|
|
|
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
|
|
|
|
|
2010-12-19 22:22:49 -05:00
|
|
|
##
|
|
|
|
# Overrides indent width to ensure output lines up correctly.
|
|
|
|
|
2010-04-01 03:45:16 -04:00
|
|
|
def accept_list_item_end list_item
|
|
|
|
width = case @list_type.last
|
|
|
|
when :BULLET then
|
|
|
|
2
|
|
|
|
when :NOTE, :LABEL then
|
2012-11-26 23:28:14 -05:00
|
|
|
if @prefix then
|
|
|
|
@res << @prefix.strip
|
|
|
|
@prefix = nil
|
|
|
|
end
|
|
|
|
|
2010-12-19 22:22:49 -05:00
|
|
|
@res << "\n" unless res.length == 1
|
2010-04-01 03:45:16 -04:00
|
|
|
2
|
|
|
|
else
|
|
|
|
bullet = @list_index.last.to_s
|
|
|
|
@list_index[-1] = @list_index.last.succ
|
|
|
|
bullet.length + 2
|
|
|
|
end
|
|
|
|
|
|
|
|
@indent -= width
|
|
|
|
end
|
|
|
|
|
2010-12-19 22:22:49 -05:00
|
|
|
##
|
|
|
|
# Adds coloring to note and label list items
|
|
|
|
|
2010-04-01 03:45:16 -04:00
|
|
|
def accept_list_item_start list_item
|
|
|
|
bullet = case @list_type.last
|
|
|
|
when :BULLET then
|
|
|
|
'*'
|
|
|
|
when :NOTE, :LABEL then
|
2012-11-26 23:28:14 -05:00
|
|
|
labels = Array(list_item.label).map do |label|
|
|
|
|
attributes(label).strip
|
|
|
|
end.join "\n"
|
|
|
|
|
|
|
|
labels << ":\n" unless labels.empty?
|
|
|
|
|
|
|
|
labels
|
2010-04-01 03:45:16 -04:00
|
|
|
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
|
|
|
|
|
2010-12-19 22:22:49 -05:00
|
|
|
##
|
|
|
|
# Starts accepting with a reset screen
|
|
|
|
|
2010-04-01 03:45:16 -04:00
|
|
|
def start_accepting
|
|
|
|
super
|
|
|
|
|
|
|
|
@res = ["\e[0m"]
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|