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