Class: RDoc::Comment
| Relationships & Source Files | |
| Super Chains via Extension / Inclusion / Inheritance | |
| Instance Chain: 
          self,
           Text | |
| Inherits: | Object | 
| Defined in: | lib/rdoc/comment.rb | 
Overview
A comment holds the text comment for a CodeObject and provides a unified way of cleaning it up and parsing it into an Markup::Document.
Each comment may have a different markup format set by #format=.  By default ‘rdoc’ is used.  The :markup: directive tells RDoc which format to use.
See RDoc::Markup@Other+directives for instructions on adding an alternate format.
Constant Summary
Text - Included
  
Class Method Summary
Instance Attribute Summary
- 
    
      #document=(value)  
    
    writeonly
    Overrides the content returned by #parse. 
- 
    
      #empty?  ⇒ Boolean 
    
    readonly
    A comment is empty if its text String is empty. 
- 
    
      #format  
    
    rw
    The format of this comment. 
- 
    
      #format=(format)  
    
    rw
    Sets the format of this comment and resets any parsed document. 
- 
    
      #line  
    
    rw
    Line where this Commentwas written.
- 
    
      #location  
      (also: #file)
    
    rw
    The TopLevelthis comment was found in.
- 
    
      #text  
      (also: #to_s)
    
    rw
    The text for this comment. 
- 
    
      #text=(text)  
    
    rw
    Replaces this comment’s text with #text and resets the parsed document. 
- 
    
      #to_s  
    
    readonly
    Aliasfor text.
- 
    
      #tomdoc?  ⇒ Boolean 
    
    readonly
    Returns true if this comment is in TomDocformat.
- 
    
      #file  
    
    readonly
    Internal use only
    For duck-typing when merging classes at load time. 
- 
    
      #normalized?  ⇒ Boolean 
    
    readonly
    Internal use only
    Was this text normalized? 
Text - Included
Instance Method Summary
- 
    
      #encode!(encoding)  
    
    HACK dubious. 
- 
    
      #extract_call_seq(method)  
    
    Look for a ‘call-seq’ in the comment to override the normal parameter handling. 
- 
    
      #normalize  
    
    Normalizes the text. 
- 
    
      #parse  
    
    Parses the comment into an Markup::Document.
- 
    
      #remove_private  
    
    Removes private sections from this comment. 
- #==(other) Internal use only
- #initialize_copy(copy) Internal use only
- #inspect Internal use only
Text - Included
| #expand_tabs | Expands tab characters in #text to eight spaces. | 
| #flush_left | Flush #text left based on the shortest line. | 
| #markup | Convert a string in markup format into HTML. | 
| #normalize_comment | Strips hashes, expands tabs then flushes #text to the left. | 
| #parse | Normalizes #text then builds a  | 
| #snippet | The first  | 
| #strip_hashes | Strips leading # characters from #text | 
| #strip_newlines | Strips leading and trailing n characters from #text | 
| #strip_stars | Strips /* */ style comments. | 
| #to_html | Converts ampersand, dashes, ellipsis, quotes, copyright and registered trademark symbols in #text to properly encoded characters. | 
| #wrap | Wraps  | 
Constructor Details
    .new(text = nil, location = nil, language = nil)  ⇒ Comment 
  
  [ GitHub ]
Instance Attribute Details
#document=(value) (writeonly)
[ GitHub ]# File 'lib/rdoc/comment.rb', line 50
attr_writer :document
    #empty?  ⇒ Boolean  (readonly)
  
A comment is empty if its text String is empty.
# File 'lib/rdoc/comment.rb', line 144
def empty? @text.empty? end
#file (readonly)
For duck-typing when merging classes at load time
# File 'lib/rdoc/comment.rb', line 34
alias file location # :nodoc:
#format (rw)
The format of this comment.  Defaults to Markup
# File 'lib/rdoc/comment.rb', line 19
attr_reader :format
#format=(format) (rw)
Sets the format of this comment and resets any parsed document
#line (rw)
Line where this Comment was written
# File 'lib/rdoc/comment.rb', line 29
attr_accessor :line
#location (rw) Also known as: #file
The TopLevel this comment was found in
# File 'lib/rdoc/comment.rb', line 24
attr_accessor :location
    #normalized?  ⇒ Boolean  (readonly)
  
  Was this text normalized?
# File 'lib/rdoc/comment.rb', line 192
def normalized? # :nodoc: @normalized end
#text (rw) Also known as: #to_s
The text for this comment
# File 'lib/rdoc/comment.rb', line 39
attr_reader :text
#text=(text) (rw)
Replaces this comment’s text with #text and resets the parsed document.
An error is raised if the comment contains a document but no text.
#to_s (readonly)
Alias for text
# File 'lib/rdoc/comment.rb', line 44
alias to_s text
    #tomdoc?  ⇒ Boolean  (readonly)
  
Returns true if this comment is in TomDoc format.
# File 'lib/rdoc/comment.rb', line 246
def tomdoc? @format == 'tomdoc' end
Instance Method Details
#==(other)
#encode!(encoding)
HACK dubious
# File 'lib/rdoc/comment.rb', line 151
def encode! encoding # TODO: Remove this condition after Ruby 2.2 EOL if RUBY_VERSION < '2.3.0' @text = @text.force_encoding encoding else @text = String.new @text, encoding: encoding end self end
#extract_call_seq(method)
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# 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 @text =~ /^\s*:?call-seq:(.*?(?:\S).*?)^\s*$/m then all_start, all_stop = $~.offset(0) seq_start, seq_stop = $~.offset(1) # we get the following lines that start with the leading word at the # same indent, even if they have blank lines before if $1 =~ /(^\s*\n)^(\s*\w)/m then leading = $2 # ' * ARGF' in the example above re = %r% \A( (^\s*\n)+ (^#{Regexp.escape leading}.*?\n)+ )+ ^\s*$ %xm if @text[seq_stop..-1] =~ re then all_stop = seq_stop + $~.offset(0).last seq_stop = seq_stop + $~.offset(1).last end end seq = @text[seq_start..seq_stop] seq.gsub!(/^\s*(\S|\n)/m, '\1') @text.slice! all_start...all_stop method.call_seq = seq.chomp else regexp = /^\s*:?call-seq:(.*?)(^\s*$|\z)/m if regexp =~ @text then @text = @text.sub(regexp, '') seq = $1 seq.gsub!(/^\s*/, '') method.call_seq = seq end end method end
#initialize_copy(copy)
# File 'lib/rdoc/comment.rb', line 70
def initialize_copy copy # :nodoc: @text = copy.text.dup end
#inspect
#normalize
Normalizes the text. See Text#normalize_comment for details
# File 'lib/rdoc/comment.rb', line 178
def normalize return self unless @text return self if @normalized # TODO eliminate duplicate normalization @text = normalize_comment @text @normalized = true self end
#parse
Parses the comment into an Markup::Document.  The parsed document is cached until the text is changed.
# File 'lib/rdoc/comment.rb', line 200
def parse return @document if @document @document = super @text, @format @document.file = @location @document end
#remove_private
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
 */