erubis-bmp 2.7.0.bmp

Sign up to get free protection for your applications and to get access to all the features.
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
+ ##