kwartz 3.1.2 → 3.2.0

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 (140) hide show
  1. data/CHANGES +444 -0
  2. data/README.txt +4 -1
  3. data/bin/kwartz +2 -2
  4. data/doc-api/classes/Kwartz.html +16 -7
  5. data/doc-api/classes/Kwartz/Assertion.html +6 -6
  6. data/doc-api/classes/Kwartz/AssertionError.html +6 -6
  7. data/doc-api/classes/Kwartz/AttrInfo.html +71 -61
  8. data/doc-api/classes/Kwartz/BaseError.html +12 -12
  9. data/doc-api/classes/Kwartz/BaseTranslator.html +104 -74
  10. data/doc-api/classes/Kwartz/CharacterType.html +24 -24
  11. data/doc-api/classes/Kwartz/CommandOptionError.html +7 -7
  12. data/doc-api/classes/Kwartz/CommandOptions.html +50 -50
  13. data/doc-api/classes/Kwartz/Config.html +5 -0
  14. data/doc-api/classes/Kwartz/ConvertError.html +12 -12
  15. data/doc-api/classes/Kwartz/Converter.html +31 -33
  16. data/doc-api/classes/Kwartz/CssStyleParser.html +207 -168
  17. data/doc-api/classes/Kwartz/Defun.html +32 -31
  18. data/doc-api/classes/Kwartz/{HandlerArgument.html → Directive.html} +27 -53
  19. data/doc-api/classes/Kwartz/ElementInfo.html +68 -53
  20. data/doc-api/classes/Kwartz/EperlExpressionParser.html +185 -0
  21. data/doc-api/classes/Kwartz/EperlHandler.html +65 -58
  22. data/doc-api/classes/Kwartz/EperlTranslator.html +14 -7
  23. data/doc-api/classes/Kwartz/ErubisTranslator.html +14 -7
  24. data/doc-api/classes/Kwartz/ErubyTranslator.html +14 -7
  25. data/doc-api/classes/Kwartz/ExpandStatement.html +20 -20
  26. data/doc-api/classes/Kwartz/Expander.html +358 -0
  27. data/doc-api/classes/Kwartz/Handler.html +287 -157
  28. data/doc-api/classes/Kwartz/{StatementHelper.html → HandlerHelper.html} +307 -112
  29. data/doc-api/classes/Kwartz/Helper/ActionViewHelper.html +23 -23
  30. data/doc-api/classes/Kwartz/Helper/RailsTemplate.html +96 -96
  31. data/doc-api/classes/Kwartz/JstlExpressionParser.html +181 -0
  32. data/doc-api/classes/Kwartz/JstlHandler.html +134 -126
  33. data/doc-api/classes/Kwartz/JstlTranslator.html +21 -14
  34. data/doc-api/classes/Kwartz/KwartzError.html +6 -6
  35. data/doc-api/classes/Kwartz/Main.html +4 -4
  36. data/doc-api/classes/Kwartz/NativeExpression.html +19 -19
  37. data/doc-api/classes/Kwartz/NativeStatement.html +24 -24
  38. data/doc-api/classes/Kwartz/Node.html +7 -7
  39. data/doc-api/classes/Kwartz/PIErubisTranslator.html +21 -14
  40. data/doc-api/classes/Kwartz/ParseError.html +6 -6
  41. data/doc-api/classes/Kwartz/PerlExpressionParser.html +185 -0
  42. data/doc-api/classes/Kwartz/PerlHandler.html +353 -0
  43. data/doc-api/classes/Kwartz/PerlTranslator.html +226 -0
  44. data/doc-api/classes/Kwartz/PhpExpressionParser.html +185 -0
  45. data/doc-api/classes/Kwartz/PhpHandler.html +63 -56
  46. data/doc-api/classes/Kwartz/PhpTranslator.html +21 -14
  47. data/doc-api/classes/Kwartz/PresentationLogicParser.html +126 -123
  48. data/doc-api/classes/Kwartz/PrintStatement.html +18 -18
  49. data/doc-api/classes/Kwartz/RailsHandler.html +84 -85
  50. data/doc-api/classes/Kwartz/RailsTranslator.html +13 -6
  51. data/doc-api/classes/Kwartz/RubyExpressionParser.html +180 -0
  52. data/doc-api/classes/Kwartz/RubyHandler.html +73 -69
  53. data/doc-api/classes/Kwartz/RubyStyleParser.html +86 -86
  54. data/doc-api/classes/Kwartz/RubyTranslator.html +28 -21
  55. data/doc-api/classes/Kwartz/Ruleset.html +622 -1
  56. data/doc-api/classes/Kwartz/StrutsTranslator.html +14 -14
  57. data/doc-api/classes/Kwartz/TagInfo.html +52 -27
  58. data/doc-api/classes/Kwartz/TextConverter.html +75 -37
  59. data/doc-api/classes/Kwartz/Translator.html +54 -53
  60. data/doc-api/classes/Kwartz/Util.html +25 -25
  61. data/doc-api/created.rid +1 -1
  62. data/doc-api/files/__/README_txt.html +7 -2
  63. data/doc-api/files/kwartz/assert_rb.html +2 -2
  64. data/doc-api/files/kwartz/binding/eperl_rb.html +2 -2
  65. data/doc-api/files/kwartz/binding/erubis_rb.html +2 -2
  66. data/doc-api/files/kwartz/binding/eruby_rb.html +2 -2
  67. data/doc-api/files/kwartz/binding/jstl_rb.html +2 -2
  68. data/doc-api/files/kwartz/binding/perl_rb.html +115 -0
  69. data/doc-api/files/kwartz/binding/php_rb.html +2 -2
  70. data/doc-api/files/kwartz/binding/pierubis_rb.html +2 -2
  71. data/doc-api/files/kwartz/binding/rails_rb.html +2 -2
  72. data/doc-api/files/kwartz/binding/ruby_rb.html +2 -2
  73. data/doc-api/files/kwartz/binding/struts_rb.html +2 -2
  74. data/doc-api/files/kwartz/config_rb.html +2 -2
  75. data/doc-api/files/kwartz/converter_rb.html +2 -2
  76. data/doc-api/files/kwartz/defun_rb.html +2 -2
  77. data/doc-api/files/kwartz/error_rb.html +2 -2
  78. data/doc-api/files/kwartz/helper/rails_rb.html +2 -2
  79. data/doc-api/files/kwartz/main_rb.html +3 -2
  80. data/doc-api/files/kwartz/node_rb.html +2 -2
  81. data/doc-api/files/kwartz/parser_rb.html +2 -2
  82. data/doc-api/files/kwartz/translator_rb.html +2 -2
  83. data/doc-api/files/kwartz/util/assert-text-equal_rb.html +2 -2
  84. data/doc-api/files/kwartz/util/testcase-helper_rb.html +2 -2
  85. data/doc-api/files/kwartz/util_rb.html +2 -2
  86. data/doc-api/files/kwartz_rb.html +2 -2
  87. data/doc-api/fr_class_index.html +10 -5
  88. data/doc-api/fr_file_index.html +1 -0
  89. data/doc-api/fr_method_index.html +268 -239
  90. data/doc/docstyle.css +9 -3
  91. data/doc/img/fig05.png +0 -0
  92. data/doc/introduction-to-kwartz.html +3040 -0
  93. data/doc/pattern-catalog.html +5 -3
  94. data/doc/reference.html +680 -26
  95. data/doc/users-guide.html +222 -67
  96. data/kwartz.gemspec +4 -4
  97. data/lib/kwartz.rb +3 -3
  98. data/lib/kwartz/assert.rb +2 -2
  99. data/lib/kwartz/binding/eperl.rb +71 -31
  100. data/lib/kwartz/binding/erubis.rb +3 -2
  101. data/lib/kwartz/binding/eruby.rb +3 -2
  102. data/lib/kwartz/binding/jstl.rb +66 -29
  103. data/lib/kwartz/binding/perl.rb +230 -0
  104. data/lib/kwartz/binding/php.rb +69 -29
  105. data/lib/kwartz/binding/pierubis.rb +3 -2
  106. data/lib/kwartz/binding/rails.rb +18 -18
  107. data/lib/kwartz/binding/ruby.rb +74 -42
  108. data/lib/kwartz/binding/struts.rb +22 -21
  109. data/lib/kwartz/config.rb +4 -4
  110. data/lib/kwartz/converter.rb +465 -345
  111. data/lib/kwartz/defun.rb +2 -2
  112. data/lib/kwartz/error.rb +2 -2
  113. data/lib/kwartz/helper/rails.rb +2 -2
  114. data/lib/kwartz/main.rb +5 -4
  115. data/lib/kwartz/node.rb +92 -144
  116. data/lib/kwartz/parser.rb +112 -103
  117. data/lib/kwartz/translator.rb +14 -6
  118. data/lib/kwartz/util.rb +2 -2
  119. data/lib/kwartz/util/assert-text-equal.rb +2 -2
  120. data/lib/kwartz/util/testcase-helper.rb +1 -1
  121. data/test/test-compile.rb +2 -2
  122. data/test/test-compile.yaml +81 -0
  123. data/test/test-converter.rb +4 -8
  124. data/test/test-converter.yaml +152 -3
  125. data/test/test-directives.rb +2 -2
  126. data/test/test-directives.yaml +222 -0
  127. data/test/test-main.rb +6 -4
  128. data/test/test-main.yaml +66 -1
  129. data/test/test-parser.rb +12 -3
  130. data/test/test-parser.yaml +64 -51
  131. data/test/test-rails.rb +2 -2
  132. data/test/test-ruleset.rb +2 -2
  133. data/test/test-ruleset.yaml +465 -4
  134. data/test/test.log +6 -0
  135. data/test/test.rb +2 -2
  136. metadata +116 -106
  137. data/ChangeLog +0 -156
  138. data/doc-api/classes/Kwartz/DocumentRuleset.html +0 -369
  139. data/doc-api/classes/Kwartz/ElementExpander.html +0 -325
  140. data/doc-api/classes/Kwartz/ElementRuleset.html +0 -612
