2015-12-16 00:07:31 -05:00
|
|
|
# frozen_string_literal: false
|
2010-04-01 03:45:16 -04:00
|
|
|
##
|
|
|
|
# Outputs RDoc markup with hot backspace action! You will probably need a
|
|
|
|
# pager to use this output format.
|
|
|
|
#
|
|
|
|
# This formatter won't work on 1.8.6 because it lacks String#chars.
|
|
|
|
|
|
|
|
class RDoc::Markup::ToBs < RDoc::Markup::ToRdoc
|
|
|
|
|
2010-12-19 22:22:49 -05:00
|
|
|
##
|
|
|
|
# Returns a new ToBs that is ready for hot backspace action!
|
|
|
|
|
2011-06-16 00:59:24 -04:00
|
|
|
def initialize markup = nil
|
2010-04-01 03:45:16 -04:00
|
|
|
super
|
|
|
|
|
|
|
|
@in_b = false
|
|
|
|
@in_em = false
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Sets a flag that is picked up by #annotate to do the right thing in
|
|
|
|
# #convert_string
|
|
|
|
|
|
|
|
def init_tags
|
|
|
|
add_tag :BOLD, '+b', '-b'
|
|
|
|
add_tag :EM, '+_', '-_'
|
2010-12-19 22:22:49 -05:00
|
|
|
add_tag :TT, '' , '' # we need in_tt information maintained
|
2010-04-01 03:45:16 -04:00
|
|
|
end
|
|
|
|
|
2010-12-19 22:22:49 -05:00
|
|
|
##
|
|
|
|
# Makes heading text bold.
|
|
|
|
|
2010-04-01 03:45:16 -04:00
|
|
|
def accept_heading heading
|
|
|
|
use_prefix or @res << ' ' * @indent
|
|
|
|
@res << @headings[heading.level][0]
|
|
|
|
@in_b = true
|
|
|
|
@res << attributes(heading.text)
|
|
|
|
@in_b = false
|
|
|
|
@res << @headings[heading.level][1]
|
|
|
|
@res << "\n"
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Turns on or off special handling for +convert_string+
|
|
|
|
|
|
|
|
def annotate tag
|
|
|
|
case tag
|
|
|
|
when '+b' then @in_b = true
|
|
|
|
when '-b' then @in_b = false
|
|
|
|
when '+_' then @in_em = true
|
|
|
|
when '-_' then @in_em = false
|
|
|
|
end
|
|
|
|
''
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Calls convert_string on the result of convert_special
|
|
|
|
|
|
|
|
def convert_special special
|
|
|
|
convert_string super
|
|
|
|
end
|
|
|
|
|
|
|
|
##
|
|
|
|
# Adds bold or underline mixed with backspaces
|
|
|
|
|
|
|
|
def convert_string string
|
|
|
|
return string unless string.respond_to? :chars # your ruby is lame
|
|
|
|
return string unless @in_b or @in_em
|
|
|
|
chars = if @in_b then
|
|
|
|
string.chars.map do |char| "#{char}\b#{char}" end
|
|
|
|
elsif @in_em then
|
|
|
|
string.chars.map do |char| "_\b#{char}" end
|
|
|
|
end
|
|
|
|
|
|
|
|
chars.join
|
|
|
|
end
|
|
|
|
|
|
|
|
end
|
|
|
|
|