| 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: puts item.body
558: puts("</pre>")
559: 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 594
594: def escape(str)
595: str.
596: gsub(/&/n, '&').
597: gsub(/\"/n, '"').
598: gsub(/>/n, '>').
599: gsub(/</n, '<')
600: end
# File ri/ri_formatter.rb, line 588
588: def tag(code)
589: print("<#{code}>")
590: print(yield)
591: print("</#{code}>")
592: end
# File ri/ri_formatter.rb, line 569
569: def update_attributes(current, wanted)
570: str = ""
571: # first turn off unwanted ones
572: off = current & ~wanted
573: for quality in [ BOLD, ITALIC, CODE]
574: if (off & quality) > 0
575: str << "</" + ATTR_MAP[quality]
576: end
577: end
578:
579: # now turn on wanted
580: for quality in [ BOLD, ITALIC, CODE]
581: unless (wanted & quality).zero?
582: str << "<" << ATTR_MAP[quality]
583: end
584: end
585: print str
586: 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