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
@@ -1,6 +1,6 @@
1
1
  ####
2
- #### $Rev: 128 $
3
- #### $Release: 3.1.2 $
2
+ #### $Rev$
3
+ #### $Release: 3.2.0 $
4
4
  #### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
5
  ####
6
6
 
@@ -152,15 +152,16 @@ module Kwartz
152
152
 
153
153
  def parse_embedded_expr(text)
154
154
  pos = 0
155
- text.scan(/@(!*)\{(.*?)\}@/) do |indicator, expr_code|
155
+ text.scan(/@(!*)\{(.*?)\}@/) do |indicator, expr_str|
156
156
  m = Regexp.last_match
157
157
  s = text[pos, m.begin(0) - pos]
158
158
  pos = m.end(0)
159
159
  translate_string(s) unless s.empty?
160
+ expr_str = parse_expr_str!(expr_str)
160
161
  case indicator
161
- when nil, '' ; add_escaped_expr(expr_code)
162
- when '!' ; add_plain_expr(expr_code)
163
- when '!!' ; add_debug_expr(expr_code)
162
+ when nil, '' ; add_escaped_expr(expr_str)
163
+ when '!' ; add_plain_expr(expr_str)
164
+ when '!!' ; add_debug_expr(expr_str)
164
165
  else ; # do nothing
165
166
  end
166
167
  end
@@ -169,6 +170,13 @@ module Kwartz
169
170
  end
170
171
 
171
172
 
173
+ ## (abstract) convert expression to native expression string.
174
+ ## ex. 'item.name' => '$item->name', '$item->name' => '$item->name'
175
+ def parse_expr_str!(expr_str)
176
+ not_implemented
177
+ end
178
+
179
+
172
180
  def add_plain_expr(expr_code)
173
181
  @sb << @expr_l << expr_code << @expr_r # ex. <%= expr_code %>
174
182
  end
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 126 $
3
- ### $Release: 3.1.2 $
2
+ ### $Rev$
3
+ ### $Release: 3.2.0 $
4
4
  ### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 117 $
3
- ### $Release: 3.1.2 $
2
+ ### $Rev$
3
+ ### $Release: 3.2.0 $
4
4
  ### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
2
  ### $Rev$
3
- ### $Release: 3.1.2 $
3
+ ### $Release: 3.2.0 $
4
4
  ### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
5
  ###
6
6
 
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 128 $
3
- ### $Release: 3.1.2 $
2
+ ### $Rev$
3
+ ### $Release: 3.2.0 $
4
4
  ### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
5
  ###
6
6
 
@@ -306,3 +306,84 @@
306
306
  eperl: |
307
307
  <a href="mailto:<?= $email !>"><?= encode_entities($name) !></a>
308
308
  <a href="mailto:<?= $email !>"><?= encode_entities($name) !></a>
