aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--lib/rdoc/markup/document.rb16
-rw-r--r--lib/rdoc/markup/formatter.rb7
-rw-r--r--lib/rdoc/markup/heading.rb3
-rw-r--r--lib/rdoc/markup/to_table_of_contents.rb28
-rw-r--r--lib/rdoc/parser/changelog.rb9
-rw-r--r--test/rdoc/test_rdoc_markup_document.rb19
-rw-r--r--test/rdoc/test_rdoc_markup_to_table_of_contents.rb31
-rw-r--r--test/rdoc/test_rdoc_parser_changelog.rb32
9 files changed, 136 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index 51cb62048c..916ac062c0 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Thu Dec 6 07:19:58 2012 Eric Hodel <drbrain@segment7.net>
+
+ * lib/rdoc*: Improved display of ChangeLog files as HTML.
+ * test/rdoc*: Test for above.
+
Thu Dec 6 04:34:19 2012 KOSAKI Motohiro <kosaki.motohiro@gmail.com>
* thread.c (rb_uninterruptible): helper function for providing
diff --git a/lib/rdoc/markup/document.rb b/lib/rdoc/markup/document.rb
index 049cd3b43c..be93d80eec 100644
--- a/lib/rdoc/markup/document.rb
+++ b/lib/rdoc/markup/document.rb
@@ -12,6 +12,12 @@ class RDoc::Markup::Document
attr_reader :file
##
+ # If a heading is below the given level it will be omitted from the
+ # table_of_contents
+
+ attr_accessor :omit_headings_below
+
+ ##
# The parts of the Document
attr_reader :parts
@@ -24,6 +30,7 @@ class RDoc::Markup::Document
@parts.concat parts
@file = nil
+ @omit_headings_from_table_of_contents_below = nil
end
##
@@ -57,14 +64,7 @@ class RDoc::Markup::Document
def accept visitor
visitor.start_accepting
- @parts.each do |item|
- case item
- when RDoc::Markup::Document then # HACK
- visitor.accept_document item
- else
- item.accept visitor
- end
- end
+ visitor.accept_document self
visitor.end_accepting
end
diff --git a/lib/rdoc/markup/formatter.rb b/lib/rdoc/markup/formatter.rb
index ac76db3536..a5f639c28c 100644
--- a/lib/rdoc/markup/formatter.rb
+++ b/lib/rdoc/markup/formatter.rb
@@ -42,7 +42,12 @@ class RDoc::Markup::Formatter
def accept_document document
document.parts.each do |item|
- item.accept self
+ case item
+ when RDoc::Markup::Document then # HACK
+ accept_document item
+ else
+ item.accept self
+ end
end
end
diff --git a/lib/rdoc/markup/heading.rb b/lib/rdoc/markup/heading.rb
index b72c3e2b14..b1f372222f 100644
--- a/lib/rdoc/markup/heading.rb
+++ b/lib/rdoc/markup/heading.rb
@@ -1,7 +1,8 @@
##
# A heading with a level (1-6) and text
-class RDoc::Markup::Heading < Struct.new :level, :text
+RDoc::Markup::Heading =
+ Struct.new :level, :text do
@to_html = nil
@to_label = nil
diff --git a/lib/rdoc/markup/to_table_of_contents.rb b/lib/rdoc/markup/to_table_of_contents.rb
index 54f2d5f64f..2e0f98cfeb 100644
--- a/lib/rdoc/markup/to_table_of_contents.rb
+++ b/lib/rdoc/markup/to_table_of_contents.rb
@@ -18,15 +18,31 @@ class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
attr_reader :res
+ ##
+ # Omits headings with a level less than the given level.
+
+ attr_accessor :omit_headings_below
+
def initialize # :nodoc:
super nil
+
+ @omit_headings_below = nil
+ end
+
+ ##
+ # Adds +document+ to the output, using its heading cutoff if present
+
+ def accept_document document
+ @omit_headings_below = document.omit_headings_below
+
+ super
end
##
# Adds +heading+ to the table of contents
def accept_heading heading
- @res << heading
+ @res << heading unless suppressed? heading
end
##
@@ -40,9 +56,19 @@ class RDoc::Markup::ToTableOfContents < RDoc::Markup::Formatter
# Prepares the visitor for text generation
def start_accepting
+ @omit_headings_below = nil
@res = []
end
+ ##
+ # Returns true if +heading+ is below the display threshold
+
+ def suppressed? heading
+ return false unless @omit_headings_below
+
+ heading.level > @omit_headings_below
+ end
+
# :stopdoc:
alias accept_block_quote ignore
alias accept_raw ignore
diff --git a/lib/rdoc/parser/changelog.rb b/lib/rdoc/parser/changelog.rb
index a74d7418d9..6a21506a93 100644
--- a/lib/rdoc/parser/changelog.rb
+++ b/lib/rdoc/parser/changelog.rb
@@ -23,13 +23,14 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
def create_document groups
doc = RDoc::Markup::Document.new
+ doc.omit_headings_below = 2
doc.file = @top_level
doc << RDoc::Markup::Heading.new(1, File.basename(@file_name))
doc << RDoc::Markup::BlankLine.new
groups.sort_by do |day,| day end.reverse_each do |day, entries|
- doc << RDoc::Markup::Heading.new(2, day)
+ doc << RDoc::Markup::Heading.new(2, day.dup)
doc << RDoc::Markup::BlankLine.new
doc.concat create_entries entries
@@ -55,7 +56,11 @@ class RDoc::Parser::ChangeLog < RDoc::Parser
list = RDoc::Markup::List.new :NOTE
items.each do |item|
- title, body = item.split(/:\s*/, 2)
+ item =~ /\A(.*?(?:\([^)]+\))?):\s*/
+
+ title = $1
+ body = $'
+
paragraph = RDoc::Markup::Paragraph.new body
list_item = RDoc::Markup::ListItem.new title, paragraph
list << list_item
diff --git a/test/rdoc/test_rdoc_markup_document.rb b/test/rdoc/test_rdoc_markup_document.rb
index 564434dfe6..0ab87280eb 100644
--- a/test/rdoc/test_rdoc_markup_document.rb
+++ b/test/rdoc/test_rdoc_markup_document.rb
@@ -191,5 +191,24 @@ class TestRDocMarkupDocument < RDoc::TestCase
assert_equal expected, doc.table_of_contents
end
+ def test_table_of_contents_omit_headings_below
+ document = doc(
+ head(1, 'A'),
+ para('B'),
+ head(2, 'C'),
+ para('D'),
+ head(1, 'E'),
+ para('F'))
+
+ document.omit_headings_below = 1
+
+ expected = [
+ head(1, 'A'),
+ head(1, 'E'),
+ ]
+
+ assert_equal expected, document.table_of_contents
+ end
+
end
diff --git a/test/rdoc/test_rdoc_markup_to_table_of_contents.rb b/test/rdoc/test_rdoc_markup_to_table_of_contents.rb
index fd0be746d8..ba17b845a7 100644
--- a/test/rdoc/test_rdoc_markup_to_table_of_contents.rb
+++ b/test/rdoc/test_rdoc_markup_to_table_of_contents.rb
@@ -91,5 +91,36 @@ class TestRDocMarkupToTableOfContents < RDoc::Markup::FormatterTestCase
alias list_verbatim empty
alias start_accepting empty
+ def test_accept_document_omit_headings_below
+ document = doc
+ document.omit_headings_below = 2
+
+ @to.accept_document document
+
+ assert_equal 2, @to.omit_headings_below
+ end
+
+ def test_accept_heading_suppressed
+ @to.start_accepting
+ @to.omit_headings_below = 4
+
+ suppressed = head 5, 'Hello'
+
+ @to.accept_heading suppressed
+
+ assert_empty @to.res
+ end
+
+ def test_suppressed_eh
+ @to.omit_headings_below = nil
+
+ refute @to.suppressed? head(1, '')
+
+ @to.omit_headings_below = 1
+
+ refute @to.suppressed? head(1, '')
+ assert @to.suppressed? head(2, '')
+ end
+
end
diff --git a/test/rdoc/test_rdoc_parser_changelog.rb b/test/rdoc/test_rdoc_parser_changelog.rb
index be3b7145f3..2b8e591332 100644
--- a/test/rdoc/test_rdoc_parser_changelog.rb
+++ b/test/rdoc/test_rdoc_parser_changelog.rb
@@ -96,7 +96,17 @@ class TestRDocParserChangeLog < RDoc::TestCase
expected.file = @top_level
- assert_equal expected, parser.create_document(groups)
+ document = parser.create_document(groups)
+
+ assert_equal expected, document
+
+ assert_equal 2, document.omit_headings_below
+
+ headings = document.parts.select do |part|
+ RDoc::Markup::Heading === part and part.level == 2
+ end
+
+ refute headings.all? { |heading| heading.text.frozen? }
end
def test_create_entries
@@ -118,6 +128,26 @@ class TestRDocParserChangeLog < RDoc::TestCase
list(:NOTE, item('c', para('three')), item('d', para('four'))),
]
+ entries = parser.create_entries(entries)
+ assert_equal expected, entries
+ end
+
+ def test_create_entries_colons
+ parser = util_parser
+
+ entries = [
+ ['Wed Dec 5 12:17:11 2012 Naohisa Goto <ngotogenome@gmail.com>',
+ ['func.rb (DL::Function#bind): log stuff [ruby-core:50562]']],
+ ]
+
+ expected = [
+ head(3,
+ 'Wed Dec 5 12:17:11 2012 Naohisa Goto <ngotogenome@gmail.com>'),
+ blank_line,
+ list(:NOTE,
+ item('func.rb (DL::Function#bind)',
+ para('log stuff [ruby-core:50562]')))]
+
assert_equal expected, parser.create_entries(entries)
end