Outputs RDoc markup as paragraphs with inline markup only.
Creates a new ToHtmlSnippet formatter that
will cut off the input on the next word boundary after the given number of
characters or paragraphs of text have been
encountered.
# File rdoc/markup/to_html_snippet.rb, line 36
def initialize options, characters = 100, paragraphs = 3, markup = nil
super options, markup
@character_limit = characters
@paragraph_limit = paragraphs
@characters = 0
@mask = 0
@paragraphs = 0
@markup.add_special RDoc::CrossReference::CROSSREF_REGEXP, :CROSSREF
end
Adds heading to the output as a paragraph
# File rdoc/markup/to_html_snippet.rb, line 52
def accept_heading heading
@res << "<p>#{to_html heading.text}\n"
add_paragraph
end
Finishes consumption of list_item
# File rdoc/markup/to_html_snippet.rb, line 81
def accept_list_item_end list_item
end
Prepares the visitor for consuming list_item
# File rdoc/markup/to_html_snippet.rb, line 87
def accept_list_item_start list_item
@res << list_item_start(list_item, @list.last)
end
Prepares the visitor for consuming list
# File rdoc/markup/to_html_snippet.rb, line 94
def accept_list_start list
@list << list.type
@res << html_list_name(list.type, true)
@in_list_entry.push ''
end
# File rdoc/markup/to_html_snippet.rb, line 68
def accept_paragraph paragraph
para = @in_list_entry.last || "<p>"
text = paragraph.text @hard_break
@res << "#{para}#{wrap to_html text}\n"
add_paragraph
end
Adds verbatim to the output
# File rdoc/markup/to_html_snippet.rb, line 103
def accept_verbatim verbatim
throw :done if @characters >= @character_limit
input = verbatim.text.rstrip
text = truncate input
text << ' ...' unless text == input
super RDoc::Markup::Verbatim.new text
add_paragraph
end
Throws :done when #paragraph_limit
paragraphs have been encountered
# File rdoc/markup/to_html_snippet.rb, line 194
def add_paragraph
@paragraphs += 1
throw :done if @paragraphs >= @paragraph_limit
end
Marks up content
# File rdoc/markup/to_html_snippet.rb, line 203
def convert content
catch :done do
return super
end
end_accepting
end
Converts flow items flow
# File rdoc/markup/to_html_snippet.rb, line 214
def convert_flow flow
throw :done if @characters >= @character_limit
res = []
@mask = 0
flow.each do |item|
case item
when RDoc::Markup::AttrChanger then
off_tags res, item
on_tags res, item
when String then
text = convert_string item
res << truncate(text)
when RDoc::Markup::Special then
text = convert_special item
res << truncate(text)
else
raise "Unknown flow element: #{item.inspect}"
end
if @characters >= @character_limit then
off_tags res, RDoc::Markup::AttrChanger.new(0, @mask)
break
end
end
res << ' ...' if @characters >= @character_limit
res.join
end
Returns just the text of link, url is only used
to determine the link type.
# File rdoc/markup/to_html_snippet.rb, line 167
def gen_url url, text
if url =~ /^rdoc-label:([^:]*)(?::(.*))?/ then
type = "link"
elsif url =~ /([A-Za-z]+):(.*)/ then
type = $1
else
type = "http"
end
if (type == "http" or type == "https" or type == "link") and
url =~ /\.(gif|png|jpg|jpeg|bmp)$/ then
''
else
text.sub(%r^#{type}:/*%, '')
end
end
Removes escaping from the cross-references in special
# File rdoc/markup/to_html_snippet.rb, line 127
def handle_special_CROSSREF special
special.text.sub(/\A\/, '')
end
special is a
# File rdoc/markup/to_html_snippet.rb, line 134
def handle_special_HARD_BREAK special
@characters -= 4
'<br>'
end
In snippets, there are no lists
# File rdoc/markup/to_html_snippet.rb, line 187
def html_list_name list_type, open_tag
''
end
Lists are paragraphs, but notes and labels have a separator
# File rdoc/markup/to_html_snippet.rb, line 142
def list_item_start list_item, list_type
throw :done if @characters >= @character_limit
case list_type
when :BULLET, :LALPHA, :NUMBER, :UALPHA then
"<p>"
when :LABEL, :NOTE then
labels = Array(list_item.label).map do |label|
to_html label
end.join ', '
labels << " — " unless labels.empty?
start = "<p>#{labels}"
@characters += 1 # try to include the label
start
else
raise RDoc::Error, "Invalid list type: #{list_type.inspect}"
end
end
Prepares the visitor for HTML snippet generation
# File rdoc/markup/to_html_snippet.rb, line 118
def start_accepting
super
@characters = 0
end
Truncates text at the end of the first word after the
character_limit.
# File rdoc/markup/to_html_snippet.rb, line 269
def truncate text
length = text.length
characters = @characters
@characters += length
return text if @characters < @character_limit
remaining = @character_limit - characters
text =~ /\A(.{#{remaining},}?)(\s|$)/ # TODO word-break instead of \s?
$1
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.