Class: RDoc::Markup::Document

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/rdoc/markup/document.rb

Overview

A Document containing lists, headings, paragraphs, etc.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(*parts) ⇒ Document

Creates a new Document with parts

[View source]

29
30
31
32
33
34
35
# File 'lib/rdoc/markup/document.rb', line 29

def initialize *parts
  @parts = []
  @parts.concat parts

  @file = nil
  @omit_headings_from_table_of_contents_below = nil
end

Instance Attribute Details

#fileObject

The file this document was created from. See also RDoc::ClassModule#add_comment


13
14
15
# File 'lib/rdoc/markup/document.rb', line 13

def file
  @file
end

#omit_headings_belowObject

If a heading is below the given level it will be omitted from the table_of_contents


19
20
21
# File 'lib/rdoc/markup/document.rb', line 19

def omit_headings_below
  @omit_headings_below
end

#partsObject (readonly)

The parts of the Document


24
25
26
# File 'lib/rdoc/markup/document.rb', line 24

def parts
  @parts
end

Instance Method Details

#<<(part) ⇒ Object

Appends part to the document

[View source]

40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/rdoc/markup/document.rb', line 40

def << part
  case part
  when RDoc::Markup::Document then
    unless part.empty? then
      parts.concat part.parts
      parts << RDoc::Markup::BlankLine.new
    end
  when String then
    raise ArgumentError,
          "expected RDoc::Markup::Document and friends, got String" unless
      part.empty?
  else
    parts << part
  end
end

#==(other) ⇒ Object

:nodoc:

[View source]

56
57
58
59
60
# File 'lib/rdoc/markup/document.rb', line 56

def == other # :nodoc:
  self.class == other.class and
    @file == other.file and
    @parts == other.parts
end

#accept(visitor) ⇒ Object

Runs this document and all its #items through visitor

[View source]

65
66
67
68
69
70
71
# File 'lib/rdoc/markup/document.rb', line 65

def accept visitor
  visitor.start_accepting

  visitor.accept_document self

  visitor.end_accepting
end

#concat(parts) ⇒ Object

Concatenates the given parts onto the document

[View source]

76
77
78
# File 'lib/rdoc/markup/document.rb', line 76

def concat parts
  self.parts.concat parts
end

#each(&block) ⇒ Object

Enumerator for the parts of this document

[View source]

83
84
85
# File 'lib/rdoc/markup/document.rb', line 83

def each &block
  @parts.each(&block)
end

#empty?Boolean

Does this document have no parts?

Returns:

  • (Boolean)
[View source]

90
91
92
# File 'lib/rdoc/markup/document.rb', line 90

def empty?
  @parts.empty? or (@parts.length == 1 and merged? and @parts.first.empty?)
end

#merge(other) ⇒ Object

When this is a collection of documents (#file is not set and this document contains only other documents as its direct children) #merge replaces documents in this class with documents from other when the file matches and adds documents from other when the files do not.

The information in other is preferred over the receiver

[View source]

114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/rdoc/markup/document.rb', line 114

def merge other
  if empty? then
    @parts = other.parts
    return self
  end

  other.parts.each do |other_part|
    self.parts.delete_if do |self_part|
      self_part.file and self_part.file == other_part.file
    end

    self.parts << other_part
  end

  self
end

#merged?Boolean

Does this Document contain other Documents?

Returns:

  • (Boolean)
[View source]

134
135
136
# File 'lib/rdoc/markup/document.rb', line 134

def merged?
  RDoc::Markup::Document === @parts.first
end

#pretty_print(q) ⇒ Object

:nodoc:

[View source]

138
139
140
141
142
143
144
145
146
# File 'lib/rdoc/markup/document.rb', line 138

def pretty_print q # :nodoc:
  start = @file ? "[doc (#{@file}): " : '[doc: '

  q.group 2, start, ']' do
    q.seplist @parts do |part|
      q.pp part
    end
  end
end

#push(*parts) ⇒ Object

Appends parts to the document

[View source]

151
152
153
# File 'lib/rdoc/markup/document.rb', line 151

def push *parts
  self.parts.concat parts
end

#table_of_contentsObject

Returns an Array of headings in the document.

Require ‘rdoc/markup/formatter’ before calling this method.

[View source]

160
161
162
# File 'lib/rdoc/markup/document.rb', line 160

def table_of_contents
  accept RDoc::Markup::ToTableOfContents.to_toc
end