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
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please see Improve the docs, or visit Documenting-ruby.org.