Convert SimpleMarkup to basic LaTeX report format
# File rdoc/markup/simple_markup/to_latex.rb, line 139
def accept_blank_line(am, fragment)
# @res << "\n"
end
# File rdoc/markup/simple_markup/to_latex.rb, line 143
def accept_heading(am, fragment)
@res << convert_heading(fragment.head_level, am.flow(fragment.txt))
end
# File rdoc/markup/simple_markup/to_latex.rb, line 123
def accept_list_end(am, fragment)
if tag = @in_list_entry.pop
@res << tag << "\n"
end
@res << list_name(fragment.type, false) <<"\n"
end
# File rdoc/markup/simple_markup/to_latex.rb, line 130
def accept_list_item(am, fragment)
if tag = @in_list_entry.last
@res << tag << "\n"
end
@res << list_item_start(am, fragment)
@res << wrap(convert_flow(am.flow(fragment.txt))) << "\n"
@in_list_entry[-1] = list_end_for(fragment.type)
end
# File rdoc/markup/simple_markup/to_latex.rb, line 118
def accept_list_start(am, fragment)
@res << list_name(fragment.type, true) <<"\n"
@in_list_entry.push false
end
# File rdoc/markup/simple_markup/to_latex.rb, line 101
def accept_paragraph(am, fragment)
@res << wrap(convert_flow(am.flow(fragment.txt)))
@res << "\n"
end
# File rdoc/markup/simple_markup/to_latex.rb, line 112
def accept_rule(am, fragment)
size = fragment.param
size = 10 if size > 10
@res << "\n\n\\rule{\\linewidth}{#{size}pt}\n\n"
end
# File rdoc/markup/simple_markup/to_latex.rb, line 106
def accept_verbatim(am, fragment)
@res << "\n\\begin{code}\n"
@res << fragment.txt.sub(/[\n\s]+\Z/, '')
@res << "\n\\end{code}\n\n"
end
Add a new set of LaTeX tags for an attribute. We allow separate start and end tags for flexibility
# File rdoc/markup/simple_markup/to_latex.rb, line 84
def add_tag(name, start, stop)
@attr_tags << InlineTag.new(SM::Attribute.bitmap_for(name), start, stop)
end
# File rdoc/markup/simple_markup/to_latex.rb, line 97
def end_accepting
@res.tr(BS, '\\').tr(OB, '{').tr(CB, '}').tr(DL, '$')
end
Escape a LaTeX string
# File rdoc/markup/simple_markup/to_latex.rb, line 64
def escape(str)
# $stderr.print "FE: ", str
s = str.
# sub(/\s+$/, '').
gsub(/([_\${}&%#])/, "#{BS}\\1").
gsub(/\\/, BACKSLASH).
gsub(/\^/, HAT).
gsub(/~/, TILDE).
gsub(/</, LESSTHAN).
gsub(/>/, GREATERTHAN).
gsub(/,,/, ",{},").
gsub(/\`/, BACKQUOTE)
# $stderr.print "-> ", s, "\n"
s
end
# File rdoc/markup/simple_markup/to_latex.rb, line 28
def l(arg)
SM::ToLaTeX.l(arg)
end
Here's the client side of the visitor pattern
# File rdoc/markup/simple_markup/to_latex.rb, line 92
def start_accepting
@res = ""
@in_list_entry = []
end
This is a higher speed (if messier) version of wrap
# File rdoc/markup/simple_markup/to_latex.rb, line 149
def wrap(txt, line_len = 76)
res = ""
sp = 0
ep = txt.length
while sp < ep
# scan back for a space
p = sp + line_len - 1
if p >= ep
p = ep
else
while p > sp and txt[p] != ?\s
p -= 1
end
if p <= sp
p = sp + line_len
while p < ep and txt[p] != ?\s
p += 1
end
end
end
res << txt[sp...p] << "\n"
sp = p
sp += 1 while sp < ep and txt[sp] == ?\s
end
res
end