erubis 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (145) hide show
  1. data/ChangeLog +150 -2
  2. data/LGPL +504 -0
  3. data/README.txt +14 -8
  4. data/benchmark/erubybench.rb +1 -1
  5. data/benchmark/erubybench.rhtml +3 -3
  6. data/bin/erubis +1 -1
  7. data/bin/notext +154 -0
  8. data/contrib/erubis +1036 -374
  9. data/contrib/inline-require +5 -3
  10. data/doc-api/classes/Erubis.html +43 -1
  11. data/doc-api/classes/Erubis/ArrayBufferEnhancer.html +14 -14
  12. data/doc-api/classes/Erubis/ArrayEnhancer.html +14 -14
  13. data/doc-api/classes/Erubis/Basic.html +112 -0
  14. data/doc-api/classes/Erubis/Basic/Converter.html +318 -0
  15. data/doc-api/classes/Erubis/Basic/Engine.html +130 -0
  16. data/doc-api/classes/Erubis/BiPatternEnhancer.html +14 -14
  17. data/doc-api/classes/Erubis/CGenerator.html +386 -0
  18. data/doc-api/classes/Erubis/Context.html +31 -32
  19. data/doc-api/classes/Erubis/Converter.html +231 -0
  20. data/doc-api/classes/Erubis/Ec.html +9 -283
  21. data/doc-api/classes/Erubis/Ejava.html +9 -274
  22. data/doc-api/classes/Erubis/Ejavascript.html +9 -298
  23. data/doc-api/classes/Erubis/Engine.html +68 -508
  24. data/doc-api/classes/Erubis/Eperl.html +9 -259
  25. data/doc-api/classes/Erubis/Ephp.html +9 -239
  26. data/doc-api/classes/Erubis/ErubisError.html +2 -2
  27. data/doc-api/classes/Erubis/Eruby.html +4 -187
  28. data/doc-api/classes/Erubis/EscapeEnhancer.html +9 -11
  29. data/doc-api/classes/Erubis/Escheme.html +9 -272
  30. data/doc-api/classes/Erubis/Evaluator.html +212 -0
  31. data/doc-api/classes/Erubis/Generator.html +410 -0
  32. data/doc-api/classes/Erubis/HeaderFooterEnhancer.html +16 -16
  33. data/doc-api/classes/Erubis/Helper.html +112 -0
  34. data/doc-api/classes/Erubis/Helper/CachedRailsTemplate.html +198 -0
  35. data/doc-api/classes/Erubis/Helper/RailsTemplate.html +366 -0
  36. data/doc-api/classes/Erubis/JavaGenerator.html +359 -0
  37. data/doc-api/classes/Erubis/JavascriptGenerator.html +381 -0
  38. data/doc-api/classes/Erubis/Main.html +27 -25
  39. data/doc-api/classes/Erubis/NoCodeEnhancer.html +249 -0
  40. data/doc-api/classes/Erubis/NoCodeEruby.html +120 -0
  41. data/doc-api/classes/Erubis/NoTextEnhancer.html +8 -8
  42. data/doc-api/classes/Erubis/NotSupportedError.html +119 -0
  43. data/doc-api/classes/Erubis/OptimizedEruby.html +22 -304
  44. data/doc-api/classes/Erubis/OptimizedGenerator.html +439 -0
  45. data/doc-api/classes/Erubis/OptimizedXmlEruby.html +7 -7
  46. data/doc-api/classes/Erubis/PI.html +124 -0
  47. data/doc-api/classes/Erubis/PI/Converter.html +318 -0
  48. data/doc-api/classes/Erubis/PI/Ec.html +166 -0
  49. data/doc-api/classes/Erubis/PI/Ejava.html +166 -0
  50. data/doc-api/classes/Erubis/PI/Ejavascript.html +166 -0
  51. data/doc-api/classes/Erubis/PI/Engine.html +122 -0
  52. data/doc-api/classes/Erubis/PI/Eperl.html +166 -0
  53. data/doc-api/classes/Erubis/PI/Ephp.html +166 -0
  54. data/doc-api/classes/Erubis/PI/Eruby.html +155 -0
  55. data/doc-api/classes/Erubis/PI/Escheme.html +166 -0
  56. data/doc-api/classes/Erubis/PI/TinyEruby.html +305 -0
  57. data/doc-api/classes/Erubis/PercentLineEnhancer.html +7 -7
  58. data/doc-api/classes/Erubis/PerlGenerator.html +344 -0
  59. data/doc-api/classes/Erubis/PhpGenerator.html +350 -0
  60. data/doc-api/classes/Erubis/PrintEnabledEnhancer.html +24 -24
  61. data/doc-api/classes/Erubis/PrintOutEnhancer.html +35 -35
  62. data/doc-api/classes/Erubis/RubyEvaluator.html +190 -0
  63. data/doc-api/classes/Erubis/RubyGenerator.html +327 -0
  64. data/doc-api/classes/Erubis/SchemeGenerator.html +382 -0
  65. data/doc-api/classes/Erubis/SimplifyEnhancer.html +17 -13
  66. data/doc-api/classes/Erubis/StdoutEnhancer.html +14 -14
  67. data/doc-api/classes/Erubis/StringBufferEnhancer.html +14 -14
  68. data/doc-api/classes/Erubis/TinyEruby.html +45 -40
  69. data/doc-api/classes/Erubis/XmlHelper.html +14 -14
  70. data/doc-api/created.rid +1 -1
  71. data/doc-api/files/__/README_txt.html +27 -9
  72. data/doc-api/files/erubis/context_rb.html +107 -0
  73. data/doc-api/files/erubis/converter_rb.html +114 -0
  74. data/doc-api/files/erubis/engine/ec_rb.html +2 -2
  75. data/doc-api/files/erubis/engine/ejava_rb.html +2 -2
  76. data/doc-api/files/erubis/engine/ejavascript_rb.html +2 -2
  77. data/doc-api/files/erubis/engine/enhanced_rb.html +2 -2
  78. data/doc-api/files/erubis/engine/eperl_rb.html +2 -2
  79. data/doc-api/files/erubis/engine/ephp_rb.html +2 -2
  80. data/doc-api/files/erubis/engine/eruby_rb.html +3 -2
  81. data/doc-api/files/erubis/engine/escheme_rb.html +2 -2
  82. data/doc-api/files/erubis/engine/optimized_rb.html +2 -2
  83. data/doc-api/files/erubis/engine_rb.html +6 -3
  84. data/doc-api/files/erubis/enhancer_rb.html +2 -9
  85. data/doc-api/files/erubis/error_rb.html +107 -0
  86. data/doc-api/files/erubis/evaluator_rb.html +115 -0
  87. data/doc-api/files/erubis/generator_rb.html +114 -0
  88. data/doc-api/files/erubis/helper/rails_rb.html +140 -0
  89. data/doc-api/files/erubis/helper_rb.html +1 -1
  90. data/doc-api/files/erubis/local-setting_rb.html +1 -1
  91. data/doc-api/files/erubis/main_rb.html +2 -2
  92. data/doc-api/files/erubis/tiny_rb.html +2 -2
  93. data/doc-api/files/erubis_rb.html +2 -2
  94. data/doc-api/fr_class_index.html +32 -0
  95. data/doc-api/fr_file_index.html +6 -0
  96. data/doc-api/fr_method_index.html +178 -136
  97. data/doc/users-guide.html +538 -199
  98. data/examples/{Makefile → basic/Makefile} +11 -11
  99. data/examples/basic/example.ec +42 -0
  100. data/examples/{example.ejava → basic/example.ejava} +5 -1
  101. data/examples/{example.ejavascript → basic/example.ejs} +0 -0
  102. data/examples/{example.eperl → basic/example.eperl} +2 -2
  103. data/examples/{example.ephp → basic/example.ephp} +0 -0
  104. data/examples/{example.eruby → basic/example.eruby} +0 -0
  105. data/examples/{example.escheme → basic/example.escheme} +0 -0
  106. data/examples/pi/Makefile +54 -0
  107. data/examples/pi/example.ec +42 -0
  108. data/examples/pi/example.ejava +45 -0
  109. data/examples/pi/example.ejs +16 -0
  110. data/examples/pi/example.eperl +16 -0
  111. data/examples/pi/example.ephp +17 -0
  112. data/examples/pi/example.eruby +15 -0
  113. data/examples/pi/example.escheme +26 -0
  114. data/lib/erubis.rb +15 -8
  115. data/lib/erubis/context.rb +54 -0
  116. data/lib/erubis/converter.rb +307 -0
  117. data/lib/erubis/engine.rb +57 -227
  118. data/lib/erubis/engine/ec.rb +31 -20
  119. data/lib/erubis/engine/ejava.rb +33 -21
  120. data/lib/erubis/engine/ejavascript.rb +30 -18
  121. data/lib/erubis/engine/enhanced.rb +7 -2
  122. data/lib/erubis/engine/eperl.rb +33 -19
  123. data/lib/erubis/engine/ephp.rb +32 -14
  124. data/lib/erubis/engine/eruby.rb +34 -7
  125. data/lib/erubis/engine/escheme.rb +34 -15
  126. data/lib/erubis/engine/optimized.rb +25 -11
  127. data/lib/erubis/enhancer.rb +53 -19
  128. data/lib/erubis/error.rb +24 -0
  129. data/lib/erubis/evaluator.rb +71 -0
  130. data/lib/erubis/generator.rb +83 -0
  131. data/lib/erubis/helper.rb +1 -1
  132. data/lib/erubis/helper/rails.rb +159 -0
  133. data/lib/erubis/local-setting.rb +1 -1
  134. data/lib/erubis/main.rb +87 -46
  135. data/lib/erubis/tiny.rb +81 -7
  136. data/test/assert-text-equal.rb +1 -1
  137. data/test/test-engines.rb +8 -9
  138. data/test/test-erubis.rb +196 -18
  139. data/test/{test-bin.rb → test-main.rb} +123 -21
  140. data/test/test-notext.rb +27 -0
  141. data/test/test.rb +5 -3
  142. data/test/testutil.rb +25 -36
  143. metadata +75 -13
  144. data/COPYING +0 -340
  145. data/examples/example.ec +0 -24