data/CHANGES ADDED
@@ -0,0 +1,444 @@
1
+ .+document: ChangeLog
2
+ .?release: $Release: 3.2.0 $
3
+ .?updated: $Date$
4
+
5
+
6
+ $ Release 3.2.0 (2010-10-26)
7
+
8
+
9
+ [Enhancements]
10
+
11
+
12
+ * Ruby 1.9 support.
13
+
14
+
15
+ * Class selector and tag selector support.
16
+ --------------------
17
+ /* tag selector */
18
+ h1 {
19
+ Value: title;
20
+ }
21
+ /* class selector */
22
+ .list {
23
+ attrs: 'bgcolor' color;
24
+ }
25
+ --------------------
26
+
27
+
28
+ * Multi selector support
29
+ --------------------
30
+ /* OK - multi selector */
31
+ #foo, #bar, .baz {
32
+ value: item;
33
+ }
34
+ /* NG - compound selector is not supported */
35
+ #foo .baz { // parse error
36
+ value: item;
37
+ }
38
+ --------------------
39
+
40
+
41
+ * Attribute variable support. Attribute variable represents attribute
42
+ value of element. Its notation is '$(attr-name)'.
43
+
44
+ ex. form.html
45
+ --------------------
46
+ <form action="create">
47
+ Username: <input type="text" id="comment_username" size="20"><br>
48
+ Comment: <textarea id="comment_body" cols="40" rows="3"></textarea><br>
49
+ <input type="submit" id="mark:comment_submit" value="Send comment">
50
+ </form>
51
+ --------------------
52
+
53
+ ex. form.plogic
54
+ --------------------
55
+ form {
56
+ stag: start_form_tag :action=>'$(action)';
57
+ }
58
+ #comment_username {
59
+ elem: text_field 'comment', 'username', :size=>$(size);
60
+ }
61
+ #comment_body {
62
+ elem: text_area 'comment', 'body', :rows=>$(rows), :cols=>$(cols);
63
+ }
64
+ #comment_submit {
65
+ elem: submit_tag '$(value)';
66
+ }
67
+ --------------------
68
+
69
+ ex. compile
70
+ ====================
71
+ $ kwartz -p form.plogic form.html
72
+ <%= start_form_tag :action=>'create' %>
73
+ Username: <%= text_field 'comment', 'username', :size=>20 %><br>
74
+ Comment: <%= text_area 'comment', 'body', :rows=>3, :cols=>40 %><br>
75
+ <%= submit_tag 'Send comment' %>
76
+ </form>
77
+ ====================
78
+
79
+
80
+ * New property 'before:' and 'after:' are supported.
81
+ They mean prework and postwork of presentation logic respectively.
82
+
83
+ ex. example.html
84
+ --------------------
85
+ <!-- Groups -->
86
+ <p id="mark:groups">group name</p>
87
+
88
+ <!-- Members -->
89
+ <p id="mark:members">member name</p>
90
+ --------------------
91
+
92
+ ex. example.plogic
93
+ --------------------
94
+ #groups {
95
+ before: {
96
+ list = @groups
97
+ }
98
+ after: {
99
+ group_count = count
100
+ }
101
+ }
102
+ #members {
103
+ before: {
104
+ list = @members
105
+ }
106
+ after: {
107
+ member_count = count
108
+ }
109
+ }
110
+
111
+ /* common properties ('Value:' and 'logic:') */
112
+ #groups, #members {
113
+ Value: item;
114
+ logic: {
115
+ count = 0
116
+ for item in list
117
+ count += 1
118
+ _stag # start-tag
119
+ _cont # content
120
+ _etag # end-tag
121
+ end
122
+ }
123
+ }
124
+ --------------------
125
+
126
+ compile:
127
+ ====================
128
+ $ kwartz -p example.plogic example.html
129
+ <!-- Groups -->
130
+ <% list = @groups %>
131
+ <% count = 0 %>
132
+ <% for item in list %>
133
+ <% count += 1 %>
134
+ <p><%=h item %></p>
135
+ <% end %>
136
+ <% group_count = count %>
137
+
138
+ <!-- Members -->
139
+ <% list = @members %>
140
+ <% count = 0 %>
141
+ <% for item in list %>
142
+ <% count += 1 %>
143
+ <p><%=h item %></p>
144
+ <% end %>
145
+ <% member_count = count %>
146
+ ====================
147
+
148
+
149
+ * Selector '#DOCUMENT' now suppprts 'logic:' property.
150
+ This is convenient for Extract Element/Content Pattern.
151
+
152
+ ex. doc.html
153
+ --------------------
154
+ <html>
155
+ <body>
156
+ <h1 id="mark:title">...title...</h1>
157
+ <p>...</p>
158
+ <div id="mark:contents">
159
+ <table>
160
+ <tr id="mark:list">
161
+ <td>@{item}@</td>
162
+ </tr>
163
+ </table>
164
+ </div>
165
+ </body>
166
+ </html>
167
+ --------------------
168
+
169
+ ex. doc.plogic
170
+ --------------------
171
+ #DOCUMENT {
172
+ /* retrieve element of 'id="mark:title"'
173
+ and content of 'id="mark:contents"' */
174
+ logic: {
175
+ _element(title)
176
+ _content(contents)
177
+ }
178
+ }
179
+ #title {
180
+ Value: title;
181
+ }
182
+ #list {
183
+ logic: {
184
+ for item in list
185
+ _elem
186
+ end
187
+ }
188
+ }
189
+ --------------------
190
+
191
+ compile:
192
+ ====================
193
+ <h1><%=h title %></h1>
194
+ <table>
195
+ <% for item in list %>
196
+ <tr>
197
+ <td><%=h item %></td>
198
+ </tr>
199
+ <% end %>
200
+ </table>
201
+ ====================
202
+
203
+
204
+ * Embedded expression '@{...}@' and '@!{...}@' now represents both
205
+ language-independent expression and language-depend expression.
206
+ If expression matches the following pattern then it is recognized
207
+ as language-independent expression, else as language-depend
208
+ expression.
209
+ - variable
210
+ - object.property
211
+ - hash['key'], hash["key"], hash[:key]
212
+ - array[123], array[index]
213
+
214
+ ex. expr.html
215
+ --------------------
216
+ @!{variable}@
217
+ @!{object.property}@
218
+ @!{hash['key']}@
219
+ @!{hash[:key]}@
220
+ @!{array[0]}@
221
+ @!{array[index]}@
222
+ @!{$unknown->style}@
223
+ --------------------
224
+
225
+ compile:
226
+ ====================
227
+ $ kwarz -l eruby expr.html
228
+ <%= variable %>
229
+ <%= object.property %>
230
+ <%= hash['key'] %>
231
+ <%= hash["key"] %>
232
+ <%= hash[:key] %>
233
+ <%= array[0] %>
234
+ <%= array[index] %>
235
+ <%= $unknown->style %>
236
+ $ kwartz -l php expr.html
237
+ <?php echo $variable; ?>
238
+ <?php echo $object->property; ?>
239
+ <?php echo $hash['key']; ?>
240
+ <?php echo $hash["key"]; ?>
241
+ <?php echo $hash['key']; ?>
242
+ <?php echo $array[0]; ?>
243
+ <?php echo $array[$index]; ?>
244
+ <?php echo $unknown->style; ?>
245
+ ====================
246
+
247
+
248
+ * Directive 'value', 'elem', 'stag', 'cont', 'etag', and 'default'
249
+ can be language-independent if their argument is one of the
250
+ following format.
251
+ - variable
252
+ - object.property
253
+ - hash['key'], hash["key"], hash[:key]
254
+ - array[123], array[index]
255
+
256
+ ex. value.html
257
+ --------------------
258
+ <p id="Value:user">foo</p>
259
+ <p id="value:user.name">foo</p>
260
+ <p id="value:user['name']">foo</p>
261
+ <p id="value:user[:name]">foo</p>
262
+ <p id="value:user[0]">foo</p>
263
+ <p id="value:user[i]">foo</p>
264
+ --------------------
265
+
266
+ compile:
267
+ ====================
268
+ $ kwartz -l eruby value.html
269
+ <p><%=h user %></p>
270
+ <p><%= user.name %></p>
271
+ <p><%= user['name'] %></p>
272
+ <p><%= user[:name] %></p>
273
+ <p><%= user[0] %></p>
274
+ <p><%= user[i] %></p>
275
+ $ kwartz -l php value.html
276
+ <p><?php echo htmlspecialchars($user); ?></p>
277
+ <p><?php echo $user->name; ?></p>
278
+ <p><?php echo $user['name']; ?></p>
279
+ <p><?php echo $user['name']; ?></p>
280
+ <p><?php echo $user[0]; ?></p>
281
+ <p><?php echo $user[$i]; ?></p>
282
+ ====================
283
+
284
+
285
+ [Changes]
286
+
287
+ * Properties 'begin:' and 'end:' are obsolete (but still available
288
+ for compatibility). You should use 'before:' and 'after:'
289
+ instead of 'begin:' and 'end:'.
290
+
291
+
292
+
293
+ $ Release 3.1.2 (2006-10-22)
294
+
295
+ [enhancements from 3.1.1]
296
+
297
+ * Error reporting improved when using with Ruby on Rails.
298
+ 'kwartz/helper/rails.rb' now show template filename and
299
+ linenumber on where exception raised.
300
+ Notice that you have to read *.cache file instead of *.html
301
+ or *.plogic.
302
+
303
+
304
+
305
+ $ Release 3.1.1 (2006-09-29)
306
+
307
+ [changes from 3.1.0]
308
+
309
+ * Testdata and documents are integrated with Kwartz-php.
310
+
311
+
312
+
313
+ $ Release 3.1.0 (2006-09-24)
314
+
315
+ [enhancements from 3.0.0]
316
+
317
+ * Support of Ruby on Rails improved.
318
+ Kwartz now provides template class for RoR.
319
+ You don't have to convert *.html and *.plogic into *.rhtml.
320
+ Kwartz directly render HTML page from *.html and *.plogic.
321
+ See Kwartz Users' Guide for detail.
322
+ http://www.kuwata-lab.com/kwartz/kwartz3-users-guide.03.html
323
+
324
+ * New example 'example/rails2' added.
325
+ It is a good example to use Kwartz with Ruby on Rails.
326
+
327
+ * Command-line option '-l rails' support. This option extends
328
+ directives in *.html to support Rails helper methods.
329
+ See Kwartz Users' Guide for detail.
330
+ http://www.kuwata-lab.com/kwartz/kwartz3-users-guide.03.html#rails-helper-methods
331
+
332
+ * (experimental) Embedded pattern '@{...}@' and '@!{...}@' supported.
333
+ They are equivarent to '<%=h ... %>' and '<%= ... %>' of ERB,
334
+ but they are available for PHP and JSP as well as eRuby.
335
+
336
+ * New command line optin '-a defun' support. It generates
337
+ Ruby/PHP function to generate view page from *.html and *.plogic.
338
+
339
+ [changes from 3.0.0]
340
+
341
+ * Directive attribute name is changed from 'title' to 'kw:d'.
342
+ You can change it in configuration file ('kwartz/config.rb').
343
+
344
+
345
+
346
+ $ Release 3.0.0
347
+
348
+ [enhancements from 2.0.4]
349
+
350
+ * Presentation logic is described in target language.
351
+ It means that you can write presentatin logic in Ruby, PHP,
352
+ and so on.
353
+
354
+ * New properties 'elem:', 'stag:', 'cont:', 'etag:' are added.
355
+ They replaces element, start-tag, content, end-tag with
356
+ expression value. This is useful especially for Rails.
357
+
358
+ new.html : presentation data file
359
+ --------------------
360
+ <form id="mark:form">
361
+ Name: <input type="text" id="user_name">
362
+ <input type="submit" id="mark:submit">
363
+ </form>
364
+ --------------------
365
+
366
+ new.plogic : presentation logic file
367
+ --------------------
368
+ #form {
369
+ stag: start_form_tag :action=>'create';
370
+ }
371
+ #user_name {
372
+ elem: text_field 'user', 'name';
373
+ }
374
+ #submit {
375
+ elem: submit_tag 'Create';
376
+ }
377
+ --------------------
378
+
379
+ compile:
380
+ ====================
381
+ $ kwartz -p new.plogic new.html > new.rhtml
382
+ ====================
383
+
384
+ new.rhtml : compiled output script
385
+ --------------------
386
+ <%= start_form_tag :action=>'create' %>
387
+ Name: <%= text_field 'user', 'name' %>
388
+ <%= submit_tag 'Create' %>
389
+ </form>
390
+ --------------------
391
+
392
+ See 'examples/rails1' for more details about Rails and Kwartz.
393
+
394
+ * New keyword '_elem' added. '_elem' means element and
395
+ it is equivarent to '_stag' + '_cont' + '_etag'.
396
+
397
+ * New language 'rails' addes. It uses '<% -%>' instead of '<% %>'
398
+ as embedded pattern.
399
+
400
+ * New command-line option '-L layout' specifies layout file.
401
+ ====================
402
+ $ kwartz -p new.plogic -L layout.html new.html > new.rhtml
403
+ ## this is equivarent to the following:
404
+ ## $ kwartz -p new.plogic -i new.html layout.html > new.rhtml
405
+ ====================
406
+
407
+ * ...and more
408
+
409
+
410
+ [changes from 2.0.4]
411
+
412
+ * Property 'plogic:' is renamed to 'logic:'.
413
+
414
+ * '@stag', '@cont', '@etag' is changed to
415
+ '_stag', '_cont', '_etag' respectively.
416
+
417
+ * Directive format is changed.
418
+ See reference manual for details.
419
+
420
+ * Directive attribute is changed from 'kw:d' to 'title'.
421
+ (this may be change in the future.)
422
+
423
+ * Directive 'id="replace:xxx"' is renamed to
424
+ 'id="replace_element_with_element:xxx"' and
425
+ 'id="replace_element_with_content:xxx"'.
426
+
427
+ * Directive 'id="placeholder:xxx" is renamed to
428
+ 'id="relace_content_with_element:xxx"' and
429
+ 'id="relace_content_with_content:xxx"'.
430
+
431
+ * 'analyze' action is obsolete (because presentation logic
432
+ is described in Ruby, PHP, and so on).
433
+
434
+ * 'defun' action is currently not supported
435
+ (but is planned to be implemented in the future release).
436
+
437
+ * Velocity is not supported.
438
+
439
+ * Project name in RubyForge.org is changed from 'kwartz-ruby'
440
+ to 'Kwartz', and gem file is also changed.
441
+
442
+ * ...and more
443
+
444
+ .-document:
data/README.txt CHANGED
@@ -1,6 +1,6 @@
1
1
  = README
2
2
 
3
- release:: $Release: 3.1.2 $
3
+ release:: $Release: 3.2.0 $
4
4
  copyright:: copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
5
 
6
6
 
@@ -27,6 +27,9 @@ Else download kwartz-ruby_x.x.x.tar.bz2 and install with setup.rb.
27
27
  $ cd kwartz-ruby_x.x.x/
28
28
  $ sudo ruby setup.rb
29
29
 
30
+ Kwartz-ruby requires 'abstract.rb'. You can install it by RubyGems
31
+ or download from rubyforge.
32
+
30
33
 
31
34
  == Copyright
32
35