309
+
310
+ ###
311
+ - name: embedded_expr2
312
+ desc: common expression string
313
+ pdata: |
314
+ @{variable}@
315
+ @{object.property}@
316
+ @{hash['key']}@
317
+ @{hash["key"]}@
318
+ @{hash[:key]}@
319
+ @{array[0]}@
320
+ @{array[index]}@
321
+ @{$unknown->style}@
322
+ plogic: |
323
+ expected*:
324
+ ruby: |
325
+ _buf = ""; _buf << ERB::Util.h(variable); _buf << "\n";
326
+ _buf << ERB::Util.h(object.property); _buf << "\n";
327
+ _buf << ERB::Util.h(hash['key']); _buf << "\n";
328
+ _buf << ERB::Util.h(hash["key"]); _buf << "\n";
329
+ _buf << ERB::Util.h(hash[:key]); _buf << "\n";
330
+ _buf << ERB::Util.h(array[0]); _buf << "\n";
331
+ _buf << ERB::Util.h(array[index]); _buf << "\n";
332
+ _buf << ERB::Util.h($unknown->style); _buf << "\n";
333
+ ; _buf
334
+ eruby: |
335
+ <%=h variable %>
336
+ <%=h object.property %>
337
+ <%=h hash['key'] %>
338
+ <%=h hash["key"] %>
339
+ <%=h hash[:key] %>
340
+ <%=h array[0] %>
341
+ <%=h array[index] %>
342
+ <%=h $unknown->style %>
343
+ erubis: |
344
+ <%== variable %>
345
+ <%== object.property %>
346
+ <%== hash['key'] %>
347
+ <%== hash["key"] %>
348
+ <%== hash[:key] %>
349
+ <%== array[0] %>
350
+ <%== array[index] %>
351
+ <%== $unknown->style %>
352
+ pierubis: |
353
+ @{variable}@
354
+ @{object.property}@
355
+ @{hash['key']}@
356
+ @{hash["key"]}@
357
+ @{hash[:key]}@
358
+ @{array[0]}@
359
+ @{array[index]}@
360
+ @{$unknown->style}@
361
+ php: |
362
+ <?php echo htmlspecialchars($variable); ?>
363
+ <?php echo htmlspecialchars($object->property); ?>
364
+ <?php echo htmlspecialchars($hash['key']); ?>
365
+ <?php echo htmlspecialchars($hash["key"]); ?>
366
+ <?php echo htmlspecialchars($hash['key']); ?>
367
+ <?php echo htmlspecialchars($array[0]); ?>
368
+ <?php echo htmlspecialchars($array[$index]); ?>
369
+ <?php echo htmlspecialchars($unknown->style); ?>
370
+ jstl: |
371
+ <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
372
+ <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
373
+ ${variable}
374
+ ${object.property}
375
+ ${hash['key']}
376
+ ${hash["key"]}
377
+ ${hash['key']}
378
+ ${array[0]}
379
+ ${array[index]}
380
+ ${$unknown->style}
381
+ eperl: |
382
+ <?= encode_entities($variable) !>
383
+ <?= encode_entities($object->{property}) !>
384
+ <?= encode_entities($hash{'key'}) !>
385
+ <?= encode_entities($hash{"key"}) !>
386
+ <?= encode_entities($hash{'key'}) !>
387
+ <?= encode_entities($array[0]) !>
388
+ <?= encode_entities($array[$index]) !>
389
+ <?= encode_entities($unknown->style) !>
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 141 $
3
- ### $Release: 3.1.2 $
2
+ ### $Rev$
3
+ ### $Release: 3.2.0 $
4
4
  ### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
5
  ###
6
6
 
@@ -18,12 +18,8 @@ class ConverterTest < Test::Unit::TestCase
18
18
 
19
19
 
20
20
  def _test
21
- (@properties ||= {}).each do |key, val|
22
- if key.is_a?(String)
23
- key = key.intern
24
- @properties.delete(key)
25
- @properties[key] = val
26
- end
21
+ (@properties ||= {}).keys.each do |key|
22
+ @properties[key.intern] = @properties.delete(key) if key.is_a?(String)
27
23
  end
28
24
  parser = Kwartz::PresentationLogicParser.get_class('css').new
29
25
  ruleset_list = parser.parse(@plogic.to_s)
@@ -118,8 +118,8 @@
118
118
  # --------------------------------------------------------------------------------
119
119
 
120
120
  ###
121
- - name: convert11
122
- desc: pdata and plogic
121
+ - name: selector1
122
+ desc: selectr - marking
123
123
  pdata: |
124
124
  <ul id="mark:list">
125
125
  <li id="mark:item">foo</li>
@@ -148,7 +148,105 @@
148
148
 
149
149
 
150
150
  ###
151
- - name: convert12
151
+ - name: selector2
152
+ desc: selectr - class name
153
+ pdata: |
154
+ <ul class="list">
155
+ <li class="item">foo</li>
156
+ </ul>
157
+ plogic: |
158
+ .list {
159
+ logic: {
160
+ _stag;
161
+ foreach (item in list) {
162
+ _cont;
163
+ }
164
+ _etag;
165
+ }
166
+ }
167
+ .item {
168
+ value: item;
169
+ }
170
+ expected: |
171
+ print("<ul class=\"list\">\n")
172
+ <% foreach (item in list) {%>
173
+ print(" <li class=\"item\">")
174
+ print(<%=item%>)
175
+ print("</li>\n")
176
+ <% }%>
177
+ print("</ul>\n")
178
+
179
+
180
+ ###
181
+ - name: selector3
182
+ desc: selectr - tag name
183
+ pdata: |
184
+ <ul>
185
+ <html:li>foo</html:li>
186
+ </ul>
187
+ plogic: |
188
+ ul {
189
+ logic: {
190
+ _stag;
191
+ foreach (item in list) {
192
+ _cont;
193
+ }
194
+ _etag;
195
+ }
196
+ }
197
+ html:li {
198
+ value: item;
199
+ }
200
+ expected: |
201
+ print("<ul>\n")
202
+ <% foreach (item in list) {%>
203
+ print(" <html:li>")
204
+ print(<%=item%>)
205
+ print("</html:li>\n")
206
+ <% }%>
207
+ print("</ul>\n")
208
+
209
+
210
+ ###
211
+ - name: selector4
212
+ desc: selectr - combination of marking, classname, and tagname
213
+ pdata: |
214
+ <ul id="mark:list">
215
+ <ol>
216
+ <li class="item">foo</li>
217
+ </ol>
218
+ </ul>
219
+ plogic: |
220
+ #list, ol, .item {
221
+ logic: {
222
+ foreach (item in list) {
223
+ _elem
224
+ }
225
+ }
226
+ }
227
+ li {
228
+ value: item;
229
+ }
230
+ expected: |
231
+ <% foreach (item in list) {%>
232
+ print("<ul>\n")
233
+ <% foreach (item in list) {%>
234
+ print(" <ol>\n")
235
+ <% foreach (item in list) {%>
236
+ print(" <li class=\"item\">")
237
+ print(<%=item%>)
238
+ print("</li>\n")
239
+ <% }%>
240
+ print(" </ol>\n")
241
+ <% }%>
242
+ print("</ul>\n")
243
+ <% }%>
244
+
245
+
246
+ # --------------------------------------------------------------------------------
247
+
248
+ ###
249
+ - name: convert11
152
250
  desc: empty logic