@@ -1,6 +1,6 @@
1
1
  ##
2
- ## $Rev: 21 $
3
- ## $Release: 2.0.1 $
2
+ ## $Rev: 35 $
3
+ ## $Release: 2.1.0 $
4
4
  ## copyright(c) 2006 kuwata-lab all rights reserved.
5
5
  ##
6
6
 
@@ -17,16 +17,21 @@ module Erubis
17
17
  ##
18
18
  class TinyEruby
19
19
 
20
- def initialize(input)
21
- @src = compile(input)
20
+ def initialize(input=nil)
21
+ @src = convert(input) if input
22
22
  end
23
23
  attr_reader :src
24
24
 
25
- EMBEDDED_PATTERN = /(.*?)<%(=+|\#)?(.*?)-?%>/m
25
+ EMBEDDED_PATTERN = /<%(=+|\#)?(.*?)-?%>/m
26
26
 
27
- def compile(input)
27
+ def convert(input)
28
28
  src = "_buf = [];" # preamble
29
- input.scan(EMBEDDED_PATTERN) do |text, indicator, code|
29
+ pos = 0
30
+ input.scan(EMBEDDED_PATTERN) do |indicator, code|
31
+ match = Regexp.last_match
32
+ index = match.begin(0)
33
+ text = input[pos, index - pos]
34
+ pos = match.end(0)
30
35
  src << " _buf << '" << escape_text(text) << "';"
31
36
  if !indicator # <% %>
32
37
  src << code << ";"
@@ -62,4 +67,73 @@ module Erubis
62
67
 
63
68
  end
64
69
 
70
+
71
+
72
+ module PI
73
+ end
74
+
75
+ class PI::TinyEruby
76
+
77
+ def initialize(input=nil, options={})
78
+ @escape = options[:escape] || 'Erubis::XmlHelper.escape_xml'
79
+ @src = convert(input) if input
80
+ end
81
+
82
+ attr_reader :src
83
+
84
+ EMBEDDED_PATTERN = /(^[ \t]*)?<\?rb(\s.*?)\?>([ \t]*\r?\n)?|\$(!*)?\{(.*?)\}/
85
+
86
+ def convert(input)
87
+ src = "_buf = [];" # preamble
88
+ pos = 0
89
+ input.scan(EMBEDDED_PATTERN) do |lspace, stmtcode, rspace, indicator, exprcode|
90
+ match = Regexp.last_match
91
+ index = match.begin(0)
92
+ text = input[pos, index - pos]
93
+ pos = match.end(0)
94
+ if stmtcode # <?rb ... ?>
95
+ code = stmtcode
96
+ src << " _buf << '" << escape_text(text) << "';"
97
+ if lspace && rspace
98
+ src << "#{lspace}#{code}#{rspace}"
99
+ else
100
+ src << " _buf << '#{lspace}';" if lspace
101
+ src << code << ";"
102
+ src << " _buf << '#{rspace}';" if rspace
103
+ end
104
+ else # ${...}, $!{...}
105
+ code = exprcode
106
+ if indicator.nil? || indicator.empty?
107
+ src << " _buf << #{@escape}(" << code << ");"
108
+ elsif indicator == '!'
109
+ src << " _buf << (" << code << ").to_s;"
110
+ end
111
+ end
112
+ end
113
+ rest = $' || input
114
+ src << " _buf << '" << escape_text(rest) << "';"
115
+ src << "\n_buf.join\n" # postamble
116
+ return src
117
+ end
118
+
119
+ def escape_text(text)
120
+ return text.gsub!(/['\\]/, '\\\\\&') || text
121
+ end
122
+
123
+ def result(binding=TOPLEVEL_BINDING)
124
+ eval @src, binding
125
+ end
126
+
127
+ def evaluate(context=Object.new)
128
+ if context.is_a?(Hash)
129
+ obj = Object.new
130
+ context.each do |k, v| obj.instance_variable_set("@#{k}", v) end
131
+ context = obj
132
+ end
133
+ context.instance_eval @src
134
+ end
135
+
136
+ end
137
+
138
+
65
139
  end
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev: 6 $
3
- ### $Release: 2.0.1 $
3
+ ### $Release: 2.1.0 $
4
4
  ### copyright(c) 2006 kuwata-lab all rights reserved.
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ##
2
- ## $Rev: 21 $
3
- ## $Release: 2.0.1 $
2
+ ## $Rev: 40 $
3
+ ## $Release: 2.1.0 $
4
4
  ## copyright(c) 2006 kuwata-lab all rights reserved.
5
5
  ##
6
6
 
@@ -17,10 +17,9 @@ require 'erubis/engine/ejavascript'
17
17
 
18
18
 
19
19
  class EnginesTest < Test::Unit::TestCase
20
- extend TestEnhancer
21
20
 
22
21
  #load_yaml_documents(__FILE__)
23
- testdata_list = load_yaml_document(__FILE__)
22
+ testdata_list = load_yaml_datafile(__FILE__)
24
23
  define_testmethods(testdata_list)
25
24
 
26
25
  def _test()
@@ -76,7 +75,7 @@ __END__
76
75
  <%
77
76
  $i = 0;
78
77
  foreach ($list as $item) {
79
- $i++;
78
+ $i++;
80
79
  %>
81
80
  <tr>
82
81
  <td><%= $i %></td>
@@ -117,7 +116,7 @@ __END__
117
116
  <% for (i = 0; i < list; i++) { %>
118
117
  <tr>
119
118
  <td><%= "%d", i %></td>
120
- <td><%== "%s", list[i] %></td>
119
+ <td><%== list[i] %></td>
121
120
  </tr>
122
121
  <% } %>
123
122
  </tbody>
@@ -130,7 +129,7 @@ __END__
130
129
  for (i = 0; i < list; i++) {
131
130
  fputs(" <tr>\n"
132
131
  " <td>", stdout); fprintf(stdout, "%d", i); fputs("</td>\n"
133
- " <td>", stdout); fprintf(stdout, "%s", escape(list[i])); fputs("</td>\n"
132
+ " <td>", stdout); escape(list[i], stdout); fputs("</td>\n"
134
133
  " </tr>\n", stdout);
135
134
  }
136
135
  fputs(" </tbody>\n"
@@ -280,7 +279,7 @@ __END__
280
279
  </table>
281
280
  <%=== $i %>
282
281
  expected: |4
283
-
282
+ use HTML::Entities;
284
283
  my $user = 'Erubis';
285
284
  my @list = ('<aaa>', 'b&b', '"ccc"');
286
285
 
@@ -291,7 +290,7 @@ __END__
291
290
  for $item (@list) {
292
291
  print(' <tr bgcolor='); print(++$i % 2 == 0 ? '#FFCCCC' : '#CCCCFF'); print('">
293
292
  <td>'); print($i); print('</td>
294
- <td>'); print(escape($item)); print('</td>
293
+ <td>'); print(encode_entities($item)); print('</td>
295
294
  </tr>
296
295
  '); }
297
296
  print(' </tbody>
@@ -1,6 +1,6 @@
1
1
  ##
2
- ## $Rev: 21 $
3
- ## $Release: 2.0.1 $
2
+ ## $Rev: 37 $
3
+ ## $Release: 2.1.0 $
4
4
  ## copyright(c) 2006 kuwata-lab all rights reserved.
5
5
  ##
6
6
 
@@ -15,16 +15,21 @@ require 'erubis/tiny'
15
15
 
16
16
 
17
17
  class ErubisTest < Test::Unit::TestCase
18
- extend TestEnhancer
19
18
 
20
- testdata_list = load_yaml_document(__FILE__)
19
+ testdata_list = load_yaml_datafile(__FILE__)
21
20
  define_testmethods(testdata_list)
22
21
 
23
22
 
24
23
  def _test()
25
24
  @src.gsub!(/\^/, ' ')
26
25
  @output.gsub!(/\^/, ' ') if @output.is_a?(String)
27
- @klass = @class ? Erubis.const_get(@class) : Erubis::Eruby
26
+ if @class
27
+ k = Erubis
28
+ @class.split('::').each do |name| k = k.const_get(name) end
29
+ @klass = k
30
+ else
31
+ @klass = Erubis::Eruby
32
+ end
28
33
  @options ||= {}
29
34
  @chomp.each do |target|
30
35
  case target
@@ -53,14 +58,14 @@ class ErubisTest < Test::Unit::TestCase
53
58
  end
54
59
  assert_text_equal(@src, eruby.src)
55
60
 
56
- return if @testopt == 'skip_bufput'
61
+ return if @testopt == 'skip_output'
57
62
 
58
63
  list = ['<aaa>', 'b&b', '"ccc"']
59
64
  context = @testopt == 'context' ? Erubis::Context.new : {}
60
65
  context[:list] = list
61
66
 
62
67
  case @testopt
63
- when/\Aeval\(/
68
+ when /\Aeval\(/
64
69
  eval eruby.src
65
70
  actual = eval @testopt
66
71
  assert_text_equal(@output, actual)
@@ -109,12 +114,13 @@ __END__
109
114
  _buf << '</ul>
110
115
  ';
111
116
  _buf.join
112
- output: &basic1_bufput|
117
+ output: &basic1_output|
113
118
  <ul>
114
119
  <li><aaa></li>
115
120
  <li>b&b</li>
116
121
  <li>"ccc"</li>
117
122
  </ul>
123
+
118
124
  ##
119
125
  - name: basic2
120
126
  input: |
@@ -137,12 +143,13 @@ __END__
137
143
  _buf << '</ul>
138
144
  ';
139
145
  _buf.join
140
- output: *basic1_bufput
146
+ output: *basic1_output
141
147
  # <ul>
142
148
  # <li><aaa></li>
143
149
  # <li>b&b</li>
144
150
  # <li>"ccc"</li>
145
151
  # </ul>
152
+
146
153
  ##
147
154
  - name: basic3
148
155
  input: |
@@ -160,6 +167,7 @@ __END__
160
167
  output: |
161
168
  <ul><li><aaa></li><li>b&b</li><li>"ccc"</li>
162
169
  </ul>
170
+
163
171
  ##
164
172
  - name: context1
165
173
  testopt: context
@@ -177,7 +185,8 @@ __END__
177
185
  _buf << '</ul>
178
186
  ';
179
187
  _buf.join
180
- output: *basic1_bufput
188
+ output: *basic1_output
189
+
181
190
  ##
182
191
  - name: ignore1
183
192
  input: |
@@ -210,6 +219,7 @@ __END__
210
219
  <li> : b&b </li>
211
220
  <li> : "ccc" </li>
212
221
  </ul>
222
+
213
223
  ##
214
224
  - name: quotation1
215
225
  desc: single quotation and backslash
@@ -225,6 +235,7 @@ __END__
225
235
  ';
226
236
  _buf.join
227
237
  output: *quotation1_input
238
+
228
239
  ##
229
240
  - name: pattern1
230
241
  options:
@@ -243,12 +254,13 @@ __END__
243
254
  _buf << '</ul>
244
255
  ';
245
256
  _buf.join
246
- output: *basic1_bufput
257
+ output: *basic1_output
247
258
  # <ul>
248
259
  # <li><aaa></li>
249
260
  # <li>b&b</li>
250
261
  # <li>"ccc"</li>
251
262
  # </ul>
263
+
252
264
  ##
253
265
  - name: pattern2
254
266
  options:
@@ -267,12 +279,13 @@ __END__
267
279
  _buf << '</ul>
268
280
  ';
269
281
  _buf.join
270
- output: *basic1_bufput
282
+ output: *basic1_output
271
283
  # <ul>
272
284
  # <li><aaa></li>
273
285
  # <li>b&b</li>
274
286
  # <li>"ccc"</li>
275
287
  # </ul>
288
+
276
289
  ##
277
290
  - name: trim1
278
291
  options:
@@ -301,9 +314,10 @@ __END__
301
314
  <li>"ccc"</li>
302
315
  ^
303
316
  </ul>
317
+
304
318
  ##
305
319
  - name: bodyonly1
306
- testopt: skip_bufput
320
+ testopt: skip_output
307
321
  options: { :preamble: no, :postamble: no }
308
322
  input: *basic1_input
309
323
  src: |4
@@ -315,6 +329,7 @@ __END__
315
329
  ';
316
330
  chomp: [src]
317
331
  expected: null
332
+
318
333
  ##
319
334
  - name: loadfile1
320
335
  testopt: load_file
@@ -344,6 +359,7 @@ __END__
344
359
  output:
345
360
  "<ul>\n <li><aaa></li>\n <li>b&b</li>\n <li>\"ccc\"</li>\n</ul>\n"
346
361
  # "<ul>\r\n <li><aaa></li>\r\n <li>b&b</li>\r\n <li>\"ccc\"</li>\r\n</ul>\r\n"
362
+
347
363
  ##
348
364
  - name: nomatch1
349
365
  desc: bug
@@ -358,6 +374,24 @@ __END__
358
374
  ';
359
375
  _buf.join
360
376
  output: *nomatch1
377
+
378
+ ##
379
+ - name: escape1
380
+ options: { :escape: true }
381
+ input: |
382
+ <% str = '<>&"' %>
383
+ <%= str %>
384
+ <%== str %>
385
+ src: |
386
+ _buf = []; str = '<>&"'
387
+ _buf << Erubis::XmlHelper.escape_xml( str ); _buf << '
388
+ '; _buf << ( str ).to_s; _buf << '
389
+ ';
390
+ _buf.join
391
+ output: |
392
+ &lt;&gt;&amp;&quot;
393
+ <>&"
394
+
361
395
  ##
362
396
  - name: xml1
363
397
  class: XmlEruby
@@ -386,10 +420,11 @@ __END__
386
420
  &quot;ccc&quot;
387
421
  "ccc"
388
422
  </pre>
423
+
389
424
  ##
390
425
  - name: xml2
391
426
  class: XmlEruby
392
- testopt: skip_bufput
427
+ testopt: skip_output
393
428
  input: |
394
429
  <% for item in list %>
395
430
  <%= item["var#{n}"] %>
@@ -406,6 +441,7 @@ __END__
406
441
  '; end
407
442
  _buf.join
408
443
  output: |
444
+
409
445
  ##
410
446
  - name: printout1
411
447
  class: PrintOutEruby
@@ -418,7 +454,8 @@ __END__
418
454
  '; end
419
455
  print '</ul>
420
456
  ';
421
- output: *basic1_bufput
457
+ output: *basic1_output
458
+
422
459
  ##
423
460
  - name: printenabled1
424
461
  class: PrintEnabledEruby
@@ -436,12 +473,13 @@ __END__
436
473
  _buf << '</ul>
437
474
  ';
438
475
  _buf.join
439
- output: *basic1_bufput
476
+ output: *basic1_output
440
477
  # <ul>
441
478
  # <li><aaa></li>
442
479
  # <li>b&b</li>
443
480
  # <li>"ccc"</li>
444
481
  # </ul>
482
+
445
483
  ##
446
484
  - name: stdout1
447
485
  class: StdoutEruby
@@ -460,12 +498,13 @@ __END__
460
498
  _buf << '</ul>
461
499
  ';
462
500
  ''
463
- output: *basic1_bufput
501
+ output: *basic1_output
464
502
  # <ul>
465
503
  # <li><aaa></li>
466
504
  # <li>b&b</li>
467
505
  # <li>"ccc"</li>
468
506
  # </ul>
507
+
469
508
  ##
470
509
  - name: array1
471
510
  class: ArrayEruby
@@ -495,6 +534,7 @@ __END__
495
534
  - "\"ccc\""
496
535
  - "</li>\n"
497
536
  - "</ul>\n"
537
+
498
538
  ##
499
539
  - name: stringbuffer1
500
540
  class: StringBufferEruby
@@ -512,12 +552,13 @@ __END__
512
552
  _buf << '</ul>
513
553
  ';
514
554
  _buf
515
- output: *basic1_bufput
555
+ output: *basic1_output
516
556
  # <ul>
517
557
  # <li><aaa></li>
518
558
  # <li>b&b</li>
519
559
  # <li>"ccc"</li>
520
560
  # </ul>
561
+
521
562
  ##
522
563
  - name: notext1
523
564
  class: NoTextEruby
@@ -530,6 +571,20 @@ __END__
530
571
 
531
572
  _buf.join
532
573
  output: '<aaa>b&b"ccc"'
574
+
575
+ ##
576
+ - name: nocode1
577
+ class: NoCodeEruby
578
+ testopt: skip_output
579
+ input: *basic1_input
580
+ src: |
581
+ <ul>
582
+
583
+ <li></li>
584
+
585
+ </ul>
586
+ output:
587
+
533
588
  ##
534
589
  - name: simplified
535
590
  class: SimplifiedEruby
@@ -567,6 +622,7 @@ __END__
567
622
  </li>
568
623
  ^
569
624
  </ul>
625
+
570
626
  ##
571
627
  - name: bipattern1
572
628
  class: BiPatternEruby
@@ -589,6 +645,7 @@ __END__
589
645
  b&b = b&amp;b
590
646
  "ccc" % &quot;ccc&quot;
591
647
  "ccc" = &quot;ccc&quot;
648
+
592
649
  ##
593
650
  - name: bipattern2
594
651
  class: BiPatternEruby
@@ -611,6 +668,7 @@ __END__
611
668
  b&b = b&amp;b
612
669
  "ccc" % &quot;ccc&quot;
613
670
  "ccc" = &quot;ccc&quot;
671
+
614
672
  ##
615
673
  - name: percentline1
616
674
  class: PercentLineEruby
@@ -662,6 +720,7 @@ __END__
662
720
  % double percent
663
721
  % spaced percent
664
722
  </pre>
723
+
665
724
  ##
666
725
  - name: headerfooter1
667
726
  class: HeaderFooterEruby
@@ -695,6 +754,7 @@ __END__
695
754
  <li>b&amp;b</li>
696
755
  <li>&quot;ccc&quot;</li>
697
756
  </ol>
757
+
698
758
  ##
699
759
  - name: optimized1
700
760
  class: OptimizedEruby
@@ -736,6 +796,7 @@ __END__
736
796
  </tr>
737
797
  </table>
738
798
  <ul><li><aaa></li><li>b&b</li><li>"ccc"</li></ul>
799
+
739
800
  ##
740
801
  - name: optimized2
741
802
  class: OptimizedXmlEruby
@@ -777,6 +838,7 @@ __END__
777
838
  </tr>
778
839
  </table>
779
840
  <ul><li>&lt;aaa&gt;</li><li>b&amp;b</li><li>&quot;ccc&quot;</li></ul>
841
+
780
842
  ##
781
843
  - name: optimized3
782
844
  desc: bug
@@ -798,6 +860,7 @@ __END__
798
860
  <aaa>
799
861
  b&b
800
862
  "ccc"
863
+
801
864
  ##
802
865
  - name: optimized4
803
866
  desc: single quotation and backslash
@@ -813,6 +876,7 @@ __END__
813
876
  ';
814
877
  _buf
815
878
  output: *optimized4_input
879
+
816
880
  ##
817
881
  - name: tiny1
818
882
  class: TinyEruby
@@ -841,6 +905,7 @@ __END__
841
905
  <li>"ccc"</li>
842
906
  ^
843
907
  </ul>
908
+
844
909
  ##
845
910
  - name: tiny2
846
911
  class: TinyEruby
@@ -869,4 +934,117 @@ __END__
869
934
  <li>"ccc"</li>
870
935
  ^
871
936
  </ul>
937
+
938
+ ##
939
+ - name: pi1
940
+ class: PI::Eruby
941
+ testopt: evaluate
942
+ input: &input_pi1|
943
+ <ul>
944
+ <?rb for item in @list ?>
945
+ <li>@{item}@ / @!{item}@</li>
946
+ <li><%= item %> / <%== item %></li>
947
+ <?rb end ?>
948
+ </ul>
949
+ src: &src_pi1|
950
+ _buf = []; _buf << '<ul>
951
+ '; for item in @list
952
+ _buf << ' <li>'; _buf << Erubis::XmlHelper.escape_xml(item); _buf << ' / '; _buf << (item).to_s; _buf << '</li>
953
+ <li>'; _buf << ( item ).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << '</li>
954
+ '; end
955
+ _buf << '</ul>
956
+ ';
957
+ _buf.join
958
+ output: &output_pi1|
959
+ <ul>
960
+ <li>&lt;aaa&gt; / <aaa></li>
961
+ <li><aaa> / &lt;aaa&gt;</li>
962
+ <li>b&amp;b / b&b</li>
963
+ <li>b&b / b&amp;b</li>
964
+ <li>&quot;ccc&quot; / "ccc"</li>
965
+ <li>"ccc" / &quot;ccc&quot;</li>
966
+ </ul>
967
+
872
968
  ##
969
+ - name: pi2
970
+ class: PI::Eruby
971
+ options: { :escape: false }
972
+ testopt: evaluate
973
+ input: *input_pi1
974
+ src: |
975
+ _buf = []; _buf << '<ul>
976
+ '; for item in @list
977
+ _buf << ' <li>'; _buf << (item).to_s; _buf << ' / '; _buf << Erubis::XmlHelper.escape_xml(item); _buf << '</li>
978
+ <li>'; _buf << Erubis::XmlHelper.escape_xml( item ); _buf << ' / '; _buf << ( item ).to_s; _buf << '</li>
979
+ '; end
980
+ _buf << '</ul>
981
+ ';
982
+ _buf.join
983
+ output: |
984
+ <ul>
985
+ <li><aaa> / &lt;aaa&gt;</li>
986
+ <li>&lt;aaa&gt; / <aaa></li>
987
+ <li>b&b / b&amp;b</li>
988
+ <li>b&amp;b / b&b</li>
989
+ <li>"ccc" / &quot;ccc&quot;</li>
990
+ <li>&quot;ccc&quot; / "ccc"</li>
991
+ </ul>
992
+
993
+ ##
994
+ - name: pi3
995
+ class: PI::Eruby
996
+ options: { :pi: hoge, :embchar: '$' }
997
+ testopt: evaluate
998
+ input: |
999
+ <ul>
1000
+ <?hoge for item in @list ?>
1001
+ <li>${item}$ / $!{item}$</li>
1002
+ <li><%= item %> / <%== item %></li>
1003
+ <?hoge end ?>
1004
+ </ul>
1005
+ src: *src_pi1
1006
+ output: *output_pi1
1007
+
1008
+ - name: pi4
1009
+ class: PI::Eruby
1010
+ testopt: evaluate
1011
+ input: |
1012
+ <?rb-header
1013
+ def show(list)
1014
+ ?>
1015
+ <ul>
1016
+ <?rb for item in list ?>
1017
+ <?rb-value item ?>
1018
+ <?rb end ?>
1019
+ <?rb-comment
1020
+ # comment
1021
+ # comment
1022
+ ?>
1023
+ </ul>
1024
+ <?rb-footer
1025
+ end
1026
+ show(@list) ?>
1027
+
1028
+ src: |4
1029
+
1030
+ def show(list)
1031
+
1032
+ _buf = []; _buf << '<ul>
1033
+ '; for item in list
1034
+ _buf << ( item
1035
+ ).to_s; end
1036
+
1037
+
1038
+
1039
+
1040
+ _buf << '</ul>
1041
+ ';
1042
+ _buf.join
1043
+
1044
+ end
1045
+ show(@list)
1046
+
1047
+ output: |
1048
+ <ul>
1049
+ <aaa>b&b"ccc"</ul>
1050
+