rdoc-f95 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. data/History.txt +4 -0
  2. data/Manifest.txt +79 -0
  3. data/PostInstall.txt +7 -0
  4. data/README.rdoc +147 -0
  5. data/Rakefile +28 -0
  6. data/bin/rdoc-f95 +70 -0
  7. data/lib/rdoc-f95.rb +306 -0
  8. data/lib/rdoc-f95/code_objects.rb +776 -0
  9. data/lib/rdoc-f95/diagram.rb +342 -0
  10. data/lib/rdoc-f95/dot.rb +249 -0
  11. data/lib/rdoc-f95/generator.rb +1088 -0
  12. data/lib/rdoc-f95/generator/chm.rb +113 -0
  13. data/lib/rdoc-f95/generator/chm/chm.rb +98 -0
  14. data/lib/rdoc-f95/generator/html.rb +370 -0
  15. data/lib/rdoc-f95/generator/html/hefss.rb +414 -0
  16. data/lib/rdoc-f95/generator/html/html.rb +708 -0
  17. data/lib/rdoc-f95/generator/html/kilmer.rb +418 -0
  18. data/lib/rdoc-f95/generator/html/one_page_html.rb +121 -0
  19. data/lib/rdoc-f95/generator/ri.rb +229 -0
  20. data/lib/rdoc-f95/generator/xhtml.rb +106 -0
  21. data/lib/rdoc-f95/generator/xhtml/ctop.xsl +1318 -0
  22. data/lib/rdoc-f95/generator/xhtml/mathml.xsl +42 -0
  23. data/lib/rdoc-f95/generator/xhtml/pmathml.xsl +612 -0
  24. data/lib/rdoc-f95/generator/xhtml/pmathmlcss.xsl +872 -0
  25. data/lib/rdoc-f95/generator/xhtml/xhtml.rb +732 -0
  26. data/lib/rdoc-f95/generator/xml.rb +120 -0
  27. data/lib/rdoc-f95/generator/xml/rdf.rb +113 -0
  28. data/lib/rdoc-f95/generator/xml/xml.rb +111 -0
  29. data/lib/rdoc-f95/install.rb +166 -0
  30. data/lib/rdoc-f95/markup.rb +506 -0
  31. data/lib/rdoc-f95/markup/formatter.rb +14 -0
  32. data/lib/rdoc-f95/markup/fragments.rb +337 -0
  33. data/lib/rdoc-f95/markup/inline.rb +361 -0
  34. data/lib/rdoc-f95/markup/install.rb +57 -0
  35. data/lib/rdoc-f95/markup/lines.rb +152 -0
  36. data/lib/rdoc-f95/markup/mathml_wrapper.rb +91 -0
  37. data/lib/rdoc-f95/markup/preprocess.rb +71 -0
  38. data/lib/rdoc-f95/markup/sample/rdoc2latex.rb +16 -0
  39. data/lib/rdoc-f95/markup/sample/sample.rb +42 -0
  40. data/lib/rdoc-f95/markup/to_flow.rb +185 -0
  41. data/lib/rdoc-f95/markup/to_html.rb +357 -0
  42. data/lib/rdoc-f95/markup/to_html_crossref.rb +123 -0
  43. data/lib/rdoc-f95/markup/to_latex.rb +328 -0
  44. data/lib/rdoc-f95/markup/to_test.rb +50 -0
  45. data/lib/rdoc-f95/markup/to_xhtml_texparser.rb +234 -0
  46. data/lib/rdoc-f95/options.rb +745 -0
  47. data/lib/rdoc-f95/parsers/parse_c.rb +775 -0
  48. data/lib/rdoc-f95/parsers/parse_f95.rb +2499 -0
  49. data/lib/rdoc-f95/parsers/parse_rb.rb +2587 -0
  50. data/lib/rdoc-f95/parsers/parse_simple.rb +39 -0
  51. data/lib/rdoc-f95/parsers/parserfactory.rb +99 -0
  52. data/lib/rdoc-f95/ri.rb +2 -0
  53. data/lib/rdoc-f95/ri/cache.rb +188 -0
  54. data/lib/rdoc-f95/ri/descriptions.rb +147 -0
  55. data/lib/rdoc-f95/ri/display.rb +244 -0
  56. data/lib/rdoc-f95/ri/driver.rb +435 -0
  57. data/lib/rdoc-f95/ri/formatter.rb +603 -0
  58. data/lib/rdoc-f95/ri/paths.rb +105 -0
  59. data/lib/rdoc-f95/ri/reader.rb +106 -0
  60. data/lib/rdoc-f95/ri/util.rb +81 -0
  61. data/lib/rdoc-f95/ri/writer.rb +64 -0
  62. data/lib/rdoc-f95/stats.rb +23 -0
  63. data/lib/rdoc-f95/template.rb +64 -0
  64. data/lib/rdoc-f95/tokenstream.rb +33 -0
  65. data/lib/rdoc-f95/usage.rb +210 -0
  66. data/script/console +10 -0
  67. data/script/destroy +14 -0
  68. data/script/generate +14 -0
  69. data/test/test_helper.rb +3 -0
  70. data/test/test_rdoc-f95.rb +11 -0
  71. metadata +156 -0
