Class: RDoc::Generator::Method

Inherits:
Object
  • Object
show all
Includes:
MarkUp
Defined in:
lib/rdoc/generator.rb

Constant Summary collapse

@@seq =
"M000000"
@@all_methods =
[]

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Methods included from MarkUp

#cvs_url, #markup, #style_url

Constructor Details

#initialize(context, html_class, options) ⇒ Method

Returns a new instance of Method.



830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
# File 'lib/rdoc/generator.rb', line 830

def initialize(context, html_class, options)
  # TODO: rethink the class hierarchy here...
  @context    = context
  @html_class = html_class
  @options    = options
  @formatter = @options.formatter ||
    RDoc::Markup::ToHtmlCrossref.new(path, self, @options.show_hash)

  # HACK ugly
  @template = options.template_class

  @@seq       = @@seq.succ
  @seq        = @@seq
  @@all_methods << self

  context.viewer = self

  if (ts = @context.token_stream)
    @source_code = markup_code(ts)
    unless @options.inline_source
      @src_url = create_source_code_file(@source_code)
      @img_url = RDoc::Generator.gen_url path, 'source.png'
    end
  end

  AllReferences.add(name, self)
end

Instance Attribute Details

#contextObject (readonly)

Returns the value of attribute context.



813
814
815
# File 'lib/rdoc/generator.rb', line 813

def context
  @context
end

#img_urlObject (readonly)

Returns the value of attribute img_url.



815
816
817
# File 'lib/rdoc/generator.rb', line 815

def img_url
  @img_url
end

#source_codeObject (readonly)

Returns the value of attribute source_code.



816
817
818
# File 'lib/rdoc/generator.rb', line 816

def source_code
  @source_code
end

#src_urlObject (readonly)

Returns the value of attribute src_url.



814
815
816
# File 'lib/rdoc/generator.rb', line 814

def src_url
  @src_url
end

Class Method Details

.all_methodsObject



822
823
824
# File 'lib/rdoc/generator.rb', line 822

def self.all_methods
  @@all_methods
end

.resetObject



826
827
828
# File 'lib/rdoc/generator.rb', line 826

def self.reset
  @@all_methods = []
end

Instance Method Details

#<=>(other) ⇒ Object



969
970
971
# File 'lib/rdoc/generator.rb', line 969

def <=>(other)
  @context <=> other.context
end

#add_line_numbers(src) ⇒ Object

We rely on the fact that the first line of a source code listing has

# File xxxxx, line dddd


1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
# File 'lib/rdoc/generator.rb', line 1015

def add_line_numbers(src)
  if src =~ /\A.*, line (\d+)/
    first = $1.to_i - 1
    last  = first + src.count("\n")
    size = last.to_s.length
    real_fmt = "%#{size}d: "
    fmt = " " * (size+2)
    src.gsub!(/^/) do
      res = sprintf(fmt, first)
      first += 1
      fmt = real_fmt
      res
    end
  end
end

#aliasesObject



1035
1036
1037
# File 'lib/rdoc/generator.rb', line 1035

def aliases
  @context.aliases
end

#arefObject



890
891
892
# File 'lib/rdoc/generator.rb', line 890

def aref
  @seq
end

#as_href(from_path) ⇒ Object

Returns a reference to outselves to be used as an href= the form depends on whether we’re all in one file or in multiple files



862
863
864
865
866
867
868
# File 'lib/rdoc/generator.rb', line 862

def as_href(from_path)
  if @options.all_one_file
    "#" + path
  else
    RDoc::Generator.gen_url from_path, path
  end
end

#call_seqObject



914
915
916
917
918
919
920
921
# File 'lib/rdoc/generator.rb', line 914

def call_seq
  cs = @context.call_seq
  if cs
    cs.gsub(/\n/, "<br />\n")
  else
    nil
  end
end

#create_source_code_file(code_body) ⇒ Object



949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
# File 'lib/rdoc/generator.rb', line 949

