rdoc-f95 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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,418 @@
1
+ require 'rdoc-f95/generator/html'
2
+
3
+ module RDocF95::Generator::HTML::KILMER
4
+
5
+ FONTS = "Verdana, Arial, Helvetica, sans-serif"
6
+
7
+ STYLE = <<-EOF
8
+ body,td,p { font-family: <%= values["fonts"] %>;
9
+ color: #000040;
10
+ }
11
+
12
+ .attr-rw { font-size: xx-small; color: #444488 }
13
+
14
+ .title-row { background-color: #CCCCFF;
15
+ color: #000010;
16
+ }
17
+
18
+ .big-title-font {
19
+ color: black;
20
+ font-weight: bold;
21
+ font-family: <%= values["fonts"] %>;
22
+ font-size: large;
23
+ height: 60px;
24
+ padding: 10px 3px 10px 3px;
25
+ }
26
+
27
+ .small-title-font { color: black;
28
+ font-family: <%= values["fonts"] %>;
29
+ font-size:10; }
30
+
31
+ .aqua { color: black }
32
+
33
+ .method-name, .attr-name {
34
+ font-family: font-family: <%= values["fonts"] %>;
35
+ font-weight: bold;
36
+ font-size: small;
37
+ margin-left: 20px;
38
+ color: #000033;
39
+ }
40
+
41
+ .tablesubtitle, .tablesubsubtitle {
42
+ width: 100%;
43
+ margin-top: 1ex;
44
+ margin-bottom: .5ex;
45
+ padding: 5px 0px 5px 3px;
46
+ font-size: large;
47
+ color: black;
48
+ background-color: #CCCCFF;
49
+ border: thin;
50
+ }
51
+
52
+ .name-list {
53
+ margin-left: 5px;
54
+ margin-bottom: 2ex;
55
+ line-height: 105%;
56
+ }
57
+
58
+ .description {
59
+ margin-left: 5px;
60
+ margin-bottom: 2ex;
61
+ line-height: 105%;
62
+ font-size: small;
63
+ }
64
+
65
+ .methodtitle {
66
+ font-size: small;
67
+ font-weight: bold;
68
+ text-decoration: none;
69
+ color: #000033;
70
+ background-color: white;
71
+ }
72
+
73
+ .srclink {
74
+ font-size: small;
75
+ font-weight: bold;
76
+ text-decoration: none;
77
+ color: #0000DD;
78
+ background-color: white;
79
+ }
80
+
81
+ .paramsig {
82
+ font-size: small;
83
+ }
84
+
85
+ .srcbut { float: right }
86
+ EOF
87
+
88
+ BODY = <<-EOF
89
+ <html><head>
90
+ <title><%= values["title"] %></title>
91
+ <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
92
+ <link rel="stylesheet" href="<%= values["style_url"] %>" type="text/css" media="screen" />
93
+ <script type="text/javascript" language="JavaScript">
94
+ <!--
95
+ function popCode(url) {
96
+ parent.frames.source.location = url
97
+ }
98
+ //-->
99
+ </script>
100
+ </head>
101
+ <body bgcolor="white">
102
+
103
+ <%= template_include %> <!-- banner header -->
104
+
105
+ <% if values["diagram"] then %>
106
+ <table width="100%"><tr><td align="center">
107
+ <%= values["diagram"] %>
108
+ </td></tr></table>
109
+ <% end %>
110
+
111
+ <% if values["description"] then %>
112
+ <div class="description"><%= values["description"] %></div>
113
+ <% end %>
114
+
115
+ <% if values["requires"] then %>
116
+ <table cellpadding="5" width="100%">
117
+ <tr><td class="tablesubtitle">Required files</td></tr>
118
+ </table><br />
119
+ <div class="name-list">
120
+ <% values["requires"].each do |requires| %>
121
+ <%= href requires["aref"], requires["name"] %>
122
+ <% end # values["requires"] %>
123
+ <% end %>
124
+ </div>
125
+
126
+ <% if values["methods"] then %>
127
+ <table cellpadding="5" width="100%">
128
+ <tr><td class="tablesubtitle">Methods</td></tr>
129
+ </table><br />
130
+ <div class="name-list">
131
+ <% values["methods"].each do |methods| %>
132
+ <%= href methods["aref"], methods["name"] %>,
133
+ <% end # values["methods"] %>
134
+ </div>
135
+ <% end %>
136
+
137
+
138
+ <% values["sections"].each do |sections| %>
139
+ <div id="section">
140
+ <% if sections["sectitle"] then %>
141
+ <h2 class="section-title"><a name="<%= sections["secsequence"] %>"><%= sections["sectitle"] %></a></h2>
142
+ <% if sections["seccomment"] then %>
143
+ <div class="section-comment">
144
+ <%= sections["seccomment"] %>
145
+ </div>
146
+ <% end %>
147
+ <% end %>
148
+
149
+ <% if sections["attributes"] then %>
150
+ <table cellpadding="5" width="100%">
151
+ <tr><td class="tablesubtitle">Attributes</td></tr>
152
+ </table><br />
153
+ <table cellspacing="5">
154
+ <% sections["attributes"].each do |attributes| %>
155
+ <tr valign="top">
156
+ <% if attributes["rw"] then %>
157
+ <td align="center" class="attr-rw">&nbsp;[<%= attributes["rw"] %>]&nbsp;</td>
158
+ <% end %>
159
+ <% unless attributes["rw"] then %>
160
+ <td></td>
161
+ <% end %>
162
+ <td class="attr-name"><%= attributes["name"] %></td>
163
+ <td><%= attributes["a_desc"] %></td>
164
+ </tr>
165
+ <% end # sections["attributes"] %>
166
+ </table>
167
+ <% end %>
168
+
169
+ <% if sections["classlist"] then %>
170
+ <table cellpadding="5" width="100%">
171
+ <tr><td class="tablesubtitle">Classes and Modules</td></tr>
172
+ </table><br />
173
+ <%= sections["classlist"] %><br />
174
+ <% end %>
175
+
176
+ <%= template_include %> <!-- method descriptions -->
177
+
178
+ <% end # values["sections"] %>
179
+
180
+ </body>
181
+ </html>
182
+ EOF
183
+
184
+ FILE_PAGE = <<-EOF
185
+ <table width="100%">
186
+ <tr class="title-row">
187
+ <td><table width="100%"><tr>
188
+ <td class="big-title-font" colspan="2"><font size="-3"><b>File</b><br /></font><%= values["short_name"] %></td>
189
+ <td align="right"><table cellspacing="0" cellpadding="2">
190
+ <tr>
191
+ <td class="small-title-font">Path:</td>
192
+ <td class="small-title-font"><%= values["full_path"] %>
193
+ <% if values["cvsurl"] then %>
194
+ &nbsp;(<a href="<%= values["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
195
+ <% end %>
196
+ </td>
197
+ </tr>
198
+ <tr>
199
+ <td class="small-title-font">Modified:</td>
200
+ <td class="small-title-font"><%= values["dtm_modified"] %></td>
201
+ </tr>
202
+ </table>
203
+ </td></tr></table></td>
204
+ </tr>
205
+ </table><br />
206
+ EOF
207
+
208
+ CLASS_PAGE = <<-EOF
209
+ <table width="100%" border="0" cellspacing="0">
210
+ <tr class="title-row">
211
+ <td class="big-title-font">
212
+ <font size="-3"><b><%= values["classmod"] %></b><br /></font><%= values["full_name"] %>
213
+ </td>
214
+ <td align="right">
215
+ <table cellspacing="0" cellpadding="2">
216
+ <tr valign="top">
217
+ <td class="small-title-font">In:</td>
218
+ <td class="small-title-font">
219
+ <% values["infiles"].each do |infiles| %>
220
+ <%= href infiles["full_path_url"], infiles["full_path"] %>
221
+ <% if infiles["cvsurl"] then %>
222
+ &nbsp;(<a href="<%= infiles["cvsurl"] %>"><acronym title="Concurrent Versioning System">CVS</acronym></a>)
223
+ <% end %>
224
+ <% end # values["infiles"] %>
225
+ </td>
226
+ </tr>
227
+ <% if values["parent"] then %>
228
+ <tr>
229
+ <td class="small-title-font">Parent:</td>
230
+ <td class="small-title-font">
231
+ <% if values["par_url"] then %>
232
+ <a href="<%= values["par_url"] %>" class="cyan">
233
+ <% end %>
234
+ <%= values["parent"] %>
235
+ <% if values["par_url"] then %>
236
+ </a>
237
+ <% end %>
238
+ </td>
239
+ </tr>
240
+ <% end %>
241
+ </table>
242
+ </td>
243
+ </tr>
244
+ </table><br />
245
+ EOF
246
+
247
+ METHOD_LIST = <<-EOF
248
+ <% if values["includes"] then %>
249
+ <div class="tablesubsubtitle">Included modules</div><br />
250
+ <div class="name-list">
251
+ <% values["includes"].each do |includes| %>
252
+ <span class="method-name"><%= href includes["aref"], includes["name"] %></span>
253
+ <% end # values["includes"] %>
254
+ </div>
255
+ <% end %>
256
+
257
+ <% if values["method_list"] then %>
258
+ <% values["method_list"].each do |method_list| $stderr.puts({ :method_list => method_list }.inspect) %>
259
+ <% if values["methods"] then %>
260
+ <table cellpadding=5 width="100%">
261
+ <tr><td class="tablesubtitle"><%= values["type"] %> <%= values["category"] %> methods</td></tr>
262
+ </table>
263
+ <% values["methods"].each do |methods| $stderr.puts({ :methods => methods }.inspect) %>
264
+ <table width="100%" cellspacing="0" cellpadding="5" border="0">
265
+ <tr><td class="methodtitle">
266
+ <a name="<%= values["aref"] %>">
267
+ <% if values["callseq"] then %>
268
+ <b><%= values["callseq"] %></b>
269
+ <% end %>
270
+ <% unless values["callseq"] then %>
271
+ <b><%= values["name"] %></b><%= values["params"] %>
272
+ <% end %>
273
+ <% if values["codeurl"] then %>
274
+ <a href="<%= values["codeurl"] %>" target="source" class="srclink">src</a>
275
+ <% end %>
276
+ </a></td></tr>
277
+ </table>
278
+ <% if values["m_desc"] then %>
279
+ <div class="description">
280
+ <%= values["m_desc"] %>
281
+ </div>
282
+ <% end %>
283
+ <% if values["aka"] then %>
284
+ <div class="aka">
285
+ This method is also aliased as
286
+ <% values["aka"].each do |aka| $stderr.puts({ :aka => aka }.inspect) %>
287
+ <a href="<%= values["aref"] %>"><%= values["name"] %></a>
288
+ <% end # values["aka"] %>
289
+ </div>
290
+ <% end %>
291
+ <% if values["sourcecode"] then %>
292
+ <pre class="source">
293
+ <%= values["sourcecode"] %>
294
+ </pre>
295
+ <% end %>
296
+ <% end # values["methods"] %>
297
+ <% end %>
298
+ <% end # values["method_list"] %>
299
+ <% end %>
300
+ EOF
301
+
302
+ SRC_PAGE = <<-EOF
303
+ <html>
304
+ <head><title><%= values["title"] %></title>
305
+ <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
306
+ <style type="text/css">
307
+ .ruby-comment { color: green; font-style: italic }
308
+ .ruby-constant { color: #4433aa; font-weight: bold; }
309
+ .ruby-identifier { color: #222222; }
310
+ .ruby-ivar { color: #2233dd; }
311
+ .ruby-keyword { color: #3333FF; font-weight: bold }
312
+ .ruby-node { color: #777777; }
313
+ .ruby-operator { color: #111111; }
314
+ .ruby-regexp { color: #662222; }
315
+ .ruby-value { color: #662222; font-style: italic }
316
+ .kw { color: #3333FF; font-weight: bold }
317
+ .cmt { color: green; font-style: italic }
318
+ .str { color: #662222; font-style: italic }
319
+ .re { color: #662222; }
320
+ </style>
321
+ </head>
322
+ <body bgcolor="white">
323
+ <pre><%= values["code"] %></pre>
324
+ </body>
325
+ </html>
326
+ EOF
327
+
328
+ FR_INDEX_BODY = %{
329
+ <%= template_include %>
330
+ }
331
+
332
+ FILE_INDEX = <<-EOF
333
+ <html>
334
+ <head>
335
+ <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
336
+ <style>
337
+ <!--
338
+ body {
339
+ background-color: #ddddff;
340
+ font-family: #{FONTS};
341
+ font-size: 11px;
342
+ font-style: normal;
343
+ line-height: 14px;
344
+ color: #000040;
345
+ }
346
+
347
+ div.banner {
348
+ background: #0000aa;
349
+ color: white;
350
+ padding: 1;
351
+ margin: 0;
352
+ font-size: 90%;
353
+ font-weight: bold;
354
+ line-height: 1.1;
355
+ text-align: center;
356
+ width: 100%;
357
+ }
358
+
359
+ -->
360
+ </style>
361
+ <base target="docwin">
362
+ </head>
363
+ <body>
364
+ <div class="banner"><%= values["list_title"] %></div>
365
+ <% values["entries"].each do |entries| %>
366
+ <a href="<%= entries["href"] %>"><%= entries["name"] %></a><br />
367
+ <% end # values["entries"] %>
368
+ </body></html>
369
+ EOF
370
+
371
+ CLASS_INDEX = FILE_INDEX
372
+ METHOD_INDEX = FILE_INDEX
373
+
374
+ INDEX = <<-EOF
375
+ <html>
376
+ <head>
377
+ <title><%= values["title"] %></title>
378
+ <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>">
379
+ </head>
380
+
381
+ <frameset cols="20%,*">
382
+ <frameset rows="15%,35%,50%">
383
+ <frame src="fr_file_index.html" title="Files" name="Files">
384
+ <frame src="fr_class_index.html" name="Classes">
385
+ <frame src="fr_method_index.html" name="Methods">
386
+ </frameset>
387
+ <% if values["inline_source"] then %>
388
+ <frame src="<%= values["initial_page"] %>" name="docwin">
389
+ <% end %>
390
+ <% unless values["inline_source"] then %>
391
+ <frameset rows="80%,20%">
392
+ <frame src="<%= values["initial_page"] %>" name="docwin">
393
+ <frame src="blank.html" name="source">
394
+ </frameset>
395
+ <% end %>
396
+ <noframes>
397
+ <body bgcolor="white">
398
+ Click <a href="html/index.html">here</a> for a non-frames
399
+ version of this page.
400
+ </body>
401
+ </noframes>
402
+ </frameset>
403
+
404
+ </html>
405
+ EOF
406
+
407
+ # A blank page to use as a target
408
+ BLANK = %{
409
+ <html><body bgcolor="white"></body></html>
410
+ }
411
+
412
+ def write_extra_pages
413
+ template = TemplatePage.new(BLANK)
414
+ File.open("blank.html", "w") { |f| template.write_html_on(f, {}) }
415
+ end
416
+
417
+ end
418
+
@@ -0,0 +1,121 @@
1
+ require 'rdoc-f95/generator/html'
2
+
3
+ module RDocF95::Generator::HTML::ONE_PAGE_HTML
4
+
5
+ CONTENTS_XML = <<-EOF
6
+ <% if defined? classes and classes["description"] then %>
7
+ <%= classes["description"] %>
8
+ <% end %>
9
+
10
+ <% if defined? files and files["requires"] then %>
11
+ <h4>Requires:</h4>
12
+ <ul>
13
+ <% files["requires"].each do |requires| %>
14
+ <% if requires["aref"] then %>
15
+ <li><a href="<%= requires["aref"] %>"><%= requires["name"] %></a></li>
16
+ <% end %>
17
+ <% unless requires["aref"] then %>
18
+ <li><%= requires["name"] %></li>
19
+ <% end %>
20
+ <% end # files["requires"] %>
21
+ </ul>
22
+ <% end %>
23
+
24
+ <% if defined? classes and classes["includes"] then %>
25
+ <h4>Includes</h4>
26
+ <ul>
27
+ <% classes["includes"].each do |includes| %>
28
+ <% if includes["aref"] then %>
29
+ <li><a href="<%= includes["aref"] %>"><%= includes["name"] %></a></li>
30
+ <% end %>
31
+ <% unless includes["aref"] then %>
32
+ <li><%= includes["name"] %></li>
33
+ <% end %>
34
+ <% end # classes["includes"] %>
35
+ </ul>
36
+ <% end %>
37
+
38
+ <% if defined? classes and classes["sections"] then %>
39
+ <% classes["sections"].each do |sections| %>
40
+ <% if sections["attributes"] then %>
41
+ <h4>Attributes</h4>
42
+ <table>
43
+ <% sections["attributes"].each do |attributes| %>
44
+ <tr><td><%= attributes["name"] %></td><td><%= attributes["rw"] %></td><td><%= attributes["a_desc"] %></td></tr>
45
+ <% end # sections["attributes"] %>
46
+ </table>
47
+ <% end %>
48
+
49
+ <% if sections["method_list"] then %>
50
+ <h3>Methods</h3>
51
+ <% sections["method_list"].each do |method_list| %>
52
+ <% if method_list["methods"] then %>
53
+ <% method_list["methods"].each do |methods| %>
54
+ <h4><%= methods["type"] %> <%= methods["category"] %> method:
55
+ <% if methods["callseq"] then %>
56
+ <a name="<%= methods["aref"] %>"><%= methods["callseq"] %></a>
57
+ <% end %>
58
+ <% unless methods["callseq"] then %>
59
+ <a name="<%= methods["aref"] %>"><%= methods["name"] %><%= methods["params"] %></a></h4>
60
+ <% end %>
61
+
62
+ <% if methods["m_desc"] then %>
63
+ <%= methods["m_desc"] %>
64
+ <% end %>
65
+
66
+ <% if methods["sourcecode"] then %>
67
+ <blockquote><pre>
68
+ <%= methods["sourcecode"] %>
69
+ </pre></blockquote>
70
+ <% end %>
71
+ <% end # method_list["methods"] %>
72
+ <% end %>
73
+ <% end # sections["method_list"] %>
74
+ <% end %>
75
+ <% end # classes["sections"] %>
76
+ <% end %>
77
+ EOF
78
+
79
+ ONE_PAGE = %{
80
+ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
81
+ <html>
82
+ <head>
83
+ <title><%= values["title"] %></title>
84
+ <meta http-equiv="Content-Type" content="text/html; charset=<%= values["charset"] %>" />
85
+ </head>
86
+ <body>
87
+ <% values["files"].each do |files| %>
88
+ <h2>File: <%= files["short_name"] %></h2>
89
+ <table>
90
+ <tr><td>Path:</td><td><%= files["full_path"] %></td></tr>
91
+ <tr><td>Modified:</td><td><%= files["dtm_modified"] %></td></tr>
92
+ </table>
93
+ } + CONTENTS_XML + %{
94
+ <% end # values["files"] %>
95
+
96
+ <% if values["classes"] then %>
97
+ <h2>Classes</h2>
98
+ <% values["classes"].each do |classes| %>
99
+ <% if classes["parent"] then %>
100
+ <h3><%= classes["classmod"] %> <%= classes["full_name"] %> &lt; <%= href classes["par_url"], classes["parent"] %></h3>
101
+ <% end %>
102
+ <% unless classes["parent"] then %>
103
+ <h3><%= classes["classmod"] %> <%= classes["full_name"] %></h3>
104
+ <% end %>
105
+
106
+ <% if classes["infiles"] then %>
107
+ (in files
108
+ <% classes["infiles"].each do |infiles| %>
109
+ <%= href infiles["full_path_url"], infiles["full_path"] %>
110
+ <% end # classes["infiles"] %>
111
+ )
112
+ <% end %>
113
+ } + CONTENTS_XML + %{
114
+ <% end # values["classes"] %>
115
+ <% end %>
116
+ </body>
117
+ </html>
118
+ }
119
+
120
+ end
121
+