@@ -0,0 +1,120 @@
1
+ require 'rdoc-f95/generator/html'
2
+
3
+ ##
4
+ # Generate XML output as one big file
5
+
6
+ class RDocF95::Generator::XML < RDocF95::Generator::HTML
7
+
8
+ ##
9
+ # Standard generator factory
10
+
11
+ def self.for(options)
12
+ new(options)
13
+ end
14
+
15
+ def initialize(*args)
16
+ super
17
+ end
18
+
19
+ ##
20
+ # Build the initial indices and output objects
21
+ # based on an array of TopLevel objects containing
22
+ # the extracted information.
23
+
24
+ def generate(info)
25
+ @info = info
26
+ @files = []
27
+ @classes = []
28
+ @hyperlinks = {}
29
+
30
+ build_indices
31
+ generate_xml
32
+ end
33
+
34
+ ##
35
+ # Generate:
36
+ #
37
+ # * a list of HtmlFile objects for each TopLevel object.
38
+ # * a list of HtmlClass objects for each first level
39
+ # class or module in the TopLevel objects
40
+ # * a complete list of all hyperlinkable terms (file,
41
+ # class, module, and method names)
42
+
43
+ def build_indices
44
+ @info.each do |toplevel|
45
+ @files << RDocF95::Generator::HtmlFile.new(toplevel, @options, RDocF95::Generator::FILE_DIR)
46
+ end
47
+
48
+ RDocF95::TopLevel.all_classes_and_modules.each do |cls|
49
+ build_class_list(cls, @files[0], RDocF95::Generator::CLASS_DIR)
50
+ end
51
+ end
52
+
53
+ def build_class_list(from, html_file, class_dir)
54
+ @classes << RDocF95::Generator::HtmlClass.new(from, html_file, class_dir, @options)
55
+ from.each_classmodule do |mod|
56
+ build_class_list(mod, html_file, class_dir)
57
+ end
58
+ end
59
+
60
+ ##
61
+ # Generate all the HTML. For the one-file case, we generate
62
+ # all the information in to one big hash
63
+
64
+ def generate_xml
65
+ values = {
66
+ 'charset' => @options.charset,
67
+ 'files' => gen_into(@files),
68
+ 'classes' => gen_into(@classes)
69
+ }
70
+
71
+ # this method is defined in the template file
72
+ write_extra_pages if defined? write_extra_pages
73
+
74
+ template = RDocF95::TemplatePage.new @template::ONE_PAGE
75
+
76
+ if @options.op_name
77
+ opfile = File.open(@options.op_name, "w")
78
+ else
79
+ opfile = $stdout
80
+ end
81
+ template.write_html_on(opfile, values)
82
+ end
83
+
84
+ def gen_into(list)
85
+ res = []
86
+ list.each do |item|
87
+ res << item.value_hash
88
+ end
89
+ res
90
+ end
91
+
92
+ def gen_file_index
93
+ gen_an_index(@files, 'Files')
94
+ end
95
+
96
+ def gen_class_index
97
+ gen_an_index(@classes, 'Classes')
98
+ end
99
+
100
+ def gen_method_index
101
+ gen_an_index(RDocF95::Generator::HtmlMethod.all_methods, 'Methods')
102
+ end
103
+
104
+ def gen_an_index(collection, title)
105
+ res = []
106
+ collection.sort.each do |f|
107
+ if f.document_self
108
+ res << { "href" => f.path, "name" => f.index_name }
109
+ end
110
+ end
111
+
112
+ return {
113
+ "entries" => res,
114
+ 'list_title' => title,
115
+ 'index_url' => main_url,
116
+ }
117
+ end
118
+
119
+ end
120
+
@@ -0,0 +1,113 @@
1
+ require 'rdoc-f95/generator/xml'
2
+
3
+ module RDocF95::Generator::XML::RDF
4
+
5
+ CONTENTS_RDF = <<-EOF
6
+ <% if defined? classes and classes["description"] then %>
7
+ <description rd:parseType="Literal">
8
+ <%= classes["description"] %>
9
+ </description>
10
+ <% end %>
11
+
12
+ <% if defined? files and files["requires"] then %>
13
+ <% files["requires"].each do |requires| %>
14
+ <rd:required-file rd:name="<%= requires["name"] %>" />
15
+ <% end # files["requires"] %>
16
+ <% end %>
17
+
18
+ <% if defined? classes and classes["includes"] then %>
19
+ <IncludedModuleList>
20
+ <% classes["includes"].each do |includes| %>
21
+ <included-module rd:name="<%= includes["name"] %>" />
22
+ <% end # includes["includes"] %>
23
+ </IncludedModuleList>
24
+ <% end %>
25
+
26
+ <% if defined? classes and classes["sections"] then %>
27
+ <% classes["sections"].each do |sections| %>
28
+ <% if sections["attributes"] then %>
29
+ <% sections["attributes"].each do |attributes| %>
30
+ <contents>
31
+ <Attribute rd:name="<%= attributes["name"] %>">
32
+ <% if attributes["rw"] then %>
33
+ <attribute-rw><%= attributes["rw"] %></attribute-rw>
34
+ <% end %>
35
+ <description rdf:parseType="Literal"><%= attributes["a_desc"] %></description>
36
+ </Attribute>
37
+ </contents>
38
+ <% end # sections["attributes"] %>
39
+ <% end %>
40
+
41
+ <% if sections["method_list"] then %>
42
+ <% sections["method_list"].each do |method_list| %>
43
+ <% if method_list["methods"] then %>
44
+ <% method_list["methods"].each do |methods| %>
45
+ <contents>
46
+ <Method rd:name="<%= methods["name"] %>" rd:visibility="<%= methods["type"] %>"
47
+ rd:category="<%= methods["category"] %>" rd:id="<%= methods["aref"] %>">
48
+ <parameters><%= methods["params"] %></parameters>
49
+ <% if methods["m_desc"] then %>
50
+ <description rdf:parseType="Literal">
51
+ <%= methods["m_desc"] %>
52
+ </description>
53
+ <% end %>
54
+ <% if methods["sourcecode"] then %>
55
+ <source-code-listing rdf:parseType="Literal">
56
+ <%= methods["sourcecode"] %>
57
+ </source-code-listing>
58
+ <% end %>
59
+ </Method>
60
+ </contents>
61
+ <% end # method_list["methods"] %>
62
+ <% end %>
63
+ <% end # sections["method_list"] %>
64
+ <% end %>
65
+ <!-- end method list -->
66
+ <% end # classes["sections"] %>
67
+ <% end %>
68
+ EOF
69
+
70
+ ########################################################################
71
+
72
+ ONE_PAGE = %{<?xml version="1.0" encoding="utf-8"?>
73
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
74
+ xmlns="http://pragprog.com/rdoc/rdoc.rdf#"
75
+ xmlns:rd="http://pragprog.com/rdoc/rdoc.rdf#">
76
+
77
+ <!-- RDoc -->
78
+ <% values["files"].each do |files| %>
79
+ <rd:File rd:name="<%= files["short_name"] %>" rd:id="<%= files["href"] %>">
80
+ <path><%= files["full_path"] %></path>
81
+ <dtm-modified><%= files["dtm_modified"] %></dtm-modified>
82
+ } + CONTENTS_RDF + %{
83
+ </rd:File>
84
+ <% end # values["files"] %>
85
+ <% values["classes"].each do |classes| %>
86
+ <<%= values["classmod"] %> rd:name="<%= classes["full_name"] %>" rd:id="<%= classes["full_name"] %>">
87
+ <classmod-info>
88
+ <% if classes["infiles"] then %>
89
+ <InFiles>
90
+ <% classes["infiles"].each do |infiles| %>
91
+ <infile>
92
+ <File rd:name="<%= infiles["full_path"] %>"
93
+ <% if infiles["full_path_url"] then %>
94
+ rdf:about="<%= infiles["full_path_url"] %>"
95
+ <% end %>
96
+ />
97
+ </infile>
98
+ <% end # classes["infiles"] %>
99
+ </InFiles>
100
+ <% end %>
101
+ <% if classes["parent"] then %>
102
+ <superclass><%= href classes["par_url"], classes["parent"] %></superclass>
103
+ <% end %>
104
+ </classmod-info>
105
+ } + CONTENTS_RDF + %{
106
+ </<%= classes["classmod"] %>>
107
+ <% end # values["classes"] %>
108
+ <!-- /RDoc -->
109
+ </rdf:RDF>
110
+ }
111
+
112
+ end
113
+
@@ -0,0 +1,111 @@
1
+ require 'rdoc-f95/generator/xml'
2
+
3
+ module RDocF95::Generator::XML::XML
4
+
5
+ CONTENTS_XML = <<-EOF
6
+ <% if defined? classes and classes["description"] then %>
7
+ <description>
8
+ <%= classes["description"] %>
9
+ </description>
10
+ <% end %>
11
+ <contents>
12
+ <% if defined? files and files["requires"] then %>
13
+ <required-file-list>
14
+ <% files["requires"].each do |requires| %>
15
+ <required-file name="<%= requires["name"] %>"
16
+ <% if requires["aref"] then %>
17
+ href="<%= requires["aref"] %>"
18
+ <% end %>
19
+ />
20
+ <% end # files["requires"] %>
21
+ </required-file-list>
22
+ <% end %>
23
+ <% if defined? classes and classes["sections"] then %>
24
+ <% classes["sections"].each do |sections| %>
25
+ <% if sections["attributes"] then %>
26
+ <attribute-list>
27
+ <% sections["attributes"].each do |attributes| %>
28
+ <attribute name="<%= attributes["name"] %>">
29
+ <% if attributes["rw"] then %>
30
+ <attribute-rw><%= attributes["rw"] %></attribute-rw>
31
+ <% end %>
32
+ <description><%= attributes["a_desc"] %></description>
33
+ </attribute>
34
+ <% end # sections["attributes"] %>
35
+ </attribute-list>
36
+ <% end %>
37
+ <% if sections["method_list"] then %>
38
+ <method-list>
39
+ <% sections["method_list"].each do |method_list| %>
40
+ <% if method_list["methods"] then %>
41
+ <% method_list["methods"].each do |methods| %>
42
+ <method name="<%= methods["name"] %>" type="<%= methods["type"] %>" category="<%= methods["category"] %>" id="<%= methods["aref"] %>">
43
+ <parameters><%= methods["params"] %></parameters>
44
+ <% if methods["m_desc"] then %>
45
+ <description>
46
+ <%= methods["m_desc"] %>
47
+ </description>
48
+ <% end %>
49
+ <% if methods["sourcecode"] then %>
50
+ <source-code-listing>
51
+ <%= methods["sourcecode"] %>
52
+ </source-code-listing>
53
+ <% end %>
54
+ </method>
55
+ <% end # method_list["methods"] %>
56
+ <% end %>
57
+ <% end # sections["method_list"] %>
58
+ </method-list>
59
+ <% end %>
60
+ <% end # classes["sections"] %>
61
+ <% end %>
62
+ <% if defined? classes and classes["includes"] then %>
63
+ <included-module-list>
64
+ <% classes["includes"].each do |includes| %>
65
+ <included-module name="<%= includes["name"] %>"
66
+ <% if includes["aref"] then %>
67
+ href="<%= includes["aref"] %>"
68
+ <% end %>
69
+ />
70
+ <% end # classes["includes"] %>
71
+ </included-module-list>
72
+ <% end %>
73
+ </contents>
74
+ EOF
75
+
76
+ ONE_PAGE = %{<?xml version="1.0" encoding="utf-8"?>
77
+ <rdoc>
78
+ <file-list>
79
+ <% values["files"].each do |files| %>
80
+ <file name="<%= files["short_name"] %>" id="<%= files["href"] %>">
81
+ <file-info>
82
+ <path><%= files["full_path"] %></path>
83
+ <dtm-modified><%= files["dtm_modified"] %></dtm-modified>
84
+ </file-info>
85
+ } + CONTENTS_XML + %{
86
+ </file>
87
+ <% end # values["files"] %>
88
+ </file-list>
89
+ <class-module-list>
90
+ <% values["classes"].each do |classes| %>
91
+ <<%= classes["classmod"] %> name="<%= classes["full_name"] %>" id="<%= classes["full_name"] %>">
92
+ <classmod-info>
93
+ <% if classes["infiles"] then %>
94
+ <infiles>
95
+ <% classes["infiles"].each do |infiles| %>
96
+ <infile><%= href infiles["full_path_url"], infiles["full_path"] %></infile>
97
+ <% end # classes["infiles"] %>
98
+ </infiles>
99
+ <% end %>
100
+ <% if classes["parent"] then %>
101
+ <superclass><%= href classes["par_url"], classes["parent"] %></superclass>
102
+ <% end %>
103
+ </classmod-info>
104
+ } + CONTENTS_XML + %{
105
+ </<%= classes["classmod"] %>>
106
+ <% end # values["classes"] %>
107
+ </class-module-list>
108
+ </rdoc>
109
+ }
110
+
111
+ end
@@ -0,0 +1,166 @@
1
+ require 'rbconfig'
2
+ require 'find'
3
+ require 'fileutils'
4
+ require 'optparse'
5
+
6
+ include Config
7
+
8
+ $ruby = CONFIG['ruby_install_name']
9
+
10
+ ##
11
+ # Install a binary file. We patch in on the way through to
12
+ # insert a #! line. If this is a Unix install, we name
13
+ # the command (for example) 'rdoc-f95' and let the shebang line
14
+ # handle running it. Under windows, we add a '.rb' extension
15
+ # and let file associations to their stuff
16
+ #
17
+
18
+ def installBIN(from, opfile)
19
+
20
+ tmp_dir = nil
21
+ [".", "/tmp", "c:/temp", $bindir].each{|t|
22
+ stat = File.stat(t) rescue next
23
+ if stat.directory? and stat.writable?
24
+ tmp_dir = t
25
+ break
26
+ end
27
+ }
28
+
29
+ fail "Cannot find a temporary directory" unless tmp_dir
30
+ tmp_file = File.join(tmp_dir, "_tmp")
31
+
32
+
33
+ File.open(from) do |ip|
34
+ File.open(tmp_file, "w") do |op|
35
+ ruby = File.join($realbindir, $ruby)
36
+ # op.puts "#!#{ruby}"
37
+ op.write ip.read
38
+ end
39
+ end
40
+
41
+ opfile += ".rb" if CONFIG["target_os"] =~ /mswin/i
42
+ FileUtils::makedirs($bindir, {:verbose => true})
43
+ FileUtils::install(tmp_file, File.join($bindir, opfile),
44
+ {:mode => 0755, :verbose => true})
45
+ FileUtils::safe_unlink(tmp_file)
46
+ end
47
+
48
+ # Main Program
49
+
50
+ opt = OptionParser.new
51
+ OPTS = {}
52
+ opt.summary_width = 23
53
+ opt.summary_indent = ''*1
54
+ opt.on('--bindir=VAL',
55
+ 'Directory to which the executable file is installed') \
56
+ {|v| $bindir = v.to_s}
57
+ opt.on('--binname=VAL',
58
+ 'Name of the executable file (default name is "rdoc")') \
59
+ {|v| $binname = v.to_s}
60
+ opt.on('--libdir=VAL',
61
+ 'Directory to which the libraries are installed') \
62
+ {|v| $libdir = v.to_s}
63
+ opt.on('--help', 'Show help message') {|v| OPTS[:help] = v}
64
+
65
+ opt.parse!(ARGV)
66
+
67
+ $bindir = File.expand_path($bindir) if $bindir
68
+ $binname ||= "rdoc"
69
+ $libdir = File.expand_path($libdir) if $libdir
70
+
71
+ install_opt = ""
72
+ install_opt = "--libdir=#{$libdir}" if $libdir
73
+
74
+ if $libdir
75
+ $sitedir = $libdir
76
+ else
77
+ $sitedir = CONFIG["sitelibdir"]
78
+ unless $sitedir
79
+ version = CONFIG["MAJOR"]+"."+CONFIG["MINOR"]
80
+ $libdir = File.join(CONFIG["libdir"], "ruby", version)
81
+ $sitedir = $:.find {|x| x =~ /site_ruby/}
82
+ if !$sitedir
83
+ $sitedir = File.join($libdir, "site_ruby")
84
+ elsif $sitedir !~ Regexp.quote(version)
85
+ $sitedir = File.join($sitedir, version)
86
+ end
87
+ end
88
+ end
89
+
90
+ $bindir ||= CONFIG["bindir"]
91
+ $realbindir = $bindir
92
+
93
+ bindir = CONFIG["bindir"]
94
+
95
+ rdoc_dest = File.join($sitedir, "rdoc")
96
+ rdoc_generator = File.join(rdoc_dest, "generator")
97
+ rdoc_parsers = File.join(rdoc_dest, "parsers")
98
+ rdoc_ri = File.join(rdoc_dest, "ri")
99
+
100
+ # help message
101
+ if ARGV[0] || OPTS[:help]
102
+ print <<-HELP
103
+
104
+ This ruby script installs libraries to \"#{$sitedir}\",
105
+ and executables to \"#{$bindir}/#{$binname}\". (See \"rbconfig.rb\")
106
+
107
+ If you want to install other directory, use following options.
108
+
109
+ #{opt.help}
110
+
111
+ HELP
112
+ exit
113
+ end
114
+
115
+ # make directories
116
+ [
117
+ rdoc_dest,
118
+ rdoc_generator,
119
+ rdoc_parsers,
120
+ rdoc_ri].each{|d|
121
+ FileUtils::makedirs(d, {:verbose => true})
122
+ }
123
+
124
+ FileUtils::chmod(0755, rdoc_dest)
125
+
126
+
127
+
128
+ # The library files
129
+ files = %w{
130
+ code_objects.rb
131
+ generator.rb
132
+ generator/*.rb
133
+ options.rb
134
+ parsers/parserfactory.rb
135
+ parsers/parse_*.rb
136
+ template.rb
137
+ tokenstream.rb
138
+ diagram.rb
139
+ rdoc.rb
140
+ dot.rb
141
+ ri/*.rb
142
+ ri.rb
143
+ markup.rb
144
+ stats.rb
145
+ }.collect {|f| Dir.glob(f)}.flatten
146
+
147
+ ["chm", "html", "xml", "xhtml"].each{ |template|
148
+ d = File.join(rdoc_generator, template)
149
+ FileUtils::makedirs(d, {:verbose => true})
150
+ files.concat Dir.glob("generator/#{template}/*.rb")
151
+ files.concat Dir.glob("generator/#{template}/*.xsl")
152
+ }
153
+
154
+ files.each{ |aFile|
155
+ dst = File.join(rdoc_dest, aFile)
156
+ FileUtils::install(aFile, dst, {:mode => 0644, :verbose => true})
157
+ }
158
+
159
+ # and the executable
160
+
161
+ installBIN("rdoc", $binname)
162
+
163
+ # 'Markup' will eventually be a separate package, but
164
+ # for now we'll install it automatically
165
+
166
+ Dir.chdir("markup") && system("#$ruby install.rb #{install_opt}")