153
251
  pdata: |
154
252
  <div>
@@ -168,6 +266,57 @@
168
266
  print("<div>\n")
169
267
  print("</div>\n")
170
268
 
269
+ ###
270
+ - name: convert12
271
+ desc: "'#DOCUMENT' and 'logic:'"
272
+ pdata: |
273
+ <html>
274
+ <body>
275
+ <h1 id="mark:title">...title...</h1>
276
+ <p>...</p>
277
+ <div id="mark:content">
278
+ <table>
279
+ <tr id="mark:list">
280
+ <td id="mark:item"></td>
281
+ </tr>
282
+ </table>
283
+ </div>
284
+ </body>
285
+ </html>
286
+ plogic: |
287
+ #DOCUMENT {
288
+ logic: {
289
+ _element(title)
290
+ _content(content)
291
+ }
292
+ }
293
+ #title {
294
+ value: title;
295
+ }
296
+ #list {
297
+ logic: {
298
+ for item in list
299
+ _elem
300
+ end
301
+ }
302
+ }
303
+ #item {
304
+ value: item;
305
+ }
306
+ expected: |
307
+ print(" <h1>")
308
+ print(<%=title%>)
309
+ print("</h1>\n")
310
+ print(" <table>\n")
311
+ <% for item in list%>
312
+ print(" <tr>\n")
313
+ print(" <td>")
314
+ print(<%=item%>)
315
+ print("</td>\n")
316
+ print(" </tr>\n")
317
+ <% end%>
318
+ print(" </table>\n")
319
+
171
320
 
172
321
  # --------------------------------------------------------------------------------
173
322
 
@@ -1,6 +1,6 @@
1
1
  ###
2
- ### $Rev: 117 $
3
- ### $Release: 3.1.2 $
2
+ ### $Rev$
3
+ ### $Release: 3.2.0 $
4
4
  ### copyright(c) 2004-2006 kuwata-lab.com all rights reserved
5
5
  ###
6
6
 
@@ -50,6 +50,7 @@
50
50
  {{*${expr}*}}
51
51
  {{*<c:out value="${expr}" escapeXml="false"/>*}}
52
52
 
53
+
53
54
  ###
54
55
  - name: stag
55
56
  subject: stag, Stag, STAG
@@ -102,6 +103,8 @@
102
103
  {{*${expr}*}}foo</b>
103
104
  {{*<c:out value="${expr}" escapeXml="false"/>*}}foo</b>
104
105
 
106
+
107
+ ###
105
108
  - name: etag
106
109
  subject: etag, Etag, ETAG
107
110
  desc: |
@@ -153,6 +156,7 @@
153
156
  <b>foo{{*${expr}*}}
154
157
  <b>foo{{*<c:out value="${expr}" escapeXml="false"/>*}}
155
158
 
159
+
156
160
  ###
157
161
  - name: cont
158
162
  subject: cont, Cont, CONT
@@ -205,6 +209,7 @@
205
209
  <b>{{*${expr}*}}</b>
206
210
  <b>{{*<c:out value="${expr}" escapeXml="false"/>*}}</b>
207
211
 
212
+
208
213
  ###
209
214
  - name: value
210
215
  subject: value, Value, VALUE
