erubis-bmp 2.7.0.bmp

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 (78) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGES.txt +828 -0
  3. data/MIT-LICENSE +20 -0
  4. data/README.txt +10 -0
  5. data/benchmark/bench.rb +313 -0
  6. data/benchmark/bench_context.yaml +141 -0
  7. data/benchmark/mybench2.rb +266 -0
  8. data/benchmark/pibench.rb +163 -0
  9. data/benchmark/templates/_footer.html +4 -0
  10. data/benchmark/templates/_header.html +52 -0
  11. data/benchmark/templates/bench_erb.rhtml +29 -0
  12. data/benchmark/templates/bench_erubis.rhtml +29 -0
  13. data/benchmark/templates/bench_eruby.rhtml +29 -0
  14. data/bin/erubis +10 -0
  15. data/contrib/erubis-run.rb +132 -0
  16. data/doc/Rookbook.yaml +106 -0
  17. data/doc/docstyle.css +209 -0
  18. data/doc/users-guide.html +3551 -0
  19. data/doc/users-guide.txt +3631 -0
  20. data/examples/basic/Makefile +58 -0
  21. data/examples/basic/example.ec +42 -0
  22. data/examples/basic/example.ecpp +33 -0
  23. data/examples/basic/example.ejava +45 -0
  24. data/examples/basic/example.ejs +16 -0
  25. data/examples/basic/example.eperl +16 -0
  26. data/examples/basic/example.ephp +17 -0
  27. data/examples/basic/example.eruby +15 -0
  28. data/examples/basic/example.escheme +26 -0
  29. data/examples/pi-xhtml/ExamplePage.xhtml +80 -0
  30. data/examples/pi-xhtml/Makefile +17 -0
  31. data/examples/pi-xhtml/my/User.java +19 -0
  32. data/examples/pi-xhtml/my/Util.java +54 -0
  33. data/examples/pi/Makefile +54 -0
  34. data/examples/pi/example.ec +42 -0
  35. data/examples/pi/example.ejava +45 -0
  36. data/examples/pi/example.ejs +16 -0
  37. data/examples/pi/example.eperl +16 -0
  38. data/examples/pi/example.ephp +17 -0
  39. data/examples/pi/example.eruby +15 -0
  40. data/examples/pi/example.escheme +26 -0
  41. data/lib/erubis.rb +73 -0
  42. data/lib/erubis/context.rb +83 -0
  43. data/lib/erubis/converter.rb +357 -0
  44. data/lib/erubis/engine.rb +120 -0
  45. data/lib/erubis/engine/ec.rb +117 -0
  46. data/lib/erubis/engine/ecpp.rb +113 -0
  47. data/lib/erubis/engine/ejava.rb +110 -0
  48. data/lib/erubis/engine/ejavascript.rb +119 -0
  49. data/lib/erubis/engine/enhanced.rb +126 -0
  50. data/lib/erubis/engine/eperl.rb +95 -0
  51. data/lib/erubis/engine/ephp.rb +99 -0
  52. data/lib/erubis/engine/eruby.rb +125 -0
  53. data/lib/erubis/engine/escheme.rb +114 -0
  54. data/lib/erubis/engine/optimized.rb +127 -0
  55. data/lib/erubis/enhancer.rb +723 -0
  56. data/lib/erubis/error.rb +23 -0
  57. data/lib/erubis/evaluator.rb +88 -0
  58. data/lib/erubis/generator.rb +85 -0
  59. data/lib/erubis/helper.rb +47 -0
  60. data/lib/erubis/helpers/rails_form_helper.rb +197 -0
  61. data/lib/erubis/helpers/rails_helper.rb +353 -0
  62. data/lib/erubis/local-setting.rb +9 -0
  63. data/lib/erubis/main.rb +516 -0
  64. data/lib/erubis/preprocessing.rb +58 -0
  65. data/lib/erubis/tiny.rb +144 -0
  66. data/lib/erubis/util.rb +22 -0
  67. data/setup.rb +1331 -0
  68. data/test/Rookbook.yaml +42 -0
  69. data/test/assert-text-equal.rb +44 -0
  70. data/test/test-engines.rb +425 -0
  71. data/test/test-enhancers.rb +646 -0
  72. data/test/test-erubis.rb +887 -0
  73. data/test/test-index-cgi.rb +191 -0
  74. data/test/test-main.rb +752 -0
  75. data/test/test-users-guide.rb +73 -0
  76. data/test/test.rb +45 -0
  77. data/test/testutil.rb +111 -0
  78. metadata +121 -0
