Class: RDoc::Context::Section
- Inherits:
-
Object
- Object
- RDoc::Context::Section
- Includes:
- Generator::Markup, Text
- Defined in:
- lib/rdoc/context/section.rb,
lib/rdoc/generator/markup.rb
Overview
A section of documentation like:
# :section: The title
# The body
Sections can be referenced multiple times and will be collapsed into a single section.
Constant Summary collapse
- MARSHAL_VERSION =
:nodoc:
0
- @@sequence =
"SEC00000"
Constants included from Text
Text::MARKUP_FORMAT, Text::TO_HTML_CHARACTERS
Instance Attribute Summary collapse
-
#comment ⇒ Object
readonly
Section comment.
-
#comments ⇒ Object
readonly
Section comments.
-
#parent ⇒ Object
readonly
Context this Section lives in.
-
#title ⇒ Object
readonly
Section title.
Instance Method Summary collapse
-
#==(other) ⇒ Object
Sections are equal when they have the same #title.
-
#add_comment(comment) ⇒ Object
Adds
comment
to this section. -
#aref ⇒ Object
Anchor reference for linking to this section.
-
#extract_comment(comment) ⇒ Object
Extracts the comment for this section from the original comment block.
-
#in_files ⇒ Object
The files comments in this section come from.
-
#initialize(parent, title, comment) ⇒ Section
constructor
Creates a new section with
title
andcomment
. -
#inspect ⇒ Object
:nodoc:.
-
#marshal_dump ⇒ Object
Serializes this Section.
-
#marshal_load(array) ⇒ Object
De-serializes this Section.
-
#parse ⇒ Object
Parses
comment_location
into an RDoc::Markup::Document composed of multiple RDoc::Markup::Documents with their file set. -
#plain_html ⇒ Object
The section’s title, or ‘Top Section’ if the title is nil.
-
#remove_comment(comment) ⇒ Object
Removes a comment from this section if it is from the same file as
comment
. -
#sequence ⇒ Object
Section sequence number (deprecated).
Methods included from Generator::Markup
#aref_to, #as_href, #cvs_url, #description, #formatter
Methods included from Text
encode_fallback, #expand_tabs, #flush_left, #markup, #normalize_comment, #snippet, #strip_hashes, #strip_newlines, #strip_stars, #to_html, #wrap
Constructor Details
#initialize(parent, title, comment) ⇒ Section
Creates a new section with title
and comment
41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/rdoc/context/section.rb', line 41 def initialize parent, title, comment @parent = parent @title = title ? title.strip : title @@sequence.succ! @sequence = @@sequence.dup @comments = [] add_comment comment end |
Instance Attribute Details
#comment ⇒ Object (readonly)
Section comment
19 20 21 |
# File 'lib/rdoc/context/section.rb', line 19 def comment @comment end |
#comments ⇒ Object (readonly)
Section comments
24 25 26 |
# File 'lib/rdoc/context/section.rb', line 24 def comments @comments end |
#parent ⇒ Object (readonly)
Context this Section lives in
29 30 31 |
# File 'lib/rdoc/context/section.rb', line 29 def parent @parent end |
#title ⇒ Object (readonly)
Section title
34 35 36 |
# File 'lib/rdoc/context/section.rb', line 34 def title @title end |
Instance Method Details
#==(other) ⇒ Object
Sections are equal when they have the same #title
56 57 58 |
# File 'lib/rdoc/context/section.rb', line 56 def == other self.class === other and @title == other.title end |
#add_comment(comment) ⇒ Object
Adds comment
to this section
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/rdoc/context/section.rb', line 63 def add_comment comment comment = extract_comment comment return if comment.empty? case comment when RDoc::Comment then @comments << comment when RDoc::Markup::Document then @comments.concat comment.parts when Array then @comments.concat comment else raise TypeError, "unknown comment type: #{comment.inspect}" end end |
#aref ⇒ Object
Anchor reference for linking to this section
83 84 85 86 87 |
# File 'lib/rdoc/context/section.rb', line 83 def aref title = @title || '[untitled]' CGI.escape(title).gsub('%', '-').sub(/^-/, '') end |
#extract_comment(comment) ⇒ Object
Extracts the comment for this section from the original comment block. If the first line contains :section:, strip it and use the rest. Otherwise remove lines up to the line containing :section:, and look for those lines again at the end and remove them. This lets us write
# :section: The title
# The body
98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/rdoc/context/section.rb', line 98 def extract_comment comment case comment when Array then comment.map do |c| extract_comment c end when nil RDoc::Comment.new '' when RDoc::Comment then if comment.text =~ /^#[ \t]*:section:.*\n/ then start = $` rest = $' comment.text = if start.empty? then rest else rest.sub(/#{start.chomp}\Z/, '') end end comment when RDoc::Markup::Document then comment else raise TypeError, "unknown comment #{comment.inspect}" end end |
#in_files ⇒ Object
The files comments in this section come from
133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'lib/rdoc/context/section.rb', line 133 def in_files return [] if @comments.empty? case @comments when Array then @comments.map do |comment| comment.file end when RDoc::Markup::Document then @comment.parts.map do |document| document.file end else raise RDoc::Error, "BUG: unknown comment class #{@comments.class}" end end |
#inspect ⇒ Object
:nodoc:
126 127 128 |
# File 'lib/rdoc/context/section.rb', line 126 def inspect # :nodoc: "#<%s:0x%x %p>" % [self.class, object_id, title] end |
#marshal_dump ⇒ Object
Serializes this Section. The title and parsed comment are saved, but not the section parent which must be restored manually.
154 155 156 157 158 159 160 |
# File 'lib/rdoc/context/section.rb', line 154 def marshal_dump [ MARSHAL_VERSION, @title, parse, ] end |
#marshal_load(array) ⇒ Object
De-serializes this Section. The section parent must be restored manually.
165 166 167 168 169 170 |
# File 'lib/rdoc/context/section.rb', line 165 def marshal_load array @parent = nil @title = array[1] @comments = array[2] end |
#parse ⇒ Object
Parses comment_location
into an RDoc::Markup::Document composed of multiple RDoc::Markup::Documents with their file set.
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/rdoc/context/section.rb', line 176 def parse case @comments when String then super when Array then docs = @comments.map do |comment, location| doc = super comment doc.file = location if location doc end RDoc::Markup::Document.new(*docs) when RDoc::Comment then doc = super @comments.text, comments.format doc.file = @comments.location doc when RDoc::Markup::Document then return @comments else raise ArgumentError, "unknown comment class #{comments.class}" end end |
#plain_html ⇒ Object
The section’s title, or ‘Top Section’ if the title is nil.
This is used by the table of contents template so the name is silly.
204 205 206 |
# File 'lib/rdoc/context/section.rb', line 204 def plain_html @title || 'Top Section' end |
#remove_comment(comment) ⇒ Object
Removes a comment from this section if it is from the same file as comment
212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
# File 'lib/rdoc/context/section.rb', line 212 def remove_comment comment return if @comments.empty? case @comments when Array then @comments.delete_if do |my_comment| my_comment.file == comment.file end when RDoc::Markup::Document then @comments.parts.delete_if do |document| document.file == comment.file.name end else raise RDoc::Error, "BUG: unknown comment class #{@comments.class}" end end |
#sequence ⇒ Object
Section sequence number (deprecated)
232 233 234 235 |
# File 'lib/rdoc/context/section.rb', line 232 def sequence warn "RDoc::Context::Section#sequence is deprecated, use #aref" @sequence end |