@@ -254,6 +259,7 @@
254
259
  <b>{{*${expr}*}}</b>
255
260
  <b>{{*<c:out value="${expr}" escapeXml="false"/>*}}</b>
256
261
 
262
+
257
263
  ###
258
264
  - name: foreach
259
265
  subject: foreach
@@ -369,6 +375,7 @@
369
375
  </tr>
370
376
  {{*</c:forEach>*}}
371
377
 
378
+
372
379
  ###
373
380
  - name: list
374
381
  subject: list
@@ -462,6 +469,7 @@
462
469
  {{*</c:forEach>*}}
463
470
  </tr>
464
471
 
472
+
465
473
  ###
466
474
  - name: foreach_ctr
467
475
  subject: Foreach, List
@@ -573,6 +581,7 @@
573
581
  {{*</c:forEach>*}}
574
582
  </tr>
575
583
 
584
+
576
585
  ###
577
586
  - name: foreach_tgl
578
587
  subject: FOREACH, LIST
@@ -695,6 +704,7 @@
695
704
  {{*</c:forEach>*}}
696
705
  </tr>
697
706
 
707
+
698
708
  ###
699
709
  - name: while
700
710
  subject: while, loop
@@ -779,6 +789,7 @@
779
789
  jstl: |
780
790
  *** not supported ***
781
791
 
792
+
782
793
  ###
783
794
  - name: if
784
795
  subject: if-then-else
@@ -894,6 +905,7 @@
894
905
  </div>
895
906
  {{*</c:otherwise></c:choose>*}}
896
907
 
908
+
897
909
  ###
898
910
  - name: set
899
911
  subject: set
@@ -946,6 +958,7 @@
946
958
  <td>${color}</td>
947
959
  </tr>
948
960
 
961
+
949
962
  ###
950
963
  - name: mark
951
964
  subject: mark
@@ -998,6 +1011,7 @@
998
1011
  <li>foo</li>
999
1012
  </ul>
1000
1013
 
1014
+
1001
1015
  ###
1002
1016
  - name: attr
1003
1017
  subject: attr, Attr, ATTR
@@ -1075,6 +1089,7 @@
1075
1089
  </tr>
1076
1090
  </c:forEach>
1077
1091
 
1092
+
1078
1093
  ###
1079
1094
  - name: append
1080
1095
  subject: append, Append, APPEND
@@ -1129,6 +1144,7 @@
1129
1144
  <input type="checkbox"{{*${flag1 ? ' checked=\'checked\'' : ''}*}}>
1130
1145
  # <input type="checkbox" name="flag" value="y"${flag1 ? ' checked=\'checked\'' : ''}>
1131
1146
 
1147
+
1132
1148
  ###
1133
1149
  - name: dummy
1134
1150
  subject: dummy
@@ -1188,6 +1204,7 @@
1188
1204
  <li>foo</li>
1189
1205
  </ul>
1190
1206
 
1207
+
1191
1208
  ###
1192
1209
  - name: default
1193
1210
  subject: default, Default, DEFAULT
@@ -1225,6 +1242,7 @@
1225
1242
  jstl: |
1226
1243
  name: <em>{{*<c:out value="${user}" default="Guest"/>*}}</em>
1227
1244
 
1245
+
1228
1246
  ###
1229
1247
  - name: replace
1230
1248
  common: yes
@@ -1300,6 +1318,7 @@
1300
1318
 
1301
1319
  jstl: *replace1_expected
1302
1320
 
1321
+
1303
1322
  ###
1304
1323
  - name: replace2
1305
1324
  hide: yes
@@ -1394,3 +1413,206 @@
1394
1413
  eperl: *expected1
1395
1414
 
1396
1415
  jstl: *expected1