def create_source_code_file(code_body)
  meth_path = @html_class.path.sub(/\.html$/, '.src')
  FileUtils.mkdir_p(meth_path)
  file_path = ::File.join meth_path, "#{@seq}.html"

  template = RDoc::TemplatePage.new(@template::SRC_PAGE)

  open file_path, 'w' do |f|
    values = {
      'title'     => CGI.escapeHTML(index_name),
      'code'      => code_body,
      'style_url' => style_url(file_path, @options.css),
      'charset'   => @options.charset
    }
    template.write_html_on(f, values)
  end

  RDoc::Generator.gen_url path, file_path
end

#descriptionObject



902
903
904
# File 'lib/rdoc/generator.rb', line 902

def description
  markup(@context.comment)
end

#document_selfObject



1031
1032
1033
# File 'lib/rdoc/generator.rb', line 1031

def document_self
  @context.document_self
end

#find_symbol(symbol, method = nil) ⇒ Object



1039
1040
1041
1042
1043
1044
1045
# File 'lib/rdoc/generator.rb', line 1039

def find_symbol(symbol, method=nil)
  res = @context.parent.find_symbol(symbol, method)
  if res
    res = res.viewer
  end
  res
end

#index_nameObject



878
879
880
# File 'lib/rdoc/generator.rb', line 878

def index_name
  "#{@context.name} (#{@html_class.name})"
end

#markup_code(tokens) ⇒ Object

Given a sequence of source tokens, mark up the source code to make it look purty.



977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
# File 'lib/rdoc/generator.rb', line 977

def markup_code(tokens)
  src = ""
  tokens.each do |t|
    next unless t
    #    p t.class
#        style = STYLE_MAP[t.class]
    style = case t
            when RubyToken::TkCONSTANT then "ruby-constant"
            when RubyToken::TkKW       then "ruby-keyword kw"
            when RubyToken::TkIVAR     then "ruby-ivar"
            when RubyToken::TkOp       then "ruby-operator"
            when RubyToken::TkId       then "ruby-identifier"
            when RubyToken::TkNode     then "ruby-node"
            when RubyToken::TkCOMMENT  then "ruby-comment cmt"
            when RubyToken::TkREGEXP   then "ruby-regexp re"
            when RubyToken::TkSTRING   then "ruby-value str"
            when RubyToken::TkVal      then "ruby-value"
            else
                nil
            end

    text = CGI.escapeHTML(t.text)

    if style
      src << "<span class=\"#{style}\">#{text}</span>"
    else
      src << text
    end
  end

  add_line_numbers(src) if @options.include_line_numbers
  src
end

#nameObject



870
871
872
# File 'lib/rdoc/generator.rb', line 870

def name
  @context.name
end

#paramsObject



923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
# File 'lib/rdoc/generator.rb', line 923

def params
  # params coming from a call-seq in 'C' will start with the
  # method name
  params = @context.params
  if params !~ /^\w/
    params = @context.params.gsub(/\s*\#.*/, '')
    params = params.tr("\n", " ").squeeze(" ")
    params = "(" + params + ")" unless params[0] == ?(

    if (block = @context.block_params)
     # If this method has explicit block parameters, remove any
     # explicit &block

     params.sub!(/,?\s*&\w+/, '')

      block.gsub!(/\s*\#.*/, '')
      block = block.tr("\n", " ").squeeze(" ")
      if block[0] == ?(
        block.sub!(/^\(/, '').sub!(/\)/, '')
      end
      params << " {|#{block.strip}| ...}"
    end
  end
  CGI.escapeHTML(params)
end

#parent_nameObject



882
883
884
885
886
887
888
# File 'lib/rdoc/generator.rb', line 882

def parent_name
  if @context.parent.parent
    @context.parent.parent.full_name
  else
    nil
  end
end

#pathObject



894
895
896
897
898
899
900
# File 'lib/rdoc/generator.rb', line 894

def path
  if @options.all_one_file
    aref
  else
    @html_class.path + "#" + aref
  end
end

#sectionObject



874
875
876
# File 'lib/rdoc/generator.rb', line 874

def section
  @context.section
end

#singletonObject



910
911
912
# File 'lib/rdoc/generator.rb', line 910

def singleton
  @context.singleton
end

#visibilityObject



906
907
908
# File 'lib/rdoc/generator.rb', line 906

def visibility
  @context.visibility
end