roby 0.7.3 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (236) hide show
  1. data/History.txt +7 -5
  2. data/Manifest.txt +91 -16
  3. data/README.txt +24 -24
  4. data/Rakefile +92 -64
  5. data/app/config/app.yml +42 -43
  6. data/app/config/init.rb +26 -0
  7. data/benchmark/alloc_misc.rb +123 -0
  8. data/benchmark/discovery_latency.rb +67 -0
  9. data/benchmark/garbage_collection.rb +48 -0
  10. data/benchmark/genom.rb +31 -0
  11. data/benchmark/transactions.rb +62 -0
  12. data/bin/roby +1 -1
  13. data/bin/roby-log +16 -6
  14. data/doc/guide/.gitignore +2 -0
  15. data/doc/guide/config.yaml +34 -0
  16. data/doc/guide/ext/init.rb +14 -0
  17. data/doc/guide/ext/previous_next.rb +40 -0
  18. data/doc/guide/ext/rdoc_links.rb +33 -0
  19. data/doc/guide/index.rdoc +16 -0
  20. data/doc/guide/overview.rdoc +62 -0
  21. data/doc/guide/plan_modifications.rdoc +67 -0
  22. data/doc/guide/src/abstraction/achieve_with.page +8 -0
  23. data/doc/guide/src/abstraction/forwarding.page +8 -0
  24. data/doc/guide/src/abstraction/hierarchy.page +19 -0
  25. data/doc/guide/src/abstraction/index.page +28 -0
  26. data/doc/guide/src/abstraction/task_models.page +13 -0
  27. data/doc/guide/src/basics.template +6 -0
  28. data/doc/guide/src/basics/app.page +139 -0
  29. data/doc/guide/src/basics/code_examples.page +33 -0
  30. data/doc/guide/src/basics/dry.page +69 -0
  31. data/doc/guide/src/basics/errors.page +443 -0
  32. data/doc/guide/src/basics/events.page +179 -0
  33. data/doc/guide/src/basics/hierarchy.page +275 -0
  34. data/doc/guide/src/basics/index.page +11 -0
  35. data/doc/guide/src/basics/log_replay/goForward_1.png +0 -0
  36. data/doc/guide/src/basics/log_replay/goForward_2.png +0 -0
  37. data/doc/guide/src/basics/log_replay/goForward_3.png +0 -0
  38. data/doc/guide/src/basics/log_replay/goForward_4.png +0 -0
  39. data/doc/guide/src/basics/log_replay/goForward_5.png +0 -0
  40. data/doc/guide/src/basics/log_replay/hierarchy_error_1.png +0 -0
  41. data/doc/guide/src/basics/log_replay/hierarchy_error_2.png +0 -0
  42. data/doc/guide/src/basics/log_replay/hierarchy_error_3.png +0 -0
  43. data/doc/guide/src/basics/log_replay/plan_repair_1.png +0 -0
  44. data/doc/guide/src/basics/log_replay/plan_repair_2.png +0 -0
  45. data/doc/guide/src/basics/log_replay/plan_repair_3.png +0 -0
  46. data/doc/guide/src/basics/log_replay/plan_repair_4.png +0 -0
  47. data/doc/guide/src/basics/log_replay/roby_log_main_window.png +0 -0
  48. data/doc/guide/src/basics/log_replay/roby_log_relation_window.png +0 -0
  49. data/doc/guide/src/basics/log_replay/roby_replay_event_representation.png +0 -0
  50. data/doc/guide/src/basics/plan_objects.page +71 -0
  51. data/doc/guide/src/basics/relations_display.page +203 -0
  52. data/doc/guide/src/basics/roby_cycle_overview.png +0 -0
  53. data/doc/guide/src/basics/shell.page +102 -0
  54. data/doc/guide/src/basics/summary.page +32 -0
  55. data/doc/guide/src/basics/tasks.page +357 -0
  56. data/doc/guide/src/basics_shell_header.txt +16 -0
  57. data/doc/guide/src/cycle/cycle-overview.png +0 -0
  58. data/doc/guide/src/cycle/cycle-overview.svg +208 -0
  59. data/doc/guide/src/cycle/error_handling.page +168 -0
  60. data/doc/guide/src/cycle/error_instantaneous_repair.png +0 -0
  61. data/doc/guide/src/cycle/error_instantaneous_repair.svg +1224 -0
  62. data/doc/guide/src/cycle/garbage_collection.page +10 -0
  63. data/doc/guide/src/cycle/index.page +23 -0
  64. data/doc/guide/src/cycle/propagation.page +154 -0
  65. data/doc/guide/src/cycle/propagation_diamond.png +0 -0
  66. data/doc/guide/src/cycle/propagation_diamond.svg +1279 -0
  67. data/doc/guide/src/default.css +319 -0
  68. data/doc/guide/src/default.template +74 -0
  69. data/doc/guide/src/htmldoc.metainfo +20 -0
  70. data/doc/guide/src/htmldoc.virtual +18 -0
  71. data/doc/guide/src/images/bodybg.png +0 -0
  72. data/doc/guide/src/images/contbg.png +0 -0
  73. data/doc/guide/src/images/footerbg.png +0 -0
  74. data/doc/guide/src/images/gradient1.png +0 -0
  75. data/doc/guide/src/images/gradient2.png +0 -0
  76. data/doc/guide/src/index.page +7 -0
  77. data/doc/guide/src/introduction/index.page +29 -0
  78. data/doc/guide/src/introduction/install.page +133 -0
  79. data/doc/{papers.rdoc → guide/src/introduction/publications.page} +5 -2
  80. data/doc/{videos.rdoc → guide/src/introduction/videos.page} +4 -2
  81. data/doc/guide/src/plugins/fault_tolerance.page +44 -0
  82. data/doc/guide/src/plugins/index.page +11 -0
  83. data/doc/guide/src/plugins/subsystems.page +45 -0
  84. data/doc/guide/src/relations/dependency.page +89 -0
  85. data/doc/guide/src/relations/index.page +12 -0
  86. data/doc/misc/update_github +24 -0
  87. data/doc/tutorials/02-GoForward.rdoc +3 -3
  88. data/ext/graph/graph.cc +46 -0
  89. data/lib/roby.rb +57 -22
  90. data/lib/roby/app.rb +132 -112
  91. data/lib/roby/app/plugins/rake.rb +21 -0
  92. data/lib/roby/app/rake.rb +0 -7
  93. data/lib/roby/app/run.rb +1 -1
  94. data/lib/roby/app/scripts/distributed.rb +1 -2
  95. data/lib/roby/app/scripts/generate/bookmarks.rb +1 -1
  96. data/lib/roby/app/scripts/results.rb +2 -1
  97. data/lib/roby/app/scripts/run.rb +6 -2
  98. data/lib/roby/app/scripts/shell.rb +11 -11
  99. data/lib/roby/config.rb +1 -1
  100. data/lib/roby/decision_control.rb +62 -3
  101. data/lib/roby/distributed.rb +4 -0
  102. data/lib/roby/distributed/base.rb +8 -0
  103. data/lib/roby/distributed/communication.rb +12 -8
  104. data/lib/roby/distributed/connection_space.rb +61 -44
  105. data/lib/roby/distributed/distributed_object.rb +1 -1
  106. data/lib/roby/distributed/notifications.rb +22 -30
  107. data/lib/roby/distributed/peer.rb +13 -8
  108. data/lib/roby/distributed/proxy.rb +5 -5
  109. data/lib/roby/distributed/subscription.rb +4 -4
  110. data/lib/roby/distributed/transaction.rb +3 -3
  111. data/lib/roby/event.rb +176 -110
  112. data/lib/roby/exceptions.rb +12 -4
  113. data/lib/roby/execution_engine.rb +1604 -0
  114. data/lib/roby/external_process_task.rb +225 -0
  115. data/lib/roby/graph.rb +0 -6
  116. data/lib/roby/interface.rb +221 -137
  117. data/lib/roby/log/console.rb +5 -3
  118. data/lib/roby/log/data_stream.rb +94 -16
  119. data/lib/roby/log/dot.rb +8 -8
  120. data/lib/roby/log/event_stream.rb +13 -3
  121. data/lib/roby/log/file.rb +43 -18
  122. data/lib/roby/log/gui/basic_display_ui.rb +89 -0
  123. data/lib/roby/log/gui/chronicle_view_ui.rb +90 -0
  124. data/lib/roby/log/gui/data_displays.rb +4 -5
  125. data/lib/roby/log/gui/data_displays_ui.rb +146 -0
  126. data/lib/roby/log/gui/relations.rb +18 -18
  127. data/lib/roby/log/gui/relations_ui.rb +120 -0
  128. data/lib/roby/log/gui/relations_view_ui.rb +144 -0
  129. data/lib/roby/log/gui/replay.rb +41 -13
  130. data/lib/roby/log/gui/replay_controls.rb +3 -0
  131. data/lib/roby/log/gui/replay_controls.ui +133 -110
  132. data/lib/roby/log/gui/replay_controls_ui.rb +249 -0
  133. data/lib/roby/log/hooks.rb +19 -18
  134. data/lib/roby/log/logger.rb +7 -6
  135. data/lib/roby/log/notifications.rb +4 -4
  136. data/lib/roby/log/plan_rebuilder.rb +20 -22
  137. data/lib/roby/log/relations.rb +44 -16
  138. data/lib/roby/log/server.rb +1 -4
  139. data/lib/roby/log/timings.rb +88 -19
  140. data/lib/roby/plan-object.rb +135 -11
  141. data/lib/roby/plan.rb +408 -224
  142. data/lib/roby/planning/loops.rb +32 -25
  143. data/lib/roby/planning/model.rb +157 -51
  144. data/lib/roby/planning/task.rb +47 -20
  145. data/lib/roby/query.rb +128 -92
  146. data/lib/roby/relations.rb +254 -136
  147. data/lib/roby/relations/conflicts.rb +6 -9
  148. data/lib/roby/relations/dependency.rb +358 -0
  149. data/lib/roby/relations/ensured.rb +0 -1
  150. data/lib/roby/relations/error_handling.rb +0 -1
  151. data/lib/roby/relations/events.rb +0 -2
  152. data/lib/roby/relations/executed_by.rb +26 -11
  153. data/lib/roby/relations/planned_by.rb +14 -14
  154. data/lib/roby/robot.rb +46 -0
  155. data/lib/roby/schedulers/basic.rb +34 -0
  156. data/lib/roby/standalone.rb +4 -0
  157. data/lib/roby/standard_errors.rb +21 -15
  158. data/lib/roby/state/events.rb +5 -4
  159. data/lib/roby/support.rb +107 -6
  160. data/lib/roby/task-operations.rb +23 -19
  161. data/lib/roby/task.rb +522 -148
  162. data/lib/roby/task_index.rb +80 -0
  163. data/lib/roby/test/common.rb +283 -44
  164. data/lib/roby/test/distributed.rb +53 -37
  165. data/lib/roby/test/testcase.rb +9 -204
  166. data/lib/roby/test/tools.rb +3 -3
  167. data/lib/roby/transactions.rb +154 -111
  168. data/lib/roby/transactions/proxy.rb +40 -7
  169. data/manifest.xml +20 -0
  170. data/plugins/fault_injection/README.txt +0 -3
  171. data/plugins/fault_injection/Rakefile +2 -8
  172. data/plugins/fault_injection/app.rb +1 -1
  173. data/plugins/fault_injection/fault_injection.rb +3 -3
  174. data/plugins/fault_injection/test/test_fault_injection.rb +19 -25
  175. data/plugins/subsystems/README.txt +0 -3
  176. data/plugins/subsystems/Rakefile +2 -7
  177. data/plugins/subsystems/app.rb +27 -16
  178. data/plugins/subsystems/test/app/config/init.rb +3 -0
  179. data/plugins/subsystems/test/app/planners/main.rb +1 -1
  180. data/plugins/subsystems/test/app/tasks/services.rb +1 -1
  181. data/plugins/subsystems/test/test_subsystems.rb +23 -16
  182. data/test/distributed/test_communication.rb +32 -15
  183. data/test/distributed/test_connection.rb +28 -26
  184. data/test/distributed/test_execution.rb +59 -54
  185. data/test/distributed/test_mixed_plan.rb +34 -34
  186. data/test/distributed/test_plan_notifications.rb +26 -26
  187. data/test/distributed/test_protocol.rb +57 -48
  188. data/test/distributed/test_query.rb +11 -7
  189. data/test/distributed/test_remote_plan.rb +71 -71
  190. data/test/distributed/test_transaction.rb +50 -47
  191. data/test/mockups/external_process +28 -0
  192. data/test/planning/test_loops.rb +163 -119
  193. data/test/planning/test_model.rb +3 -3
  194. data/test/planning/test_task.rb +27 -7
  195. data/test/relations/test_conflicts.rb +3 -3
  196. data/test/relations/test_dependency.rb +324 -0
  197. data/test/relations/test_ensured.rb +2 -2
  198. data/test/relations/test_executed_by.rb +94 -19
  199. data/test/relations/test_planned_by.rb +11 -9
  200. data/test/suite_core.rb +6 -3
  201. data/test/suite_distributed.rb +1 -0
  202. data/test/suite_planning.rb +1 -0
  203. data/test/suite_relations.rb +2 -2
  204. data/test/tasks/test_external_process.rb +126 -0
  205. data/test/{test_thread_task.rb → tasks/test_thread_task.rb} +17 -20
  206. data/test/test_bgl.rb +21 -1
  207. data/test/test_event.rb +229 -155
  208. data/test/test_exceptions.rb +79 -80
  209. data/test/test_execution_engine.rb +987 -0
  210. data/test/test_gui.rb +1 -1
  211. data/test/test_interface.rb +11 -5
  212. data/test/test_log.rb +18 -7
  213. data/test/test_log_server.rb +1 -0
  214. data/test/test_plan.rb +229 -395
  215. data/test/test_query.rb +193 -35
  216. data/test/test_relations.rb +88 -8
  217. data/test/test_state.rb +55 -37
  218. data/test/test_support.rb +1 -1
  219. data/test/test_task.rb +371 -218
  220. data/test/test_testcase.rb +32 -16
  221. data/test/test_transactions.rb +211 -170
  222. data/test/test_transactions_proxy.rb +37 -19
  223. metadata +169 -71
  224. data/.gitignore +0 -29
  225. data/doc/styles/allison.css +0 -314
  226. data/doc/styles/allison.js +0 -316
  227. data/doc/styles/allison.rb +0 -276
  228. data/doc/styles/jamis.rb +0 -593
  229. data/lib/roby/control.rb +0 -746
  230. data/lib/roby/executives/simple.rb +0 -30
  231. data/lib/roby/propagation.rb +0 -562
  232. data/lib/roby/relations/hierarchy.rb +0 -239
  233. data/lib/roby/transactions/updates.rb +0 -139
  234. data/test/relations/test_hierarchy.rb +0 -158
  235. data/test/test_control.rb +0 -399
  236. data/test/test_propagation.rb +0 -210
