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



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

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

  @file = nil
  @omit_headings_from_table_of_contents_below = nil
end

Instance Attribute Details

#file ⇒ Object

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



15
16
17
# File 'lib/rdoc/markup/document.rb', line 15

def file
  @file
end

#omit_headings_below ⇒ Object

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



21
22
23
# File 'lib/rdoc/markup/document.rb', line 21

def omit_headings_below
  @omit_headings_below
end

#parts ⇒ Object (readonly)

The parts of the Document



26
27
28
# File 'lib/rdoc/markup/document.rb', line 26

def parts
  @parts
end

Instance Method Details

#<<(part) ⇒ Object

Appends part to the document



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

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

#==(other) ⇒ Object

:nodoc:



58
59
60
61
62
# File 'lib/rdoc/markup/document.rb', line 58

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



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

def accept(visitor)
  visitor.start_accepting

  visitor.accept_document self

  visitor.end_accepting
end

#concat(parts) ⇒ Object

Concatenates the given parts onto the document



78
79
80
# File 'lib/rdoc/markup/document.rb', line 78

def concat(parts)
  self.parts.concat parts
end

#each(&block) ⇒ Object

Enumerator for the parts of this document



85
86
87
# File 'lib/rdoc/markup/document.rb', line 85

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

#empty? ⇒ Boolean

Does this document have no parts?

Returns:

  • (Boolean)


92
93
94
# File 'lib/rdoc/markup/document.rb', line 92

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



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

def merge(other)
  if empty?
    @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)


136
137
138
# File 'lib/rdoc/markup/document.rb', line 136

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

#pretty_print(q) ⇒ Object

:nodoc:



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

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



153
154
155
# File 'lib/rdoc/markup/document.rb', line 153

def push(*parts)
  self.parts.concat parts
end

#table_of_contents ⇒ Object

Returns an Array of headings in the document.

Require 'rdoc/markup/formatter' before calling this method.



162
163
164
# File 'lib/rdoc/markup/document.rb', line 162

def table_of_contents
  accept Markup::ToTableOfContents.to_toc
end