@@ -0,0 +1,42 @@
1
+ preparation*: |
2
+
3
+ def untabify(str, width=8)
4
+ list = str.split(/\t/)
5
+ last = list.pop
6
+ sb = ''
7
+ list.each do |s|
8
+ column = (n = s.rindex(?\n)) ? s.length - n - 1 : s.length
9
+ n = width - (column % width)
10
+ sb << s << (' ' * n)
11
+ end
12
+ sb << last
13
+ return sb
14
+ end
15
+
16
+
17
+ recipes:
18
+
19
+ - product: notext.txt
20
+ ingreds: [ test-notext.yaml, Rookbook.yaml ]
21
+ desc: create 'notext.txt' from 'test-notext.yaml'
22
+ method*: |
23
+ require 'yaml'
24
+ s = untabify(File.read(@ingred))
25
+ list = []
26
+ YAML.load_documents(s) { |ydoc| list << ydoc }
27
+ list.flatten!
28
+ entry = list.first
29
+ ydoc = {}
30
+ list.each do |hash|
31
+ %w[input output].each do |key|
32
+ hash[key].gsub!(/^\./, '') if hash.key?(key)
33
+ end
34
+ ydoc[hash['name']] = hash
35
+ end
36
+ text = entry['document']
37
+ require 'erubis'
38
+ eruby = Erubis::Eruby.new(text, :pattern=>'\[% %\]')
39
+ #p ydoc.keys
40
+ #puts eruby.src
41
+ result = eruby.result(binding())
42
+ File.open(@product, 'w') { |f| f.write(result) }
@@ -0,0 +1,44 @@
1
+ ###
2
+ ### $Release:$
3
+ ### $Copyright$
4
+ ###
5
+
6
+ require 'test/unit'
7
+ require 'tempfile'
8
+
9
+
10
+ module Test
11
+ module Unit
12
+ class TestCase
13
+
14
+ def assert_text_equal(expected, actual, message=nil, diffopt='-u', flag_cut=true)
15
+ if expected == actual
16
+ assert(true)
17
+ return
18
+ end
19
+ if expected[-1] != ?\n || actual[-1] != ?\n
20
+ expected += "\n"
21
+ actual += "\n"
22
+ end
23
+ begin
24
+ expfile = Tempfile.new(".expected.")
25
+ expfile.write(expected); expfile.flush()
26
+ actfile = Tempfile.new(".actual.")
27
+ actfile.write(actual); actfile.flush()
28
+ diff = `diff #{diffopt} #{expfile.path} #{actfile.path}`
29
+ ensure
30
+ expfile.close(true) if expfile
31
+ actfile.close(true) if actfile
32
+ end
33
+ # cut 1st & 2nd lines
34
+ message = (flag_cut ? diff.gsub(/\A.*\n.*\n/, '') : diff) unless message
35
+ #raise Test::Unit::AssertionFailedError.new(message)
36
+ assert_block(message) { false } # or assert(false, message)
37
+ end
38
+
39
+ alias assert_equal_with_diff assert_text_equal # for compatibility
40
+ alias assert_text_equals assert_text_equal # for typo
41
+
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,425 @@
1
+ ##
2
+ ## $Release:$
3
+ ## $Copyright$
4
+ ##
5
+
6
+ require "#{File.dirname(__FILE__)}/test.rb"
7
+
8
+ require 'erubis'
9
+ require 'erubis/engine/eruby'
10
+ require 'erubis/engine/ephp'
11
+ require 'erubis/engine/ec'
12
+ require 'erubis/engine/ecpp'
13
+ require 'erubis/engine/ejava'
14
+ require 'erubis/engine/escheme'
15
+ require 'erubis/engine/eperl'
16
+ require 'erubis/engine/ejavascript'
17
+
18
+
19
+ class EnginesTest < Test::Unit::TestCase
20
+
21
+ #load_yaml_documents(__FILE__)
22
+ testdata_list = load_yaml_datafile(__FILE__)
23
+ define_testmethods(testdata_list)
24
+
25
+ def _test()
26
+ klass = Erubis.const_get(@class)
27
+ engine = klass.new(@input, @options || {})
28
+ actual = engine.src
29
+ assert_text_equal(@expected, actual)
30
+ end
31
+
32
+
33
+ self.post_definition()
34
+
35
+ end
36
+
37
+ __END__
38
+ - name: ruby1
39
+ lang: ruby
40
+ class: Eruby
41
+ options:
42
+ input: |
43
+ <table>
44
+ <tbody>
45
+ <% i = 0
46
+ list.each_with_index do |item, i| %>
47
+ <tr>
48
+ <td><%= i+1 %></td>
49
+ <td><%== list %></td>
50
+ </tr>
51
+ <% end %>
52
+ </tbody>
53
+ </table>
54
+ <%=== i+1 %>
55
+ expected: |
56
+ _buf = ''; _buf << '<table>
57
+ <tbody>
58
+ '; i = 0
59
+ list.each_with_index do |item, i|
60
+ _buf << ' <tr>
61
+ <td>'; _buf << ( i+1 ).to_s; _buf << '</td>
62
+ <td>'; _buf << Erubis::XmlHelper.escape_xml( list ); _buf << '</td>
63
+ </tr>
64
+ '; end
65
+ _buf << ' </tbody>
66
+ </table>
67
+ '; $stderr.puts("*** debug: i+1=#{(i+1).inspect}"); _buf << '
68
+ ';
69
+ _buf.to_s
70
+ ##
71
+ - name: ruby2_options
72
+ lang: ruby
73
+ class: Eruby
74
+ options: { :bufvar: '@_out_buf' }
75
+ input: |
76
+ <table>
77
+ <% for item in @items %>
78
+ <tr>
79
+ <td><%= i+1 %></td>
80
+ <td><%== list %></td>
81
+ </tr>
82
+ <% end %>
83
+ </table>
84
+ expected: |
85
+ @_out_buf = ''; @_out_buf << '<table>
86
+ '; for item in @items
87
+ @_out_buf << ' <tr>
88
+ <td>'; @_out_buf << ( i+1 ).to_s; @_out_buf << '</td>
89
+ <td>'; @_out_buf << Erubis::XmlHelper.escape_xml( list ); @_out_buf << '</td>
90
+ </tr>
91
+ '; end
92
+ @_out_buf << '</table>
93
+ ';
94
+ @_out_buf.to_s
95
+ ##
96
+ - name: php1
97
+ lang: php
98
+ class: Ephp
99
+ options:
100
+ input: |
101
+ <table>
102
+ <tbody>
103
+ <%
104
+ $i = 0;
105
+ foreach ($list as $item) {
106
+ $i++;
107
+ %>
108
+ <tr>
109
+ <td><%= $i %></td>
110
+ <td><%== $item %></td>
111
+ </tr>
112
+ <%
113
+ }
114
+ %>
115
+ </tbody>
116
+ </table>
117
+ <%=== $i %>
118
+ expected: |
119
+ <table>
120
+ <tbody>
121
+ <?php
122
+ $i = 0;
123
+ foreach ($list as $item) {
124
+ $i++;
125
+ ?>
126
+ <tr>
127
+ <td><?php echo $i; ?></td>
128
+ <td><?php echo htmlspecialchars($item); ?></td>
129
+ </tr>
130
+ <?php
131
+ }
132
+ ?>
133
+ </tbody>
134
+ </table>
135
+ <?php error_log('*** debug: $i='.($i), 0); ?>
136
+ ##
137
+ - name: c1
138
+ lang: c
139
+ class: Ec
140
+ options: { :filename: foo.html, :indent: ' ' }
141
+ input: |4
142
+ <table>
143
+ <tbody>
144
+ <% for (i = 0; i < list; i++) { %>
145
+ <tr>
146
+ <td><%= "%d", i %></td>
147
+ <td><%== list[i] %></td>
148
+ </tr>
149
+ <% } %>
150
+ </tbody>
151
+ </table>
152
+ <%=== "%d", i %>
153
+ expected: |
154
+ #line 1 "foo.html"
155
+ fputs("<table>\n"
156
+ " <tbody>\n", stdout);
157
+ for (i = 0; i < list; i++) {
158
+ fputs(" <tr>\n"
159
+ " <td>", stdout); fprintf(stdout, "%d", i); fputs("</td>\n"
160
+ " <td>", stdout); escape(list[i], stdout); fputs("</td>\n"
161
+ " </tr>\n", stdout);
162
+ }
163
+ fputs(" </tbody>\n"
164
+ "</table>\n", stdout);
165
+ fprintf(stderr, "*** debug: i=" "%d", i); fputs("\n", stdout);
166
+ ##
167
+ - name: cpp1
168
+ lang: cpp
169
+ class: Ecpp
170
+ options: { :filename: foo.html, :indent: ' ' }
171
+ input: |4
172
+ <table>
173
+ <tbody>
174
+ <% for (i = 0; i < n; i++) { %>
175
+ <tr>
176
+ <td><%= i %></td>
177
+ <td><%== list[i] %></td>
178
+ </tr>
179
+ <% } %>
180
+ </tbody>
181
+ </table>
182
+ <%=== i %>
183
+ expected: |
184
+ #line 1 "foo.html"
185
+ _buf << "<table>\n"
186
+ " <tbody>\n";
187
+ for (i = 0; i < n; i++) {
188
+ _buf << " <tr>\n"
189
+ " <td>"; _buf << (i); _buf << "</td>\n"
190
+ " <td>"; escape(list[i]); _buf << "</td>\n"
191
+ " </tr>\n";
192
+ }
193
+ _buf << " </tbody>\n"
194
+ "</table>\n";
195
+ std::cerr << "*** debug: i=" << (i); _buf << "\n";
196
+ ##
197
+ - name: java1
198
+ lang: java
199
+ class: Ejava
200
+ options: { :buf: _buf, :bufclass: StringBuilder, :indent: ' ' }
201
+ input: |
202
+ <table>
203
+ <tbody>
204
+ <%
205
+ int i = 0;
206
+ for (Iterator it = list.iterator(); it.hasNext(); ) {
207
+ String s = (String)it.next();
208
+ i++;
209
+ %>
210
+ <tr class="<%= i%2==0 ? "even" : "odd" %>">
211
+ <td><%= i %></td>
212
+ <td><%== s %></td>
213
+ </tr>
214
+ <%
215
+ }
216
+ %>
217
+ <tbody>
218
+ </table>
219
+ <%=== i %>
220
+ expected: |4
221
+ StringBuilder _buf = new StringBuilder(); _buf.append("<table>\n"
222
+ + " <tbody>\n");
223
+
224
+ int i = 0;
225
+ for (Iterator it = list.iterator(); it.hasNext(); ) {
226
+ String s = (String)it.next();
227
+ i++;
228
+
229
+ _buf.append(" <tr class=\""); _buf.append(i%2==0 ? "even" : "odd"); _buf.append("\">\n"
230
+ + " <td>"); _buf.append(i); _buf.append("</td>\n"
231
+ + " <td>"); _buf.append(escape(s)); _buf.append("</td>\n"
232
+ + " </tr>\n");
233
+
234
+ }
235
+
236
+ _buf.append(" <tbody>\n"
237
+ + "</table>\n");
238
+ System.err.println("*** debug: i="+(i)); _buf.append("\n");
239
+ return _buf.toString();
240
+ ##
241
+ - name: scheme1
242
+ lang: scheme
243
+ class: Escheme
244
+ options:
245
+ input: &scheme1_input|
246
+ <% (let ((i 0)) %>
247
+ <table>
248
+ <tbody>
249
+ <%
250
+ (for-each
251
+ (lambda (item)
252
+ (set! i (+ i 1))
253
+ %>
254
+ <tr>
255
+ <td><%= i %></td>
256
+ <td><%== item %></td>
257
+ </tr>
258
+ <%
259
+ ); lambda end
260
+ list); for-each end
261
+ %>
262
+ </tbody>
263
+ </table>
264
+ <%=== i %>
265
+ <% ); let end %>
266
+ expected: |4
267
+ (let ((_buf '())) (define (_add x) (set! _buf (cons x _buf))) (let ((i 0))
268
+ (_add "<table>
269
+ <tbody>\n")
270
+
271
+ (for-each
272
+ (lambda (item)
273
+ (set! i (+ i 1))
274
+
275
+ (_add " <tr>
276
+ <td>")(_add i)(_add "</td>
277
+ <td>")(_add (escape item))(_add "</td>
278
+ </tr>\n")
279
+
280
+ ); lambda end
281
+ list); for-each end
282
+
283
+ (_add " </tbody>
284
+ </table>\n")
285
+ (display "*** debug: i=")(display i)(display "\n")(_add "\n")
286
+ ); let end
287
+ (reverse _buf))
288
+
289
+ ##
290
+ - name: scheme2
291
+ lang: scheme
292
+ class: Escheme
293
+ options: { :func: 'display' }
294
+ input: *scheme1_input
295
+ expected: |4
296
+ (let ((i 0))
297
+ (display "<table>
298
+ <tbody>\n")
299
+
300
+ (for-each
301
+ (lambda (item)
302
+ (set! i (+ i 1))
303
+
304
+ (display " <tr>
305
+ <td>")(display i)(display "</td>
306
+ <td>")(display (escape item))(display "</td>
307
+ </tr>\n")
308
+
309
+ ); lambda end
310
+ list); for-each end
311
+
312
+ (display " </tbody>
313
+ </table>\n")
314
+ (display "*** debug: i=")(display i)(display "\n")(display "\n")
315
+ ); let end
316
+ ##
317
+ - name: perl1
318
+ lang: perl
319
+ class: Eperl
320
+ options:
321
+ input: |
322
+ <%
323
+ my $user = 'Erubis';
324
+ my @list = ('<aaa>', 'b&b', '"ccc"');
325
+ %>
326
+ <p>Hello <%= $user %>!</p>
327
+ <table>
328
+ <tbody>
329
+ <% $i = 0; %>
330
+ <% for $item (@list) { %>
331
+ <tr bgcolor=<%= ++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
332
+ <td><%= $i %></td>
333
+ <td><%== $item %></td>
334
+ </tr>
335
+ <% } %>
336
+ </tbody>
337
+ </table>
338
+ <%=== $i %>
339
+ expected: |4
340
+ use HTML::Entities;
341
+ my $user = 'Erubis';
342
+ my @list = ('<aaa>', 'b&b', '"ccc"');
343
+
344
+ print('<p>Hello '); print($user); print('!</p>
345
+ <table>
346
+ <tbody>
347
+ '); $i = 0;
348
+ for $item (@list) {
349
+ print(' <tr bgcolor='); print(++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); print('">
350
+ <td>'); print($i); print('</td>
351
+ <td>'); print(encode_entities($item)); print('</td>
352
+ </tr>
353
+ '); }
354
+ print(' </tbody>
355
+ </table>
356
+ '); print('*** debug: $i=', $i, "\n");print('
357
+ ');
358
+ ##
359
+ - name: javascript1
360
+ lang: javascript
361
+ class: Ejavascript
362
+ options:
363
+ input: &javascript_input |
364
+ <%
365
+ var user = 'Erubis';
366
+ var list = ['<aaa>', 'b&b', '"ccc"'];
367
+ %>
368
+ <p>Hello <%= user %>!</p>
369
+ <table>
370
+ <tbody>
371
+ <% var i; %>
372
+ <% for (i = 0; i < list.length; i++) { %>
373
+ <tr bgcolor=<%= ++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF' %>">
374
+ <td><%= i %></td>
375
+ <td><%= list[i] %></td>
376
+ </tr>
377
+ <% } %>
378
+ </tbody>
379
+ </table>
380
+ <%=== i %>
381
+ expected: |4
382
+ var _buf = [];
383
+ var user = 'Erubis';
384
+ var list = ['<aaa>', 'b&b', '"ccc"'];
385
+
386
+ _buf.push("<p>Hello "); _buf.push(user); _buf.push("!</p>\n\
387
+ <table>\n\
388
+ <tbody>\n");
389
+ var i;
390
+ for (i = 0; i < list.length; i++) {
391
+ _buf.push(" <tr bgcolor="); _buf.push(++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
392
+ <td>"); _buf.push(i); _buf.push("</td>\n\
393
+ <td>"); _buf.push(list[i]); _buf.push("</td>\n\
394
+ </tr>\n");
395
+ }
396
+ _buf.push(" </tbody>\n\
397
+ </table>\n");
398
+ alert("*** debug: i="+(i)); _buf.push("\n");
399
+ document.write(_buf.join(""));
400
+ ##
401
+ - name: javascript2
402
+ lang: javascript
403
+ class: Ejavascript
404
+ options: { :docwrite: false }
405
+ input: *javascript_input
406
+ expected: |4
407
+ var _buf = [];
408
+ var user = 'Erubis';
409
+ var list = ['<aaa>', 'b&b', '"ccc"'];
410
+
411
+ _buf.push("<p>Hello "); _buf.push(user); _buf.push("!</p>\n\
412
+ <table>\n\
413
+ <tbody>\n");
414
+ var i;
415
+ for (i = 0; i < list.length; i++) {
416
+ _buf.push(" <tr bgcolor="); _buf.push(++i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); _buf.push("\">\n\
417
+ <td>"); _buf.push(i); _buf.push("</td>\n\
418
+ <td>"); _buf.push(list[i]); _buf.push("</td>\n\
419
+ </tr>\n");
420
+ }
421
+ _buf.push(" </tbody>\n\
422
+ </table>\n");
423
+ alert("*** debug: i="+(i)); _buf.push("\n");
424
+ _buf.join("");
425
+ ##