@@ -1,276 +0,0 @@
1
-
2
- # RDoc workarounds
3
- class String
4
- def if_exists (item = nil)
5
- unless item
6
- self unless self =~ /(%(\w+)%)/
7
- "\nIF:#{$2}\n#{self}\nENDIF:#{$2}\n"
8
- else
9
- "\nIF:#{item}\n#{self}\nENDIF:#{item}\n"
10
- end
11
- end
12
- def loop(item)
13
- "\nSTART:#{item}\n#{self}\nEND:#{item}\n"
14
- end
15
- end
16
-
17
- module RDoc
18
- module Page
19
-
20
- puts "Allison 2 template (c) 2007 Cloudburst, LLC"
21
-
22
- require 'pathname'
23
- CACHE_DIR = File.expand_path(File.dirname(__FILE__) + "/../cache")
24
- Dir.mkdir(CACHE_DIR) unless File.exist?(CACHE_DIR)
25
-
26
- begin
27
- require 'rubygems'
28
- gem 'markaby', '>= 0.5'
29
- require 'markaby'
30
- require 'base64'
31
-
32
- # Markaby page says Markaby is better in its own module
33
- module Allison
34
-
35
- FONTS = METHOD_LIST = SRC_PAGE = FILE_PAGE = CLASS_PAGE = ""
36
-
37
- FR_INDEX_BODY = "!INCLUDE!" # Who knows
38
-
39
- STYLE, JAVASCRIPT = ["css", "js"].map do |extension|
40
- s = File.open(File.dirname(__FILE__) + "/allison.#{extension}").read
41
- # Programmatic CSS
42
- if extension == "css"
43
- s_lines = s.split("\n")
44
- meths = []
45
- s_lines.collect! do |line|
46
- line = line.squeeze(" ").strip
47
- if line =~ /(\w+)/ and meths.include? $1
48
- line = instance_eval line
49
- # puts "Called method #{$1}"
50
- elsif line !~ /\*\/|\/\*/ and line =~ /(@.*|^def (\w+).*)/
51
- # printf "Evalled #{$1}"
52
- result = instance_eval $1
53
- # puts " to #{result.inspect}"
54
- result = (result.is_a?(Fixnum) ? result.to_s + "px" : result.to_s)
55
- line = (line == $1 ? "" : line.gsub($1, result))
56
- meths.push $2 if $2
57
- end
58
- line !~ /^\s*$|\s*^\/\*.*\*\/\s*$|\{|\}/ ? line + ";" : line
59
- end
60
- s = s_lines.join("\n")
61
- else
62
- # Do nothing; the Javascript is already fine
63
- end
64
- s
65
- end
66
-
67
- INDEX = Markaby::Builder.new.xhtml_strict do
68
- head do
69
- title '%title%'
70
- link :rel => 'stylesheet', :type => 'text/css', :href => 'rdoc-style.css', :media => 'screen'
71
- tag! :meta, 'http-equiv' => 'refresh', 'content' => '0;url=%initial_page%'
72
- end
73
- body do
74
- div.container! do
75
- 6.times {|n| div('', :class => "curve", :id => "preheader_curve_#{n}") }
76
- div.header! do
77
- span.title! do
78
- p { ' ' }
79
- h1 "Ruby Documentation"
80
- end
81
- end
82
- div.clear {}
83
- div.redirect! do
84
- a :href => '%initial_page%' do
85
- h1 "Redirect"
86
- end
87
- end
88
- end
89
- end
90
- end.to_s
91
-
92
- FILE_INDEX = METHOD_INDEX = CLASS_INDEX = Markaby::Builder.new.capture do
93
- a :href => '%href%' do
94
- self << '%name%'
95
- br
96
- end
97
- end.loop('entries')
98
-
99
- BODY = Markaby::Builder.new.xhtml_strict do
100
- head do
101
- title "%title%"
102
- link :rel => 'stylesheet', :type => 'text/css', :href => '%style_url%', :media => 'screen'
103
- script :type => 'text/javascript' do
104
- JAVASCRIPT
105
- end
106
- end
107
- body do
108
- div.container! do
109
- 6.times {|n| div('', :class => "curve", :id => "preheader_curve_#{n}") }
110
- div.header! do
111
- p {'%full_path%'.if_exists}
112
- span do
113
- h1.title! '%title%'.if_exists
114
- end
115
- self << "!INCLUDE!" # Always empty
116
- end
117
- div.clear {}
118
- div.left! do
119
- self << (div.navigation.darker.top.child_of! do
120
- # Ugh
121
- h3 "Child of"
122
- self << "<span>\n#{"<a href='%par_url%'>".if_exists}%parent%#{"</a>".if_exists('par_url')}</span>"
123
- end).if_exists('parent')
124
-
125
- self << div.navigation.darker.top.defined_in! do
126
- h3('Defined in')
127
- self << a('%full_path%', :href => '%full_path_url%').if_exists.loop('infiles')
128
- end.if_exists('infiles')
129
-
130
- ['includes', 'requires', 'methods'].each do |item|
131
- self << div.navigation.top(:id => item) do
132
- self << h3(item.capitalize)
133
- self << "#{"<a href='%aref%'>".if_exists}%name%#{br}#{"</a>".if_exists('aref')}".if_exists('name').loop(item)
134
- end.if_exists(item)
135
- end
136
-
137
- div.spacer! ''
138
-
139
- # For the local AJAX includes
140
- ['class', 'file', 'method'].each do |item|
141
- div.navigation.darker.index :id => "#{item}_wrapper" do
142
- div.list_header do
143
- h3 'All ' + (item == 'class' ? 'classes' : item + 's')
144
- end
145
- div.list_header_link do
146
- a((item == 'method' ? 'Show...' : 'Hide...'),
147
- :id => "#{item}_link", :href => "#",
148
- :onclick=> "toggle('#{item}'); toggleText('#{item}_link'); return false;")
149
- end
150
- div.clear {}
151
- div(:id => item) do
152
- form do
153
- label(:for => "filter_#{item}") { 'Filter:' + '&nbsp;' * 2 }
154
- input '', :type => 'text', :id => "filter_#{item}",
155
- :onKeyUp => "return filterList('#{item}', this.value, event);",
156
- :onKeyPress => "return disableSubmit(event);"
157
- end
158
- end
159
- end
160
- end
161
- end
162
-
163
- div.content! do
164
-
165
- self << capture do
166
- h1.item_name! '%title%'
167
- end.if_exists('title')
168
-
169
- self << capture do
170
- div.description! do
171
- '%description%'
172
- end
173
- end.if_exists('description')
174
-
175
- self << capture do
176
- self << h1 {a '%sectitle%', :name => '%secsequence%'}.if_exists('sectitle')
177
- self << p {'%seccomment%'}.if_exists
178
-
179
- self << capture do
180
- h1 "Child modules and classes"
181
- p '%classlist%'
182
- end.if_exists('classlist')
183
-
184
- ['constants', 'aliases', 'attributes'].each do |item|
185
- self << capture do
186
- h1(item.capitalize)
187
- p do
188
- table do
189
- fields = %w[name value old_name new_name rw]
190
- self << tr do
191
- # Header row
192
- if item == 'constants'
193
- th 'Name'
194
- th 'Value'
195
- elsif item == 'aliases'
196
- th 'Old name'
197
- th 'New name'
198
- elsif item == 'attributes'
199
- th 'Name'
200
- th 'Read/write?'
201
- end
202
- end
203
- self << tr do
204
- # Looped item rows
205
- fields.each do |field|
206
- if field !~ /desc/
207
- self << td('%' + field + '%', :class => field =~ /^old|^name/ ? "highlight" : "normal").if_exists
208
- else
209
- self << td(('%' + field+ '%').if_exists)
210
- end
211
- end
212
- end.loop(item)
213
- end
214
- end
215
- end.if_exists(item)
216
- end
217
-
218
- self << capture do
219
- h1('%type% %category% Methods')
220
- self << capture do
221
- self << a.small(:name => '%aref%') {br}.if_exists
222
- div.method_block do
223
- h3 { "<a href='#%aref%'>".if_exists + '%callseq%'.if_exists + '%name%'.if_exists + '%params%'.if_exists + "</a>".if_exists('aref')}
224
- self << '%m_desc%'.if_exists
225
-
226
- self << capture do
227
- p.source_link :id => '%aref%-show-link' do
228
- a "Show source...", :id => '%aref%-link', :href => "#",
229
- :onclick=> "toggle('%aref%-source'); toggleText('%aref%-link'); return false;"
230
- end
231
- div.source :id => '%aref%-source' do
232
- pre { '%sourcecode%' }
233
- end
234
- end.if_exists('sourcecode')
235
- end
236
-
237
- end.loop('methods').if_exists('methods')
238
- end.loop('method_list').if_exists('method_list')
239
-
240
- end.loop('sections').if_exists('sections')
241
-
242
- end
243
-
244
- div.footer!.clear do
245
- self << Time.now.strftime("Generated on %b %d, %Y").gsub(' 0', ' ')
246
- self << " / Allison 2 &copy; 2007 "
247
- a "Cloudburst, LLC", :href => "http://cloudbur.st"
248
- end
249
- end
250
- end
251
-
252
- end.to_s
253
- end
254
-
255
- Allison.constants.each do |c|
256
- eval "#{c} = Allison::#{c}" # Jump out of the namespace
257
- begin
258
- File.open("#{CACHE_DIR}/#{c}", 'w') do |f|
259
- f.puts eval(c) # Write cache
260
- end
261
- rescue Errno::EACCES => e
262
- end
263
- end
264
-
265
- rescue LoadError => e
266
- # We don't have some dependency
267
- lib = (e.to_s[/(.*)\(/, 1] or e.to_s).split(" ").last.capitalize
268
- puts "Using cache (couldn't load '#{lib}')"
269
- Dir[CACHE_DIR + '/*'].each do |filename|
270
- eval("#{filename.split("/").last} = File.open(filename) {|s| s.read}")
271
- end
272
- end
273
-
274
- end
275
-
276
- end
@@ -1,593 +0,0 @@
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
- img {
94
- margin: 2em;
95
- }
96
-
97
- .dyn-source {
98
- display: none;
99
- background: #FFE;
100
- color: #000;
101
- border: 1px dotted black;
102
- margin: 0.5em 2em 0.5em 2em;
103
- padding: 0.5em;
104
- }
105
-
106
- .dyn-source .cmt {
107
- color: #00F;
108
- font-style: italic;
109
- }
110
-
111
- .dyn-source .kw {
112
- color: #070;
113
- font-weight: bold;
114
- }
115
-
116
- .method {
117
- margin-left: 1em;
118
- margin-right: 1em;
119
- margin-bottom: 1em;
120
- }
121
-
122
- .description pre {
123
- padding: 0.5em;
124
- border: 1px dotted black;
125
- background: #FFE;
126
- }
127
-
128
- .method .title {
129
- font-family: monospace;
130
- font-size: large;
131
- border-bottom: 1px dashed black;
132
- margin-bottom: 0.3em;
133
- padding-bottom: 0.1em;
134
- }
135
-
136
- .method .description, .method .sourcecode {
137
- margin-left: 1em;
138
- }
139
-
140
- .description p, .sourcecode p {
141
- margin-bottom: 0.5em;
142
- }
143
-
144
- .method .sourcecode p.source-link {
145
- text-indent: 0em;
146
- margin-top: 0.5em;
147
- }
148
-
149
- .method .aka {
150
- margin-top: 0.3em;
151
- margin-left: 1em;
152
- font-style: italic;
153
- text-indent: 2em;
154
- }
155
-
156
- h1 {
157
- padding: 1em;
158
- border: 1px solid black;
159
- font-size: x-large;
160
- font-weight: bold;
161
- color: #FFF;
162
- background: #007;
163
- }
164
-
165
- h2 {
166
- padding: 0.5em 1em 0.5em 1em;
167
- border: 1px solid black;
168
- font-size: large;
169
- font-weight: bold;
170
- color: #FFF;
171
- background: #009;
172
- }
173
-
174
- h3, h4, h5, h6 {
175
- padding: 0.2em 1em 0.2em 1em;
176
- border: 1px dashed black;
177
- color: #000;
178
- background: #AAF;
179
- }
180
-
181
- .sourcecode > pre {
182
- padding: 0.5em;
183
- border: 1px dotted black;
184
- background: #FFE;
185
- }
186
-
187
- CSS
188
-
189
- XHTML_PREAMBLE = %{<?xml version="1.0" encoding="%charset%"?>
190
- <!DOCTYPE html
191
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
192
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
193
- }
194
-
195
- XHTML_FRAMESET_PREAMBLE = %{
196
- <!DOCTYPE html
197
- PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
198
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
199
- }
200
-
201
- HEADER = XHTML_PREAMBLE + <<ENDHEADER
202
- <html>
203
- <head>
204
- <title>%title%</title>
205
- <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
206
- <link rel="stylesheet" href="%style_url%" type="text/css" media="screen" />
207
-
208
- <script language="JavaScript" type="text/javascript">
209
- // <![CDATA[
210
-
211
- function toggleSource( id )
212
- {
213
- var elem
214
- var link
215
-
216
- if( document.getElementById )
217
- {
218
- elem = document.getElementById( id )
219
- link = document.getElementById( "l_" + id )
220
- }
221
- else if ( document.all )
222
- {
223
- elem = eval( "document.all." + id )
224
- link = eval( "document.all.l_" + id )
225
- }
226
- else
227
- return false;
228
-
229
- if( elem.style.display == "block" )
230
- {
231
- elem.style.display = "none"
232
- link.innerHTML = "show source"
233
- }
234
- else
235
- {
236
- elem.style.display = "block"
237
- link.innerHTML = "hide source"
238
- }
239
- }
240
-
241
- function openCode( url )
242
- {
243
- window.open( url, "SOURCE_CODE", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=480,width=750" ).focus();
244
- }
245
- // ]]>
246
- </script>
247
- </head>
248
-
249
- <body>
250
- ENDHEADER
251
-
252
- FILE_PAGE = <<HTML
253
- <table border='0' cellpadding='0' cellspacing='0' width="100%" class='banner'>
254
- <tr><td>
255
- <table width="100%" border='0' cellpadding='0' cellspacing='0'><tr>
256
- <td class="file-title" colspan="2"><span class="file-title-prefix">File</span><br />%short_name%</td>
257
- <td align="right">
258
- <table border='0' cellspacing="0" cellpadding="2">
259
- <tr>
260
- <td>Path:</td>
261
- <td>%full_path%
262
- IF:cvsurl
263
- &nbsp;(<a href="%cvsurl%">CVS</a>)
264
- ENDIF:cvsurl
265
- </td>
266
- </tr>
267
- <tr>
268
- <td>Modified:</td>
269
- <td>%dtm_modified%</td>
270
- </tr>
271
- </table>
272
- </td></tr>
273
- </table>
274
- </td></tr>
275
- </table><br />
276
- HTML
277
-
278
- ###################################################################
279
-
280
- CLASS_PAGE = <<HTML
281
- <table width="100%" border='0' cellpadding='0' cellspacing='0' class='banner'><tr>
282
- <td class="file-title"><span class="file-title-prefix">%classmod%</span><br />%full_name%</td>
283
- <td align="right">
284
- <table cellspacing="0" cellpadding="2">
285
- <tr valign="top">
286
- <td>In:</td>
287
- <td>
288
- START:infiles
289
- HREF:full_path_url:full_path:
290
- IF:cvsurl
291
- &nbsp;(<a href="%cvsurl%">CVS</a>)
292
- ENDIF:cvsurl
293
- END:infiles
294
- </td>
295
- </tr>
296
- IF:parent
297
- <tr>
298
- <td>Parent:</td>
299
- <td>
300
- IF:par_url
301
- <a href="%par_url%">
302
- ENDIF:par_url
303
- %parent%
304
- IF:par_url
305
- </a>
306
- ENDIF:par_url
307
- </td>
308
- </tr>
309
- ENDIF:parent
310
- </table>
311
- </td>
312
- </tr>
313
- </table>
314
- HTML
315
-
316
- ###################################################################
317
-
318
- METHOD_LIST = <<HTML
319
- <div id="content">
320
- IF:diagram
321
- <table cellpadding='0' cellspacing='0' border='0' width="100%"><tr><td align="center">
322
- %diagram%
323
- </td></tr></table>
324
- ENDIF:diagram
325
-
326
- IF:description
327
- <div class="description">%description%</div>
328
- ENDIF:description
329
-
330
- IF:requires
331
- <div class="sectiontitle">Required Files</div>
332
- <ul>
333
- START:requires
334
- <li>HREF:aref:name:</li>
335
- END:requires
336
- </ul>
337
- ENDIF:requires
338
-
339
- IF:toc
340
- <div class="sectiontitle">Contents</div>
341
- <ul>
342
- START:toc
343
- <li><a href="#%href%">%secname%</a></li>
344
- END:toc
345
- </ul>
346
- ENDIF:toc
347
-
348
- IF:methods
349
- <div class="sectiontitle">Methods</div>
350
- <ul>
351
- START:methods
352
- <li>HREF:aref:name:</li>
353
- END:methods
354
- </ul>
355
- ENDIF:methods
356
-
357
- IF:includes
358
- <div class="sectiontitle">Included Modules</div>
359
- <ul>
360
- START:includes
361
- <li>HREF:aref:name:</li>
362
- END:includes
363
- </ul>
364
- ENDIF:includes
365
-
366
- START:sections
367
- IF:sectitle
368
- <div class="sectiontitle"><a name="%secsequence%">%sectitle%</a></div>
369
- IF:seccomment
370
- <div class="description">
371
- %seccomment%
372
- </div>
373
- ENDIF:seccomment
374
- ENDIF:sectitle
375
-
376
- IF:classlist
377
- <div class="sectiontitle">Classes and Modules</div>
378
- %classlist%
379
- ENDIF:classlist
380
-
381
- IF:constants
382
- <div class="sectiontitle">Constants</div>
383
- <table border='0' cellpadding='5'>
384
- START:constants
385
- <tr valign='top'>
386
- <td class="attr-name">%name%</td>
387
- <td>=</td>
388
- <td class="attr-value">%value%</td>
389
- </tr>
390
- IF:desc
391
- <tr valign='top'>
392
- <td>&nbsp;</td>
393
- <td colspan="2" class="attr-desc">%desc%</td>
394
- </tr>
395
- ENDIF:desc
396
- END:constants
397
- </table>
398
- ENDIF:constants
399
-
400
- IF:attributes
401
- <div class="sectiontitle">Attributes</div>
402
- <table border='0' cellpadding='5'>
403
- START:attributes
404
- <tr valign='top'>
405
- <td class='attr-rw'>
406
- IF:rw
407
- [%rw%]
408
- ENDIF:rw
409
- </td>
410
- <td class='attr-name'>%name%</td>
411
- <td class='attr-desc'>%a_desc%</td>
412
- </tr>
413
- END:attributes
414
- </table>
415
- ENDIF:attributes
416
-
417
- IF:method_list
418
- START:method_list
419
- IF:methods
420
- <div class="sectiontitle">%type% %category% methods</div>
421
- START:methods
422
- <div class="method">
423
- <div class="title">
424
- IF:callseq
425
- <a name="%aref%"></a><b>%callseq%</b>
426
- ENDIF:callseq
427
- IFNOT:callseq
428
- <a name="%aref%"></a><b>%name%</b>%params%
429
- ENDIF:callseq
430
- IF:codeurl
431
- [&nbsp;<a href="%codeurl%" target="SOURCE_CODE" onclick="javascript:openCode('%codeurl%'); return false;">source</a>&nbsp;]
432
- ENDIF:codeurl
433
- </div>
434
- IF:m_desc
435
- <div class="description">
436
- %m_desc%
437
- </div>
438
- ENDIF:m_desc
439
- IF:aka
440
- <div class="aka">
441
- This method is also aliased as
442
- START:aka
443
- <a href="%aref%">%name%</a>
444
- END:aka
445
- </div>
446
- ENDIF:aka
447
- IF:sourcecode
448
- <div class="sourcecode">
449
- <p class="source-link">[ <a href="javascript:toggleSource('%aref%_source')" id="l_%aref%_source">show source</a> ]</p>
450
- <div id="%aref%_source" class="dyn-source">
451
- <pre>
452
- %sourcecode%
453
- </pre>
454
- </div>
455
- </div>
456
- ENDIF:sourcecode
457
- </div>
458
- END:methods
459
- ENDIF:methods
460
- END:method_list
461
- ENDIF:method_list
462
- END:sections
463
- </div>
464
- HTML
465
-
466
- FOOTER = <<ENDFOOTER
467
- </body>
468
- </html>
469
- ENDFOOTER
470
-
471
- BODY = HEADER + <<ENDBODY
472
- !INCLUDE! <!-- banner header -->
473
-
474
- <div id="bodyContent">
475
- #{METHOD_LIST}
476
- </div>
477
-
478
- #{FOOTER}
479
- ENDBODY
480
-
481
- ########################## Source code ##########################
482
-
483
- SRC_PAGE = XHTML_PREAMBLE + <<HTML
484
- <html>
485
- <head><title>%title%</title>
486
- <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
487
- <style type="text/css">
488
- .ruby-comment { color: green; font-style: italic }
489
- .ruby-constant { color: #4433aa; font-weight: bold; }
490
- .ruby-identifier { color: #222222; }
491
- .ruby-ivar { color: #2233dd; }
492
- .ruby-keyword { color: #3333FF; font-weight: bold }
493
- .ruby-node { color: #777777; }
494
- .ruby-operator { color: #111111; }
495
- .ruby-regexp { color: #662222; }
496
- .ruby-value { color: #662222; font-style: italic }
497
- .kw { color: #3333FF; font-weight: bold }
498
- .cmt { color: green; font-style: italic }
499
- .str { color: #662222; font-style: italic }
500
- .re { color: #662222; }
501
- </style>
502
- </head>
503
- <body bgcolor="white">
504
- <pre>%code%</pre>
505
- </body>
506
- </html>
507
- HTML
508
-
509
- ########################## Index ################################
510
-
511
- FR_INDEX_BODY = <<HTML
512
- !INCLUDE!
513
- HTML
514
-
515
- FILE_INDEX = XHTML_PREAMBLE + <<HTML
516
- <html>
517
- <head>
518
- <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
519
- <title>Index</title>
520
- <style type="text/css">
521
- <!--
522
- body {
523
- background-color: #EEE;
524
- font-family: #{FONTS};
525
- color: #000;
526
- margin: 0px;
527
- }
528
- .banner {
529
- background: #005;
530
- color: #FFF;
531
- padding: 0.2em;
532
- font-size: small;
533
- font-weight: bold;
534
- text-align: center;
535
- }
536
- .entries {
537
- margin: 0.25em 1em 0 1em;
538
- font-size: x-small;
539
- }
540
- a {
541
- color: #00F;
542
- text-decoration: none;
543
- white-space: nowrap;
544
- }
545
- a:hover {
546
- color: #77F;
547
- text-decoration: underline;
548
- }
549
- -->
550
- </style>
551
- <base target="docwin" />
552
- </head>
553
- <body>
554
- <div class="banner">%list_title%</div>
555
- <div class="entries">
556
- START:entries
557
- <a href="%href%">%name%</a><br />
558
- END:entries
559
- </div>
560
- </body></html>
561
- HTML
562
-
563
- CLASS_INDEX = FILE_INDEX
564
- METHOD_INDEX = FILE_INDEX
565
-
566
- INDEX = XHTML_FRAMESET_PREAMBLE + <<HTML
567
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
568
- <head>
569
- <title>%title%</title>
570
- <meta http-equiv="Content-Type" content="text/html; charset=%charset%" />
571
- </head>
572
-
573
- <frameset cols="20%,*">
574
- <frameset rows="15%,35%,50%">
575
- <frame src="fr_file_index.html" title="Files" name="Files" />
576
- <frame src="fr_class_index.html" name="Classes" />
577
- <frame src="fr_method_index.html" name="Methods" />
578
- </frameset>
579
- <frame src="%initial_page%" name="docwin" />
580
- <noframes>
581
- <body bgcolor="white">
582
- Click <a href="html/index.html">here</a> for a non-frames
583
- version of this page.
584
- </body>
585
- </noframes>
586
- </frameset>
587
-
588
- </html>
589
- HTML
590
-
591
- end
592
- end
593
-