vcs 0.1 → 0.2.148

Sign up to get free protection for your applications and to get access to all the features.
Files changed (132) hide show
  1. data/Rakefile +17 -3
  2. data/bin/vcs +57 -34
  3. data/doc/jamis.rb +564 -0
  4. data/ruby_ex/abstract.rb +254 -0
  5. data/ruby_ex/abstract_node.rb +85 -0
  6. data/ruby_ex/algorithms/simulated_annealing.rb +140 -0
  7. data/ruby_ex/array_each_pair.rb +18 -0
  8. data/ruby_ex/ask.rb +101 -0
  9. data/ruby_ex/attributed_class.rb +302 -0
  10. data/ruby_ex/cache.rb +373 -0
  11. data/ruby_ex/checkout.rb +12 -0
  12. data/ruby_ex/choose.rb +271 -0
  13. data/ruby_ex/commands.rb +18 -0
  14. data/ruby_ex/commands/command.rb +401 -0
  15. data/ruby_ex/commands/datas.rb +16 -0
  16. data/ruby_ex/commands/datas/data.rb +33 -0
  17. data/ruby_ex/commands/datas/factory.rb +66 -0
  18. data/ruby_ex/commands/factory.rb +66 -0
  19. data/ruby_ex/commands/helpers.rb +67 -0
  20. data/ruby_ex/commands/pipe.rb +64 -0
  21. data/ruby_ex/commands/runners.rb +17 -0
  22. data/ruby_ex/commands/runners/exec.rb +49 -0
  23. data/ruby_ex/commands/runners/fork.rb +97 -0
  24. data/ruby_ex/commands/runners/runner.rb +107 -0
  25. data/ruby_ex/commands/seq.rb +27 -0
  26. data/ruby_ex/config_file.rb +96 -0
  27. data/ruby_ex/const_regexp.rb +59 -0
  28. data/ruby_ex/daemon.rb +134 -0
  29. data/ruby_ex/diff.rb +667 -0
  30. data/ruby_ex/dlogger.rb +62 -0
  31. data/ruby_ex/drb/dispatcher.rb +252 -0
  32. data/ruby_ex/drb/dispatcher_server_test.rb +29 -0
  33. data/ruby_ex/drb/drb_observable.rb +97 -0
  34. data/ruby_ex/drb/drb_observable_pool.rb +27 -0
  35. data/ruby_ex/drb/drb_service.rb +43 -0
  36. data/ruby_ex/drb/drb_undumped_attributes.rb +55 -0
  37. data/ruby_ex/drb/drb_undumped_indexed_object.rb +54 -0
  38. data/ruby_ex/drb/insecure_protected_methods.rb +103 -0
  39. data/ruby_ex/drb/session_client_test.rb +40 -0
  40. data/ruby_ex/drb/session_manager.rb +246 -0
  41. data/ruby_ex/drb/session_server.rb +53 -0
  42. data/ruby_ex/dtime.rb +143 -0
  43. data/ruby_ex/dumpable_proc.rb +63 -0
  44. data/ruby_ex/exception.rb +32 -0
  45. data/ruby_ex/filetype.rb +229 -0
  46. data/ruby_ex/fileutils_ex.rb +44 -0
  47. data/ruby_ex/fold.rb +58 -0
  48. data/ruby_ex/generate_id.rb +44 -0
  49. data/ruby_ex/hookable.rb +262 -0
  50. data/ruby_ex/hooker.rb +54 -0
  51. data/ruby_ex/inactive_timeout.rb +137 -0
  52. data/ruby_ex/indexed_node.rb +66 -0
  53. data/ruby_ex/io_marshal.rb +100 -0
  54. data/ruby_ex/ioo.rb +194 -0
  55. data/ruby_ex/labeled_node.rb +63 -0
  56. data/ruby_ex/logger_observer.rb +23 -0
  57. data/ruby_ex/md5sum.rb +66 -0
  58. data/ruby_ex/mktemp.rb +208 -0
  59. data/ruby_ex/module/attr_once.rb +36 -0
  60. data/ruby_ex/module/autoload_tree.rb +75 -0
  61. data/ruby_ex/module/hierarchy.rb +335 -0
  62. data/ruby_ex/module/instance_method_visibility.rb +73 -0
  63. data/ruby_ex/module_ex.rb +11 -0
  64. data/ruby_ex/node.rb +80 -0
  65. data/ruby_ex/object_monitor.rb +145 -0
  66. data/ruby_ex/object_monitor_activity.rb +33 -0
  67. data/ruby_ex/observable.rb +140 -0
  68. data/ruby_ex/observable_pool.rb +293 -0
  69. data/ruby_ex/orderedhash.rb +252 -0
  70. data/ruby_ex/pathname_ex.rb +152 -0
  71. data/ruby_ex/pp_hierarchy.rb +29 -0
  72. data/ruby_ex/pseudo_cache.rb +190 -0
  73. data/ruby_ex/queue.rb +56 -0
  74. data/ruby_ex/random_generators.rb +25 -0
  75. data/ruby_ex/random_generators/random_generator.rb +31 -0
  76. data/ruby_ex/random_generators/ruby.rb +23 -0
  77. data/ruby_ex/safe_eval.rb +348 -0
  78. data/ruby_ex/sendmail.rb +215 -0
  79. data/ruby_ex/service_manager.rb +121 -0
  80. data/ruby_ex/session/administrable.rb +120 -0
  81. data/ruby_ex/session/client.rb +153 -0
  82. data/ruby_ex/session/const.rb +18 -0
  83. data/ruby_ex/session/dispatcher.rb +184 -0
  84. data/ruby_ex/session/error.rb +21 -0
  85. data/ruby_ex/session/fetchable.rb +57 -0
  86. data/ruby_ex/session/fetcher.rb +62 -0
  87. data/ruby_ex/session/hookable.rb +26 -0
  88. data/ruby_ex/session/profile.rb +110 -0
  89. data/ruby_ex/session/server.rb +582 -0
  90. data/ruby_ex/session/test/administrable_test.rb +337 -0
  91. data/ruby_ex/session/test/basic_test.rb +523 -0
  92. data/ruby_ex/session/test/dispatcher_test.rb +409 -0
  93. data/ruby_ex/session/test/fetchable_test.rb +119 -0
  94. data/ruby_ex/session/test/sub_server_test.rb +188 -0
  95. data/ruby_ex/shuffle.rb +30 -0
  96. data/ruby_ex/spring.rb +136 -0
  97. data/ruby_ex/spring_set.rb +137 -0
  98. data/ruby_ex/string_ex.rb +28 -0
  99. data/ruby_ex/symtbl.rb +106 -0
  100. data/ruby_ex/synflow.rb +474 -0
  101. data/ruby_ex/test/unit/ui/yaml/testrunner.rb +164 -0
  102. data/ruby_ex/thread_mutex.rb +10 -0
  103. data/ruby_ex/timeout_ex.rb +81 -0
  104. data/ruby_ex/top_down.rb +73 -0
  105. data/ruby_ex/trace.rb +26 -0
  106. data/ruby_ex/uri/druby.rb +81 -0
  107. data/ruby_ex/uri/file.rb +65 -0
  108. data/ruby_ex/uri/ftp_ex.rb +37 -0
  109. data/ruby_ex/uri/http_ex.rb +43 -0
  110. data/ruby_ex/uri/ssh.rb +92 -0
  111. data/ruby_ex/uri/svn.rb +118 -0
  112. data/ruby_ex/uri_ex.rb +45 -0
  113. data/ruby_ex/verbose_object.rb +30 -0
  114. data/ruby_ex/version.rb +66 -0
  115. data/ruby_ex/yaml/basenode_ext.rb +63 -0
  116. data/ruby_ex/yaml/chop_header.rb +23 -0
  117. data/ruby_ex/yaml/transform.rb +449 -0
  118. data/ruby_ex/yaml/yregexpath.rb +76 -0
  119. data/src/changelog.rb +28 -18
  120. data/src/conflict.rb +20 -0
  121. data/src/diff.rb +18 -0
  122. data/src/diffstat.rb +9 -3
  123. data/src/last_changed_date.rb +18 -0
  124. data/src/mail.rb +33 -65
  125. data/src/message.rb +15 -9
  126. data/src/mycommit.rb +29 -14
  127. data/src/news.rb +24 -3
  128. data/src/status.rb +17 -0
  129. data/src/svn.rb +2 -2
  130. data/src/vcs.rb +24 -3
  131. metadata +124 -5
  132. data/lrdetools.rb +0 -12
