Class: RDoc::Markup::ToHtml
- Includes:
- Text
- Defined in:
- lib/rdoc/markup/to_html.rb
Overview
Outputs RDoc markup as HTML.
Direct Known Subclasses
Defined Under Namespace
Classes: QuoteConverter
Constant Summary collapse
- LIST_TYPE_TO_HTML =
Maps RDoc::Markup::Parser::LIST_TOKENS types to HTML tags
{ :BULLET => ['<ul>', '</ul>'], :LABEL => ['<dl class="rdoc-list label-list">', '</dl>'], :LALPHA => ['<ol style="list-style-type: lower-alpha">', '</ol>'], :NOTE => ['<dl class="rdoc-list note-list">', '</dl>'], :NUMBER => ['<ol>', '</ol>'], :UALPHA => ['<ol style="list-style-type: upper-alpha">', '</ol>'], }
- TO_HTML_CHARACTERS =
Maps an encoding to a Hash of characters properly transcoded for that encoding.
See also encode_fallback.
Hash.new do |h, encoding| h[encoding] = { close_dquote: encode_fallback('”', encoding, '"'), close_squote: encode_fallback('’', encoding, '\''), copyright: encode_fallback('©', encoding, '(c)'), ellipsis: encode_fallback('…', encoding, '...'), dot_ellipsis: encode_fallback('.…', encoding, '....'), em_dash: encode_fallback('—', encoding, '---'), en_dash: encode_fallback('–', encoding, '--'), open_dquote: encode_fallback('“', encoding, '"'), open_squote: encode_fallback('‘', encoding, '\''), trademark: encode_fallback('®', encoding, '(r)'), } end
- HTML_CHARACTER_ALIASES =
{ '(c)' => :copyright, '(C)' => :copyright, '(r)' => :trademark, '(R)' => :trademark, '---' => :em_dash, '--' => :en_dash, '....' => :dot_ellipsis, '...' => :ellipsis, '``' => :open_dquote, "''" => :close_dquote, }
- URL_CHARACTERS_REGEXP_STR =
:nodoc:
/[A-Za-z0-9\-._~:\/\?#\[\]@!$&'\(\)*+,;%=]/.source
Constants included from Text
Text::MARKUP_FORMAT, Text::SPACE_SEPARATED_LETTER_CLASS
Instance Attribute Summary collapse
-
#code_object ⇒ Object
The RDoc::CodeObject HTML is being generated for.
-
#from_path ⇒ Object
Path to this document for relative links.
-
#in_list_entry ⇒ Object
readonly
:nodoc:.
-
#list ⇒ Object
readonly
:nodoc:.
-
#res ⇒ Object
readonly
:nodoc:.
Attributes included from Text
Class Method Summary collapse
-
.encode_fallback(character, encoding, fallback) ⇒ Object
Transcodes
charactertoencodingwith afallbackcharacter.
Instance Method Summary collapse
-
#accept_blank_line(blank_line) ⇒ Object
Adds
blank_lineto the output. -
#accept_block_quote(block_quote) ⇒ Object
Adds
block_quoteto the output. -
#accept_heading(heading) ⇒ Object
Adds
headingto the output. -
#accept_list_end(list) ⇒ Object
Finishes consumption of
list. -
#accept_list_item_end(list_item) ⇒ Object
Finishes consumption of
list_item. -
#accept_list_item_start(list_item) ⇒ Object
Prepares the visitor for consuming
list_item. -
#accept_list_start(list) ⇒ Object
Prepares the visitor for consuming
list. -
#accept_paragraph(paragraph) ⇒ Object
Adds
paragraphto the output. -
#accept_raw(raw) ⇒ Object
Adds
rawto the output. -
#accept_rule(rule) ⇒ Object
Adds
ruleto the output. -
#accept_table(header, body, aligns) ⇒ Object
Adds
tableto the output. -
#accept_verbatim(verbatim) ⇒ Object
Adds
verbatimto the output. -
#apply_tidylink_label_special_handling(label, url) ⇒ Object
Special handling for tidy link labels.
-
#convert_string(text) ⇒ Object
CGI-escapes
text. -
#deduplicate_heading_id(id) ⇒ Object
Returns a unique heading ID, appending -1, -2, etc.
- #emit_inline(text) ⇒ Object
-
#end_accepting ⇒ Object
Returns the generated output.
-
#gen_url(url, text) ⇒ Object
Generates an HTML link or image tag for the given
urlandtext. - #handle_BOLD(nodes) ⇒ Object
- #handle_BOLD_WORD(word) ⇒ Object
- #handle_EM(nodes) ⇒ Object
- #handle_EM_WORD(word) ⇒ Object
- #handle_HARD_BREAK ⇒ Object
-
#handle_inline(text) ⇒ Object
:nodoc:.
- #handle_PLAIN_TEXT(text) ⇒ Object
-
#handle_RDOCLINK(url) ⇒ Object
:nodoc:.
- #handle_REGEXP_HANDLING_TEXT(text) ⇒ Object
-
#handle_regexp_HTML_CHARACTERS(text) ⇒ Object
Converts
(c), (r), --, --- , ..., ...., ``, ''to HTML characters. -
#handle_regexp_HYPERLINK(text) ⇒ Object
targetis a potential link. - #handle_regexp_QUOTE_AFTER_WORD(text) ⇒ Object
- #handle_regexp_QUOTE_NOT_AFTER_WORD(text) ⇒ Object
-
#handle_regexp_RDOCLINK(text) ⇒ Object
targetis an rdoc-schemed link that will be converted into a hyperlink. -
#handle_regexp_SUPPRESSED_CROSSREF(text) ⇒ Object
Converts suppressed cross-reference
textto HTML by removing the leading backslash. - #handle_STRIKE(nodes) ⇒ Object
- #handle_TIDYLINK(label_part, url) ⇒ Object
- #handle_TT(code) ⇒ Object
-
#html_list_name(list_type, open_tag) ⇒ Object
Determines the HTML list element for
list_typeandopen_tag. -
#in_tidylink_label? ⇒ Boolean
Returns true if we are processing inside a tidy link label.
-
#init_link_notation_regexp_handlings ⇒ Object
Adds regexp handlings about link notations.
-
#init_regexp_handlings ⇒ Object
Adds regexp handlings.
-
#initialize(pipe: false, output_decoration: true) ⇒ ToHtml
constructor
Creates a new formatter that will output HTML.
-
#list_end_for(list_type) ⇒ Object
Returns the HTML end-tag for
list_type. -
#list_item_start(list_item, list_type) ⇒ Object
Returns the HTML tag for
list_type, possible using a label fromlist_item. -
#parsable_text_to_html(text) ⇒ Object
Generate syntax highlighted html for ruby-like text.
-
#parseable?(text) ⇒ Boolean
Returns true if text is valid ruby syntax.
-
#start_accepting ⇒ Object
Prepares the visitor for HTML generation.
-
#to_html(item) ⇒ Object
Converts
itemto HTML using RDoc::Text#to_html.
Methods included from Text
decode_legacy_label, expand_tabs, #flush_left, #markup, #normalize_comment, #parse, #snippet, #strip_hashes, #strip_newlines, #strip_stars, to_anchor, #wrap
Methods inherited from Formatter
#accept_document, #add_regexp_handling_RDOCLINK, #annotate, #apply_regexp_handling, #convert, gen_relative_url, #handle_TEXT, #ignore, #parse_url, #traverse_inline_nodes, #tt?
Constructor Details
#initialize(pipe: false, output_decoration: true) ⇒ ToHtml
Creates a new formatter that will output HTML
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/rdoc/markup/to_html.rb', line 127 def initialize(pipe: false, output_decoration: true) super() @pipe = pipe @output_decoration = output_decoration @code_object = nil @from_path = '' @in_list_entry = nil @list = nil @th = nil @quote_converter = nil @in_tidylink_label = false @hard_break = "<br>\n" init_regexp_handlings end |
Instance Attribute Details
#code_object ⇒ Object
The RDoc::CodeObject HTML is being generated for. This is used to generate namespaced URI fragments
35 36 37 |
# File 'lib/rdoc/markup/to_html.rb', line 35 def code_object @code_object end |
#from_path ⇒ Object
Path to this document for relative links
40 41 42 |
# File 'lib/rdoc/markup/to_html.rb', line 40 def from_path @from_path end |
#in_list_entry ⇒ Object (readonly)
:nodoc:
28 29 30 |
# File 'lib/rdoc/markup/to_html.rb', line 28 def in_list_entry @in_list_entry end |
#list ⇒ Object (readonly)
:nodoc:
29 30 31 |
# File 'lib/rdoc/markup/to_html.rb', line 29 def list @list end |
#res ⇒ Object (readonly)
:nodoc:
27 28 29 |
# File 'lib/rdoc/markup/to_html.rb', line 27 def res @res end |
Class Method Details
.encode_fallback(character, encoding, fallback) ⇒ Object
Transcodes character to encoding with a fallback character.
79 80 81 82 83 84 85 86 |
# File 'lib/rdoc/markup/to_html.rb', line 79 def self.encode_fallback(character, encoding, fallback) character.encode( encoding, fallback: { character => fallback }, undef: :replace, replace: fallback ) end |
Instance Method Details
#accept_blank_line(blank_line) ⇒ Object
Adds blank_line to the output
509 510 511 |
# File 'lib/rdoc/markup/to_html.rb', line 509 def accept_blank_line(blank_line) # @res << annotate("<p />") << "\n" end |
#accept_block_quote(block_quote) ⇒ Object
Adds block_quote to the output
403 404 405 406 407 408 409 410 411 |
# File 'lib/rdoc/markup/to_html.rb', line 403 def accept_block_quote(block_quote) @res << "\n<blockquote>" block_quote.parts.each do |part| part.accept self end @res << "</blockquote>\n" end |
#accept_heading(heading) ⇒ Object
Adds heading to the output. The headings greater than 6 are trimmed to level 6.
517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 |
# File 'lib/rdoc/markup/to_html.rb', line 517 def accept_heading(heading) level = [6, heading.level].min label = deduplicate_heading_id(heading.label(@code_object)) legacy_label = deduplicate_heading_id(heading.legacy_label(@code_object)) # Add legacy anchor before the heading for backward compatibility. # This allows old links with label- prefix to still work. if @output_decoration && !@pipe @res << "\n<span id=\"#{legacy_label}\" class=\"legacy-anchor\"></span>" end @res << if @output_decoration "\n<h#{level} id=\"#{label}\">" else "\n<h#{level}>" end if @pipe @res << to_html(heading.text) else @res << "<a href=\"##{label}\">#{to_html(heading.text)}</a>" end @res << "</h#{level}>\n" end |
#accept_list_end(list) ⇒ Object
Finishes consumption of list
480 481 482 483 484 485 486 |
# File 'lib/rdoc/markup/to_html.rb', line 480 def accept_list_end(list) @list.pop if tag = @in_list_entry.pop @res << tag end @res << html_list_name(list.type, false) << "\n" end |
#accept_list_item_end(list_item) ⇒ Object
Finishes consumption of list_item
502 503 504 |
# File 'lib/rdoc/markup/to_html.rb', line 502 def accept_list_item_end(list_item) @in_list_entry[-1] = list_end_for(@list.last) end |
#accept_list_item_start(list_item) ⇒ Object
Prepares the visitor for consuming list_item
491 492 493 494 495 496 497 |
# File 'lib/rdoc/markup/to_html.rb', line 491 def accept_list_item_start(list_item) if tag = @in_list_entry.last @res << tag end @res << list_item_start(list_item, @list.last) end |
#accept_list_start(list) ⇒ Object
Prepares the visitor for consuming list
471 472 473 474 475 |
# File 'lib/rdoc/markup/to_html.rb', line 471 def accept_list_start(list) @list << list.type @res << html_list_name(list.type, true) @in_list_entry.push false end |
#accept_paragraph(paragraph) ⇒ Object
Adds paragraph to the output
416 417 418 419 420 421 422 423 424 |
# File 'lib/rdoc/markup/to_html.rb', line 416 def accept_paragraph(paragraph) @res << "\n<p>" text = paragraph.text @hard_break text = text.gsub(/(#{SPACE_SEPARATED_LETTER_CLASS})?\K(?:\r?\n)+(?=(?(1)(#{SPACE_SEPARATED_LETTER_CLASS})?))/o) { defined?($2) && ' ' } @res << to_html(text) @res << "</p>\n" end |
#accept_raw(raw) ⇒ Object
Adds raw to the output
547 548 549 |
# File 'lib/rdoc/markup/to_html.rb', line 547 def accept_raw(raw) @res << raw.parts.join("\n") end |
#accept_rule(rule) ⇒ Object
Adds rule to the output
464 465 466 |
# File 'lib/rdoc/markup/to_html.rb', line 464 def accept_rule(rule) @res << "<hr>\n" end |
#accept_table(header, body, aligns) ⇒ Object
Adds table to the output
554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 |
# File 'lib/rdoc/markup/to_html.rb', line 554 def accept_table(header, body, aligns) @res << "\n<table role=\"table\">\n<thead>\n<tr>\n" header.zip(aligns) do |text, align| @res << '<th' @res << ' align="' << align << '"' if align @res << '>' << to_html(text) << "</th>\n" end @res << "</tr>\n</thead>\n<tbody>\n" body.each do |row| @res << "<tr>\n" row.zip(aligns) do |text, align| @res << '<td' @res << ' align="' << align << '"' if align @res << '>' << to_html(text) << "</td>\n" end @res << "</tr>\n" end @res << "</tbody>\n</table>\n" end |
#accept_verbatim(verbatim) ⇒ Object
Adds verbatim to the output
438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 |
# File 'lib/rdoc/markup/to_html.rb', line 438 def accept_verbatim(verbatim) text = verbatim.text.rstrip format = verbatim.format # Apply Ruby syntax highlighting if # - explicitly marked as Ruby (via ruby? which accepts :ruby or :rb) # - no format specified but the text is parseable as Ruby # Otherwise, add language class when applicable and skip Ruby highlighting if verbatim.ruby? || (format.nil? && parseable?(text)) content = parsable_text_to_html(text) klass = ' class="ruby"' else content = CGI.escapeHTML text klass = " class=\"#{format}\"" if format end if @pipe @res << "\n<pre><code>#{CGI.escapeHTML text}\n</code></pre>\n" else @res << "\n<pre#{klass}>#{content}</pre>\n" end end |
#apply_tidylink_label_special_handling(label, url) ⇒ Object
Special handling for tidy link labels. When a tidy link is {rdoc-image:path/to/image.jpg:alt text}[http://example.com], label part is normally considered RDOCLINK rdoc-image:path/to/image.jpg:alt and a text " text" but RDoc’s test code expects the whole label part to be treated as RDOCLINK only in tidy link label. When a tidy link is {^1}[url] or {*1}[url], the label part needs to drop leading * or ^. TODO: reconsider this workaround.
273 274 275 276 277 278 279 |
# File 'lib/rdoc/markup/to_html.rb', line 273 def apply_tidylink_label_special_handling(label, url) # ^1 *1 will be converted to just 1 in tidy link label. return label[1..] if label.match?(/\A[*^]\d+\z/) # rdoc-image in label specially allows spaces in alt text. return handle_RDOCLINK(label) if label.start_with?('rdoc-image:') end |
#convert_string(text) ⇒ Object
CGI-escapes text
593 594 595 |
# File 'lib/rdoc/markup/to_html.rb', line 593 def convert_string(text) CGI.escapeHTML text end |
#deduplicate_heading_id(id) ⇒ Object
Returns a unique heading ID, appending -1, -2, etc. for duplicates. Matches GitHub’s behavior for duplicate heading anchors.
580 581 582 583 584 585 586 587 588 |
# File 'lib/rdoc/markup/to_html.rb', line 580 def deduplicate_heading_id(id) if @heading_ids.key?(id) @heading_ids[id] += 1 "#{id}-#{@heading_ids[id]}" else @heading_ids[id] = 0 id end end |
#emit_inline(text) ⇒ Object
256 257 258 |
# File 'lib/rdoc/markup/to_html.rb', line 256 def emit_inline(text) @inline_output << text end |
#end_accepting ⇒ Object
Returns the generated output
396 397 398 |
# File 'lib/rdoc/markup/to_html.rb', line 396 def end_accepting @res.join end |
#gen_url(url, text) ⇒ Object
Generates an HTML link or image tag for the given url and text.
-
Image URLs (http/https/link ending in .gif, .png, .jpg, .jpeg, .bmp) become <img> tags
-
File references (.rb, .rdoc, .md) are converted to .html paths
-
Anchor URLs (#foo) pass through unchanged for GitHub-style header linking
-
Footnote links get wrapped in <sup> tags
606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 |
# File 'lib/rdoc/markup/to_html.rb', line 606 def gen_url(url, text) scheme, url, id = parse_url url if %w[http https link].include?(scheme) && url =~ /\.(gif|png|jpg|jpeg|bmp)\z/ "<img src=\"#{url}\" />" else if scheme != 'link' and %r%\A((?!https?:)(?:[^/#]*/)*+)([^/#]+)\.(rb|rdoc|md)(?=\z|#)%i =~ url url = "#$1#{$2.tr('.', '_')}_#$3.html#$'" end text = text.sub %r%^#{scheme}:/*%i, '' text = text.sub %r%^[*\^](\d+)$%, '\1' link = "<a#{id} href=\"#{url}\">#{text}</a>" if /"foot/.match?(id) "<sup>#{link}</sup>" else link end end end |
#handle_BOLD(nodes) ⇒ Object
216 217 218 219 220 |
# File 'lib/rdoc/markup/to_html.rb', line 216 def handle_BOLD(nodes) emit_inline('<strong>') super emit_inline('</strong>') end |
#handle_BOLD_WORD(word) ⇒ Object
228 229 230 231 232 |
# File 'lib/rdoc/markup/to_html.rb', line 228 def handle_BOLD_WORD(word) emit_inline('<strong>') super emit_inline('</strong>') end |
#handle_EM(nodes) ⇒ Object
222 223 224 225 226 |
# File 'lib/rdoc/markup/to_html.rb', line 222 def handle_EM(nodes) emit_inline('<em>') super emit_inline('</em>') end |
#handle_EM_WORD(word) ⇒ Object
234 235 236 237 238 |
# File 'lib/rdoc/markup/to_html.rb', line 234 def handle_EM_WORD(word) emit_inline('<em>') super emit_inline('</em>') end |
#handle_HARD_BREAK ⇒ Object
252 253 254 |
# File 'lib/rdoc/markup/to_html.rb', line 252 def handle_HARD_BREAK emit_inline('<br>') end |
#handle_inline(text) ⇒ Object
:nodoc:
317 318 319 320 321 322 323 324 325 |
# File 'lib/rdoc/markup/to_html.rb', line 317 def handle_inline(text) # :nodoc: @inline_output = +'' @quote_converter = QuoteConverter.new super out = @inline_output @inline_output = nil @quote_converter = nil out end |
#handle_PLAIN_TEXT(text) ⇒ Object
208 209 210 |
# File 'lib/rdoc/markup/to_html.rb', line 208 def handle_PLAIN_TEXT(text) emit_inline(convert_string(text)) end |
#handle_RDOCLINK(url) ⇒ Object
:nodoc:
177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 |
# File 'lib/rdoc/markup/to_html.rb', line 177 def handle_RDOCLINK(url) # :nodoc: case url when /^rdoc-ref:/ CGI.escapeHTML($') when /^rdoc-label:/ return CGI.escapeHTML(url) if in_tidylink_label? text = $' text = case text when /\Alabel-/ then $' when /\Afootmark-/ then $' when /\Afoottext-/ then $' else text end gen_url CGI.escapeHTML(url), CGI.escapeHTML(text) when /^rdoc-image:/ # Split the string after "rdoc-image:" into url and alt. # "path/to/image.jpg:alt text" => ["path/to/image.jpg", "alt text"] # "http://example.com/path/to/image.jpg:alt text" => ["http://example.com/path/to/image.jpg", "alt text"] url, alt = $'.split(/:(?!\/)/, 2) if alt && !alt.empty? %[<img src="#{CGI.escapeHTML(url)}" alt="#{CGI.escapeHTML(alt)}">] else %[<img src="#{CGI.escapeHTML(url)}">] end when /\Ardoc-[a-z]+:/ CGI.escapeHTML($') end end |
#handle_REGEXP_HANDLING_TEXT(text) ⇒ Object
212 213 214 |
# File 'lib/rdoc/markup/to_html.rb', line 212 def handle_REGEXP_HANDLING_TEXT(text) emit_inline(text) end |
#handle_regexp_HTML_CHARACTERS(text) ⇒ Object
Converts (c), (r), --, --- , ..., ...., ``, '' to HTML characters.
328 329 330 331 |
# File 'lib/rdoc/markup/to_html.rb', line 328 def handle_regexp_HTML_CHARACTERS(text) name = HTML_CHARACTER_ALIASES[text] TO_HTML_CHARACTERS[text.encoding][name] if name end |
#handle_regexp_HYPERLINK(text) ⇒ Object
target is a potential link. The following schemes are handled:
mailto:-
Inserted as-is.
http:-
Links are checked to see if they reference an image. If so, that image gets inserted using an
<img>tag. Otherwise a conventional<a href>is used. link:-
Reference to a local file relative to the output directory.
359 360 361 362 363 364 |
# File 'lib/rdoc/markup/to_html.rb', line 359 def handle_regexp_HYPERLINK(text) return convert_string(text) if in_tidylink_label? url = CGI.escapeHTML(text) gen_url url, url end |
#handle_regexp_QUOTE_AFTER_WORD(text) ⇒ Object
337 338 339 |
# File 'lib/rdoc/markup/to_html.rb', line 337 def handle_regexp_QUOTE_AFTER_WORD(text) @quote_converter.convert(text, after_word: true) || convert_string(text) end |
#handle_regexp_QUOTE_NOT_AFTER_WORD(text) ⇒ Object
333 334 335 |
# File 'lib/rdoc/markup/to_html.rb', line 333 def handle_regexp_QUOTE_NOT_AFTER_WORD(text) @quote_converter.convert(text, after_word: false) || convert_string(text) end |
#handle_regexp_RDOCLINK(text) ⇒ Object
target is an rdoc-schemed link that will be converted into a hyperlink.
For the rdoc-ref scheme the named reference will be returned without creating a link.
For the rdoc-label scheme the footnote and label prefixes are stripped when creating a link. All other contents will be linked verbatim.
375 376 377 |
# File 'lib/rdoc/markup/to_html.rb', line 375 def handle_regexp_RDOCLINK(text) handle_RDOCLINK text end |
#handle_regexp_SUPPRESSED_CROSSREF(text) ⇒ Object
Converts suppressed cross-reference text to HTML by removing the leading backslash.
343 344 345 |
# File 'lib/rdoc/markup/to_html.rb', line 343 def handle_regexp_SUPPRESSED_CROSSREF(text) convert_string(text.delete_prefix('\\')) end |
#handle_STRIKE(nodes) ⇒ Object
246 247 248 249 250 |
# File 'lib/rdoc/markup/to_html.rb', line 246 def handle_STRIKE(nodes) emit_inline('<del>') super emit_inline('</del>') end |
#handle_TIDYLINK(label_part, url) ⇒ Object
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 |
# File 'lib/rdoc/markup/to_html.rb', line 281 def handle_TIDYLINK(label_part, url) # When url is an image, ignore label part (maybe bug?) and just generate img tag. if url.match?(/\Ahttps?:\/\/.+\.(png|gif|jpg|jpeg|bmp)\z/) emit_inline("<img src=\"#{CGI.escapeHTML(url)}\" />") return elsif url.match?(/\Ardoc-image:/) emit_inline(handle_RDOCLINK(url)) return end if label_part.size == 1 && String === label_part[0] raw_label = label_part[0] @in_tidylink_label = true special = apply_tidylink_label_special_handling(raw_label, url) @in_tidylink_label = false if special tag = gen_url(CGI.escapeHTML(url), special) unless tag.empty? emit_inline(tag) return end end end tag = gen_url(CGI.escapeHTML(url), '') open_tag, close_tag = tag.split(/(?=<\/a>)/, 2) valid_tag = open_tag && close_tag emit_inline(open_tag) if valid_tag @in_tidylink_label = true traverse_inline_nodes(label_part) @in_tidylink_label = false emit_inline(close_tag) if valid_tag end |
#handle_TT(code) ⇒ Object
240 241 242 243 244 |
# File 'lib/rdoc/markup/to_html.rb', line 240 def handle_TT(code) emit_inline('<code>') super emit_inline('</code>') end |
#html_list_name(list_type, open_tag) ⇒ Object
Determines the HTML list element for list_type and open_tag
632 633 634 635 636 |
# File 'lib/rdoc/markup/to_html.rb', line 632 def html_list_name(list_type, open_tag) = LIST_TYPE_TO_HTML[list_type] raise RDoc::Error, "Invalid list type: #{list_type.inspect}" unless [open_tag ? 0 : 1] end |
#in_tidylink_label? ⇒ Boolean
Returns true if we are processing inside a tidy link label.
262 263 264 |
# File 'lib/rdoc/markup/to_html.rb', line 262 def in_tidylink_label? @in_tidylink_label end |
#init_link_notation_regexp_handlings ⇒ Object
Adds regexp handlings about link notations.
173 174 175 |
# File 'lib/rdoc/markup/to_html.rb', line 173 def init_link_notation_regexp_handlings add_regexp_handling_RDOCLINK end |
#init_regexp_handlings ⇒ Object
Adds regexp handlings.
154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/rdoc/markup/to_html.rb', line 154 def init_regexp_handlings # external links @markup.add_regexp_handling(/(?:link:|https?:|mailto:|ftp:|irc:|www\.)#{URL_CHARACTERS_REGEXP_STR}+\w/, :HYPERLINK) # suppress crossref: \#method \::method \ClassName \method_with_underscores @markup.add_regexp_handling(/\\(?:[#:A-Z]|[a-z]+_[a-z0-9])/, :SUPPRESSED_CROSSREF) @markup.add_regexp_handling(Regexp.union(HTML_CHARACTER_ALIASES.keys), :HTML_CHARACTERS) @markup.add_regexp_handling(/\b['"`]/, :QUOTE_AFTER_WORD) @markup.add_regexp_handling(/\B['"`]/, :QUOTE_NOT_AFTER_WORD) init_link_notation_regexp_handlings end |
#list_end_for(list_type) ⇒ Object
Returns the HTML end-tag for list_type
658 659 660 661 662 663 664 665 666 667 |
# File 'lib/rdoc/markup/to_html.rb', line 658 def list_end_for(list_type) case list_type when :BULLET, :LALPHA, :NUMBER, :UALPHA then "</li>" when :LABEL, :NOTE then "</dd>" else raise RDoc::Error, "Invalid list type: #{list_type.inspect}" end end |
#list_item_start(list_item, list_type) ⇒ Object
Returns the HTML tag for list_type, possible using a label from list_item
642 643 644 645 646 647 648 649 650 651 652 653 |
# File 'lib/rdoc/markup/to_html.rb', line 642 def list_item_start(list_item, list_type) case list_type when :BULLET, :LALPHA, :NUMBER, :UALPHA then "<li>" when :LABEL, :NOTE then Array(list_item.label).map do |label| "<dt>#{to_html label}</dt>\n" end.join << "<dd>" else raise RDoc::Error, "Invalid list type: #{list_type.inspect}" end end |
#parsable_text_to_html(text) ⇒ Object
Generate syntax highlighted html for ruby-like text.
428 429 430 431 432 433 |
# File 'lib/rdoc/markup/to_html.rb', line 428 def parsable_text_to_html(text) tokens = RDoc::Parser::RubyColorizer.colorize(text) result = RDoc::TokenStream.to_html tokens result = result + "\n" unless result.end_with?("\n") result end |
#parseable?(text) ⇒ Boolean
Returns true if text is valid ruby syntax
672 673 674 |
# File 'lib/rdoc/markup/to_html.rb', line 672 def parseable?(text) Prism.parse_success?(text) end |
#start_accepting ⇒ Object
Prepares the visitor for HTML generation
386 387 388 389 390 391 |
# File 'lib/rdoc/markup/to_html.rb', line 386 def start_accepting @res = [] @in_list_entry = [] @list = [] @heading_ids = {} end |
#to_html(item) ⇒ Object
Converts item to HTML using RDoc::Text#to_html
679 680 681 |
# File 'lib/rdoc/markup/to_html.rb', line 679 def to_html(item) handle_inline(item) end |