Class: RDoc::Comment
Constant Summary
Constants included from Text
Text::MARKUP_FORMAT, Text::SPACE_SEPARATED_LETTER_CLASS, Text::TO_HTML_CHARACTERS
Instance Attribute Summary collapse
-
#document ⇒ Object
writeonly
Overrides the content returned by #parse.
-
#format ⇒ Object
The format of this comment.
-
#line ⇒ Object
Line where this Comment was written.
-
#location ⇒ Object
(also: #file)
The RDoc::TopLevel this comment was found in.
-
#text ⇒ Object
(also: #to_s)
The text for this comment.
Attributes included from Text
Instance Method Summary collapse
-
#==(other) ⇒ Object
:nodoc:.
-
#empty? ⇒ Boolean
A comment is empty if its text String is empty.
-
#encode!(encoding) ⇒ Object
HACK dubious.
-
#extract_call_seq(method) ⇒ Object
Look for a ‘call-seq’ in the comment to override the normal parameter handling.
-
#initialize(text = nil, location = nil, language = nil) ⇒ Comment
constructor
Creates a new comment with
text
that is found in the RDoc::TopLevellocation
. -
#initialize_copy(copy) ⇒ Object
– TODO deep copy @document.
-
#inspect ⇒ Object
:nodoc:.
-
#normalize ⇒ Object
Normalizes the text.
-
#normalized? ⇒ Boolean
Was this text normalized?.
-
#parse ⇒ Object
Parses the comment into an RDoc::Markup::Document.
-
#remove_private ⇒ Object
Removes private sections from this comment.
-
#tomdoc? ⇒ Boolean
Returns true if this comment is in TomDoc format.
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(text = nil, location = nil, language = nil) ⇒ Comment
Creates a new comment with text
that is found in the RDoc::TopLevel location
.
56 57 58 59 60 61 62 63 64 |
# File 'lib/rdoc/comment.rb', line 56 def initialize text = nil, location = nil, language = nil @location = location @text = text.nil? ? nil : text.dup @language = language @document = nil @format = 'rdoc' @normalized = false end |
Instance Attribute Details
#document=(value) ⇒ Object (writeonly)
Overrides the content returned by #parse. Use when there is no #text source for this comment
50 51 52 |
# File 'lib/rdoc/comment.rb', line 50 def document=(value) @document = value end |
#format ⇒ Object
The format of this comment. Defaults to RDoc::Markup
19 20 21 |
# File 'lib/rdoc/comment.rb', line 19 def format @format end |
#line ⇒ Object
Line where this Comment was written
29 30 31 |
# File 'lib/rdoc/comment.rb', line 29 def line @line end |
#location ⇒ Object Also known as: file
The RDoc::TopLevel this comment was found in
24 25 26 |
# File 'lib/rdoc/comment.rb', line 24 def location @location end |
#text ⇒ Object Also known as: to_s
The text for this comment
39 40 41 |
# File 'lib/rdoc/comment.rb', line 39 def text @text end |
Instance Method Details
#==(other) ⇒ Object
:nodoc:
74 75 76 77 |
# File 'lib/rdoc/comment.rb', line 74 def == other # :nodoc: self.class === other and other.text == @text and other.location == @location end |
#empty? ⇒ Boolean
A comment is empty if its text String is empty.
128 129 130 |
# File 'lib/rdoc/comment.rb', line 128 def empty? @text.empty? end |
#encode!(encoding) ⇒ Object
HACK dubious
135 136 137 138 |
# File 'lib/rdoc/comment.rb', line 135 def encode! encoding @text = String.new @text, encoding: encoding self end |
#extract_call_seq(method) ⇒ Object
Look for a ‘call-seq’ in the comment to override the normal parameter handling. The :call-seq: is indented from the baseline. All lines of the same indentation level and prefix are consumed.
For example, all of the following will be used as the :call-seq:
# :call-seq:
# ARGF.readlines(sep=$/) -> array
# ARGF.readlines(limit) -> array
# ARGF.readlines(sep, limit) -> array
#
# ARGF.to_a(sep=$/) -> array
# ARGF.to_a(limit) -> array
# ARGF.to_a(sep, limit) -> array
95 96 97 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 |
# File 'lib/rdoc/comment.rb', line 95 def extract_call_seq method # we must handle situations like the above followed by an unindented first # comment. The difficulty is to make sure not to match lines starting # with ARGF at the same indent, but that are after the first description # paragraph. if /^(?<S> ((?!\n)\s)*+ (?# whitespaces except newline)) :?call-seq: (?<B> \g<S>(?<N>\n|\z) (?# trailing spaces))? (?<seq> (\g<S>(?!\w)\S.*\g<N>)* (?> (?<H> \g<S>\w+ (?# ' # ARGF' in the example above)) .*\g<N>)? (\g<S>\S.*\g<N> (?# other non-blank line))*+ (\g<B>+(\k<H>.*\g<N> (?# ARGF.to_a lines))++)*+ ) (?m:^\s*$|\z) /x =~ @text seq = $~[:seq] all_start, all_stop = $~.offset(0) @text.slice! all_start...all_stop seq.gsub!(/^\s*/, '') method.call_seq = seq end method end |
#initialize_copy(copy) ⇒ Object
– TODO deep copy @document
70 71 72 |
# File 'lib/rdoc/comment.rb', line 70 def initialize_copy copy # :nodoc: @text = copy.text.dup end |
#inspect ⇒ Object
:nodoc:
148 149 150 151 152 |
# File 'lib/rdoc/comment.rb', line 148 def inspect # :nodoc: location = @location ? @location.relative_name : '(unknown)' "#<%s:%x %s %p>" % [self.class, object_id, location, @text] end |
#normalize ⇒ Object
Normalizes the text. See RDoc::Text#normalize_comment for details
157 158 159 160 161 162 163 164 165 166 |
# File 'lib/rdoc/comment.rb', line 157 def normalize return self unless @text return self if @normalized # TODO eliminate duplicate normalization @text = normalize_comment @text @normalized = true self end |
#normalized? ⇒ Boolean
Was this text normalized?
171 172 173 |
# File 'lib/rdoc/comment.rb', line 171 def normalized? # :nodoc: @normalized end |
#parse ⇒ Object
Parses the comment into an RDoc::Markup::Document. The parsed document is cached until the text is changed.
179 180 181 182 183 184 185 |
# File 'lib/rdoc/comment.rb', line 179 def parse return @document if @document @document = super @text, @format @document.file = @location @document end |
#remove_private ⇒ Object
Removes private sections from this comment. Private sections are flush to the comment marker and start with --
and end with ++
. For C-style comments, a private marker may not start at the opening of the comment.
/*
*--
* private
*++
* public
*/
200 201 202 203 204 205 206 207 |
# File 'lib/rdoc/comment.rb', line 200 def remove_private # Workaround for gsub encoding for Ruby 1.9.2 and earlier empty = '' empty = RDoc::Encoding.change_encoding empty, @text.encoding @text = @text.gsub(%r%^\s*([#*]?)--.*?^\s*(\1)\+\+\n?%m, empty) @text = @text.sub(%r%^\s*[#*]?--.*%m, '') end |
#tomdoc? ⇒ Boolean
Returns true if this comment is in TomDoc format.
225 226 227 |
# File 'lib/rdoc/comment.rb', line 225 def tomdoc? @format == 'tomdoc' end |