data/Rakefile CHANGED
@@ -2,15 +2,17 @@ require 'rubygems'
2
2
  require 'rake'
3
3
  require 'rake/testtask'
4
4
  require 'rake/packagetask'
5
+ require 'rake/rdoctask'
5
6
  require 'rake/gempackagetask'
6
7
  require 'rake/contrib/rubyforgepublisher'
7
8
 
8
- PKG_VERSION = '0.1'
9
+ PKG_VERSION = "0.2.#{`vcs-svn rev`.chomp}"
9
10
 
10
11
  PKG_FILES = FileList[*%w"
11
12
  src/**/*.rb
13
+ ruby_ex/**/*.rb
12
14
  bin/**/*
13
- *.rb
15
+ doc/**/*
14
16
  [A-Z]*
15
17
  "].exclude(/\b\.svn\b|\..*\.sw[op]$|~$|README/)
16
18
 
@@ -22,6 +24,18 @@ task :rubyforge do
22
24
  Rake::RubyForgePublisher.new('vcs', 'ertai').upload
23
25
  end
24
26
 
27
+
28
+ Rake::RDocTask.new('doc') do |rdoc|
29
+ rdoc.title = 'Vcs -- A wrapper over any version control system'
30
+ rdoc.template = 'kilmer'
31
+ #rdoc.template = 'doc/jamis'
32
+ rdoc.options << '--line-numbers' << '--inline-source'
33
+ #rdoc.rdoc_files.add('src/vcs.rb', 'src/**/*.rb')
34
+ rdoc.rdoc_files.add('src/**/*.rb')
35
+ #rdoc.main =
36
+ end
37
+
38
+
25
39
  # The Gem specification
26
40
  spec = Gem::Specification.new do |s|
27
41
  s.platform = Gem::Platform::RUBY
@@ -42,7 +56,7 @@ spec = Gem::Specification.new do |s|
42
56
  s.require_path = 'src'
43
57
  s.autorequire = 'vcs'
44
58
 
45
- s.has_rdoc = false
59
+ s.has_rdoc = true
46
60
  s.author = 'Nicolas Pouillard'
47
61
  s.email = 'ertai@lrde.epita.fr'
48
62
  s.homepage = 'https://svn.lrde.epita.fr/svn/lrdetools/trunk/vcs/'
data/bin/vcs CHANGED
@@ -14,31 +14,44 @@
14
14
  require 'pathname'
15
15
  require 'logger'
16
16
  require 'optparse'
17
+ require 'set'
17
18
 
18
- begin
19
- REV="$Rev$".sub(/LastChangedRevision:\s+/, '').to_i
20
- rescue
21
- REV=-1
22
- end
23
-
19
+ VCS_VERSION = '0.2.148'
24
20
  VCS_PATH = Pathname.new(__FILE__).expand_path
25
21
  VCS_DIR, VCS = VCS_PATH.split
26
22
  SRC = VCS_DIR + '..' + 'src'
23
+ RUBY_EX = VCS_DIR + '..' + 'ruby_ex'
27
24
  $: << SRC.to_s
28
- $: << Pathname.pwd + 'vcs'
25
+ $: << RUBY_EX.to_s
26
+
27
+ dir = Pathname.pwd
28
+ while not dir.root? and not (vcs_dir = dir + 'vcs').exist?
29
+ dir = dir + '..'
30
+ end
31
+ $: << vcs_dir
29
32
 
30
33
  LOG = Logger.new(STDOUT)
31
- LOG.level = Logger::INFO
34
+ if severity = ENV['VCS_SEVERITY']
35
+ LOG.level = Logger.const_get(severity.upcase)
36
+ else
37
+ LOG.level = Logger::INFO
38
+ end
32
39
  def LOG.format_message(severity, timestamp, msg, progname)
33
40
  progname += ': ' unless progname.nil? or progname.empty?
34
41
  "#{VCS}: #{progname}#{severity.downcase}: #{msg}\n"
35
42
  end
36
43
 
37
- $debug = ENV['VCS_DEBUG'].to_i
38
-
39
- Pathname.glob("{#{SRC},vcs}/*.rb") do |file|
40
- LOG.debug file.basename if $debug > 4
41
- require file.basename
44
+ Pathname.glob("{#{SRC}/**,#{vcs_dir}}/*.rb") do |file|
45
+ LOG.debug { file.basename.to_s }
46
+ begin
47
+ require file.basename.to_s
48
+ rescue LoadError => ex
49
+ begin
50
+ require file.to_s
51
+ rescue
52
+ raise ex
53
+ end
54
+ end
42
55
  end
43
56
 
44
57
  ALL_VCS_NAMES = []
@@ -80,6 +93,13 @@ OPTS = OptionParser.new do |opts|
80
93
  exit
81
94
  end
82
95
 
96
+ opts.on('-C', '--[no-]check', 'Check your vcs configuration') do |check|
97
+ if check
98
+ Vcs.new('').call_conf_checkers
99
+ exit
100
+ end
101
+ end
102
+
83
103
  opts.on('-d', '--debug LEVEL', Integer, 'Set debug level') do |anInteger|
84
104
  $debug = anInteger
85
105
  end
@@ -90,7 +110,7 @@ OPTS = OptionParser.new do |opts|
90
110
  end
91
111
 
92
112
  opts.on_tail('--version', 'Show version') do
93
- STDOUT.puts "Vcs revision: #{REV}"
113
+ STDOUT.puts "Vcs version: #{VCS_VERSION}"
94
114
  exit
95
115
  end
96
116
 
@@ -113,27 +133,30 @@ end
113
133
  FULL_EMAIL = "#{FULLNAME} <#{EMAIL}>"
114
134
 
115
135
  def main
116
- OPTS.parse!(ARGV)
117
- unless OPTIONS.has_key? :vcs_type
118
- STDERR.puts OPTS
119
- STDERR.puts "\nSpecify at least a Vcs type, or use a wrapped command\n" +
120
- 'like svn, cvs, prcs in the vcs bin directory.'
121
- exit
122
- end
123
- vcs = ALL_VCS_BY_NAME[OPTIONS[:vcs_type]].new
136
+ vcs = nil
137
+ begin
138
+ OPTS.parse!(ARGV)
139
+ unless OPTIONS.has_key? :vcs_type
140
+ STDERR.puts OPTS
141
+ STDERR.puts "\nSpecify at least a Vcs type, or use a wrapped command\n" +
142
+ 'like svn, cvs, prcs in the vcs bin directory.'
143
+ exit
144
+ end
145
+ vcs = ALL_VCS_BY_NAME[OPTIONS[:vcs_type]].new
146
+
147
+ if ARGV.empty?
148
+ meth = :help!
149
+ else
150
+ meth = ARGV.shift.sub(/([^!])$/, '\1!')
151
+ end
124
152
 
125
- if ARGV.empty?
126
- meth = :help!
127
- else
128
- meth = ARGV.shift.sub(/([^!])$/, '\1!')
153
+ vcs.send(meth, *ARGV)
154
+
155
+ rescue Exception
156
+ vcs.call_handlers unless vcs.nil?
157
+ LOG.debug { raise }
158
+ LOG.error $!.to_s.sub(/\.$/, '') unless $!.to_s == 'exit'
129
159
  end
130
-
131
- vcs.send(meth, *ARGV)
132
160
  end
133
161
 
134
- begin
135
- main()
136
- rescue Exception
137
- raise if $debug > 0
138
- LOG.error $!.to_s.sub(/\.$/, '') unless $!.to_s == 'exit'
139
- end
162
+ main()
@@ -0,0 +1,564 @@
1
+ module RDoc
2
+ module Page
3
+
4
+ FONTS = "\"Bitstream Vera Sans\", Verdana, Arial, Helvetica, sans-serif"
5
+
6
+ STYLE = <<CSS
7
+ a {
8
+ color: #00F;
9
+ text-decoration: none;
10
+ }
11
+
12
+ a:hover {
13
+ color: #77F;
14
+ text-decoration: underline;
15
+ }
16
+
17
+ body, td, p {
18
+ font-family: %fonts%;
19
+ background: #FFF;
20
+ color: #000;
21
+ margin: 0px;
22
+ font-size: small;
23
+ }
24
+
25
+ #content {
26
+ margin: 2em;
27
+ }
28
+
29
+ #description p {
30
+ margin-bottom: 0.5em;
31
+ }
32
+
33
+ .sectiontitle {
34
+ margin-top: 1em;
35
+ margin-bottom: 1em;
36
+ padding: 0.5em;
37
+ padding-left: 2em;
38
+ background: #005;
39
+ color: #FFF;
40
+ font-weight: bold;
41
+ border: 1px dotted black;
42
+ }
43
+
44
+ .attr-rw {
45
+ padding-left: 1em;
46
+ padding-right: 1em;
47
+ text-align: center;
48
+ color: #055;
49
+ }
50
+
51
+ .attr-name {
52
+ font-weight: bold;
53
+ }
54
+
55
+ .attr-desc {
56
+ }
57
+
58
+ .attr-value {
59
+ font-family: monospace;
60
+ }
61
+
62
+ .file-title-prefix {
63
+ font-size: large;
64
+ }
65
+
66
+ .file-title {
67
+ font-size: large;
68
+ font-weight: bold;
69
+ background: #005;
70
+ color: #FFF;
71
+ }
72
+
73
+ .banner {
74
+ background: #005;
75
+ color: #FFF;
76
+ border: 1px solid black;
77
+ padding: 1em;
78
+ }
79
+
80
+ .banner td {
81
+ background: transparent;
82
+ color: #FFF;
83
+ }
84
+
85
+ h1 a, h2 a, .sectiontitle a, .banner a {
86
+ color: #FF0;
87
+ }
88
+
89
+ h1 a:hover, h2 a:hover, .sectiontitle a:hover, .banner a:hover {
90
+ color: #FF7;
91
+ }
92
+
93
+ .dyn-source {
94
+ display: none;
95
+ background: #FFE;
96
+ color: #000;
97
+ border: 1px dotted black;
98
+ margin: 0.5em 2em 0.5em 2em;
99
+ padding: 0.5em;
100
+ }
101
+
102
+ .dyn-source .cmt {
103
+ color: #00F;
104
+ font-style: italic;
105
+ }
106
+
107
+ .dyn-source .kw {
108
+ color: #070;
109
+ font-weight: bold;
110
+ }
111
+
112
+ .method {
113
+ margin-left: 1em;
114
+ margin-right: 1em;
115
+ margin-bottom: 1em;
116
+ }
117
+
118
+ .description pre {
119
+ padding: 0.5em;
120
+ border: 1px dotted black;
121
+ background: #FFE;
122
+ }
123
+
124
+ .method .title {
125
+ font-family: monospace;
126
+ font-size: large;
127
+ border-bottom: 1px dashed black;
128
+ margin-bottom: 0.3em;
129
+ padding-bottom: 0.1em;
130
+ }
131
+
132
+ .method .description, .method .sourcecode {
133
+ margin-left: 1em;
134
+ }
135
+
136
+ .description p, .sourcecode p {
137
+ margin-bottom: 0.5em;
138
+ }
139
+
140
+ .method .sourcecode p.source-link {
141
+ text-indent: 0em;
142
+ margin-top: 0.5em;
143
+ }
144
+
145
+ .method .aka {
146
+ margin-top: 0.3em;
147
+ margin-left: 1em;
148
+ font-style: italic;
149
+ text-indent: 2em;
150
+ }
151
+
152
+ h1 {
153
+ padding: 1em;
154
+ border: 1px solid black;
155
+ font-size: x-large;
156
+ font-weight: bold;
157
+ color: #FFF;
158
+ background: #007;
159
+ }
160
+
161
+ h2 {
162
+ padding: 0.5em 1em 0.5em 1em;
163
+ border: 1px solid black;
164
+ font-size: large;
165
+ font-weight: bold;
166
+ color: #FFF;
167
+ background: #009;
168
+ }
169
+
170
+ h3, h4, h5, h6 {
171
+ padding: 0.2em 1em 0.2em 1em;
172
+ border: 1px dashed black;
173
+ color: #000;
174
+ background: #AAF;
175
+ }
176
+
177
+ .sourcecode > pre {
178
+ padding: 0.5em;
179
+ border: 1px dotted black;
180
+ background: #FFE;
181
+ }
182
+
183
+ CSS
184
+
185
+ BODY = <<HTML
186
+ <html>
187
+ <head>
188
+ <title>%title%</title>
189
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
190
+ <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
191
+
192
+ <script type="text/javascript" language="JavaScript">
193
+ <!--
194
+ function toggleSource( id )
195
+ {
196
+ var elem
197
+ var link
198
+
199
+ if( document.all )
200
+ {
201
+ elem = eval( "document.all." + id )
202
+ link = eval( "document.all.l_" + id )
203
+ }
204
+ else
205
+ {
206
+ elem = document.getElementById( id )
207
+ link = document.getElementById( "l_" + id )
208
+ }
209
+
210
+ if( elem.style.display == "block" )
211
+ {
212
+ elem.style.display = "none"
213
+ link.innerHTML = "show source"
214
+ }
215
+ else
216
+ {
217
+ elem.style.display = "block"
218
+ link.innerHTML = "hide source"
219
+ }
220
+ }
221
+
222
+ function openCode( url )
223
+ {
224
+ window.open( url, "SOURCE_CODE", "width=400,height=400,scrollbars=yes" )
225
+ }
226
+ //-->
227
+ </script>
228
+ </head>
229
+
230
+ <body>
231
+ !INCLUDE! <!-- banner header -->
232
+
233
+ <div id="content">
234
+ IF:diagram
235
+ <table cellpadding='0' cellspacing='0' border='0' width="100%"><tr><td align="center">
236
+ %diagram%
237
+ </td></tr></table>
238
+ ENDIF:diagram
239
+
240
+ IF:description
241
+ <div class="description">%description%</div>
242
+ ENDIF:description
243
+
244
+ IF:requires
245
+ <div class="sectiontitle">Required Files</div>
246
+ <ul>
247
+ START:requires
248
+ <li>HREF:aref:name:</li>
249
+ END:requires
250
+ </ul>
251
+ ENDIF:requires
252
+
253
+ IF:methods
254
+ <div class="sectiontitle">Methods</div>
255
+ <ul>
256
+ START:methods
257
+ <li>HREF:aref:name:</li>
258
+ END:methods
259
+ </ul>
260
+ ENDIF:methods
261
+
262
+ IF:constants
263
+ <div class="sectiontitle">Constants</div>
264
+ <table border='0' cellpadding='5'>
265
+ START:constants
266
+ <tr valign='top'>
267
+ <td class="attr-name">%name%</td>
268
+ <td>=</td>
269
+ <td class="attr-value">%value%</td>
270
+ </tr>
271
+ IF:desc
272
+ <tr valign='top'>
273
+ <td>&nbsp;</td>
274
+ <td colspan="2" class="attr-desc">%desc%</td>
275
+ </tr>
276
+ ENDIF:desc
277
+ END:constants
278
+ </table>
279
+ ENDIF:constants
280
+
281
+ IF:attributes
282
+ <div class="sectiontitle">Attributes</div>
283
+ <table border='0' cellpadding='5'>
284
+ START:attributes
285
+ <tr valign='top'>
286
+ <td class='attr-rw'>
287
+ IF:rw
288
+ [%rw%]
289
+ ENDIF:rw
290
+ </td>
291
+ <td class='attr-name'>%name%</td>
292
+ <td class='attr-desc'>%a_desc%</td>
293
+ </tr>
294
+ END:attributes
295
+ </table>
296
+ ENDIF:attributes
297
+
298
+ IF:classlist
299
+ <div class="sectiontitle">Classes and Modules</div>
300
+ %classlist%
301
+ ENDIF:classlist
302
+
303
+ !INCLUDE! <!-- method descriptions -->
304
+
305
+ </div>
306
+ </body>
307
+ </html>
308
+ HTML
309
+
310
+ FILE_PAGE = <<HTML
311
+ <table border='0' cellpadding='0' cellspacing='0' width="100%" class='banner'>
312
+ <tr><td>
313
+ <table width="100%" border='0' cellpadding='0' cellspacing='0'><tr>
314
+ <td class="file-title" colspan="2"><span class="file-title-prefix">File</span><br />%short_name%</td>
315
+ <td align="right">
316
+ <table border='0' cellspacing="0" cellpadding="2">
317
+ <tr>
318
+ <td>Path:</td>
319
+ <td>%full_path%
320
+ IF:cvsurl
321
+ &nbsp;(<a href="%cvsurl%">CVS</a>)
322
+ ENDIF:cvsurl
323
+ </td>
324
+ </tr>
325
+ <tr>
326
+ <td>Modified:</td>
327
+ <td>%dtm_modified%</td>
328
+ </tr>
329
+ </table>
330
+ </td></tr>
331
+ </table>
332
+ </td></tr>
333
+ </table><br>
334
+ HTML
335
+
336
+ ###################################################################
337
+
338
+ CLASS_PAGE = <<HTML
339
+ <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
340
+ <td class="file-title"><span class="file-title-prefix">%classmod%</span><br />%full_name%</td>
341
+ <td align="right">
342
+ <table cellspacing=0 cellpadding=2>
343
+ <tr valign="top">
344
+ <td>In:</td>
345
+ <td>
346
+ START:infiles
347
+ HREF:full_path_url:full_path:
348
+ IF:cvsurl
349
+ &nbsp;(<a href="%cvsurl%">CVS</a>)
350
+ ENDIF:cvsurl
351
+ END:infiles
352
+ </td>
353
+ </tr>
354
+ IF:parent
355
+ <tr>
356
+ <td>Parent:</td>
357
+ <td>
358
+ IF:par_url
359
+ <a href="%par_url%">
360
+ ENDIF:par_url
361
+ %parent%
362
+ IF:par_url
363
+ </a>
364
+ ENDIF:par_url
365
+ </td>
366
+ </tr>
367
+ ENDIF:parent
368
+ </table>
369
+ </td>
370
+ </tr>
371
+ </table>
372
+ HTML
373
+
374
+ ###################################################################
375
+
376
+ METHOD_LIST = <<HTML
377
+ IF:includes
378
+ <div class="sectiontitle">Included Modules</div>
379
+ <ul>
380
+ START:includes
381
+ <li>HREF:aref:name:</li>
382
+ END:includes
383
+ </ul>
384
+ ENDIF:includes
385
+
386
+ IF:method_list
387
+ START:method_list
388
+ IF:methods
389
+ <div class="sectiontitle">%type% %category% methods</div>
390
+ START:methods
391
+ <div class="method">
392
+ <div class="title">
393
+ IF:callseq
394
+ <a name="%aref%"></a><b>%callseq%</b>
395
+ ENDIF:callseq
396
+ IFNOT:callseq
397
+ <a name="%aref%"></a><b>%name%</b>%params%
398
+ ENDIF:callseq
399
+ IF:codeurl
400
+ [ <a href="javascript:openCode('%codeurl%')">source</a> ]
401
+ ENDIF:codeurl
402
+ </div>
403
+ IF:m_desc
404
+ <div class="description">
405
+ %m_desc%
406
+ </div>
407
+ ENDIF:m_desc
408
+ IF:aka
409
+ <div class="aka">
410
+ This method is also aliased as
411
+ START:aka
412
+ <a href="%aref%">%name%</a>
413
+ END:aka
414
+ </div>
415
+ ENDIF:aka
416
+ IF:sourcecode
417
+ <div class="sourcecode">
418
+ <p class="source-link">[ <a href="javascript:toggleSource('%aref%-source')" id="l_%aref%-source">show source</a> ]</p>
419
+ <div id="%aref%-source" class="dyn-source">
420
+ <pre>
421
+ %sourcecode%
422
+ </pre>
423
+ </div>
424
+ </div>
425
+ ENDIF:sourcecode
426
+ </div>
427
+ END:methods
428
+ ENDIF:methods
429
+ END:method_list
430
+ ENDIF:method_list
431
+ HTML
432
+
433
+ =begin
434
+ =end
435
+
436
+ ########################## Source code ##########################
437
+
438
+ SRC_PAGE = <<HTML
439
+ <html>
440
+ <head><title>%title%</title>
441
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%">
442
+ <style>
443
+ .ruby-comment { color: green; font-style: italic }
444
+ .ruby-constant { color: #4433aa; font-weight: bold; }
445
+ .ruby-identifier { color: #222222; }
446
+ .ruby-ivar { color: #2233dd; }
447
+ .ruby-keyword { color: #3333FF; font-weight: bold }
448
+ .ruby-node { color: #777777; }
449
+ .ruby-operator { color: #111111; }
450
+ .ruby-regexp { color: #662222; }
451
+ .ruby-value { color: #662222; font-style: italic }
452
+ .kw { color: #3333FF; font-weight: bold }
453
+ .cmt { color: green; font-style: italic }
454
+ .str { color: #662222; font-style: italic }
455
+ .re { color: #662222; }
456
+ </style>
457
+ </head>
458
+ <body bgcolor="white">
459
+ <pre>%code%</pre>
460
+ </body>
461
+ </html>
462
+ HTML
463
+
464
+ ########################## Index ################################
465
+
466
+ FR_INDEX_BODY = <<HTML
467
+ !INCLUDE!
468
+ HTML
469
+
470
+ FILE_INDEX = <<HTML
471
+ <html>
472
+ <head>
473
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%">
474
+ <style>
475
+ <!--
476
+ body {
477
+ background-color: #EEE;
478
+ font-family: #{FONTS};
479
+ color: #000;
480
+ margin: 0px;
481
+ }
482
+ .banner {
483
+ background: #005;
484
+ color: #FFF;
485
+ padding: 0.2em;
486
+ font-size: small;
487
+ font-weight: bold;
488
+ text-align: center;
489
+ }
490
+ .entries {
491
+ margin: 0.25em 1em 0 1em;
492
+ font-size: x-small;
493
+ }
494
+ a {
495
+ color: #00F;
496
+ text-decoration: none;
497
+ }
498
+ a:hover {
499
+ color: #77F;
500
+ text-decoration: underline;
501
+ }
502
+ -->
503
+ </style>
504
+ <base target="docwin">
505
+ </head>
506
+ <body>
507
+ <div class="banner">%list_title%</div>
508
+ <div class="entries">
509
+ START:entries
510
+ <a href="%href%">%name%</a><br>
511
+ END:entries
512
+ </div>
513
+ </body></html>
514
+ HTML
515
+
516
+ CLASS_INDEX = FILE_INDEX
517
+ METHOD_INDEX = FILE_INDEX
518
+
519
+ INDEX = <<HTML
520
+ <html>
521
+ <head>
522
+ <title>%title%</title>
523
+ <meta http-equiv="Content-Type" content="text/html; charset=%charset%">
524
+ </head>
525
+
526
+ <frameset cols="20%,*">
527
+ <frameset rows="15%,35%,50%">
528
+ <frame src="fr_file_index.html" title="Files" name="Files" />
529
+ <frame src="fr_class_index.html" name="Classes" />
530
+ <frame src="fr_method_index.html" name="Methods" />
531
+ </frameset>
532
+ IF:inline_source
533
+ <frame src="%initial_page%" name="docwin">
534
+ ENDIF:inline_source
535
+ IFNOT:inline_source
536
+ <frameset rows="80%,20%">
537
+ <frame src="%initial_page%" name="docwin">
538
+ <frame src="blank.html" name="source">
539
+ </frameset>
540
+ ENDIF:inline_source
541
+ <noframes>
542
+ <body bgcolor="white">
543
+ Click <a href="html/index.html">here</a> for a non-frames
544
+ version of this page.
545
+ </body>
546
+ </noframes>
547
+ </frameset>
548
+
549
+ </html>
550
+ HTML
551
+
552
+ # and a blank page to use as a target
553
+ BLANK = %{
554
+ <html><body bgcolor="white"></body></html>
555
+ }
556
+
557
+ def write_extra_pages
558
+ template = TemplatePage.new(BLANK)
559
+ File.open("blank.html", "w") { |f| template.write_html_on(f, {}) }
560
+ end
561
+
562
+ end
563
+ end
564
+