1416
+
1417
+
1418
+ ###
1419
+ - name: expr
1420
+ subject: Language-independent Directive
1421
+ desc: |
1422
+ Some directives can be language-independent.
1423
+
1424
+ .* 'mark' and 'replace_(element|content)_with_(element|content)' directives can be
1425
+ language-independent because their argument is element name which is
1426
+ language-independent.
1427
+ .* 'dummy' directive can be language-independent because it takes dummy argument.
1428
+ .* 'value', 'elem', 'stag', 'etag', 'cont', and 'default' directives can be
1429
+ language-independent if their expression argument is one of the following format.
1430
+ .- {{,variable,}}
1431
+ .- {{,object.property,}}
1432
+ .- {{,hash['key'],}}, {{,hash["key"],}}, {{,hash[:key],}}
1433
+ .- {{,array[123],}}, {{,array[var],}}
1434
+
1435
+ Language-independent directives are always described with id attribute.
1436
+
1437
+ pdata*:
1438
+ eruby: &expr_pdata|
1439
+ <p id="value:user">foo</p>
1440
+ <p id="value:user.name">foo</p>
1441
+ <p id="value:user['name']">foo</p>
1442
+ <p id="value:user[:name]">foo</p>
1443
+ <p id="value:user[0]">foo</p>
1444
+ <p id="value:user[index]">foo</p>
1445
+ php: *expr_pdata
1446
+ jstl: *expr_pdata
1447
+ eperl: *expr_pdata
1448
+
1449
+ expected*:
1450
+ eruby: |
1451
+ <p><%= user %></p>
1452
+ <p><%= user.name %></p>
1453
+ <p><%= user['name'] %></p>
1454
+ <p><%= user[:name] %></p>
1455
+ <p><%= user[0] %></p>
1456
+ <p><%= user[index] %></p>
1457
+
1458
+ php: |
1459
+ <p><?php echo $user; ?></p>
1460
+ <p><?php echo $user->name; ?></p>
1461
+ <p><?php echo $user['name']; ?></p>
1462
+ <p><?php echo $user['name']; ?></p>
1463
+ <p><?php echo $user[0]; ?></p>
1464
+ <p><?php echo $user[$index]; ?></p>
1465
+
1466
+ eperl: |
1467
+ <p><?= $user !></p>
1468
+ <p><?= $user->{name} !></p>
1469
+ <p><?= $user{'name'} !></p>
1470
+ <p><?= $user{'name'} !></p>
1471
+ <p><?= $user[0] !></p>
1472
+ <p><?= $user[$index] !></p>
1473
+
1474
+ jstl: |
1475
+ <p>${user}</p>
1476
+ <p>${user.name}</p>
1477
+ <p>${user['name']}</p>
1478
+ <p>${user['name']}</p>
1479
+ <p>${user[0]}</p>
1480
+ <p>${user[index]}</p>
1481
+
1482
+
1483
+ ###
1484
+ - name: expr2
1485
+ hide: yes
1486
+ subject: Language-independent Directive
1487
+ desc: |
1488
+
1489
+ pdata*:
1490
+ eruby: &expr2_pdata |
1491
+ <p id="value:user.name">foo</p>
1492
+ <p id="Value:user['name']">foo</p>
1493
+ <p id="VALUE:user[:name]">foo</p>
1494
+
1495
+ <p id="elem:user.name">foo</p>
1496
+ <p id="Elem:user['name']">foo</p>
1497
+ <p id="ELEM:user[:name]">foo</p>
1498
+
1499
+ <p id="cont:user.name">foo</p>
1500
+ <p id="Cont:user['name']">foo</p>
1501
+ <p id="CONT:user[:name]">foo</p>
1502
+
1503
+ <p id="stag:user.name">foo</p>
1504
+ <p id="Stag:user['name']">foo</p>
1505
+ <p id="STAG:user[:name]">foo</p>
1506
+
1507
+ <p id="etag:user.name">foo</p>
1508
+ <p id="Etag:user['name']">foo</p>
1509
+ <p id="ETAG:user[:name]">foo</p>
1510
+
1511
+ <p id="default:user.name">foo</p>
1512
+ <p id="Default:user['name']">foo</p>
1513
+ <p id="DEFAULT:user[:name]">foo</p>
1514
+ php: *expr2_pdata
1515
+ jstl: *expr2_pdata
1516
+ eperl: *expr2_pdata
1517
+
1518
+ expected*:
1519
+ eruby: |
1520
+ <p><%= user.name %></p>
1521
+ <p><%=h user['name'] %></p>
1522
+ <p><%= user[:name] %></p>
1523
+
1524
+ <%= user.name %>
1525
+ <%=h user['name'] %>
1526
+ <%= user[:name] %>
1527
+
1528
+ <p><%= user.name %></p>
1529
+ <p><%=h user['name'] %></p>
1530
+ <p><%= user[:name] %></p>
1531
+
1532
+ <%= user.name %>foo</p>
1533
+ <%=h user['name'] %>foo</p>
1534
+ <%= user[:name] %>foo</p>
1535
+
1536
+ <p>foo<%= user.name %>
1537
+ <p>foo<%=h user['name'] %>
1538
+ <p>foo<%= user[:name] %>
1539
+
1540
+ <p><% if (user.name) && !(user.name).to_s.empty? then %><%= user.name %><% else %>foo<% end %></p>
1541
+ <p><% if (user['name']) && !(user['name']).to_s.empty? then %><%=h user['name'] %><% else %>foo<% end %></p>
1542
+ <p><% if (user[:name]) && !(user[:name]).to_s.empty? then %><%= user[:name] %><% else %>foo<% end %></p>
1543
+
1544
+ php: |
1545
+ <p><?php echo $user->name; ?></p>
1546
+ <p><?php echo htmlspecialchars($user['name']); ?></p>
1547
+ <p><?php echo $user['name']; ?></p>
1548
+
1549
+ <?php echo $user->name; ?>
1550
+ <?php echo htmlspecialchars($user['name']); ?>
1551
+ <?php echo $user['name']; ?>
1552
+
1553
+ <p><?php echo $user->name; ?></p>
1554
+ <p><?php echo htmlspecialchars($user['name']); ?></p>
1555
+ <p><?php echo $user['name']; ?></p>
1556
+
1557
+ <?php echo $user->name; ?>foo</p>
1558
+ <?php echo htmlspecialchars($user['name']); ?>foo</p>
1559
+ <?php echo $user['name']; ?>foo</p>
1560
+
1561
+ <p>foo<?php echo $user->name; ?>
1562
+ <p>foo<?php echo htmlspecialchars($user['name']); ?>
1563
+ <p>foo<?php echo $user['name']; ?>
1564
+
1565
+ <p><?php if ($user->name) { ?><?php echo $user->name; ?><?php } else { ?>foo<?php } ?></p>
1566
+ <p><?php if ($user['name']) { ?><?php echo htmlspecialchars($user['name']); ?><?php } else { ?>foo<?php } ?></p>
1567
+ <p><?php if ($user['name']) { ?><?php echo $user['name']; ?><?php } else { ?>foo<?php } ?></p>
1568
+
1569
+ eperl: |
1570
+ <p><?= $user->{name} !></p>
1571
+ <p><?= encode_entities($user{'name'}) !></p>
1572
+ <p><?= $user{'name'} !></p>
1573
+
1574
+ <?= $user->{name} !>
1575
+ <?= encode_entities($user{'name'}) !>
1576
+ <?= $user{'name'} !>
1577
+
1578
+ <p><?= $user->{name} !></p>
1579
+ <p><?= encode_entities($user{'name'}) !></p>
1580
+ <p><?= $user{'name'} !></p>
1581
+
1582
+ <?= $user->{name} !>foo</p>
1583
+ <?= encode_entities($user{'name'}) !>foo</p>
1584
+ <?= $user{'name'} !>foo</p>
1585
+
1586
+ <p>foo<?= $user->{name} !>
1587
+ <p>foo<?= encode_entities($user{'name'}) !>
1588
+ <p>foo<?= $user{'name'} !>
1589
+
1590
+ <p><? if ($user->{name}) { !><?= $user->{name} !><? } else { !>foo<? } !></p>
1591
+ <p><? if ($user{'name'}) { !><?= encode_entities($user{'name'}) !><? } else { !>foo<? } !></p>
1592
+ <p><? if ($user{'name'}) { !><?= $user{'name'} !><? } else { !>foo<? } !></p>
1593
+
1594
+ jstl: |
1595
+ <p>${user.name}</p>
1596
+ <p>${user['name']}</p>
1597
+ <p><c:out value="${user['name']}" escapeXml="false"/></p>
1598
+
1599
+ ${user.name}
1600
+ ${user['name']}
1601
+ <c:out value="${user['name']}" escapeXml="false"/>
1602
+
1603
+ <p>${user.name}</p>
1604
+ <p>${user['name']}</p>
1605
+ <p><c:out value="${user['name']}" escapeXml="false"/></p>
1606
+
1607
+ ${user.name}foo</p>
1608
+ ${user['name']}foo</p>
1609
+ <c:out value="${user['name']}" escapeXml="false"/>foo</p>
1610
+
1611
+ <p>foo${user.name}
1612
+ <p>foo${user['name']}
1613
+ <p>foo<c:out value="${user['name']}" escapeXml="false"/>
1614
+
1615
+ <p><c:out value="${user.name}" default="foo"/></p>
1616
+ <p><c:out value="${user['name']}" escapeXml="true" default="foo"/></p>
1617
+ <p><c:out value="${user['name']}" escapeXml="false" default="foo"/></p>
1618
+