| Class | Generators::HtmlMethod |
| In: |
generators/html_generator.rb
|
| Parent: | Object |
| context | [R] | |
| img_url | [R] | |
| source_code | [R] | |
| src_url | [R] |
# File generators/html_generator.rb, line 1089
1089: def HtmlMethod.all_methods
1090: @@all_methods
1091: end
# File generators/html_generator.rb, line 958
958: def initialize(context, html_class, options)
959: @context = context
960: @html_class = html_class
961: @options = options
962: @@seq = @@seq.succ
963: @seq = @@seq
964: @@all_methods << self
965:
966: context.viewer = self
967:
968: if (ts = @context.token_stream)
969: @source_code = markup_code(ts)
970: unless @options.inline_source
971: @src_url = create_source_code_file(@source_code)
972: @img_url = HTMLGenerator.gen_url(path, 'source.png')
973: end
974: end
975:
976: AllReferences.add(name, self)
977: end
# File generators/html_generator.rb, line 954
954: def HtmlMethod::reset
955: @@all_methods = []
956: end
# File generators/html_generator.rb, line 1093
1093: def <=>(other)
1094: @context <=> other.context
1095: end
we rely on the fact that the first line of a source code listing has
# File xxxxx, line dddd
# File generators/html_generator.rb, line 1140
1140: def add_line_numbers(src)
1141: if src =~ /\A.*, line (\d+)/
1142: first = $1.to_i - 1
1143: last = first + src.count("\n")
1144: size = last.to_s.length
1145: real_fmt = "%#{size}d: "
1146: fmt = " " * (size+2)
1147: src.gsub!(/^/) do
1148: res = sprintf(fmt, first)
1149: first += 1
1150: fmt = real_fmt
1151: res
1152: end
1153: end
1154: end
return 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
# File generators/html_generator.rb, line 983
983: def as_href(from_path)
984: if @options.all_one_file
985: "#" + path
986: else
987: HTMLGenerator.gen_url(from_path, path)
988: end
989: end
# File generators/html_generator.rb, line 1035
1035: def call_seq
1036: cs = @context.call_seq
1037: if cs
1038: cs.gsub(/\n/, "<br />\n")
1039: else
1040: nil
1041: end
1042: end
# File generators/html_generator.rb, line 1070
1070: def create_source_code_file(code_body)
1071: template_regexp = Regexp.new("\\." + @options.template + "$")
1072: meth_path = @html_class.path.sub(template_regexp, '.src')
1073: File.makedirs(meth_path)
1074: file_path = File.join(meth_path, @seq) + '.' + @options.template
1075:
1076: template = TemplatePage.new(RDoc::Page::SRC_PAGE)
1077: File.open(file_path, "w") do |f|
1078: values = {
1079: 'title' => CGI.escapeHTML(index_name),
1080: 'code' => code_body,
1081: 'style_url' => style_url(file_path, @options.css),
1082: 'charset' => @options.charset
1083: }
1084: template.write_html_on(f, values)
1085: end
1086: HTMLGenerator.gen_url(path, file_path)
1087: end
# File generators/html_generator.rb, line 1023
1023: def description
1024: markup(@context.comment)
1025: end
# File generators/html_generator.rb, line 1156
1156: def document_self
1157: @context.document_self
1158: end
Find a filenames in ourselves or our parent
# File generators/html_generator.rb, line 1173
1173: def find_file(file, method=nil)
1174: res = @context.parent.find_file(file, method, @options.ignore_case)
1175: if res
1176: res = res.viewer
1177: end
1178: res
1179: end
# File generators/html_generator.rb, line 1164
1164: def find_symbol(symbol, method=nil)
1165: res = @context.parent.find_symbol(symbol, method, @options.ignore_case)
1166: if res
1167: res = res.viewer
1168: end
1169: res
1170: end
# File generators/html_generator.rb, line 999
999: def index_name
1000: "#{@context.name} (#{@html_class.name})"
1001: end
Given a sequence of source tokens, mark up the source code to make it look purty.
# File generators/html_generator.rb, line 1102
1102: def markup_code(tokens)
1103: src = ""
1104: tokens.each do |t|
1105: next unless t
1106: # p t.class
1107: # style = STYLE_MAP[t.class]
1108: style = case t
1109: when RubyToken::TkCONSTANT then "ruby-constant"
1110: when RubyToken::TkKW then "ruby-keyword kw"
1111: when RubyToken::TkIVAR then "ruby-ivar"
1112: when RubyToken::TkOp then "ruby-operator"
1113: when RubyToken::TkId then "ruby-identifier"
1114: when RubyToken::TkNode then "ruby-node"
1115: when RubyToken::TkCOMMENT then "ruby-comment cmt"
1116: when RubyToken::TkREGEXP then "ruby-regexp re"
1117: when RubyToken::TkSTRING then "ruby-value str"
1118: when RubyToken::TkVal then "ruby-value"
1119: else
1120: nil
1121: end
1122:
1123: text = CGI.escapeHTML(t.text)
1124:
1125: if style
1126: src << "<span class=\"#{style}\">#{text}</span>"
1127: else
1128: src << text
1129: end
1130: end
1131:
1132: add_line_numbers(src) if Options.instance.include_line_numbers
1133: src
1134: end
# File generators/html_generator.rb, line 1044
1044: def params
1045: # params coming from a call-seq in 'C' will start with the
1046: # method name
1047: p = @context.params
1048: if p !~ /^\w/
1049: p = @context.params.gsub(/\s*\#.*/, '')
1050: p = p.tr("\n", " ").squeeze(" ")
1051: p = "(" + p + ")" unless p[0] == ?( || p == ''
1052:
1053: if (block = @context.block_params)
1054: # If this method has explicit block parameters, remove any
1055: # explicit &block
1056:
1057: p.sub!(/,?\s*&\w+/, '')
1058:
1059: block.gsub!(/\s*\#.*/, '')
1060: block = block.tr("\n", " ").squeeze(" ")
1061: if block[0] == ?(
1062: block.sub!(/^\(/, '').sub!(/\)/, '')
1063: end
1064: p << " {|#{block.strip}| ...}"
1065: end
1066: end
1067: CGI.escapeHTML(p)
1068: end
# File generators/html_generator.rb, line 1003
1003: def parent_name
1004: if @context.parent.parent
1005: @context.parent.parent.full_name
1006: else
1007: nil
1008: end
1009: end
# File generators/html_generator.rb, line 1015
1015: def path
1016: if @options.all_one_file
1017: aref
1018: else
1019: @html_class.path + "#" + aref
1020: end
1021: end
# File generators/html_generator.rb, line 1031
1031: def singleton
1032: @context.singleton
1033: end