summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog10
-rw-r--r--lib/rdoc/ri/ri_formatter.rb177
-rw-r--r--process.c4
3 files changed, 162 insertions, 29 deletions
diff --git a/ChangeLog b/ChangeLog
index f672729c1e..d780db01fd 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Mon Jan 12 02:24:07 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter): Add HTML
+ generation support to ri (Elliot Hughes)
+
+Mon Jan 12 02:24:07 2004 Dave Thomas <dave@pragprog.com>
+
+ * lib/rdoc/ri/ri_formatter.rb (RI::HtmlFormatter): Add HTML
+ generation support to ri (Elliot Hughes)
+
Sun Jan 11 02:07:47 2004 Dave Thomas <dave@pragprog.com>
* lib/rdoc/ri/ri_options.rb (RI::Options::OptionList::OptionList):
diff --git a/lib/rdoc/ri/ri_formatter.rb b/lib/rdoc/ri/ri_formatter.rb
index 8fd214437d..f4ea7cb049 100644
--- a/lib/rdoc/ri/ri_formatter.rb
+++ b/lib/rdoc/ri/ri_formatter.rb
@@ -2,14 +2,15 @@ module RI
class TextFormatter
def TextFormatter.list
- "plain, bs, ansi"
+ "plain, html, bs, ansi"
end
def TextFormatter.for(name)
case name
when /plain/i then TextFormatter
- when /bs/i then OverstrikeFormatter
- when /ansi/i then AnsiFormatter
+ when /html/i then HtmlFormatter
+ when /bs/i then OverstrikeFormatter
+ when /ansi/i then AnsiFormatter
else nil
end
end
@@ -159,10 +160,7 @@ module RI
display_list(item)
when SM::Flow::VERB
- item.body.split(/\n/).each do |line|
- print @indent, conv_html(line), "\n"
- end
- blankline
+ display_verbatim_flow_item(item, @indent)
when SM::Flow::H
display_heading(conv_html(item.text.join), item.level, @indent)
@@ -177,6 +175,15 @@ module RI
######################################################################
+ def display_verbatim_flow_item(item, prefix=@indent)
+ item.body.split(/\n/).each do |line|
+ print @indent, conv_html(line), "\n"
+ end
+ blankline
+ end
+
+ ######################################################################
+
def display_heading(text, level, indent)
case level
when 1
@@ -431,24 +438,144 @@ module RI
end
end
-# options = "options"
-# def options.width
-# 70
-# end
-# a = OverstrikeFormatter.new(options, " ")
-# a.wrap(
-# "The quick <b>brown</b> and <i>italic</i> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog " +
-# "The quick <b>brown and <i>italic</i></b> dog "
-# )
+ ##################################################
+
+ # This formatter uses HTML.
+
+ class HtmlFormatter < AttributeFormatter
+
+ def initialize(*args)
+ super
+ end
+
+ def write_attribute_text(prefix, line)
+ curr_attr = 0
+ line.each do |achar|
+ attr = achar.attr
+ if achar.attr != curr_attr
+ update_attributes(curr_attr, achar.attr)
+ curr_attr = achar.attr
+ end
+ print(escape(achar.char))
+ end
+ update_attributes(curr_attr, 0) unless curr_attr.zero?
+ puts
+ end
+
+ def draw_line(label=nil)
+ if label != nil
+ bold_print(label)
+ end
+ puts("<hr /><p />")
+ end
+
+ def bold_print(txt)
+ tag("b") { txt }
+ end
+
+ def blankline()
+ puts("<p>")
+ end
+
+ def display_heading(text, level, indent)
+ level = 4 if level > 4
+ tag("h#{level}") { text }
+ puts
+ end
+
+ ######################################################################
+
+ def display_list(list)
+
+ case list.type
+ when SM::ListBase::BULLET
+ list_type = "ul"
+ prefixer = proc { |ignored| "<li>" }
+
+ when SM::ListBase::NUMBER,
+ SM::ListBase::UPPERALPHA,
+ SM::ListBase::LOWERALPHA
+ list_type = "ol"
+ prefixer = proc { |ignored| "<li>" }
+
+ when SM::ListBase::LABELED
+ list_type = "dl"
+ prefixer = proc do |li|
+ "<dt><b>" + escape(li.label) + "</b><dd>"
+ end
+
+ when SM::ListBase::NOTE
+ list_type = "table"
+ prefixer = proc do |li|
+ %{<tr valign="top"><td>#{li.label.gsub(/ /, '&nbsp;')}</td><td>}
+ end
+ else
+ fail "unknown list type"
+ end
+
+ print "<#{list_type}>"
+ list.contents.each do |item|
+ if item.kind_of? SM::Flow::LI
+ prefix = prefixer.call(item)
+ print prefix
+ display_flow_item(item, prefix)
+ else
+ display_flow_item(item)
+ end
+ end
+ print "</#{list_type}>"
+ end
+
+ def display_verbatim_flow_item(item, prefix=@indent)
+ print("<pre>")
+ item.body.split(/\n/).each do |line|
+ puts conv_html(line)
+ end
+ puts("</pre>")
+ end
+
+ private
+
+ ATTR_MAP = {
+ BOLD => "b>",
+ ITALIC => "i>",
+ CODE => "tt>"
+ }
+
+ def update_attributes(current, wanted)
+ str = ""
+ # first turn off unwanted ones
+ off = current & ~wanted
+ for quality in [ BOLD, ITALIC, CODE]
+ if (off & quality) > 0
+ str << "</" + ATTR_MAP[quality]
+ end
+ end
+
+ # now turn on wanted
+ for quality in [ BOLD, ITALIC, CODE]
+ unless (wanted & quality).zero?
+ str << "<" << ATTR_MAP[quality]
+ end
+ end
+ print str
+ end
+
+ def tag(code)
+ print("<#{code}>")
+ print(yield)
+ print("</#{code}>")
+ end
+
+ def escape(str)
+ str.
+ gsub(/&/n, '&amp;').
+ gsub(/\"/n, '&quot;').
+ gsub(/>/n, '&gt;').
+ gsub(/</n, '&lt;')
+ end
+
+ end
end
diff --git a/process.c b/process.c
index f2fee4f86f..4198b481b9 100644
--- a/process.c
+++ b/process.c
@@ -662,10 +662,6 @@ waitall_each(pid, status, ary)
*
* 0:: Waits for any child whose process group ID equals that of the
* calling process.
- * adsasdasd sads adada dsa a sad ad asd sad sa dsa dasdsad asd asd
- * adsasdasd sads adada dsa a sad ad asd sad sa dsa dasdsad asd asd
- * adsasdasd sads adada dsa a sad ad asd sad sa dsa dasdsad asd asd
- * adsasdasd sads adada dsa a sad ad asd sad sa dsa dasdsad asd asd
*
* -1:: Waits for any child process (the default if no _pid_ is
* given).