| Class | RI::HtmlFormatter |
| In: |
ri/ri_formatter.rb
|
| Parent: | AttributeFormatter |
This formatter uses HTML.
| ATTR_MAP | = | { BOLD => "b>", ITALIC => "i>", CODE => "tt>" |
# File ri/ri_formatter.rb, line 506
506: def display_heading(text, level, indent)
507: level = 4 if level > 4
508: tag("h#{level}") { text }
509: puts
510: end
# File ri/ri_formatter.rb, line 514
514: def display_list(list)
515:
516: case list.type
517: when SM::ListBase::BULLET
518: list_type = "ul"
519: prefixer = proc { |ignored| "<li>" }
520:
521: when SM::ListBase::NUMBER,
522: SM::ListBase::UPPERALPHA,
523: SM::ListBase::LOWERALPHA
524: list_type = "ol"
525: prefixer = proc { |ignored| "<li>" }
526:
527: when SM::ListBase::LABELED
528: list_type = "dl"
529: prefixer = proc do |li|
530: "<dt><b>" + escape(li.label) + "</b><dd>"
531: end
532:
533: when SM::ListBase::NOTE
534: list_type = "table"
535: prefixer = proc do |li|
536: %{<tr valign="top"><td>#{li.label.gsub(/ /, ' ')}</td><td>}
537: end
538: else
539: fail "unknown list type"
540: end
541:
542: print "<#{list_type}>"
543: list.contents.each do |item|
544: if item.kind_of? SM::Flow::LI
545: prefix = prefixer.call(item)
546: print prefix
547: display_flow_item(item, prefix)
548: else
549: display_flow_item(item)
550: end
551: end
552: print "</#{list_type}>"
553: end
# File ri/ri_formatter.rb, line 555
555: def display_verbatim_flow_item(item, prefix=@indent)
556: print("<pre>")
557: item.body.split(/\n/).each do |line|
558: puts conv_html(line)
559: end
560: puts("</pre>")
561: end
# File ri/ri_formatter.rb, line 487
487: def draw_line(label=nil)
488: if label != nil
489: bold_print(label)
490: end
491: puts("<hr>")
492: end
# File ri/ri_formatter.rb, line 596
596: def escape(str)
597: str.
598: gsub(/&/n, '&').
599: gsub(/\"/n, '"').
600: gsub(/>/n, '>').
601: gsub(/</n, '<')
602: end
# File ri/ri_formatter.rb, line 590
590: def tag(code)
591: print("<#{code}>")
592: print(yield)
593: print("</#{code}>")
594: end
# File ri/ri_formatter.rb, line 571
571: def update_attributes(current, wanted)
572: str = ""
573: # first turn off unwanted ones
574: off = current & ~wanted
575: for quality in [ BOLD, ITALIC, CODE]
576: if (off & quality) > 0
577: str << "</" + ATTR_MAP[quality]
578: end
579: end
580:
581: # now turn on wanted
582: for quality in [ BOLD, ITALIC, CODE]
583: unless (wanted & quality).zero?
584: str << "<" << ATTR_MAP[quality]
585: end
586: end
587: print str
588: end
# File ri/ri_formatter.rb, line 474
474: def write_attribute_text(prefix, line)
475: curr_attr = 0
476: line.each do |achar|
477: attr = achar.attr
478: if achar.attr != curr_attr
479: update_attributes(curr_attr, achar.attr)
480: curr_attr = achar.attr
481: end
482: print(escape(achar.char))
483: end
484: update_attributes(curr_attr, 0) unless curr_attr.zero?
485: end